当未传递可选参数时,具有可选参数的环境行为会发生变化

当未传递可选参数时,具有可选参数的环境行为会发生变化

最近,当我使用带有可选参数的环境时,我注意到当我引入一组方括号时,行为会发生变化,即使其中没​​有任何内容。例如:

\documentclass{article}
\usepackage{fancyvrb}

\newenvironment{exer}[1][]
{
    do the following exercise from #1
    \VerbatimOut{\jobname.exer}%
}
{
    \endVerbatimOut%
    \input{\jobname.exer}%
}

\begin{document}
\begin{exer}[]
some text
\end{exer}
\end{document}

它将编译一个包含“一些文本”的 pdf 以及一个 .exer 文件,但如果我用以下代码替换 exer 环境:

\begin{exer}
some text
\end{exer}

它会抛出以下错误:

! FancyVerb Error:
  Extraneous input `some text' between \begin{exer}[<key=value>] and line end
.
\FV@Error ... {FancyVerb Error:
\space \space #1
}
                                                  
l.16 some text

所以我有两个问题:第一,为什么即使我传入默认可选参数,环境的行为也会有所不同;第二,有没有办法修补或解决这种行为?

非常感谢。

答案1

我不确定这有什么用处。无论如何,你必须宣布fancyvrb这是一个\VerbatimEnvironment

\documentclass{article}
\usepackage{fancyvrb}

\newenvironment{exer}[1][]{%
  \VerbatimEnvironment
  do the following exercise\if\relax\detokenize{#1}\relax\else\space from~#1\fi
  \begin{VerbatimOut}{\jobname.exer}%
}{%
  \end{VerbatimOut}%
  \par\input{\jobname.exer}%
}

\begin{document}

\begin{exer}[]
some text
\end{exer}

\begin{exer}[the book]
some text
\end{exer}

\end{document}

在此处输入图片描述

答案2

\documentclass{article}
\usepackage{fancyvrb}

\makeatletter
\def\exer{\@ifnextchar[\exer@i\exer@i[]}
\def\exer@i[#1]{do the following exercise #1
\VerbatimOut{\jobname.exer}}
\def\endexer{\endVerbatimOut\par
\input{\jobname.exer}}
\makeatother

\begin{document}
\begin{exer}
some text
\end{exer}
\end{document}

相关内容