我正在尝试这样做:
\documentclass{article}
\begin{document}
\begin{minipage}{2in}
\ttfamily
Hello/Hello/Hello/Hello/Hello/Hello
\end{minipage}
\end{document}
文本没有被连字符(因为 LaTeX没有连字符等宽字体)时,我得到的是“Overfull \hbox”。我发现的唯一解决方案是将正斜杠重新定义为“带有 的正斜杠\-
”。我该怎么做?
答案1
先说两条意见:(a)我假设你对用连字符连接“hello”这个词并不感兴趣本身,因为标准的英语连字实践不赞成使用连字hello
。hel-lo
(ii)你提到连字几次,但我认为你真正想要得到的是更好的换行,尤其是要避免行数过满。(区别在于:换行并不一定需要在行末添加连字符。)
如果(很大的如果!)这些假设是有效的,我认为你可以按照两个方式进行:
将 替换为
/
。\slash
这将允许 LaTeX 在 后插入换行符\slash
。这将避免创建过满的行,但可能会导致行数不足。将有问题的字符串放在
\seqsplit
或\url
指令中。
下列屏幕截图中的水平线用于说明的宽度minipage
。
\documentclass{article}
\usepackage{seqsplit} % for '\seqsplit` macro
\usepackage{xurl} % for '\path' macro
\begin{document}
\begin{minipage}[t]{2in} % just to illustrate width of minipage
\hrule
\phantom{.}
\end{minipage}
\begin{minipage}[t]{2in}
\ttfamily
Hello/Hello/Hello/Hello/Hello/Hello
\end{minipage}\hspace{0.6in}--- bad!
\medskip
\begin{minipage}[t]{2in}
\ttfamily
Hello/\-Hello/\-Hello/\-Hello/\-Hello/\-Hello
\end{minipage}\quad--- hyphen char.\ looks odd
\medskip
\begin{minipage}[t]{2in}
\ttfamily
Hello\slash Hello\slash Hello\slash Hello\slash Hello\slash Hello
\end{minipage}\quad--- better
\medskip
\begin{minipage}[t]{2in}
\ttfamily
\seqsplit{Hello/Hello/Hello/Hello/Hello/Hello}
\end{minipage}\quad--- with \verb+\seqsplit+
\medskip
\begin{minipage}[t]{2in}
\ttfamily
\path{Hello/Hello/Hello/Hello/Hello/Hello}
\end{minipage}\quad--- with \verb+\path+
\end{document}
答案2
我认为这不是你想要的,除非你想要输出:
Hello/Hello/Hello/-
Hello/Hello/Hello
假设您实际上只是想允许在斜线处中断,您可以将\hyphenchar
字体的设置为/
。有两个陷阱:\hyphenchar
是全局的。如果您在组中设置它,它仍将应用于组外,并且您还可能无意中排版如下:
Something ridicu/
lously absurdly
prolix
第二个问题比较容易解决,并且已内置于 LaTeX 内核中。我们可以使用 来\language\l@nohyphenation
关闭所有连字符。¹
第一个问题有点棘手。我们要做的是保存当前连字符,并\aftergroup
在当前组结束时使用它来恢复它。将所有这些放在一起以提供我们的专门版本\ttfamily
,我们可以这样做:
\makeatletter % ❶
\NewDocumentCommand{\mytt}{}{% ❷
\ttfamily
\language\l@nohyphenation
\xdef\@restorehypenchar{% ❸
\hyphenchar\the\font\the\hyphenchar\font
}%
\aftergroup\@restorehyphenchar
\hyphenchar\font`/\relax
}
\makeatother
请注意,我们需要访问私有的 LaTeX 命令 ❶。如果你坚持使用过时的 LaTeX,你可以将标有 ❷ 的行替换为:
\newcommand{\mytt}{
我们使用\xdef
at ❸,因为我们需要扩展定义的内容(最终的定义类似于\hyphenchar \OT1/cmtt/m/n/10 -1
),并且它必须是全局的,因为它将在当前组完成后扩展。
然后,您可以在示例中使用\mytt
它来代替。\ttfamily
这有点脆弱。如果你做了类似的事情
{\mytt {\mytt foo}}
当你退出时,你将不会得到原始的打字机类型的连字符,因为内部\mytt
将覆盖外部\mytt
的定义\@restorehyphenchar
。
- 事实上,这就是在逐字模式下连字符被抑制的方式。