\small\Join 与 type1cm 和 amssymb 搭配起来不太好看

\small\Join 与 type1cm 和 amssymb 搭配起来不太好看

输入

\documentclass{standalone}
\usepackage{type1cm}
\usepackage{amssymb}
\begin{document}
\noindent
Good: \(\Join \mathsf{\Join}\). 
Bad: \small\(\Join \mathsf{\Join}\)
\end{document}

生产

使用 pdflatex 进行编译

如您所见,small sans maths 中的符号 ⋈ 完全不符合理想情况。当然,以上只是 MWE,实际上还有大量其他软件包和要求让您使用 type1cm 和 amssymb(而不是其他东西)。是否可以在 type1cm 和/或 amssymb 级别修复上述问题?

答案1

该软件包type1cm已经过时,仅用于与旧文档的向后兼容。

没有必要将它与 2003 年以后的 LaTeX 发行版一起使用。

\documentclass{article}
\usepackage{amssymb}

\begin{document}

Normal: \(\Join\)

Small: {\small\(\Join\)}

\end{document}

本文档自动使用 Type1 字体。输出pdffonts

name                                 type              emb sub uni prob object ID
------------------------------------ ----------------- --- --- --- ---- ---------
QKGSKC+CMR10                         Type 1            yes yes no   X        4  0
OUKJHV+MSBM10                        Type 1            yes yes no   X        5  0

在此处输入图片描述

\Join无论如何,您可以轻松获得不受错误字体选择影响的工作定义。

\documentclass{article}
\usepackage{amssymb}

\makeatletter
\def\Join{\mathrel{\mathpalette\fix@Join\relax}}
\def\fix@Join#1#2{%
  \ooalign{%
    $\m@th#1\mathchar "056F$\cr
    $\m@th#1\mathchar "056E$\cr
  }%
}
\makeatother


\begin{document}

Normal: \(\Join_{\Join}\)

Small: {\small\(\Join_{\Join}\)}

Footnotesize: {\footnotesize\(\Join_{\Join}\)}

\end{document}

在此处输入图片描述

答案2

type1cm该包不会使嵌入的字体采用 Type 1 格式,它只是允许 cm 字体缩放到任意大小(如后面的fix-cm包一样)。

这里的问题是,\Joinamsfonts一个非常脆弱的定义,只适用于一种字体:它通过设置 ⋊ 和 ⋉ 来定义,它们之间有 -13.8mu 的负字距。如果字体不是 msbm10(对于 type1cm,它最终是 9pt 的 msbm7),那么 -13.8 这个神奇数字就不那么神奇了,您可以在更改字体大小时调整 -13.8 值,而不是完全重新定义它:-15 似乎更适合\small,但请注意这是仅有的如果加载type1cm,如果不加载它或者加载不同的字体包,则需要其他一些值,或者更好的方法是使用具有字符作为字体字形而不需要过度打印的字体。

在此处输入图片描述

\documentclass{article}
\usepackage{type1cm}
\usepackage{amssymb}
\begin{document}


Good: \(\Join \mathsf{\Join}\)

$\mathchar "056F \qquad \mathchar "056E$

Bad: \small\(\Join \mathsf{\Join}\)

$\mathchar "056F \qquad \mathchar "056E$

\makeatletter
\xdef\Join{\mathrel{\mathchar"0\hexnumber@\symAMSb 6F\mkern-15mu%
  \mathchar"0\hexnumber@\symAMSb 6E}}



Better: \small\(\Join \mathsf{\Join}\)

$\mathchar "056F \qquad \mathchar "056E$

\end{document}

相关内容