![\text{ } el tamaño del subíndice en la macro tikzmath no es correcto](https://rvso.com/image/390897/%5Ctext%7B%20%7D%20el%20tama%C3%B1o%20del%20sub%C3%ADndice%20en%20la%20macro%20tikzmath%20no%20es%20correcto.png)
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:
Si aplico la solución sugerida, se corrige el tamaño del subíndice:
Mi pregunta es el uso etoolbox
y robustify
la forma sugerida de corregir los \text
subí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 \textrm
no funciona en el ejemplo anterior, que utilicé para el problema que informé en mi publicación anterior.
Respuesta1
Agregue una \noexpand
solució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}
Respuesta2
Puedes ver lo que sucede si agregas \show\text
después de la \tikzmath
declaración:
> \test=macro:
->\protect \unhbox \voidb@x \hbox {b}_{\protect \unhbox \voidb@x \hbox {b}}.
En efecto, la definición de \text
se encuentra en amstext.sty
:
% amstext.sty, line 28:
\DeclareRobustCommand{\text}{%
\ifmmode\expandafter\text@\else\expandafter\mbox\fi}
También hay que saber que \tikzmath
hace expansión total; ya que \text
no se encuentra en modo matemático, simplemente lo hace \mbox
. Dado que en el momento del let
significado de \protect
is \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 \show
anterior.
Posiblemente quieras evaluar algo en lugar de tenerlo b
en 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 b
eso 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 \test
realmente se use en modo matemático.
Respuesta3
Lo sencillo es utilizar \mathrm{}. Entonces quedaría algo como esto:
\node (nodelabel) [base] {$\mathrm{Text_{subscript}}$};