在自定义环境周围添加垂直空间(\vspace)

在自定义环境周围添加垂直空间(\vspace)

我有一个自定义环境的文档,myenv其左边距为 4em。

\documentclass{book}
\usepackage{lipsum}

\newenvironment{myenv}{
\setlength{\leftskip}{4em}
}


\begin{document}

\lipsum[1-2]

\begin{myenv}

Vertical space should be here.

\lipsum[3-5]

Vertical space should be here.

\end{myenv}

\lipsum[6]

\end{document}

我想要在此环境周围添加垂直空间 - 即前/上和后/下。据我所知,最直接但同时也最耗费人力的方法是:

\begin{document}

\lipsum[1-2]

\begin{myenv}

\vspace{2em}

\lipsum[3-5]

\vspace{2em}

\end{myenv}

\lipsum[6]

\end{document}

因为我希望能够改变这个垂直空间而不改变文档其余部分的垂直空间,所以我使用宏:

\documentclass{book}
\usepackage{lipsum}

\newenvironment{myenv}{
\setlength{\leftskip}{4em}
}

\def \myvspacemacro{
\vspace{2em}
}


\begin{document}

\lipsum[1-2]

\begin{myenv}

\myvspacemacro{}

\lipsum[3-5]

\myvspacemacro{}

\end{myenv}

\lipsum[6]

\end{document}

有没有更简单、更快捷的方法?理想情况下,我想以与设置 leftskip 值相同的方式设置环境顶部垂直空间和底部垂直空间的长度。可能吗?有 2 个类似的问题:环境前后垂直间距的正确方法自定义环境前后的垂直空间,但似乎都无法解决我的情况。

简单地说,我想通过使用 margin-top 和 margin-bottom 属性来实现与在 HTML/CSS 中实现的相同的效果。

我也尝试添加\vspace到我的环境定义中,但它只会在环境顶部添加边距,而不会在环境下方留下边距。

\documentclass{book}
\usepackage{lipsum}

\newenvironment{myenv}{
\vspace{2em}
\setlength{\leftskip}{4em}
}

\begin{document}

\lipsum[1-2]

\begin{myenv}

\lipsum[3-5]

\end{myenv}

\lipsum[6]

\end{document}

答案1

那这个怎么样?请注意,an\newenvironment有三个必需参数:名称、前缀代码和邮政编码。此外,行尾%符号通常是必需的,以防止引入杂散空格(本例中不需要它们,但我将它们放在那里作为最佳实践)。

根据 Barbara 的评论和 cgnieder 的建议进行了编辑。我确认环境从页面顶部开始不再增加额外空间。感谢他们两位。

进一步编辑。David 正确地指出,玩弄\leftskip是危险的。我试图通过将其定义为变化(不是绝对的变化)来缓解他的担忧,但这显然还不够。考虑到我会把这个问题留给专家,我将删除我的答案……只有在 OP 不接受它时我才能这样做。

\documentclass{book}
\usepackage[nopar]{lipsum}
\newenvironment{myenv}{%
 \par%
 \addtolength{\leftskip}{4em}%
 \vspace{2em}%
}{%
 \par%
 \addtolength{\leftskip}{-4em}%
 \vspace{2em}%
}
\begin{document}
\lipsum[1-2]
\begin{myenv}
\lipsum[3-5]
\end{myenv}
\lipsum[6]
\end{document}

答案2

使用标准 LaTeX list

\documentclass{book}
\usepackage{lipsum}

\newenvironment{myenv}
  {\list{}{%
    \leftmargin=4em
    \topsep=2ex
    \parsep=\parskip
    \listparindent=\parindent
    \itemindent=\parindent
  }\item\relax}
  {\endlist}


\begin{document}

\lipsum[2]

\begin{myenv}
\lipsum[3-4]
\end{myenv}

\lipsum[6]

\end{document}

调整参数以适合您的口味。

在此处输入图片描述

答案3

我建议你使用mdframed包来定义您的环境;该包为您提供了一种简单的方法来控制下面和之后的垂直跳过,也为您提供了一种简单的方法来向左侧添加填充:

\documentclass{book}
\usepackage{mdframed}
\usepackage{lipsum}

\newmdenv[
  hidealllines=true,
  innerleftmargin=4em,
  innerrightmargin=0pt,
  leftmargin=4em,
  skipabove=2em,
  skipbelow=2em
]{myenv}


\begin{document}

\lipsum[2]
\begin{myenv}
\lipsum[3]
\end{myenv}
\lipsum[6]

\end{document}

在此处输入图片描述

相关内容