数学工具括号

数学工具括号

使用DeclarePairedDelimitermathtools已经定义的命令来用括号括起表达式。

\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

只需定义,\myfunc无需参数。

\documentclass{article}
\usepackage{mathtools}

\DeclarePairedDelimiter\p{(}{)}
\newcommand{\myfunc}{f\p}

\begin{document}

\begin{gather*}
\myfunc{x} \\
\myfunc[\Big]{x} \\
\myfunc*{\frac{x}{2}}
\end{gather*}

\end{document}

在此处输入图片描述

答案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}

我只是不明白加星号的版本的目的。

相关内容