(这是我的第一个 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 sep
为0pt
意味着将方程的几个项设置成 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
,直到第二次运行才能读取并用于定位覆盖。