TikZ 和 Mathmode 中的共同基线

TikZ 和 Mathmode 中的共同基线

可能重复:
如何将一系列 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}

这将生成以下输出:

Latex 输出

然而,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在基线上。

在此处输入图片描述

相关内容