From 4daddc1a68d865d868563e7e0dc2b3734be5a68e Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 9 Apr 2012 16:58:02 +0000 Subject: chronosys (8apr12) git-svn-id: svn://tug.org/texlive/trunk@25889 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/generic/chronosys/chronosys.sty | 4 +- .../texmf-dist/tex/generic/chronosys/chronosys.tex | 28 +- .../tex/generic/chronosys/chronosyschr.tex | 305 +++++++++++++++------ .../tex/generic/chronosys/x-chronosys.tex | 47 +++- 4 files changed, 290 insertions(+), 94 deletions(-) (limited to 'Master/texmf-dist/tex/generic') diff --git a/Master/texmf-dist/tex/generic/chronosys/chronosys.sty b/Master/texmf-dist/tex/generic/chronosys/chronosys.sty index 184a7703427..5129513124f 100644 --- a/Master/texmf-dist/tex/generic/chronosys/chronosys.sty +++ b/Master/texmf-dist/tex/generic/chronosys/chronosys.sty @@ -25,7 +25,7 @@ % \NeedsTeXFormat{LaTeX2e} \RequirePackage{tikz} -\RequirePackage{color} +%\RequirePackage{xcolor} \makeatletter\catcode`\!=11 \def\!chr@verif#1#2{\ifdefined#2\error!message \fi #1#2} % @@ -38,6 +38,8 @@ \def\!chreventcolorbox{\colorbox{\!chr@eventcolorbox}} \def\!chrperiodcolorbox{\colorbox{\!chr@periodcolorbox}} \ProvidesPackage{chronosys} +\setupchronoevent[!!eventgradu@tion]{datesstyle=\tiny} +\setupchronoperiode[!!periodegradu@tion]{datesstyle=\tiny} \makeatother \catcode`\!=12 \endinput diff --git a/Master/texmf-dist/tex/generic/chronosys/chronosys.tex b/Master/texmf-dist/tex/generic/chronosys/chronosys.tex index 817f068b8ae..be7967a9bc7 100644 --- a/Master/texmf-dist/tex/generic/chronosys/chronosys.tex +++ b/Master/texmf-dist/tex/generic/chronosys/chronosys.tex @@ -25,28 +25,30 @@ % \catcode`\@=11 \unless\ifdefined\tikzpicture -\catcode`\!=12\input tikz.tex \relax\fi %\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri}\fi +\catcode`\!=12\input tikz.tex \relax\fi \catcode`\!=11 \let\!chr@verif\relax \def\starttikzpicture{\tikzpicture} \def\stoptikzpicture{\endtikzpicture} \def\!chrperiodcolorbox#1{% \setbox\z@ \hbox{\kern2pt#1\kern2pt}% -\dimen@i\ht\z@\advance\dimen@i 2pt\ht\z@\dimen@i -\dimen@i\dp\z@\advance\dimen@i 2pt\dp\z@\dimen@i -\advance\dimen@i\ht\z@ +\dimen@i\dp\z@ +\advance\dimen@i\ht\z@ \advance\dimen@i 6pt \dimen@ii\wd\z@ -\setbox\z@\hbox{\tikzpicture\fill[color=\!chr@periodcolorbox]% -(\z@,\z@)--(\dimen@ii,\z@)--(\dimen@ii,\dimen@i)--(\z@,\dimen@i);\endtikzpicture -\kern-\wd\z@\raise2pt\box\z@}\vbox to\z@{\box\z@\vss}} +\advance\dimen@ii 4pt +\setbox\@ne\hbox{\tikz\fill[color=\!chr@periodcolorbox]% +(\z@,\z@)--(\dimen@ii,\z@)--(\dimen@ii,\dimen@i)--(\z@,\dimen@i); +\kern-\dimen@ii\box\z@}\raise0.5\dimen@ii\vbox to\z@{\box\@ne\vss}} + + \def\!chreventcolorbox#1{% \setbox\z@ \hbox{\kern2pt#1\kern2pt}% -\dimen@i\ht\z@\advance\dimen@i 2pt\ht\z@\dimen@i -\dimen@i\dp\z@\advance\dimen@i 2pt\dp\z@\dimen@i -\advance\dimen@i\ht\z@ +\dimen@i\dp\z@ +\advance\dimen@i\ht\z@ \dimen@ii\wd\z@ -\setbox\z@\hbox{\tikzpicture\fill[color=\!chr@eventcolorbox]% -(\z@,\z@)--(\dimen@ii,\z@)--(\dimen@ii,\dimen@i)--(\z@,\dimen@i);\endtikzpicture -\kern-\wd\z@\raise2pt\box\z@}\vbox to\z@{\box\z@\vss}} +\advance\dimen@ii 4pt +\setbox\@ne\hbox {\tikz\fill[color=\!chr@eventcolorbox]% +(\z@,\z@)--(\dimen@ii,\z@)--(\dimen@ii,\dimen@i)--(\z@,\dimen@i); +\kern-\dimen@ii\box\z@}\raise0.5\dimen@ii\vbox to\z@{\box\@ne\vss}} \input chronosyschr.tex \catcode`\!=12 diff --git a/Master/texmf-dist/tex/generic/chronosys/chronosyschr.tex b/Master/texmf-dist/tex/generic/chronosys/chronosyschr.tex index d6af427d142..26ac5aab586 100644 --- a/Master/texmf-dist/tex/generic/chronosys/chronosyschr.tex +++ b/Master/texmf-dist/tex/generic/chronosys/chronosyschr.tex @@ -26,7 +26,7 @@ \expandafter\ifx\csname chronosys @\endcsname\relax\else\immediate\write16{Le fichier a deja ete charge}\endinput\fi \ifx\numexpr\UNDEFINED\immediate\write16{Desole, mais ce fichier utilise les primitives E-TeX, vous ne pouvez pas utiliser le moteur TeX.}\endinput\fi \expandafter\edef\csname chronosys @\endcsname{\the\catcode`\@} -\def\chron@sysversion{1.10} +\def\chron@sysversion{1.15} \catcode`\@=11 \catcode`\!=11 @@ -36,8 +36,8 @@ % \def\!chrverif#1#2{\ifdefined#2\expandafter\error!message \fi #1#2} % % -\!chrverif\def\!gobblethree#1#2#3{} -\!chrverif\def\!gobble#1{} +\def\!gobblethree#1#2#3{} +\def\!gobble#1{} \ifdefined\@ifnextchar \def\:{\let\ifnexttoken\@ifnextchar}\expandafter\:\else \ifdefined\doifnextcharelse \def\:{\let\ifnexttoken\doifnextcharelse}\expandafter\:\else \long\def\@ifnextchar#1#2#3{% @@ -68,12 +68,11 @@ \!chrverif\def\!chrtraitetwoargument#1{\let\todoafterarg#1% \ifnexttoken[{\!chroneargtrue\savefirsttwoarg}{\!chroneargfalse\!chrtwoargfalse#1[][]}} \!chrverif\def\savefirsttwoarg[#1]{\ifnexttoken[{\!chrtwoargtrue \todoafterarg[#1]}{\!chrtwoargfalse \todoafterarg[#1][]}} -\!chr@verif\newif\ifarvirgule -\!chrverif\def\!chrtraitingargvirgule[#1]#2{\def\!tr@itintargvirgule{#2} \!chrtr@itingargvirgule#1,\end} -\!chrverif\def\!chrtr@itingargvirgule#1,{\ifnexttoken\end{\!chrdotraiteargvirgule#1,=\end,\!gobble}{\!chrdotraiteargvirgule#1,=\end,\!chrtr@itingargvirgule}} -\!chrverif\def\!chrdotraiteargvirgule#1=#2,{\ifx\end#2\else \!chrdotr@iteargvirgule#1=#2,\expandafter\!gobblethree\fi} -\!chrverif\def\!chrdotr@iteargvirgule#1=#2,{\ifcsname \!tr@itintargvirgule#1\endcsname \expandafter\def\csname \!tr@itintargvirgule#1\endcsname{#2}\fi } +\!chrverif\def\!chrtraitingargvirgule#1#2{\def\!tr@itintargvirgule{#2} \!chrtr@itingargvirgule#1,\end} +\!chrverif\def\!chrtr@itingargvirgule#1,{\!chrdotraiteargvirgule#1,=\end,\ifnexttoken\end\!gobble\!chrtr@itingargvirgule} +\!chrverif\def\!chrdotraiteargvirgule#1=#2,{\ifx\end#2\relax\else \!chrdotr@iteargvirgule#1=#2,\expandafter\!gobblethree\fi} +\!chrverif\def\!chrdotr@iteargvirgule#1=#2,{\ifcsname \!tr@itintargvirgule#1\endcsname \expandafter\def\csname \!tr@itintargvirgule#1\endcsname{#2} \else \immediate\write16{chronosys : option #1 non reconnue, impossible de lui affecter la valeur #2}\fi } \!chrverif\def\startchronology{\!chrtraiteoneargument\dostartchronology} @@ -83,19 +82,32 @@ \!chrverif\def\!chrdefaultdatesstyle{} \!chrverif\def\!chrdefaultstartdate{true} \!chrverif\def\!chrdefaultstopdate{true} \!chrverif\def\!chrdefaultdateselevation{20pt} \!chrverif\def\!chrdefaultbox{false} \!chrverif\def\!chrdefaultalign{center} -\!chr@verif\newdimen\!chrheight \!chr@verif\newif\if!chrdates \!chr@verif\newif\if!chrarrow \!chr@verif\newcount\!chrstartyear \!chr@verif\newcount\!chrstopyear \!chr@verif\newdimen\!chrwidth \!chr@verif\newdimen\!chrarrowwidth \!chr@verif\newdimen\!chrarrowheight \!chr@verif\newbox\!chrflechebox \!chrverif\def\!chr@color{black} -\!chrverif\def\!chr@arrowcolor{\!chrdefaultarrowcolor} \!chr@verif\newdimen\!chr!realwidth \!chrverif\def\!chr@datesstyle{} \!chr@verif\newdimen\!chr!unitperyear +\!chr@verif\newdimen\!chrheight \!chr@verif\newif\if!chrdates \!chr@verif\newif\if!chrarrow \!chr@verif\newcount\!chrstartyear \!chr@verif\newcount\!chrstopyear \!chr@verif\newdimen\!chrwidth \!chr@verif\newdimen\!chrarrowwidth \!chr@verif\newdimen\!chrarrowheight \!chr@verif\newbox\!chrflechebox +\!chr@verif\newdimen\!chr!realwidth \!chr@verif\newdimen\!chr!unitperyear \!chr@verif\newif\if!chrstartdate \!chr@verif\newif\if!chrstopdate \!chr@verif\newdimen\!chrdateselevation \!chr@verif\newif\if!chrbox \!chrverif\def\!chr!periodeschwarzodergrau{\def\!chr!stringtest{black}\ifx\!chr@color\!chrstringtest\def\!chr!periodeschwarzodergr@u{gray}\else\def\!chr!periodeschwarzodergr@u{black}\fi} -\!chrverif\def\dostartchronology[#1]{\begingroup\parindent\z@\par\def\!chr@startyear{\!chrdefaultstartyear}% -\def\!chr@height{\!chrdefaultheight}\def\!chr@stopyear{\!chrdefaultstopyear}\def\!chr@width{\!chrdefaultwidth}\def\!chr@dates{\!chrdefaultdates}% -\def\!chr@arrow{\!chrdefaultarrow}\def\!chr@arrowwidth{\!chrdefaultarrowwidth}\def\!chr@arrowheight{\!chrdefaultarrowheight}\def\!chr@color{\!chrdefaultcolor}% -\def\!chr@arrowcolor{\!chrdefaultarrowcolor}\def\!chr@datesstyle{\!chrdefaultdatesstyle}\def\!chr@startdate{\!chrdefaultstartdate}% -\def\!chr@stopdate{\!chrdefaultstopdate}\def\!chr@dateselevation{\!chrdefaultdateselevation}% -\def\!chr@box{\!chrdefaultbox}\def\!chr@align{\!chrdefaultalign}% -\if!chronearg \!chrtraitingargvirgule[#1]{!chr@}\fi \!chrheight\!chr@height \!chrstartyear\!chr@startyear \!chrstopyear\!chr@stopyear \!chrwidth\!chr@width % +\!chrverif\def\!chrdefaultoptions{startyear=\!chrdefaultstartyear, stopyear=\!chrdefaultstopyear, +startdate=\!chrdefaultstartdate, stopdate=\!chrdefaultstopdate, +height=\!chrdefaultheight, width=\!chrdefaultwidth, dates=\!chrdefaultdates, arrow=\!chrdefaultarrow, +arrowwidth=\!chrdefaultarrowwidth, arrowheight=\!chrdefaultarrowheight, color=\!chrdefaultcolor, +arrowcolor=\!chrdefaultarrowcolor, datesstyle=\!chrdefaultdatesstyle, dateselevation=\!chrdefaultdateselevation, +box=\!chrdefaultbox, align=\!chrdefaultalign} + +\!chrverif\def\!chr@startyear{} \!chrverif\def\!chr@startdate{}% +\!chrverif\def\!chr@stopyear{} \!chrverif\def\!chr@stopdate{} +\!chrverif\def\!chr@height{} \!chrverif\def\!chr@width{} +\!chrverif\def\!chr@dates{true}% +\!chrverif\def\!chr@arrow{} \!chrverif\def\!chr@arrowwidth{} \!chrverif\def\!chr@arrowheight{} +\!chrverif\def\!chr@color{} +\!chrverif\def\!chr@arrowcolor{} \!chrverif\def\!chr@datesstyle{} +\!chrverif\def\!chr@dateselevation{}% +\!chrverif\def\!chr@box{} \!chrverif\def\!chr@align{}% + +\!chrverif\def\dostartchronology[#1]{\begingroup\parindent\z@\par +\expandafter\expandafter\expandafter\!chrtraitingargvirgule\expandafter{\!chrdefaultoptions}{!chr@} +\if!chronearg \!chrtraitingargvirgule{#1}{!chr@}\fi \!chrheight\!chr@height \!chrstartyear\!chr@startyear \!chrstopyear\!chr@stopyear \!chrwidth\!chr@width % \csname !chrdates\!chr@dates\endcsname \csname !chrarrow\!chr@arrow\endcsname \csname !chrstartdate\!chr@startdate\endcsname \csname !chrbox\!chr@box\endcsname % \csname !chrstopdate\!chr@stopdate\endcsname \!chrarrowwidth\!chr@arrowwidth \!chrarrowheight\!chr@arrowheight \!chrdateselevation\!chr@dateselevation% @@ -117,97 +129,137 @@ \count@\numexpr\!chrstopyear-\!chrstartyear\relax \ifnum\count@<0\relax\immediate\write16{Erreur avec les dates donn\'ees}\fi \!chr!unitperyear\dimexpr\!chr!realwidth/\count@\relax} -\!chrverif\def\setupchronology#1{\!chrtraitingargvirgule[#1]{!chrdefault}} - +\!chrverif\def\setupchronology#1{\!chrtraitingargvirgule{#1}{!chrdefault}} \!chr@verif\newcount\!chr!periodecolornum\!chr@verif\newcount\!chr!starttingtraitement \!chr@verif\newdimen\!chr!dimentraitement \!chr@verif\newdimen\!chrperiodtextdepth \!chrverif\def\!chrperiodedefaulttextdepth{15pt} -\!chr@verif\newif\if!chrperioddates \!chrverif\def\!chrperiodedefaultdates{true} +\!chr@verif\newif\if!chrperioddates \!chr@verif\newif\if!chrperiodbox \!chr@verif\newif\if!chrperiodstartdate \!chr@verif\newif\if!chrperiodstopdate \!chrverif\def\!chrperiodedefaultstartdate{true} -\!chr@verif\newif\if!chrperiodifcolorbox \!chrverif\def\!chrperiodedefaultifcolorbox{true} -\!chrverif\def\!chrperiodedefaultstopdate{true} \!chrverif\def\!chrperiodedefaultcolorbox{white} -\!chr@verif\newdimen\!chrperioddateselevation \!chrverif\def\!chrperiodedefaultdateselevation{0pt} +\!chr@verif\newif\if!chrperiodifcolorbox +\!chr@verif\newdimen\!chrperioddateselevation \!chr@verif\newdimen\!chrperiodeventtextwidth +\!chr@verif\newdimen\!chrperiodbottomdepth \!chr@verif\newdimen\!chrperiodtopheight - -%\!chrverif\def\!chr!periodec@lor{\ifcase\!chr!periodecolornum blue\or red\or cyan\or purple\or yellow\fi} -%\!chrverif\def\!chr!periodecolor{\edef\!chrperiodedefaultcolor{\!chr!periodec@lor}\ifx\!chr!periodec@l@r\!chr@color\!chr!periodecoloradvance\!chr!periodecolor %\fi} -%\!chrverif\def\!chr!periodecoloradvance{\global\advance\!chr!periodecolornum\@ne\relax\ifnum\!chr!periodecolornum=5\relax\global\!chr!periodecolornum\z@\fi} -%\!chrverif\def\!chrperiodedefaultdatesstyle{} \!chrverif\def\!chrperiodedefaulttextstyle{} - +%alternance des couleurs +\!chr@verif\newcount\!chrperiodecoloralternancetotalnum \!chrverif\def\!chrperiodedefaultcolor{\chron@periodcolor} \!chrverif\def\!chrperiodedefa@@ultcolor{\chron@periodcolor} +\!chrverif\def\!chrperiodedef@ultcolor{\!chrperiodedefaultcolor} \!chrverif\def\chron@periodcolor{\ifcase\!chr!periodecolornum blue\or red\or cyan\or purple\or yellow\fi} +\!chrperiodecoloralternancetotalnum5% \!chrverif\def\!chr!periodecolor{\edef\!chrperiodedef@ultcolor{\!chrperiodedefaultcolor}\ifx\!chrperiodedefaultcolor\!chrperiodedefa@@ultcolor\ifx\!chrperiodedef@ultcolor\!chr@color\!chr!periodecoloradvance\!chr!periodecolor \fi\fi} -\!chrverif\def\!chr!periodecoloradvance{\global\advance\!chr!periodecolornum\@ne\relax\ifnum\!chr!periodecolornum=5\relax\global\!chr!periodecolornum\z@\fi} -\!chrverif\def\!chrperiodedefaultdatesstyle{} \!chrverif\def\!chrperiodedefaulttextstyle{} - -\!chrverif\def\chronoperiode{\!chrtraiteoneargument\dochronoperiode} -\!chrverif\def\dochronoperiode[#1]#2#3#4{\def\!chr@periodtextdepth{\!chrperiodedefaulttextdepth}\def\!chr@perioddates{\!chrperiodedefaultdates}% -\def\!chr@periodcolor{\!chrperiodedef@ultcolor}\def\!chr@perioddatesstyle{\!chrperiodedefaultdatesstyle}% -\def\!chr@periodstartdate{\!chrperiodedefaultstartdate}\def\!chr@periodstopdate{\!chrperiodedefaultstopdate}% -\def\!chr@periodtextstyle{\!chrperiodedefaulttextstyle}\def\!chr@perioddates{\!chrperiodedefaultdates}% -\def\!chr@perioddateselevation{\!chrperiodedefaultdateselevation}% -\def\!chr@periodifcolorbox{\!chrperiodedefaultifcolorbox}\def\!chr@periodcolorbox{\!chrperiodedefaultcolorbox}% -\!chr!periodecolor % +\!chrverif\def\!chr!periodecoloradvance{\global\advance\!chr!periodecolornum\@ne\relax +\ifnum\!chr!periodecolornum=\!chrperiodecoloralternancetotalnum\relax\global\!chr!periodecolornum\z@\fi} + +\!chrverif\def\restartchronoperiodecolor{\!chrtraiteoneargument\dorestartchronoperiodecolor} +\!chrverif\def\dorestartchronoperiodecolor[#1]{% +\if!chronearg \def\@@string@a{#1}% +\!chr!periodecolornum\z@ % +\dorestartchronoperiodecolor@ux +\else\!chr!periodecolornum\z@\fi} +\!chrverif\def\dorestartchronoperiodecolor@ux{\edef\@@string@b{\chron@periodcolor}\ifnum\!chr!periodecolornum<\!chrperiodecoloralternancetotalnum +\unless\ifx\@@string@a\@@string@b +\global\advance\!chr!periodecolornum\@ne +\dorestartchronoperiodecolor@ux\fi\else\global\!chr!periodecolornum\z@\fi} + +\!chrverif\def\chronoperiodecoloralternation#1{% +\def\@@string@s{\ifcase\!chr!periodecolornum}% +\!chrperiodecoloralternancetotalnum\z@\!chr!chronoperiodecoloralternance#1,\end \let\chron@periodcolor\@@string@s} + +\!chrverif\def\!chr!chronoperiodecoloralternance#1,{\advance\!chrperiodecoloralternancetotalnum\@ne +\expandafter\def\expandafter\@@string@s\expandafter{\@@string@s#1}% +\ifnexttoken\end{\expandafter\def\expandafter\@@string@s\expandafter{\@@string@s\fi}\!gobble}% +{\expandafter\def\expandafter\@@string@s\expandafter{\@@string@s\or}\!chr!chronoperiodecoloralternance}} + + +\!chrverif\def\!chr@periodtextdepth{}\!chrverif\def\!chr@perioddates{}% +\!chrverif\def\!chr@periodcolor{}\!chrverif\def\!chr@perioddatesstyle{}% +\!chrverif\def\!chr@periodstartdate{}\!chrverif\def\!chr@periodstopdate{}% +\!chrverif\def\!chr@periodtextstyle{}% +\!chrverif\def\!chr@perioddateselevation{}% +\!chrverif\def\!chr@periodifcolorbox{}\!chrverif\def\!chr@periodcolorbox{}% +\!chrverif\def\!chr@periodbottomdepth{}\!chrverif\def\!chr@periodtopheight{}% +\!chrverif\def\!chr@periodbox{}% + +\!chrverif\def\dochronoperiode[#1]#2#3#4{% +\!chr!periodecolor \if!chronearg -\!chrtraitingargvirgule[#1]{!chr@period}\fi\!chrperiodtextdepth\!chr@periodtextdepth +\!chrtraitingargvirgule{#1}{!chr@period}\fi +\!chrperiodtextdepth\!chr@periodtextdepth \!chrperiodtopheight\!chr@periodtopheight +\!chrperiodbottomdepth\!chr@periodbottomdepth \csname !chrperioddates\!chr@perioddates\endcsname \csname !chrperiodstartdate\!chr@periodstartdate\endcsname \csname !chrperiodstopdate\!chr@periodstopdate\endcsname \csname !chrperiodifcolorbox\!chr@periodifcolorbox\endcsname +\csname !chrperiodbox\!chr@periodbox\endcsname \!chrperioddateselevation\!chr@perioddateselevation \advance\!chrperioddateselevation 1.25\!chrheight\relax \ifnum#2>\numexpr\!chrstartyear-1\relax\ifnum#2<\numexpr\!chrstopyear+1\relax\ifnum#3<\numexpr\!chrstopyear+1\relax \ifnum#3>\numexpr\!chrstartyear-1\relax\count@\numexpr#3-#2\relax\ifnum\count@>\z@\relax \!chr!starttingtraitement\numexpr#2-\!chrstartyear\relax\dimen@\dimexpr\count@\!chr!unitperyear\relax \!chr!dimentraitement\dimexpr\!chr!starttingtraitement\!chr!unitperyear\relax % % \dimen@i\wd\!chrflechebox -\setbox\!chrflechebox\hbox{\unhbox\!chrflechebox\kern-\dimen@i\kern\!chr!dimentraitement\lower\!chrperiodtextdepth\hbox to\z@ +\setbox\!chrflechebox\hbox{\unhbox\!chrflechebox\kern-\dimen@i\kern\!chr!dimentraitement +\lower\dimexpr\!chrperiodtextdepth-\!chrperiodbottomdepth\relax\hbox to\z@ {\hbox to\dimen@ {\hss \if!chrperiodifcolorbox\expandafter\!chrperiodcolorbox\fi{\!chr@periodtextstyle{#4}}\hss}\hss}% -\if!chrperioddates\if!chrperiodstartdate\raise\!chrperioddateselevation +\if!chrperioddates\if!chrperiodstartdate +\raise\dimexpr\!chrperioddateselevation +(\!chrperiodtopheight-\!chrheight)\relax \hbox to\z@{\hss\!chr@perioddatesstyle{#2}\hss}\fi\fi -\starttikzpicture \filldraw [color=\!chr@periodcolor](\z@,\z@)--(\dimen@,\z@)--(\dimen@,\!chrheight)--(\z@,\!chrheight)--cycle;\draw[color=\!chr!periodeschwarzodergr@u](\z@,\z@)--(\z@,\!chrheight);% -\draw [color=\!chr!periodeschwarzodergr@u](\dimen@,\z@)--(\dimen@,\!chrheight);% +\raise\!chrperiodbottomdepth \hbox{\starttikzpicture \filldraw [color=\!chr@periodcolor](\z@,\!chrperiodbottomdepth)--(\dimen@,\!chrperiodbottomdepth)--(\dimen@,\!chrperiodtopheight)--(\z@,\!chrperiodtopheight)--cycle;\draw[color=\!chr!periodeschwarzodergr@u](\z@,\!chrperiodbottomdepth)--(\z@,\!chrperiodtopheight);% +\draw [color=\!chr!periodeschwarzodergr@u](\dimen@,\!chrperiodbottomdepth)--(\dimen@,\!chrperiodtopheight);% \if!chrbox\draw[color=black](\z@,-0.2pt)--(\dimen@,-0.2pt)\fi -\stoptikzpicture -\if!chrperioddates\if!chrperiodstopdate\raise\!chrperioddateselevation \hbox to\z@ +\if!chrperiodbox \draw[color=black](\z@,\!chrperiodbottomdepth)--(\dimen@,\!chrperiodbottomdepth);% +\draw[color=black](\dimen@,\!chrperiodtopheight)--(\z@,\!chrperiodtopheight);\fi +\stoptikzpicture} +\if!chrperioddates\if!chrperiodstopdate +\raise\dimexpr\!chrperioddateselevation+(\!chrperiodtopheight-\!chrheight)\relax +\hbox to\z@ {\hss \!chr@perioddatesstyle{#3}\hss}\fi\fi}\!chr!periodecoloradvance\fi\fi\fi\fi\fi} -\!chrverif\def\setupchronoperiode#1{\!chrtraitingargvirgule[#1]{!chrperiodedefault}} -\!chrverif\def\chronoevent{\!chrtraiteoneargument\dochronoevent} -\!chr@verif\newif\if!chreventspecifiedday\!chr@verif\newif\if!chreventspecifiedmonth \!chr@verif\newif\if!chreventbarre \!chrverif\def\!chreventdefaultbarre{true} -\!chrverif\def\!chreventdefaulticon{} \!chr@verif\newdimen\!chreventmarkdepth +\!chrverif\def\setupchronoperiode{\def\@@string@a{periode}\!chrtraiteoneargument\dosetupchronoeventandperiode} + + +\!chr@verif\newif\if!chreventspecifiedday\!chr@verif\newif\if!chreventspecifiedmonth \!chr@verif\newif\if!chreventbarre +\!chr@verif\newif\if!chreventdate \!chr@verif\newif\if!chreventmark +\!chr@verif\newif\if!chreventifcolorbox \!chr@verif\newif\if!chreventconversionmonth +\!chr@verif\newdimen\!chreventmarkdepth \!chr@verif\newif\if!chreventyear \!chr@verif\newdimen\!chreventiconheight + \!chrverif\def\!chreventdefaultbarre{true} +\!chrverif\def\!chreventdefaulticon{} \!chrverif\def\!chreventdefaultmarkdepth{10pt} -\!chrverif\def\!chreventdefaulttextstyle{} \!chr@verif\newif\if!chreventmark \!chrverif\def\!chreventdefaultmark{true} -\!chr@verif\newif\if!chreventdate \!chrverif\def\!chreventdefaultdate{true} \!chr@verif\let\!chreventdefaultdatesseparation\space -\!chr@verif\newif\if!chreventconversionmonth \!chrverif\def\!chreventdefaultconversionmonth{true} -\!chr@verif\newif\if!chreventifcolorbox \!chrverif\def\!chreventdefaultifcolorbox{true} -\!chrverif\def\!chreventdefaultdatestyle{} \!chrverif\def\!chreventdefaultdatesstyle{} \!chr@verif\newif\if!chreventyear \!chrverif\def\!chreventdefaultyear{true} \!chrverif\def\!chreventdefaulttesttextwidth{\relax} -\!chrverif\def\!chreventdefaulticonheight{0.5\!chrheight} \!chr@verif\newdimen\!chreventiconheight -\!chrverif\def\!chreventdefaultcolorbox{white} +\!chrverif\def\!chreventdefaulttextstyle{} + + + \!chrverif\def\!chreventdefaulttesttextwidth{\relax} \!chrverif\def\!chreventevalspecification#1{\count@\z@\relax\!chreventev@lspecification#1/\end} -\!chrverif\def\!chreventev@lspecification#1/{\advance\count@\@ne\relax\expandafter\def\csname !chreventspecifiedargument\number\count@\endcsname{#1}\ifnexttoken\end{\!gobble}{\!chreventev@lspecification}} +\!chrverif\def\!chreventev@lspecification#1/{\advance\count@\@ne\relax\expandafter\def\csname !chreventspecifiedargument\number\count@\endcsname{#1}\ifnexttoken\end\!gobble\!chreventev@lspecification} \!chrverif\def\chron@selectmonth#1{\ifcase#1\or janvier\or f\'evrier\or mars\or avril\or mai\or juin\or juillet\or ao\^ut\or septembre\or octobre\or novembre\or d\'ecembre\fi} +\!chrverif\def\!chr@eventbarre{} \!chrverif\def\!chr@eventicon{} \!chrverif\def\!chr@eventmarkdepth{}% +\!chrverif\def\!chr@eventtextstyle{} \!chrverif\def\!chr@eventmark{}% +\!chrverif\def\!chr@eventdate{} \!chrverif\def\!chr@eventdatesseparation{}% +\!chrverif\def\!chr@eventconversionmonth{} \!chrverif\def\!chr@eventdatestyle{}% +\!chrverif\def\!chr@eventdatesstyle{} \!chrverif\def\!chr@eventyear{} \!chrverif\def\!chr@eventiconheight{}% +\!chrverif\def\!chr@eventifcolorbox{} \!chrverif\def\!chr@eventcolorbox{}%. +\!chrverif\def\!chr@eventtextwidth{}% + \!chrverif\def\dochronoevent[#1]#2#3{% -\def\!chr@eventbarre{\!chreventdefaultbarre}\def\!chr@eventicon{\!chreventdefaulticon}\def\!chr@eventmarkdepth{\!chreventdefaultmarkdepth}% -\def\!chr@eventtextstyle{\!chreventdefaulttextstyle}\def\!chr@eventmark{\!chreventdefaultmark}% -\def\!chr@eventdate{\!chreventdefaultdate}\def\!chr@eventdatesseparation{\!chreventdefaultdatesseparation}% -\def\!chr@eventconversionmonth{\!chreventdefaultconversionmonth}\def\!chr@eventdatestyle{\!chreventdefaultdatestyle}% -\def\!chr@eventdatesstyle{\!chreventdefaultdatesstyle}\def\!chr@eventyear{\!chreventdefaultyear}\def\!chr@eventiconheight{\!chreventdefaulticonheight}% -\def\!chr@eventifcolorbox{\!chreventdefaultifcolorbox}\def\!chr@eventcolorbox{\!chreventdefaultcolorbox}%. -\def\!chr@eventtextwidth{\relax}% -\if!chronearg \!chrtraitingargvirgule[#1]{!chr@event}\fi -\csname !chreventbarre\!chr@eventbarre\endcsname \csname !chreventmark\!chr@eventmark\endcsname \csname !chreventdate\!chr@eventdate\endcsname -\csname !chreventconversionmonth\!chr@eventconversionmonth\endcsname \csname !chreventyear\!chr@eventyear\endcsname +\if!chronearg \!chrtraitingargvirgule{#1}{!chr@event}\fi +\csname !chreventbarre\!chr@eventbarre\endcsname +\csname !chreventmark\!chr@eventmark\endcsname +\csname !chreventdate\!chr@eventdate\endcsname +\csname !chreventconversionmonth\!chr@eventconversionmonth\endcsname +\csname !chreventyear\!chr@eventyear\endcsname \csname !chreventifcolorbox\!chr@eventifcolorbox\endcsname \!chreventmarkdepth\!chr@eventmarkdepth \!chreventiconheight\!chr@eventiconheight -\ifx\!chr@eventtextwidth\!chreventdefaulttesttextwidth \!chrperiodeventtextwidth=-1pt\else \!chrperiodeventtextwidth\!chr@eventtextwidth\fi -%\def\!chr@eventtextwidth{\relax}% -\!chreventevalspecification{#2}\ifnum\count@<4\relax\ifcase\count@\or\!chreventspecifieddayfalse\!chreventspecifiedmonthfalse \edef\!chreventyear{\csname !chreventspecifiedargument1\endcsname}\or\!chreventspecifieddayfalse\!chreventspecifiedmonthtrue +\ifx\!chr@eventtextwidth\!chreventdefaulttesttextwidth \!chrperiodeventtextwidth=-1pt% +\else \!chrperiodeventtextwidth\!chr@eventtextwidth\fi +\!chreventevalspecification{#2}\ifnum\count@<4\relax +\ifcase\count@\or\!chreventspecifieddayfalse\!chreventspecifiedmonthfalse +\edef\!chreventyear{\csname !chreventspecifiedargument1\endcsname}\or \!chreventspecifieddayfalse\!chreventspecifiedmonthtrue \edef\!chreventyear{\csname !chreventspecifiedargument2\endcsname}\edef\!chreventmonth{\csname !chreventspecifiedargument1\endcsname}% -\or\!chreventspecifieddaytrue\!chreventspecifiedmonthtrue\edef\!chreventyear{\csname !chreventspecifiedargument3\endcsname}\edef\!chreventmonth{\csname !chreventspecifiedargument2\endcsname}\edef\!chreventday{\csname !chreventspecifiedargument1\endcsname}\fi % +\or \!chreventspecifieddaytrue\!chreventspecifiedmonthtrue +\edef\!chreventyear{\csname !chreventspecifiedargument3\endcsname}\edef\!chreventmonth{% +\csname !chreventspecifiedargument2\endcsname}\edef\!chreventday{\csname !chreventspecifiedargument1\endcsname}\fi % \ifnum\!chreventyear>\numexpr\!chrstartyear-1\relax\ifnum\!chreventyear<\numexpr\!chrstopyear+1\relax \if!chreventspecifiedmonth\if!chreventspecifiedday \count@\numexpr\!chreventday+\!chreventmonth*30\relax\else % \count@\numexpr\!chreventmonth*30\relax\fi\else\count@\z@\fi % @@ -216,8 +268,12 @@ % % \dimen@i\wd\!chrflechebox \setbox\!chrflechebox\hbox{\unhbox\!chrflechebox\kern-\dimen@i\kern\!chr!dimentraitement -\if!chreventbarre\starttikzpicture\draw[color=black](0,0)--(0,\!chrheight);\stoptikzpicture\fi\kern-0.4pt\raise\!chreventiconheight\hbox to\z@{\hss\!chr@eventicon\hss}\lower\dimexpr\!chreventmarkdepth+2pt\relax\hbox to\z@{\vbox to\z@{\ifdim\!chreventmarkdepth<0pt\relax\vss\fi -\if!chreventdate\hbox to\z@ {\hss\if!chreventifcolorbox\expandafter\!chreventcolorbox\fi{\!chr@eventdatestyle{\if!chreventspecifiedday % +\if!chreventbarre +\starttikzpicture \draw[color=black](0,0)--(0,\!chrheight); \stoptikzpicture \fi +\kern-0.4pt\raise\!chreventiconheight \hbox to\z@{\hss\!chr@eventicon\hss}\lower\dimexpr\!chreventmarkdepth+2pt\relax\hbox to\z@{\vbox +to\z@{\ifdim\!chreventmarkdepth<0pt\relax\vss\fi +\if!chreventdate\hbox to\z@ +{\hss \if!chreventifcolorbox \expandafter\!chreventcolorbox\fi {\!chr@eventdatestyle{\if!chreventspecifiedday % {\!chr@eventdatesstyle{\!chreventday}}\!chr@eventdatesseparation\fi{\!chr@eventdatesstyle{\if!chreventspecifiedmonth \if!chreventconversionmonth\expandafter \chron@selectmonth\fi \!chreventmonth\fi}}\if!chreventspecifiedmonth\if!chreventyear \!chr@eventdatesseparation\fi\fi \if!chreventyear{\!chr@eventdatesstyle{\!chreventyear}}\fi% }}\hss}\fi @@ -234,13 +290,15 @@ {\hss\if!chreventifcolorbox\expandafter\!chreventcolorbox\fi{% \!chr@eventtextstyle{#3}}\hss}% \fi \ifdim\!chreventmarkdepth>0pt\relax\vss\fi}}\if!chreventmark\ifdim\!chreventmarkdepth<0pt\starttikzpicture \draw(0,0)--(0,\!chreventmarkdepth+5pt);\stoptikzpicture\else \vrule height0pt depth\!chreventmarkdepth\fi\fi -\setbox0\vbox{\if!chreventdate\hbox{#2}\fi\hbox{ -\ifdim\!chrperiodeventtextwidth > \z@ \vtop {\hsize\!chrperiodeventtextwidth #3} -\else #3\fi }}\lower\dimexpr\dp0+\ht0+\!chreventmarkdepth+2pt\relax\hbox{} +\setbox0\vbox{\if!chreventdate\hbox{#2}\fi\hbox{% +\ifdim\!chrperiodeventtextwidth > \z@ \vbox {\hsize\!chrperiodeventtextwidth #3}% +\else #3\fi }}\lower\dimexpr\dp0+\ht0+\!chreventmarkdepth+2pt\relax\hbox{}% } \fi\fi\fi} -\!chrverif\def\setupchronoevent#1{\!chrtraitingargvirgule[#1]{!chreventdefault}} +\!chrverif\def\setupchronoevent{\def\@@string@a{event}\!chrtraiteoneargument\dosetupchronoeventandperiode} +\!chrverif\def\dosetupchronoeventandperiode[#1]#2{\if!chronearg +\def\@@string@a{#1}\fi \!chr@parcoursoptions#2,\end} \!chr@verif\newdimen\!chrstopwidth \!chrverif\def\!chrstopcenteralign{\!chrstopwidth\dimexpr(\hsize-\!chrwidth)/2\relax} @@ -248,3 +306,92 @@ \!chrverif\def\!chrstoprightalign{\!chrstopwidth\dimexpr\hsize-\!chrwidth\relax} \!chrverif\def\stopchronology{\goodbreak\ifcsname !chrstop\!chr@align align\endcsname \csname !chrstop\!chr@align align\endcsname \else\!chrstopwidth\z@\fi \moveright\!chrstopwidth\box\!chrflechebox\endgroup\bigskip} + +\!chr@verif\newif\if!chrverifdefines +\!chrverif\def\!chrverifdefines{\ifcsname chrono\@@string@a\endcsname \!chrverifdefinesfalse \immediate\write16{Attention : macro \expandafter\noexpand\csname chrono\@@string@a\endcsname deja definie.}\expandafter\!gobble \else\!chrverifdefinestrue\expandafter\!chrverifdefines@ux\fi} +\!chrverif\def\!chrverifdefines@ux{\expandafter\def\csname chrono\@@string@a\endcsname} + +\!chrverif\def\definechronoevent#1{% +\def\@@string@a{#1}% +\!chrverifdefines{% +\expandafter\expandafter\expandafter\!chrtraitingargvirgule\expandafter\expandafter\expandafter{\csname !chr#1defaultoptions\endcsname}{!chr@event}% +\!chrtraiteoneargument\dochronoevent}% +\if!chrverifdefines +\expandafter\def\csname !chr#1defaultoptions\endcsname{barre=true, icon=\relax, +markdepth=10pt, textstyle=\relax, mark=true, +date=true, datesseparation=\space, conversionmonth=true, +datestyle=\relax, datesstyle=\relax, year=true, +iconheight=0.5\!chrheight, ifcolorbox=true, colorbox=white, +textwidth=\relax}\fi +\ifnexttoken[{\!chr@defineorsetupoptions}{}} + +\!chrverif\def\definechronoperiode#1{% +\def\@@string@a{#1}% +\!chrverifdefines{% +\expandafter\expandafter\expandafter\!chrtraitingargvirgule\expandafter\expandafter\expandafter{\csname !chr#1defaultoptions\endcsname}{!chr@period}% +\!chrtraiteoneargument\dochronoperiode}% +\if!chrverifdefines +\expandafter\def\csname !chr#1defaultoptions\endcsname{textdepth=15pt, dates=true, +color=\!chrperiodedef@ultcolor, datesstyle=\relax, +startdate=true, stopdate=true, textstyle=\relax, +dateselevation=0pt, ifcolorbox=true, +colorbox=white, bottomdepth=0pt, topheight=\!chrheight, box=false}\fi +\ifnexttoken[{\!chr@defineorsetupoptions}{}} + +\!chrverif\def\!chr@defineorsetupoptions[#1]{% +\!chr@parcoursoptions#1,\end +} + +\!chrverif\def\!chr@parcoursoptions#1,{\!chr@replaceoptions#1,=\end,\ifnexttoken\end\!gobble\!chr@parcoursoptions} +\!chrverif\def\!chr@replaceoptions#1=#2,{\ifx#2\end\relax\else +\def\@@string@f{}% +\def\@@string@c{#1}\def\@@string@d{#2}% +\expandafter\let\expandafter\@@string@@b\csname !chr\@@string@a defaultoptions\endcsname +\expandafter\!chr@replaceoptionsaux\@@string@@b,\end% +\expandafter\let\csname !chr\@@string@a defaultoptions\endcsname\@@string@f +\expandafter\!gobblethree\fi} + +\!chrverif\def\!chr@replaceoptionsaux#1,{\!chr@replaceoptions@ux#1,=\end, \ifnexttoken\end\!gobble\!chr@replaceoptionsaux} +\!chrverif\def\!chr@replaceoptions@ux#1=#2,{% +\ifx#2\end\relax\else +\def\@@string@e{#1} \ifx\@@string@c\@@string@e +\expandafter\def\expandafter\@@string@f\expandafter{\@@string@f , #1=}% +\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\@@string@f\expandafter\expandafter\expandafter{\expandafter\@@string@f\@@string@d}% +\else \expandafter\def\expandafter\@@string@f\expandafter{\@@string@f , #1=#2}\fi\expandafter\!gobblethree\fi +} + + +\!chr@verif\newcount\!chrgraduationcount +\!chr@verif\newcount\!chrgraduationcount@ux +\newif\if!chrgradu@tionevent \!chrgradu@tioneventtrue +\!chrverif\def\chronograduation{\!chrtraitetwoargument\dochronograduation} +\!chrverif\def\dochronograduation[#1][#2]#3{% +\if!chrtwoarg +\def\@@string@a{#2}% +\def\@@string@b{#1}\def\@@string@c{event}\def\@@string@d{periode}% +\ifx\@@string@b\@@string@c \!chrgradu@tioneventtrue \else +\ifx\@@string@b\@@string@d \!chrgradu@tioneventfalse\else \immediate\write16{chronosys : style #1 non défini}\fi\fi +\else \def\@@string@a{#1}\fi +\!chrgraduationcount\!chrstartyear +\if!chrgradu@tionevent +\loop \advance\!chrgraduationcount#3\ifnum\!chrgraduationcount<\!chrstopyear \expandafter\chrono!!eventgradu@tion\expandafter[\@@string@a]{\number\!chrgraduationcount}{}\repeat +\else \def\@@string@e{startdate=true,}% +\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\@@string@e\expandafter\expandafter\expandafter{\expandafter\@@string@e\@@string@a}% +\expandafter\chrono!!periodegradu@tion\expandafter[\@@string@e]{\number\!chrgraduationcount}{#3}{}\restartchronoperiodecolor +\loop \advance\!chrgraduationcount#3\ifnum\!chrgraduationcount<\!chrstopyear \!chrgraduationcount@ux\numexpr\!chrgraduationcount-#3\relax \expandafter\chrono!!periodegradu@tion\expandafter[\@@string@a]{\number\!chrgraduationcount@ux}{\number\!chrgraduationcount}{}\repeat +\fi} + +\!chrverif\def\setupchronograduation{\!chrtraiteoneargument\dosetupchronograduation} +\!chrverif\def\dosetupchronograduation[#1]{% +\if!chronearg +\def\@@string@b{#1}\def\@@string@c{event}\def\@@string@d{periode}% +\ifx\@@string@b\@@string@c \!chrgradu@tioneventtrue \else +\ifx\@@string@b\@@string@d \!chrgradu@tioneventfalse\fi\fi \fi +\if!chrgradu@tionevent \def\@@string@a{[!!eventgradu@tion]}\else\def\@@string@a{[!!periodegradu@tion]}\fi +\expandafter\setupchronoevent\@@string@a} + +\definechronoevent{event} +\definechronoevent{!!eventgradu@tion}[markdepth=5pt,barre=false, ifcolorbox=false] +\definechronoperiode{periode} +\definechronoperiode{!!periodegradu@tion}[dateselevation=-10pt, +startdate=false, ifcolorbox=false] diff --git a/Master/texmf-dist/tex/generic/chronosys/x-chronosys.tex b/Master/texmf-dist/tex/generic/chronosys/x-chronosys.tex index d8e0561d706..db9456b2527 100644 --- a/Master/texmf-dist/tex/generic/chronosys/x-chronosys.tex +++ b/Master/texmf-dist/tex/generic/chronosys/x-chronosys.tex @@ -28,10 +28,55 @@ \catcode`\!=11 \def\!chr@verif#1#2{\ifdefined#2\error!message \fi #1#2} % \defineframed[chreventframedcolorbox][background=color,backgroundcolor=\!chr@eventcolorbox,frame=off,backgroundoffset=\z@,location=low] -\defineframed[chrperiodframedcolorbox][background=color,backgroundcolor=\!chr@periodcolorbox,frame=off,backgroundoffset=-1pt,location=low] +\defineframed[chrperiodframedcolorbox][background=color,backgroundcolor=\!chr@periodcolorbox,frame=off,backgroundoffset=\z@,location=low] \let\!chreventcolorbox\chreventframedcolorbox \let\!chrperiodcolorbox\chrperiodframedcolorbox \input chronosyschr.tex + +\def\setupchronology{\dosingleempty\dosetupchronology} +\def\dosetupchronology[#1]{\iffirstargument \!chrtraitingargvirgule{#1}{!chrdefault}\fi} + +\def\setupchronoevent{\def\@@string@a{event}\dodoubleempty\dosetupchronoeventandperiode} +\def\dosetupchronoeventandperiode[#1][#2]{\iffirstargument +\ifsecondargument +\def\@@string@a{#1}\def\@@string@b{#2}\else\def\@@string@b{#1}\fi \expandafter\!chr@parcoursoptions\@@string@b,\end\fi} + +\def\setupchronoperiode{\def\@@string@a{periode}\dodoubleempty\dosetupchronoeventandperiode} +\def\definechronoperiode{\dosingleempty\dodefinechronoperiode} +\!chrverif\def\dodefinechronoperiode[#1]{% +\iffirstargument +\def\@@string@a{#1}% +\!chrverifdefines{% +\expandafter\expandafter\expandafter\!chrtraitingargvirgule\expandafter\expandafter\expandafter{\csname !chr#1defaultoptions\endcsname}{!chr@period}% +\!chrtraiteoneargument\dochronoperiode}% +\if!chrverifdefines +\expandafter\def\csname !chr#1defaultoptions\endcsname{textdepth=15pt, dates=true, +color=\!chrperiodedef@ultcolor, datesstyle=\relax, +startdate=true, stopdate=true, textstyle=\relax, +dateselevation=0pt, ifcolorbox=true, +colorbox=white, bottomdepth=0pt, topheight=\!chrheight}\fi\fi +\ifnexttoken[{\!chr@defineorsetupoptions}{}} + +\def\definechronoevent{\dosingleempty\dodefinechronoevent} +\!chrverif\def\dodefinechronoevent[#1]{% +\iffirstargument +\def\@@string@a{#1}% +\!chrverifdefines{% +\expandafter\expandafter\expandafter\!chrtraitingargvirgule\expandafter\expandafter\expandafter{\csname !chr#1defaultoptions\endcsname}{!chr@event}% +\!chrtraiteoneargument\dochronoevent}% +\if!chrverifdefines +\expandafter\def\csname !chr#1defaultoptions\endcsname{barre=true, icon=\relax, +markdepth=10pt, textstyle=\relax, mark=true, +date=true, datesseparation=\space, conversionmonth=true, +datestyle=\relax, datesstyle=\relax, year=true, +iconheight=0.5\!chrheight, ifcolorbox=true, colorbox=white, +textwidth=\relax}\fi\fi +\ifnexttoken[{\!chr@defineorsetupoptions}{}} + +\setupchronoevent[!!eventgradu@tion][datesstyle=\tfxx] +\setupchronoperiode[!!periodegradu@tion][datesstyle=\tfxx] + + \catcode`\@=12 \catcode`\!=12 \endinput \ No newline at end of file -- cgit v1.2.3