这microtype
软件包允许完全抑制连字。但是,此功能需要 pdfTeX 1.30 或更新版本。如果我使用 LaTeX 或 XeLaTeX 而又不得不避免连字,那就太不幸了。
还有其他方法可以针对整个文档或仅某个环境禁用连字吗?
答案1
liga
在 XeLaTeX(或 LuaLaTeX)中,如果您使用的是 opentype/truetype 字体,则只需关闭默认连字功能(通常只是)即可加载它。
在标准 LaTeX 中,我知道的唯一安全解决方案是创建不包含连字的特殊 tfm 文件。pdftex \noligs
1.30 中的新原语“ ”是专门创建的,这样您就不必处理这些 tfm 文件。修改 tfm 文件并不难,但我不知道如何让 latex 利用结果。
要修补 tfm 文件(例如“cmr10.tfm”),首先找到该文件并转到其位置,然后执行以下操作:
$ tftopl cmr10.tfm > cmr10-noligs.pl
输出文件cmr10-noligs.pl
是 tfm 内容的“人类可读”表示。您可以在任何文本编辑器中打开它。靠近顶部,有一个表格,开头如下:
(LIGTABLE
(LABEL O 40)
(KRN C l R -0.277779)
(KRN C L R -0.319446)
(STOP)
(LABEL C f)
(LIG C i O 14)
(LIG C f O 13)
(LIG C l O 15)
在 中LIGTABLE
,删除其中的所有带有 的行LIG
(大多数字体只有LIG
,但也有一些可能的变体,如/LIG
和LIG/>
)。完成此操作后,您可能会在连续的行上看到LABEL
和的组合STOP
。每当出现这种情况时,也删除这两行。
然后保存文件,并运行shell命令
$ pltotf cmr10-noligs.pl
这将创建新的度量文件,cmr10-noligs.tfm
然后可以使用该文件进行排版而无需任何自动连字。
在实际使用此字体之前,您(通常)还必须为其添加 dvips/pdftex 映射文件条目,否则这些程序会认为您已经创建了一个全新的 metafont 字体。在本例中,mypdftex.map
包含以下行cmr10
:
cmr10 CMR10 <cmr10.pfb
所需的只是该行的副本,其中包含新的 tfm 名称
cmr10-noligs CMR10 <cmr10.pfb
注意:实际上可能没有与原始字体匹配的映射线,因为它本身就是虚拟字体。在这种情况下,您根本不需要额外的映射线,但您做需要将<fontname>.vf
文件(用来kpsewhich
找到它,它位于您的磁盘某处)复制到<fontname>-noligs.vf
。
其他人必须解释如何从新的 tfm 文件创建 LaTeX 包,我已经不记得如何去做了。
答案2
如果您使用 XeTeX(或 LuaTeX),那么您很可能也会使用 fontspec 来加载 OpenType 字体,因此以下内容应该会禁用加载字体中的任何连字:
\setmainfont[Ligatures={NoRequired,NoCommon,NoContextual}]{Font Name}
否则,请参阅 Taco 的回答。
答案3
尝试
\usepackage{microtype}
\DisableLigatures{encoding = *, family = * }
它不仅适用于 pdfTeX,还适用于 LaTeX。
答案4
禁止连字符的一个非常重要的原因是,从 pdf 剪切并粘贴到很多地方,例如 word 和其他 MS 内容。这些目的地无法处理特殊字符。
我使用打字机字体\tentt
来避免连字。这并不是真正的抑制,而是字体的本质,更少或没有连字。
我希望我知道一种方法(比上面的 tfm 方法更简单)来抑制它\tenrm
。