kpfonts、siunitx 和数学字母

kpfonts、siunitx 和数学字母

这是对此的一个后续问题相当模糊。问题是试图弄清楚我的 16 个数学字母表要去哪里。在使用 的egreg答案回答上一个问题时,我诊断出了一些问题。所以看看这个疯狂的事情:

\documentclass{article}
\usepackage{kpfonts}

\newcommand{\PrintMathFonts}[1]{%
  \count255=0
  \loop\ifnum\count255<16
    \typeout{#1 (\the\count255: \fontname\textfont\count255)}
    \advance\count255 by 1
 \repeat}
\usepackage{siunitx}

\begin{document}
\PrintMathFonts{Initial}
\SI{10}{\celsius}
$X$
\PrintMathFonts{Final}
X
\end{document}

这将打印出在各个点分配了哪些数学字母。以下是日志文件的相关部分:

Initial (0: jkpmn7t)
Initial (1: jkpmi)
Initial (2: jkpsy)
Initial (3: jkpex)
Initial (4: jkpmia)
Initial (5: jkpsya)
Initial (6: jkpsyb)
Initial (7: jkpsyc)
Initial (8: jkpexa)
Initial (9: jkpssmn7t)
Initial (10: jkpttmn7t)
Initial (11: nullfont)
Initial (12: nullfont)
Initial (13: nullfont)
Initial (14: nullfont)
Initial (15: nullfont)
Final (0: jkpmn7t)
Final (1: jkpmi)
Final (2: jkpsy)
Final (3: jkpex)
Final (4: jkpmia)
Final (5: jkpsya)
Final (6: jkpsyb)
Final (7: jkpsyc)
Final (8: jkpexa)
Final (9: jkpssmn7t)
Final (10: jkpttmn7t)
Final (11: jkpmn7t)
Final (12: nullfont)
Final (13: nullfont)
Final (14: nullfont)
Final (15: nullfont)

所以,在我输入之前任何事情我的十六种字体中已有十二种被使用。siunitx似乎导致在写入任何内容之前就使用了数学字母。好的。没关系,我暂时不考虑这个问题。更奇怪的是,一旦我习惯了\SI排版,另一个字母就会被用完(位置 11)。奇怪的是,它与位置 0 的字体相同。为什么会这样?这不是浪费吗?我能做些什么吗?

使用标准现代计算机意味着 仅使用 6 个字母,Initial这与 相同Final。使用fouriernc似乎会导致与 相同的问题(重复字体)kpfonts。但是,使用的字体较少。

答案1

这些包裹kpfontsfourier都说fouriernc

\DeclareMathAlphabet{\mathrm}{<enc>}{<family>}{<weight>}{<shape>}

而不是正确的

\DeclareSymbolFontAlphabet{\mathrm}{operators}

这是 推荐的fntguide.pdf;这会导致 LaTeX 在排版带有 的字体时加载额外的字体\mathrm(例如带有 的单元\SI)。为避免这种情况,请在加载字体包后发出后一个命令。

答案2

我可以解释siunitx部分情况,即使不是全部情况。为了能够分辨出正在使用哪种数学字体,在文档开头需要强制进行一些数学排版。这可以通过使用或多或少

\setbox\tempbox=\hbox{\ensuremath{\mathsf{\global\chardef\siunitxmathsf=\fam}}}
\setbox\tempbox=\hbox{\ensuremath{\mathtt{\global\chardef\siunitxmathtt=\fam}}}

它记录了无衬线和等宽数学字体的系列编号以供日后使用。

第二件要知道的事情是,siunitx使用\mathrm直立材料来输入数学(作为标准)。如果你尝试

\documentclass{article}
\usepackage{kpfonts}

\newcommand{\PrintMathFonts}[1]{%
  \count255=0
  \loop\ifnum\count255<16
    \typeout{#1 (\the\count255: \fontname\textfont\count255)}
    \advance\count255 by 1
 \repeat}

\begin{document}
\PrintMathFonts{Initial}
$\mathrm{a}$
\PrintMathFonts{Final}
\end{document}

您将看到这也使用了一种“额外”字体。其他数学字体包不会出现这种情况,因此推测这是 的一个错误/“功能” kpfonts

相关内容