Hi,
I find myself writing a lot of probability expressions where I want
the delimiters to scale automatically, and | (conditional sign) to
scale automatically, and the spacing around | to be correct. In LaTeX,
I used to use braket package to do this. Since moving to ConTeXt, I
was doing this by hand, but wring a lot of
\EXP\left\{ ... \,\middle\, ...\right\} and \Pr( ... \mid ...)
soon became a pain to read and write. So (thanks to Taco's first hand
knowledge of why TeX is Turing complete), I have written the following
macros:
\unprotect
\definesystemvariable {ms} % Math Set
\def\mathsetmiddle{\,\middle\mathsetparameter\c!middle\,}
\let\currentmathset\empty
\def\mathsetparameter#1%
{\executeifdefined{\??ms\currentmathset#1}{\executeifdefined{\??ms#1}\empty}}
\def\definemathset
{\dodoubleargument\dodefinemathset}
\def\dodefinemathset[#1][#2]%
{\getparameters[\??ms#1]
[\c!text=,\c!left={\{},\c!right={\}},\c!middle=\vert,#2]
\setvalue{#1}{\dododefinemathset[#1]}}
\def\dododefinemathset[#1]#2#%
{\begingroup
\def\currentmathset{#1}
\mathcode`\|32768
\let|\mathsetmiddle
\def\mathsetarguments{#2}
\dodododefinemathset}
\def\dodododefinemathset#1%
{\doifsomething{\mathsetparameter\c!text}
{\mathop{\mathsetparameter\c!text\mathsetarguments}}
\left\mathsetparameter\c!left#1\right\mathsetparameter\c!right
\endgroup}
\protect
which allows me to do
\definemathset[EXP][text={\mfunction{E}}]
\definemathset[PR][text={\mfunction{Pr}},left=(,right=)]
\starttext
Correct spacing around the vertical bar.
\startformula
\EXP{f(X) | Y} = \sum_{x} f(x) \PR{x|Y}
\stopformula
Correct scaling of delimiters (as correct as left and right give you)
\startformula
\EXP{\sum_z f(X,z) | Y} = \sum_{x,z} f(x,z) \PR{x,z|Y}
\stopformula
Correct handling of sub|/|super scripts
\startformula
\EXP_X{f(X) | Y} = \sum_{x} f(x) \PR{x|Y}
\stopformula
Is there anyone else interested in this kind of stuff? I have not
ported all the features of braket.sty, but only those that I needed.
Other should not be too difficult to port.
Hans and Taco: Does it make sense to add these to the core? If so, I
can polish the macros a bit (add a \setupmathsets command).
Aditya