人们可以在 LaTeX 文档的前言中定义单个单词的最佳连字,当行长不合适时会使用它。
\hyphenation{biblio-philia} % Just an example
如果我想要更加通用并为单词部分定义连字符,该怎么办:
% not real but imagined command:
\hyphenation{.+o-philia$}
在任何以以下词结尾的单词中添加任意连字符友爱之后o?
答案1
你可以使用 Luatex 来查看图案的效果
Underfull \hbox (badness 10000) in paragraph at lines 8--8
[] \TU/lmr/m/n/10 bibliophilia bibliophilias thingophilia
Underfull \hbox (badness 10000) in paragraph at lines 13--13
[] \TU/lmr/m/n/10 biblio-philia bibliophilias thingophilia
Underfull \hbox (badness 10000) in paragraph at lines 18--18
[] \TU/lmr/m/n/10 biblio-philia bibliophilias thingo-philia
Underfull \hbox (badness 10000) in paragraph at lines 25--25
[] \TU/lmr/m/n/10 biblio-philia biblio-philias thingo-philia
这是来自的终端输出
% don't use the default US English patterns as biblio-philia already allowed there
% which spoils the example
\newlanguage\zzz
\language\zzz
% nothing hyphenates
\showhyphens{bibliophilia bibliophilias thingophilia}
\hyphenation{biblio-philia}
% just bibliophilia
\showhyphens{bibliophilia bibliophilias thingophilia}
\patterns{o9philia.}% tied to end of word
% bibliophilia and thingophilia hyphenate
\showhyphens{bibliophilia bibliophilias thingophilia}
\newlanguage\zzzb
\language\zzzb
\patterns{o9philia}% not tied to end of word
% all hyphenate
\showhyphens{bibliophilia bibliophilias thingophilia}
\stop
本质上,相同的代码可以与 pdflatex 或 xelatex 一起使用,但您必须修改语言文件并使用 initex 构建新格式,而不能\patterns
在使用经典 tex 的普通 tex 运行中使用它。
答案2
如果您可以自由地从 XeLaTeX 切换到 LuaLaTeX,那么设置一个 Lua 函数很简单,该函数会在包含“ophilia”的单词中添加一个自由连字符点。事实上,如下例所示,我们可以轻松地将该函数推广,以便它处理所有包含字母a
或o
后跟philia
或的单词phobia
。
这种方法对文档的唯一限制是,您不能创建和使用包含以下字符串的宏:、、aphilia
和/或。例如,设置或肯定会抛出错误消息。但愿这个限制并不完全具有约束力。顺便说一句,名为、、和/或的宏就没问题……aphobia
ophilia
ophobia
\newcommand{\agoraphobia}{zzz}
\newcommand{\arachnophilia}{yyy}
\phobia
\philia
\AgoraPhobia
\ArachnoPhilia
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function ophilia ( s )
s = s:gsub ( "([ao])(philia)" , "%1\\-%2" )
s = s:gsub ( "([ao])(phobia)" , "%1\\-%2" )
return s
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback(
"process_input_buffer", ophilia, "ophilia" )}}
%% just for this example:
\setlength{\textwidth}{1mm}
\setlength{\parindent}{0pt}
\begin{document}
bibliophilia cryptophilia necrophilia agoraphilia
bibliophobia cryptophobia necrophobia agoraphobia
\end{document}