Como dimensionar automaticamente o código TikZ embutido em subscritos?

Como dimensionar automaticamente o código TikZ embutido em subscritos?

Quero usar o código TikZ embutido para criar meu próprio símbolo de subscrito. Por exemplo algo como

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

O problema é que não é dimensionado. O comprimento da seta é maior que 2 vezes o caractere x( exsignifica a altura do caractere x). Como posso consertar isso? O problema torna-se realmente doloroso se o símbolo for um subscrito de um subscrito. TikZ não dimensiona o símbolo, embora a altura absoluta das exmudanças.

Não quero usar um símbolo matemático 'padrão'. Na verdade, meu símbolo é mais complicado e nenhum símbolo matemático está disponível.

Responder1

A macro \textdo pacote amstext(também carregado por amsmath) configura os tamanhos de fonte corretos e pode ser usada para acessar corretamente as unidades de fonte eme ex.

Pelos seus comentários, parece que você usou nós baseados no tamanho da fonte para as setas em vez de usar setas reais (o que provavelmente não é uma má ideia porque o TikZ é muito inflexível quando se trata de tamanhos de setas), no entanto, incluí uma pequena redefinição da |ponta da seta que leva uma opção (definida \pgfsetarrowoptionse acessada com \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}

Saída

insira a descrição da imagem aqui

informação relacionada