我终于尝试了 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
文本换入 $ 中。