我有一个自定义计数器,并以前导零输出。当我引用它时,我得到了一些非常奇怪的输出,但枚举本身可以正常工作。
前言:
\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}