![tikzmath 巨集中的 \text{ } 下標大小不正確](https://rvso.com/image/390897/tikzmath%20%E5%B7%A8%E9%9B%86%E4%B8%AD%E7%9A%84%20%5Ctext%7B%20%7D%20%E4%B8%8B%E6%A8%99%E5%A4%A7%E5%B0%8F%E4%B8%8D%E6%AD%A3%E7%A2%BA.png)
這個問題與我之前的 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
就可以修復。但我認為,如果這是一個持續存在的問題,那麼穩健化方法更有意義。
\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}}$};