用冒号分隔行

用冒号分隔行

我注意到如果我有这样的事情:

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}

相关内容