平均能量损失

平均能量损失

我正在使用XCharter带有 XeLaTeX 的 OTF 字体,我想要一个尖尖的旧式数字 1,而我用下面的 MWE 得到的却看起来像 I。

\documentclass{minimal}
\usepackage{fontspec}
\setmainfont[Numbers=OldStyle]{XCharter}
\begin{document}
This is the oldstyle numeral 1.

This is the lining numeral $1$.

But how do I get the oldstyle version that looks like a reduced lining numeral in XeLaTeX?
\end{document}

有一个这里有类似的问题但是我不使用 Lua,并且想知道如何调用包\useosf中 的等效项XCharter,但对于 XeLaTeX。

答案1

在以下帮助下这里,你可以使用以下方式直接访问字形:

\XeTeXglyph\the\XeTeXglyphindex "one.Alt.oldstyle"\relax

字形索引是使用以下方法找到的:

otfinfo -g XCharter-Roman.otf | grep one

平均能量损失

编辑:不要让 1 处于活动状态,因为这很容易导致问题。请参阅下面 @UlrikeFischer 的评论

编辑2:使用包来支持enumerate环境enumitem

\documentclass{article}
\usepackage{enumitem}
\usepackage{tikz}
\usepackage{fontspec}
\setmainfont[Numbers=OldStyle, Mapping=onealtoldstyle]{XCharter}
\ExplSyntaxOn
\tl_new:N \l__chandra_counter_tl
\cs_new:Nn \__chandra_one_alt_oldstyle:
  {
    \XeTeXglyph\XeTeXglyphindex "one.Alt.oldstyle"\relax
  }
\cs_new_protected:Nn \__chandra_alt_oldstyle:n
  {
    \tl_set:Nn \l__chandra_counter_tl {#1}
    \tl_replace_all:Nnn \l__chandra_counter_tl { 1 }
      { \__chandra_one_alt_oldstyle: }
    \tl_use:N \l__chandra_counter_tl
  }
\cs_generate_variant:Nn \__chandra_alt_oldstyle:n { x }
\NewDocumentCommand{\OldStyleArabic}{m}
  {
    \__chandra_alt_oldstyle:x {#1}
  }
\NewDocumentCommand{\OneAltOldstyle}{}
  {
    \__chandra_one_alt_oldstyle:
  }
\ExplSyntaxOff
\setlist[enumerate]{label=\OldStyleArabic{\arabic*}}
\begin{document}
This is the oldstyle numeral \OneAltOldstyle.

\begin{enumerate}
  \item Foo
  \item Bar
  \item Baz
\end{enumerate}

This is the lining numeral $1$.

This is \verb|tikz|: \tikz \draw (1, 1) -- (0, 1);
\end{document}

MWE 输出

答案2

现在包已经更新,可以通过从 XCharter 文档的最后一页复制代码来实现这一点,而无需编写英雄代码。然后 MWE 变成

\documentclass{minimal}
\usepackage{fontspec}
\setmainfont[CharacterVariant={1:0}, Numbers=OldStyle]{XCharter}
\begin{document}
This is the oldstyle numeral 1.

This is the lining numeral $1$.
\end{document}

相关内容