我在文本中使用了多个用斜线分隔的项目。例如,不同日历中的日期或地点名称,例如585/1190~公元(第一个数字是伊斯兰阴历的年份,第二个数字是公元历的年份),或摩苏尔/摩苏尔(第一种为常见的英文拼写,第二种为原名的音译)。
我遇到的问题是,当这些项目位于行末时,Latex 无法拆分它们——这些项目最终会超出页边距。在斜线周围添加空格会有所帮助,但看起来很丑,而且学术写作不应该这样。我想知道是否有解决方法可以解决这个问题。也就是说,我不想在“/”周围使用空格,但我希望 Latex 在必要时在斜线后拆分项目。
答案1
您可以使用 stock 命令在斜线后允许中断\slash
:
585\slash 1190~CE
Mosul\slash al-Mawsil
我会避免复杂的重新定义,因为这样只需输入 就可以自动进行替换/
。
另一种方法是定义一个命令:
\newcommand{\alt}[2]{#1\slash #2}
然后输入
\alt{585}{1190~CE}
\alt{Mosul}{al-Mawsil}
技术说明。的内核定义\slash
是
% latex.ltx, line 467:
\def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'
这使得在斜线处断开与在显式连字符后断开一样可取。但这也不允许在斜线后使用连字符。您可以使用 TUGboat 使用的技巧来改进这一点:
\renewcommand{\slash}{/\penalty\exhyphenpenalty\hspace{0pt}}
是否要这样做取决于文档中斜线后面的内容。如果预期有长单词,则应考虑重新定义。
答案2
这是在拖船上用来允许斜线后休息的方法:
\def\slash{/\penalty\z@\hskip\z@skip }
(当然,如果在或文件\makeatletter ... \makeatother
之外使用则需要。)只需在 输入中替换,例如。.sty
.cls
/
\slash
585\slash 1190~CE
正如@egreg 指出的那样,在 latex 内核中有一个定义\slash
。( tugboat 定义早于 latex;在回答之前我并没有真正检查过这一点。)但是, tugboat 定义更“宽容”——它允许在斜线后面的单词中自动连字符(在 tugboat 的窄列中很有用)。
答案3
对于(几乎)所有连字符问题,您都可以使用包选项的简写ngerman
符号babel
。 这个问题更深入地介绍如何在不将其他所有内容设置为德语的情况下激活它的技术细节。
基本上它提供了一些命令来精确指定你想要的换行符类型。不幸的是,最全面的网站描述其特征我知道的只有德语。
这是一个使用短语的小示例:
\documentclass{minimal}
\usepackage[ngerman,english]{babel}
\useshorthands{"}
\addto\extrasenglish{\languageshorthands{ngerman}}
\begin{document}
\minipage{3.5em}\hrulefill
\hspace{0pt}585/""1190~CE % "" allows a line break without adding a hyphen
\hspace{0pt}Mosul/""al"~Mawsil % and "~ adds a hyphen that may not be broken
\hrulefill
\endminipage
\end{document}
我知道你没有要求"~
,但这是另一个非常有用的命令,其他的是"-
是额外的换行符和"=
可断开的连字符仍允许在其他地方断开。