交叉引用时的前导零

交叉引用时的前导零

我有一个自定义计数器,并以前导零输出。当我引用它时,我得到了一些非常奇怪的输出,但枚举本身可以正常工作。

前言:

\newcounter{reqcount}
\setcounter{reqcount}{3}

\newcommand{\threedigits}[1]{%
    \ifnum #1<100 0\fi%
    \ifnum #1<10 0\fi%
    \number#1}

文档

\refstepcounter{reqcount}\label{req}
[DR-\threedigits{\arabic{reqcount}}] % Works, outputs [DR-001]
[DR-{\ref{req}}] % Outputs [DR-4<100 04<10 004]

有人发布了这个答案,但被删除了。我不知道为什么,但是下面的代码可以工作,而上面的代码却不行。

\documentclass{article}

\newcounter{reqcount}
\setcounter{reqcount}{0}

\newcommand{\threedigits}[1]%
{%
    \ifnum #1<10 00%
    \else%
        \ifnum #1<100 0%
        \fi%
    \fi%
    \number#1%
}

\newcommand\DR[1]% macro to typeset a new DR item
{%
    \refstepcounter{reqcount}\label{DR:#1}%
    [DR-\threedigits{\value{reqcount}}]%
}

\makeatletter
\newcommand\refDR[1]% macro to cross-reference to a particular DR item
{%
        [DR-\expandafter\threedigits\ref{DR:#1}]%
}
\makeatother

\begin{document}

%.... 88 DR items later
\setcounter{reqcount}{1}

\DR{foo} blah blah

As seen in~\refDR{foo}, blah blah blah

\end{document}

答案1

虽然我不完全了解您的实际需要,但我仍然想展示您在问题中添加的可接受解决方案的替代方案。

我将定义一个计数器表示命令(如\arabic),该命令打印至少三位数字的计数器值,并重新定义相应的\the<counter>宏以使用它。为此,需要定义两个命令(请参阅如何制作自定义计数器显示类型?):

\makeatletter
\newcommand*\threedigits[1]{\expandafter\@threedigits\csname c@#1\endcsname}
\newcommand*\@threedigits[1]{%
  \ifnum#1<100 0\fi
  \ifnum#1<10 0\fi
  \number#1%
}
\makeatother

例如,您可以这样说,\threedigits{section}或者在您的案例中\threedigits{reqcount}。如果您然后重新定义\thereqcount

\renewcommand*\thereqcount{[DR-\threedigits{reqcount}]}

您可以简单地使用标准\ref来获得所需的输出:

\documentclass{article}

\makeatletter
\newcommand*\threedigits[1]{\expandafter\@threedigits\csname c@#1\endcsname}
\newcommand*\@threedigits[1]{%
  \ifnum#1<100 0\fi
  \ifnum#1<10 0\fi
  \number#1%
}
\makeatother

\newcounter{reqcount}
\renewcommand*\thereqcount{[DR-\threedigits{reqcount}]}
\newcommand*\DR{\refstepcounter{reqcount}\thereqcount}

\begin{document}

\setcounter{reqcount}{37}

\DR\label{DR:foo} blah blah

As seen in~\ref{DR:foo}, blah blah blah

\end{document}

相关内容