我想写一个椭圆积分,其中包含分数F(\phi|k^2)
的不同表达式。所以我想要一个新命令(宏?)。它应该看起来像这样。这完全没有问题,不需要缩放垂直线。但我想用参数自动缩放它。\phi
k^2
\F{\phi}{k^2}
|
我该怎么做才能创建这样的新命令?我是否必须花很长的时间来尝试确定参数的高度?这看起来怎么样?
答案1
按照@GustavoMezzetti 的评论,这里有一个利用包\DeclarePairedDelimiterX
的宏的解决方案mathtools
。
另外:您可能想要想出一个比“ \F
”更容易记忆的宏名。
\documentclass{article}
\usepackage{mathtools}
% See p. 27 of the user guide of the 'mathtools' package
% for the source of the following code
\providecommand\given{}
\newcommand\SetSymbol[1][]{%
\nonscript\:#1\vert
\allowbreak
\nonscript\:
\mathopen{}}
\DeclarePairedDelimiterX\PSet[1]\lparen\rparen{%
\renewcommand\given{\SetSymbol[\delimsize]}#1}
\newcommand\F[2]{F\PSet*{#1\given #2}}
\begin{document}
\[
\F{\phi}{k} \quad \F{\phi}{k^2} \quad \F{\phi}{\frac{u}{v}}
\]
\end{document}
附录: 正如 @egreg 在评论中指出的那样,\DeclarePairedDelimiterX
在宏定义中使用\F
可能有点过度,因为没有使用可选参数来指定固定大小的围栏。\F
因此,宏的更精简版本将是:
\newcommand{\F}[2]{%
F\mleft(#1\nonscript\:\middle\vert\nonscript\:#2\mright)}
使用这种方法,需要mleftright
为其\mleft
和\mright
宏加载包。另一方面,不再需要加载包mathtools
。
完整的 MWE:
\documentclass{article}
\usepackage{mleftright} % for "\mleft" and "\mright" macros
\newcommand{\F}[2]{%
F\mleft(#1\nonscript\:\middle\vert\nonscript\:#2\mright)}
\begin{document}
\[
\F{\phi}{k} \quad \F{\phi}{k^2} \quad \F{\phi}{\frac{u}{v}}
\]
\end{document}
答案2
一种可能具有更自然语法的简单实现:
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiterX{\EllInner}[1]{(}{)}{%
\renewcommand{\with}{\,\delimsize|\,}%
#1%
}
\newcommand{\Ell}{F\EllInner}
\providecommand{\with}{}
\begin{document}
\[
\Ell{\varphi\with k^2} = \int_0^\varphi\frac{dt}{\sqrt{1-k^4\sin^2t}}
\qquad
\Ell*{\frac{\pi^2}{4}\with k^2}
\qquad
\Ell[\Big]{\frac{\pi^2}{4}\with k^2}
\]
\end{document}
如果你喜欢两个参数语法,你可以这样做
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiterX{\EllInner}[2]{(}{)}{%
#1\,\delimsize|\,#2%
}
\newcommand{\Ell}{F\EllInner}
\begin{document}
\[
\Ell{\varphi}{k^2} = \int_0^\varphi\frac{dt}{\sqrt{1-k^4\sin^2t}}
\qquad
\Ell*{\frac{\pi^2}{4}}{k^2}
\qquad
\Ell[\Big]{\frac{\pi^2}{4}}{k^2}
\]
\end{document}
您还可以使用|
巧妙的技巧将其用作内部分隔符。警告表达式不能包含|
,但可以包含\vert
,\lvert
或\rvert
。
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiterX{\EllInner}[1]{(}{)}{\activatebar #1}
\newcommand{\Ell}{F\EllInner}
\newcommand{\activatebar}{%
\begingroup\lccode`~=`| \lowercase{\endgroup\def~}{\,\delimsize\vert\,}%
\mathcode`|="8000
}
\begin{document}
\[
\Ell{\varphi | k^2} = \int_0^\varphi\frac{dt}{\sqrt{1-k^4\sin^2t}}
\qquad
\Ell*{\frac{\pi^2}{4} | k^2}
\qquad
\Ell[\Big]{\frac{\pi^2}{4} | k^2}
\]
\end{document}
答案3
此外mathtools
,我使用 定义了一个带有参数\Fell
的命令。该命令添加了一对隐式的,并且( ,&c.)中的可选参数允许微调分隔符的大小。DeclarePairedDelimiterXPP
two
\Fell*
\left···\right
\Fell
\big, \Big
依赖于 的变体xparse
,名为\fell
,仅使用one
以分号分隔的两部分参数,因此语法更接近手写的语法。
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amssymb}
\usepackage{lmodern}
\usepackage{mathtools}
\DeclarePairedDelimiterXPP\Fell[2]{\mathrm{F}}(){}%
{#1\,\delimsize\vert\,\mathopen{}#2}
\usepackage{xparse}
\DeclarePairedDelimiterXPP{\Fel}[1]{\mathrm{F}}(){}%
{\Felargs{#1}}
\NewDocumentCommand{\Felargs}{>{\SplitArgument{1}{;}}m}
{\Felargsaux#1}
\NewDocumentCommand{\Felargsaux}{mm}
{#1\,\delimsize\vert\,\mathopen{}#2}%
\begin{document}
\[ \Fell{\varphi}{ k^2} = \int_0^\varphi\frac{\mathrm d\mkern1mu t}{\sqrt{1-k^4\sin^2t}}\qquad\Fell*{\frac{\pi^2}{4}}{k^2} \qquad\Fell[\Big]{\frac{\pi^2}{4}}{k^2}
\]%
\[ \Fel{\varphi ; \ell} = \int_0^\varphi\frac{\mathrm d\mkern1mu t}{\sqrt{1-\ell^2\sin^2t}}\qquad\Fel*{\frac{\pi^2}{4}; \ell}\qquad\Fel[\Big]{\frac{\pi^2}{4}; \ell}
\]%
\end{document}