使用 xetex 更改 OpenType 字体中的破折号字符

使用 xetex 更改 OpenType 字体中的破折号字符

在我正在使用的 (OTF) 字体中xetex,加载了mapping=tex-text选项,我发现长破折号字符太细,所以我想用更粗的破折号替换它。例如,假设我想用一个\hrule(或等效地,一个\vrule)替换它。我该怎么办?字符如何映射到连字组合?

答案1

XeTeX 可以使用强大的映射文件方法。

在你的 TeX 系统上找到该文件tex-text.map并将其复制到工作目录中baskerville-dash.map

使用文本编辑器打开文件并修改它,如下所示

; TECkit mapping for TeX input conventions <-> Unicode characters

LHSName "baskerville-dash"
RHSName "UNICODE"

pass(Unicode)

; ligatures from Knuth's original CMR fonts
U+002D U+002D           <>      U+2013  ; -- -> en dash
U+002D U+002D U+002D    <>      U+2015  ; --- -> horizontal bar (was U+2014)
U+2014                  <>      U+2015  ; em dash -> horizontal bar

U+0027                  <>      U+2019  ; ' -> right single quote
U+0027 U+0027           <>      U+201D  ; '' -> right double quote
U+0022                   >      U+201D  ; " -> right double quote

U+0060                  <>      U+2018  ; ` -> left single quote
U+0060 U+0060           <>      U+201C  ; `` -> left double quote

U+0021 U+0060           <>      U+00A1  ; !` -> inverted exclam
U+003F U+0060           <>      U+00BF  ; ?` -> inverted question

; additions supported in T1 encoding
U+002C U+002C           <>      U+201E  ; ,, -> DOUBLE LOW-9 QUOTATION MARK
U+003C U+003C           <>      U+00AB  ; << -> LEFT POINTING GUILLEMET
U+003E U+003E           <>      U+00BB  ; >> -> RIGHT POINTING GUILLEMET

保存文件并运行

teckit_compile baskerville-dash

这应该会生成一个文件baskerfille-dash.tec

现在测试新的映射文件:

\documentclass{article}

\usepackage{fontspec}

\setmainfont[Mapping=baskerville-dash]{Baskerville}

\begin{document}

a---b—c

\end{document}

b在输入文件中的和之间c有 U+2014(长破折号)。

在此处输入图片描述

tex-text以下是使用默认映射的输出

在此处输入图片描述

现在将baskerville-dash文件与 TeX 源文件一起保存,或者将其放在 XeTeX 将查找文件的某个地方,大概是

mkdir -p $(kpsewhich -var-value TEXMFHOME)/fonts/misc/xetex/fontmapping/baskerville-dash
mv baskerville-dash.* $(kpsewhich -var-value TEXMFHOME)/fonts/misc/xetex/fontmapping/baskerville-dash

或者对其他操作系统使用类似的技巧。

再次在测试文件上运行 XeLaTeX,以确保一切顺利。

答案2

由于您使用的是“Monotype Baskerville”字体,因此您实际上可以选择两种粗细的长划线符号:\char"0214(默认)和\char"0215。前一种字形确实非常细;后者则粗得多,甚至可能太粗,不符合您的品味。您自己决定吧。

如果你喜欢后一种形式,你可以通过如下指令设置宏

    \newcommand\thickemdash{\char"0215}

这样您就不必记住字形的 Unicode 字符槽。

以下 MWE 在我的系统(MacOSX 10.11.1.,MacTeX2015)上在 XeLaTeX 和 LuaLaTeX 下运行。

在此处输入图片描述

% !TEX TS-program = xelatex
\documentclass{article}

\usepackage{fontspec}
\setmainfont{Baskerville} % Monotype Baskerville

\begin{document}

a---a a\char"2014a a\char"2015a

\end{document}

相关内容