我注意到如果我有这样的事情:
one::two::three::four one::two::three::four one::two::three::four
发生了一些奇怪的事情:
% the right page margin would be here |
% |
% v
one::two::three::four one::two::three::four one::two::three::four
页边距是我标记的位置,但是线没有断开,::four
超出了页面,尽管它是对齐的,以便第一个冒号正好位于页边距之后,就像必须将其拆分一样。
one::two::three
为什么和之间的线没有断开::four
?
那么为什么它会这样对齐,以至于::four
超出页面范围?
答案1
你可以定义
\def\::{\discretionary{:}{:}{::}}
现在只需写入,\::
并且 :: 将在行尾拆分为 : 和 :。您可以轻松更改它以使其表现不同,例如
\def\::{\discretionary{::}{}{::}}
这是 LaTeX 宏的一个好处:一旦定义并使用它,您就可以轻松地持续更改它。
正如评论中所要求的,这是一个最小的例子:
\documentclass{article}
\def\::{\discretionary{::}{}{::}}
\begin{document}
one\::two\::three\::one\::one\::two\::three\::one\::two\::three\::
four::one\::two\::three\::four\::one\::two\::three\::four
\end{document}
答案2
此处不会断行,因为 TeX 只会在空格、连字符点或明确插入的 调用处断行\discretionary
。如果您希望在此处允许换行,您可以在每个双冒号前放置\discretionary{}{}{}
。如果您经常需要这样做,请为其制作一个更短的宏。
答案3
补充一下 Harald 的回答。TeX 会在空格处或信按照该语言提供的模式,单词中是一个可接受的连字符点。
没有任何模式允许单词中使用冒号,因为英语中不存在这样的单词!例如,以下无意义的单词将使用连字符。还要记住,第一个单词永远不会使用连字符。
\documentclass{article}
\begin{document}
The very first word is not hyphenated at all fortymenpageturnthreeonefouronetwothreefour
\end{document}