Как автоматически масштабировать встроенный код TikZ в подписях?

Как автоматически масштабировать встроенный код TikZ в подписях?

Я хочу использовать встроенный код TikZ для создания собственного символа нижнего индекса. Например, что-то вроде

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

Проблема в том, что он не масштабируется. Длина стрелки больше, чем в 2 раза больше символа x( exимеется в виду высота символа x). Как это исправить? Проблема становится действительно болезненной, если символ является нижним индексом нижнего индекса. TikZ не масштабирует символ, хотя абсолютная высота меняется ex.

Я не хочу использовать 'стандартный' математический символ. На самом деле, мой символ сложнее, и математический символ недоступен.

решение1

Макрос \textиз пакета amstext(также загружаемого amsmath) устанавливает правильные размеры шрифта и может использоваться для корректного доступа к единицам измерения шрифта emи ex.

Из ваших комментариев следует, что вы использовали для стрелок узлы, основанные на размере шрифта, вместо использования настоящих стрелок (что, вероятно, неплохая идея, поскольку TikZ очень негибок в отношении размеров стрелок), однако я включил небольшое переопределение кончика стрелки, |которое принимает одну опцию (устанавливается с помощью \pgfsetarrowoptionsи доступно с помощью \pgfgetarrowoptions).

Код

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

Выход

введите описание изображения здесь

Связанный контент