函数 f(n) 返回需要 n 次编译才能产生稳定输出的 LaTeX 代码,这是什么?

函数 f(n) 返回需要 n 次编译才能产生稳定输出的 LaTeX 代码,这是什么?

是否有一个(简单的)方法来生成 LaTeX 代码,并且需要n汇编?(也就是说,我正在寻找一个算法/函数f(n)域为{1, 2, 3, ...},LaTeX 代码为其范围。)如果这能让回答变得更容易,我会很高兴得到一个需要n高于某个阈值(例如 2 或 3),因为大多数普通代码只需要运行不超过 2 或 3 次latex。理想情况下,解决方案不会太做作且易于理解;欢迎直接解决方案以及具有递归特征的解决方案。

注意:这个问题源于关于增加所需 LaTeX 编译运行次数的模式问题

答案1

这是一个小例子,您可以修改它以获得您想要的任意数量的编译:

\documentclass{article}
\usepackage{refcount}% http://ctan.org/pkg/refcount
\begin{document}
\setcounterref{section}{sec:foo}% Read label number from reference
\addtocounter{section}{-1}% Correct for stepping when issuing \section
\ifnum\value{section}<3% Modify this condition for different compiles
  \stepcounter{section}% section = section + 1
\fi
\section{A section}\label{sec:foo}% New label
\end{document}

该条件\ifnum\value{section}<3需要 4 次编译才能解决。因此,一般来说,\ifnum\value{section}<N需要 N+1 次编译。可以使示例更简单。

LaTeX 检查可能的重运行的通用方法是扫描.aux文件\enddocument并查看写入的现有标签.aux(例如mylabel)是否与当前文档/编译中的标签(存储为\r@mylabel)相匹配。如果宏定义存在任何差异,则会发出重运行警告。

为了完整起见,标签可以在同一页和同一“参考单位”内移动,并且不是触发重新运行。

答案2

文档longtable(第 4 节)给出了一个 3 列表格的示例,该列表格需要 4 次传递才能稳定(而 Latex 需要 5 次传递才能知道它已经稳定)。很容易将其推广到n-列表格进行n+1 次运行。

答案3

改编大卫·卡莱尔的在另一个问题中回答只使用正常方式即可工作pageref

在这种情况下,不需要罗马数字,因为我们只需要将文本向下推。

\documentclass{article}
\usepackage{lipsum}
\begin{document}

\lipsum[1-150]
\lipsum[1-150]
\lipsum[1-150]
\lipsum[1-96]

Some interesting text about something in section 1, which starts on page \pageref{x1}.

Some interesting text about something in section 1, which starts on page \pageref{x2}.

Some interesting text about something in section 1, which starts on page \pageref{x3}.

Some interesting text about something in section 1, which starts on page \pageref{x4}.

Some interesting text about something in section 1, which starts on page \pageref{x5}.

The text:

\label{x1}The text of an interesting section.

\label{x2}The text of an interesting section.

\label{x3}The text of an interesting section.

\label{x4}The text of an interesting section.

\label{x5}The text of an interesting section.

\end{document}

输出看起来像这样。

输出

这个只需要运行 6 次就可以稳定下来(再运行 1 次 LaTeX 就可以知道它是否稳定了),但你可以很容易地看到如何适应更大的 n...只要你能把那么多段落放进前 99 页。对于更大的文本,你可以切换到 999/1000 分隔符...但 TeX 计数器最多只支持 999999999/1000000000。

相关内容