我有一个很大的文档,其段落宽度比常规的要窄(大约 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,这很可能仍未定义。