¿Cómo escalar automáticamente el código TikZ en línea en subíndices?

¿Cómo escalar automáticamente el código TikZ en línea en subíndices?

Quiero usar código TikZ en línea para crear mi propio símbolo de subíndice. Por ejemplo algo como

$V_{\tikz{ \draw [|->] (0,0) -- (2ex,0); }}$

El problema es que no está escalado. La longitud de la flecha es más larga que 2 veces el carácter x( exsignifica la altura del carácter x). ¿Cómo puedo arreglar esto? El problema se vuelve realmente doloroso si el símbolo es un subíndice de un subíndice. TikZ no escala el símbolo, aunque la altura absoluta de exlos cambios.

No quiero utilizar un símbolo matemático "estándar". En realidad, mi símbolo es más complicado y no hay ningún símbolo matemático disponible.

Respuesta1

La macro \textdel paquete amstext(también cargada por amsmath) configura los tamaños de fuente correctos y puede usarse para acceder correctamente a las unidades de fuente emy ex.

Según tus comentarios, parece que has usado nodos basados ​​en el tamaño de fuente para las flechas en lugar de usar flechas reales (lo cual probablemente no sea una mala idea porque TikZ es muy inflexible cuando se trata de tamaños de flechas), sin embargo, he incluido una pequeña redefinición de la |punta de la flecha que toma una opción (establecida con \pgfsetarrowoptionsy accedida con \pgfgetarrowoptions).

Código

\documentclass{article}
\usepackage{tikz,amstext}
\makeatletter
\newcommand*{\myarrow}{%
    \mathchoice
        {\pgfsetarrowoptions{:}{2pt}\my@arrow}
        {\pgfsetarrowoptions{:}{2pt}\my@arrow}
        {\pgfsetarrowoptions{:}{1pt}\my@arrow}
        {\pgfsetarrowoptions{:}{1pt}\my@arrow}
}
\newcommand*{\my@arrow}{\text{\tikz\draw[:->] (0,0) -- (2ex,0);}}
\pgfarrowsdeclare{:}{:}
{
  \pgfarrowsleftextend{+-0.25\pgflinewidth}
  \pgfarrowsrightextend{+.75\pgflinewidth}
}
{
  \pgfutil@tempdima\pgfgetarrowoptions{:}
  \advance\pgfutil@tempdima by0\pgflinewidth%
  \pgfsetdash{}{+0pt}
  \pgfsetrectcap
  \pgfpathmoveto{\pgfqpoint{0.25\pgflinewidth}{-\pgfutil@tempdima}}
  \pgfpathlineto{\pgfqpoint{0.25\pgflinewidth}{\pgfutil@tempdima}}
  \pgfusepathqstroke
}
\makeatother
\begin{document}
$\displaystyle\myarrow\textstyle\myarrow V_{\myarrow_{\myarrow}}$
\end{document}

Producción

ingrese la descripción de la imagen aquí

información relacionada