我有一个清单,我想在稍后重新陈述。我该如何做,而不为重新陈述的清单创建新的索引?
到目前为止,我最好的方法是将列表放两次,这样会为第二次出现创建一个新索引。如果两个重复列表的标签没有改变,这还会导致命名冲突。
\documentclass{article}
\usepackage{listings}
\begin{document}
\section{One}
\begin{lstlisting}[caption=Code,label=lst:code]
x:=1;
\end{lstlisting}
Here, we introduce Listing~\ref{lst:code}.
\section{Two}
For convenience, we restate Listing~\ref{lst:code} here.
\begin{lstlisting}[caption=Code,label=lst:code]
x:=1;
\end{lstlisting}
\end{document}
我该如何避免这种情况?
理想情况下,我希望重述列表而不必明确重复其内容(例如,对于使用 的引理,这是可能的thm-restate
)。本质上,我希望获得与这个问题,但用于列表。
答案1
一种选择是将列表的内容外部化为插入的额外文件,\lstinputlisting
并从第一个实例中设置的标签构建第二个实例的标题:
\documentclass{article}
\usepackage{listings,hyperref,filecontents}
\begin{document}
% only for MWE purposes (to create a file we can load with \lstinputlisting)
\begin{filecontents*}{mycode.pas}
x:=1;
\end{filecontents*}
\section{One}
\lstinputlisting[caption=Code,label=lst:code]{mycode.pas}
Here, we introduce Listing~\ref{lst:code}.
\section{Two}
For convenience, we restate Listing~\ref{lst:code} here.
\lstinputlisting[title=\lstlistingname~\ref{lst:code}: \nameref{lst:code}]{mycode.pas}
\end{document}