我收到了 的错误报告ebgaramond-maths
。虽然从某种意义上说,这个问题显然是由我的包引起的,但我不清楚除了扩展文档中的声明或在 中进行设置之外,我是否还能做些什么\Huge
。(\bfseries
在这种情况下,这自然是无效的。)
文档已经指出 OML 编码中缺少字符,并指出这是字体的限制,而不是软件包的限制。这是真的。
我不太明白的是,在这种情况下,LaTeX 不会生成非常有用的关于缺失字符的警告。警告会写入日志文件,但并不是很有用:
Missing character: There is no ( in font EBGaramond12-Italic--oml-ebgaramond!
Missing character: There is no * in font EBGaramond12-Italic--oml-ebgaramond!
是针对以下代码生成的警告:
\documentclass{article}
\usepackage{ebgaramond-maths}
\begin{document}
$\leftharpoonup \rightharpoonup$
\end{document}
这会生成一个空白页。在较长的文档中,很难看出哪些符号实际上缺失了。(我猜在编码槽位置方面存在对应关系,但很少有用户会看到这一点或知道如何跟进,即使我的猜测是正确的。)
出现空白页的原因是ebgaramond-maths
必须声明 EBGaramond 的替代品letters
,并且当 LaTeX 无法在字体中找到字符时,它不会像无法找到字体本身那样回退到其他字体。(至少,我认为这是正在发生的事情。)
如此ebgaramond-maths
神奇地使字符消失,就像缺少字符的文本字体会使字母和文本符号消失一样:没有包,符号就会出现;有了包,符号就会消失。
我不确定我能做什么或应该做什么。毕竟,最合适的解决方法取决于用户的其他字体配置(例如,如果其他东西用于数学)。虽然newtxmath
建议用于积分和括号,但这最终取决于用户,并且将其他字体中的符号作为其一部分绘制肯定是不合适的ebgaramond-maths
。
针对此类问题,建议采取什么政策/做法/应对措施?
答案1
在理想情况下,这种情况不应该发生。如果字体是 OML 编码的,那么它应该有\leftharpoonup
,如果没有,\leftharpoonup
那么它应该采用不同的编码。
但世界并不总是理想的,任意从其他地方引入字符有点武断,并且声明一个新的编码 OML2 或其他什么,并声明要使用的所有数学运算可能比你想要的更彻底的改变,并且必然与某些东西不兼容。
该textcomp
包具有类似的问题,因为 TS1 编码在实践中并未得到广泛支持,并且具有包选项来声明 TS1 编码的某些子集(并将不在该子集中的命令定义为错误)。
根据 OML 中缺少的字符数,我可能会将它们定义为错误
\def\leftharpoonup{\PackageError{ebgaramond-maths}{No \string\leftharpoonup}{use ...}}
关于什么的一些选择......例如,您可以使用包选项将它们从其他字体中拉入,或者建议一些包来重新定义它们而不覆盖其余的letters
插槽或......
編輯 (cfr)
这是我最终使用的代码,至少目前是这样:
% The following symbols are missing and should give errors
\gdef\ebgaramond@maths@help{%
EBGaramond does not provide this symbol.\MessageBreak
If you are using the recommended setup with newtxmath\MessageBreak
you can use \string\re@DeclareMathSymbol{}{}{}{} to take it from another font.\MessageBreak
For example, to take symbols from Computer Modern:\MessageBreak
\expandafter\noexpand\string\DeclareSymbolFont{cmletters}{OML}{cmm} {m}{it}\MessageBreak
Then a specific symbol, such as \string\leftharpoonup, can be defined as follows:\MessageBreak
\expandafter\noexpand\string\re@DeclareMathSymbol{\string\leftharpoonup}{\mathrel}{cmletters}{"28}}
% Warning based on David Carlisle's answer at http://tex.stackexchange.com/a/214524/
\newcommand*{\ebgaramond@maths@dim}{\leftharpoonup,\leftharpoondown,\rightharpoonup,\rightharpoondown,\triangleright,\triangleleft,\star,\partial,\flat,\natural,\sharp,\smile,\frown,\vec,\t}
\@for \xx:=\ebgaramond@maths@dim \do {%
\expandafter\edef\xx{\noexpand\PackageError{ebgaramond-maths}{No \expandafter\string\xx}{\ebgaramond@maths@help}}}