diff options
-rw-r--r-- | Master/texmf-dist/doc/latex/perfectcut/README | 47 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/perfectcut/perfectcut.pdf | bin | 0 -> 97135 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/perfectcut/perfectcut.tex | 255 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/perfectcut/perfectcut.sty | 404 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 2 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/perfectcut.tlpsrc | 0 |
7 files changed, 708 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/perfectcut/README b/Master/texmf-dist/doc/latex/perfectcut/README new file mode 100644 index 00000000000..26e1f502afd --- /dev/null +++ b/Master/texmf-dist/doc/latex/perfectcut/README @@ -0,0 +1,47 @@ +perfectcut.sty + +This package defines the command \perfectcut#1#2 which displays a +bracket <#1||#2>. Its effect is to determine the size of the bracket +depending on the number of nested \perfectcut (regardless of the +contents). It is intended for use: +- In proof theory, for term notations of sequent calculus, +- In computer science, for the modeling of abstract machines. + +This package also offers a reimplementation of \big, \bigg, etc. into +arbitrary-size variants. + + +Release notes: + + 1.9 02/14: added \perfectcut,\perfectbra,\perfectket; fixed bug with graphicx + not being included; publication on CTAN + 1.8 01/14: added documentation (no new feature) + 1.7 11/13: added \cutangleouterskip + 1.6 10/13: new commands \cutbraprimitive and \cutketprimitive + 1.5 09/13: possible to disable mathstyle (option nomathstyle, see + the warning below) + 1.4 08/13: possible to choose between \vert\vert and \Vert (option realVert) + (\cutinterbarskip is used only with the former) + 1.3 08/13: fixes the alignment of angles with the math axis + 1.2 06/13: first public release + + +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. +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. + +The work consists in the files "perfectcut.sty", "perfectcut.tex" and +the derived files. + +This work has the LPPL maintenance status `maintained'. +The Current Maintainer of this work is Guillaume Munch-Maccagnoni. + + diff --git a/Master/texmf-dist/doc/latex/perfectcut/perfectcut.pdf b/Master/texmf-dist/doc/latex/perfectcut/perfectcut.pdf Binary files differnew file mode 100644 index 00000000000..ce9750140b9 --- /dev/null +++ b/Master/texmf-dist/doc/latex/perfectcut/perfectcut.pdf diff --git a/Master/texmf-dist/doc/latex/perfectcut/perfectcut.tex b/Master/texmf-dist/doc/latex/perfectcut/perfectcut.tex new file mode 100644 index 00000000000..7744bd007ed --- /dev/null +++ b/Master/texmf-dist/doc/latex/perfectcut/perfectcut.tex @@ -0,0 +1,255 @@ +%%% 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} diff --git a/Master/texmf-dist/tex/latex/perfectcut/perfectcut.sty b/Master/texmf-dist/tex/latex/perfectcut/perfectcut.sty new file mode 100644 index 00000000000..036750b09fd --- /dev/null +++ b/Master/texmf-dist/tex/latex/perfectcut/perfectcut.sty @@ -0,0 +1,404 @@ +%%% perfectcut.sty +%%%%%%%%%%%%%%%%%%% +%%% +%%% 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. +%%% +%%% +\ProvidesPackage{perfectcut}[02/02/2014 Perfect Cut v1.9] +%%% Option processing +\newif\ifcut@mathstyle@ +\cut@mathstyle@true +\newif\ifcut@realVert@ +\cut@realVert@false +\DeclareOption{nomathstyle}{\cut@mathstyle@false} +\let\cutstyle\textstyle +\DeclareOption{realVert}{\cut@realVert@true} +\ProcessOptions* +%%% End option processing +\RequirePackage{amsmath} +\RequirePackage{graphicx} +\RequirePackage{calc} +\newmuskip\cutangleskip +\newmuskip\cutbarskip +\newmuskip\cutinterbarskip +\newmuskip\cutangleouterskip +\newif\ifcutdebug +%%% +\newcommand{\cutprimitive}[2]{\cut@{#1}{#2}} +\newcommand{\cutbraprimitive}[1]{\cut@bra{#1}} +\newcommand{\cutketprimitive}[1]{\cut@ket{#1}} +\let\perfectcut\cutprimitive +\let\perfectbra\cutbraprimitive +\let\perfectket\cutketprimitive +%%% The following variables can be redefined in your preamble +\cutbarskip=5.0mu plus 8.0mu minus 2.0mu +\cutangleskip=0.0mu plus 8mu minus 1.0mu +\cutangleouterskip=0.0mu plus 8mu minus 0.0mu +\cutinterbarskip=0.8mu plus 0mu minus 0mu +\cutdebugfalse%print the size after each \rangle? +%%% +%%%\nthleft{4}\langle ==> fourth size of \langle; begins at 0 +\newcommand{\nthleft}[2]{\cut@nthldelim{#1}{#2}} +%%%same for right and middle +\newcommand{\nthright}[2]{\cut@nthrdelim{#1}{#2}} +\newcommand{\nthmiddle}[2]{\cut@nthmdelim{#1}{#2}} +%%%\lenleft{3mm}\langle ===> \langle of size at least 3mm +%%%in math mode it is preferable to use math units such as 10mu,... +%%%however only regular units are implemented now. +\newcommand{\lenleft}[2]{\cut@lengthldelim{#1}#2} +%%%same for right and middle +\newcommand{\lenright}[2]{\cut@lengthrdelim{#1}#2} +\newcommand{\lenmiddle}[2]{\cut@lengthmdelim{#1}#2} +%%%\reallenleft{3mm}\langle ===> \langle of size 3mm by resizing the +%%%closest glyph +\newcommand{\reallenleft}[2]{\cut@reallengthldelim{#1}{#2}} +%%%same for right and middle +\newcommand{\reallenright}[2]{\cut@reallengthrdelim{#1}{#2}} +\newcommand{\reallenmiddle}[2]{\cut@reallengthmdelim{#1}{#2}} + +% setting up mathstyle +\ifcut@mathstyle@ + \RequirePackage{mathstyle} + \def\currentcutstyle{\currentmathstyle} +\else + \def\currentcutstyle{\cutstyle} +\fi + +%setting up realVert +\ifcut@realVert@ + \def\cut@bar{\cut@Vert} +\else + \def\cut@bar{\cut@vert} +\fi + +\newcommand{\cut@setshortfall}[1]{% + \skip0=\delimitershortfall% + \global\delimitershortfall=-0.1pt%that's the trick to get perfect growth + \count0=\delimiterfactor% + \global\delimiterfactor=901\relax% + \hbox{$\m@th\currentcutstyle#1$}% + \global\delimitershortfall=\skip0% + \global\delimiterfactor=\count0% +} + +\newcommand{\cut@nextrdelim}[2]{% + \left.\hspace{-\nulldelimiterspace}\vphantom{#2}\right#1% +} +\newcommand{\cut@nextldelim}[2]{% + \left#1\vphantom{#2}\hspace{-\nulldelimiterspace}\right.% +} +\newcommand{\cut@nextmdelim}[2]{% + \left.\hspace{-\nulldelimiterspace}\middle#1\vphantom{#2}\hspace{-\nulldelimiterspace}\right.% +} + +\newcommand{\cut@lengthldelim}[2]{\cut@setshortfall{\cut@nextldelim#2{\rule[-0.101pt]{0pt}{#1}}}} +\newcommand{\cut@lengthrdelim}[2]{\cut@setshortfall{\cut@nextrdelim#2{\rule[-0.101pt]{0pt}{#1}}}} +\newcommand{\cut@lengthmdelim}[2]{\cut@setshortfall{\cut@nextmdelim#2{\rule[-0.101pt]{0pt}{#1}}}} +\newcommand{\cut@reallengthldelim}[2]{\cut@resizetoheight{#1}{\cut@lengthldelim{#1}{#2}}} +\newcommand{\cut@reallengthrdelim}[2]{\cut@resizetoheight{#1}{\cut@lengthrdelim{#1}{#2}}} +\newcommand{\cut@reallengthmdelim}[2]{\cut@resizetoheight{#1}{\cut@lengthmdelim{#1}{#2}}} + +%\newcommand{\cut@nextrangle}[1]{% +% \left.\hspace{-\nulldelimiterspace}\vphantom{#1}\right\rangle% +%} +\newcommand{\cut@nextrangle}[1]{\cut@nextrdelim{\rangle}{#1}} + +%\newcommand{\cut@nextlangle}[1]{% +% \left\langle\vphantom{#1}\hspace{-\nulldelimiterspace}\right.% +%} +\newcommand{\cut@nextlangle}[1]{\cut@nextldelim{\langle}{#1}} + +\newcommand{\cut@iter}[2]{% + \ifcase#1% + #2{\cdot} % 0 = smallest. This dot is here to prevent a + % bug regarding vertical positioning. + \else% + \count0=#1% + \advance\count0 -1\relax% + \expandafter#2{\expandafter\cut@iter{\the\count0}#2}% + \fi% +} + +\newcommand{\cut@primitive}[2]{% + %resetting shortfall + \cut@setshortfall{\cut@iter#2#1}% +} + +%%%\cut@nthdelim{n}{delim}{f} +\newcommand{\cut@nthdelim}[3]{ + \def\cut@tempnextdelim{#3{#2}}% + \cut@primitive\cut@tempnextdelim{#1}% +} +\newcommand{\cut@nthldelim}[2]{\cut@nthdelim{#1}{#2}{\cut@nextldelim}} +\newcommand{\cut@nthrdelim}[2]{\cut@nthdelim{#1}{#2}{\cut@nextrdelim}} +\newcommand{\cut@nthmdelim}[2]{\cut@nthdelim{#1}{#2}{\cut@nextmdelim}} + +\newcommand{\cut@langleprimitive}[1]{\cut@primitive\cut@nextlangle{#1}} +\newcommand{\cut@rangleprimitive}[1]{\cut@primitive\cut@nextrangle{#1}} +%\newcommand{\cut@langleprimitive}[1]{\cut@nthldelim{#1}{\langle}} +%\newcommand{\cut@rangleprimitive}[1]{\cut@nthrdelim{#1}{\rangle}} + +\newcommand{\cut@vertprimitiveunscaled}[1]{\cut@nthmdelim{#1}\vert}%\hbox{$\m@th\mathord{|}$} + +\newcommand{\cut@Vertprimitiveunscaled}[1]{\cut@nthmdelim{#1}\Vert} + +\newsavebox\cut@boxi +\newsavebox\cut@boxj + +\newcommand{\cut@resizetoheight}[2]{% + \resizebox{!}{#1}{\hbox{$\m@th\currentcutstyle#2$}}% +} + +\newcommand{\cut@resizetoheightof}[2]{% + \sbox{\cut@boxi}{$\m@th\currentcutstyle#1$}% + \sbox{\cut@boxj}{$\m@th\currentcutstyle#2$}% + \raisebox{-\dp\cut@boxi}{% + \resizebox{\width}{\ht\cut@boxi+\dp\cut@boxi}{% + \raisebox{\dp\cut@boxj}{\usebox{\cut@boxj}}% + }% + } +} + +\newcommand{\cut@vertprimitive}[1]{% +\setbox0=\hbox{% + $\m@th\currentcutstyle% + \cut@resizetoheightof{\cut@langleprimitive{#1}}{\cut@vertprimitiveunscaled{#1}}% + $}% +\dimen0=\wd0 +\def\cut@unspace{%removing the margins around the bar + \kern -.5\dimen0% + \mkern.75mu% +}% +\cut@unspace% +\copy0% +\cut@unspace% +\mspace{\cutinterbarskip}% +\penalty \the\binoppenalty\relax% +\cut@unspace% +\box0% +\cut@unspace% +} + +\newcommand{\cut@halfvertprimitive}[1]{% +\cut@resizetoheightof{\cut@langleprimitive{#1}}{\cut@vertprimitiveunscaled{#1}}% +} + +\newcommand{\cut@Vertprimitive}[1]{% +\mkern-3.26mu% +\cut@resizetoheightof{\cut@langleprimitive{#1}}{\cut@Vertprimitiveunscaled{#1}}% +\mkern-3.26mu% +} + + +\newcommand{\cut@langle}[1]{% + \edef\cut@n{\expandafter\the#1}% + %yes, i'm turning the integer into tokens to do call-by-value + \cut@langleprimitive{\cut@n}% +} + +\newcommand{\cut@rangle}[1]{% + \edef\cut@n{\expandafter\the#1}% + \cut@rangleprimitive{\cut@n}% + \ifcutdebug^\cut@n\else\fi% +} + +\newcommand{\cut@vert}[1]{% + \edef\cut@n{\expandafter\the#1}% + \cut@vertprimitive{\cut@n}% +} + +\newcommand{\cut@halfvert}[1]{% + \edef\cut@n{\expandafter\the#1}% + \cut@halfvertprimitive{\cut@n}% +} + +\newcommand{\cut@Vert}[1]{% + \edef\cut@n{\expandafter\the#1}% + \cut@Vertprimitive{\cut@n}% +} + +\newcommand{\cut@angles}[1]{\cut@langle{#1}\cut@vert{#1}\cut@rangle{#1}} + +%%% now the main algorithm + +\newcounter{cut@depth} + +\newcommand{\cut@testangles}{% + \setcounter{cut@depth}{0}% + \def\cut@d{% + \cut@angles{\value{cut@depth}}% + \stepcounter{cut@depth}% + } + \cut@d\cut@d\cut@d\cut@d\cut@d\cut@d\cut@d +} + +\newcommand{\cut@testssstyle}{\scriptscriptstyle{\cut@testangles}} +\newcommand{\cut@testsstyle}{\scriptstyle{\cut@testangles}} +\newcommand{\cut@testnormal}{\textstyle{\cut@testangles}} + +\newcommand{\cut@testsize}[1]{ +{#1 \[ \mathrm{\f@size\,pt:} \begin{array}{l} + \cut@testnormal{}\\ + \cut@testsstyle{}\\ + \cut@testssstyle{} + \end{array}\]} +} + +\newcommand{\cut@test}{ +\cut@testsize{\Large} +\cut@testsize{\large} +\cut@testsize{} +\cut@testsize{\small} +\cut@testsize{\footnotesize} +\cut@testsize{\scriptsize} +\cut@testsize{\tiny} +} + +% lengths with names of the form \cut@height{depth} +\newcommand{\cut@localheight}{cut@height\thecut@depth} +\newcommand{\cut@newlocalheightcounter}{% + \@ifundefined{c@\cut@localheight}{\newcounter{\cut@localheight}}{} +} + +% boxes with names of the form \cut@savebox{num}@{depth} +\newcommand{\cut@localsavebox}[1]{cut@savebox#1@\thecut@depth} +\newcommand{\cut@newlocalsavebox}[1]{% + \@ifundefined{\cut@localsavebox{#1}}{% + \expandafter\newsavebox\csname\cut@localsavebox{#1}\endcsname% + }{}% +} + +\newcounter{cut@finalheight} + +\newsavebox\cut@boxleft +\newsavebox\cut@boxright + +\newcommand{\cut@}[2]{% + \setcounter{cut@finalheight}{0}% + {% + \addtocounter{cut@depth}{1}% + %defining variables + \cut@newlocalheightcounter% + \cut@newlocalsavebox{0}% + \cut@newlocalsavebox{1}% + %computing recursively + \setcounter{\cut@localheight}{-1}% + \expandafter\sbox\csname\cut@localsavebox{0}\endcsname% + {$\m@th\currentcutstyle#1$}% + \expandafter\sbox\csname\cut@localsavebox{1}\endcsname% + {$\m@th\currentcutstyle#2$}% + \addtocounter{\cut@localheight}{1}% + %exporting values outside the local scope + \setcounter{cut@finalheight}{\value{\cut@localheight}}% + \global\sbox\cut@boxleft% + {\expandafter\usebox\csname\cut@localsavebox{0}\endcsname}% + \global\sbox\cut@boxright% + {\expandafter\usebox\csname\cut@localsavebox{1}\endcsname}% + \addtocounter{cut@depth}{-1}% + }% + \@ifundefined{c@\cut@localheight}{}{% + \ifnum\value{cut@finalheight}>\value{\cut@localheight}% + \setcounter{\cut@localheight}{\value{cut@finalheight}}% + \fi% + }%end @ifundefined + \mspace{\cutangleouterskip}% + {\cut@langle{\value{cut@finalheight}}}% + \mspace{\cutangleskip}% + \usebox{\cut@boxleft}% + \mspace{\cutbarskip}% + {\cut@bar{\value{cut@finalheight}}}% + \mspace{\cutbarskip}% + \usebox{\cut@boxright}% + \mspace{\cutangleskip}% + {\cut@rangle{\value{cut@finalheight}}}% + \mspace{\cutangleouterskip}% +} + +\newcommand{\cut@bra}[1]{% + \setcounter{cut@finalheight}{0}% + {% + \addtocounter{cut@depth}{1}% + %defining variables + \cut@newlocalheightcounter% + \cut@newlocalsavebox{0}% + %\cut@newlocalsavebox{1}% + %computing recursively + \setcounter{\cut@localheight}{-1}% + \expandafter\sbox\csname\cut@localsavebox{0}\endcsname% + {$\m@th\currentcutstyle#1$}% + %\expandafter\sbox\csname\cut@localsavebox{1}\endcsname% + % {$\m@th\currentcutstyle#2$}% + \addtocounter{\cut@localheight}{1}% + %exporting values outside the local scope + \setcounter{cut@finalheight}{\value{\cut@localheight}}% + \global\sbox\cut@boxleft% + {\expandafter\usebox\csname\cut@localsavebox{0}\endcsname}% + %\global\sbox\cut@boxright% + % {\expandafter\usebox\csname\cut@localsavebox{1}\endcsname}% + \addtocounter{cut@depth}{-1}% + }% + \@ifundefined{c@\cut@localheight}{}{% + \ifnum\value{cut@finalheight}>\value{\cut@localheight}% + \setcounter{\cut@localheight}{\value{cut@finalheight}}% + \fi% + }%end @ifundefined + \mspace{\cutangleouterskip}% + {\cut@langle{\value{cut@finalheight}}}% + \mspace{\cutangleskip}% + \usebox{\cut@boxleft}% + \mspace{\cutbarskip}% + \mkern-3.26mu% + {\cut@halfvert{\value{cut@finalheight}}}% + \mspace{\cutangleouterskip}% + %\mspace{\cutbarskip}% + %\usebox{\cut@boxright}% + %\mspace{\cutangleskip}% + %\cut@rangle{\value{cut@finalheight}}% +} + +\newcommand{\cut@ket}[1]{% + \setcounter{cut@finalheight}{0}% + {% + \addtocounter{cut@depth}{1}% + %defining variables + \cut@newlocalheightcounter% + \cut@newlocalsavebox{0}% + %\cut@newlocalsavebox{1}% + %computing recursively + \setcounter{\cut@localheight}{-1}% + \expandafter\sbox\csname\cut@localsavebox{0}\endcsname% + {$\m@th\currentcutstyle#1$}% + %\expandafter\sbox\csname\cut@localsavebox{1}\endcsname% + % {$\m@th\currentcutstyle#2$}% + \addtocounter{\cut@localheight}{1}% + %exporting values outside the local scope + \setcounter{cut@finalheight}{\value{\cut@localheight}}% + \global\sbox\cut@boxleft% + {\expandafter\usebox\csname\cut@localsavebox{0}\endcsname}% + %\global\sbox\cut@boxright% + % {\expandafter\usebox\csname\cut@localsavebox{1}\endcsname}% + \addtocounter{cut@depth}{-1}% + }% + \@ifundefined{c@\cut@localheight}{}{% + \ifnum\value{cut@finalheight}>\value{\cut@localheight}% + \setcounter{\cut@localheight}{\value{cut@finalheight}}% + \fi% + }%end @ifundefined + %\cut@langle{\value{cut@finalheight}}% + %\mspace{\cutangleskip}% + %\usebox{\cut@boxleft}% + %\mspace{\cutbarskip}% + \mspace{\cutangleouterskip}% + {\cut@halfvert{\value{cut@finalheight}}}% + \mkern-3.26mu% + \mspace{\cutbarskip}% + \usebox{\cut@boxleft}%right}% + \mspace{\cutangleskip}% + {\cut@rangle{\value{cut@finalheight}}}% + \mspace{\cutangleouterskip}% +} diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index a87bd68d47d..18fd0206e47 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -354,7 +354,7 @@ my @TLP_working = qw( pdf14 pdf-trans pdfcomment pdfcprot pdfcrop pdfjam pdfmarginpar pdfpages pdfscreen pdfslide pdfsync pdftex-def pdftricks pdftricks2 pdfx - pecha pedigree-perl perception perltex + pecha pedigree-perl perception perfectcut perltex permute persian-bib persian-modern petiteannonce petri-nets pfarrei pgf pgf-blur pgf-soroban pgf-umlsd pgfgantt pgfkeyx pgfmolbio diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc index c106ea81c17..35c013c44d9 100644 --- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc @@ -625,6 +625,7 @@ depend pdfsync depend pdfwin depend pdfx depend pecha +depend perfectcut depend perltex depend permute depend petiteannonce diff --git a/Master/tlpkg/tlpsrc/perfectcut.tlpsrc b/Master/tlpkg/tlpsrc/perfectcut.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/perfectcut.tlpsrc |