如何在 tikz 节点中“修复基线”?

如何在 tikz 节点中“修复基线”?

我想使用包\ce{}中的元素定义节点,这些节点是带有文本的形状mhchem。我该如何确保节点之间的基线相同,现在如果我使用下标,它会发生变化。这是一个 MWE:

\documentclass{article}
\usepackage[version=3]{mhchem}

\usepackage{tikz}
\usetikzlibrary{shapes}

\newbox\nodebox
\newcommand\mycommand[2]{%
    \begin{tikzpicture}%
        \node[text=#1, rectangle, inner ysep=4pt, inner xsep=2pt, rounded corners=7, minimum height=5mm, minimum width=10mm, fill=#1] {\tiny\sffamily \textbf{\ce{#2}}};
        \node[yshift=-0.5,text=black!95!white] {\scriptsize\sffamily \textbf{\ce{#2}}};
        \node[text=white] {\scriptsize\sffamily \textbf{\ce{#2}}};
    \end{tikzpicture}%
}

\begin{document}

\mycommand{red!40!white}{Al2O3} \mycommand{blue!40!white}{Al}

\end{document}

答案1

在这种情况下,您需要手动将text depth所有节点的 设置为相同的值。如果将其设置为text depth=0pt,则文本将按没有降部或下标的方式对齐;如果将其设置为text depth=0.25ex,则所有节点中的文本将按有降部或下标的方式对齐。

\documentclass{article}
\usepackage[version=3]{mhchem}

\usepackage{tikz}
\usetikzlibrary{shapes}

\newbox\nodebox
\newcommand\mycommand[2]{%
    \begin{tikzpicture}[every node/.append style={text depth=0.25ex}]%
        \node[
            text=#1,
            rectangle,
            inner ysep=4pt,
            inner xsep=2pt,
            rounded corners=7,
            minimum height=5mm,
            minimum width=10mm,
            fill=#1
        ] {\tiny\sffamily \textbf{\ce{#2}}};
        \node[
            yshift=-0.5,
            text=black!95!white
        ] {\scriptsize\sffamily \textbf{\ce{#2}}};
        \node[text=white]{\scriptsize\sffamily\textbf{\ce{#2}}};
    \end{tikzpicture}%
}

\begin{document}

\mycommand{red!40!white}{Al2O3} \mycommand{blue!40!white}{Al}

\end{document}

相关内容