是否有一个(简单的)方法来生成 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。