如何在 \texttt 内自动连字符?

如何在 \texttt 内自动连字符?

这个问题被表述为 LaTeX 的错误报告,我认为在这里提出它会很有帮助(包括答案​​)。

该人的文本周围散布着大量打字机字体的“常用词”,他很惊讶这些文本不会自动连字,因此他必须手动插入\-以标记连字点。

答案1

在 LaTeX 中,打字机字体不进行任何连字符连接是标准行为,因为它通常用于代码。因此,通常用于\texttt所有代码的字体都会自动抑制连字符连接。

要改变这种状况,主要有三个选择:

  • \texttt为整个文档中使用的字体启用连字
  • 定义自己的变体\texttt,允许在内部使用连字符
  • 使用自动启用连字功能的其他字体

通常启用连字功能\texttt

连字状态通常与字体系列有关。例如,LaTeX 中打字机使用的默认字体是“Computer Modern Typewriter”(即 cmtt),其字体系列定义是

\DeclareFontFamily{OT1}{cmtt}{\hyphenchar \font=-1}

用于 OT1 字体编码。“-1”表示不使用连字符。0 到 255 之间的值表示将该特定位置中的字符用作连字符。

一旦设置了所有字体,就可以以通用方式(感谢@greg)更改打字机字体的字体系列声明,如下所示:

\DeclareFontFamily{\encodingdefault}{\ttdefault}{\hyphenchar\font=`\-}

此声明将设置为默认编码 ( ) 中\hyphenchar默认打字机字体系列 ( ) 的当前字体中“-”所使用的插槽。\ttdefault\encodingdefault

一种编码中单个系列的明确设置是:

\DeclareFontFamily{T1}{cmtt}{\hyphenchar \font=45}

如果使用 T1 编码字体,还可以选择备用连字字符,而不是 45(即 OT1 或 T1 编码中“-”的位置)。此备用连字字符在此编码中位于插槽 127 中。

定义自己的启用连字符的 tt 命令

如果希望同时具有带连字符和不带连字符的可能性,可以定义单独的命令,例如

\DeclareTextFontCommand{\mytexttt}{\ttfamily\hyphenchar\font=45\relax}

诀窍是不仅要设置字体系列,还要\hyphenchar为当前字体启用。请注意\relax45 后面的。必须确保 TeX 停止扫描数字(空白也可以)。否则,#1如果您的参数恰好以数字开头,它可能会成为数字的一部分。

不幸的是,这种方法存在一个问题:对字体参数的分配始终是全局的,因此上述定义也会改变 的\texttt行为(感谢 @mhp 指出这一点)。可以使用类似的方法修复此问题,\DeclareTextFontCommand将连字符设置为 -1。但是,也可能有\ttfamily命令,它们也会受到影响。因此,不幸的是,一个完全有效的解决方案还需要更新该命令。

\makeatletter
\DeclareRobustCommand\ttfamily
        {\not@math@alphabet\ttfamily\mathtt
         \fontfamily\ttdefault\selectfont\hyphenchar\font=-1\relax}
\makeatother
\DeclareTextFontCommand{\mytexttt}{\ttfamily\hyphenchar\font=45\relax}

使用已启用连字的打字机字体

在 Computer Modern 中,不仅有 Computer Modern Typewriter,还有另一种看起来相似但字符宽度可变的打字机字体。该字体自动启用了连字符,由于它对不同的字符使用不同的宽度,因此在使用大量打字机文本的文档中,它可能是一个不错的选择。因此,在这里可以定义一个命令,例如

\newcommand\textvtt[1]{{\normalfont\fontfamily{cmvtt}\selectfont #1}}

答案2

连字符-package 运行良好。

\usepackage[htt]{hyphenat}

答案3

不幸的是,最初的答案对我都不起作用(\DeclareFontFamily...{\hyphenchar ...},,\DeclareTextFontCommand{\mytexttt}{...}或)。\newcommand\textvtt[1]{...}\usepackage[htt]{hyphenat}

有效的方法是取自这篇文章:文本中的换行符

\renewcommand{\texttt}[1]{%
  \begingroup
  \ttfamily
  \begingroup\lccode`~=`/\lowercase{\endgroup\def~}{/\discretionary{}{}{}}%
  \begingroup\lccode`~=`[\lowercase{\endgroup\def~}{[\discretionary{}{}{}}%
  \begingroup\lccode`~=`.\lowercase{\endgroup\def~}{.\discretionary{}{}{}}%
  \catcode`/=\active\catcode`[=\active\catcode`.=\active
  \scantokens{#1\noexpand}%
  \endgroup
}

相关内容