禁止文本输出但保留枚举项标签

禁止文本输出但保留枚举项标签

我正在排版一道考试题目,比如

\documentclass{article}
\newenvironment{answer}{\par[}{]}
\newenvironment{answersonly}{}{}
\begin{document}
\begin{answersonly}
\begin{enumerate}
\item Question 1
  \begin{answer}Answer 1\end{answer}
\item
  \begin{enumerate}
  \item Question 2a
    \begin{answer}Answer 2a\end{answer}
  \item Question 2b\par more details
    \begin{answer}Answer 2b\end{answer}
  \end{enumerate}
\end{enumerate}
\end{answersonly}
\end{document}

导致排版输出如下

1. Question 1
   [Answer 1]
2. (a) Question 2a
       [Answer 2a]
   (b) Question 2b
       more details
       [Answer 2b]

我现在想将此文档的排版切换为打印模式仅有的答案,但不包含问题,同时保持嵌套枚举完整,这样文档看起来就像

1. [Answer 1]
2. (a) [Answer 2a]
   (b) [Answer 2b]

具体来说,我想通过重新定义环境来做到这一点,answersonly使得其内容的排版就像字符串Question 1Question 2aQuestion 2b\par more details已被删除一样,然后修改answer环境以中和其内容的影响。

换句话说,我想定义一个answersonly环境,抑制其主体中任何文本的输出,但以下情况除外

  • 枚举环境的项目标签
  • answer环境的内容

重要的:我无法修改的内容answersonly,即我无法在\begin{question}Question 2a\end{question}要抑制的文本周围放置任何条件编译环境。

是否存在某种“吞咽文本”模式,可以将 LaTeX 更改为这样它就不会输出遇到的任何文本,然后修改enumerateanswer环境,使得的项目标签和垂直项目间跳过enumerate和的内容answers仍然可以通过?

关于如何做到这一点有什么想法吗?

答案1

我会编辑源代码,使其更像

 \item 
    \begin{question}Question 2b\par more details\end{question}
    \begin{answer}Answer 2b\end{answer}

然后结构就更清晰了,您可以简单地定义question不执行任何操作(因此内容排版)或丢弃其主体,但是正如您所拥有的......

在此处输入图片描述




\documentclass{article}
\newenvironment{answer}{\par[}{]}
\newenvironment{answersonly}{
\let\xitem\item\long\def\item##1\begin{\xitem\begin}}{}
\begin{document}
\begin{answersonly}
\begin{enumerate}
\item Question 1
  \begin{answer}Answer 1\end{answer}
\item
  \begin{enumerate}
  \item Question 2a
    \begin{answer}Answer 2a\end{answer}
  \item Question 2b\par more details
    \begin{answer}Answer 2b\end{answer}
  \end{enumerate}
\end{enumerate}
\end{answersonly}
\end{document}

答案2

不久前我偶然看到一篇文章,其中有人很好地阐述了类似的东西,使用了“考试”文档类和命令“\printanswers”。我只会链接到这篇文章,他们对此的解释要好得多(第 3 部分应该是您特别想要的)。

在 Latex 中排版多项选择题

相关内容