如何自动缩放下标中的内联 TikZ 代码?

如何自动缩放下标中的内联 TikZ 代码?

我想使用内联 TikZ 代码来创建自己的下标符号。例如

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

问题是它没有缩放。箭头的长度比字符的 2 倍长xex即字符的高度x)。我该如何解决这个问题?如果符号是下标的下标,问题就会变得非常棘手。尽管绝对高度会发生变化,但 TikZ 不会缩放符号ex

我不想使用“标准”数学符号。实际上,我的符号更复杂,没有可用的数学符号。

答案1

\text来自amstext(也由)包的宏amsmath设置了正确的字体大小,并可以用来正确访问字体单位emex

从您的评论来看,您似乎使用了基于字体大小的节点作为箭头,而不是使用真正的箭头(这可能不是一个坏主意,因为 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}

输出

在此处输入图片描述

相关内容