
JRR Tolkien이 개발한 유형 시스템을 TeX 및 확장과 함께 사용하는 것은 까다롭지만 가능합니다. 한 가지 해결책은 패키지입니다 tengwarscript
. 이제 쓰기 체계에서 흥미로운 점은 해당 숫자 체계가 10진수가 아니라 12진수라는 것입니다.
페이지 수를 해당 문자로 자동 변환하려고 시도한 사람이 있는지 궁금합니다. 불행히도 TeX에 대한 나의 현재 지식은 그런 것을 구현하기에 충분하지 않습니다. 누군가 나를 도와줄 수 있나요?
답변1
완전히 확신할 수는 없지만 내가 아는 한 Tengwar는 12를 밑으로 하는 숫자 체계를 사용할 뿐만 아니라 최하위 숫자를 왼쪽에 배치합니다.
다음 코드는 \tengwarnumeral
숫자를 Tengwar 대응 숫자로 변환하는 사용자 매크로를 생성합니다. 먼저 숫자를 Tengwar 숫자의 한 자리(자릿수 순서가 이미 반전되어 있음)를 나타내는 시퀀스로 변환한 다음 패키지를 사용하여 이 시퀀스의 문자열을 올바른 문자 모양으로 바꿉니다 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와 같은 유니코드 기반 글꼴을 사용하려는 경우 fontspec
변환이 발생하는 매크로의 두 번째 부분을 다음과 같이 조정할 수 있습니다. (또한 Tengwar 숫자가 할당될 유니코드 코드 포인트도 추가했습니다.최신 인코딩 제안허용됩니다):
\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}