是否有一种 tikz 风格可以将数学放在所有节点中?

是否有一种 tikz 风格可以将数学放在所有节点中?

我终于尝试了 TikZ,并且已经深受其程序化哲学的影响。我希望能够做类似的事情

every node/.style = {math mode}

(这是错误的),这样我就可以省略节点文本中的 $...$。这不仅仅是为了方便;如果没有它,同样有吸引力的设置

every node/.style = {font=\scriptstyle}

是错误的(\scriptstyle超出了数学模式),我当然可以找到在小文本中设置数学节点的用途。我知道我可以通过库matrix(使用matrix of math nodes)来实现这一点,但我拒绝使用矩阵。我真的很喜欢关系定位的想法,我讨厌矩阵的复杂使用总是需要的所有空 &。

那么,这可能吗?如何matrix of math nodes实现其效果?

答案1

在矩阵库文件中,在texmf/tex/generic/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymatrix.code.tex(您使用 得到的)处\usetikzlibrary{matrix},我们可以找到 的定义matrix of math nodes(在我的版本中,它位于第 74-81 行):

% Same as a matrix of nodes, but switch on math mode in each cell
\tikzstyle{matrix of math nodes}=[%
  matrix of nodes,
  nodes={%
   execute at begin node=$,%
   execute at end node=$%
  }%
]

因此,您只需使用execute at begin node/即可execute at end node。有趣的是,这些键似乎没有记录,至少在我的手册版本中没有。如果您想要一种math mode样式,那么您可以编写\tikzset{math mode/.style = {execute at begin node=$, execute at end node=$}};然后只需将其包含math mode在选项列表中即可实现您想要的效果(不需要every node/.style,因为该选项会隐式影响所有节点)。

这些选项不仅可以进行数学运算,还可以做更多的事情;请考虑以下代码:

\documentclass{amsart}
\usepackage{tikz}

\begin{document}
  \begin{center}\begin{tikzpicture}
    \begin{scope}[execute at begin node=$, execute at end node=$]
      \node at (-1.5,-0.375) {\mathfrak{A} \models \varphi_i} ;
      \node at (-1.5,-0.875) {0 \in \mathbb{N}} ;
    \end{scope}

    \begin{scope}[ color                 = blue
                 , execute at begin node = $\displaystyle
                 , execute at end node   = $]
      \node at (+1.5, 0.00) {\sum_{i=0}^\infty \frac{1}{2^n} = 2} ;
      \node at (+1.5,-1.25) {n! = \prod_{i=1}^n i} ;
    \end{scope}

    \begin{scope}
      [ execute at begin node=\textcolor{red}{\textbf{Important notice:} },
      , execute at end node={{} --- \textit{The Management}} ]
      \node at (0,-2.5) {\TeX{} is very powerful.} ;
      \node at (0,-3.0) {Ti\textit{k}Z is a useful graphics language.} ;
    \end{scope}
  \end{tikzpicture}\end{center}
\end{document}

这将产生以下图片:

上述选项的示例使用。

我们可以看到,该选项的用途不仅仅如此$...$;它在指定其他选项或任意文本时也能发挥作用。(请注意,如果指定任意文本,请小心前导/尾随空格;让它们出现可能很困难。)它不适用于\[...\](可能是因为进入了 vmode),但$\displaystyle...$可以正常工作。


编辑:正如 Ryan 指出的那样,值得澄清的是,作为参数的 TeXfont被插入TeX 是 的一个参数execute at begin node,这与使用上述样式获取数学节点有关,但font=\scriptstyle它不起作用,因为它超出了 的范围$...$。(您需要execute at begin node=$\scriptstyle, execute at end node=$。)

答案2

我可能一开始就不应该问这个问题,因为粗略地看一下 tikzlibrarymatrix.code.tex 就能立即得到答案。为了后人(因为作为初学者,这对我来说并不明显),我记录了第二个问题的答案。

\tikzstyle{matrix of math nodes}=[%
  matrix of nodes,
  nodes={%
   execute at begin node=$,%
   execute at end node=$%
  }%
]

因此,要回答我的第一个问题,应该只使用execute at begin node并将execute at end node文本换入 $ 中。

相关内容