我有一些非常特殊的连字符难题,涉及括号旁边的可选连字符。
(semi)group
应以连字符形式显示为(semi-)
/group
di[rected ]graph
应以连字符形式显示为di-
/[rected ]graph
或者di[rec-
/ted ]graph
或者<di[rected]
/graph
或di[rected]-
/graph
- 我无法决定>(无论哪种连字符都可以导致最均匀的单词间距,LaTeX 都会在这三种可能性中进行选择)
我怎样才能实现这样的连字?
笔记:任何以最普遍的形式解决这个问题的人(特别是@egreg 答案中提到的细节)可能都想要设置\righthyphenmin=2
。
答案1
一种更通用的策略,不需要改变内部表。
定义两个命令:
\newcommand{\semigroup}{(semi\discretionary{-)}{}{)}group}
\newcommand{\digraph}{di\-[rec\-ted~]graph}
对于第二个,通常就足够了。对于第一个,需要\-
更强大的:\discretionary
\discretionary{<prebreak>}{<postbreak>}{<nobreak>}
如果在可自由选择的项目处发生换行(用于连字符),则文本<prebreak>
将位于该行的末尾,而<postbreak>
文本将位于下一行的开头;否则<nobreak>
将使用。
\semigroup{}
如果后面有空格,请不要忘记输入。
如果您改变主意,\digraph
那么更改其定义会比在文档中寻找它更容易。
\digraph
允许在右括号后使用连字符的另一种定义可能是
\newcommand{\digraph}{di\-[rec\-ted\discretionary{]-}{}{\kern.3em]}graph}
(文本中不能有灵活空格<nobreak>
)。
我认为不常用的“单词”如“(伪)科学”(完整的“伪科学”通常不带连字符)不需要特殊处理:文本完成后更容易决定是否使用连字符。但是,您可以制定自己的命令:
\makeatletter
\newcommand{\myallowhy}{\nobreak\hskip\z@skip}
\makeatother
\newcommand{\spword}[1]{(#1\discretionary{-)}{}{)}\myallowhy}
并将其输入为
\spword{pseudo}scientific
“伪”部分永远不会被连字符连接。如果需要,只需将定义更改为
\makeatletter
\newcommand{\myallowhy}{\nobreak\hskip\z@skip}
\makeatother
\newcommand{\spword}[1]{(#1\myallowhy\discretionary{-)}{}{)}\myallowhy}
为了对“(computer-)aided”(连字符:com·put·er和aid·ed)做同样的事情(即保留所有的连字符可能性),难的连字符,可以定义
\newcommand{\spwordH}[1]{(#1\myallowhy\discretionary{-)}{}{-)}\myallowhy}
注意: 的定义\myallowhy
是以 Babel 为模型的,\allowhyphens
但这里不能使用,因为在 T1 编码生效时它是无操作的。
因为在其用途得到合理证明\nobreak
后才会被使用。\makeatletter
答案2
\lccode`\(`\(
\lccode`\)`\)
\lccode`\[`\[
\lccode`\]`\]
\hyphenation{(semi-)group di-[rec-ted}
\showhyphens{(semi)group di[rected ]graph}
\bye
显示可能的连字点为
[] \tenrm (semi-)group di-[rec-ted ]graph