我正在尝试使用不同的字体文件来显示文本中的数字(即不在数学模式下),同时保持文本的其余部分不变。我使用的字体缺少旧式数字,所以我想从不同的字体中借用它们。
我知道我可以轻松地声明一种新字体并创建有关此的命令,但这意味着要返回并编辑文本中有数字的每个地方(这需要一段时间)。
那么,有可能实现这个过程的自动化吗?
答案1
这是一个工作示例combofont
:
\documentclass[12pt,a5paper]{book}
\usepackage{combofont}
\setupcombofont{schneidler-regular}
{
{file:SchneidlerMed-Med.otf:\combodefaultfeat} at #1pt,
{file:SchneidlerMedSC-Med.otf} at #1pt
}
{
{} ,
0x30-0x39
}
\setupcombofont{schneidler-italic}
{
{file:SchneidlerAma-MedIta.otf:\combodefaultfeat} at #1pt,
{file:SchneidlerAma-MedIta.otf} at #1pt
}
{
{} ,
0x30-0x39
}
\DeclareFontFamily{TU}{schneidler}{}
\DeclareFontShape{TU}{schneidler}{m}{n}{<->combo*schneidler-regular}{}
\DeclareFontShape{TU}{schneidler}{m}{it}{<->combo*schneidler-italic}{}
\renewcommand{\rmdefault}{schneidler}% using \fontfamily{schneidler}\selectfont after \begin{document} would produce lining page numbers in Latin Modern
\linespread{1.103}
\begin{document}
URW’s version of Schneidler Medieval has its lowercase 1234567890 in a
separate, small caps font. This is far less inconvenient on \today\
than it was when I first acquired the type, since we now have
combofont.
\textit{There are no italic small caps, but the result is still
pleasing, because the italic 1234567890 seem to be a hybrid of
uppercase and lowercase figures.}
\end{document}
由于我不够聪明,无法将我的定义schneidler-regular
与调用结合起来fontspec
以选择斜体,因此我schneidler-italic
使用相同的字体作为字形的接收者和捐赠者。可能有更好的方法。
标准连字符被破坏了,直到我添加了\combodefaultfeat
。
一个问题
上面的方法之所以有效,是因为 中的小写数字是默认的SchneidlerMedSC-Med.otf
。但是,当 中存在小写数字但不是供体字体的默认数字时,不清楚如何处理。例如,这里是故意低俗的尝试,将 Punk Nova 与新欧拉:
\documentclass{standalone}
\usepackage{combofont,tikz}
\usetikzlibrary{calendar}
\setupcombofont{punk-regular}
{
{file:punknova-regular.otf:\combodefaultfeat} at #1pt,
{file:euler.otf:+onum} at #1pt
}
{
{} ,
0x30-0x39
}
\DeclareFontFamily{TU}{punk}{}
\DeclareFontShape{TU}{punk}{m}{n}{<->combo*punk-regular}{}
\renewcommand{\rmdefault}{punk}
\begin{document}
\tikz\calendar[dates=2019-02-01 to 2019-02-last,
week list,month label above centered]
if (Sunday) [purple];
\end{document}
我本来希望+onum
生成 Neo Euler 的小写数字,但结果却不是这样。通过查阅手册luaotfload
,我找到了这个解决方案(可能还有更好的解决方案):
\documentclass{standalone}
\usepackage{combofont,tikz}
\usetikzlibrary{calendar}
\def\feats{mode=base;+kern;+onum}
\setupcombofont{punk-regular}
{
{file:punknova-regular.otf:\combodefaultfeat} at #1pt,
{file:euler.otf:\feats} at #1pt
}
{
{} ,
0x30-0x39
}
\DeclareFontFamily{TU}{punk}{}
\DeclareFontShape{TU}{punk}{m}{n}{<->combo*punk-regular}{}
\renewcommand{\rmdefault}{punk}
\begin{document}
\tikz\calendar[dates=2019-02-01 to 2019-02-last,
week list,month label above centered]
if (Sunday) [purple];
\end{document}