在自己的环境中更改页边距

在自己的环境中更改页边距

我想定义一个环境,插入一个与序言中定义的边距不同的页面。

我尝试使用以下 LaTeX 代码。

\documentclass[a4paper,10pt]{article}

\usepackage[left=5.2cm,top=2cm,right=1.5cm,bottom=2cm,nohead,nofoot]{geometry}
\usepackage{blindtext}

\newenvironment{myenv}{
  \newgeometry{left=1.5cm,top=20cm,right=1.5cm,bottom=2cm,nohead,nofoot}
  \blindtext[2]
}{
  \newpage

  \restoregeometry
}

\begin{document}

\begin{myenv}

\end{myenv}
\blindtext[10]
\end{document}

不幸的是,第二页几行之后出现了意外的分页符。以下代码产生了所需的结果。

\documentclass[a4paper,10pt]{article}

\usepackage[left=5.2cm,top=2cm,right=1.5cm,bottom=2cm,nohead,nofoot]{geometry}
\usepackage{blindtext}

\newenvironment{myenv}{
  \newgeometry{left=1.5cm,top=20cm,right=1.5cm,bottom=2cm,nohead,nofoot}
  \blindtext[2]
}{
  \newpage
}

\begin{document}

\begin{myenv}

\end{myenv}
\restoregeometry
\blindtext[10]
\end{document}

但是我不想\restoregeometry每次使用时都手动输入myenv。有人能解释一下上面两段代码的区别并提供解决方案吗?谢谢。

答案1

我不知道您要做什么,但是包\AfterEndEnvironment中的命令etoolbox可以帮助您。

它在环境结束后立即插入一些代码。

因此,在你的序言中添加

\usepackage{etoolbox}
\AfterEndEnvironment{myenv}{\restoregeometry}

应该可以让你实现你的愿望。

完成 MWE

\documentclass[a4paper,10pt]{article}

\usepackage[left=5.2cm,top=2cm,right=1.5cm,bottom=2cm,nohead,nofoot]{geometry}
\usepackage{blindtext}

\usepackage{etoolbox}
\AfterEndEnvironment{myenv}{\restoregeometry}

\newenvironment{myenv}{%
  \newgeometry{left=1.5cm,top=20cm,right=1.5cm,bottom=2cm,nohead,nofoot}%
  \blindtext[2]%
}{%
  \newpage%
}

\begin{document}

\begin{myenv}

\end{myenv}
\blindtext[10]
\end{document} 

回答您评论中的问题,我认为\restoregeometry如果将其放在环境端则不起作用,因为后者形成了一个组。

实际上,如果你告诉 LaTeX\restoregeometry在组完成命令后执行\aftergroup,则你有一个不需要的解决方案\AfterEndEnvironment

\newenvironment{myenv}{%
  \newgeometry{left=1.5cm,top=20cm,right=1.5cm,bottom=2cm,nohead,nofoot}%
  \blindtext[2]%
}{%
  \newpage\aftergroup\restoregeometry%
}

相关内容