Tengwar フォントによるページ番号付け

Tengwar フォントによるページ番号付け

JRR Tolkien によって開発された型システムを TeX とその拡張機能で使用するのは困難ですが、可能です。 1 つの解決策はパッケージですtengwarscript。 表記システムに関して興味深いのは、対応する数値システムが 10 進数ではなく 12 進数であることです。

ページ数を対応する文字に自動的に変換しようとした人はいるでしょうか。残念ながら、現在の私の TeX に関する知識では、そのようなことを実装するには不十分です。誰か助けてくれませんか?

答え1

完全にはわかりませんが、私が理解している限りでは、Tengwar では 12 を基数とする記数法が使用されるだけでなく、最下位の桁が左側に配置されます。

次のコードは、\tengwarnumeral数値を Tengwar の対応する数値に変換するユーザー マクロを作成します。このマクロは、まず数値を Tengwar 数値の 1 桁を表すシーケンスに変換し (桁の順序はすでに反転されています)、次にこのシーケンス内の文字列をパッケージを使用して正しいグリフに置き換えますtengwarscript

\documentclass{article}
\pdfmapfile{=tengwarscript.map}
\usepackage[annatar]{tengwarscript}

\ExplSyntaxOn
\int_new:N \l_tengwarnumeral_tempa_int
\int_new:N \l_tengwarnumeral_tempb_int
\seq_new:N \l_tengwarnumeral_tengwardigits_seq

\NewDocumentCommand { \tengwarnumeral } { m } { 
    \seq_clear:N \l_tengwarnumeral_tengwardigits_seq
    \int_set:Nn \l_tengwarnumeral_tempa_int { #1 }
    \int_do_until:nn { \l_tengwarnumeral_tempa_int <= 0 } {
        \int_set:Nn \l_tengwarnumeral_tempb_int { \int_mod:nn { \l_tengwarnumeral_tempa_int } { 12 } }
        \int_compare:nNnTF \l_tengwarnumeral_tempb_int = { 0 } {
            \int_sub:Nn \l_tengwarnumeral_tempa_int { 12 } 
        } {
            \int_sub:Nn \l_tengwarnumeral_tempa_int { \l_tengwarnumeral_tempb_int } 
        }
        \int_set:Nn \l_tengwarnumeral_tempa_int { \int_div_truncate:nn \l_tengwarnumeral_tempa_int { 12 } }
        \seq_put_right:Nx \l_tengwarnumeral_tengwardigits_seq { \int_use:N \l_tengwarnumeral_tempb_int } 
    }
    \seq_map_inline:Nn \l_tengwarnumeral_tengwardigits_seq {
        \str_case:nn { ##1 } {
            { 0 } { \Tzero }
            { 1 } { \Tone }
            { 2 } { \Ttwo }
            { 3 } { \Tthree }
            { 4 } { \Tfour }
            { 5 } { \Tfive }
            { 6 } { \Tsix }
            { 7 } { \Tseven }
            { 8 } { \Teight }
            { 9 } { \Tnine }
            { 10 } { \Tten }
            { 11 } { \Televen }
        }
    }
}
\ExplSyntaxOff

\begin{document}

\tengwarnumeral{3}

% is 12 + 3, so should be: 3 1
\tengwarnumeral{15}

% is 1728 + 144 + 120 + 3, so should be: 3 10 1 1
\tengwarnumeral{1995}

\end{document}

ここに画像の説明を入力してください


Tengwar TelcontarなどのUnicode風フォントを使用する場合はfontspec、マクロの2番目の部分で変換が行われる部分を次のように調整できます(また、Tengwar数字が割り当てられるUnicodeコードポイントも追加しました)。最新のエンコード提案受け入れられるでしょう):

\documentclass{article}
\usepackage{fontspec}
\newfontfamily\tengwarfont{tengtelc.ttf}

\ExplSyntaxOn
\int_new:N \l_tengwarnumeral_tempa_int
\int_new:N \l_tengwarnumeral_tempb_int
\seq_new:N \l_tengwarnumeral_tengwardigits_seq

\NewDocumentCommand { \tengwarnumeral } { m } { 
    \seq_clear:N \l_tengwarnumeral_tengwardigits_seq
    \int_set:Nn \l_tengwarnumeral_tempa_int { #1 }
    \int_do_until:nn { \l_tengwarnumeral_tempa_int <= 0 } {
        \int_set:Nn \l_tengwarnumeral_tempb_int { \int_mod:nn { \l_tengwarnumeral_tempa_int } { 12 } }
        \int_compare:nNnTF \l_tengwarnumeral_tempb_int = { 0 } {
            \int_sub:Nn \l_tengwarnumeral_tempa_int { 12 } 
        } {
            \int_sub:Nn \l_tengwarnumeral_tempa_int { \l_tengwarnumeral_tempb_int } 
        }
        \int_set:Nn \l_tengwarnumeral_tempa_int { \int_div_truncate:nn \l_tengwarnumeral_tempa_int { 12 } }
        \seq_put_right:Nx \l_tengwarnumeral_tengwardigits_seq { \int_use:N \l_tengwarnumeral_tempb_int } 
    }
    \group_begin:
    \tengwarfont
    \seq_map_inline:Nn \l_tengwarnumeral_tengwardigits_seq {
        \str_case:nn { ##1 } {
            { 0 } { \char"E070 } % \char"160B0
            { 1 } { \char"E071 } % \char"160B3
            { 2 } { \char"E072 } % \char"160E2
            { 3 } { \char"E073 } % \char"160E3
            { 4 } { \char"E074 } % \char"160E4
            { 5 } { \char"E075 } % \char"160E5
            { 6 } { \char"E076 } % \char"160E6
            { 7 } { \char"E077 } % \char"160E7
            { 8 } { \char"E078 } % \char"160E8
            { 9 } { \char"E079 } % \char"160E9
            { 10 } { \char"E07A } % \char"160EA
            { 11 } { \char"E07B } % \char"160EB
        }
    }
    \group_end:
}
\ExplSyntaxOff

\begin{document}

\tengwarnumeral{3}

% is 12 + 3, so should be: 3 1
\tengwarnumeral{15}

% is 1728 + 144 + 120 + 3, so should be: 3 10 1 1
\tengwarnumeral{1995}

\end{document}

関連情報