我想要创建一个新的环境,其中内容居中,并且可以在其中指定本地 parsep 值。
我尝试做以下工作:
\documentclass{article}
\usepackage{lipsum}
\newenvironment{myenv}[1]{%
\center %
\begingroup %
\setlength{\parsep}{#1} %
}{%
\endgroup %
\endcenter %
}
\begin{document}
\lipsum[1]
\lipsum[2]
\begin{myenv}{1cm}
Hello
world
\end{myenv}
\lipsum[3]
\end{document}
该环境根据需要将“Hello”和“world”居中,但段落间距与 lipsum[1] 和 lipsum[2] 之间的间距相同,并且我希望它是 1 厘米(在此示例中)。
答案1
您正在使用的环境center
是根据 定义的,trivlist
不受 的设置影响\parsep
。您需要一个完整的list
环境:
\documentclass{article}
\usepackage{lipsum}
\newenvironment{myenv}[1]
{\list{}{%
\setlength{\parsep}{#1}%
\setlength{\leftmargin}{0pt}%
\setlength{\labelwidth}{0pt}%
\setlength{\labelsep}{0pt}%
}\centering\item\relax}
{\endlist}
\begin{document}
\lipsum[1-2]
\begin{myenv}{1cm}
Hello
world
\end{myenv}
\begin{center}
Hello
world
\end{center}
\lipsum[3]
\end{document}
我添加了一个center
用于比较的环境。
请谨慎%
使用行尾的 :在您的\center
行中不需要它,而行前%
的\setlength
空格可能引入虚假空间(在本例中不会出现这种情况,因为 TeX 以垂直模式处理它)。\begingroup
和\endgroup
标记不是必需的,因为每个环境都已隐式提供它们;因此,在 中执行的任何(本地)赋值都将在处理myenv
时消失。\end{myenv}
答案2
不要%
在行末的 之前留空格,否则你会强制产生行末的百分比试图避免的效果,即定义中的额外空格标记。此外,每当你更改段落设置时,你都需要确保段落结束前该组重置设置。最后\parsep
是 latex 列表环境的参数,您需要\parskip
在这里输入。
\documentclass{article}
\usepackage{lipsum}
\newenvironment{myenv}[1]{%
\center %
\setlength{\parskip}{#1}%
}{%
\endcenter %
}
\begin{document}
\lipsum[1]
\lipsum[2]
\begin{myenv}{1cm}
Hello
world
\end{myenv}
\lipsum[3]
\end{document}
答案3
\parsep
是列表中使用的内部参数。您可能想要的是长度\parskip
。您没有指定环境开头或结尾的间距,但这里有一个可行的示例。请注意,我们通过添加最后一个\par
命令并再次插入垂直跳过来关闭环境。
\documentclass{article}
\usepackage{lipsum}
\newenvironment{myenv}[1]{%
\center
\begingroup
\setlength{\parskip}{#1}%
}{%
\par\vspace{\parskip}%
\endgroup
\endcenter
}
\begin{document}
\lipsum[1]
\lipsum[2]
\begin{myenv}{1cm}
Hello
world
\end{myenv}
\lipsum[3]
\end{document}