如何制作假标签

如何制作假标签

我有一个 .tex 文档,其中包含一些对不存在标签的引用。例如,它可能有\ref*{some:string},但没有\label{some:string}。这导致在生成 PDF 时打印双问号??。这些引用过去指向一个超大的附录,我没有将其包括在此文档的简短版本中。不过,我希望能够打印正确的章节编号,而不是??

因此,我创建了一个命令,创建一个仅包含缺失标签的空方程式并赋予其所需的标签,以便我可以将标签字符串链接到正确的部分编号。

\newcommand{\dummylabel}[2]{\begin{equation*}\tag{#2}\label{#1}\end{equation*}}

在我的文档的某个部分,我有一个这样的列表\dummylabel,如下所示:

\dummylabel{some:string1}{A.1}
\dummylabel{some:string2}{C}
...

但是,这有打印编号的空方程式的副作用(尽管我使用带星号的方程式环境),这是我不想要的。

那么,有没有办法隐藏这些空的方程式?或者,有没有其他方法可以为这些引用创建标签手动为它们提供标签/编号,以便在生成 PDF 时它会打印该标签而不是??

请注意,这些参考文献都带有星号(\ref*{...}),因此实际上并没有创建超链接,这很好。

答案1

当然,您需要手动定义参考。

\documentclass{article}

\makeatletter
\newcommand{\dummylabel}[2]{\def\@currentlabel{#2}\label{#1}}
\makeatother

\begin{document}

\dummylabel{some:string1}{A.1}
\dummylabel{some:string2}{C}

Here are references to the dummy labels: \ref{some:string1} and \ref{some:string2}

\end{document}

在此处输入图片描述

如果您加载hyperref,请使用\ref*以便不建立链接。

解释:\label{foo}使foo指的是 的当前值\@currentlabel;通常是\refstepcounter设置\@currentlabel,但人们可以将其设置为任何想要的值。

警告。命令\dummylabel应该放在之后\begin{document},因为在序言中该.aux文件不可写入。

您也可以将其放置\dummylabel在底部,就在之前\end{document}

答案2

我使用 @Ulrike Fischer 的 hack 解决了同样的问题压缩文本.tex。这是下面代码中的注释部分。我定义了另一个命令来保留原始命令\ref,并且如果标签不存在,则可以添加额外内容

\documentclass{report}

\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{xparse}
\makeatletter
\NewDocumentCommand{\checkref}{mmO{\ref{#1}}}{\@ifundefined{r@#1}{#2}{#3}}
%\AtBeginDocument{\let\Oriref\ref
%   \renewcommand\ref[1]{%
%       \@ifundefined{r@#1}
%       {no label #1}
%       {ref of #1: \Oriref{#1}}}}
\makeatother

\begin{document}
    \section{one}\label{testyes}
    \ref{testyes}
    
    \ref{testno}
    
    
    \checkref{testyes}{NO}
    \checkref{testyes}{NO}[YES]
    
    \checkref{testno}{NO}[YES]
\end{document}

相关内容