![ConTeXt:使用 mathdesign 时素数(导数)看起来不正确](https://linux22.com/image/371471/ConTeXt%EF%BC%9A%E4%BD%BF%E7%94%A8%20mathdesign%20%E6%97%B6%E7%B4%A0%E6%95%B0%EF%BC%88%E5%AF%BC%E6%95%B0%EF%BC%89%E7%9C%8B%E8%B5%B7%E6%9D%A5%E4%B8%8D%E6%AD%A3%E7%A1%AE.png)
下面的例子:
\loadtypescriptfile[mathdesign]
\setupbodyfont[charter,12pt]
\starttext
\startTEXpage[offset=3bp]
Derivatives look bad: $y''=(y')'$.
Also in a displayed formula:
\startformula
f(x) = f(0)+\int_0^x f'(t)\,dt.
\stopformula
\stopTEXpage
\stoptext
给出输出:
我用
ConTeXt ver: 2018.02.25 19:48 MKIV beta fmt: 2018.3.2 int: english/english
运行pdffonts
pdf 文件,我得到
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
IGTPXN+Bitstream-Charter CID Type 0C Identity-H yes yes yes 10 0
HBTNTB+CharterBT-Italic Type 1 Custom yes yes no 11 0
OVWAZT+MathDesign-CH-Regular-Symbol-10 Type 1 Builtin yes yes no 12 0
WNUDUP+Bitstream-Charter CID Type 0C Identity-H yes yes yes 13 0
VZLEXX+MathDesign-CH-Regular-Extension-10 Type 1 Builtin yes yes no 14 0
CEWEBK+Bitstream-Charter CID Type 0C Identity-H yes yes yes 15 0
问:我怎样才能使素数看起来正常?
答案1
正如我所提议的https://mailman.ntg.nl/pipermail/ntg-context/2017/089541.html,您只需将定义从 复制粘贴plain.tex
到文档中,即可恢复素数的经典 Plain TeX 行为。我在这里使用 Iwona,因为 Mathdesign 未与 Standalone 捆绑在一起,但 Iwona 在素数方面也存在同样的问题。您唯一需要做的调整是\prime
在 的定义后插入一个显式的字距\prim@s
。否则 LuaTeX 将尝试将两个单个素数连在一起,U+2033 DOUBLE PRIME
这在 Iwona 中是行不通的(至少在 Iwona 中是这样)。
但是,应用此解决方法后,您将失去 ConTeXt 中素数的所有 Unicode 特性,即,您只能将素数输入为'
( U+0027 APOSTROPHE
)。不能输入′
( U+2032 PRIME
)、″
( U+2033 DOUBLE PRIME
) 或‴
( U+2034 TRIPLE PRIME
)。
我认为您最好使用 OpenType 数学字体。
\setupbodyfont[iwona,12pt]
\catcode`@=11
% from plain.tex
\mathcode`\'="8000 % ^\prime
{\catcode`\'=\active \gdef'{^\bgroup\prim@s}}
\def\prim@s{\prime\mkern0mu\futurelet\next\pr@m@s}
\def\pr@m@s{\ifx'\next\let\nxt\pr@@@s \else\ifx^\next\let\nxt\pr@@@t
\else\let\nxt\egroup\fi\fi \nxt}
\def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup}
\catcode`@=12
\starttext
\startTEXpage[offset=3bp]
Derivatives look bad: $y''=(y')'$.
Also in a displayed formula:
\startformula
f(x) = f(0)+\int_0^x f'(t)\,dt.
\stopformula
\stopTEXpage
\stoptext