![如何定义一个具有多个可选参数的新环境,并知道我正在使用哪一个?](https://linux22.com/image/461379/%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E4%B8%80%E4%B8%AA%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E5%8F%AF%E9%80%89%E5%8F%82%E6%95%B0%E7%9A%84%E6%96%B0%E7%8E%AF%E5%A2%83%EF%BC%8C%E5%B9%B6%E7%9F%A5%E9%81%93%E6%88%91%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%E5%93%AA%E4%B8%80%E4%B8%AA%EF%BC%9F.png)
我想定义一个使用两个可选参数的环境,但我希望能够使用一个,<>
另一个[]
以下是我所做的:
\NewDocumentCommand\why{O{\equiv}m}%
{ #1 & \quad\langle\;\text{{#2}}\;\rangle }
\NewDocumentCommand\res{m}%
{ & #1}
\NewDocumentCommand\To{}{\Rightarrow}
\NewDocumentEnvironment{derivation}{D<>{1.2} O{0pt}}{
\begingroup
\renewcommand{\arraystretch}{#1}
\setlength{\tabcolsep}{#2}
\begin{tabular}{>{$}l<{$} >{$}l<{$}}
}{
\end{tabular}
\endgroup
}
当我尝试使用任何可选参数时,它们要么打印在 pdf 中,要么我只是收到错误。我该如何解决这个问题?
示例代码为:
\documentclass{article}
\usepackage{xparse}
\usepackage{mathtools}
\usepackage{nicematrix}
\usepackage[spanish]{babel}
\ExplSyntaxOn
\NewDocumentCommand\why{O{\equiv}m}%
{ #1 & \quad\langle\;\text{{#2}}\;\rangle }
\NewDocumentCommand\res{m}%
{ & #1}
\NewDocumentCommand\To{}{\Rightarrow}
\NewDocumentEnvironment{derivation}{D<>{1.2} O{0pt}}{
\renewcommand{\arraystretch}{#1}
\setlength{\tabcolsep}{#2}
\begin{tabular}{>{$}l<{$} >{$}l<{$}}
}{
\end{tabular}
}
\ExplSyntaxOff
\begin{document}
\begin{center}
\begin{derivation}<1.5>
\res{ (p \To \neg q) \land (\neg q \To \neg p) }\\
\why[\To]{ Transitividad($\To$) }\\
\res{ p \To \neg p }\\
\why{ Def.(alt)($\To$) }\\
\res{ \neg p \lor \neg p }\\
\why{ Idempotencia($\lor$) }\\
\res{ \neg p }
\end{derivation}
\end{center}
\end{document}
显然,问题出在babel
包裹上。
答案1
默认情况下,babel-spanish
激活<
并>
获取报价。
此激活是在开始文档时完成的,但您的代码要求 LaTeX 寻找“普通”<
和>
,但它找不到。
解决方法:传递es-noquoting
选项。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[spanish,es-noquoting]{babel}
\usepackage{mathtools}
\usepackage{nicematrix} % loads the package 'array', used in the code
\ExplSyntaxOn
\NewDocumentCommand\why{O{\equiv}m}
{ #1 & \quad\langle\;\text{{#2}}\;\rangle }
\NewDocumentCommand\res{m}
{ & #1}
\NewDocumentCommand\To{}{\Rightarrow}
\NewDocumentEnvironment{derivation}{D<>{1.2} O{0pt}}{%
\renewcommand{\arraystretch}{#1}%
\setlength{\tabcolsep}{#2}%
\begin{tabular}{>{$}l<{$} >{$}l<{$}}%
}{
\end{tabular}%
}
\ExplSyntaxOff
\begin{document}
\begin{center}
\begin{derivation}<1.5>
\res{ (p \To \neg q) \land (\neg q \To \neg p) }\\
\why[\To]{ Transitividad($\To$) }\\
\res{ p \To \neg p }\\
\why{ Def.(alt)($\To$) }\\
\res{ \neg p \lor \neg p }\\
\why{ Idempotencia($\lor$) }\\
\res{ \neg p }
\end{derivation}
\end{center}
\end{document}
xparse
我删除了自 2020 年 10 月以来不再需要的调用。相反,我添加了fontenc
一个T1
选项,是西班牙语所需。
检查 的位置%
。