排版多部分练习

排版多部分练习

当我排版练习时,我有时喜欢在左边距提供练习编号,而不是将其作为描述练习的段落的一部分。当我需要排版包含多个部分的练习时,这会带来问题(如下图所示)。

问题可视化

如果练习在enumerate环境之前有文本,则默认缩进是可取的(这是情况 1)。但是,如果练习在环境之前没有文本enumerate,那么我希望枚举环境具有以下属性(这是情况 2)。

  • 第一个列表项应该与练习在同一行开始。
  • 整个列表应与页面左边距齐平,即页面左边距和练习各部分之间没有间隙。
  • 列表项应该能够适应分页符,即,如果需要,练习应该分为一页或多页。
  • 枚举环境应该自动区分情况 1 和 2,而无需用户指出他/她想要哪种行为。

下面给出的 MWE 定义了一个enumerate满足属性 (1) 和 (2) 但不满足 (3) 和 (4) 的环境。您知道如何修改此环境以便也满足属性 (3) 和 (4) 吗?

感谢您的帮助!

\documentclass[11pt, a4paper]{article}
\usepackage{enumitem}
\usepackage[marginparwidth=1in]{geometry}
\usepackage{marginnote}

\newlist{indentlist}{enumerate}{2}
\setlist[indentlist, 1]{label=(\alph*), listparindent=\parindent}
\setlist[indentlist, 2]{label=\roman*., listparindent=\parindent}

\newlist{noindentlist}{enumerate}{2}
\setlist[noindentlist, 1]{label=(\alph*), listparindent=\parindent, leftmargin=6mm}
\setlist[noindentlist, 2]{label=\roman*., listparindent=\parindent}

\begin{document}

\reversemarginpar\noindent\marginnote{\textit{Exercise 1.}}
\begin{minipage}[t]{\textwidth}
\begin{noindentlist}
\item This is a test.
\item A.
\begin{noindentlist}
\item A.
\item A.
\end{noindentlist}
\end{noindentlist}
\end{minipage}
\medskip

\reversemarginpar\noindent\marginnote{\textit{Exercise 2.}} This is a sentence.
\begin{indentlist}
\item This is a test.
\item A.
\begin{indentlist}
\item A.
\item A.
\end{indentlist}
\end{indentlist}

\end{document}

答案1

如果您定义一个exercises枚举类型的列表,其中问题位于 1 级,问题位于 2 级,子问题位于 3 级,则可以在没有边注的情况下做到这一点,同时为多行(子)问题提供一致的左边距。为了使代码更具可读性,我还将和定义\qu\subqu的别名\item,以便在相关上下文中使用:

\documentclass[11pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{enumitem}
\usepackage[marginparwidth=1in, showframe, reversemp]{geometry}
\usepackage{xcolor}
\newlist{exercises}{enumerate}{3}
\setlist[exercises]{wide = 0pt, listparindent=\parindent,labelsep = 0pt,leftmargin =\labelwidth}
\setlist[exercises, 1]{label =\llap{\itshape Exercise~\arabic*.\hskip\marginparsep}}
\setlist[exercises, 2]{label=(\alph*), labelwidth = 1.8em, leftmargin =\labelwidth}
\setlist[exercises, 3]{label=\roman*.,labelwidth = 1.333em, leftmargin =\labelwidth, }
\let\qu\item
\let\subqu\item

\begin{document}

\begin{exercises}%
\item Some introductory text and notation setting. Some introductory text and notation setting.
  \begin{exercises}
\qu Now for a first simple question.
\qu The trickier question that follows requires three subquestions and a good deal of ingenuity.
\begin{exercises}
\subqu A preparatory subquestion.
\subqu A proof based on Cauchy’s type of induction that consists in proving, first that $ \mathcal P(n)$ implies $ \mathcal P({\color{red}2}n)$ and, second, that $ \mathcal P(n)$ implies $ \mathcal P(n {\color{red}{}-{}} 1)$.
\subqu A.
\end{exercises}
\end{exercises}

\item
\begin{exercises}
\qu No introductory text for this exercise.
\qu B.
\begin{exercises}
\subqu B1.
\subqu B2.
\end{exercises}
\end{exercises}
\end{exercises}


\end{document} 

在此处输入图片描述

答案2

我找到了一个不错的解决方案,它使用 egreg 对另一个问题的回答之一满足属性 (1)-(3)(抱歉,我忘了这是哪个问题)。在这个答案中,egreg 建议使用虚拟环境description来避免环境开始后出现不必要的换行符itemize。在这种情况下,我使用marginnote而不是 段落文本,enumerate而是itemize,但只要我们小心,这个技巧仍然有效。

我现在没有时间发布 MWE,但我写了一篇类文件我现在用它来排版练习。对排版多部分练习的支持就用到了这个技巧。下面是使用此类文件生成的简单文档的图片:

在此处输入图片描述

代码:

\documentclass[11pt, a4paper]{ps}
\usepackage[marginparwidth=1in]{geometry}

% Problem set information.
\coursename{Course Title}
\coursetitle{Course Number}
\author{My Name}
\problemset{1}

\begin{document}

\begin{problem}
Hello!
\begin{parts}
\item Hi.
\item Hii.
\item Hiii.
\end{parts}
\end{problem}

\begin{multiproblem}
\item Hi.
\item Hii.
\item Hiii.
\end{multiproblem}

\end{document}

相关内容