Latex3 中 \two@digits 的对应内容

Latex3 中 \two@digits 的对应内容

我正在尝试创建 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}

在此处输入图片描述

这个想法是将整数的绝对值字符串化,并在需要时添加零。

在此处输入图片描述

相关内容