为什么 tikz 思维导图注释中有这个垂直距离?

为什么 tikz 思维导图注释中有这个垂直距离?

在以下最小示例中

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{mindmap}
\begin{document}
\begin{tikzpicture}[every annotation/.style = {draw, font = \Large}]
  \node [annotation] at (4,4) {\parskip 0pt \parindent 0pt  %
    \list{$\bullet$}{\topsep=0pt\itemsep=0pt\parsep=0pt\parskip=0pt\labelwidth=8pt\leftmargin=8pt\itemindent=0pt\labelsep=2pt}%
      \item Item%
    \endlist};
  \node [annotation] at (2,2) {Hallo};
\end{tikzpicture}
\end{document}

我在列表前得到了一个垂直距离,根据我的理解,它不应该存在在那里。

在此处输入图片描述

它为什么在那里?是 bug 还是我不理解的功能?删除它的正确方法是什么?我无法使用enumitem- 这是 MWE,但原始文档存在与 不兼容的情况enumitem

答案1

使用该enumitem包:

\documentclass[border=3.141592]{standalone}
\usepackage{tikz}
\usetikzlibrary{mindmap}
\usepackage{enumitem}

\begin{document}
    \begin{tikzpicture}[
annotation/.style = {draw, rounded corners, font = \Large,
                     text width=5em}    % <---
                        ]
\node [annotation] {\begin{itemize}[nosep,leftmargin=*, before=\vspace{-0.5\baselineskip}]
                      \item Item
                      \end{itemize}
                      };
\node [annotation] at (0,-1) {Hallo};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

附录: 建议的解决方案不适用于 beamer。因为它更适合包含itemize在 minipage 中:

\documentclass{beamer}
\usepackage{tikz}

\begin{document}
\begin{frame}[fragile]
    \begin{tikzpicture}[
annotation/.style = {draw, rounded corners, font = \Large,
                     text width=6em}    % <---
                        ]
\node [annotation] {\begin{minipage}{\linewidth}
                    \begin{itemize}
                      \item Item
                    \end{itemize}
                    \end{minipage}
                   };
\node [annotation] at (0,-1) {Hallo};
    \end{tikzpicture}
\end{frame}
\end{document}

standalone上述解决方案在文档以及article其他默认 LaTeX 文档类中也运行良好。

在此处输入图片描述

答案2

@Zarko 的回答指出了一个很好的方向。看起来垂直空间与 相连\baselineskip。如果我 ,\baselineskip0pt问题就解决了(但是在其他地方会产生不良副作用)。从美学上讲\vspace,对进行否定0.5\baselineskip是最令人愉悦的解决方案,但它还有另一个不良副作用:我想将其作为宏构造的一部分,而不想手动区分不同的情况(在 MWE 中看不到这一点,只有在宏构造中才会变得明显)。

我现在将为我的宏包采用的解决方案是使用,\par\nointerlineskip因为它的工作方式与内容的延续无关。就 MWE 而言,这意味着:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{mindmap}
\begin{document}
\begin{tikzpicture}[every annotation/.style = {draw, font = \Large}]
  \node [annotation] at (4,4) {\par\nointerlineskip%
    \list{$\bullet$}{\topsep=0pt\itemsep=0pt\parsep=0pt\parskip=0pt\labelwidth=8pt\leftmargin=8pt\itemindent=0pt\labelsep=2pt}%
      \item Item%
    \endlist};
  \node [annotation] at (2,2) {\par\nointerlineskip%
  Hallo};
\end{tikzpicture}
\end{document}

并产生

在此处输入图片描述

相关内容