itemize 后的间距(无 parskip 包)

itemize 后的间距(无 parskip 包)

这段代码似乎运行得很好,直到我尝试消除软件包parskip。如果没有这个软件包,我似乎需要包含两个 hack:

  1. 添加\vspace{-\baselineskip} 环境itemize
  2. 需要\strut添加。

因此没有parskip,并且通过这两个技巧我获得了预期的结果:

在此处输入图片描述

但是如果没有黑客攻击,可以通过确保以下内容未注释来获得:

\renewcommand{\HackVSpace}{}%
\renewcommand{\HackStrut}{}%

得出:

在此处输入图片描述

当然,有一个不那么黑客化的解决方案。而且,特别的是,parskip我得到了想要的行为。

笔记:

  • 在实际使用中,我实际上只使用它来单身的项目并itemize提供所需的格式,所以我可以不用itemize。但我仍然想知道如何控制itemize

代码:

%\def\UseParskipPackage{}% Need to work with this commented.

\documentclass{article}
\usepackage{xcolor}
\usepackage{enumitem}
\usepackage{showframe}

\ifdefined\UseParskipPackage
    \usepackage{parskip}
    \newcommand{\HackVSpace}{}%
    \newcommand{\HackStrut}{}%
\else
    \newcommand{\HackVSpace}{\vspace{-\baselineskip}}%
    \newcommand{\HackStrut}{\strut}%
\fi


%% Remove the hack - comment these out and things work fine
%% with or without the parskip package
    \renewcommand{\HackVSpace}{}%
    \renewcommand{\HackStrut}{}%


\begin{document}

\noindent
\colorbox{blue!20}{%
    \parbox[t]{\dimexpr\linewidth-2\fboxsep\relax}{%
            \HackVSpace%
            \begin{itemize}[label={\small \texttt{X:}}]%
                \item \HackStrut\texttt{some text fff yyy}%
            \end{itemize}%
            \HackVSpace%
            }}%
%
\newline
\colorbox{blue!20}{%
    \parbox[t]{\dimexpr\linewidth-2\fboxsep\relax}{%
            \HackVSpace%
            \begin{itemize}[label={\small \texttt{Y:}}]%
                \item \HackStrut\texttt{some more text fff yyy}%
            \end{itemize}%
            \HackVSpace%
            }%
}%
\end{document}

答案1

该包改变了、和parskip的定义,对参数、和使用了不同的值;它将前两个设置为零,将第三个设置为。\@listi\@listii\@listiii\topsep\itemsep\parsep\parskip

这解释了为什么在加载时框中没有额外的空间parskip。如果没有,则应用正常间距。

解决方案,独立于parskip:添加nosep到传递给的选项itemize

\documentclass{article}
\usepackage{xcolor}
\usepackage{enumitem}
\usepackage{showframe}

\begin{document}

\noindent
\colorbox{blue!20}{%
  \parbox[t]{\dimexpr\linewidth-2\fboxsep\relax}{
    \begin{itemize}[label={\small \texttt{X:}},nosep]
    \item \texttt{some text fff yyy}
    \end{itemize}
  }%
}
\newline
\colorbox{blue!20}{%
  \parbox[t]{\dimexpr\linewidth-2\fboxsep\relax}{
    \begin{itemize}[label={\small \texttt{Y:}},nosep]
    \item \texttt{some more text fff yyy}
    \end{itemize}
  }%
}
\end{document}

在此处输入图片描述

答案2

页面顶部的空间会被丢弃,但框顶部的空间不会丢弃。LaTeX 会模拟这种行为,这是minipage和的主要区别\parbox

在此处输入图片描述

%\def\UseParskipPackage{}% Need to work with this commented.

\documentclass{article}
\usepackage{xcolor}
\usepackage{enumitem}
\usepackage{showframe}

\ifdefined\UseParskipPackage
    \usepackage{parskip}
    \newcommand{\HackVSpace}{}%
    \newcommand{\HackStrut}{}%
\else
    \newcommand{\HackVSpace}{\vspace{-\baselineskip}}%
    \newcommand{\HackStrut}{\strut}%
\fi


%% Remove the hack - comment these out and things work fine
%% with or without the parskip package
    \renewcommand{\HackVSpace}{}%
    \renewcommand{\HackStrut}{}%


\begin{document}

\noindent
\colorbox{blue!20}{%
    \parbox[t]{\dimexpr\linewidth-2\fboxsep\relax}{%
            \HackVSpace%
            \begin{itemize}[label={\small \texttt{X:}}]%
                \item \HackStrut\texttt{some text fff yyy}%
            \end{itemize}%
            \HackVSpace%
            }}%
%
\newline
\colorbox{blue!20}{%
    \parbox[t]{\dimexpr\linewidth-2\fboxsep\relax}{%
            \HackVSpace%
            \begin{itemize}[label={\small \texttt{Y:}}]%
                \item \HackStrut\texttt{some more text fff yyy}%
            \end{itemize}%
            \HackVSpace%
            }%
}%

\bigskip


\noindent
\colorbox{blue!20}{%
    \begin{minipage}[t]{\dimexpr\linewidth-2\fboxsep\relax}%
            \HackVSpace%
            \begin{itemize}[label={\small \texttt{X:}}]%
                \item \HackStrut\texttt{some text fff yyy}%
            \end{itemize}%
            \HackVSpace%
            \end{minipage}}%
%
\newline
\colorbox{blue!20}{%
    \begin{minipage}[t]{\dimexpr\linewidth-2\fboxsep\relax}%
            \HackVSpace%
            \begin{itemize}[label={\small \texttt{Y:}}]%
                \item \HackStrut\texttt{some more text fff yyy}%
            \end{itemize}%
            \HackVSpace%
            \end{minipage}%
}%

\end{document}

相关内容