涉及 \begin{document}...\end{document} 的自定义命令中的参数相关行为

涉及 \begin{document}...\end{document} 的自定义命令中的参数相关行为

为什么能mycommandA工作但不能呢mycommandB

\documentclass{article}

\newcommand{\mycommandA}{
    \begin{document}
        A
    \end{document}
}

\newcommand{\mycommandB}[1][]{
    \begin{document}
        B
    \end{document}
}

% \mycommandA % works
% \mycommandB % doesn't work

答案1

如果\mycommandB是文件中的最后一个标记,TeX 将停止输入,因为它正在寻找某些内容以决定是否跟随可选参数。

确实,

\documentclass{article}

\newcommand{\mycommandA}{
    \begin{document}
        A
    \end{document}
}

\newcommand{\mycommandB}[1][]{
    \begin{document}
        B
    \end{document}
}

% \mycommandA % works
 \mycommandB % doesn't work

终端显示*并等待用户输入。按回车键结束运行。但是,如果你pdflatex使用该-interaction=nonstopmode标志运行,则会出现

! Emergency stop.
<*> mjc

!  ==> Fatal error occurred, no output PDF file produced!

因为在这种模式下,无法获取用户输入。

另一方面,如果我在后面添加任何内容\mycommandB(例如,一个空白行),则运行也会成功nonstopmode

相关内容