如何在两种模式下获取宪章数字;在文本模式下获取旧样式?

如何在两种模式下获取宪章数字;在文本模式下获取旧样式?

如何在文本模式下获取带有“旧式”选项的 Charter,并在数学模式下获取带有 Charter 字符(包括数字)的 Charter?

提出的解决方案需要与 LuaLaTeX 一起工作(因为有些文本字符是非 ASCII 的,我更喜欢将这些非 ASCII 字符粘贴到源文件中,并将源保存为 UTF-8)。

编辑:以防万一,我使用的是 MiKTeX v.2.9。我需要升级才能解决这个问题吗?

我可以非常接近目标但却无法让所有事情立即运转起来。

最大能量损失 1:

\documentclass[12pt,a4paper]{article}

\usepackage{amsmath}
\usepackage{fontspec}
\setmainfont{XCharter} % see https://tex.stackexchange.com/a/205558
\usepackage[oldstyle]{xcharter}

% See https://tex.stackexchange.com/a/347574 for why this is needed. 
\AtBeginDocument{%
  \Umathcode`0="7 "0 `0
  \Umathcode`1="7 "0 `1
  \Umathcode`2="7 "0 `2
  \Umathcode`3="7 "0 `3
  \Umathcode`4="7 "0 `4
  \Umathcode`5="7 "0 `5
  \Umathcode`6="7 "0 `6
  \Umathcode`7="7 "0 `7
  \Umathcode`8="7 "0 `8
  \Umathcode`9="7 "0 `9
}

\usepackage[charter]{newtxmath}

\begin{document}

Digits in plain text: 48/96=135/270.

$a=48, b=96, c=135, d=270\implies a/b=c/d.$ $8=5+3=9-1=2\times4=2^3.$

\end{document}

文本模式下的数字正是我想要的。此外,数学模式下的字母是 Charter 斜体,这正是我想要的。然而,数学模式下的数字是 Computer Modern,尽管我尝试使用这个答案,回答了有关 Libertine 的类似问题。

微波辐射计 2

\documentclass[12pt,a4paper]{article}

\usepackage{amsmath}

\usepackage{fontspec}
\setmainfont{XCharter}[Numbers={OldStyle}] % see https://tex.stackexchange.com/a/205558
\usepackage[charter]{newtxmath}

% See https://tex.stackexchange.com/a/347574 for why this is needed. 
\AtBeginDocument{%
  \Umathcode`0="7 "0 `0
  \Umathcode`1="7 "0 `1
  \Umathcode`2="7 "0 `2
  \Umathcode`3="7 "0 `3
  \Umathcode`4="7 "0 `4
  \Umathcode`5="7 "0 `5
  \Umathcode`6="7 "0 `6
  \Umathcode`7="7 "0 `7
  \Umathcode`8="7 "0 `8
  \Umathcode`9="7 "0 `9
}

\begin{document}

Digits in plain text: 48/96=135/270.

$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$

\end{document}

现在我尝试通过破解 \setmainfont 而不是 \usepackage{xcharter} 来在文本模式下获取旧式数字。但这似乎将参数 oldstyleI(而不是 oldstyle)传递给 \usepackage{xcharter}。无论如何,结果是文本模式具有旧式数字,但带有小写字母 I 表示 1。好消息是数学模式下的数字是 Charter,这正是我想要的。

如果文本和数学模式都可以使用旧式 Charter 数字,那就更好了。这样我就可以在数学模式下将表格保留为数组环境。必须转到文本模式才能使用表格中的数字,这需要将例如替换$\begin{array}{r} n \\ 1 \end{array}$\begin{tabular}{r} $n$ \\ 1 \end{tabular}

答案1

由于您使用的是 LuaLaTeX,因此您可以加载unicode-math而不是newtxmath,因为它存在兼容性问题。使用 XCharter-Math 字体进行数学运算。

编辑:在评论中,您请求了 中的数字 1 [oldstyleI],这是 XCharter 的 OpenType 版本中的字符变体 01。修订版本如下。

\documentclass[12pt,a4paper]{article}

\usepackage{unicode-math}

\defaultfontfeatures[XCharter]{ Numbers=OldStyle,
                                CharacterVariant=1, % Change the shape of 1 in text mode
                                UprightFont=*-Roman,
                                BoldFont=*-Bold,
                                ItalicFont=*-Italic,
                                SlantedFont=*-Slanted,
                                BoldItalicFont=*-BoldItalic,
                                BoldSlantedFont=*-BoldSlanted,
                                Extension=.otf }

\setmainfont{XCharter}
\setmathfont{XCharter-Math}

\begin{document}

Digits in plain text: 48/96=135/270.

$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$

\end{document}

XCharter 示例

如果您也希望在数学模式中使用旧式数字,则可以添加以下命令:

\setmathfont{XCharter-Roman.otf}[range={up/num},
                                 Numbers=OldStyle,
                                 CharacterVariant=01] % Change the shape of 1 in math mode

以下是适用于 PDFLaTeX 的版本:

\documentclass[12pt,a4paper]{article}

\usepackage{amsmath}
\usepackage[charter]{mathdesign}
\usepackage[oldstyle]{xcharter}

\begin{document}

Digits in plain text: 48/96=135/270.

$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$

\end{document}

我建议您unicode-math在可以的情况下使用 LuaLaTeX,在必须的情况下使用带有旧式 8 位字体的 PDFLaTeX。但是,既然您说这里的问题是无法读取 Unicode,那么如果您以 NFC(规范化预组合)UTF-8 编码保存文档,您的文档很有可能可以正常工作。PDFLaTeX 无法理解 Unicode 组合字符,但可以处理直接映射到 8 位输入编码的任何 Unicode 字符。

编辑:

如果你确实想将 OpenType 文本字体与旧式 Type 1 数学字体一起使用,可以这样做:

\documentclass[12pt,a4paper]{article}

\usepackage{amsmath}
\usepackage[charter]{mathdesign}
\usepackage{fontspec}

\setmainfont{XCharter}[NFSSFamily=mdbch, Numbers=OldStyle]

\begin{document}

Digits in plain text: 48/96=135/270.

$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$

\end{document}

答案2

如果您不想使用unicode-math,则必须重新定义operators字体以使用带有衬线数字的 XCharter。

\documentclass[12pt,a4paper]{article}

\usepackage{amsmath}
\usepackage{fontspec}
\usepackage[charter]{newtxmath}

\setmainfont{XCharter}[Numbers={OldStyle}] % see https://tex.stackexchange.com/a/205558
\newfontfamily{\XCharterLF}{XCharter}[NFSSFamily=xcharterlf]

\DeclareSymbolFont{operators}{TU}{xcharterlf}{m}{n}

\begin{document}

Digits in plain text: 48/96=135/270.

$a=48, b=96, c=135, d=270\implies ab=cd$.

$8=5+3=9-1=2\times4=2^3$.

$\sin x$

\end{document}

在此处输入图片描述

相关内容