考虑以下使用的示例changepage
将adjustwidth
单个段落设置为文本宽度的 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
。您可以设置\partopsep
为0pt
:
\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}