%%% perfectcut.sty documentation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% %%% Author: Guillaume Munch-Maccagnoni %%% http://www.pps.univ-paris-diderot.fr/~munch/ %%% %%% 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. Refer to the README file. %%% \documentclass[12pt,a4paper,british]{scrartcl} \usepackage[T1]{fontenc} \usepackage[latin9]{inputenc} \setcounter{secnumdepth}{1} \usepackage{babel} \usepackage{booktabs} \usepackage{calc} \usepackage{amsmath} \usepackage[unicode=true]{hyperref} \makeatletter \usepackage{perfectcut} %% NewTXtext with a bugfix \let\orig@makefnmark=\@makefnmark \usepackage{newtxtext} \let\@makefnmark=\orig@makefnmark %%End of bugfix \usepackage[T1]{fontenc} \usepackage{newtxmath} \renewcommand*\ttdefault{txtt} \usepackage[oldstyle,lining,scale=0.97]{sourcesanspro} \usepackage[protrusion=true,expansion=true,tracking=false,kerning=true,spacing=true]{microtype} \makeatother \begin{document} \title{\texttt{perfectcut.sty} documentation} \author{Guillaume Munch-Maccagnoni% \thanks{\protect\href{http://www.pps.univ-paris-diderot.fr/~munch/}{http://www.pps.univ-paris-diderot.fr/$\sim$munch/}% }} \date{January 31st 2014} \maketitle \section{Use} This package supplies the following commands: \begin{center} \begin{tabular}{ll} \toprule Command & Produces\tabularnewline \midrule \texttt{\textbackslash{}perfectcut\{\#1\}\{\#2\}} & $\perfectcut{\#1}{\#2}$\tabularnewline \texttt{\textbackslash{}perfectbra\{\#1\}} & $\perfectbra{\#1}$\tabularnewline \texttt{\textbackslash{}perfectket\{\#1\}} & $\perfectket{\#1}$\tabularnewline \bottomrule \end{tabular} \end{center} The effect of the commands is to determine the size of the brackets depending on the number of nested \texttt{\textbackslash{}perfectcut} (regardless of the contents). It is intended for use: \begin{itemize} \item In proof theory, for term notations of sequent calculus, \item In computer science, for the modeling of abstract machines. \end{itemize} It could also be adapted for any visually similar effects as an alternative to \texttt{\textbackslash{}left}, \texttt{\textbackslash{}right} and \texttt{\textbackslash{}middle}. (You can contact the author.) If the package causes errors see the option \texttt{nomathstyle} below. \section{Example} \def\mt{\tilde{\mu}} \noindent \texttt{\footnotesize{The following states the commutativity of a strong monad:}}~\\ \texttt{\footnotesize{\textbackslash{}def\textbackslash{}mt\{\textbackslash{}tilde\{\textbackslash{}mu\}\}}}~\\ \texttt{\footnotesize{\textbackslash{}{[}}}~\\ \texttt{\footnotesize{\textbackslash{}cut t\{\textbackslash{}mt x.\textbackslash{}cut u\{\textbackslash{}mt y.\textbackslash{}cut ve\}\}}}~\\ \texttt{\footnotesize{=\textbackslash{}cut u\{\textbackslash{}mt y.\textbackslash{}cut t\{\textbackslash{}mt x.\textbackslash{}cut ve\}\}}}~\\ \texttt{\footnotesize{\textbackslash{}{]}}}~\\ \texttt{\footnotesize{The following states the idempotency of an adjunction: }}~\\ \texttt{\footnotesize{\textbackslash{}{[}}}~\\ \texttt{\footnotesize{\textbackslash{}cut t\{\textbackslash{}mt x.\textbackslash{}cut\{\textbackslash{}mu\textbackslash{}alpha.\textbackslash{}cut ue\}\{e'\}\}}}~\\ \texttt{\footnotesize{=\textbackslash{}cut\{\textbackslash{}mu\textbackslash{}alpha.\textbackslash{}cut t\{\textbackslash{}mt x.\textbackslash{}cut ue\}\}\{e'\}}}~\\ \texttt{\footnotesize{\textbackslash{}{]}}}{\footnotesize \par} \subsection{Using \texttt{perfectcut.sty}} \noindent \texttt{\footnotesize{\textbackslash{}usepackage\{perfectcut\}}}~\\ \texttt{\footnotesize{\textbackslash{}let\textbackslash{}cut\textbackslash{}perfectcut}}{\footnotesize \par} \begin{center} \framebox{\begin{minipage}[t]{0.8\columnwidth}% \let\cut\perfectcut The following states the commutativity of a strong monad: \[ \cut t{\mt x.\cut u{\mt y.\cut ve}}=\cut u{\mt y.\cut t{\mt x.\cut ve}} \] The following states the idempotency of an adjunction: \[ \cut t{\mt x.\cut{\mu\alpha.\cut ue}{e'}}=\cut{\mu\alpha.\cut t{\mt x.\cut ue}}{e'} \] % \end{minipage}} \end{center} \subsection{Using \texttt{\textbackslash{}left}, \texttt{\textbackslash{}middle} and \texttt{\textbackslash{}right} instead} \noindent \texttt{\footnotesize{\textbackslash{}renewcommand\{\textbackslash{}cut\}{[}2{]}\{\textbackslash{}left\textbackslash{}langle \#1\textbackslash{}middle|\textbackslash{}mkern-2mu\textbackslash{}middle|\#2\textbackslash{}right\textbackslash{}rangle\}}}{\footnotesize \par} \begin{center} \framebox{\begin{minipage}[t]{0.8\columnwidth}% \newcommand{\cut}[2]{\left\langle #1\middle|\mkern-2mu\middle|#2\right\rangle} The following states the commutativity of a strong monad: \[ \cut t{\mt x.\cut u{\mt y.\cut ve}}=\cut u{\mt y.\cut t{\mt x.\cut ve}} \] The following states the idempotency of an adjunction: \[ \cut t{\mt x.\cut{\mu\alpha.\cut ue}{e'}}=\cut{\mu\alpha.\cut t{\mt x.\cut ue}}{e'} \] % \end{minipage}} \end{center} \section{Options} \subsection{Option \texttt{nomathstyle}} The use of \texttt{\textbackslash{}currentmathstyle} from the package \texttt{mathstyle }prevents the exponential blowup in recursions that would occur if we used \texttt{\textbackslash{}mathpalette} instead. To record the \texttt{\textbackslash{}currentmath\-style}, \texttt{mathstyle} redefines many primitives and is therefore a source of incompatibilities. If you run into such issues, please refer to the \texttt{mathstyle} manual. If you want to disable the loading of \texttt{mathstyle}, use the \texttt{nomathstyle} option. With the \texttt{nomathstyle} option, the style is set to \texttt{\textbackslash{}cutstyle}, which you must define by hand to be \texttt{\textbackslash{}displaystyle}, \texttt{\textbackslash{}textstyle }(default), \texttt{\textbackslash{}scriptstyle}, \texttt{\textbackslash{}scriptscriptstyle}. This means that cuts in subscripts and superscripts do not have the proper size unless \texttt{\textbackslash{}cutstyle }is redefined. \subsection{Option \texttt{realVert}} With the option \texttt{realVert}, the double bars are obtained with the \texttt{\textbackslash{}Vert} command. Without it, two \texttt{\textbackslash{}vert} symbols are used and their spacing is controlled with \texttt{\textbackslash{}cutinterbarskip}. In addition, without \texttt{realVert}, a penalty is added for better line breaks. \subsection{Customisation} The following mu-skips can be redefined in your preamble: \begin{center} \begin{tabular}{ll} \toprule Command & Defines\tabularnewline \midrule \texttt{\textbackslash{}cutbarskip=5.0mu plus 8mu minus 2.0mu} & spacing around bars\tabularnewline \texttt{\textbackslash{}cutangleskip=0.0mu plus 8mu minus 1.0mu} & spacing around angles (inside)\tabularnewline \texttt{\textbackslash{}cutangleouterskip=0.0mu plus 8mu minus 0mu} & spacing around angles (outside)\tabularnewline \texttt{\textbackslash{}cutinterbarskip=0.8mu plus 0mu minus 0mu} & spacing between bars\tabularnewline \bottomrule \end{tabular} \end{center} \noindent (1 mu equals $\tfrac{1}{18}$-th of an em in the current math font.) \section{Reimplementation of fixed-size delimiters} In addition, I provide the following corrections and generalisations of \texttt{\textbackslash{}big},\texttt{\textbackslash{}bigg}, etc. Why not using the latter? Because both the plain \TeX{} and the \texttt{amsmath} versions are incorrect when changing math font, font size, math style or \texttt{\textbackslash{}delimitershortfall}. Moreover, Opentype math fonts in particular offer more sizes. We want a robust solution. \begin{center} \begin{tabular}{lll} \toprule Command & Example & \tabularnewline \midrule \multicolumn{3}{l}{\emph{\#1-th size of delimiter \#2}}\tabularnewline \texttt{\textbackslash{}nthleft\{\#1\}\{\#2\} } & \texttt{\textbackslash{}nthleft\{2\}(} & $\nthleft{2}($\tabularnewline\addlinespace[0.1em] \texttt{\textbackslash{}nthmiddle\{\#1\}\{\#2\}} & \texttt{\textbackslash{}nthmiddle\{2\}\textbackslash{}Vert} & $\nthmiddle{2}\Vert$\tabularnewline\addlinespace[0.1em] \texttt{\textbackslash{}nthright\{\#1\}\{\#2\}} & \texttt{\textbackslash{}nthright\{2\})} & $\nthright{2})$\tabularnewline\addlinespace[0.1em] \multicolumn{1}{l}{\emph{delimiter \#2 of length at least \#1}} & & \tabularnewline\addlinespace[0.1em] \texttt{\textbackslash{}lenleft\{\#1\}\{\#2\}} & \texttt{\textbackslash{}lenleft\{3.2mm\}{[}} & $\lenleft{3mm}[$\tabularnewline\addlinespace[0.1em] \texttt{\textbackslash{}lenmiddle\{\#1\}\{\#2\}} & \texttt{\textbackslash{}lenmiddle\{3.2mm\}|} & $\lenmiddle{3mm}|$\tabularnewline\addlinespace[0.1em] \texttt{\textbackslash{}lenright\{\#1\}\{\#2\}} & \texttt{\textbackslash{}lenright\{3.2mm\}{]}} & $\lenright{3mm}]$\tabularnewline\addlinespace[0.1em] \multicolumn{3}{l}{\emph{delimiter \#2 of length exactly \#1 obtained by scaling the above one}}\tabularnewline\addlinespace[0.1em] \texttt{\textbackslash{}reallenleft\{\#1\}\{\#2\}} & \texttt{\textbackslash{}reallenleft\{3.2mm\}{[}} & $\reallenleft{3mm}[$\tabularnewline\addlinespace[0.1em] \texttt{\textbackslash{}reallenmiddle\{\#1\}\{\#2\}} & \texttt{\textbackslash{}reallenmiddle\{3.2mm\}|} & $\reallenmiddle{3mm}|$\tabularnewline\addlinespace[0.1em] \texttt{\textbackslash{}reallenright\{\#1\}\{\#2\}} & \texttt{\textbackslash{}reallenright\{3.2mm\}{]}} & $\reallenright{3mm}]$\tabularnewline \bottomrule \end{tabular} \end{center} \subsection{Exemple with \texttt{\textbackslash{}nthleft}} \texttt{\footnotesize{\textbackslash{}nthleft0(\textbackslash{}nthleft1(\textbackslash{}nthleft2(\textbackslash{}nthleft3(\textbackslash{}nthleft4(\textbackslash{}nthleft5(}}{\footnotesize \par} \[ \nthleft0(\nthleft1(\nthleft2(\nthleft3(\nthleft4(\nthleft5( \] \subsection{Example with \texttt{\textbackslash{}big},\texttt{\textbackslash{}Big},\texttt{\textbackslash{}bigg},\texttt{\textbackslash{}Bigg}} \texttt{\footnotesize{(\textbackslash{}big(\textbackslash{}Big(\textbackslash{}bigg(\textbackslash{}Bigg(}}{\footnotesize \par} \[ (\big(\Big(\bigg(\Bigg( \] Note: \texttt{\textbackslash{}big}\texttt{\footnotesize{ }}starts at at size 2 in some fonts. \section{License} 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. Refer to the \texttt{README} file. \end{document}