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直接修正できます。ただし、これが継続的な問題である場合は、robustify アプローチの方が理にかなっていると思います。

\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}}$};

関連情報