我不太清楚问题是什么,所以我只发布一个 MWE:
\documentclass{article}
\newcommand\twolabels[2]
{
\label{my:#1}
\label{my:#2}
}
\begin{document}
\twolabels{4}{a}
I have two labels: \ref{my:4} and \ref{my:a}.
\end{document}
它没有让我参考 1 和 2,而是给了我两个 ??。我哪里做错了?
答案1
在其最小或默认形式中,\label
s 仅存储计数器及其所在的页面,前者可通过 检索\ref
,后者可通过 检索\pageref
。TeX\label
系统\ref
用于标记最后可参考的柜台并将其存储在 中\label
。如果没有最后引用的计数器(如您的情况),则不会有合适的\ref
,因此您的??
as 输出。
作为如何使用计数器引用的简要介绍,下面是一种实现结果的方法。首先,使用以下方法定义一个计数器
\newcounter{mycount}
然后,每当你想要存储计数器以供引用时,你都可以执行
\refstepcounter{mycount}
这有两个作用:将计数器增加 1(或“步进”),并添加“引用”功能或标记。现在,如果您使用\label
它,它将存储的值mycount
以及mycount
最后被\refstep
-ped 的页面。以下是在您的实例中如何工作的最小示例:
\documentclass{article}
\newcounter{mycount}
\newcommand\twolabels[2]
{
\refstepcounter{mycount}\label{my:#1}%
\refstepcounter{mycount}\label{my:#2}%
}
\begin{document}
\section{foo}
\twolabels{4}{a}
I have two labels: \ref{my:4} and \ref{my:a}.
\end{document}
现在,这并不意味着如果您想通过\label
-引用某些内容,您总是必须创建自己的计数器。相反,每当您执行 时,\ref
都会有其他计数器\refstep
。使用上面的例子,如果您刚刚放置在 之后,然后使用,您将检索文本中的节号。section
\section
\label{test}
\section
\ref{test}
1
最后,您还可以修改计数器在文本中的显示方式。例如,如果您对计数器的(小写)罗马数字感兴趣,您可以添加
\renewcommand{\themycount}{\roman{mycount}}
定义计数器后mycount
。
您需要编译两次才能使引用准确,因为信息首先存储在文件中.aux
,然后在第二次编译时检索。
答案2
\label
/机制\ref
需要一个可以引用的计数器。如果您\section
在 之后立即添加命令\begin{document}
,那么您的\twolabels
宏将创建对第 1 节的引用。
\documentclass{article}
\newcommand\twolabels[2]
{
\label{my:#1}
\label{my:#2}
}
\begin{document}
\section{foo}
\twolabels{4}{a}
I have two labels: \ref{my:4} and \ref{my:a}.
\end{document}