枚举环境中的 tikz 图片

枚举环境中的 tikz 图片

有什么方法可以确保枚举环境的数字保持在 tikzpicture 的左上角?我正在使用一个仅环绕枚举环境的自定义环境...

\documentclass{article}
\usepackage{tikz}
\usepackage{enumitem}

\usetikzlibrary{positioning}
\tikzstyle{dot} = [draw=black, fill=white, circle, inner sep=2pt]

\newenvironment{parts}
  {\begin{enumerate}[label=\alph*)]}
  {\end{enumerate}}

\begin{document}
    \begin{parts}
      \item 
        \begin{tikzpicture}
          \node (a) {a};
          \node (b) [above=1cm of a] {b};
          \node (c) [right=1cm of a] {c};
          \node (d) [above=1cm of c] {d};
          \path
            (a) edge node {} (b)
            (a) edge node {} (d)
            (d) edge node {} (c);
        \end{tikzpicture}
    \end{parts}
\end{document}

答案1

环境的数字enumerate不会移动到最底部,TikZ 图片的边界框底部设置在基线处。

可以使用 TikZ 的选项更改此基线baseline。PGF 手册在第 117 页的 12.2.1 小节“使用环境创建图片”中说明:

以下键影响生成的图片的基线:

tikz/baseline=<dimension or coordinate or default(默认0pt

通常情况下,图片的下端会放在周围文本的基线处。例如,当您给出代码时\tikz\draw(0,0)circle(.5ex);,PGF 会找出图片的下端位于-.5ex,而上端位于.5ex。然后,下端会放在基线 […] 上。

使用此选项,您可以指定图片应升高或降低,以使高度<dimension>位于基线上。[…]

此选项通常对于“内联”图形有用[...]。

您也可以在括号中提供一个坐标,而不是一个<dimension>。那么效果就是将基线放在-坐标,即给定[n]<coordinate>在图片末尾的坐标。这意味着,在图片末尾,对<coordinate>进行评估,然后将基线设置为-结果点的坐标。这使得引用-例如,节点基线的坐标。

使用该baseline选项,您可以根据其中一个包含节点的基线对齐 TikZ 图片(此处:bd)。

\begin{tikzpicture}[baseline=(b.base)]

一个通用的解决方案是使用 TikZ 图片的最高点减去与1em当前行顶部对齐的最高点,这对于像您的示例中的标准矩形节点非常b有效d

\begin{tikzpicture}[baseline={([yshift=-1em] current bounding box.north)}]

在下面的代码中取而代之\tikzstyle\tikzset并添加了样式

  • enum
  • no enum, 和
  • base at

我还parts稍微改变了定义,以便其中的每个 TikZ 图片都根据样式自动对齐enum

查看代码中的示例和输出,了解这会如​​何影响结果以及如何针对特定的 TikZ 图片进行更改。

代码

\documentclass{article}
\usepackage{tikz}
\usepackage{enumitem}

\usetikzlibrary{positioning}
\tikzset{
    dot/.style={draw=black, fill=white, circle, inner sep=2pt},
    enum/.style={baseline={([yshift=-1em] current bounding box.north)}},
    base at/.style={baseline={(#1.base)}},
    no enum/.style={baseline=default},
}

\newenvironment{parts}
  {\tikzset{every picture/.append style={enum}}\begin{enumerate}[label=\alph*)]}
  {\end{enumerate}}

\begin{document}
    \begin{parts}
        \item 
            \begin{tikzpicture}
                \node (a) {a};
                \node (b) [above=1cm of a] {b};
                \node (c) [right=1cm of a] {c};
                \node (d) [above=1cm of c] {d};
                \path (a) edge (b)
                          edge (d)
                      (d) edge (c);
            \end{tikzpicture}
        \item \tikz[no enum] \draw (0,0) circle (.5ex);
        \item \tikz          \draw (0,0) circle (.5ex);
        \item \tikz[base at=a] \node[circle,draw] (a) {X};
        \item \tikz            \node[circle,draw] (a) {X};
    \end{parts}
\end{document}

输出

在此处输入图片描述

相关内容