缺少字符:没有... Amsmath 错误?

缺少字符:没有... Amsmath 错误?

我发觉到字体包装数学Missing character: There is no...嵌套的重音符号在字体中产生一些符号。

Missing character: There is no  (U+007F) in font dsrom10!
Missing character: There is no  (U+007F) in font dsrom10!
.....
Missing character: There is no  (U+007F) in font dsrom8!
Missing character: There is no  (U+007F) in font dsrom8!
.....

梅威瑟:

\documentclass{article}
\usepackage{amsmath}
\usepackage{dsfont}
\begin{document}
\begin{equation}
\hat{\bar{\mathds{H}}}
\end{equation}
\end{document}

如果我在 周围添加一个额外的组,一切都会好起来\mathds。问题在于\macc@a宏中的\macc@skewchar前一个字符在哪里,它以某种方式插入到\hbox与字体切换命令处于同一级别的 'es 中:

...
\setbox\z@\hbox{$#1#2\@empty{}\macc@skewchar$}%
\setbox\tw@\hbox{$#1#2\@empty\macc@skewchar$}%
...

\macc@a问题是通过在这些框中添加额外的括号来编辑宏是否安全,例如:

\def\macc@a#1#2{%
  ...
  \setbox\z@\hbox{$#1{#2}\@empty{}\macc@skewchar$}%
  \setbox\tw@\hbox{$#1{#2}\@empty\macc@skewchar$}%
  ...
  }

或者\mmacc@nested@a将该参数传递给\macc@a

\def\mmacc@nested@a#1#2#3#4#5{%
  ...
  \macc@palette\macc@a{{#5}}%
}

答案1

“缺少字符”警告是由于dsrom字体被声明为数学字母,但字体系列缺少定义\skewchar,因此假定它是字体未提供的amsmath字符 127(十六进制)。0x7F

警告报告7F称 LuaLaTeX 和^^?都缺失pdflatex

确实,如果我这么做

\documentclass{article}
\usepackage{amsmath}

\DeclareFontFamily{U}{dsrom}{\skewchar\font="AA }
\DeclareFontShape{U}{dsrom}{m}{n}{
  <-10> dsrom8
  <10-12> dsrom10
  <12-> dsrom12
}{}
\usepackage{dsfont}

\begin{document}
\begin{equation}
\hat{\bar{\mathds{H}}}
\end{equation}
\end{document}

以免读取Udsrom.fd文件并声明另一个不存在的字符,因为\skewchar我收到如下警告

Missing character: There is no <AA> in font dsrom10!

不要恐慌. 这个警告并没有什么恶意。

如果要删除它,请使用现有字符作为\skewchar

\documentclass{article}
\usepackage{amsmath}

\DeclareFontFamily{U}{dsrom}{\skewchar\font=`A }
\DeclareFontShape{U}{dsrom}{m}{n}{
  <-10> dsrom8
  <10-12> dsrom10
  <12-> dsrom12
}{}
\usepackage{dsfont}

\begin{document}
\begin{equation}
\hat{\bar{\mathds{H}}}
\end{equation}
\end{document}

由于字体是直立的,所以最终的排版没有区别。

答案2

检查日志,我确实看到了缺少字符的消息。但是,这些是警告,而不是错误,并且它们不会使输出无效。

字体ds是“不完整的”;字体中只有大写字母、额外的“A”、小写字母“h”和“k”以及数字“1”。除非您尝试使用\mathds其中一个缺失的字符,否则应该不会出现任何实际问题。但是,似乎 tex 引擎(无论您使用哪一个)都会报告遗漏,无论这些字符是否被访问。

我不确定如何才能消除“虚假”警​​告,但我会尝试找出答案。实际上,你应该接受 egreg 的回答。他所推荐的方法肯定会消除这种字体的不需要的消息;至于它是否能像其他“稀疏”字体一样可靠地工作,我不会试图预测。

附录:
amsmath我现在已经测试了问题中建议的 两种代码修改。当请求的字母是“H”时,它们会给出所需的结果,但它们不是当请求的字母是“a”(不在字体中ds)时做正确的事情。它们输出的是重音“A”,并且没有给出任何警告。所以这些建议是无效的。

此外,正如我离线时被提醒的那样,尽管这些消息是警告,但它们只对遵循 knuth 颁布的模型的字体可靠。因此,这里的问题实际上是字体定义有误,应该从这里进行修复。如果由于任何其他原因生成警告,则应仔细调查,因为它可能是输出中缺少某些内容的唯一证据。在这个非 knuth 字体时代,将其提升为错误是合理的。

相关内容