修改 brackett 包以适应不同的括号形式

修改 brackett 包以适应不同的括号形式

我真的不知道如何正确修改代码。不过,我的问题是我想知道如何从包中修改以下代码布拉克特(链接中的整个.sty文件,顺便说一下,相当小,下面的代码占了整个代码的一半以上) 使其适用于所有类型的括号。

以下是我认为与此相关的链接中的一段代码:

% \Set{...|...} Only the first | is treated specially.
{\catcode`\|=\active
  \xdef\set{\protect\expandafter\noexpand\csname set \endcsname}
  \expandafter\gdef\csname set \endcsname#1{\mathinner
        {\lbrace\,{\mathcode`\|32768\let|\midvert #1}\,\rbrace}}
  \xdef\Set{\protect\expandafter\noexpand\csname Set \endcsname}
  \expandafter\gdef\csname Set \endcsname#1{\left\{%
     \ifx\SavedDoubleVert\relax \let\SavedDoubleVert\|\fi
     \:{\let\|\SetDoubleVert
     \mathcode`\|32768\let|\SetVert
     #1}\:\right\}}
}
\def\midvert{\egroup\mid\bgroup}
\def\SetVert{\@ifnextchar|{\|\@gobble}% turn || into \|
    {\egroup\;\mid@vertical\;\bgroup}}
\def\SetDoubleVert{\egroup\;\mid@dblvertical\;\bgroup}

% If the user is using e-TeX with its \middle primitive, use that for
% verticals instead of \vrule.
%
\begingroup
 \edef\@tempa{\meaning\middle}
 \edef\@tempb{\string\middle}
\expandafter \endgroup \ifx\@tempa\@tempb
 \def\mid@vertical{\middle|}
 \def\mid@dblvertical{\middle\SavedDoubleVert}
\else
 \def\mid@vertical{\mskip1mu\vrule\mskip1mu}
 \def\mid@dblvertical{\mskip1mu\vrule\mskip2.5mu\vrule\mskip1mu}
\fi

因此,我想知道如何修改代码来创建新的命令(例如命令\Name),以便我得到 - 比如说 - 方括号,并且分隔符 | 仍然在中间适应括号的大小。

怎么做?

欢迎任何反馈!

PS:实际上,最初开发人员的想法正是为所有用户提供灵活性,让braket他们以自己的方式进行修改...但我显然是一个不够老练的用户。:)

答案1

跟进艾玛的评论,这是与软件包中的\Sequence{...|...}类似的的版本。我有意缩短代码以消除冗余,因为 的命令现在是标准的,但我也删除了转换为 的功能,因为我只对单个分隔符感兴趣。\Setbracket\middlee-TeX||\||

\NeedsTeXFormat{LaTeX2e} 
\documentclass{amsart}
\usepackage{etex, fixltx2e}
\usepackage{braket} %  for the \Set{...|...} command

% want to define \Sequence{...|...} to be similar to \Set of the braket package

{\catcode`\|=\active
  \xdef\Sequence{\protect\expandafter\noexpand\csname Sequence \endcsname}
  \expandafter\gdef\csname Sequence \endcsname#1{\left\langle%
     \:{
     \mathcode`\|32768\let|\SetVert
     #1}\:\right\rangle}
}
\def\SetVert{\egroup\;\middle|\;\bgroup}


\begin{document}
\[
\Sequence{ B^{c^f}_d | d < \omega^2 }
\]

\[
\Set{ B^{c^f}_d | d < \omega^2 }
\]
\end{document}

答案2

我对这个包裹不太了解braket,但是mathtools包提供了一些用于声明成对分隔符的不错命令。特别是,文档给出了一些使用 定义类似 brackett 的宏的示例\DeclarePairedDelimiterX

例如,文档提供了以下我认为您可能需要的代码片段(类似 brackett 的设置宏):

% just to make sure it exists
\providecommand\given{}
% can be useful to refer to this outside \Set
\newcommand\SetSymbol[1][]{%
\nonscript\:#1\vert
\allowbreak
\nonscript\:
\mathopen{}}
\DeclarePairedDelimiterX\Set[1]\{\}{%
\renewcommand\given{\SetSymbol[\delimsize]}
#1
}

\[ \Set*{ x \in X \given \frac{\sqrt{x}}{x^2+1} > 1 } \]

(这实际上比可能需要的更复杂,因为它涉及间距。)当然,有很多方法可以使用这个包来定义类似的宏。

相关内容