这个问题被表述为 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
为当前字体启用。请注意\relax
45 后面的。必须确保 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
}