summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-11-01 20:13:19 +0000
committerKarl Berry <karl@freefriends.org>2016-11-01 20:13:19 +0000
commitb3e35183d4333479c65127064bcb5bae2eb6a458 (patch)
tree30cb862f12d2781c08be23e9125b18d2fd52c13a /Master
parent89932411328fa7d9375927a54406fa3e5a8dc3da (diff)
delimset (1nov16)
git-svn-id: svn://tug.org/texlive/trunk@42415 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/delimset/README30
-rw-r--r--Master/texmf-dist/doc/latex/delimset/delimset.pdfbin0 -> 314008 bytes
-rw-r--r--Master/texmf-dist/doc/latex/delimset/dlmssamp.tex118
-rw-r--r--Master/texmf-dist/source/latex/delimset/delimset.dtx1185
-rw-r--r--Master/texmf-dist/source/latex/delimset/delimset.ins40
-rw-r--r--Master/texmf-dist/tex/latex/delimset/delimset.sty141
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rw-r--r--Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/delimset.tlpsrc0
9 files changed, 1516 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/delimset/README b/Master/texmf-dist/doc/latex/delimset/README
new file mode 100644
index 00000000000..a15e902ef19
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/delimset/README
@@ -0,0 +1,30 @@
+delimset v1.0
+Copyright 2016 Niklas Beisert
+
+delimset is a LaTeX2e package to typeset and declare sets of delimiters
+in math mode whose size can be adjusted conveniently.
+
+The package consists of the files
+
+ README readme file
+ delimset.ins installation file
+ delimset.dtx source file
+ delimset.sty package file
+ dlmssamp.tex sample latex file
+ delimset.pdf manual
+
+The distribution consists of the files README, delimset.ins and delimset.dtx.
+
+Run "(pdf)latex delimset.dtx" to compile the manual delimset.pdf.
+
+Run "latex delimset.ins" to create the package delimset.sty and the sample dlmssamp.tex.
+Copy the file delimset.sty to an appropriate directory of your LaTeX
+distribution, e.g. texmf-root/tex/latex/delimset.
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
diff --git a/Master/texmf-dist/doc/latex/delimset/delimset.pdf b/Master/texmf-dist/doc/latex/delimset/delimset.pdf
new file mode 100644
index 00000000000..f13b40abdaa
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/delimset/delimset.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/delimset/dlmssamp.tex b/Master/texmf-dist/doc/latex/delimset/dlmssamp.tex
new file mode 100644
index 00000000000..66b6360aabc
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/delimset/dlmssamp.tex
@@ -0,0 +1,118 @@
+%%
+%% This is file `dlmssamp.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% delimset.dtx (with options: `sample')
+%%
+%% Copyright (C) 2016 Niklas Beisert
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+\ProvidesFile{dlmssamp.tex}[2016/11/01 v1.0 sample for delimset]
+\documentclass[12pt]{article}
+
+\usepackage[margin=2cm]{geometry}
+\usepackage{amsmath,amsfonts}
+\usepackage{delimset}
+
+\begin{document}
+
+sizes for default brackets:
+\[
+\brk0{x},\quad
+\brk1{x},\quad
+\brk2{x},\quad
+\brk3{x},\quad
+\brk4{x}
+\]
+
+styles for default brackets:
+\[
+\brk[r]{x},\quad
+\brk[s]{x},\quad
+\brk[c]{x},\quad
+\brk[a]{x}
+\]
+
+nested brackets:
+\[
+\brk[c]2{\brk[s]!{\brk{ax+b}x+c}x+d}
+\]
+
+default absolute value, norm and default evaluations:
+\[
+\abs*{\frac{ax+b}{cx+d}},\qquad
+\norm*{\frac{ax+b}{cx+d}},\qquad
+\eval*{\frac{ax+b}{cx+d}}_{x=0},\qquad
+\eval[s]*{\frac{ax+b}{cx+d}}_{x=0}^{x=\infty},\qquad
+\]
+
+outer delimiter spacing:
+\begin{align*}
+&\square\brk0{x}\square,&&\square\brk1{A^k}\square,
+\\
+&\square\brk*{x}\square,&&\square\brk*{A^k}\square,
+\end{align*}
+
+delimiter sizes in exponents:
+\[
+e^{\brk{ax+b}},\qquad
+e^{\brk!{ax+b}}
+\]
+
+delimiter declaration:
+\DeclareMathDelimiterSet{\braket}[2]
+ {\selectdelim[l]<#1\selectdelim|#2\selectdelim[r]>}
+\[
+\braket!{\psi}{\psi}
+\]
+
+delimiter usage:
+\[
+\delimpair<|>!{\psi}{\psi}
+\]
+
+conditional set, alternative layouts:
+\[
+\delimpair\{{[m]|}\}!{2n}{n\in\mathbb{Z}},
+\qquad
+\delimpair\{{[b]|}\}!{2n}{n\in\mathbb{Z}},
+\qquad
+\delimpair\{{[p]|}\}!{2n}{n\in\mathbb{Z}},
+\qquad
+\delimpair\{|\}!{2n}{n\in\mathbb{Z}},
+\qquad
+\delimpair\{{[.];}\}!{2n}{n\in\mathbb{Z}},
+\]
+
+delimiter definition:
+\newcommand{\comm}{\delimpair[{[.],}]}
+\[
+\comm!{\comm{A}{B}}{C}
++\comm!{\comm{B}{C}}{A}
++\comm!{\comm{C}{A}}{B}
+=0
+\]
+
+alternative representation:
+\renewcommand{\comm}{\delimpair[{[.];}]}
+\[
+\comm!{\comm{A}{B}}{C}
++\comm!{\comm{B}{C}}{A}
++\comm!{\comm{C}{A}}{B}
+=0
+\]
+
+\end{document}
+\endinput
+%%
+%% End of file `dlmssamp.tex'.
diff --git a/Master/texmf-dist/source/latex/delimset/delimset.dtx b/Master/texmf-dist/source/latex/delimset/delimset.dtx
new file mode 100644
index 00000000000..f953e906faf
--- /dev/null
+++ b/Master/texmf-dist/source/latex/delimset/delimset.dtx
@@ -0,0 +1,1185 @@
+% \iffalse
+%
+% delimset.dtx Copyright (C) 2016 Niklas Beisert
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Niklas Beisert.
+%
+% This work consists of the files delimset.dtx and delimset.ins
+% and the derived files delimset.sty and dlmssamp.tex
+%
+%<package|sample>\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+%<package>\ProvidesPackage{delimset}[2016/11/01 v1.0 convenient size control for delimiter sets]
+%<sample>\ProvidesFile{dlmssamp.tex}[2016/11/01 v1.0 sample for delimset]
+%<*driver>
+%\ProvidesFile{delimset.drv}[2016/11/01 v1.0 delimset Reference Manual file]
+\PassOptionsToClass{10pt,a4paper}{article}
+\documentclass{ltxdoc}
+
+\usepackage[margin=35mm]{geometry}
+\usepackage{hyperref}
+\usepackage[usenames]{color}
+\usepackage{amsmath,amsfonts}
+
+\hypersetup{colorlinks=true}
+\hypersetup{pdfstartview=FitH}
+\hypersetup{pdfpagemode=UseNone}
+
+\begin{document}
+
+\title{The \textsf{delimset} Package}
+\hypersetup{pdftitle={The delimset Package}}
+\author{Niklas Beisert\\[2ex]
+ Institut f\"ur Theoretische Physik\\
+ Eidgen\"ossische Technische Hochschule Z\"urich\\
+ Wolfgang-Pauli-Strasse 27, 8093 Z\"urich, Switzerland\\[1ex]
+ \href{mailto:nbeisert@itp.phys.ethz.ch}
+ {\texttt{nbeisert@itp.phys.ethz.ch}}}
+\hypersetup{pdfauthor={Niklas Beisert}}
+\hypersetup{pdfsubject={Manual for the LaTeX2e Package delimset}}
+\date{1 November 2016, \textsf{v1.0}}
+\maketitle
+
+\begin{abstract}\noindent
+\textsf{delimset} is a \LaTeXe{} package to typeset and declare
+sets of delimiters in math mode whose size can be adjusted conveniently.
+\end{abstract}
+
+\tableofcontents
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Introduction}
+
+In ordinary \TeX{} and \LaTeX{}, delimiters in math and physics expressions
+(brackets such as parentheses, braces, but also
+absolute values, sets, pairings, bra-kets and quantum expectation values,
+commutators, \ldots)
+are typically coded by their respective symbols.
+For example:
+%
+\[
+\begin{aligned}
+|[(ax+b)x+c]| &\to [(ax+b)x+c]
+\\
+|\{1,2,3,\ldots\}| &\to \{1,2,3,\ldots\}
+\\
+|(v,w)| &\to (v,w)
+\\
+|\langle\psi\vert M\vert\psi\rangle| &\to \langle\psi\vert M\vert\psi\rangle
+\\
+|(x^2+px+q)\vert_{-p/2}| &\to (x^2+px+q)\vert_{-p/2}
+\\&\ldots
+\end{aligned}
+\]
+%
+In order to adjust the size of delimiters, the modifiers
+|\big|, |\Big|, |\bigg|, |\Bigg| are used.
+More importantly the construct
+{|\left*| \ldots [|\middle*|] \ldots |\right*|}
+adjusts the size of delimiters to the contents:
+\[
+\Bigg[\bigg[\Big[\big[[*]\big]\Big]\bigg]\Bigg],
+\qquad
+\left\{\frac{p}{q} \middle\vert p,q\in\mathbb{Z}, q\neq 0 \right\}
+\]
+%
+These modifiers allow to construct expressions involving delimiters
+conveniently and with a large amount of flexibility.
+
+However, once an expression has been typeset in this way,
+it takes some efforts to modify, if needed.
+At least, one has to take care of both delimiters at the same time
+and change their size or type accordingly.
+For example, $\hat X$ in the expression |(A\hat{X}+B)|
+has an extended height that calls for bigger delimiters.
+Ideally, one would use |\left(...\right)|
+to find the correct size.
+Unfortunately, in this case, the smallest size of delimiters
+that covers the height of $\hat X$ is equivalent to |\Big|,
+which feels somewhat too big. For aesthetic reasons one might thus prefer
+the size |\big(...\big)|:
+%
+\[
+\begin{aligned}
+|(A\hat{X}+B)|
+&\to(A\hat{X}+B)
+\\
+|\left(A\hat{X}+B\right)|
+&\to\left(A\hat{X}+B\right)
+\\
+|\Big(A\hat{X}+B\Big)|
+&\to\Big(A\hat{X}+B\Big)
+\\
+|\big(A\hat{X}+B\big)|
+&\to\big(A\hat{X}+B\big)
+\end{aligned}
+\]
+
+The package \textsf{delimset} provides mechanisms to declare sets of delimiters
+whose size can be adjusted conveniently by simple optional parameters.
+For example, it provides a general purpose bracket |\brk|
+which can be used as follows:
+\[
+\begin{aligned}
+|\brk{A\hat{X}+B}|&\to(A\hat{X}+B)
+\\
+|\brk*{A\hat{X}+B}|&\to\mathopen{}\mathclose{\left(A\hat{X}+B\right)}
+\\
+|\brk2{A\hat{X}+B}|&\to\Bigl(A\hat{X}+B\Bigr)
+\\
+|\brk!{A\hat{X}+B}|&\to\bigl(A\hat{X}+B\bigr)
+\end{aligned}
+\]
+%
+It also allows to change the type of bracket conveniently:
+%
+\[
+\begin{aligned}
+|\brk{ax+b}|
+&\to(ax+b)
+\\
+|\brk[s]{ax+b}|
+&\to[ax+b]
+\\
+|\brk[c]{ax+b}|
+&\to\{ax+b\}
+\\
+|\brk[a]{ax+b}|
+&\to\langle ax+b\rangle
+\end{aligned}
+\]
+%
+These features can be combined and used, e.g., in nested brackets
+in order to distinguish the levels by shape and size:
+%
+\[
+|\brk[s]!{\brk{ax+b}x+c}|
+\to\bigl[(ax+b)x+c\bigr]
+\]
+%
+All of this can of course be achieved with the conventional
+tools of \TeX{} with comparable effort,
+but the more complicated and nested the expressions get,
+the more difficult it will be to adjust them
+to obtain a visually acceptable result.
+
+The main functionality of the package is based on a
+versatile mechanism to specify sets of delimiters, e.g.:
+\[
+\begin{aligned}
+|\delim<>{ax+b}|
+&\to\langle ax+b\rangle
+\\
+|\delimpair{[}{[.],}{[}!{a}{b}|
+&\to \bigl[a, b\bigr[
+\\
+|\delimtriple<\vert\vert>*{\psi}{A^\dagger}{\psi}|
+&\to\left\langle\psi\middle\vert A^\dagger\middle\vert \psi\right\rangle
+\end{aligned}
+\]
+%
+The command |\delim| can be used on the fly, but also
+in definitions of custom delimiter sets such as:
+%
+\[
+|\newcommand{\comm}{\delimpair{[}{[.],}{]}}|
+\]
+%
+Note that the definition of |\comm| does not specify any arguments.
+They are nevertheless read by the incomplete definition of |\delimpair|
+from the what follows |\comm|.
+In particular, this incomplete definition
+enables the correct parsing of the optional size specifier,
+e.g.:
+%
+\[
+|\comm!{P}{\psi(x)}| \to \bigl[P,\psi(x)\bigr]
+\]
+%
+The package also provides a mechanism to declare
+delimited sets more flexibly.
+The above definition could be written as follows:
+%
+\[
+\begin{aligned}
+&|\DeclareMathDelimiterSet{\comm}[2]|
+\\
+&\qquad |{\selectdelim[l]{[}{#1},{#2}\selectdelim[r]{]}}|
+\end{aligned}
+\]
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Delimiter Sizes for Math Styles}
+
+In plain \LaTeXe{}
+the size modifiers |\big|, |\Big|, |\bigg|, |\Bigg| have the shortcoming
+that they are based on a fixed font size of 10pt.
+More precisely, they use a vertical phantom of
+height 8.5pt, 11.5pt, 14.5pt or 17.5pt, respectively
+to set the height of the delimiter.
+The package \textsf{amsmath} corrects for font size
+by instead placing a (centred) vertical phantom of
+height 1.2, 1.8, 2.4 or 3 times the size
+of the currently selected math font
+(height plus depth of |\Mathstrutbox@|).
+
+Unfortunately, it does not account for
+the currently selected math style.
+Therefore, the size of delimiters in sub/superscripts
+cannot be adjusted appropriately,
+\unskip\footnote{Arguably, it is bad typesetting practice
+to have too complicated expressions in sub/superscripts.}
+they come out way too big:
+%
+\[
+|e^{\big(ax+b\big)}| \to e^{\big(ax+b\big)}
+\]
+%
+This package modifies the definitions of
+the size modifiers (of \textsf{amsmath})
+to automatically adjust to sub/superscripts
+(subject to availability):
+%
+\[
+\makeatletter
+|e^{\big(ax+b\big)}| \to e^{\left(\vcenter to 0.7\big@size{}ax+b\right)}
+\makeatother
+\]
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Spacing and Math Classes}
+
+Another shortcoming of the variable-size delimiters is that
+the spacing is noticeably different from their fixed-size counterparts:
+%
+\[
+\begin{aligned}
+|\square(ax+b)\square|
+&\to \square(ax+b)\square
+\\
+|\square\left(ax+b\right)\square|
+&\to \square\left(ax+b\right)\square
+\\
+|\square\bigl(ax+b\bigr)\square|
+&\to \square\bigl(ax+b\bigr)\square
+\\
+|\square\left(ax+\big.b\right)\square|
+&\to \square\left(ax+\big.b\right)\square
+\end{aligned}
+\]
+%
+Often the construct |\left*| \ldots|\right*|
+leaves a large amount of space around it.
+A suitable way to fix this problem
+is to adjust the math class as follows:
+%
+\[
+\begin{aligned}
+|\square(ax+b)\square|
+&\to \square(ax+b)\square
+\\
+|\square\mathopen{}\mathclose{\left(ax+b\right)}\square|
+&\to \square\mathopen{}\mathclose{\left(ax+b\right)}\square
+\end{aligned}
+\]
+%
+This makes the expression look like |\mathopen| from the left
+and like |\mathclose| from the right. Importantly,
+the delimited expression should be contained in
+the |\mathclose| block so as to place any following
+sub/superscripts at the appropriate height.
+Unfortunately, the fix is too elaborate
+in comparison to the benefits of appropriate spacing.
+For practical purposes, consistent spacing can only be achieved
+by a more convenient mechanism.
+
+On a related note, it is important to correctly specify
+the math class (|\mathopen|\hspace{0pt}/\hspace{0pt}|\mathclose|)
+for the delimiters, for example:
+\[
+\begin{aligned}
+|\big(-1\big)| &\to \big(-1\big)
+\\
+|\bigl(-1\bigr)| &\to \bigl(-1\bigr)
+\end{aligned}
+\]
+%
+The math class can also make a major difference for intermediate delimiters,
+e.g.:
+\[
+\begin{aligned}
+|\bigl\langle\psi\big\vert\psi\bigr\rangle|
+&\to \bigl\langle\psi\big\vert\psi\bigr\rangle
+\\
+|\bigl\langle\psi\bigm\vert\psi\bigr\rangle|
+&\to \bigl\langle\psi\bigm\vert\psi\bigr\rangle
+\\
+|\bigl\langle\psi\mathbin\big\vert\psi\bigr\rangle|
+&\to \bigl\langle\psi\mathbin\big\vert\psi\bigr\rangle
+\\
+|\bigl\langle\psi\mathpunct\big\vert\psi\bigr\rangle|
+&\to \bigl\langle\psi\mathpunct\big\vert\psi\bigr\rangle
+\end{aligned}
+\]
+%
+Depending on the particular situation,
+any of these expressions may be the most appropriate representation.
+
+The package \textsf{delimset} automatically takes care of the math classes
+of the left and right delimiters. It also offers several choices for
+intermediate delimiters to take the context into account.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Philosophy}
+
+Semantic typesetting is one of the philosophies behind \LaTeX{}:
+The author should focus on the content
+while the layout is taken care of by the engine.
+The (body of a) source file largely codes the contents of the document,
+while the layout is largely specified
+by the kernel, classes, styles and macro definitions
+(in the preamble).
+In order for the separation of content and layout to work well,
+the meaning of the content must be accurately specified by the source file
+so that the appropriate layout can be applied to it.
+For example, a left bracket `|(|' can have many meanings,
+which the engine could not possibly guess.
+Even a simple compound expression such as |[A,B]| could
+have different meanings depending on context
+such as a compact interval or a commutator.
+A semantic coding of the latter two concepts
+such as |\intv{A}{B}| vs.\ |\comm{A}{B}|
+clearly distinguishes between them.
+This allows the typesetting engine to represent them appropriately
+in every situation.
+It also allows to consistently define or adjust
+the typeset representation globally
+according to one's taste, such as $[A,B]$ vs.\ $[A;B]$.
+The price to pay is a larger number of abstract commands
+(which possibly evaluate to the same expression)
+and using them to specify the semantics throughout the source file
+(or at least where practical and useful).
+Conversely, the price to pay for an immediate typesetting scheme is that
+all notations need to be fixed at the start, and later adjustments require
+an elaborate search and replacement
+of (somewhat ambiguous) patterns like |[|$x$|,|$y$|]|.
+
+Another distinction between \TeX{} and \LaTeX{} is that the former
+frequently uses free-format expressions such as $|{x\over y}|$
+whereas the latter normally uses structured commands with arguments
+such as $|\frac{x}{y}|$.
+In that sense, the construct {|\left(ax+b\right)|}
+belongs to the world of \TeX{}, whereas an expression like
+{|\delim()*{ax+b}|} fits the \LaTeX{} framework better.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Related CTAN Packages}
+
+There are at least three other packages which offer a similar functionality:
+%
+\begin{itemize}
+\item
+The package \href{http://ctan.org/pkg/delim}{\textsf{delim}} supplies a command
+|\delimdef| to declare a set of delimiters
+which is similar to the present |\DeclareMathDelimiterSet|.
+The size of delimiters to be used in each case
+is then specified by a prefix command such as |\mbig| or |\mauto|.
+\item
+The package \href{http://ctan.org/pkg/mathtools}{\textsf{mathtools}}
+supplies commands |\DeclarePairedDelimiter...| (among many other things)
+which are similar to the present |\DeclareMathDelimiterSet|.
+The size of delimiters to be used in each case
+is then specified by an optional argument
+such as `|*|' or |[\big]|.
+\item
+The package \href{http://ctan.org/pkg/delimseasy}{\textsf{delimseasy}}
+defines a collection of useful delimiters such as |\prn| for
+round parentheses or |\sqpr| square parentheses.
+Modifier letters can be prepended and appended to adjust their size.
+\end{itemize}
+%
+A functionality of the present package
+not offered by any of the above packages is
+to typeset delimiters on the fly, e.g.:
+%
+\[
+|\delim<\vert>!{\psi}{\psi}|
+\to\bigl\langle\psi\big\vert\psi\bigr\rangle
+\]
+%
+The mechanism to specify the size is leaner in the sense that it uses
+only a single character and a single command.
+
+The package relies on two other packages:
+\begin{itemize}
+\item
+This package relies on some functionality of the package \textsf{amsmath}
+by using and overwriting some native code.
+Compatibility with the \textsf{amsmath} package
+has been tested with v2.15d (2016/06/28).
+\item
+This package uses the package \textsf{keyval} from the \textsf{graphics} bundle
+to process optional arguments to the package options.
+Compatibility with the \textsf{keyval} package
+has been tested with v1.15 (2014/10/28).
+\end{itemize}
+%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Usage}
+
+To use the package \textsf{delimset} add the command
+\begin{center}|\usepackage{delimset}|\end{center}
+to the preamble of your \LaTeX{} document.
+If not yet present,
+the package \textsf{amsmath} will be loaded automatically.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Inline Usage}
+\label{sec:delimcommands}
+
+The package provides three general purpose commands
+to compose delimiter sets with one, two or three encapsulated expressions:
+%
+\[
+\begin{aligned}
+&|\delim{|\emph{l}|}{|\emph{r}|}|\emph{size}|{|\emph{expr}|}|
+\\
+&|\delimpair{|\emph{l}|}{|\emph{m}|}{|\emph{r}|}|
+\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}|
+\\
+&|\delimtriple{|\emph{l}|}{|\emph{m1}|}{|\emph{m2}|}{|\emph{r}|}|
+\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}{|\emph{expr3}|}|
+\end{aligned}
+\]
+%
+The expression(s) \emph{expr(n)} will be surrounded by the
+delimiters \emph{l} and \emph{r}
+and, in the case of more than one expression,
+they will be separated by the delimiters \emph{m(n)}:
+\[
+\emph{l}\ \emph{expr}\ \emph{r},
+\qquad
+\emph{l}\ \emph{expr1}\ \emph{m}\ \emph{expr2}\ \emph{r},
+\qquad
+\emph{l}\ \emph{expr1}\ \emph{m1}\ \emph{expr2}\
+\emph{m2}\ \emph{expr3}\ \emph{r}
+\]
+
+Here, \emph{l} and \emph{r} have to be
+math delimiters (symbols which can be used for |\left| and |\right|) or
+the dot `.' for the null delimiter.
+The separators \emph{m(n)} can be plain math delimiters as well, but they can
+also be compound expression of the form |[|\emph{class}|]|\emph{delim}
+where \emph{class} specifies
+the intended math class of the delimiter \emph{delim}:
+%
+\[
+\begin{aligned}{}
+\left.\begin{array}{r}
+\emph{delim}\\|{|\emph{delim}|}|\\|{[]|\emph{delim}|}|
+\end{array}\right\}
+&\qquad\text{class }|\mathord|\text{ (similar to }|\big|)
+\\
+|{[l]|\emph{delim}|}|&\qquad
+\text{class }|\mathopen|\text{ (similar to }|\bigl|
+\text{, not for use in }|\delim...|)
+\\
+|{[r]|\emph{delim}|}|&\qquad
+\text{class }|\mathclose|\text{ (similar to }|\bigr|
+\text{, not for use in }|\delim...|)
+\\
+|{[m]|\emph{delim}|}|&\qquad
+\text{class }|\mathrel|\text{ (similar to }|\bigm|)
+\\
+|{[p]|\emph{delim}|}|&\qquad
+\text{class }|\mathpunct|\text{ (similar to }|\bigp|)
+\\
+|{[b]|\emph{delim}|}|&\qquad
+\text{class }|\mathbin|\text{ (similar to }|\bigb|)
+\\
+|{[.]|\emph{expr}|}|&\qquad
+\text{no size adjustment, \emph{expr} can be any expression}
+\end{aligned}
+\]
+%
+Note that the left and right delimiters \emph{l} and \emph{r} effectively
+have |[l]| and |[r]| prepended, respectively,
+and therefore they must be a plain math delimiter.
+Conversely, the immediate delimiters \emph{m(n)} must not
+have the |[l]| and |[r]| classes
+because the latter must appear precisely once
+and they are already taken by \emph{l} and \emph{r}.
+
+The optional size modifier \emph{size} should take one of the following values:
+\[
+\begin{aligned}{}
+\emph{empty}, \emph{anything else}, |0|&\qquad \text{default size}
+\\
+|!|, |+|, |1|&\qquad \text{size }|\big|\text{ (|!| is preferred)}
+\\
+|2|&\qquad \text{size }|\Big|
+\\
+|3|&\qquad \text{size }|\bigg|
+\\
+|4|&\qquad \text{size }|\Bigg|
+\\
+|*|&\qquad \text{variable size }|\left...\right|
+\end{aligned}
+\]
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Declarations}
+
+The above constructs can be used to define new delimiter commands via:
+%
+\[
+|\newcommand{\|\emph{name}|}{\delim...{|\emph{l}|}...{|\emph{r}|}}|
+\]
+%
+Here it makes sense to drop all arguments starting
+with the size modifier \emph{size} from the definition.
+The \TeX{} parsing mechanism will then automatically
+use the tokens following |\|\emph{name} including the optional size modifier.
+If the encapsulated expression(s) are to be passed as explicit arguments
+to |\|\emph{name}, one will have to find an alternative way to pass the
+optional size argument.
+
+The above declarations via |\delim...|
+should be sufficient for almost all situations.
+However, there is an even more flexible way to declare delimiter sets:
+\[
+|\DeclareMathDelimiterSet{\|\emph{name}|}[|\emph{narg}|]{|\emph{expr}|}|
+\]
+%
+The syntax of this command is equivalent to the one of |\newcommand|.
+The difference is that the command |\|\emph{name} first looks
+for the optional size modifier \emph{size} as
+described above in section \ref{sec:delimcommands}.
+It remembers the desired size for evaluating the macro \emph{expr}.
+Then it parses the arguments as if the command
+was declared by |\newcommand|.
+
+As usual, the macro \emph{expr} contains the command arguments
+specified by |#1|, |#2|, \ldots. Note that these should
+be encapsulated in groups |{#1}|, |{#2}|, \ldots,
+in order to prevent them from overwriting definitions
+at the level of the current group.
+It should also contain the desired math delimiters
+specified by:
+%
+\[
+|\selectdelim[|\emph{class}|]{|\emph{delim}|}|
+\]
+%
+Here, the sizes are adjusted automatically
+according to the previously specified modifier \emph{size}.
+The math classes must be in proper sequence,
+i.e.\ the first and last ones must be |l| and |r|, respectively,
+while the intermediate ones can be anything by |l| and |r|,
+see section \ref{sec:delimcommands}.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Default Declarations}
+\label{sec:defaultcommands}
+
+The package predefines four commonly used sets of delimiters:
+%
+\begin{itemize}
+\item
+|\brk[|\emph{type}|]|\emph{size}|{|\emph{expr}|}| represents
+a standard bracket around a single expression \emph{expr}.
+The type of bracket can be specified by the optional
+argument \emph{type}:
+\[
+\text{\emph{empty} or |[r]|: round }(x),\quad
+\text{|[s]|: square }[x],\quad
+\text{|[c]|: curly }\{x\},\quad
+\text{|[a]|: angle }\langle x\rangle
+\]
+\item
+|\eval[|\emph{type}|]|\emph{size}|{|\emph{expr}|}| represents
+evaluation of a functional expression \emph{expr}.
+The type of bracket can be specified by the optional
+argument \emph{type}:
+\[
+\text{\emph{empty} or |[v]|: }f(x)\vert_{a},\qquad
+\text{|[s]|: }[f(x)]_{a}^{b}
+\]
+\item
+|\abs|\emph{size}|{|\emph{expr}|}| represents
+the absolute value $\lvert\emph{expr}\rvert$.
+\item
+|\norm|\emph{size}|{|\emph{expr}|}| represents
+the norm $\lVert\emph{expr}\rVert$.
+\end{itemize}
+%
+The above definitions can be suppressed by
+setting the package option |stddef| to |false|,
+see section \ref{sec:packageoptions}.
+The package also defines some extended sets of delimiters as follows:
+%
+\begin{itemize}
+\item
+|\pair|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
+a pair(ing) $(\emph{expr1},\emph{expr2})$.
+\item
+|\set|\emph{size}|{|\emph{expr}|}| represents
+the set $\{\emph{expr}\}$.
+\item
+|\setcond|\emph{size}|{|\emph{expr}|}{|\emph{cond}|}| represents
+a set with condition $\{\emph{expr}\vert\emph{cond}\}$.
+\item
+|\intv[|\emph{type}|]|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
+an interval from \emph{expr1} to \emph{expr2}.
+The in/\hspace{0pt}exclusion of the bounds can be specified by the optional
+argument \emph{type}:
+\[
+\text{\emph{empty} or |[c]|: closed }[a,b],\qquad
+\text{|[o]|: open }]a,b[,\qquad
+\begin{array}{l}
+\text{|[l]|: left-open }]a,b]
+\\
+\text{|[r]|: right-open }[a,b[
+\end{array}
+\]
+\item
+|\avg|\emph{size}|{|\emph{expr}|}| represents
+some average $\langle\emph{expr}\rangle$.
+\item
+|\corr|\emph{size}|{|\emph{expr}|}| represents
+some correlator $\langle\emph{expr}\rangle$.
+\item
+|\comm|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
+the commutator $[\emph{expr1},\emph{expr2}]$.
+\item
+|\acomm|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
+the anti-commutator $\{\emph{expr1},\emph{expr2}\}$.
+\item
+|\bra|\emph{size}|{|\emph{expr}|}| represents
+a bra-vector $\langle\emph{expr}\rvert$ in quantum mechanics.
+\item
+|\ket|\emph{size}|{|\emph{expr}|}| represents
+a ket-vector $\lvert\emph{expr}\rangle$ in quantum mechanics.
+\item
+|\setcond|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents
+a bra-ket contraction $\langle\emph{expr1}\vert\emph{expr2}\rangle$.
+\end{itemize}
+The extended definitions need to be activated by
+the package option |extdef|, see section \ref{sec:packageoptions}.
+
+If the representations of the above delimiters do not suit the purpose
+or taste of the user, they can be redefined with |\renewcommand|.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Auxiliary Commands}
+\label{sec:auxcommands}
+
+In addition to the |\bigl|, |\bigr| and |\bigm| commands
+(as well as their |\Big.|, |\bigg.| and |\Bigg.| counterparts),
+the package defines two additional sets |\bigp| and |\bigb|
+(and counterparts).
+Here |\bigp| implies the math class |\mathpunct|
+and |\bigb| the class |\mathbin|.
+
+Furthermore, the package overloads the size calculation in the |\big...|
+commands to properly account for the math styles in sub/superscripts
+(|\scriptstyle|) and nested sub/\hspace{0pt}superscripts (|\scriptscriptstyle|).
+The latter behaviour can be controlled by
+the package option |scriptstyle|, see section \ref{sec:packageoptions}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Package Options}
+\label{sec:packageoptions}
+
+Options can be passed to the package by
+\[
+|\usepackage[|\emph{opts}|]{delimset}|
+\qquad
+\text{or}
+\qquad
+|\PassOptionsToPackage{|\emph{opts}|}{delimset}|
+\]
+%
+Here \emph{opts} is a comma-separated list of the available options:
+%
+\begin{itemize}
+\item
+|stddef|[|=true|$\vert$|false|]
+controls the activation of standard delimiter definitions specified in
+section \ref{sec:defaultcommands}.
+If no value is given |true| is assumed; initially set to |true|.
+\item
+|extdef|[|=true|$\vert$|false|]
+controls the activation of extended delimiter definitions specified in
+section \ref{sec:defaultcommands}.
+If no value is given |true| is assumed; initially set to |false|.
+\item
+|scriptstyle|[|=true|$\vert$|false|]
+controls the overwriting of size modifiers explained
+in section \ref{sec:auxcommands}.
+If no value is given |true| is assumed; initially set to |true|.
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\subsection{Feature Suggestions}
+
+% specify width of null delimiter?
+% automatic nesting of bracket types?
+% make optional arguments work for DeclareMathDelimiterSet?
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\appendix
+
+\settowidth\MacroIndent{\rmfamily\scriptsize 000\ }
+\parskip1ex
+\parindent0pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Files and Installation}
+
+The package consists of the files
+%
+\begin{center}
+\begin{tabular}{ll}
+ |README| & readme file \\
+ |delimset.ins| & installation file \\
+ |delimset.dtx| & source file \\
+ |delimset.sty| & package file \\
+ |dlmssamp.tex| & sample file \\
+ |delimset.pdf| & manual
+\end{tabular}
+\end{center}
+%
+The distribution consists of the files
+|README|, |delimset.ins| and |delimset.dtx|.
+%
+\begin{itemize}
+\item
+Run (pdf)\LaTeX{} on |delimset.dtx|
+to compile the manual |delimset.pdf| (this file).
+\item
+Run \LaTeX{} on |delimset.ins| to create the package |delimset.sty|
+and the sample consisting of |dlmssamp.tex|.
+Copy the file |delimset.sty| to an appropriate directory of your \LaTeX{}
+distribution, e.g.\ \textit{texmf-root}|/tex/latex/delimset|.
+\end{itemize}
+
+ \DocInput{delimset.dtx}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Copyright}
+
+Copyright \copyright{} 2016 Niklas Beisert
+
+This work may be distributed and/or modified under the
+conditions of the \LaTeX{} Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ \url{http://www.latex-project.org/lppl.txt}
+and version 1.3 or later is part of all distributions of \LaTeX{}
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Niklas Beisert.
+
+This work consists of the files |delimset.dtx| and |delimset.ins|
+and the derived files |delimset.sty| and |dlmssamp.tex|
+
+\end{document}
+%</driver>
+% \fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Sample File}
+%\iffalse
+%<*sample>
+%\fi
+%
+% In this section we provide a \LaTeX{} example how to use
+% some of the \textsf{delimset} features.
+%
+% Preamble and beginning of document body:
+%
+% \begin{macrocode}
+\documentclass[12pt]{article}
+
+\usepackage[margin=2cm]{geometry}
+\usepackage{amsmath,amsfonts}
+\usepackage{delimset}
+
+\begin{document}
+% \end{macrocode}
+
+sizes for default brackets:
+% \begin{macrocode}
+\[
+\brk0{x},\quad
+\brk1{x},\quad
+\brk2{x},\quad
+\brk3{x},\quad
+\brk4{x}
+\]
+% \end{macrocode}
+
+styles for default brackets:
+% \begin{macrocode}
+\[
+\brk[r]{x},\quad
+\brk[s]{x},\quad
+\brk[c]{x},\quad
+\brk[a]{x}
+\]
+% \end{macrocode}
+
+nested brackets:
+% \begin{macrocode}
+\[
+\brk[c]2{\brk[s]!{\brk{ax+b}x+c}x+d}
+\]
+% \end{macrocode}
+
+default absolute value, norm and default evaluations:
+% \begin{macrocode}
+\[
+\abs*{\frac{ax+b}{cx+d}},\qquad
+\norm*{\frac{ax+b}{cx+d}},\qquad
+\eval*{\frac{ax+b}{cx+d}}_{x=0},\qquad
+\eval[s]*{\frac{ax+b}{cx+d}}_{x=0}^{x=\infty},\qquad
+\]
+% \end{macrocode}
+
+outer delimiter spacing:
+% \begin{macrocode}
+\begin{align*}
+&\square\brk0{x}\square,&&\square\brk1{A^k}\square,
+\\
+&\square\brk*{x}\square,&&\square\brk*{A^k}\square,
+\end{align*}
+% \end{macrocode}
+
+delimiter sizes in exponents:
+% \begin{macrocode}
+\[
+e^{\brk{ax+b}},\qquad
+e^{\brk!{ax+b}}
+\]
+% \end{macrocode}
+
+delimiter declaration:
+% \begin{macrocode}
+\DeclareMathDelimiterSet{\braket}[2]
+ {\selectdelim[l]<#1\selectdelim|#2\selectdelim[r]>}
+\[
+\braket!{\psi}{\psi}
+\]
+% \end{macrocode}
+
+delimiter usage:
+% \begin{macrocode}
+\[
+\delimpair<|>!{\psi}{\psi}
+\]
+% \end{macrocode}
+
+conditional set, alternative layouts:
+% \begin{macrocode}
+\[
+\delimpair\{{[m]|}\}!{2n}{n\in\mathbb{Z}},
+\qquad
+\delimpair\{{[b]|}\}!{2n}{n\in\mathbb{Z}},
+\qquad
+\delimpair\{{[p]|}\}!{2n}{n\in\mathbb{Z}},
+\qquad
+\delimpair\{|\}!{2n}{n\in\mathbb{Z}},
+\qquad
+\delimpair\{{[.];}\}!{2n}{n\in\mathbb{Z}},
+\]
+% \end{macrocode}
+
+delimiter definition:
+% \begin{macrocode}
+\newcommand{\comm}{\delimpair[{[.],}]}
+\[
+\comm!{\comm{A}{B}}{C}
++\comm!{\comm{B}{C}}{A}
++\comm!{\comm{C}{A}}{B}
+=0
+\]
+% \end{macrocode}
+
+alternative representation:
+% \begin{macrocode}
+\renewcommand{\comm}{\delimpair[{[.];}]}
+\[
+\comm!{\comm{A}{B}}{C}
++\comm!{\comm{B}{C}}{A}
++\comm!{\comm{C}{A}}{B}
+=0
+\]
+% \end{macrocode}
+
+% end of document body:
+% \begin{macrocode}
+\end{document}
+% \end{macrocode}
+%\iffalse
+%</sample>
+%\fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Implementation}
+%\iffalse
+%<*package>
+%\fi
+%
+% In this section we describe the package |delimset.sty|.
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Required Packages.}
+%
+% The package loads the packages \textsf{amsmath} and \textsf{keyval}
+% if not yet present.
+% \textsf{amsmath} is used for basic delimiter size functionality.
+% \textsf{keyval} is used for extended options processing.
+% \begin{macrocode}
+\RequirePackage{amsmath}
+\RequirePackage{keyval}
+% \end{macrocode}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Package Options.}
+%
+% The package has some boolean \textsf{keyval} options
+% which can be set to |true| or |false|.
+% \begin{macrocode}
+\newif\ifdlm@std\dlm@stdtrue
+\newif\ifdlm@ext\dlm@extfalse
+\newif\ifdlm@script\dlm@scripttrue
+
+\def\dlm@group{dlm@}
+\define@key{\dlm@group}{stddef}[true]{\csname dlm@std#1\endcsname}
+\define@key{\dlm@group}{extdef}[true]{\csname dlm@ext#1\endcsname}
+\define@key{\dlm@group}{scriptstyle}[true]{\csname dlm@script#1\endcsname}
+
+\DeclareOption*{\expandafter\setkeys\expandafter\dlm@group%
+ \expandafter{\CurrentOption}}
+\ProcessOptions
+% \end{macrocode}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Internal Definitions.}
+%
+% Overwrite the \textsf{amsmath} command |\bBigg@|
+% to select the size according to the present math style
+% (uses the \textsf{amsmath} definitions |\@mathmeasure| and |\big@size|).
+% This code is activated only if
+% the package option |scriptstyle| is set to |true|.
+%
+% \begin{macrocode}
+\ifdlm@script
+\def\bBigg@choice#1#2#3#4{%
+ {\@mathmeasure\z@{\nulldelimiterspace\z@}%
+ {\big@size#2\big@size#1\left#4\vcenter to#3\big@size{}\right.}%
+ \box\z@}}
+\def\bBigg@#1#2{{\mathchoice%
+ {\bBigg@choice{\displaystyle}{1}{#1}{#2}}%
+ {\bBigg@choice{\textstyle}{1}{#1}{#2}}%
+ {\bBigg@choice{\scriptstyle}{0.7}{#1}{#2}}%
+ {\bBigg@choice{\scriptscriptstyle}{0.5}{#1}{#2}}}}
+\fi
+% \end{macrocode}
+
+% Define size selectors for standard size (|dlm@norm|, etc.),
+% variable size (|dlm@var|, etc.) as well as punctuation marks (|\bigp|, etc.)
+% and binary operators (|\bigb|, etc.).
+%
+% \begin{macrocode}
+\newcommand{\dlm@norm}{\bBigg@{0.0}}
+\newcommand{\dlm@norml}{\mathopen\dlm@norm}
+\newcommand{\dlm@normr}{\mathclose\dlm@norm}
+\newcommand{\dlm@normm}{\mathrel\dlm@norm}
+\newcommand{\dlm@normp}{\mathpunct\dlm@norm}
+\newcommand{\dlm@normb}{\mathbin\dlm@norm}
+\newcommand{\dlm@var}[1]{\middle#1}
+\newcommand{\dlm@varl}[1]{\mathopen{}\mathclose\bgroup\left#1}
+\newcommand{\dlm@varr}[1]{\right#1\egroup}
+\newcommand{\dlm@varm}[1]{\mathrel{}\middle#1\mathrel{}}
+\newcommand{\dlm@varp}[1]{\middle#1\mathpunct{}}
+\newcommand{\dlm@varb}[1]{\mathbin{}\middle#1\mathbin{}}
+\newcommand{\bigp}{\mathpunct\big}
+\newcommand{\Bigp}{\mathpunct\Big}
+\newcommand{\biggp}{\mathpunct\bigg}
+\newcommand{\Biggp}{\mathpunct\Bigg}
+\newcommand{\bigb}{\mathbin\big}
+\newcommand{\Bigb}{\mathbin\Big}
+\newcommand{\biggb}{\mathbin\bigg}
+\newcommand{\Biggb}{\mathbin\Bigg}
+% \end{macrocode}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Optional Size Argument Processing.}
+%
+% Parse the optional argument following |\delim|\ldots\
+% commands to specify the size of delimiters.
+% If the next character in line begins a group (`|{|') it is assumed that
+% there is no optional argument.
+% Otherwise the selected size is written to |\dlm@arg|.
+% Unspecified or unknown sizes default to normal size.
+% Finally, execute the code passed as an explicit argument to |\dlm@parsesize|.
+%
+% \begin{macrocode}
+\newcommand{\dlm@parsesize}[1]{\@ifnextchar\bgroup%
+ {\dlm@parsesize@{#1}{0}}{\dlm@parsesize@{#1}}}
+\newcommand{\dlm@parsesize@}[2]{\def\dlm@arg{dlm@norm}%
+ \if0#2\def\dlm@arg{dlm@norm}\fi%
+ \if1#2\def\dlm@arg{big}\fi%
+ \if+#2\def\dlm@arg{big}\fi%
+ \if!#2\def\dlm@arg{big}\fi%
+ \if2#2\def\dlm@arg{Big}\fi%
+ \if3#2\def\dlm@arg{bigg}\fi%
+ \if4#2\def\dlm@arg{Bigg}\fi%
+ \if*#2\def\dlm@arg{dlm@var}\fi%
+ #1}
+% \end{macrocode}
+% Note that the delimited expression should be contained within a group
+% such that nested delimiters will not overwrite the outer size definition.
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Size Selection.}
+%
+% The command |\selectdelim| reproduces the delimiter in the second argument
+% using the math class given in the first argument
+% using the previously selected size stored in |\dlm@arg|.
+% It appends the class identifier to the command stored in |\dlm@arg|
+% and calls the latter with the delimiter as the argument.
+% If the class identifier is `|.|', just return the delimiter argument as is.
+% \begin{macrocode}
+\newcommand{\selectdelim}[2][]{\if.#1#2\else\csname\dlm@arg #1\endcsname#2\fi}
+% \end{macrocode}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Declaration of New Delimiter Commands.}
+%
+% Declares a new set of delimiters as the macro `|\|\emph{name}'.
+% This macro checks for an optional size argument and stores it in |\dlm@arg|.
+% It then passes on to a second macro `|\dlm@dcl@|\emph{name}',
+% which takes the actual code.
+% \begin{macrocode}
+\newcommand{\DeclareMathDelimiterSet}[1]{\expandafter\dlm@declare%
+ \csname dlm@dcl@\expandafter\@gobble\string#1\endcsname{#1}}
+\def\dlm@declare#1#2{\newcommand{#2}{\dlm@parsesize{#1}}\newcommand{#1}}
+% \end{macrocode}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Inline Delimiter Declarations.}
+%
+% Inline declaration for delimiters via |\delim...|.
+% The following code is similar to the one produced by
+% |\DeclareMathDelimiterSet|, but the delimiter arguments
+% are processed \emph{before} the optional size modifier.
+%
+% |\delim| is used for a single delimited expression.
+% \begin{macrocode}
+\newcommand{\delim}[2]
+ {\dlm@parsesize{\dlm@dcl@delim{#1}{#2}}}
+\newcommand{\dlm@dcl@delim}[3]
+ {\selectdelim[l]#1{#3}\selectdelim[r]#2}
+% \end{macrocode}
+
+% |\delimpair| is used for two delimited expressions separated
+% by an intermediate delimiter.
+% \begin{macrocode}
+\newcommand{\delimpair}[3]
+ {\dlm@parsesize{\dlm@dcl@delimpair{#1}{#2}{#3}}}
+\newcommand{\dlm@dcl@delimpair}[5]
+ {\selectdelim[l]#1{#4}\selectdelim#2{#5}\selectdelim[r]#3}
+% \end{macrocode}
+
+% |\delimtriple| is used for three delimited expressions separated
+% by two intermediate delimiters.
+% \begin{macrocode}
+\newcommand{\delimtriple}[4]
+ {\dlm@parsesize{\dlm@dcl@delimtriple{#1}{#2}{#3}{#4}}}
+\newcommand{\dlm@dcl@delimtriple}[7]
+ {\selectdelim[l]#1{#5}\selectdelim#2{#6}\selectdelim#3{#7}\selectdelim[r]#4}
+% \end{macrocode}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Standard Definitions.}
+%
+% Define some common delimiters (by |providecommand| so as not to
+% overwrite previously existing commands).
+% This code is activated only if the package option |stddef| is set to |true|.
+% \begin{macrocode}
+\ifdlm@std
+\providecommand{\brk}[1][r]{\begingroup\def\dlm@use{\delim()}%
+ \if r#1 \def\dlm@use{\delim()}\fi%
+ \if s#1 \def\dlm@use{\delim[]}\fi%
+ \if c#1 \def\dlm@use{\delim\{\}}\fi%
+ \if a#1 \def\dlm@use{\delim<>}\fi%
+ \expandafter\endgroup\dlm@use}
+\providecommand{\eval}[1][v]{\begingroup\def\dlm@use{\delim.\rvert}%
+ \if v#1 \def\dlm@use{\delim.\rvert}\fi%
+ \if s#1 \def\dlm@use{\delim[]}\fi%
+ \expandafter\endgroup\dlm@use}
+\providecommand{\abs}{\delim\lvert\rvert}
+\providecommand{\norm}{\delim\lVert\rVert}
+\fi
+% \end{macrocode}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \paragraph{Extended Definitions.}
+%
+% Define some extended delimiters.
+% This code is activated only if the package option |extdef| is set to |true|.
+% \begin{macrocode}
+\ifdlm@ext
+\providecommand{\pair}{\delimpair({[.],})}
+\providecommand{\set}{\delim\{\}}
+\providecommand{\setcond}{\delimpair\{|\}}
+\providecommand{\intv}[1][c]{\begingroup\def\dlm@use{\delimpair[{[.],}]}%
+ \if c#1 \def\dlm@use{\delimpair[{[.],}]}\fi%
+ \if l#1 \def\dlm@use{\delimpair]{[.],}]}\fi%
+ \if r#1 \def\dlm@use{\delimpair[{[.],}[}\fi%
+ \if o#1 \def\dlm@use{\delimpair]{[.],}[}\fi%
+ \expandafter\endgroup\dlm@use}
+\providecommand{\avg}{\delim<>}
+\providecommand{\corr}{\delim<>}
+\providecommand{\comm}{\delimpair[{[.],}]}
+\providecommand{\acomm}{\delimpair\{{[.],}\}}
+\providecommand{\bra}{\delim<|}
+\providecommand{\ket}{\delim|>}
+\providecommand{\braket}{\delimpair<|>}
+\fi
+% \end{macrocode}
+
+%\iffalse
+%</package>
+%\fi
+%
+\endinput
+%
+%% \CheckSum{3381}
diff --git a/Master/texmf-dist/source/latex/delimset/delimset.ins b/Master/texmf-dist/source/latex/delimset/delimset.ins
new file mode 100644
index 00000000000..bcecd6ef17f
--- /dev/null
+++ b/Master/texmf-dist/source/latex/delimset/delimset.ins
@@ -0,0 +1,40 @@
+\def\batchfile{delimset.ins}
+\input docstrip.tex
+
+\keepsilent
+% delimset.ins Copyright (C) 2016 Niklas Beisert
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+\preamble
+
+Copyright (C) 2016 Niklas Beisert
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+\endpreamble
+
+% the style and sample files
+\generate{\askforoverwritefalse
+\file{delimset.sty}{\from{delimset.dtx}{package}}
+\file{dlmssamp.tex}{\from{delimset.dtx}{sample}}
+\nopreamble\nopostamble
+}
+
+\Msg{***********************************************************************}
+\Msg{* Done. Please copy the file delimset.sty to an appropriate directory *}
+\Msg{* of your LaTeX distribution, e.g. texmf-root/tex/latex/delimset. *}
+\Msg{***********************************************************************}
+\endinput
diff --git a/Master/texmf-dist/tex/latex/delimset/delimset.sty b/Master/texmf-dist/tex/latex/delimset/delimset.sty
new file mode 100644
index 00000000000..49beebb57f9
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/delimset/delimset.sty
@@ -0,0 +1,141 @@
+%%
+%% This is file `delimset.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% delimset.dtx (with options: `package')
+%%
+%% Copyright (C) 2016 Niklas Beisert
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+\ProvidesPackage{delimset}[2016/11/01 v1.0 convenient size control for delimiter sets]
+
+\RequirePackage{amsmath}
+\RequirePackage{keyval}
+
+\newif\ifdlm@std\dlm@stdtrue
+\newif\ifdlm@ext\dlm@extfalse
+\newif\ifdlm@script\dlm@scripttrue
+
+\def\dlm@group{dlm@}
+\define@key{\dlm@group}{stddef}[true]{\csname dlm@std#1\endcsname}
+\define@key{\dlm@group}{extdef}[true]{\csname dlm@ext#1\endcsname}
+\define@key{\dlm@group}{scriptstyle}[true]{\csname dlm@script#1\endcsname}
+
+\DeclareOption*{\expandafter\setkeys\expandafter\dlm@group%
+ \expandafter{\CurrentOption}}
+\ProcessOptions
+
+\ifdlm@script
+\def\bBigg@choice#1#2#3#4{%
+ {\@mathmeasure\z@{\nulldelimiterspace\z@}%
+ {\big@size#2\big@size#1\left#4\vcenter to#3\big@size{}\right.}%
+ \box\z@}}
+\def\bBigg@#1#2{{\mathchoice%
+ {\bBigg@choice{\displaystyle}{1}{#1}{#2}}%
+ {\bBigg@choice{\textstyle}{1}{#1}{#2}}%
+ {\bBigg@choice{\scriptstyle}{0.7}{#1}{#2}}%
+ {\bBigg@choice{\scriptscriptstyle}{0.5}{#1}{#2}}}}
+\fi
+
+\newcommand{\dlm@norm}{\bBigg@{0.0}}
+\newcommand{\dlm@norml}{\mathopen\dlm@norm}
+\newcommand{\dlm@normr}{\mathclose\dlm@norm}
+\newcommand{\dlm@normm}{\mathrel\dlm@norm}
+\newcommand{\dlm@normp}{\mathpunct\dlm@norm}
+\newcommand{\dlm@normb}{\mathbin\dlm@norm}
+\newcommand{\dlm@var}[1]{\middle#1}
+\newcommand{\dlm@varl}[1]{\mathopen{}\mathclose\bgroup\left#1}
+\newcommand{\dlm@varr}[1]{\right#1\egroup}
+\newcommand{\dlm@varm}[1]{\mathrel{}\middle#1\mathrel{}}
+\newcommand{\dlm@varp}[1]{\middle#1\mathpunct{}}
+\newcommand{\dlm@varb}[1]{\mathbin{}\middle#1\mathbin{}}
+\newcommand{\bigp}{\mathpunct\big}
+\newcommand{\Bigp}{\mathpunct\Big}
+\newcommand{\biggp}{\mathpunct\bigg}
+\newcommand{\Biggp}{\mathpunct\Bigg}
+\newcommand{\bigb}{\mathbin\big}
+\newcommand{\Bigb}{\mathbin\Big}
+\newcommand{\biggb}{\mathbin\bigg}
+\newcommand{\Biggb}{\mathbin\Bigg}
+
+\newcommand{\dlm@parsesize}[1]{\@ifnextchar\bgroup%
+ {\dlm@parsesize@{#1}{0}}{\dlm@parsesize@{#1}}}
+\newcommand{\dlm@parsesize@}[2]{\def\dlm@arg{dlm@norm}%
+ \if0#2\def\dlm@arg{dlm@norm}\fi%
+ \if1#2\def\dlm@arg{big}\fi%
+ \if+#2\def\dlm@arg{big}\fi%
+ \if!#2\def\dlm@arg{big}\fi%
+ \if2#2\def\dlm@arg{Big}\fi%
+ \if3#2\def\dlm@arg{bigg}\fi%
+ \if4#2\def\dlm@arg{Bigg}\fi%
+ \if*#2\def\dlm@arg{dlm@var}\fi%
+ #1}
+
+\newcommand{\selectdelim}[2][]{\if.#1#2\else\csname\dlm@arg #1\endcsname#2\fi}
+
+\newcommand{\DeclareMathDelimiterSet}[1]{\expandafter\dlm@declare%
+ \csname dlm@dcl@\expandafter\@gobble\string#1\endcsname{#1}}
+\def\dlm@declare#1#2{\newcommand{#2}{\dlm@parsesize{#1}}\newcommand{#1}}
+
+\newcommand{\delim}[2]
+ {\dlm@parsesize{\dlm@dcl@delim{#1}{#2}}}
+\newcommand{\dlm@dcl@delim}[3]
+ {\selectdelim[l]#1{#3}\selectdelim[r]#2}
+
+\newcommand{\delimpair}[3]
+ {\dlm@parsesize{\dlm@dcl@delimpair{#1}{#2}{#3}}}
+\newcommand{\dlm@dcl@delimpair}[5]
+ {\selectdelim[l]#1{#4}\selectdelim#2{#5}\selectdelim[r]#3}
+
+\newcommand{\delimtriple}[4]
+ {\dlm@parsesize{\dlm@dcl@delimtriple{#1}{#2}{#3}{#4}}}
+\newcommand{\dlm@dcl@delimtriple}[7]
+ {\selectdelim[l]#1{#5}\selectdelim#2{#6}\selectdelim#3{#7}\selectdelim[r]#4}
+
+\ifdlm@std
+\providecommand{\brk}[1][r]{\begingroup\def\dlm@use{\delim()}%
+ \if r#1 \def\dlm@use{\delim()}\fi%
+ \if s#1 \def\dlm@use{\delim[]}\fi%
+ \if c#1 \def\dlm@use{\delim\{\}}\fi%
+ \if a#1 \def\dlm@use{\delim<>}\fi%
+ \expandafter\endgroup\dlm@use}
+\providecommand{\eval}[1][v]{\begingroup\def\dlm@use{\delim.\rvert}%
+ \if v#1 \def\dlm@use{\delim.\rvert}\fi%
+ \if s#1 \def\dlm@use{\delim[]}\fi%
+ \expandafter\endgroup\dlm@use}
+\providecommand{\abs}{\delim\lvert\rvert}
+\providecommand{\norm}{\delim\lVert\rVert}
+\fi
+
+\ifdlm@ext
+\providecommand{\pair}{\delimpair({[.],})}
+\providecommand{\set}{\delim\{\}}
+\providecommand{\setcond}{\delimpair\{|\}}
+\providecommand{\intv}[1][c]{\begingroup\def\dlm@use{\delimpair[{[.],}]}%
+ \if c#1 \def\dlm@use{\delimpair[{[.],}]}\fi%
+ \if l#1 \def\dlm@use{\delimpair]{[.],}]}\fi%
+ \if r#1 \def\dlm@use{\delimpair[{[.],}[}\fi%
+ \if o#1 \def\dlm@use{\delimpair]{[.],}[}\fi%
+ \expandafter\endgroup\dlm@use}
+\providecommand{\avg}{\delim<>}
+\providecommand{\corr}{\delim<>}
+\providecommand{\comm}{\delimpair[{[.],}]}
+\providecommand{\acomm}{\delimpair\{{[.],}\}}
+\providecommand{\bra}{\delim<|}
+\providecommand{\ket}{\delim|>}
+\providecommand{\braket}{\delimpair<|>}
+\fi
+
+\endinput
+%%
+%% End of file `delimset.sty'.
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index f23c60cdade..944d180109d 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -201,7 +201,7 @@ my @TLP_working = qw(
datetime2-usorbian datetime2-welsh
dblfloatfix dccpaper dcpic de-macro decimal decorule dehyph-exptl
dejavu
- delim delimseasy delimtxt denisbdoc dhua
+ delim delimseasy delimset delimtxt denisbdoc dhua
diadia diagbox diagmac2 dialogl diagnose dice dichokey
dickimaw dictsym diffcoeff digiconfigs din1505
dinat dinbrief dingbat directory dirtree dirtytalk disser dithesis
diff --git a/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc b/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc
index fedf531065d..aaa596a8810 100644
--- a/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc
@@ -46,6 +46,7 @@ depend concrete
depend conteq
depend cryptocode
depend delim
+depend delimset
depend delimseasy
depend diffcoeff
depend digiconfigs
diff --git a/Master/tlpkg/tlpsrc/delimset.tlpsrc b/Master/tlpkg/tlpsrc/delimset.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/delimset.tlpsrc