Tikz 节点在数学环境中的定位,特别是 \frac

Tikz 节点在数学环境中的定位,特别是 \frac

(这是我的第一个 TEX 问题)。我试图在 tikzpicture 中标记一个方程式。我这样做了:

\documentclass[15pt,a4paper,headinclude, totoc]{scrartcl}

\usepackage{amsmath,amssymb,stmaryrd}       
\usepackage{tikz}                                               
\usetikzlibrary{arrows, positioning}        
\usetikzlibrary{matrix}                                 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{center}
\begin{tikzpicture}

\matrix[name=M3, matrix of nodes, inner sep=0pt, column sep=0pt]{
  \node (q) {$q$};
        & \node (eq1) {$=$};
        & \node (frac1) {$\dfrac{Q_l + Q_l^* + Q_f + Q_f^*}{2}$};
        & \node (eq2) {$=$};
        & \node (frac2) {$\dfrac{c(t) \cdot N(t)}{2 \cdot \lambda^2} \cdot$};
        & \node (end) {$\left[ \lambda-1+\lambda-1-\tau + \lambda + \lambda \cdot (1+\tau) \right]$};
        \\ };

    \node (Ql) [align=center, above=0.8em of frac1]{\footnotesize inland q-leader for inland};
\node (Ql*) [align=center, above right=1.8em of frac1] {\footnotesize inland q-follower at inland for inland q-leader};
    \node (Qf) [align=center, below=1em of frac1] {\footnotesize inland q-leader for foreign};
    \node (Qf*) [align=center, below right=1.8em of frac1] {\footnotesize inland q-follower for inland at foreign q-leader};

\draw[->] (Ql) -- (frac1);
\draw[->] (Ql*) -- (frac1);
    \draw[->] (Qf) -- (frac1);
    \draw[->] (Qf*) -- (frac1);

\end{tikzpicture}
 \end{center}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

这得出在此处输入图片描述

但我仍然不知道如何将箭头标签调整到指定的 Q。我还尝试了一些非相对定位,例如“从 (1,-2) 到 (4.5,0.2);”但这太复杂了。

有没有办法将分数中的“Ql”指定给 Ql 标签?

非常感谢

答案1

通过使用自动将每个矩阵元素设置为数学模式,您的方法可以变得更短matrix of math nodes。但无论哪种方式,该方法都会导致数学间距不理想,因为您依赖的是 TikZ 的矩阵间距,而不是 TeX 出色的数学排版功能。

这是我的建议:我定义了自己调整版本的\tikzmark宏,该宏位于同名图书馆

\newcommand{\mytikzmark}[2]{%
  \tikz[remember picture,inner sep=0pt,outer sep=0pt,baseline,anchor=base] 
    \node (#1) {\ensuremath{#2}};}

inner sep将和都设置outer sep0pt意味着将方程的几个项设置成 Tikz 节点不会影响数学的间距。

第一个参数是节点名称,稍后将使用它来定位节点。第二个参数是要在节点中排版的数学内容(\ensuremath此处用 包裹只是为了方便)。

现在,等式完成后(我使用了 LaTeX 的基本显示数学,但这适用于任何数学环境),可以在 中引用节点名称tikzpicture。它tikzpicture有一个选项overlay,因此它没有自己的大小并覆盖其他排版内容。因此,您需要在文档中添加一些垂直空间,为 Tikz 内容腾出空间:否则它可能会覆盖附近的文本。

这是完整的示例。当然,tikzpicture您可以根据需要调整 中的定位和其他选项。我还对环境使用了一些选项tikzpicture,以减少代码中的重复。例如,font=\footnotesize一次性设置该环境中所有节点文本的字体。箭头规范也是如此<-

\documentclass{article}
\usepackage{tikz}
\newcommand{\mytikzmark}[2]{%
  \tikz[remember picture,inner sep=0pt,outer sep=0pt,baseline,anchor=base] 
    \node (#1) {\ensuremath{#2}};}

\begin{document}
\[ q 
  = \frac{\mytikzmark{Ql}{Q_l} + 
            \mytikzmark{Ql*}{Q_l^*} + 
            \mytikzmark{Qf}{Q_f} + 
            \mytikzmark{Qf*}{Q_f^*}}{2} 
  = \frac{c(t) \cdot N(t)}{2 \cdot \lambda^2} \cdot 
    \left[ \lambda-1+\lambda-1-\tau + \lambda + \lambda \cdot (1+\tau) \right]
\]
\begin{tikzpicture}[<-,overlay,remember picture,inner sep=1.5pt,shorten <=0.2em,font=\footnotesize]
  \draw (Ql)  -- ++(1em,6.5em) node[right] {inland $q$-leader for inland};
  \draw (Ql*) -- ++(2em,5em)   node[right] {inland $q$-follower at inland for inland $q$-leader};
  \draw (Qf)  -- ++(3em,3.5em) node[right] {inland $q$-leader for foreign};
  \draw (Qf*) -- ++(4em,2em)   node[right] {inland $q$-follower for inland at foreign $q$-leader};
\end{tikzpicture}

\end{document}

在此处输入图片描述

该示例需要编译两次,因为节点位置被写入文件.aux,直到第二次运行才能读取并用于定位覆盖。

相关内容