我有几个包含字符“/”的小写术语,例如:
\textsc{solarium/disapproved}
它们是常规文本的一部分,但有时当它们出现在行尾时,它们会超出页边距(只有包含小型大写字母的一行会超出)。我希望文本到达页边距时换行,这样换行就会在单词中间换行,就像常规文本中没有小型大写字母一样。
它适用于由几章组成的非常长的文档(文档类报告),所以我不想更改整个文档的设置,而只想管理那几行。
答案1
问题是,如果两个单词之间用 cat-12 标记分隔,例如/
(而不是空格),则在/
到达时会关闭连字算法,并且直到到达后续空格才会重置该算法。结果是,不仅不允许/
换行,而且第二个单词变得无法连字。
引入新定义的\z
(随便你怎么称呼它)会做两件事......它允许在之后中断,/
并且随着的引入\hspace{0pt}
,它会重置连字算法。
定义完这一点后,我给出了三种利用它的方法。
默认行为是,在 处不中断
/
,之后也不使用连字符。明确使用
/\z
。使用
\bslash
,已定义为/\z
。/
使用启用活动\breakableslashon
,在这种情况下,/
单词中间会自动使用此方法。但是,这可能会破坏/
令牌的其他应用程序,因此\breakableslashoff
提供关闭该功能。
当然,最手动的方法(未显示)是直接/\allowbreak\hspace{0pt}
在文档中键入内容。对于一两个令人厌烦的实例,这种方法还行,但如果实例太多,就会变得繁重。
妇女权利委员会:
\documentclass{article}
\textwidth=0pt
\newcommand\z{\allowbreak\hspace{0pt}}
\catcode`/=\active
\newcommand/{\char`/\z}
\catcode`/=12
\newcommand\bslash{/\z}
\newcommand\breakableslashon{\catcode`/=\active }
\newcommand\breakableslashoff{\catcode`/=12 }
\begin{document}
0. \textsc{solarium/disapproved}
1. \textsc{solarium/\z disapproved}
2. \textsc{solarium\bslash disapproved}
3. \breakableslashon
blah blah \textsc{solarium/disapproved} blah blah
\breakableslashoff
\end{document}
答案2
在 TUGboat 中,需要换行的地方经常出现斜线。这是那里使用的代码(它在类文件中定义,不需要修改at
):
\makeatletter
\def\slash{/\penalty\z@\hskip\z@skip }
\makeatother
最好将其改为\def
-- \newcommand
,这样如果已经定义,它将通知您\slash
。(如果已经定义,请检查定义;它可能已经是您需要的。否则,您需要另一个名称。)