\text{ } el tamaño del subíndice en la macro tikzmath no es correcto

\text{ } el tamaño del subíndice en la macro tikzmath no es correcto

Esta pregunta está relacionada conesta pregunta anterior mía sobre TeX-SE

Me gustaría tener un subíndice de texto adecuado usando el comando \text{}. No parece funcionar con las macros de tikzmath. Consulte el siguiente 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}

Como puede verse en el resultado, el tamaño del subíndice no es correcto: El tamaño del subíndice no es correcto

Si aplico la solución sugerida, se corrige el tamaño del subíndice: ingrese la descripción de la imagen aquí

Mi pregunta es el uso etoolboxy robustifyla forma sugerida de corregir los \textsubíndices, que pueden tener algunos efectos secundarios que puedo enfrentar en el futuro, o ¿existe una forma más sólida de corregir el tamaño?

Nota:El uso de \textrmno funciona en el ejemplo anterior, que utilicé para el problema que informé en mi publicación anterior.

Respuesta1

Agregue una \noexpandsolución para solucionarlo directamente. Pero creo que el enfoque de solidificación tiene más sentido si se trata de un problema constante.

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

ingrese la descripción de la imagen aquí

Respuesta2

Puedes ver lo que sucede si agregas \show\textdespués de la \tikzmathdeclaración:

> \test=macro:
->\protect \unhbox \voidb@x \hbox {b}_{\protect \unhbox \voidb@x \hbox {b}}.

En efecto, la definición de \textse encuentra en amstext.sty:

% amstext.sty, line 28:
\DeclareRobustCommand{\text}{%
  \ifmmode\expandafter\text@\else\expandafter\mbox\fi}

También hay que saber que \tikzmathhace expansión total; ya que \textno se encuentra en modo matemático, simplemente lo hace \mbox. Dado que en el momento del letsignificado de \protectis \relax, continúa intacto; luego el condicional se expande y como TeX no está en modo matemático, obtienes \mbox{b}, que se convierte en

\leavemode\hbox{b}

y finalmente \unhbox\voidb@x\hbox{b}. Esto debería explicar el resultado \showanterior.

Posiblemente quieras evaluar algo en lugar de tenerlo ben el argumento to \text; en este caso hay que tener cuidado con qué expandir completamente y qué no.

\tikzmath{let \test=\noexpand\text{b}_{\noexpand\text{b}};}

Servirá, pero si en lugar de beso tienes algo como \textbf{abc}, este morirá horriblemente de todos modos.

Necesitas\noexpand delante deambosapariciones de \text, para suprimir su expansión y obtener la versión correcta cuando \testrealmente se use en modo matemático.

Respuesta3

Lo sencillo es utilizar \mathrm{}. Entonces quedaría algo como esto:

  \node (nodelabel) [base] {$\mathrm{Text_{subscript}}$};

información relacionada