\documentclass{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{multicol} \usepackage{calc} \usepackage{ifthen} \usepackage{epsfig} %\usepackage{bookman} %\usepackage{booktabs} \usepackage{upquote} % Uncurly the quotes \usepackage{etoolbox} % for backquote fix \usepackage[scaled=0.9]{DejaVuSans} \usepackage[scaled=0.9]{DejaVuSansMono} \usepackage{mdframed} % nice frames \usepackage[nobottomtitles]{titlesec} % better titles \usepackage{enumitem} \usepackage{minted} \usepackage[a4paper,landscape,margin=1cm,includehead,headsep=2ex,nofoot]{geometry} \usepackage{fancyhdr}\usepackage{hyperref} \usepackage{array} \usepackage[none]{hyphenat} \usepackage[document]{ragged2e} \usemintedstyle{tango} \setlist[itemize]{noitemsep, topsep=0pt} % backquote dejavu fix \makeatletter \chardef\straightquote@code=\catcode`' \chardef\backquote@code=\catcode`` \catcode`'=\active \catcode``=\active \patchcmd{\@noligs} {\textasciigrave} {\fixedtextasciigrave} {}{} \newcommand{\fixedtextasciigrave}{% \makebox[.5em]{\fontencoding{TS1}\fontfamily{fvs}\selectfont\textasciigrave}% Vera Sans } \catcode\lq\'=\straightquote@code \catcode\lq\`=\backquote@code \makeatletter % fancyvrb and mdframed stuff \newmdenv[bottomline=false,rightline=false]{topleft} \newmdenv[topline=false,leftline=false]{bottomright} \DefineVerbatimEnvironment{Verbacorner}{Verbatim}{} \surroundwithmdframed[bottomline=false,rightline=false]{Verbacorner} \fvset{commandchars=@\{\}} \ifthenelse{\lengthtest { \paperwidth = 11in}} { \geometry{top=.5in,left=.5in,right=.5in,bottom=.5in} } {\ifthenelse{ \lengthtest{ \paperwidth = 297mm}} {\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} } {\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} } } \pagestyle{empty} %% \makeatletter %% \renewcommand{\section}{\@startsection{section}{1}{0mm}% %% {-1ex plus -.5ex minus -.2ex}% %% {0.5ex plus .2ex}%x %% {\normalfont\large\bfseries}} %% \renewcommand{\subsection}{\@startsection{subsection}{2}{0mm}% %% {-1ex plus -.5ex minus -.2ex}% %% {0.5ex plus .2ex}% %% {\normalfont\normalsize\bfseries}} %% \renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{0mm}% %% {-1ex plus -.5ex minus -.2ex}% %% {1ex plus .2ex}% %% {\normalfont\small\bfseries}} %% \makeatother %% \makeatletter %% \let\origsection\section %% \renewcommand\section{\vspace{5em}\origsection} %% \makeatother % Don't print section numbers \setcounter{secnumdepth}{0} \setlength{\parindent}{0pt} \setlength{\parskip}{1ex} \pagestyle{fancy} \newcommand{\makeheader}[3]{ \fancyhead[L]{ \begin{minipage}{30pt} \vspace{-3pt} \includegraphics[width=\textwidth]{logo.pdf} \end{minipage} } \fancyhead[C]{ \LARGE{#1} } \fancyhead[R]{ {\scriptsize #2 $\cdot$ Révision \#1 $\cdot$ \copyright\ \the\year$\quad$ %% \begin{minipage}{30pt} %% \vspace{-3pt} %% \includegraphics[width=\textwidth]{logo.pdf} %defined at bottom %% \end{minipage} }} \fancyfoot[L]{} \fancyfoot[C]{} \fancyfoot[R]{} } \renewcommand\headrule{} \newenvironment{absolutelynopagebreak} {\par\nobreak\vfil\penalty0\vfilneg \vtop\bgroup} {\par\xdef\tpd{\the\prevdepth}\egroup \prevdepth=\tpd} \newcommand{\vb}{\usefont{T1}{DejaVuSansMono-TLF}{b}{n}} \newenvironment{libcomments}{\begin{itemize}[topsep=-10000pt]}{\end{itemize}} \setlength{\headheight}{20.1pt} \setlength{\headsep}{10pt} \renewcommand{\familydefault}{\sfdefault} % everything sans-serif %Url handling \hypersetup{ colorlinks=true, urlcolor=black, linkcolor=black, citecolor=black } % font size -> set to equivalent to footnotesize of 10 pt % it affect only the \\normalsize command, all are still relative to default's % article one (10pt) \newcommand\articlenormalsize{\fontsize{10pt}{12pt}\selectfont} \renewcommand\normalsize{\footnotesize} % redefine sections padding \makeatletter \renewcommand{\section}{\@startsection{section}{1}{0mm}% {-1ex plus -.5ex minus -.2ex}% {1ex}% {\normalfont\articlenormalsize\bfseries}} \renewcommand{\subsection}{\@startsection{subsection}{2}{4mm}% {-1ex}% {0.5ex}% {\normalfont\articlenormalsize\bfseries}} \renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{16mm}% {-1ex plus -.5ex minus -.2ex}% {1ex plus .2ex}% {\normalfont\small\bfseries}} \makeatother %\pagestyle{empty} % set section counter to 0 \setcounter{secnumdepth}{0} % Text at right %\raggedright \renewcommand{\baselinestretch}{0.9} % Set up the interline space in tables \renewcommand{\arraystretch}{0.0} % https://github.com/gpoore/minted/issues/82 \makeatletter \newenvironment{catala}{% \VerbatimEnvironment \let\FV@ListVSpace\relax \begin{minted}[autogobble]{catala_fr}}% {\end{minted}} \makeatother \setlength{\columnsep}{12pt} \setlength{\columnseprule}{.1pt} \begin{document} \makeheader{\MakeUppercase{La syntaxe de Catala} \hspace{2em}\small version française}{v0.8.0}{1} % warning: this is repeated for p.2 % \begin{center} % 2022-12-15 % \hfill % {\Huge\bfseries\sffamily % Catala Syntax Cheat Sheet} % \hfill % v.0.8.0 % \end{center} % \hrule \null \begin{multicols}{3} \newlength\cola \setlength\cola{\dimexpr .65\columnwidth -2\tabcolsep} \newlength\colb \setlength\colb{\dimexpr .35\columnwidth -2\tabcolsep} \section{Programmation littéraire} \begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}} \begin{catala} # Titre ### Sous-sous-titre \end{catala} & En-têtes \\ \begin{catala} # Article 1 | JORFARTI000012345678 # Article 2 | LEGIARTI000012345678 # Décision 3 | CETATEXT000012345678 \end{catala} & Référence au journal officiel \\ \begin{catala} ```catala ```catala-metadata ``` ``` \end{catala} & Bloc de code / métadonnées \\ \begin{catala} > Inclusion: foo.catala_en \end{catala} & Inclusion de fichier \\ \end{tabular} \newcommand*\FancyVerbStartString{\PYG{l+s}{```catala}} \newcommand*\FancyVerbStopString{\PYG{l+s}{```}} \section{Littéraux et types} \begin{tabular}{@{}p{\cola}p{\colb}@{}} \begin{catala} ```catala vrai faux ``` \end{catala} & \begin{catala} ```catala booléen ``` \end{catala} \\ \begin{catala} ```catala 65536 ``` \end{catala} & \begin{catala} ```catala entier ``` \end{catala} \\ \begin{catala} ```catala 65536,262144 37% ``` \end{catala} & \begin{catala} ```catala décimal ``` \end{catala} \\ \begin{catala} ```catala 1 234 567,89€ ``` \end{catala} & \begin{catala} ```catala argent ``` \end{catala} \\ \begin{catala} ```catala |2021-01-31| ``` \end{catala} & \begin{catala} ```catala date ``` \end{catala} \\ \begin{catala} ```catala 254 jour 4 mois 1 an ``` \end{catala} & \begin{catala} ```catala durée ``` \end{catala} \\ \begin{catala} ```catala [ 12; 24; 36 ] ``` \end{catala} & \begin{catala} ```catala collection entier ``` \end{catala} \\ \begin{catala} ```catala f de x, y égal à x * y / 12,0€ ``` \end{catala} & \begin{catala} ```catala décimal dépend de x contenu argent, y contenu décimal ``` \end{catala} \\ \begin{catala} ```catala Struct1 { -- chp1: 9 -- chp2: 7% } ``` \end{catala} & \begin{catala} ```catala Struct1 ``` \end{catala} \\ \begin{catala} ```catala Cas1 contenu 12 Cas2 ``` \end{catala} & \begin{catala} ```catala Énum1 ``` \end{catala} \\ \end{tabular} \section{Expressions} \begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}} \begin{catala} ```catala soit x égal à 36 - 5 dans ... ``` \end{catala} & Définition locale \\ \begin{catala} ```catala selon expr sous forme -- Cas1 de x : ... -- Cas2 : ... -- n'importe quel : ... ``` \end{catala} & Filtrage par motif \\ \begin{catala} ```catala expr sous forme Cas1 expr sous forme Cas1 de x et x >= 2 ``` \end{catala} & Test de filtrage\newline avec variable optionnelle \\ \begin{catala} ```catala struc1.chp2 ``` \end{catala} & Champ de structure \\ \begin{catala} ```catala f de 44,50€, 1/3 ``` \end{catala} & Appel de fonction \\ \begin{catala} ```catala ss_ch1.var0 ``` \end{catala} & Var. de s/s-ch. d'app. \\ \begin{catala} ```catala résultat de Chp1 avec { -- chp1: 9 -- chp2: 15% } ``` \end{catala} & Appel direct de champ d'application \\ \begin{catala} ```catala si ... alors ... sinon ... ``` \end{catala} & Branchement \\ \end{tabular} \section{Déclaration des métadonnées} \begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}} \begin{catala} ```catala déclaration structure Struct1: donnée chp1 contenu entier donnée chp2 contenu décimal \end{catala} & Déclaration de structure \\ \begin{catala} ```catala déclaration énumération Énum1: -- Cas1 contenu entier -- Cas2 ``` \end{catala} & Déclaration d'énumération \\ \begin{catala} ```catala déclaration champ d'application Chp1: interne var1 contenu entier interne var2 condition ss_ch1 champ d'application Chp0 ``` \end{catala} & Déclaration de champ d'application \\ \begin{catala} ```catala interne var1 contenu ... résultat var3 contenu ... entrée var4 contenu ... entrée résultat var5 contenu ... contexte var6 contenu ... contexte résultat var7 contenu ... ``` \end{catala} & Qualificateurs d'entrée-sortie \\ \begin{catala} ```catala interne var1 contenu ... état avant état après ``` \end{catala} & Transitions d'état \\ \begin{catala} ```catala date arrondi croissant # ou decroissant ``` \end{catala} & Mode arrondi dates \\ \begin{catala} ```catala déclaration const contenu décimal égal à 17.1 ``` \end{catala} & Définition globale \\ \begin{catala} ```catala déclaration carré contenu décimal dépend de x contenu décimal égal à x * x ``` \end{catala} & Définition de fonction globale \\ \end{tabular} \section{Opérations} \begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}} \begin{catala} ```catala non a a et b a ou b # "ou à défaut" a ou bien b # ou exclusif ``` \end{catala} & Opérateurs logiques \\ \begin{catala} ```catala - a a + b a - b a * b a / b ``` \end{catala} & Arithmétique \\ \begin{catala} ```catala a = b a != b a > b a < b a >= b a <= b ``` \end{catala} & Comparaisons \\ \begin{catala} ```catala décimal de 44 argent de 23,15 ``` \end{catala} & Conversions \\ \begin{catala} ```catala arrondi de 9,99€ ``` \end{catala} & Arrondis \\ \begin{catala} ```catala accès_jour de ... accès_mois de ... accès_année de ... ``` \end{catala} & Éléments de dates \\ \begin{catala} ```catala a +! b # entier a +. b # décimal a +€ b # argent a +^ b # durée ``` \end{catala} & Opérateurs à types explicites \\ \end{tabular} \columnbreak \section{Définition de champ d'application} \begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}} \begin{catala} ```catala champ d'application Chp1: ... ``` \end{catala} & Utilisation \\ \begin{catala} ```catala champ d'application Chp1 sous condition var1 >= 2: ... ``` \end{catala} & Avec condition générale \\ \begin{catala} ```catala définition var1 égal à ... ``` \end{catala} & Déf. inconditionnelle \\ \begin{catala} ```catala définition var1 sous condition ... conséquence égal à ... ``` \end{catala} & Définition conditionnelle \\ \begin{catala} ```catala règle var2 sous condition var1 >= 2 conséquence rempli ``` \end{catala} & Règle\newline(définition de condition) \\ \begin{catala} ```catala conséquence non rempli ``` \end{catala} & Règle négative \\ \begin{catala} ```catala définition f de x égal à ... ``` \end{catala} & Déf./règle fonction \\ \begin{catala} ```catala étiquette étq1 définition var1 ... ``` \end{catala} & Déf./règle étiquetée \\ \begin{catala} ```catala exception étq1 définition var1 ... ``` \end{catala} & Exc. à déf. étiquetée \\ \begin{catala} ```catala exception définition var1 ... ``` \end{catala} & Exception à implicite \\ \begin{catala} ```catala définition var1 état avant égal à ... ``` \end{catala} & Définition d'états \\ \begin{catala} ```catala assertion ... ``` \end{catala} & Assertion \\ \end{tabular} \section{Opérations sur les collections} \begin{tabular}{@{}p{\cola}>{\slshape}p{\colb}@{}} \begin{catala} ```catala coll contient 3 ``` \end{catala} & Test de présence \\ \begin{catala} ```catala nombre de coll ``` \end{catala} & Cardinal \\ \begin{catala} ```catala existe x parmi coll tel que x >= 2 ``` \end{catala} & Test d'existence \\ \begin{catala} ```catala pour tout x parmi coll on a x >= 2 ``` \end{catala} & Test pour tout \\ \begin{catala} ```catala (x + 2) pour x parmi coll ``` \end{catala} & Application un-à-un \\ \begin{catala} ```catala x parmi coll tel que x >= 2 ``` \end{catala} & Filtrage \\ \begin{catala} ```catala (x - 2) pour x parmi coll tel que x >= 2 ``` \end{catala} & Filtrage + application \\ \begin{catala} ```catala coll1 ++ coll2 ``` \end{catala} & Réunion \\ \begin{catala} ```catala somme entier coll ``` \end{catala} & Aggrégation \\ \begin{catala} ```catala nombre de coll ``` \end{catala} & Comptage \\ \begin{catala} ```catala maximum de coll ou si collection vide alors -1 ``` \end{catala} & Extremums \\ \begin{catala} ```catala x parmi coll tel que (x * x) est minimum ou si collection vide alors -1 ``` \end{catala} & Élément selon extremum \\ \end{tabular} \end{multicols} \end{document}