如何在数学模式下使用“BabelStone Mayan Numerals”字体中的玛雅数字和 LuaLaTeX?
答案1
经过完全转换,因此无需计算。
\documentclass{article}
\usepackage{amsmath}
\usepackage{fontspec}
\newfontface{\mayanumerals}{BabelStoneMayanNumerals}[
Path=./,
Extension=.ttf,
]
\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
\begin{document}
$\mayanumber*{12414}=\mayanumber{12414}$\qquad
$\mayanumber[align=b]{12414}$\qquad
$\mayanumber[scale=0.5]{12414}$
\bigskip
\mayanumber*{123456} is \mayanumber[horizontal]{123456}
\end{document}
如果系统已安装字体(可能还包括名称),请删除Path
和选项。Extension
如您所见,只需输入一个数字\mayanumber{<number>}
,然后宏就会负责转换。数字被转换为 20 进制,然后每个数字又被转换回 10 进制,以便将其添加到与玛雅数字 0 相对应的起点。
*-version 仅仅是对 20 进制转换的一个包装。
可用的选项包括
scale
用于放大或缩小字体;align
用于最终对齐(垂直方面);默认为c
,可以是t
或b
horizontal
用于水平打印(vertical
默认,也可以为了清晰起见指定)
答案2
从这@egreg 的回答,
\newfontface{\babm}{BabelStone Mayan Numerals}
\DeclareRobustCommand\mcero{%
\mathrel{\text{\normalfont\babm\symbol{"01D2E0}}}%
}
一位 MWE 表示:
\documentclass{article}
\usepackage{amsmath}
\usepackage{fontspec}
\newfontface{\babm}{BabelStone Mayan Numerals}
\DeclareRobustCommand\mcero{%
\mathrel{\text{\normalfont\babm\symbol{"01D2E0}}}%
}
\DeclareRobustCommand\muno{%
\mathrel{\text{\normalfont\babm\symbol{"01D2E1}}}%
}
\DeclareRobustCommand\monce{%
\mathrel{\text{\normalfont\babm\symbol{"01D2EB}}}%
}
\DeclareRobustCommand\mcatorce{%
\mathrel{\text{\normalfont\babm\symbol{"01D2EE}}}%
}
\begin{document}
$${1\text B0\text E}_{20} = \begin{matrix}
\huge\muno\\
\huge\monce\\
\huge\mcero\\
\huge\mcatorce
\end{matrix}
$$
\end{document}