这是我发现此问题的最简单的文件:
\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}