我正在使用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}
答案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}