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。因為當islet的意思出現時,它繼續保持不變;然後條件被擴展,並且由於 TeX 不處於數學模式,你得到,它變成\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}}$};

相關內容