使用数学字体 Cambria Math 绘制电偶极子

使用数学字体 Cambria Math 绘制电偶极子

根据标题,我尝试在 LuaLaTeX 中使用 Cambria Math 作为数学字体绘制电偶极子。这是我的代码的 MWE:

\documentclass{standalone}

\usepackage{unicode-math}
\setmathfont{Cambria Math}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \draw[gray] (0, 0) -- (4, 0);
    \node[red, draw, circle] at (0, 0) {$+$};
    \node[blue, draw, circle] at (4, 0) {$-$};
\end{tikzpicture}
\end{document}

其结果如下: 两个圆圈分别包含一个 + 和一个 -,但它们未对齐。

如灰线所示,+ 和 - 不在同一行。我尝试了很多方法,包括不同的节点锚点、设置文本高度和文本深度等,但我无法正确对齐它们。

默认数学字体不会发生同样的情况,如果你编译没有两行有关 Cambria Math 的 MWE,你就会看到这种情况。

有人知道怎么做吗?提前谢谢大家。


编辑:我尝试了评论中提到的几个解决方案,特别是使用 CambriaMath,因为有些解决方案似乎只有在没有它的情况下才能工作,以下是以下 MWE 的结果(是的,我对颜色很感兴趣):

\documentclass{standalone}

\usepackage{unicode-math}
\setmathfont{Cambria Math}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[every node/.style={draw, circle}]
    \draw[help lines] (-1em, 1em) grid (4cm+1em, -3cm-1em);
    \node[red, minimum width=1em] at (0, 0) {$+$};
    \node[blue, minimum width=1em] at (4, 0) {$-$};
    \node[orange, inner sep=1pt, anchor=mid] at (0, -1) {\strut$+$};
    \node[green, inner sep=1pt, anchor=mid] at (4, -1) {\strut$-$};
    \node[olive, minimum width=2em] at (0, -2) {$+$};
    \node[purple, minimum width=2em] at (4, -2) {$-$};
    \node[cyan] at (0, -3) {$+$};
    \node[magenta] at (4, -3) {$-$\vphantom{$+$}};
\end{tikzpicture}
\end{document}

产生以下内容: 我尝试过更多方法。

从图中可以看出,唯一似乎适用于 CambriaMath 的方法是\vphantom{+}下面评论中提到的方法。

答案1

我认为这个问题与 Cambria Math 没有特别的关系,因为它似乎源于这样一个事实,即加号和减号的边界框非常不同,最重要的是,减号的边界框特别紧密。

例如,比较 Camrbia Math 字形的边界框:

\documentclass{article}
\usepackage[margin=15mm]{geometry}
\usepackage{showcharinbox, anyfontsize}

\usepackage{unicode-math}
\setmathfont{Cambria Math}

\begin{document}
\ShowCharInBox{\fontsize{200}{210}\selectfont$+$}
\vskip 1cm
\ShowCharInBox{\fontsize{200}{210}\selectfont$-$}
\end{document}

在此处输入图片描述

另一方面,Computer Modern 的边界框将是:

\documentclass{article}
\usepackage[margin=15mm]{geometry}
\usepackage{showcharinbox, anyfontsize}
    
\begin{document}
\ShowCharInBox{\fontsize{200}{210}\selectfont$+$}
\vskip 1cm
\ShowCharInBox{\fontsize{200}{210}\selectfont$-$}
\end{document}

在此处输入图片描述

(侧节点:实际上,我本来猜测在 Computer Modern 中加号和减号的边界框具有相同的高度和宽度,但显然事实并非如此。)


该怎么办?您可以\strut在加号或减号之前或之后插入:

\documentclass[border=10pt]{standalone}
\usepackage{unicode-math}
\setmathfont{Cambria Math}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \draw[gray] (0, 0) -- (4, 0);
    \node[red, draw, circle] at (0, 0) {\strut$+$};
    \node[blue, draw, circle] at (4, 0) {\strut$-$};
\end{tikzpicture}
\end{document}

在此处输入图片描述

这会增加一点填充,但您可以通过将其设置inner sep为较小的值甚至零来调节它。此外,您可能想text depth稍微调整一下。使用inner sep=1pttext depth=0.25em,您将获得:

\documentclass[border=10pt]{standalone}
\usepackage{unicode-math}
\setmathfont{Cambria Math}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \draw[gray] (0, 0) -- (4, 0);
    \node[red, draw, circle, inner sep=1pt, text depth=0.25em] at (0, 0) {\strut$+$};
    \node[blue, draw, circle, inner sep=1pt, text depth=0.25em] at (4, 0) {\strut$-$};
\end{tikzpicture}
\end{document}

在此处输入图片描述

那么发生的事情是:TiZ 使节点大小足以适应每个字形,由于 Cambria Math 减号的边界框高度比加号的边界框高度小得多,因此字形会向上移动。使用\strut,您实际上输入了一个宽度为零但字形高度最大的边界框。因此(由于 Cambria Math 加号和减号的宽度),两个节点变得同样大。

另一种方法是插入\vphantom{$+$}Zarko 在评论中所建议的内容。

(旁注:输入也应该适用于 Computer Modern,因为加号和减号的两个字形似乎也不具有相同的高度。但是,由于 Computer Modern 中加号和减号的边界框的宽度不一样,在这种情况下,使用或\strut明确节点的大小可能是一个更好的主意。)text widthminimum width

相关内容