是否可以在环境中本地设置长度?

是否可以在环境中本地设置长度?

我使用该类编写了很多文档exam。我的一份典型文档如下所示:

\documentclass{exam}

\setlength{\marginpointssep}{2.5cm}%

\begin{document}

\begin{questions}

\question Answer the following.
  \begin{parts}\setlength{\marginpointssep}{.05cm}%
  \part[10] First question.
  \part[10] Second question.
  \end{parts}\setlength{\marginpointssep}{2.5cm}%

\end{questions}

\end{document}

注意,在环境外部,的parts值为。在环境内部, 的值为。\marginpointssep2.5cmparts\marginpointssep.05cm

是否可以自动完成此操作,以便它\marginpointssep位于每个环境2.5cm之外和每个零件环境之内?parts.05cm

答案1

  • 要添加\setlength{\marginpointssep}{.05cm}到环境中parts,可以使用etoolbox

  • 由于变化发生在组内,因此在环境之后将长度重置为 2.5 厘米parts是不必要的,因此只有环境内的内容parts会受到此变化的影响。


\documentclass{exam}

\setlength{\marginpointssep}{1.5cm}%

\usepackage{etoolbox}
\AtBeginEnvironment{parts}{\setlength{\marginpointssep}{.05cm}}

\begin{document}

\begin{questions}
  \pointsinmargin

    \question Answer the following.
      \begin{parts}
            \part[10] First question.
        \part[10] Second question.
    \end{parts}%
  
    \question[15]

\end{questions}

\end{document}

在此处输入图片描述

答案2

我不确定 2.5 厘米左右,在正常情况下这会将点推到纸张左边距之外。

使用\partshook

\documentclass{exam}

\pointsinmargin

\setlength{\marginpointssep}{1.5cm}
\renewcommand{\partshook}{\setlength{\marginpointssep}{0pt}}

\begin{document}

\begin{questions}

\question[20] Answer the following.
  \begin{parts}
  \part[10] First question.
  \part[10] Second question.
  \end{parts}

\question[20] Answer the following.
  \begin{parts}
  \part[10] First question.
  \part[10] Second question.
  \end{parts}

\end{questions}

\end{document}

在此处输入图片描述

相关内容