LaTeX 运行(使用 varioref)从未稳定下来

LaTeX 运行(使用 varioref)从未稳定下来

这是在我正在使用的文档中真实发生的事情瓦里雷夫。运行永无止境,由于使用时的选项LaTeX,文本块不断地在分页符之间来回移动(每次自然都会有一些变化)(可以创建一个类似的例子而不使用这个可选参数)。[above]\vpageref

此示例旨在实现此效果,但它最初再次出现在一份真实的文档中。

\documentclass{article}
\usepackage{varioref}
\usepackage{lipsum}

\begin{document}
\begin{center}
  \Large\bfseries Never ending \LaTeX{} runs.
\end{center}

\lipsum[1-3]

Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi. 

\begin{verbatim}
Nam dui ligula, fringilla a, euismod sodales, sollicitudin
vel, wisi. Morbi auctor lorem non justo. Nam lacus libero,
pretium at, lobortis vitae, ultricies et, tellus. Donec
aliquet, tortor sed accumsan bibendum, erat ligula aliquet
magna, vitae ornare odio metus a mi. Donec aliquet, tortor
sed accumsan bibendum, erat ligula aliquet magna, vitae
ornare odio metus a mi. Donec aliquet, tortor sed accumsan
Donec aliquet, tortor sed accumsan
Donec aliquet, tortor sed accumsan
Donec aliquet, tortor sed accumsan
The magic formula is now obtained.
\end{verbatim}

\begin{figure}[ht!]
  \centering
  \fbox{\rule{0pt}{5cm}\rule{5cm}{0pt}}
  \caption {Some stuff}
  \label{table}
\end{figure}

Nam dui ligula, fringilla a, euismod sodales, sollicitudin
vel, wisi. This beautiful magic formula has been put in a
float which appears \vpageref[above]{table}. 

And here is some more stuff.
\end{document}

两张照片是交替进行的LaTeX运行结果。

永无止境的 vario 1

事实上,该图位于下一页。

永无止境的变异

不不不,这个图就在上面!

让我想到那个问题

我的问题是:在您的使用经验中,这种情况是否经常发生varioref?是否可以合理地将其限定为varioref可以通过将一些额外数据写入辅助文件来检测问题的功能?

答案1

这是我所说的“不可能的文档”的一个很好的例子,即任何布局规范都没有有效表示内容的文档。每当内容呈现依赖于内容位置时,就会发生这种问题。在这个特殊情况下,图形的位置导致引用字符串的长度不同(使用时会改变位置)。varioref发生这种情况的可能性高于其他文档(因为引用会显示明显的长度变化(不是以线性方式增加)。

然而这种现象绝不仅限于使用varioref:这是原始输入的一种变化,导致与仅使用基础 LaTeX 出现同样的问题。

\documentclass{article}

\pagenumbering{roman}
\setcounter{page}{99}

\usepackage{lipsum}

\begin{document}
\begin{center}
  \Large\bfseries Never ending \LaTeX{} runs.
\end{center}

\lipsum[1-3]


Nam dui ligula, fringilla a, euismod sodales, sollicitudin
vel, wisi. Morb i. This beautiful magic formula has been put in 
figure~\ref{table} which appears on page \pageref{table}. 


\begin{figure}[ht!]
  \centering
  \fbox{\rule{0pt}{4cm}\rule{5cm}{0pt}}
  \caption {Some stuff}
  \label{table}
\end{figure}

And here is some more stuff.
\end{document}

这将给我们

在此处输入图片描述

这是错误的,因为该图位于第“xcix”页,而不是第“c”页,后面跟着

在此处输入图片描述

这也是错误的,因为现在图已移至第“c”页。

但是,还有许多其他可能性来构建“不可能的文档”,基本上您需要的所有内容格式都违反了“线性”行为,即,如果移动到文档中“稍后”的位置则需要更少的空间(或导致其他一些较早的对象需要更少的空间,就像上面的情况一样)。

一个很好的候选者是段落分割算法:由于它是全局优化的,所以可以删除一个或两个单词并得到长度增加的段落。

关于这个问题:“这能自动检测到吗?”实际上不能,至少不是 100% 可靠。从外部来看,你可以/需要做的是验证全部辅助文件在两次不同的运行之间保持不变,并且视觉结果(例如,生成的 pdf 或 dvi)相同(时间戳除外)。但这里的问题是“所有辅助“不仅仅意味着.aux文件和包可以自由使用其他辅助文件在运行之间进行通信。此外,您还可以在文档中添加随机性,例如,使用格式化运行的日期和时间作为输入的一部分。

顺便说一句,LaTeX Companion 并未声称varioref能够识别所有这些情况,它仅讨论了最常见的情况,即引用字符串在各个页面之间中断,而包会给出错误。

相关内容