Typst:日本語用にnumberingを拡張したやつ
Typstのnumbering関数の拡張版にあたるja-numbering関数を提供する。この関数は、標準のnumberingがサポートするカウンタスタイルに加えて、日本でよく使われる他のカウンタスタイル(例えば丸数字“①、②、③……”など)をサポートする。
同様の機能をもつ既存パッケージとしてnumberingxがあるが、numberingxが独自の書式文字列の文法を採用しているのに対して、本パッケージはnumbering関数の書式文字列の文法をそのまま踏襲している。すなわち、書式文字列内ではカウンタスタイルの部分は特定のUnicode文字1つ(例えば“①”)で表される。
全項目インポートの形式を想定している。
#import "@local/bxbango:0.1.0": *-
ja-numbering(«書式», «カウンタ値»...)(function): 指定の書式文字列に従ってカウンタ値を出力する。引数:
«書式»(str): 書式文字列。Typst標準のnumbering関数のformatと同様の文法に従うが、日本語用にカウンタ記号(counting symbol)がいくつか追加されている。«カウンタ値»(int; 可変長): カウンタの値。実際には任意の整数が指定できる。
オプション引数:
custum(dictionary; 既定値(:)): カスタムのカウンタ記号を指定する。引数には「カウンタ記号(Unicode文字1つからなる文字列)をキー、スタイル関数を値とする辞書」を指定する。スタイル関数とは「カウンタ値の整数をカウンタ表現の文字列(またはcontent)に変換する関数」のことである。base(string; 既定値"japanese"): 有効なカウンタ記号のセットを限定する。"japanese": カスタムのもの、本パッケージ提供のもの、Typst標準のものが(この優先順で)全て有効になる。"standard": カスタムのもの、Typst標準のものだけが有効になる。"none": カスタムのものだけ有効になる。
返り値(str | content): カウンタ値の表現。
※contentを出力するようなカスタム記号を利用しない限り、返り値は文字列になるはずである。 -
bango(module): より高度な機能を提供するためのサブモジュール。
Typst標準のnumberingで使えるカウンタ記号はja-numberingでも有効である。それらに加えて以下のカウンタ記号が利用できる。
- W3C Group Note「Ready-made Counter Styles」(以下では“Ready-made”と呼ぶ)で規定されているスタイル:
一甲㊀㈠あいアイ㋐十壱aAaA⒜①ⓐⒶ⒈⓵❶1ⅰⅠ⑴ - LaTeXの[japanese-otfパッケージ]で規定されているスタイル:
㈰🅰♳🄐㊐🅐🄰 - その他のスタイル:
㋑亿
規則が明らかな文字が多いが、いくつか補足しておく。
一: 位取り記数法に基づく漢数字表記(2024→“二〇二四”)。いわゆる“一〇方式”。
※例外的に、これはTypst標準のカウンタ記号を非互換な形で置き換えている。Typst標準の一は簡体字中国語の読みに基づく漢数字表記である。十: 日本語の読みに基づく漢数字表記(2024→“二千二十四”)。いわゆる“十字方式”。壱: 日本語の大字を用いた漢数字表記(2024→“弐阡弐拾四”)。
※十・壱の細則は“Ready-made”に従う。ただし有効範囲は「Typstの整数型の全範囲」に拡大されている。甲: 十干(甲、乙、丙、丁、…)。あア㋐: これらは五十音順(あ、い、う、…)に基づく。いイ㋑: これらはイロハ順(い、ろ、は、…)に基づく。㈰㊐: これらは曜日順(日、月、火、…)に基づく。亿: これはTypst標準の一の書式で、簡体字中国語の読みに基づく漢数字表記である。
Typstのカウンタの書式設定はnumbering関数を使う代わりに、要素関数(element function)の引数(numberingという名であることが多い)に書式文字列を指定する方法で行われることがある。
#set heading(numbering: "1.a")Typstの仕様として書式文字列の引数には代わりに関数を渡すことができる。書式設定としてja-numberingの機能を利用したい場合は、以下のような記述をすればよい。
#set heading(numbering: ja-numbering.with("①.a"))単純に1つの整数を指定のスタイルの文字列に変換する関数である。
“Ready-made”で規定されているスタイル。“Ready-made”でのスタイル名をそのまま関数名としている。
cjk-decimal(2024→“二〇二四”)cjk-heavenly-stem(甲、乙、丙⋯)circled-ideograph(㊀、㊁、㊂⋯)parenthesized-ideograph(㈠、㈡、㈢⋯)hiragana(あ、い、う⋯)hiragana-iroha(い、ろ、は⋯)katakana(ア、イ、ウ⋯)katakana-iroha(イ、ロ、ハ⋯)circled-katakana(㋐、㋑、㋒⋯)japanese-informal(2024→“二千二十四”)japanese-formal(2024→“弐阡弐拾四”)lower-alpha(a、b、c⋯)upper-alpha(A、B、C⋯)fullwidth-lower-alpha(a、b、c⋯)fullwidth-upper-alpha(A、B、C⋯)parenthesized-lower-latin(⒜、⒝、⒞⋯)circled-decimal(①、②、③⋯)circled-lower-latin(ⓐ、ⓑ、ⓒ⋯)circled-upper-latin(Ⓐ、Ⓑ、Ⓒ⋯)dotted-decimal(⒈、⒉、⒊⋯)double-circled-decimal(⓵、⓶、⓷⋯)filled-circled-decimal(❶、❷、❸⋯)fullwidth-decimal(1、2、3⋯)fullwidth-lower-roman(ⅰ、ⅱ、ⅲ⋯)fullwidth-upper-roman(Ⅰ、Ⅱ、Ⅲ⋯)parenthesized-decimal(⑴、⑵、⑶⋯)
japanese-otfで規定されているスタイル。
parenthesized-yobi(㈰、㈪、㈫⋯)※\ajKakkoYobifilled-squared-upper-latin(🅰、🅱、🅲⋯)※\ajKuroKakuAlphrecycle-symbol(♳、♴、♵⋯)※\ajRecycleparenthesized-upper-latin(🄐、🄑、🄒⋯)※\ajKakkoAlphcircled-yobi(㊐、㊊、㊋⋯)※\ajMaruYobifilled-circled-upper-latin(🅐、🅑、🅒⋯)※\ajKuroMaruAlphsquared-upper-latin(🄰、🄱、🄲⋯)※\ajKakuAlph
その他のスタイル。
circled-katakana-iroha(㋑、㋺、㋩⋯)
CSS Counter Styles Level 3で規定するアルゴリズムの実装。詳細については当該文献を参照されたい。
-
cyclic(«記号リスト», «値»)«記号リスト»(array): symbolsの値。«値»(int): 入力の整数値。- 返り値(str): カウンタ表現。
-
fixed(«記号リスト», «値»)«記号リスト»(array): symbolsの値。«値»(int): 入力の整数値。first(int): first symbol valueの値。- 返り値(str): カウンタ表現。
-
numeric(«記号リスト», «値»)«記号リスト»(array): symbolsの値。«値»(int): 入力の整数値。negative(str): negativeの値。- 返り値(str): カウンタ表現。
-
alphabetic(«記号リスト», «値»)«記号リスト»(array): symbolsの値。«値»(int): 入力の整数値。negative(str): negativeの値。- 返り値(str): カウンタ表現。
「Typstと同様の文法の書式文字列」を利用してカウンタ値を書式化する関数を作るための補助関数。
numbering(«検査器», «変換器», «書式», «値»...)«検査器»(function): 文字1つからなる文字列を受け取って、その文字がカウンタ記号であるかの真偽値を返す関数。«変換器»(function): 単一のカウンタ記号からなる文字列と整数値を受け取って、カウンタ表現を返す関数。«書式»(str): Typstと同様の文法の書式文字列。«値»(int); 可変長): カウンタ値。- 返り値(str|content): カウンタ値の表現。