LaTeX 手册中充满了诸如Fig.~5
或 之类的例子Thm.~10
。波浪号完全禁止在缩写后换行,以确保读者不会看到行末的句号并认为当前句子已经结束并且下一行已编号。但是,有时最好在句号后换行,因为其他替代方案可能更糟糕,例如,当长文本 Probl.~1.2.3.4.5.6
超出页边距时,出版商理所当然地表示它退出了打印区域或可见区域。
有什么优雅的方式可以告诉 LaTeX 仅在排版变得非常糟糕时才在句号后停顿?例如,有没有更好、更简短、更优雅的方式表达Probl.\@\penalty5000\ 1.2.3.4.5.6
?我在这里随机取了 5000;请随意调整这个数字(并说明为什么如果您调整它,您会取不同的值)。当然,我们希望解决方案能够发挥作用,无论我们使用法语还是英语间距,最好是使用 cleveref。我的尝试:
\documentclass{article}
\usepackage{float}
\usepackage{cleveref}
\crefname{figure}{Fig.\@\penalty5000}{Figs.\@\penalty5000}
\showoutput
\begin{document}
\nonfrenchspacing%% to have the most general solution
See Fig.\@\penalty5000\ \labelcref{figure_label}\@.%% Not elegant at all
\begin{figure}[H]
\caption{No, this has nothing to do with the manual ``See Figure 1''. Don't search for it online, please.}
\label{figure_label}
\end{figure}
See \cref{figure_label}. %% Produces \penalty5000\penalty10000 in the output :-(.
Consider the last \namecref{figure_label}%%% Let's say the sentence is logically over. In this case, having a huge \penalty5000\penalty10000 here is simply wrong.
\end{document}
答案1
您可以使用\nolinebreak[3]
,发布\@highpenalty
,其标准值为 301。
我认为 5000 不是一个好的值,但您可以尝试高于 301 的值。
\documentclass{article}
\usepackage{cleveref}
\crefname{figure}{Fig.\nolinebreak[3]}{Figs.\nolinebreak[3]}
\begin{document}
\begin{figure}[htp]
\caption{No, this has nothing to do with the manual ``See Figure 1''.
Don't search for it online, please.}\label{figure_label}
\end{figure}
See \cref{figure_label}.
Consider the last \namecref{figure_label}.
\medskip
\parbox[t]{0pt}{See \cref{figure_label}.}
\medskip
\parbox[t]{4.2em}{See \cref{figure_label}.}
\medskip
\parbox[t]{4.5em}{See \cref{figure_label}.}
\end{document}
你不需要\@
,因为cleveref
会照顾它。
你也可以得到同样的
\crefname{figure}{Fig.\penalty5000 }{Figs.\penalty5000 }
注意常数 5000 后面的空格。