不幸的是,为了使所有标签和引用正确,必须多次编译 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}