如何输出带有前导零的计数器?

如何输出带有前导零的计数器?

我可以通过以下方式在 LaTeX 文档中输出计数器的值:

\setcounter{mycounter}{1}
\arabic{mycounter}

插入一个1。但是我如何格式化输出,例如,如果mycounter小于 10,则添加前导零,类似于printf让您通过指定%02d格式字符串来执行此操作吗?

答案1

原则是

\ifnum\value{mycounter}<10 0\fi\arabic{mycounter}

如何将其实现到您的宏中取决于您想如何以及在何处使用此表示。

答案2

fmtcount包裹提供多种方式来格式化计数器(甚至将基数更改为二进制或八进制,而不是十进制)。要在计数器前面添加一堆零,请使用\padzeroes[<n>]{\decimal{<cntr>}}。这将0在计数器前面添加零<cntr>,使得最终长度为<n>\decimal{<cntr>}类似于\arabic{<cntr>}但需要与一起使用\padzeroes

\documentclass{article}
\usepackage{fmtcount}% http://ctan.org/pkg/fmtcount
\begin{document}
\newcounter{mycounter}%
\newcommand{\printcntr}{%
  \stepcounter{mycounter}%
  \padzeroes[2]{\decimal{mycounter}} &
  \padzeroes[4]{\binary{mycounter}} &
  \padzeroes[3]{\octal{mycounter}}%
}

\begin{tabular}{ccc}
  \textbf{Decimal} & \textbf{Binary} & \textbf{Octal} \\ \hline
  \printcntr \\ \printcntr \\ \printcntr \\ \printcntr \\ \printcntr \\
  \printcntr \\ \printcntr \\ \printcntr \\ \printcntr \\ \printcntr
\end{tabular}  
\end{document}

不同进制的计数器,前面加上零 0

答案3

LaTeX 识别宏\two@digits

\documentclass{article}
\newcounter{mycounter}
\makeatletter
    
\renewcommand\themycounter{\two@digits{\value{mycounter}}}
    
\makeatother
    

\newcommand\Test{\stepcounter{mycounter}\themycounter\ }
\begin{document}
\Test
\Test
\Test

\end{document}

答案4

您可以将pgf其用于此目的。它有一个\pgfmathsetbasenumberlength用于基数转换宏的设置。将其设置为 2 并对计数器值进行虚拟转换为十进制数将为您提供0102、... 、10等。它还可以很好地扩展,即您只需使用 3 即可获得001等。但是,对于较小的东西,我会改用 egreg 的解决方案。

\documentclass{article}

\usepackage{pgf}

\newcounter{mycounter}
\newcommand\test{{%
    \pgfmathsetbasenumberlength{2}% try 3, 4, ...
    \pgfmathbasetodec\testvalue{\the\value{mycounter}}{10}%
    \testvalue
    \stepcounter{mycounter}%
}}

\begin{document}

\test

\test

\test

\test

\test

\test

\test

\test

\test

\test

\test


\end{document}

另请参阅 PGF 手册第 66 节号码印刷这对你来说也应该很有趣。

相关内容