\newcommand 有两个选项:省略或留空

\newcommand 有两个选项:省略或留空

我正在重写我们的考试模板,我想创建一个\questionpart{Q}{A}可以以某种方式设置的命令,以便我可以打开和关闭解决方案,以及自动格式化和编号等等。

我还想要一个\questionpart{Q}仅创建问题而没有解决方案环境的版本。

现在,出于某种原因,我可以通过写入 获得所需的输出\questionpart{Q}{},但不能\questionpart{Q}。为什么会这样?我怎样才能让我的命令按照我喜欢的方式运行?

    \documentclass[11pt,a4paper]{article}

    \usepackage{ifthen}

    \newcommand\test[2]{
        #1
        \ifthenelse{\equal{#2}{}}
            {}
            {XXX: #2}
    }

    \begin{document}
        \test{question}{solution}

        \test{question without solution}

        \test{question with empty solution}{}
    \end{document}

提前致谢!

附言:如果您能想出更有意义的标题,请随意更改。

答案1

可以如果后面跟着一个或两个支撑组,则define\questionpart的行为会有所不同:

\usepackage{xparse}

\NewDocumentCommand{\questionpart}{+m +g}{%
  \formatquestion{#1}%
  \IfValueT{#2}{\formatanswer{#2}}%
}

其中\formatquestion\formatanswer将负责格式化这两个部分。

这样你就会得到不同的结果

\questionpart{Q}{A}
\questionpart{Q}
\questionpart{Q}{}

我并不推荐这样做:命令应该具有明确定义的语法,并且使用可选的括号参数违反所有 LaTeX 正常约定。

更加标准

\usepackage{xparse}

\NewDocumentCommand{\questionpart}{+m +o}{%
  \formatquestion{#1}%
  \IfValueT{#2}{\formatanswer{#2}}%
}

语法如下

\questionpart{Q}[A]
\questionpart{Q}
\questionpart{Q}[]

答案2

当然,如果你的解决方案包含方括号,则必须将它们分组。

\documentclass[11pt,a4paper]{article}
\newcommand\test[1]{\def\savetestarg{#1}\testaux}
\newcommand\testaux[1][\TestAux]{\savetestarg\ifx\TestAux#1\relax\else: (#1)\fi}
\begin{document}
\test{question}[solution]

\test{question}[s{[o]}lution containing square brackets]

\test{question without solution}

\test{question with empty solution}[]
\end{document}

在此处输入图片描述

答案3

多谢大家的评价!

我不知道这个exercise包,但我想我不能使用它。这个xparse包也是一样。原因很简单——我和许多其他人一起工作,他们可以使用 Latex,但永远无法理解该代码,以防他们需要更改某些东西。

幸运的是,David Carlisle 的评论(不知道如何链接人们)确实解决了我的问题。我只需要替换\equal{#2}{}\equal{#2}{\par},它就可以正常工作。非常感谢!

这是工作代码,其中包含原始文档的屏幕截图,您可以在其中看到所有 3 个选项:

    \documentclass[11pt,a4paper]{article}

    \usepackage{ifthen}

    \newcommand\test[2]{
        #1
        \ifthenelse{\equal{#2}{\par}} % Inserted \par here
            {\par} % For some reason the linebreak disappeared, so I reinserted it
            {XXX: #2}
    }

    \begin{document}
        \test{question}{solution}

        \test{question without solution}

        \test{question with empty solution}{}
    \end{document}

在此处输入图片描述

相关内容