足够长的垂直线 | 取决于它前后的表达式 - 椭圆积分

足够长的垂直线 | 取决于它前后的表达式 - 椭圆积分

我想写一个椭圆积分,其中包含分数F(\phi|k^2)的不同表达式。所以我想要一个新命令(宏?)。它应该看起来像这样。这完全没有问题,不需要缩放垂直线。但我想用参数自动缩放它。\phik^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.)中的可选参数允许微调分隔符的大小。DeclarePairedDelimiterXPPtwo\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} 

在此处输入图片描述

相关内容