有没有什么方法可以禁用自动(“自由中断”)连字,同时允许/强制 TeX 中断一些选定的单词?

有没有什么方法可以禁用自动(“自由中断”)连字,同时允许/强制 TeX 中断一些选定的单词?

我有一个很大的文档,其段落宽度比常规的要窄(大约 5 个平均单词长),并且我想禁用连字,但又没有机会允许对选定的单词进行连字(通常是由于不允许连字并且没有足够的容忍度,导致 TeX 产生可怕的溢出框)。

我知道我可以使用禁用连字符,\hyphenpenalty=10000但我甚至无法让 TeX 对任何内容进行连字符连接,即使是明确地(或者我可以吗?)

本质上,我想要一个白名单连字策略. 无需使用任何连字符,除了我选择的单词、我选择的位置和我选择的连字符模式。

我已尝试过\hyphenpenalty=9999,但 TeX 仍然能够偶尔对某些单词进行连字符连接。

我使用 MikTex,并使用 Xetex 和 polyglossia,但我不确定这是否很重要。

谢谢。

答案1

这是一种可以实现您想要的操作的方法:

\RequirePackage[english=nohyphenation]{hyphsubst}
\documentclass[twocolumn]{article}
\usepackage[english]{babel}

\hyphenation{adip-is-cing}

\usepackage{lipsum}

\begin{document}
\lipsum
\end{document}

在此处输入图片描述

如您所见,只有adipiscing带连字符,因为已经定义了它的例外。

在文本主体中您仍然可以使用它\-来标记允许的连字符点。


如果nohyphenation“语言”没有定义,请添加一些魔法:

\makeatletter
\@ifundefined{l@nohyphenation}{\chardef\l@nohyphenation=\@cclv}{}
\makeatother
\RequirePackage[english=nohyphenation]{hyphsubst}
\documentclass[twocolumn]{article}
\usepackage[english]{babel}

\hyphenation{adip-is-cing}

\usepackage{lipsum}

\begin{document}
\lipsum
\end{document}

我认为,MiKTeX 也应该像 TeX Live 一样默认提供一种没有连字符模式的语言;也许可以从其控制面板启用它。上面的代码分配nohyphenation给语言 255,这很可能仍未定义。

相关内容