Wie skaliert man Inline-TikZ-Code automatisch in Indizes?

Wie skaliert man Inline-TikZ-Code automatisch in Indizes?

Ich möchte Inline-TikZ-Code verwenden, um mein eigenes Indexsymbol zu erstellen. Zum Beispiel so etwas wie

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

Das Problem ist, dass es nicht skaliert wird. Die Länge des Pfeils ist länger als das Doppelte des Zeichens x( exalso die Höhe des Zeichens x). Wie kann ich das beheben? Das Problem wird wirklich schmerzhaft, wenn das Symbol ein Index eines Indexes ist. TikZ skaliert das Symbol nicht, obwohl sich die absolute Höhe ändert ex.

Ich möchte kein „Standard“-Mathematiksymbol verwenden. Tatsächlich ist mein Symbol komplizierter und es ist kein mathematisches Symbol verfügbar.

Antwort1

Das Makro \textaus dem amstext(ebenfalls von geladenen amsmath) Paket richtet die richtigen Schriftgrößen ein und kann verwendet werden, um korrekt auf die Schrifteinheiten emund zuzugreifen ex.

Aus Ihren Kommentaren scheint hervorzugehen, dass Sie für die Pfeile schriftgrößenbasierte Knoten anstelle von echten Pfeilen verwendet haben (was wahrscheinlich keine schlechte Idee ist, da TikZ sehr unflexibel ist, was die Pfeilgrößen angeht). Ich habe jedoch eine kleine Neudefinition der |Pfeilspitze eingefügt, die eine Option benötigt (festgelegt mit \pgfsetarrowoptionsund aufgerufen mit \pgfgetarrowoptions).

Code

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

Ausgabe

Bildbeschreibung hier eingeben

verwandte Informationen