![tikzmath 매크로의 \text{ } 아래 첨자 크기가 올바르지 않습니다.](https://rvso.com/image/390897/tikzmath%20%EB%A7%A4%ED%81%AC%EB%A1%9C%EC%9D%98%20%5Ctext%7B%20%7D%20%EC%95%84%EB%9E%98%20%EC%B2%A8%EC%9E%90%20%ED%81%AC%EA%B8%B0%EA%B0%80%20%EC%98%AC%EB%B0%94%EB%A5%B4%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..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
이전 게시물에서 보고한 문제에 사용했던 위의 예에서는 of를 사용할 수 없습니다.
답변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
. 이후 의 let
의미는 \protect
그대로 \relax
유지됩니다. 그런 다음 조건문이 확장되고 TeX가 수학 모드가 아니기 때문에 \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}}$};