方括号 [ ] 作为环境中的第一个文本

方括号 [ ] 作为环境中的第一个文本

我遇到过这种情况,我想在环境中用方括号开始一段文本。它被解释为可选参数。我的解决方法是插入一个{}来分隔它。这是可行的方法吗?还是有更好的方法?

答案1

需要一个分隔符来使环境宏(或任何其他宏)相信参数列表已经完成,并且所有其他内容将不再由宏本身处理。

此分隔符为{},空格将被忽略。请参见以下示例,其中foobar用作[...]普通文本,而 则foobaropt需要一个可选参数并以此方式解释,除非{}插入在{foobaropt}和之间[...]

\documentclass{article}


\newenvironment{foobar}{%
Not interpreted as opt argument
}{}


\newenvironment{foobaropt}[1][]{%
Catched as opt argument ``#1"
}{}


\begin{document}

\begin{foobar}[Some text]
\end{foobar}

\begin{foobaropt}[Some text]
\end{foobaropt}


\begin{foobaropt}{}[Some text]
\end{foobaropt}


\end{document}

答案2

这与 Leslie Lamport 在他的LaTeX:文档准备系统,但他建议你把整个括[ ... ]在括号中。实际上,这非常相似,通过{[ ... ]},你告诉 LaTeX[ ... ]需要单独处理 。我想 和{}几乎提供了隔离,如果你明白我的意思的话。

引用相关部分:

以下命令采用可选的最后一个参数:

\\ \item \linebreak \pagebreak \nolinebreak \nopagebreak \newcounter \newtheorem \twocolumn \suppressfloats

如果该参数缺失,且文本中的下一个非空格字符为[,则 LaTeX 会将其误认为[是可选参数的开头。将 括[在括号中可避免出现此错误。

然后他给出了以下例子:

... \begin{itemize}
  \item {[This is an aside.]} This is ...

]命令可选参数中的必须\item用括号括起来,以防止被误认为是]标记参数结束的 。

...

包括 在内的某些命令\\具有 -form ,通过在命令名称后立即*输入 a 即可获得。如果 a是命令(如 )后的第一个非空格字符,则应将其括在括号中;否则,LaTeX 会将and误认为命令。**\\\\*\\*

当然,对于可以接受可选参数的环境也是如此。因此,您可能有:

\begin{foo}
  {[He]} said some unkind things.
\end{foo}

如果foo环境可以接受可选参数。

相关内容