自动左右命令

自动左右命令

是否可以在所有括号前自动“添加” \leftand命令?源代码应该保持不变,但 LaTeX 应该将每对括号解释为前面有这样的命令。这是因为添加and命令很耗时,会使源代码更长、更难读。我考虑过为 and 定义新的命令,例如and ,但我觉得不太优雅:如果我还想添加方括号怎么办?\right\left\right\lb\rb\left(\right)

有什么想法吗?谢谢。

答案1

\DeclarePairedDelimiter来自的命令数学工具很有用。例如定义一个绝对值宏;

\DeclarePairedDelimiter\abs{\lvert}{\rvert}

\left还提供了一个带有星号的版本\right

\abs*{\frac{a}{b}}

未加星号的版本采用可选参数,可以是\big\Big

\abs[\Bigg]{\frac{a}{b}}

答案2

在所有分隔符中添加\left\right很困难,并且在许多地方可能无法产生预期的结果。

nath软件包旨在使\left\right过时。摘自自述文件:

分隔符的大小会根据所包含的内容进行调整,从而\left几乎\right过时。

答案3

编辑: 我出于“学术目的”保留这个答案,但考虑一下莱夫·毕晓普回答一个比我的更简单的解决方案。


多年来,我开发了自己的解决方案,我认为效果非常好。它为您提供了一个命令,您可以像下面这样调用它

\newdelimcommand{parens}{(}{)}

反过来,它将为你定义一个\parens命令,然后你可以使用它来\parens{thing}生成类似的东西(thing),此外,括号会自动调整大小。事实上,你可以用三种不同的方式使用该命令

\parens{thing}       % automatic resize
\parens*{thing}      % no resize
\parens[big]{thing}  % use the specified size

对于后一个选项,您可以使用(默认auto)、base(不调整大小)或以下尺寸之一:big,,,。BigbiggBigg

此外,在 中,thing您可以使用命令\ldelim\rdelim\mdelim创建更多分隔符,并通过给定的选项选择适当的大小。例如,这允许使用\mdelim自动调整“中间”栏的大小。(参见代码末尾的示例)。

为了使其正常工作,您必须将以下代码放入 .sty 文件中,并将其包含在您的主 .tex 文件中\usepackage

\RequirePackage{amsmath}

% delim sizing options
\let\delim@autol\left  \let\delim@autor\right \let\delim@autom\middle
\let\delim@basel\relax \let\delim@baser\relax \let\delim@basem\relax
\let\delim@bigl\bigl   \let\delim@bigr\bigr   \let\delim@bigm\big
\let\delim@Bigl\Bigl   \let\delim@Bigr\Bigr   \let\delim@Bigm\Big
\let\delim@biggl\biggl \let\delim@biggr\biggr \let\delim@biggm\bigg
\let\delim@Biggl\Biggl \let\delim@Biggr\Biggr \let\delim@Biggm\Bigg

% default definitions
\newcommand\ldelim{\relax}
\newcommand\rdelim{\relax}
\newcommand\mdelim{\relax}

% the actual command
\newcommand\delim@command[4]{{%   #1 size #2 ldelim #3 rdelim #4 content
  \def\ldelim{\csname delim@#1l\endcsname}%
  \def\rdelim{\csname delim@#1r\endcsname}%
  \def\mdelim{\csname delim@#1m\endcsname}%
  \ldelim#2#4\rdelim#3}}

% a factory to define new delimiter commands
\newcommand{\newdelimcommand}[3]{% #1 name #2 ldelim #3 rdelim
  \expandafter\newcommand\csname delim@#1@st\endcsname[1]{% ##1 content
    \delim@command{base}{#2}{#3}{##1}}%
  \expandafter\newcommand\csname delim@#1@ns\endcsname[2][auto]{%
    % ##1 size ##2 content
    \delim@command{##1}{#2}{#3}{##2}}%
  \expandafter\DeclareRobustCommand\csname#1\endcsname{%
    \@ifstar{\csname delim@#1@st\endcsname}{\csname delim@#1@ns\endcsname}%
  }%
}

% syntactically named delimiters
\newdelimcommand{braces}{\lbrace}{\rbrace}
\newdelimcommand{angles}{\langle}{\rangle}
\newdelimcommand{verts}{\lvert}{\rvert}
\newdelimcommand{Verts}{\lVert}{\rVert}
\newdelimcommand{brackets}{[}{]}

% semantically named delimiters
\newcommand{\set}{\braces}
\newcommand{\abs}{\verts}
\newcommand{\size}{\verts}
\newcommand{\norm}{\Verts}
\newcommand{\tuple}{\angles}

% Automagic `such that' for set comprehension. Inside an automagic
% delimiter command, the vertical bar will resize appropriately
% Example:
%   \set{ x \in W \st x > 0 }
\newcommand{\st}{\;\mdelim\vert\;}

我一直在考虑最终将此(和其他代码)发布为适当的样式文件。但目前这里供您复制和粘贴。:)

答案4

我使用以下新命令:

\newcommand{\of}[1]{\left(#1\right)}
\newcommand{\off}[1]{\left[#1\right]}
\newcommand{\offf}[1]{\left\{#1\right\}}

因此,在文本中,f\of{x}将显示为f(x)M\ast\offf{g\off{x}+h\off{x}}将显示为M*{g[x]+h[x]},等等,其中\left\right命令自动内置。

相关内容