我见过在选择 newcommand 或 newenvironment 时需要考虑哪些因素?但我认为这更具体一些。如果是重复的,那就这样吧。如果问题的第二部分太过推测,那么我可以将其删除。
假设我正在参加一个考试课程(我知道有很多,但只是举个例子)。
\documentclass{myexam}
% preamble
\begin{document}
% content
\end{document}
显然,如果这样的类能够提供某种命令就好了\question
。有两种方法:
(1)提供一个\question
宏。
\documentclass{myexam}
% preamble
\begin{document}
\question Here is my question.
\end{document}
(2)提供\begin{questions}
环境(列表)。
\documentclass{myexam}
% preamble
\begin{document}
\begin{questions}
\question Here is my question.
\end{questions}
\end{document}
我有两个相关的问题:
- 如果
\begin{questions}
隐藏在类似 的内容中\AtBeginDocument
,那么对于用户来说,方法 (大部分) 是相同的。在这种情况下,这两种方法是否都有任何特定的优点/缺点? - 一种方法在语义上是否更优越?例如,有能力的用户会期望其中一种吗?
环境/列表方法的一个可能的缺点是,为了添加非问题,可能需要明确停止并重新启动环境/列表。
答案1
我认为定义一个新环境然后将其隐藏在代码中是没有意义的\begin{document}
,如果您不希望用户明确使用该环境,那么您也可以在顶层公开环境的内容。
在回答完你的问题之前,我的想法恰恰相反
环境/列表方法的一个可能的缺点是,为了添加非问题,可能需要明确停止并重新启动环境/列表。
在我看来,这个环境的主要优势正是:它提供了一种标记非问题事物的方法。
如果你走的话
\question what's your name
\question what's your favourite colour
Note for users of American English: I'm British.
那么就不清楚该说明是否是第二个问题的一部分或问题列表之后的部分。
但是如果你去的话这个问题就会解决
\begin{questions}
\question what's your name
\question what's your favourite colour
\end{questions}
Note for users of American English: I'm British.
或者
\begin{questions}
\question what's your name
\question what's your favourite colour
Note for users of American English: I'm British.
\end{questions}
告诉事情在哪里结束与另一个宏语法选择有关,您在问题中没有提到,但在链接问题的答案和评论中进行了讨论。使用带参数的宏可以非常清楚地知道参数在哪里结束,但根据问题内容的预期长度和性质,可能会有其他缺点。
\question {what's your name}
\question {what's your favourite colour
\Note {for users of American English: I'm British.}}
%\Note {for users of American English: I'm British.}