我是 Latex 的初学者,在 LaTEX 中实现“if-then-else”条件时遇到了一些问题。具体来说,我尝试在命令 \newenvironment 中传递参数时打印参数,而未传递参数时不打印任何内容。
当传递参数时,我得到了这个结果(请注意,参数被打印了两次。这不是我们所希望的。):
当没有传递参数时,括号仍然保留,但里面没有文本。编译器给出错误`
Undefined control sequence. \begin{exercise}{}
该问题感兴趣的整个代码部分如下。
\newenvironment{exercise}[1]% environment name{
\par\vspace{\baselineskip}\noindent
\refstepcounter{exercise}%
\textbf{Esercizio \theexercise \IfNoValueTF{#1}{}{ (#1)}}%
\begin{itshape}%
\par\vspace{\baselineskip}%
\noindent\ignorespaces
}%
{% end code
\end{itshape}%
\par\vspace{\baselineskip}%
\noindent\ignorespacesafterend}
希望我已经表达得足够清楚了。提前谢谢您!
答案1
你混淆了语法\IfNoValueTF
。xparse
\NewDocumentEnvironment
语法并要求您使用可选参数构建环境o
:
\documentclass{article}
\usepackage{xparse}
\newcounter{exercise}
\NewDocumentEnvironment{exercise}{o}
{% \begin code
\par\vspace{\baselineskip}\noindent
\refstepcounter{exercise}%
\textbf{Esercizio \theexercise \IfNoValueTF{#1}{}{ (#1)}}%
\par\nobreak\vspace{\baselineskip}%
\itshape\noindent\ignorespaces
}%
{% end code
\par\vspace{\baselineskip}%
\ignorespacesafterend
}
\begin{document}
\begin{exercise}
This is an exercise
\end{exercise}
\begin{exercise}[abc]
This is another exercise
\end{exercise}
\end{document}