我真的不知道如何正确修改代码。不过,我的问题是我想知道如何从包中修改以下代码布拉克特(链接中的整个.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{...|...}
类似的的版本。我有意缩短代码以消除冗余,因为 的命令现在是标准的,但我也删除了转换为 的功能,因为我只对单个分隔符感兴趣。\Set
bracket
\middle
e-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 } \]
(这实际上比可能需要的更复杂,因为它涉及间距。)当然,有很多方法可以使用这个包来定义类似的宏。