定义单词部分的连字符规则

定义单词部分的连字符规则

人们可以在 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”的单词中添加一个自由连字符点。事实上,如下例所示,我们可以轻松地将该函数推广,以便它处理所有包含字母ao后跟philia或的单词phobia

这种方法对文档的唯一限制是,您不能创建和使用包含以下字符串的宏:、、aphilia和/或。例如,设置或肯定会抛出错误消息。但愿这个限制并不完全具有约束力。顺便说一句,名为、、和/或的宏就没问题……aphobiaophiliaophobia\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}

相关内容