在不同位置重现部分

在不同位置重现部分

我想\section在稍后的位置重现一个,其编号与原始位置相同。我试过了

\newsavebox{\meinebox}
\savebox{\meinebox}[80mm][l]{\section{Hier}}
\usebox{\meinebox}
A lot of text.
\usebox{\meinebox}

但 LaTeX 给出了错误,

LaTeX Error: Something's wrong--perhaps a missing \item.

答案1

如果您希望重现某个章节标题(包括其“编号”)而不在目录中生成新条目,则可以按照以下 MWE(最小工作示例)所示进行操作:

\documentclass{article}
\newcounter{mycounter} % counter to save section number 
\newcommand\myheader{Some header}

\begin{document}
\tableofcontents

\section{\myheader}
\setcounter{mycounter}{\value{section}} % save section number
A lot of text.

\section{Other}
Yet more text.

\section*{\arabic{mycounter}\quad\myheader}
\end{document}

在此处输入图片描述

答案2

错误的原因在于它\section只能在垂直模式下工作,并\savebox使用受限的水平模式。给它一个宽度不会改变这一点。你可以minipage在 savebox 中使用环境来让垂直模式处于内部:

\documentclass{article}

\newsavebox{\meinebox}

\begin{document}

\begin{lrbox}{\meinebox}
  \begin{minipage}{\linewidth}
    \section{Hier}
  \end{minipage}
\end{lrbox}

\noindent\usebox{\meinebox}
A lot of text.
\par\noindent
\usebox{\meinebox}

\end{document}

但是,这不会产生与\section正常使用相同的结果,因为\usebox强制水平模式。更好的方法是使用垂直的savebox,但 LaTeX 本身不提供此功能。您需要使用 TeX 基元来实现此功能:

\documentclass{article}

\newsavebox{\meinebox}

\begin{document}

\setbox\meinebox\vbox{%
    \section{Hier}
}

\copy\meinebox
A lot of text.
\par
\copy\meinebox

\end{document}

不过,我根本不建议使用盒子,而是将计数器重置section为以前的值。

\documentclass{article}

\newcounter{mysection}

\begin{document}

\setcounter{mysection}{\value{section}}
\section{Hier}
A lot of text.

\section{Other}

\setcounter{section}{\value{mysection}}
\section{Hier}

\end{document}

对于 LaTeX 来说,计数器始终是全局的,因此您需要备份正确的部分计数以备之后需要:

\documentclass{article}

\newcounter{mysection}
\newcounter{mysectionbackup}

\begin{document}

\setcounter{mysection}{\value{section}}
\section{Hier}
A lot of text.

\section{Other}

\setcounter{mysectionbackup}{\value{section}}
\setcounter{section}{\value{mysection}}
\section{Hier}
\setcounter{section}{\value{mysectionbackup}}

\section{Third}

\end{document}

请注意,所有解决方案都会导致章节引用、超链接和 PDF 书签出现问题,因为章节计数器或其标签被使用了两次。

答案3

您可以将部分文本放在单独的文件中,并\include重复\input两次。第二次,您将在包含\setcounter{section}{whatever}之前用代码包围它,并在之后重置它。

如果您知道第一次出现的节号和第二次出现的节号,那么这种方法就行得通。如果这些数字是动态计算的\LaTeX,并且在您编辑文档时会发生变化,那么您需要记住它们以供以后使用 - 有点棘手但完全可行 - 请参阅上面的@Werner 的评论以了解如何操作。

相关内容