用于正确格式化积分的简单命令或包?

用于正确格式化积分的简单命令或包?

我喜欢格式化我的积分,这样积分符号和被积函数之间的空间就小了,被积函数和微分之间的空间就大了,并且微分是直立的。但是,反复输入格式很繁琐。我写了一条命令,

\newcommand{\intf}[4]{\int_{#1}^{#2} \! #3 \, \mathrm{d}#4}

这样正确格式的积分更容易输入,例如\[ \intf{a}{b}{x^2}{x} \]输入

在此处输入图片描述

但是,此命令需要 4 个输入。如果我不需要上限或下限,我可以省略它们的输入,但我仍然需要写出括号,例如。然而,从长远来看,这也会变得乏味,并且在代码中看起来很乱!如果我有一些命令,我​​可以根据需要写和\intf{}{}{x^2}{x},那就太好了,例如^_\intf^{b}{x^2}{x}

因此,我想知道两件事:(a)是否存在一些具有预先格式化的完整命令的预先存在的包?(b)是否有一种简单的方法可以更改上述命令,以便它可以根据需要进行诸如^_之类的修改?

谢谢!

答案1

LaTeX 的内核宏\@ifnextchar可用于查看下一个标记,语法:

\@ifnextchar<token>{<yes>}{<no>}

\intf使用以下语法的示例:

\intf _<subscript> ^<superscript> <term> <variable>
  • 下标和上标的顺序无关紧要。<...>如果包含多个标记,则需要使用花括号。

完整示例文件:

\documentclass{article}

\makeatletter
\newcommand*{\intf}{%
  \@ifnextchar_{\intf@sub}{%
    \@ifnextchar^{\intf@sup}{%
      \intf@{}{}%
    }%
  }%
}
\def\intf@sub_#1{%
  \@ifnextchar^{%
    \intf@sub@sup{#1}%
  }{%
    \intf@{#1}{}%
  }%
}
\def\intf@sup^#1{%
  \@ifnextchar_{%
    \intf@sup@sub{#1}%
  }{%
    \intf@{}{#1}%
  }%
}
\def\intf@sub@sup#1^#2{\intf@{#1}{#2}}
\def\intf@sup@sub#1_#2{\intf@{#2}{#1}}
\newcommand*{\intf@}[4]{%
  \int
  \ifx\\#1\\\else _{#1}\fi
  \ifx\\#2\\\else ^{#2}\fi
  \!#3\,\mathrm{d}#4%
}
\makeatother

\begin{document}
\[
  \intf_a^b{x^2}{x}, \intf^b_a{x^2}{x},
  \intf_a{x^2}{x}, \intf^b{x^2}{x}, \intf{x^2}{x}
\]
\end{document}

结果


分隔参数的更多乐趣:d可以用作分隔符。由于积分变量通常是一个字母,因此可以使用以下语法保存一些花括号:

\intf _<subscript> ^<superscript> <term> d<variable>

<superscript>如果、<subscript><variable>包含多个标记,则需要使用括号。<term>如果 包含 ,则需要使用花括号d。示例:

\documentclass{article}

\makeatletter
\newcommand*{\intf}{%
  \@ifnextchar_{\intf@sub}{%
    \@ifnextchar^{\intf@sup}{%
      \intf@{}{}%
    }%
  }%
}
\def\intf@sub_#1{%
  \@ifnextchar^{%
    \intf@sub@sup{#1}%
  }{%
    \intf@{#1}{}%
  }%
}
\def\intf@sup^#1{%
  \@ifnextchar_{%
    \intf@sup@sub{#1}%
  }{%
    \intf@{}{#1}%
  }%
}
\def\intf@sub@sup#1^#2{\intf@{#1}{#2}}
\def\intf@sup@sub#1_#2{\intf@{#2}{#1}}
\def\intf@#1#2#3d#4{%
  \int
  \ifx\\#1\\\else _{#1}\fi
  \ifx\\#2\\\else ^{#2}\fi
  \!#3\,\mathrm{d}#4%
}
\makeatother

\begin{document} 
\[
  \intf_a^b x^2 dx, \intf^b_a x^2 dx,
  \intf_a x^2 dx, \intf^b x^2 dx, \intf x^2 dx
\]
\[
  \intf_{xy}^z {d^2-3d} dd
\]   

\end{document}

结果

答案2

我会避免在工作中包含微分符号,因为一旦涉及二重积分或线积分,就会遇到问题。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\NewDocumentCommand{\Int}{s >{\SplitArgument{1}{;}}o}{%
  \int
  \IfBooleanT{#1}{\limits}%
  \IfValueT{#2}{\IntAux#2}%
}

\NewDocumentCommand{\IntAux}{mm}{%
 _{#1}\IfNoValueTF{#2}{\,}{^{#2}}\!
}


\NewDocumentCommand{\diff}{}{\mathop{}\!\mathrm{d}}

\begin{document}
\begin{gather*}
  \Int[a;b] x^2 \diff x \\
  f(t)=\Int[t] x^2 \diff x \\
  g(t)=\Int[;t] x^2 \diff x \\
  \Int x^2 \diff x \\
  \Int*[\Omega]f(x,y)\diff x\diff y
\end{gather*}
\end{document}

如果可选参数中只给出了一个组件,它将被排版为下限。*-variant 使用\limits,如上一个示例所示。

在此处输入图片描述

答案3

包裹cool允许\Int{f}{x}在没有限制的情况或\Int{f}{x,a,b}有限制的情况使用:

在此处输入图片描述

代码:

\documentclass{article}
\usepackage{cool}

\Style{IntegrateDifferentialDSymb=\mathrm{d}}% Use an upright d

\begin{document}
    \[
      \Int{x^2}{x} \quad \Int{x^2}{x,a,b} 
    \]
\end{document}

相关内容