我正在尝试创建 LaTeX3 等效版本\two@digits
。以下是我所拥有的:
\documentclass{article}
\ExplSyntaxOn
%% Write a 0 for #1 is < 10
\cs_new:Nn \__erc_twodigits:N
{
\int_compare:nNnTF { #1 } < { 10 } { 0 } { } #1
}
\NewDocumentCommand{\typeset} { }
{
\__erc_twodigits:N \c_sys_month_int
}
\ExplSyntaxOff
\begin{document}
\typeset
\end{document}
现在\c_sys_month_int
应该扩展为一个整数,整个构造应该扩展为08
(8 月)。我希望将此扩展写入带有的文件\iow_now
。\typeset
仅在此处提供用户土地功能。
答案1
您的代码中只是缺少一个\int_use:N
(如果整数保证大于或等于零)。
我还添加了一个n
-type 变体,使用\int_eval:n
类似建议的@JosephWright。
\documentclass{article}
\ExplSyntaxOn
%% Write a 0 for #1 is < 10
\cs_new:Npn \__erc_twodigits:N #1
{
\int_compare:nNnT #1 < { 10 } { 0 } \int_use:N #1
}
\cs_new:Npn \__erc_twodigits:n #1
{
\int_compare:nNnT {#1} < { 10 } { 0 } \int_eval:n {#1}
}
\NewDocumentCommand{\typeset} { }
{
\__erc_twodigits:N \c_sys_month_int
}
\ExplSyntaxOff
\begin{document}
\typeset
\end{document}
答案2
这是一个通用的填充宏,它以任何整数(显式或隐式)作为参数,并在开头添加零(如果数字的数量少于要求的数量)并在开头保留一个可能的减号。
\documentclass{article}
\ExplSyntaxOn
\cs_new:Nn \jodb_ndigits:nn
{ % #1 = number of digits, #2 = integer
\int_compare:nT { #2 < 0 } { - }
\prg_replicate:nn
{
\int_max:nn { #1 - \str_count:e { \int_abs:n { #2 } } } { 0 }
}
{
0
}
\int_abs:n { #2 }
}
\cs_generate_variant:Nn \str_count:n { e }
\NewExpandableDocumentCommand{\padding}{O{2}m}
{
\jodb_ndigits:nn { #1 } { #2 }
}
\ExplSyntaxOff
\begin{document}
\padding[2]{\month}
\padding[3]{1234}
\padding[3]{-\month}
\padding[2]{0}
\edef\test{\padding[4]{\day}}
\texttt{\meaning\test}
\end{document}
这个想法是将整数的绝对值字符串化,并在需要时添加零。