可能重复:
如何将一系列 TikZ 图片在基线对齐
我想将我的公式与一些 TikZ 图形混合。例如:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{equation}
n\cdot
\tikz[baseline]\node [minimum height=2em,draw=black] {$m$}; \cdot
\tikz[baseline]\node [draw=black] {a}; \cdot
b
\end{equation}
\end{document}
这将生成以下输出:
然而,Tikz 的基线与方程式中的基线不符。你看,m 比 n 更深,而点位于 m 上方的任何地方。
如何才能使所有文本位于一个共同的基线上?
答案1
框的baseline
是框的底部。默认行为是与基线对齐:
\tikz \node [minimum height=2em,draw=black] {$m$};
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{equation}
n\cdot
\tikz \node [minimum height=2em,draw=black] {$m$}; \cdot
\tikz \node [draw=black] {a}; \cdot
b
\end{equation}
\end{document}
如果您想将文本与基线对齐,那么根据Jake的建议,您需要添加anchor=base
:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{equation}
n\cdot
\tikz [anchor=base, baseline] \node [minimum height=2em,draw=black] {$m$}; \cdot
\tikz [anchor=base, baseline] \node [draw=black] {a}; \cdot
b
\end{equation}
\end{document}
答案2
我认为最好避免特殊情况。tikz 环境的结果是一个具有宽度、高度和深度的框。通常,图片的下端放在当前基线上。在这种情况下,我们可以认为深度为空。您可以使用选项(tikzpicture 的baseline
选项)修改深度和高度的值。
在下图中,圆圈位于(0,0)
\documentclass{article}
\usepackage{tikz}
\begin{document}
a\tikz [baseline=0pt] {\draw (-1em,-1em) rectangle (1em,2em);
\fill (-1em,0) circle (2pt);
\draw[dashed] (-1em,0em) --(1em,0em); }b
\tikz {\draw (-1em,-1em) rectangle (1em,2em);
\fill (-1em,0) circle (2pt);
\draw[dashed] (-1em,0em) --(1em,0em); }
\end{document}
第一个矩形与圆一起放置在基线上,对于没有基线选项的第二个矩形,框的深度为空。
现在的问题是如何使用基线选项。pgfmanual/tikz/baseline=⟨dimension or coordinate or default ⟩
默认为 =0pt。为了避免使用维度,我们可以使用坐标。可以使用 tikz 命名坐标,因此使用名称很容易,但如果您的图片中没有名称,tikz 允许使用特定节点:它是current bounding box
。
例如,
a\tikz [baseline=(current bounding box.base)] {%
\draw (-1em,-1em) rectangle (1em,2em);
\fill (-1em,0) circle (2pt);
\draw[dashed] (-1em,0em) --(1em,0em); }b .
得到的结果与[baseline=0pt]
图中只有一个节点的特殊情况
可以使用,anchor = base
因为当前坐标是(0,0),但是
\documentclass{article}
\usepackage{tikz}
\begin{document}
a\tikz[baseline] \draw (0,-1em) -- (0,2em) +(1em,0) node[anchor=base] {$m$};
\end{document}
是错误的。anchor=base
就像杰克写的一样,这是节点的一个选项。
(0,0) 位于基线上,但不位于文本上。anchor=base
在这种情况下不是很有用。
现在你可以使用图片中定义的坐标
如果图片中有多个节点,我们需要定义一个特定的节点
\documentclass{article}
\usepackage{tikz}
\begin{document}
a\tikz[baseline=0pt] {\node at (0,-1em) {$m$};
\node(x) at (1em,2em) {$n$};
\node at (2em,3em) {$p$};}b
c\tikz[baseline=(x.base)] {\node at (0,-1em) {$m$};
\node(x) at (1em,2em) {$n$};
\node at (2em,3em) {$p$};}d
\end{document}
在这种情况下,(x.base)被放置在基线上。Tikz 修改了最终框的深度以放置n
在基线上。