Typst:参照の出力を日本語の習慣に合わせて調整する
全項目importの形でパッケージを読み込む。
#import "@local/bxjaref:0.1.0": *
その直後に以下のshow ruleを設定する。
#show: use-ja-ref
これにより、参照の出力(ref
関数またはその簡易記法の@«ラベル名»
)において、例えば節の参照は“1.2節”、図の参照は“図3”のようにsupplementの文言(“節”や“図”)が適切な位置に付けられるようになる。番号の部分(“1.2”など)の出力は従来の仕様が維持され、対象要素のnumbering
パラメタの設定に従う。
※set text(lang: "ja")
の設定が自動的に行わるため、supplementの文言は日本語になる。
※Typstの標準の仕様では、節の参照は“節 1.2”、図の参照は“図 3”のようになり、supplementは常に番号の前に欧文空白を挟んで付けられる。和文の入力ではこの空白は不要なので、bxjarefでは文言の位置を調整するとともにこの余計な空白を除去している。ただし実際に版面に出力する際には欧文と和文の間に“四分空き”が自動的に挿入されることに注意。
Typst標準のref
関数ではsupplement
引数(簡易記法においては@«ラベル名»[«内容»]
と書くと[«内容»]
の部分がsupplementになる)で個別にsupplementの文言を指定できる。bxjarefの拡張機能として、supplement
引数に?
を含めることで番号の入る位置を明示することが可能になる。
// 例えばレベル1の節見出しの参照の場合
@secA //-->"1節" (※標準では"節 1")
@secA[章] //-->"1章" ("節"や"章"は後ろに付く)
@secA[セクション] //-->"セクション1"
@secA[第?章] //-->"第1章" ("?"の部分に番号が入る)
-
use-ja-ref(«本体»)
(function): bxjarefの機能である「参照出力の日本語用調整」を有効にする。以下のshow ruleの形式での使用を想定している。#show: use-ja-ref // パラメタを指定したいなら次のようにする #show: use-ja-ref.with(placeholder: "!")
«本体»
(content): 適用対象となる内容。前述のshow ruleの形で呼び出す場合は“以降の文章全部”となる。
オプション引数:
-
target
(auto | array | function; 既定値auto
): 日本語用調整の対象となる参照種別を限定する。次の何れかを指定する。- auto: 全ての参照種別が対象となる。
- 参照種別の配列: 配列に含まれる参照種別だけが対象となる。
- 参照種別を受け取って真偽値を返す関数: 返り値が真となる参照種別だけが対象となる。
- 参照種別は要素関数(節見出しは
heading
、数式はmath.equation
)で表す。ただしfigureについてはkind
の値(image
・table
または文字列)で表す。
-
footnote-supplement
(str | content | none; 既定値none
): 脚注に対するsupplement値の既定値。
※詳細は「脚注に対する参照」節を参照。 -
placeholder
(str | none; 既定値"?"
): supplement値の中のプレースホルダー記号。
※詳細については「supplement値の取扱」節を参照。 -
add-space
(bool; 既定値false
): カウンタ出力とsupplement値の間に欧文空白を挿入するか。
※詳細については「supplement値の取扱」節を参照。 -
lang
(str | none; 既定値"ja"
): none以外を指定した場合、text.lang
にその値を設定するset ruleを実行する。
-
no-trim(«パターン»)
(function): 「numbering
関数の第1引数に指定すると、«パターン»
を指定したのと同等になるような関数」を返す。
※つまりnumbering.with(«パターン»)
と同等である。詳細については「no-trim
関数」節を参照。
参照の出力(例えば“図5”)は参照の種別を表す文言(“図”)とカウンタ出力(“5”)からなる。この参照の種別を表す文言を指定するのがref
関数のsupplement
オプション引数である。ref
の簡易記法である@«ラベル名»
では、直後に内容ブロック[...]
を書けばそれがsupplement
引数と見なされる。
supplement
引数の既定値はautoでこの場合は参照対象(例えばheading
)のsupplement
引数の値が使われ、それもautoである場合は言語により決まる既定値(日本語ではheading
は“節”)が使われる。以下では“実際にsupplementとして使われる値”のことを「supplement値」と呼ぶことにする。
Typst標準の仕様では参照出力は「supplement値+欧文空白+カウンタ出力」で構成される。(ただしsupplement値が空内容[]
である場合は欧文空白もなくカウンタ出力のみが参照出力となる。)ところが、日本語の文書ではそもそも欧文空白は余計であるし、また“5節”や“第5節”のように番号の後ろにもsupplement値を付けたい場合もあるので、この仕様では対応できない。そこで、bxjarefの日本語用調整においては、supplement値の記法を拡張して「カウンタ出力が入るべき場所をプレースホルダー記号?
で指定する」ようにした。拡張された仕様では、参照出力は以下のように構成される:
- supplement値が
?
を含まない場合:- 既定では「supplement値+カウンタ出力」となる。欧文空白は入らない。
use-ja-ref
のオプションadd-space
がtrueの場合は従来通り「supplement値+欧文空白+カウンタ出力」となる。ただしsupplement値が空(""
または[]
)の場合はカウンタ出力のみとなる。- 特例として、supplement値が“部”・“章”・“節”の何れかである場合は「カウンタ出力+supplement値」となる。この場合も
add-space
がtrueの場合は間に欧文空白が入る。
- supplement値が
?
を(1つだけ)含む場合:- supplement値の
?
をカウンタ出力に置換したテキストとなる。
※add-space
の設定は無関係である。
- supplement値の
以下に「supplement値」と「カウンタ出力が“1”である場合の参照出力」の組み合わせの例をいくつか挙げておく。
図
→ “図1”(add-space
がtrueなら“図 1”)節
→ “1節”(add-space
がtrueなら“1 節”)第?章
→ “第1章”?項
→ “1項”章?
→ “章1”Section ?
→ “Section 1”- 空 → “1”
※補足
- supplement値が複数の
?
を含む場合はエラーになる。 - プレースホルダー記号は既定では
?
であるが、use-ja-ref
のオプション引数placeholder
で変更できる。
Typst標準の動作では脚注に対する参照は他のものと異なっていて、「ある場所に付けた脚注を再度別の場所に付けるために脚注番号(合印)を出力する」という目的をもつ。
#set footnote(numbering: "1)")
春はあけぼの#footnote[脚注だよ]<fnA>。// "1)"の合印
夏はばけもの@fnA。// ここにも"1)"の合印が出力される
bxjarefでは、脚注に対する参照を他の参照種別と同じく「参照のための文言を出力する」目的に切り替える機能を提供する。bxjarefを有効にした上で脚注に対する参照のsupplement値をnone以外にすると出力が切り替わる。
#show: use-ja-ref
#set footnote(numbering: "1)")
春はあけぼの#footnote[脚注だよ]<fnA>。// "1)"の合印
@fnA[注]を参照せよ。// "注1"と出力(合印でない)
夏はばけもの@fnA。// "1)"の合印(変更なし)
なお、脚注に対するref
のsupplement
引数がautoの場合は(footnote
にはsupplement
引数はないので)use-ja-ref
関数のfootnote-supplement
引数に指定した値がsupplement値となる。このfootnote-supplement
引数の既定値はnoneである。このため“既定の場合”の動作は従来のものから変わらない。
Typst標準の仕様では、参照出力中のカウンタ書式は参照種別(例えば数式はmath.equation
)に設定されたカウンタ書式(numbering
パラメタ)を継承するが、ここでnumbering
を文字列(パターン)として指定した場合は、結果のカウンタ出力の際に「最初の接頭辞の最後の接尾辞の部分を除去する」という調整が行われる。use-ja-ref
を有効化した場合もこの仕様は維持される。
例えば、数式に対するカウンタ書式を以下のように設定したとする。
#set footnote(numbering: "1)")
#set math.equation(numbering: "(1)")
$ a + b = c $<eqA> // 数式番号"(1)"が出る
@eqA // "式1"と出力
このとき数式番号は“(1)”となるが参照の出力は“式1”となる(Typst標準の挙動では“式 1”)。ここで「接頭辞・接尾辞の除去」を回避して“式(1)”と出力させたい場合には「numbering
を敢えて関数で指定する」という方策が利用できる。
#set math.equation(numbering: numbering.with("(1)"))
関数で指定した場合は「除去」が行われないからである。
しかし上記の書き方には“敢えて面倒な書き方をする”意図が判りにくいという欠点がある。そこでbxjarefでは、意図が明確にするためnumbering.with
と同じ機能をもつno-trim
関数を用意した。
#set math.equation(numbering: no-trim("(1)"))
@eqA // "式(1)"と出力
(TODO)
- bxjarefが動作を変更するのは「参照(
ref
関数)の出力」の範囲に限られる。特に、参照対象の要素自体の出力(例えばfigureのキャプションの中の番号など)には何の影響も及ぼさないことに注意してほしい。 - 特に、参照対象要素の側の
supplement
引数を指定する際には「supplement値の拡張機能(?
の使用など)は参照出力でのみ有効である」ことに留意する必要がある。