如何重新定义正斜杠符号?

如何重新定义正斜杠符号?

我正在尝试这样做:

\documentclass{article}
\begin{document}
\begin{minipage}{2in}
\ttfamily
Hello/Hello/Hello/Hello/Hello/Hello
\end{minipage}
\end{document}

文本没有被连字符(因为 LaTeX没有连字符等宽字体)时,我得到的是“Overfull \hbox”。我发现的唯一解决方案是将正斜杠重新定义为“带有 的正斜杠\-”。我该怎么做?

答案1

先说两条意见:(a)我假设你对用连字符连接“hello”这个词并不感兴趣本身,因为标准的英语连字实践不赞成使用连字hellohel-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}{

我们使用\xdefat ❸,因为我们需要扩展定义的内容(最终的定义类似于\hyphenchar \OT1/cmtt/m/n/10 -1),并且它必须是全局的,因为它将在当前组完成后扩展。

然后,您可以在示例中使用\mytt它来代替。\ttfamily

这有点脆弱。如果你做了类似的事情

 {\mytt {\mytt foo}}

当你退出时,你将不会得到原始的打字机类型的连字符,因为内部\mytt将覆盖外部\mytt的定义\@restorehyphenchar


  1. 事实上,这就是在逐字模式下连字符被抑制的方式。

相关内容