![使用 \discretionary 组合单词内部连字](https://linux22.com/image/480381/%E4%BD%BF%E7%94%A8%20%5Cdiscretionary%20%E7%BB%84%E5%90%88%E5%8D%95%E8%AF%8D%E5%86%85%E9%83%A8%E8%BF%9E%E5%AD%97.png)
我一直在抄写一本古老的公共领域小说,并试图使用 Latex 将其排版得尽可能接近该书的原始格式。我采用了 Memoir 模板并为此进行了修改,但我并不是 Latex 专家。这本小说的一个特点是通常使用 em 破折号来表示旁白,而破折号前面或后面的单词之间没有任何空格,如下所示:
当我排版此内容时(仅在文件中使用长划线字符“—”),它导致 Latex 将“邻居—即”视为一个不会拆分的大词,从而导致行大量延伸到边距。为了解决这个问题,我使用命令\discretionary
来允许拆分这些(基于这个答案)像这样:
\let\emdash\textemdash
\renewcommand{\textemdash}{\discretionary{\emdash}{}{\emdash}}
这种方法大部分情况下都有效,但我发现,当应用这种方法时,Latex 只会在这些情况下在破折号处断开,它不会断开单个单词,即使这样做更有意义。例如:
我为单词 Drumglass 设置了连字规则。
\hyphenation{Drum-glass}
我希望这一行被分解成如下形式:
“So the old man is still bent upon being lord of Drum-
glass—monarch of all he surveys—or rather[...]
而不是跑到边缘。
有没有办法告诉 Latex 既允许它在破折号处断开,又可以在执行连字符操作后如果行仍然延伸到边距,那么仍然可以对单个单词进行连字符处理?
编辑:正如 David Carlisle 在评论中所建议的那样,我用以下内容替换了自由裁量命令:
\let\emdash\textemdash
\renewcommand{\textemdash}{\nolinebreak\hspace{0pt}\emdash\hspace{0pt}}
答案1
我将把这个作为答案发布出来,这样这里就有答案了,而不仅仅是在评论中,但感谢 David Carlisle 提供了这个解决方案。我已将命令替换\discretionary
为这个命令,它似乎完全按照我想要的方式运行:
\let\emdash\textemdash
\renewcommand{\textemdash}{\nolinebreak\hspace{0pt}\emdash\hspace{0pt}}