禁止 LaTeX 在 \ref 前自动换行

禁止 LaTeX 在 \ref 前自动换行

是否有可能制作 LaTeX自动地在参考文献和引文之前不要换行吗?

长解释(仅供参考,引用类似):

假设我有以下一行 LaTeX:The brown fox jumps over another fox which is green \ref{sec: study about jumping foxes}.

根据各种参数,LaTeX 可能会决定在单词“green”之后立即换行,这样我的引用就会出现在下一行。因为这看起来很丑,所以我可以~在 green 之后插入一个,以禁止换行。

但是当我有大量参考文献时,这样做很乏味。我可以让 LaTeX 自动避免这种换行吗?
预处理解决方案将是我将采取的最后一个强力解决方案,其中脚本会重写我的代码,并~在文本中的所有参考文献之前放置 。但如果可能的话,我真的不想走这条路,因为它看起来相当丑陋和不雅致。

答案1

以下方法可能会有效:

\let\realref=\ref
\def\ref{\unskip~\realref}

例如,此文档显示了差异:

\documentclass{article}
\begin{document}
\section{Study}
\label{sec: study about jumping foxes}
Dummy paragraph.

\frenchspacing \hsize=25em % Just to illustrate the next bit

The brown fox jumps over another fox which is green \ref{sec: study about jumping foxes}. This is interesting. The quick brown fox jumps over the lazy dog.

\let\realref=\ref
\def\ref{\unskip~\realref}

The brown fox jumps over another fox which is green \ref{sec: study about jumping foxes}. This is interesting. The quick brown fox jumps over the lazy dog.
\end{document}

排版输出

在新的 中\ref, 会\unskip删除在 之前键入的不需要的(可破坏的)空格插入的粘连\ref,然后我们继续进行与~\ref首先正确键入的操作相当的操作。

(我还没有使用大型文档在生产中测试过这一点,而且据我所知,一些 LaTeX 宏可能会被破解。)


在我看来,尽管上述方法可能有效,但最好进行全局搜索和替换,将 适当地放在~每个 之前\ref。养成在它们所属位置正确输入 的习惯会更好~。关心你的输出是实现精美排版的唯一方法;有太多主观考虑无法自动化。

TeX 的创建者 Donald Knuth 与他的合著者 Michael Plass 在他们的论文中写道将段落分成几行七种典型情况下,应该输入连字符(在印刷文献中也称为“辅助空格”)。您可以自己阅读论文中的示例,但在大多数情况下,它们并不容易自动化(省略下面的美元符号,以突出显示连字符):

    1. Theorem~APrograms E and~F
    1. string~s of length~lstring~s of length l~or more
    1. of~xof u~and~v
    1. is~15is 15~times the heightfor all large~nfor all n~greater than~m

他们得出的结论是:

如果能将这七条规则归结为一两条就好了,如果这些规则可以自动化,那么打字时就不用使用它们了,那就更好了;但在许多这样的情况下,似乎都涉及到微妙的语义考虑。

似乎是时候恢复这种古老的精美印刷传统了。

作者最近的经验表明,在将手稿输入计算机时插入辅助空格不会带来太大的额外负担。谨慎使用这些空格实际上可能会让键盘操作员的工作满意度更高,因为输出质量可以显著提高,而工作量却相对较少。有时知道机器需要你的帮助会让人感到欣慰。

相关内容