
Я хочу использовать встроенный код 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}