如何自動縮放下標中的內聯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}

輸出

在此輸入影像描述

相關內容