この質問は以前の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}
出力からわかるように、下付き文字のサイズが正しくありません。
提案された修正を適用すると、下付き文字のサイズが修正されます。
私の質問は、下付き文字の修正方法の使用etoolbox
とrobustify
提案です\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}}$};