恢复自定义列表

恢复自定义列表

我使用了一个只包含偶数项的列表来列出我的学生正在做的练习。我遇到了一些问题:

  1. 通常,问题以一小部分的说明开始,但如果我用一些文本而不是“项目”来开始列表,我就会收到错误。

  2. 如果我打破列表,将文本放在两组问题之间,我无法使用该[resume]选项自动恢复。此外,尽管使用了\noindent

  3. 我的列表的最后一项没有对齐,但我不知道为什么。

    \documentclass[a4paper,11pt]{report}
    
    \usepackage{enumitem}
    
    \newlist{evenenumerate}{enumerate}{1}
    \setlist[evenenumerate]{label=Question \theevenenumeratei.}
    \makeatletter
    
    \renewcommand\theevenenumeratei{\@arabic{\numexpr2*%
    \value{evenenumeratei}}}
    %I broke this line to make it fit in this text area
    \makeatother
    
    \newcommand{\evenquestions}{\evenenumerate}
    \newcommand{\question}{\item}
    
    \begin{document}
    
    \noindent 
    
    In Exercises 1–6, bla bla.
    
    \begin{evenquestions}
        \question foo 2
        \\
        \question foo 4
        \\
        \question foo 6
    \end{evenquestions}
    
    \noindent In Exercises 8-16, bla bla bla
    
    \begin{evenquestions}[resume]
        \question foo 8
        \\
        \question foo 10
        \\ 
        \question foo 12
        \\ 
        \question foo 14
        \\
        \question foo 16
    \end{evenquestions}
    \end{document}
    

我想我可以将后续部分的说明放在两个项目之间,但是它给我的对齐效果非常奇怪,而且它与第一部分的对齐不匹配。

答案1

问题的说明需要列表。

如果您删除

%\newcommand{\evenquestions}{\evenenumerate}

而是evenenumerate直接使用环境并包含align=left在内以\setlist解决对齐问题。

在此处输入图片描述

笔记:

  • showframe包用于显示边距。最终文档中不需要它。

代码:

\documentclass[a4paper,11pt]{report}

\usepackage{enumitem}
\usepackage{showframe}

\newlist{evenenumerate}{enumerate}{1}
\setlist[evenenumerate]{label={Question \theevenenumeratei.}, align=left}
\makeatletter

\renewcommand\theevenenumeratei{\@arabic{\numexpr2*\value{evenenumeratei}}}
\makeatother

%\newcommand{\evenquestions}{\evenenumerate}
\newcommand{\question}{\item}

\begin{document}

\noindent 
In Exercises 1--6, bla bla.

\begin{evenenumerate}
    \question foo 2
    
    \question foo 4
    
    \question foo 6
\end{evenenumerate}

\noindent In Exercises 8--16, bla bla bla

\begin{evenenumerate}[resume]
    \question foo 8
    \question foo 10
    \question foo 12
    \question foo 14
    \question foo 16
\end{evenenumerate}
\end{document}

答案2

您可以在evenquestions环境中插入带有适当命令的指令。

\documentclass[a4paper,11pt]{report}
\usepackage{enumitem}

\usepackage{showframe} % just for debugging, remove for production

\makeatletter
\newcommand{\doublearabic}[1]{\expandafter\@doublearabic\csname c@#1\endcsname}
\newcommand{\@doublearabic}[1]{\the\numexpr2*#1\relax}
\AddEnumerateCounter{\doublearabic}{\@doublearabic}{99}
\makeatother

\newlist{evenquestions}{enumerate}{1}
\setlist[evenquestions]{label=Question \doublearabic*,align=left}
\newcommand{\question}{\item}
\newcommand{\instr}{\item[]\hspace*{-\leftmargin}}

\begin{document}

\begin{evenquestions}
\instr In Exercises 1–6, bla bla.

    \question foo 2

    \question foo 4

    \question foo 6

\instr In Exercises 8-16, bla bla bla

    \question foo 8

    \question foo 10

    \question foo 12

    \question foo 14

    \question foo 16
\end{evenquestions}

We can also resume lists
\begin{evenquestions}[resume]
\question foo 18
\question foo 20
\question foo 22
\end{evenquestions}

\end{document}

在此处输入图片描述

相关内容