在我正在使用的 (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}