使用DeclarePairedDelimiter
我mathtools
已经定义的命令来用括号括起表达式。
\DeclarePairedDelimiter\p{(}{)}
现在,我想为一个函数定义一个命令
\newcommand{\myfunc}[1]{f\p{#1}}
有没有一种简单的方法可以将可选参数从 传递\myfunc
到\p
,以便我可以编写\myfunc[\Big]{x}
。我知道我可以使用从头\DeclarePairedDelimiterXPP
开始声明\myfunc
,但我想知道是否有办法使我的定义更加模块化。
平均能量损失
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiter\p{(}{)}
\newcommand{\myfunc}[1]{f\p{#1}}
\begin{document}
\[\myfunc{x}\]
% How to make these work? Without breaking \myfunc{x}
% \[\myfunc[\Big]{x}\]
% \[\myfunc*{x}\]
\end{document}
答案1
答案2
更简单的方法是使用\DeclarePairedDelimiterXPP
,它是为这种结构而构建的。只需使用
\DeclarePairedDelimiterXPP\myfunc[1]{f}{(}{)}{}{#1}
另一方面,你真的想要使用\p
,则需要使用xparse
包手动解析参数,然后\p
使用检测到的选项以适当的方式调用(您需要查找带星号的、[] 中的可选的和必需的,因此xparse
您需要制作一个带有s o m
“签名”的宏)。
答案3
(
我定义了一个宏,在and之前插入可选参数)
。该宏的定义是在本地组内进行的,因此一旦退出, 的效果\DeclarePairedDelimiter
就会被消除,因此可以在文档中再次使用它。
我还在评论中添加了@campa 和@daleif 提供的解决方案,该解决方案更加简洁且不容易出错。
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiter\p{(}{)}
\newcommand{\myfunc}[1]{f\p{#1}}
% Keeping my previous solution
\newcommand{\myotherfunc}[2][]{%
\begingroup% < Make the definition of \pp local to this group (thanks @campa)
\DeclarePairedDelimiter\pp{#1(}{#1)}
f\pp{#2}%
\endgroup%
}
% Easier, faster, cleaner solution by @campa and @daleif
\DeclarePairedDelimiterXPP\myanotherfunc[1]{f}{(}{)}{}{#1}
\begin{document}
\[\myfunc{x}\]
% How to make these work? Without breaking \myfunc{x}
\[\myotherfunc[\Big]{x} \text{ and } \myotherfunc[\Big]{y}\]
\[\myanotherfunc[\Big]{x} \text{ and } \myanotherfunc[\Big]{y}\]
% \[\myfunc*{x}\]
\end{document}
我只是不明白加星号的版本的目的。