如何使用 \ref{} 以格式化的方式引用多个计数器?

如何使用 \ref{} 以格式化的方式引用多个计数器?

我的文档中有两个计数器,counterAcounterB

我希望将我的文档中的参考资料\ref{}打印为1.a)2.等,其中数字指的是counterA,字母指的是counterB

这可能吗?我该怎么做?

\documentclass{article}
\begin{document}

\newcounter{counterA} 
\setcounter{counterA}{0}

\newcounter{counterB}
\setcounter{counterB}{0}


\refstepcounter{counterA}
\refstepcounter{counterB}
\label{First_Label}

I get: \ref{Second_Label}. I would like \textbf{2.}\,b)

Vestibulum lectus metus, tincidunt at fermentum non, pellentesque at lorem. Vivamus nisl sem, tempor ac mi et, elementum feugiat justo. Pellentesque tristique consequat molestie.


\bigskip
\refstepcounter{counterA}
\refstepcounter{counterB}
\label{Second_Label}

I get: \ref{First_Label}. I would like \textbf{1.}\,a)

Morbi nec nibh nulla. Cras posuere erat vitae lacus convallis, ut consequat urna dignissim. 
\end{document}

在此处输入图片描述

答案1

每次counterB使用\newcounter指令创建名为 的计数器变量时,LaTeX 都会设置一个名为 的宏,\p@counterB该宏可用于将一些其他信息“前缀”到标签上,以便创建交叉引用。例如,您可以输入

\makeatletter
\renewcommand\p@counterB{\thecounterA.}
\makeatother

在 LaTeX 的 当前值表示形式上加上前缀,counterA作为.LaTeX 的 值表示形式counterB

完整的 MWE:

在此处输入图片描述

\documentclass{article}
\newcounter{counterA}
\newcounter{counterB}
\renewcommand\thecounterA{\arabic{counterA}} % arabic numbering
\renewcommand\thecounterB{\alph{counterB})}  % alphabetic numbering
\makeatletter
\renewcommand\p@counterB{\thecounterA.}
\makeatother
\begin{document}
% need to increment the counters via \refstepcounter
\refstepcounter{counterA} \label{refA}
\refstepcounter{counterB} \label{refB}
Here's a cross-reference to item \ref{refB}.
\end{document}

答案2

您可以使用以下命令:

\renewcommand{\thecounterB}{\textbf{\thecounterA}.\alph{counterB})}

以下是完整的 MWE:

% arara: pdflatex
\documentclass{article}

\newcounter{counterA} 
\setcounter{counterA}{0}

\newcounter{counterB}
\setcounter{counterB}{0}

\renewcommand{\thecounterB}{\textbf{\thecounterA}.\alph{counterB})}
\begin{document}

\refstepcounter{counterA}
\refstepcounter{counterB}
\label{First_Label}

I get: \ref{Second_Label}. I would like \textbf{2.}\,b)

Vestibulum lectus metus, tincidunt at fermentum non, pellentesque at lorem. Vivamus nisl sem, tempor ac mi et, elementum feugiat justo. Pellentesque tristique consequat molestie.


\bigskip
\refstepcounter{counterA}
\refstepcounter{counterB}
\label{Second_Label}

I get: \ref{First_Label}. I would like \textbf{1.}\,a)

Morbi nec nibh nulla. Cras posuere erat vitae lacus convallis, ut consequat urna dignissim. 
\end{document}

相关内容