tikzmath 宏中的 \text{ } 下标大小不正确

tikzmath 宏中的 \text{ } 下标大小不正确

这个问题与我之前的 TeX-SE 问题

我想使用 \text{} 命令获得正确的文本下标。它似乎不适用于 tikzmath 宏。请参阅以下 MWW:

\documentclass[]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{math}

%%%To fix the text subscript
%\usepackage{etoolbox}
%\makeatletter
%\robustify{\text}
%\makeatother 

\begin{document}
    \begin{tikzpicture}

    \node at (0,0) {$\text{b}_\text{b}$: Correct};

    \tikzmath{let \test=\text{b}_{\text{b}};}
    \node at (0,-1cm) {$\test$: Not Correct};

    \end{tikzpicture}
\end{document}

从输出可以看出,下标大小不正确: 下标大小不正确

如果我应用建议的修复,下标大小就会得到更正: 在此处输入图片描述

我的问题是使用etoolboxrobustify建议的修复下标的方法\text,这可能会产生我将来可能会遇到的一些副作用,或者是否有更强大的方法来纠正尺寸?

笔记:在上面的例子中,使用\textrm不起作用,我使用它来解决我在之前的帖子中报告的问题。

答案1

添加一个\noexpand可以直接修复它。但如果这是一个持续存在的问题,我认为强化方法更有意义。

\documentclass[]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{math}

%%%To fix the text subscript
%\usepackage{etoolbox}
%\makeatletter
%\robustify{\text}
%\makeatother 

\begin{document}
    \begin{tikzpicture}

    \node at (0,0) {$\text{b}_\text{b}$: Correct};

    \tikzmath{let \test=\text{b}_{\text{b}};}
    \node at (0,-1cm) {$\test$: Not Correct};

    \tikzmath{let \test=\text{b}_{\noexpand\text{b}};}
    \node at (0,-2cm) {$\test$: Corrected with noexpand};

    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

\show\text如果你在声明后添加以下内容,你就会明白发生了什么\tikzmath

> \test=macro:
->\protect \unhbox \voidb@x \hbox {b}_{\protect \unhbox \voidb@x \hbox {b}}.

事实上,的定义\text可以在中找到amstext.sty

% amstext.sty, line 28:
\DeclareRobustCommand{\text}{%
  \ifmmode\expandafter\text@\else\expandafter\mbox\fi}

您还必须知道 会\tikzmath进行完全扩展;由于\text在数学模式下找不到 ,它只会进行。由于在的含义是\mbox时,它会保持不变;然后条件被扩展,并且由于 TeX 不在数学模式中,您会得到,它变成let\protect\relax\mbox{b}

\leavemode\hbox{b}

最后\unhbox\voidb@x\hbox{b}。这应该可以解释上面的输出\show

可能您想要评估某些东西而不是b在论点中拥有\text;在这种情况下,您需要小心什么可以完全扩展,什么不能。

\tikzmath{let \test=\noexpand\text{b}_{\noexpand\text{b}};}

可以,但如果不是b这样的话\textbf{abc},无论如何这都会死得很惨。

你需要\noexpand在前面两个都的出现\text,以便\test在数学模式下确实使用时抑制其扩展并获取正确的版本。

答案3

简单的做法是使用 \mathrm{}。因此它看起来应该像这样:

  \node (nodelabel) [base] {$\mathrm{Text_{subscript}}$};

相关内容