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