纠正(删除)adjustwidth的垂直间距

纠正(删除)adjustwidth的垂直间距

考虑以下使用的示例changepageadjustwidth单个段落设置为文本宽度的 80%(左侧)。将其与使用\parshape(右侧)进行比较:

在此处输入图片描述

\documentclass{article}
\usepackage[a5paper]{geometry}% http://ctan.org/pkg/geometry
\usepackage{changepage,lipsum}% http://ctan.org/pkg/{changepage,lipsum}
\begin{document}

\lipsum[1]

\begin{adjustwidth}{0pt}{.2\textwidth}
\hspace*{\parindent}\lipsum[2]
\end{adjustwidth}

\lipsum[2]

\clearpage

\lipsum[1]

\parshape 1 0pt .8\textwidth
\lipsum[2]

\lipsum[2]

\end{document}

我如何调整引入的垂直间距adjustwidth以使其与\parshape输出的垂直间距相匹配?

我理解adjustwidth将其内容设置在列表中(参见changepage.tex),列表自然会在它上面/下面有一些间隙。但是,\topsep已经设置为零 ( \z@),所以我不确定这些长度从何而来/如何删除它们。

答案1

额外的空间来自\partopsep。您可以设置\partopsep0pt

\documentclass{article}
\usepackage[a5paper]{geometry}% http://ctan.org/pkg/geometry
\usepackage{changepage,lipsum}% http://ctan.org/pkg/{changepage,lipsum}

\makeatletter
\renewenvironment{adjustwidth}[2]{%
  \begin{list}{}{%
    \partopsep\z@%
    \topsep\z@%
    \listparindent\parindent%
    \parsep\parskip%
    \@ifmtarg{#1}{\setlength{\leftmargin}{\z@}}%
                 {\setlength{\leftmargin}{#1}}%
    \@ifmtarg{#2}{\setlength{\rightmargin}{\z@}}%
                 {\setlength{\rightmargin}{#2}}%
    }
    \item[]}{\end{list}}
\makeatother

\begin{document}

\lipsum[1]

\begin{adjustwidth}{0pt}{.2\textwidth}
\hspace*{\parindent}\lipsum[2]
\end{adjustwidth}

\lipsum[2]

\clearpage

\lipsum[1]

\parshape 1 0pt .8\textwidth
\lipsum[2]

\lipsum[2]

\end{document}

或者,借助etoolbox

\documentclass{article}
\usepackage[a5paper]{geometry}% http://ctan.org/pkg/geometry
\usepackage{changepage,lipsum}% http://ctan.org/pkg/{changepage,lipsum}
\usepackage{etoolbox}
\AtBeginEnvironment{adjustwidth}{\partopsep0pt}

\begin{document}

\lipsum[1]

\begin{adjustwidth}{0pt}{.2\textwidth}
\hspace*{\parindent}\lipsum[2]
\end{adjustwidth}

\lipsum[2]

\clearpage

\lipsum[1]

\parshape 1 0pt .8\textwidth
\lipsum[2]

\lipsum[2]

\end{document}

在此处输入图片描述

相关内容