这段代码似乎运行得很好,直到我尝试消除软件包parskip
。如果没有这个软件包,我似乎需要包含两个 hack:
- 添加
\vspace{-\baselineskip}
前和后环境itemize
。 - 需要
\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}