如何编写一个命令来计算其自身内的分隔符并相应地交替使用括号?

如何编写一个命令来计算其自身内的分隔符并相应地交替使用括号?

是否可以定义一个命令,该命令定义公式中交替使用圆括号、方括号和括号的分隔符?

如果该命令本身内有其他“mydelimiter”,则该命令会被计算在内,并且为了更好的可读性而交替使用。

$x = \left\mydelimiter \left\mydelimiter  a+b \right\mydelimiter *y \right\mydelimiter / z $

将产生 x = [(a+b)*y] / z

感谢您的帮助。

答案1

与 David 的方法略有不同,该方法允许您循环使用两种以上的括号,并且还可以与\left和 一起使用\right。(不过,请考虑有关使用\left和 的警告\rightmleftright对此包可能会很有趣。)

\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}

MWE 输出

答案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}

答案3

enparen包可以自动交替分隔符:

\documentclass{article} 
\usepackage{enparen} 
\begin{document}
$x = \enparen{\enparen{ a+b } * y } / z $
 \end{document}

在此处输入图片描述

相关内容