![“重新映射”单个字形](https://linux22.com/image/290902/%E2%80%9C%E9%87%8D%E6%96%B0%E6%98%A0%E5%B0%84%E2%80%9D%E5%8D%95%E4%B8%AA%E5%AD%97%E5%BD%A2.png)
我正在使用优秀的启发式字体,但我不喜欢旧式“1”的外观。它看起来更像是小写字母“I”,而不是实际的数字,与 Adobe 原版不同。如下所示:
有没有办法重新映射这个单个字符以使用不同的字体,或者有一种不那么痛苦的方法来编辑字体本身?(因为我使用文本数字进行章节编号等,所以我更喜欢文档范围的解决方案)
编辑:最小工作示例:
\documentclass[letterpaper,12pt]{amsart}
\usepackage[osf,scaled=.92]{heuristica}
\begin{document}
012782
\end{document}
答案1
我从中找到了一些灵感XeTeX 参考指南(角色类别,第 14 和 15 页)以及在这些问答中,使用 XeLaTeX 替换字体和拉丁现代语中“a”的替换。这是我的尝试。我已经安装了http://www.ctan.org/tex-archive/fonts/heuristica通过将文件解压并复制到我的 TeX 发行版的本地目录中,然后mktexlsr
直接使用 OTF 文件。我使用了 的缩放比例0.86
,0.92
看起来不正确。
顺便说一句,我喜欢\xeCJKDeclareSubCJKBlock
从xeCJK
包,但它在数字前后添加了一些额外的空格1
,所以请在注释行中找到它。有一个使用此方法的扩展示例,使用 xeCJK 合并中文、日文和韩文文本。
% run: xelatex mal-one.tex
\documentclass[letterpaper,12pt]{article}%amsart
\pagestyle{empty}
% There are some extra spaces before and after "1", but it works...
%\usepackage{xeCJK}
%\xeCJKDeclareSubCJKBlock{one}{"0031}
%\setmainfont[Scale=0.92,RawFeature=+onum]{Heuristica-Regular.otf}
%\setCJKmainfont[one,Scale=0.86,RawFeature=-onum]{Heuristica-Regular.otf}
%\ifx
\usepackage{fontspec}
\setmainfont[RawFeature=+onum,Scale=0.92]{Heuristica-Regular.otf}
\newfontfamily{\mfont}[RawFeature=-onum,Scale=0.86]{Heuristica-Regular.otf}
\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\msub
\XeTeXcharclass"0031=\msub
\XeTeXinterchartoks 0 \msub = {\begingroup\mfont}
\XeTeXinterchartoks 255 \msub = {\begingroup\mfont}
\XeTeXinterchartoks \msub 0 = {\endgroup}
\XeTeXinterchartoks \msub 255 = {\endgroup}
%\fi
\begin{document}
012782
\end{document}
下一个选项是使用映射文件(teckit_compile
)。我附上了映射文件(mal-one-bonus.map
),它首先由以下程序处理:
teckit_compile -o mal-one-bonus.tec mal-one-bonus.map
我们不用激活,而是+onum
定义自己的字符映射。源代码如下:
; This is mal-one-bonus.map file...
LHSName "input"
RHSName "output"
pass(Unicode)
UniClass [inputs] = (U+0030 U+0032..U+0039)
UniClass [outputs] = (U+F643 U+F645..U+F64C)
[inputs] <> [outputs]
然后我们运行xelatex mal-one-a.tex
(它不适用于lualatex
):
% run: xelatex mal-one-a.tex
\documentclass[letterpaper,12pt]{article}%amsart
\pagestyle{empty}
\usepackage{fontspec}
\setmainfont[Scale=0.92,Mapping=mal-one-bonus]{Heuristica-Regular.otf}
% RawFeature=+onum,
\begin{document}
012782
\end{document}
我在想,是否FeatureFile
可以使用连字符 ( ) 来解决 中的这个问题lualatex
。这就是新的功能文件 ( mal-feature.fea
):
languagesystem DFLT dflt;
languagesystem latn dflt;
# A new ligature...
feature liga {
sub one.taboldstyle by one;
} liga;
我们通过以下方式激活它lualatex mal-one-b.tex
(它不适用于xelatex
):
% run: lualatex mal-one-b.tex
\documentclass[letterpaper,12pt]{article}%amsart
\pagestyle{empty}
\usepackage{fontspec}
\usepackage{luatextra}
\setmainfont[Scale=0.92,FeatureFile=mal-feature.fea,RawFeature=+liga;+onum]{Heuristica-Regular.otf}
\begin{document}
012782
\end{document}