括号旁边的连字符

括号旁边的连字符

我有一些非常特殊的连字符难题,涉及括号旁边的可选连字符。

  • (semi)group应以连字符形式显示为(semi-)/group
  • di[rected ]graph应以连字符形式显示为di-/[rected ]graph 或者 di[rec-/ted ]graph 或者< di[rected]/graphdi[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

相关内容