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