“重新映射”单个字形

“重新映射”单个字形

我正在使用优秀的启发式字体,但我不喜欢旧式“1”的外观。它看起来更像是小写字母“I”,而不是实际的数字,与 Adob​​e 原版不同。如下所示:

在此处输入图片描述

有没有办法重新映射这个单个字符以使用不同的字体,或者有一种不那么痛苦的方法来编辑字体本身?(因为我使用文本数字进行章节编号等,所以我更喜欢文档范围的解决方案)

编辑:最小工作示例:

\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.860.92看起来不正确。

顺便说一句,我喜欢\xeCJKDeclareSubCJKBlockxeCJK包,但它在数字前后添加了一些额外的空格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}

答案2

下列的成本加运费根据 的建议,我在 FontForge 中编辑了 Type 1 二进制文件,使 OSF 看起来更像衬线图。以下是我的最终结果:

在此处输入图片描述

这既显示了优点(与分数和高级数字一致),也显示了缺点——数字间距太差,比如 2011,尽管原文也是如此。

Heuristica 已获得以下许可奥弗莱所以我的修改版本应该可以分享,以防将来有人想要它。唯一的警告是修改后的版本不能再称为“Heuristica”了。至少这是我对许可证的解释,我欢迎纠正。

相关内容