我使用 latex 已经有很长时间了,但我总是用 latex 来编写不是特别特殊的文档。现在,情况有点不同,因为我想更改编号系统,并且希望所有页面都使用玛雅数字编号。我知道命令:
\maya{number}
会给出玛雅格式的编号。但是,这不允许我自动对每一页进行编号,除非我逐页手动向每一页添加 \maya{number}。
有人能建议去哪里查找有关这方面的知识吗?
答案1
我改编了(阅读重用)来自的代码数学模式下的玛雅数字。你需要 XeLaTeX 或 LuaLaTeX 来编译它,以及BabelStone 玛雅数字字体。代码如下:
%!TEX program = lualatex
%You can use xelatex, too
\documentclass{article}
\usepackage{amsmath}
\usepackage{fontspec}
\newfontface{\mayanumerals}{BabelStone Mayan Numerals}
\ExplSyntaxOn
\NewDocumentCommand{\mayanumber}{sO{}m}
{
\IfBooleanTF { #1 }
{
\ensuremath { \mathrm { \tl_upper_case:n { \int_to_base:nn { #3 } { 20 } }\sb{20} } }
}
{
\tatojo_maya_number:nn { #2 } { #3 }
}
}
\int_const:Nn \c__tatojo_maya_start_int { "1D2E0 }
\tl_new:N \l__tatojo_maya_converted_tl
\seq_new:N \l__tatojo_maya_digits_seq
\keys_define:nn { tatojo/maya }
{
align .tl_set:N = \l__tatojo_maya_align_tl,
align .initial:n = c,
horizontal .bool_set:N = \l__tatojo_maya_horizontal_bool,
horizontal .default:n = true,
vertical .bool_set_inverse:N = \l__tatojo_maya_horizontal_bool,
vertical .default:n = true,
scale .code:n =
{
\fp_compare:nT { #1 != 1 } { \addfontfeatures{Scale=#1} }
}
}
\cs_new_protected:Nn \tatojo_maya_number:nn
{
\mbox
{
% choose the font and set spacing to 0.5
\mayanumerals
% evaluate options
\keys_set:nn { tatojo/maya } { #1 }
% clear the sequence containing the digits
\seq_clear:N \l__tatojo_maya_digits_seq
% convert the input to base 20
\tl_set:Nx \l__tatojo_maya_converted_tl
{
\int_to_base:nn { #2 } { 20 }
}
% fill the digit sequence
\tl_map_function:NN \l__tatojo_maya_converted_tl \__tatojo_maya_adddigit:n
% print the digit sequence
\bool_if:NTF \l__tatojo_maya_horizontal_bool
{
\seq_use:Nn \l__tatojo_maya_digits_seq { }
}
{
\begin{tabular}[\l__tatojo_maya_align_tl]{@{}c@{}}
\shortstack[c]{ \seq_use:Nn \l__tatojo_maya_digits_seq { \\ } }
\end{tabular}
}
} % close the \mbox
}
\cs_new:Nn \__tatojo_maya_adddigit:n
{
\seq_put_right:Nx \l__tatojo_maya_digits_seq
{
\tatojo_maya_digit:n { \int_from_base:nn { #1 } { 20 } }
}
}
\cs_new_protected:Nn \tatojo_maya_digit:n
{
\symbol { \int_eval:n { \c__tatojo_maya_start_int + #1 } }
}
\ExplSyntaxOff
%And here's the magic
\renewcommand{\thepage}{$\mayanumber[horizontal,scale=3]{\arabic{page}}$}
\begin{document}
\Huge
\input tufte
\input knuth
\input knuth
\input tufte
\input knuth
\input knuth
\end{document}