![禁止 LaTeX 在 \ref 前自动换行](https://linux22.com/image/357327/%E7%A6%81%E6%AD%A2%20LaTeX%20%E5%9C%A8%20%5Cref%20%E5%89%8D%E8%87%AA%E5%8A%A8%E6%8D%A2%E8%A1%8C.png)
是否有可能制作 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 在他们的论文中写道将段落分成几行七种典型情况下,应该输入连字符(在印刷文献中也称为“辅助空格”)。您可以自己阅读论文中的示例,但在大多数情况下,它们并不容易自动化(省略下面的美元符号,以突出显示连字符):
-
Theorem~A
但Programs E and~F
-
string~s of length~l
但string~s of length l~or more
-
of~x
但of u~and~v
-
is~15
但is 15~times the height
;for all large~n
但for all n~greater than~m
他们得出的结论是:
如果能将这七条规则归结为一两条就好了,如果这些规则可以自动化,那么打字时就不用使用它们了,那就更好了;但在许多这样的情况下,似乎都涉及到微妙的语义考虑。
和
似乎是时候恢复这种古老的精美印刷传统了。
作者最近的经验表明,在将手稿输入计算机时插入辅助空格不会带来太大的额外负担。谨慎使用这些空格实际上可能会让键盘操作员的工作满意度更高,因为输出质量可以显著提高,而工作量却相对较少。有时知道机器需要你的帮助会让人感到欣慰。