使用标签

使用标签

我不太清楚问题是什么,所以我只发布一个 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

在其最小或默认形式中,\labels 仅存储计数器及其所在的页面,前者可通过 检索\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}

相关内容