一个问题

一个问题

我正在尝试使用不同的字体文件来显示文本中的数字(即不在数学模式下),同时保持文本的其余部分不变。我使用的字体缺少旧式数字,所以我想从不同的字体中借用它们。

我知道我可以轻松地声明一种新字体并创建有关此的命令,但这意味着要返回并编辑文本中有数字的每个地方(这需要一段时间)。

那么,有可能实现这个过程的自动化吗?

答案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}

第三个示例的输出

相关内容