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이전 게시물에서 보고한 문제에 사용했던 위의 예에서는 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}}$};

관련 정보