如何对 LaTeX 警告/错误输出进行自动换行?

如何对 LaTeX 警告/错误输出进行自动换行?

这个问题导致了一个新的方案的出现:
hardwrap

在为包/类编写错误消息和警告时,我发现手动插入\MessageBreaks 是一件很麻烦的事,因为 TeX 的max_print_line值(通常设置为 79)会导致单词被粗暴地二等分。在某些情况下,无法预测应该\MessageBreak去哪里,因为警告/错误消息中的宏可能会扩展为任意长度的字符串。

我想要一个宏,它可以获取我的警告/错误消息,将其扩展(以便任何宏都可以扩展为纯字符串),并\MessageBreak根据max_print_lineLaTeX 的每行前缀(Package <XXX> Warning:及类似值)的值在适当的位置插入 s。

(如果无法从 TeX 内部访问的值max_print_line,我只会使用默认行长度值来实现贪婪的自动换行算法。)

跟进: 威尔·罗伯逊我创造了硬包装包以达到预期的效果。

答案1

我从未发布过我之前写的解决方案,但也许我应该发布。以下是示例的链接:http://gist.github.com/605753它是用普通的旧式 LaTeX 编程风格编写的;它是一段时间以前的事了,所以其中可能有一些事情我现在知道如何以更好的方式去做。

有三个示例,其中破损的文本以不同的行长排版,然后是第四个示例,其中破损的文本被打印到终端。这是不可扩展的(如果可能的话,至少可以说很困难),但对于许多目的来说,这不是问题。

代码没有文档,但只要忽略前面的所有内容,你应该就能明白它的要点\begin{document}。如果你觉得它有用,我建议我们为 CTAN 编写一个带有一些文档和更好界面的包。

答案2

这是对我上面的实际答案的正交评论;如果您有 TeX Live 2010,这将默认在 pdfTeX 中起作用以访问变量max_print_line:(MiKTeX 用户需要使用它来编译它-enable-pipes

\documentclass{article}
\begin{document}
\newcount\maxprintline
\ifnum\pdfshellescape>0
  \maxprintline=\pdfprimitive\input"|kpsewhich -var-value=max_print_line"
\else
  \maxprintline=79 % default
\fi
The variable \verb|max_print_line| is \the\maxprintline.
\end{document}

惯于如果您已经-shell-escape完全关闭(因此有该\else条款),它就可以工作,但是从我的角度来看,没有理由不总是激活受限的 shell 逃逸(因为它是默认的)。

可以使用 pdftexcmds 包以更通用的方式重写此示例,以支持 XeTeX/LuaTeX 的使用。

答案3

您无法max_print_line从 TeX 内部获取,所以这是一个开始。尝试编写自动换行算法也存在问题。Will Robertson 不久前提出了一些代码expl3,但 TeX 的扩展系统存在问题。所以我觉得你只能手动操作了!

相关内容