memoir 的 adjustwidth 环境错误调整了右边距?

memoir 的 adjustwidth 环境错误调整了右边距?

这是我发现此问题的最简单的文件:

\documentclass[article,titlepage,12pt,openany,draft]{memoir}

\usepackage{calc}
\usepackage[dvipsnames]{xcolor}
\definecolor{shadecolor}{gray}{0.85}
\usepackage{lipsum}


\newlength{\shademar}
\setlength{\shademar}{2.5\FrameSep}

\newenvironment*{ShadeAux}[2]%
{\begin{adjustwidth}{\shademar + #1}{\shademar + #2}\begin{qshade}\ignorespaces}%
{\end{qshade}\end{adjustwidth}\ignorespacesafterend}


\begin{document}

\lipsum[3]
\begin{ShadeAux}{\leftmargin}{0pt}
\lipsum[12]
\end{ShadeAux}
\begin{quotation}
\lipsum[12]
\end{quotation}
\begin{ShadeAux}{\leftmargin}{\leftmargin}
\lipsum[12]
\end{ShadeAux}
\lipsum[3]

\end{document}

第一个长度\shademar用于消除qshade环境向边距的突出部分。如您所见,第一次调用ShadeAux按预期工作。但第二次调用则使ShadeAux右边距向内缩进得比应有的要多。

作为对评论的回应:我最初没有\shademar在àdjustwidth`环境之前添加的原因是我想变得聪明,并且没有定义两个(或一个)额外的长度:即一个用于左边距,一个用于右边距。

为什么会出错?

答案1

adjustwidth设置\leftmargin,所以当查看第二个参数时,输入值已经改变,如果你首先评估两个长度,你会得到不同的结果(希望是你想要的结果)

在此处输入图片描述

\documentclass[article,titlepage,12pt,openany,draft]{memoir}

\usepackage{calc}
\usepackage[dvipsnames]{xcolor}
\definecolor{shadecolor}{gray}{0.85}
\newlength\zzza
\newlength\zzzb
\usepackage{lipsum}


\newlength{\shademar}
\setlength{\shademar}{2.5\FrameSep}

\newenvironment*{ShadeAux}[2]%
{%
\setlength\zzza{\shademar+#1}%
\setlength\zzzb{\shademar+#2}%
\begin{adjustwidth}{\zzza}{\zzzb}\begin{qshade}\ignorespaces}%
{\end{qshade}\end{adjustwidth}\ignorespacesafterend}


\begin{document}

\lipsum[3]
\begin{ShadeAux}{\leftmargin}{0pt}
\lipsum[12]
\end{ShadeAux}
\begin{quotation}
\lipsum[12]
\end{quotation}
\begin{ShadeAux}{\leftmargin}{\leftmargin}
\lipsum[12]
\end{ShadeAux}
\lipsum[3]

\end{document}

相关内容