文档需要无数次编译器传递吗?

文档需要无数次编译器传递吗?

不幸的是,为了使所有标签和引用正确,必须多次编译 LaTeX 文件。据我所知,只要 TeX 警告“标签可能已更改”,就应该继续编译,两三次可能不够。

是否可以编写一个永不稳定的 LaTeX 文档,即无论我编译它多少次,它都会继续抱怨标签已改变?

我正在考虑类似这样的事情:\pageref{something}用大字体书写的内容从第 9 页移动到第 10 页,这需要更长的时间来排版,从而使相应的标签更改页面等等无限地

答案1

为了完整起见,这是一个既不使用比例阿拉伯数字也不使用 bibtex/Roman 页码/条件的示例。

%! TEX program = pdflatex
\documentclass{article}
\usepackage{lipsum}
\usepackage{color}
\begin{document}
\lipsum[1-48]

Embarking on a journey, humanity delves into the
mysteries of existence. In the expansive realm of
human understanding, the intricacies of quantum
mechanics and neurobiology converge, offering
glimpses into the mysteries of
\label{a}\textcolor{red}{the} universe. Amidst
the pages of exploration, on page
\textcolor{red}{\pageref{a}}, fundamental concepts
intertwine, inviting curiosity and sparking
intellectual endeavors. Within this captivating
tapestry, the relentless pursuit of understanding
continues, fueled by the perpetual quest for
enlightenment and innovation.
\end{document}

(使用 ChatGPT 生成的一些无意义的文本看起来比口述文本更有趣。)

输出:(动态GIF图像)

输出

剩余挑战:

  • 使周期长度不为 2 的东西

答案2

进行显式\ifthenelse测试会使文档看起来像是故意循环。即使文件内没有显式条件切换,交叉引用也可能不会收敛。例如本文档。

\documentclass{article}

\pagenumbering{Roman}
\begin{document}

a\clearpage b\clearpage c\clearpage

\begin{figure}[!t]
\framebox(200,430){}
\caption{a figure to take up space}
\end{figure}


Some interesting text about  something in Section \ref{x},
which starts on page \pageref{x}.

\section{zzz\label{x}}
The text of an interesting section.
\end{document}

或者这个版本使用阿拉伯比例数字

\documentclass[a5paper]{article}
\usepackage{cfr-lm}
\renewcommand\shapedefault{it}
\begin{document}

\section{Introduction}

\title{test}

\tableofcontents

\clearpage

\section{Zzz}
more text\\
more text

\subsection{Zzzz}
more text\\
more text\\
more text

\subsection{Zzzzz}
more text\\
more text\\
more text\\
more text\\
more text\\
more text

\subsection{Zzzzzz}
more text\\
more text

There is some text, in
Section~\ref{z} on page~\pageref{z}.
That has a, b, c.

\section{ZZZ\label{z}}
A, B, C.

\end{document}

答案3

快速测试一些东西,这似乎每次编译时都会发出警告。

\documentclass{article}
\usepackage{ifthen}
\begin{document}
\newcommand{\tes}[1]{\ifthenelse{\equal{#1}{1}}{\Huge A}{\small A}}
\vspace*{.95\textheight}
\tes{\pageref{test}}
\label{test}
\end{document}

所以看起来这是可行的。基本上,\tes如果标签在第 1 页,则在标签前面放置一个巨大的 A,将其位置移到第 2 页。如果它在第 2 页,则\tes在它前面放置一个小的 A,将其移回第 1 页。稍微修改了代码,不再需要 lipsum,现在只使用 vspace。如果您只是运行,latex file.tex您将看到每次运行后输出在 1 页 dvi 和 2 页 dvi 之间切换。

答案4

为了好玩。另请参阅LaTeX 运行(使用 varioref)从未稳定下来

\documentclass[a4paper]{article}
\usepackage{geometry}

\begin{document}

\pagenumbering{Roman}
I\clearpage
II\clearpage
III\clearpage
IV\clearpage
V\clearpage
VI\clearpage
VII\clearpage

\section{foo}

xxxx xxxx 
xxxx xxxx 
xxxx xxxx 
xxxx xxxx 
xxxx xxxx 
xxxx xxxx xxxx xx
See section on page~\pageref{bar}

\vspace*{17.4cm}

\section{bar}\label{bar}

Where am I ?

\end{document}

相关内容