如何在文本模式下获取带有“旧式”选项的 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}
如果您也希望在数学模式中使用旧式数字,则可以添加以下命令:
\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}