![在 LaTeX 中创建条件语句](https://linux22.com/image/431096/%E5%9C%A8%20LaTeX%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E6%9D%A1%E4%BB%B6%E8%AF%AD%E5%8F%A5.png)
我正在尝试制作一个样式文件来简化笔记记录,尤其是涉及数学的科目。
我想要制作该\delim
命令,它有一个用于表达式的强制参数,以及一个可选参数,用于使用来自matrix
命令的字符来更改分隔符amsmath
,这些字符(p), [b], {B}, |v|, ||V||
以p
作为默认值。
我认为它将涉及\if
命令,但我不知道如何检查可选参数是否是、、、或p
。任何帮助都非常感谢。b
B
v
V
答案1
(免责声明:我个人的观点是,虽然这可能使打字更快,但代码的可读性却大大降低。)
这里有一种方法:首先我通过 定义一组成对的分隔符\DeclarePairedDelimiter
,它为所有分隔符提供了一个可自动缩放的起始版本,以及一个可选参数来手动提供大小;然后我引入用户宏,它通过可选参数选择所需的分隔符
\documentclass{article}
\usepackage{mathtools}% loads amsmath
\makeatletter
\newcommand*{\delim@}{\delim@p}% better safe than sorry
\DeclarePairedDelimiter{\delim@p}{(}{)}
\DeclarePairedDelimiter{\delim@b}{[}{]}
\DeclarePairedDelimiter{\delim@B}{\{}{\}}
\DeclarePairedDelimiter{\delim@v}{|}{|}
\DeclarePairedDelimiter{\delim@V}{\|}{\|}
\newcommand*{\delim}[1][p]{\csname delim@#1\endcsname}
\makeatother
\begin{document}
\[
\delim{a+b},
\delim[b]{a+b},
\delim*{\frac{1}{2}},
\delim[B]*{\frac{1}{2}},
\delim[v][\Bigg]{\frac{1}{2}},
\delim[][\Big]{a+b},% or \delim[p][\Big]{a+b}
\delim[F]{a+b}
\]
\end{document}
第一个可选参数是p
、b
等等。然后,您可以编写一个星号来自动缩放,或者将手动大小作为进一步的可选参数。
看看最后两种情况:如果你想给仅有的手动大小用圆括号括起来,那么第一个可选参数应该为空或显式为p
。此外,没有对p
、b
、 进行测试……如果您拼写错误,则不会出现任何有意义的结果:\delim[F]{a+b}
只会给出a+b
。
如果你真的想看看一堆嵌套的样子\if
,你可以这样做
\newcommand*{\delim}[1][p]{%
\def\@tempa{#1}%
\if#1p\relax
\else
\if#1b\relax
\else
\if#1B\relax
\else
\if#1v\relax
\else
\if#1V\relax
\else
\def\@tempa{p}% if none of pbBvV then fall back to p
\fi
\fi
\fi
\fi
\fi
\csname delim@\@tempa\endcsname
}
如果出现拼写错误或参数为空的情况,则会给出括号。