Seitennummerierung mit Tengwar-Schriftart

Seitennummerierung mit Tengwar-Schriftart

Die Verwendung des von JRR Tolkien entwickelten Typsystems mit TeX und seinen Erweiterungen ist schwierig, aber möglich. Eine Lösung ist das Paket tengwarscript. Das Interessante an diesem Schriftsystem ist nun, dass das entsprechende Zahlensystem nicht auf der Basis 10, sondern auf der Basis 12 basiert.

Ich frage mich, ob schon mal jemand versucht hat, die Seitenanzahl automatisch in die entsprechenden Zeichen umzurechnen. Leider reichen meine aktuellen Kenntnisse über TeX nicht aus, um so etwas umzusetzen. Kann mir jemand helfen?

Antwort1

Ich bin mir nicht ganz sicher, aber soweit ich es verstehe, verwendet Tengwar nicht nur ein Zahlensystem mit der Basis 12, sondern platziert auch die niedrigstwertige Ziffer nach links.

Der folgende Code erstellt ein Benutzermakro \tengwarnumeral, das eine Zahl in ihr Tengwar-Gegenstück umwandelt. Dies geschieht, indem die Zahl zunächst in eine Sequenz umgewandelt wird, die die einzelnen Ziffern der Tengwar-Zahl darstellt (wobei die Reihenfolge der Ziffern bereits umgekehrt ist) und dann die Zeichenfolgen in dieser Sequenz mithilfe des tengwarscriptPakets durch die richtige Glyphe ersetzt werden.

\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}

Bildbeschreibung hier eingeben


Wenn Sie Unicode-artige Schriftarten wie Tengwar Telcontar verwenden möchten fontspec, können Sie den zweiten Teil des Makros, in dem die Konvertierung stattfindet, wie folgt anpassen (ich habe auch die Unicode-Codepunkte hinzugefügt, denen die Tengwar-Ziffern zugewiesen würden, wenn dieneuester Kodierungsvorschlagwürde akzeptiert werden):

\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}

verwandte Informationen