仅使用一个第一个标签

仅使用一个第一个标签

我从不同的文件中ìnput两次包含 (via) 相同的内容pgfplot。一次在文本中,一次在附录中的更详细视图中。由于标签是在额外文件中定义的,因此使用最新的标签(附录中的标签)。

我希望第二个输入不会重新定义标签。我该如何实现该行为?

答案1

您可以进行设置,以便标签本身能够执行正确的操作:

\begin{filecontents}{\jobname-extra}
\begin{figure}[htp]
\centering
\includegraphics[width=3cm]{example-image}

\singlelabel{extra}{\caption{An image}}
\end{figure}
\end{filecontents}

\documentclass{article}
\usepackage{graphicx}

\makeatletter
\newcommand{\singlelabel}[2]{%
  \ifcsname singlelabel#1\endcsname
    % the file has already been read
    \@namedef{the\@captype}{\ref{#1}}%
    #2%
  \else
    #2\label{#1}
    \global\@namedef{singlelabel#1}{}%
  \fi
}
\makeatother

\begin{document}

\section{Title}

\input{\jobname-extra}

\appendix

\section{Title again}

\input{\jobname-extra}

\end{document}

我以前filecontents只是为了使示例独立起来。

在此处输入图片描述

编号将与原始图形相同。如果您想要独立编号,只需注释掉

\@namedef{the\@captype}{\ref{#1}}%

线

答案2

这是一个解决方案。

\documentclass{article}
\makeatletter
\def\@newl@bel#1#2#3{{%
  \@ifundefined{#1@#2}%
    {\global\@namedef{#1@#2}{#3}}%
    {\gdef \@multiplelabels {%
       \@latex@warning@no@line{There were multiply-defined labels}}%
     \@latex@warning@no@line{Label `#2' multiply defined}}%
  }}
\makeatother
\begin{document}
\section{foo bar}\label{foo}
\subsection{foo baz}\label{foo}

\ref{foo}
\end{document} 

解释Latex 的\labelcal 内部命令\@newl@bel

\def\@newl@bel#1#2#3{{%
  \@ifundefined{#1@#2}%
    \relax
    {\gdef \@multiplelabels {%
       \@latex@warning@no@line{There were multiply-defined labels}}%
     \@latex@warning@no@line{Label `#2' multiply defined}}%
  \global\@namedef{#1@#2}{#3}}}

这类似于ifundefined{label}{do nothing}{produce warning}然后全局定义标签(以便最后使用)。

可以重新定义这个命令为ifundefined{label}{globaly define the label}{produce warning}

相关内容