根据标题,我尝试在 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=1pt
和text 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}
那么发生的事情是:Ti钾Z 使节点大小足以适应每个字形,由于 Cambria Math 减号的边界框高度比加号的边界框高度小得多,因此字形会向上移动。使用\strut
,您实际上输入了一个宽度为零但字形高度最大的边界框。因此(由于 Cambria Math 加号和减号的宽度),两个节点变得同样大。
另一种方法是插入\vphantom{$+$}
Zarko 在评论中所建议的内容。
(旁注:输入也应该适用于 Computer Modern,因为加号和减号的两个字形似乎也不具有相同的高度。但是,由于 Computer Modern 中加号和减号的边界框的宽度不一样,在这种情况下,使用或\strut
明确节点的大小可能是一个更好的主意。)text width
minimum width