将 \choice[1] 替换为 \CorrectChoice (绕过 LyX 限制)

将 \choice[1] 替换为 \CorrectChoice (绕过 LyX 限制)

我正在研究简单的LyX 2.2 中的考试类布局。很多东西都运行良好,尤其是LatexType Item_EnvironmentLyX 布局中的样式。然而,我不知道如何处理多项选择环境,因为

\choice
\CorrectChoice 

本质上是\item中的两种不同可能性(对于 LyX 布局)。在 LyX 中LatexType Item_Environment似乎不可能有两种不同的定义。可以说,只是 的一个特例,但改变 Exam 类需要做很多工作……ItemCommand\CorrectChoice\choice

\CorrectChoice我意识到如果只是将一个\choice可选参数设置为 true(或 1),例如,会容易得多\choice[1]。也许有办法将其破解回\CorrectChoiceLyX 生成 LaTeX 之后和编译 LaTeX 之前?

我见过一些黑客用etoolbox包裹,但我找不到任何明显的东西。我承认我不是 TeX 黑客。如果知道这是可能的,那就太好了。

答案1

原来是基本的 LaTeX 黑客技术(重写宏)。以下是我根据以下建议完成的:这个答案

  • 在LyX中,ItemCommandItem_Environment\mychoice
  • exam.layout为项目添加一个可选参数,如下所示。这是我正在开发的文件中的示例:

    Style Multiple_Choice_Answers_(checkboxes)
      CopyStyle        Enumerate
      Category         Answers
      LatexType        Item_Environment
      LatexName        checkboxes
      ItemCommand      mychoice
      LabelType        Enumerate
      LabelSep         xx
    
      Argument item:1
        MenuString     "Mark correct"
        LabelString    "✓"
        Decoration     Classic
      EndArgument
    
    End
    

    在这种情况下,多项选择答案(带复选框)有一个可选的“标记正确”插入(可以包含任何内容)。它将生成\mychoice[]相当于一个项目的内容。

  • 在文档前言中,需要\mychoice根据可选参数的存在(指示正确的选择)重写一些命令。正如评论中指出的那样,我们应该在文件中使用Preamble...构造,因为这会使此更改也与布局保持一致。此外,最好让 LyX 来管理(我喜欢 LyX 的众多原因之一是它能很好地管理 LaTeX 的复杂性)。EndPreamble.layoutmakeat...

    Preamble
        % hack to rewrite \mychoice or \mychoice[] to \choice or \CorrectChoice respectively
        \def\mychoice{\@ifnextchar[{\@with}{\@without}}
        \def\@with[#1]{\CorrectChoice}
        \def\@without{\choice}
    EndPreamble
    

在 LyX 中,多项选择如下所示: 在此处输入图片描述

LyX 生成以下代码:

\begin{checkboxes}
\mychoice Here's an answer
\mychoice Here's another
\mychoice[] This is the correct answer.
\mychoice This is not correct.
\end{checkboxes}

以下是 PDF 格式的输出(显示答案):

在此处输入图片描述

相关内容