我想\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 的评论以了解如何操作。