有什么方法可以确保枚举环境的数字保持在 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 图片(此处:b
或d
)。
\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}