是否可以定义一个命令,该命令定义公式中交替使用圆括号、方括号和括号的分隔符?
如果该命令本身内有其他“mydelimiter”,则该命令会被计算在内,并且为了更好的可读性而交替使用。
$x = \left\mydelimiter \left\mydelimiter a+b \right\mydelimiter *y \right\mydelimiter / z $
将产生 x = [(a+b)*y] / z
感谢您的帮助。
答案1
与 David 的方法略有不同,该方法允许您循环使用两种以上的括号,并且还可以与\left
和 一起使用\right
。(不过,请考虑有关使用\left
和 的警告\right
。mleftright
对此包可能会很有趣。)
\documentclass{article}
\makeatletter
\newcount\mydelim@level
\def\@ldlm#1{%
\ifcase\numexpr #1\relax
(%
\or [%
\or \{%
\else
\@ldlm{#1-3}%
\fi
}
\def\@rdlm#1{%
\ifcase\numexpr #1\relax
\GenericWarning{}{LaTeX Warning: You used a \string\rdlm with no matching \string\ldlm!}{}{}%
\or )%
\or ]%
\or \}%
\else
\@rdlm{#1-3}%
\fi
}
\def\ldlm{%
\@ldlm{\mydelim@level}%
\global\advance\mydelim@level 1\relax
}
\def\rdlm{%
\@rdlm{\mydelim@level}%
\global\advance\mydelim@level -1\relax
}
\begin{document}
\[
\left\ldlm\left\ldlm\left\ldlm\left\ldlm
\sum x_i
\right\rdlm\right\rdlm\right\rdlm\right\rdlm
\]
\[
\ldlm\ldlm\ldlm\ldlm x\rdlm\rdlm\rdlm\rdlm
\]
\end{document}
答案2
对于建议的语法来说,嵌套计数并不是难点,但\mydelimiter
根据前缀\left
或来安排在打开和关闭分隔符之间进行交换\right
可能会涉及重新定义\left
和\right
原语,并在某些地方产生不良后果。
因此,这是相同的想法,但修改了语法,使其使用起来更简单,并且实现起来也更容易。
正如评论中指出的那样,\left
\right
在这些情况下使用并不总是最佳的,并且即使分隔符没有扩大也会引入额外的水平空间。
\documentclass{article}
\def\ldelim{[}
\def\rdelim{]}
\def\zlefts{\left[\def\zright{\right]}\let\zleft\zleftr}
\def\zleftr{\left(\def\zright{\right)}\let\zleft\zlefts}
\let\zleft\zlefts
\begin{document}
$x = \zleft \zleft a+b \zright * y \zright / z $
$x = [( a+b ) * y ] / z $
\end{document}