# Hey, Emacs! This is a -*- mode: org -*- file! #+TITLE: Support for the newsletter “La Lettre GUTenberg” #+AUTHOR: Association GUTenberg #+EMAIL: secretariat@gutenberg-asso.fr #+DESCRIPTION: ... #+KEYWORDS: ... #+LANGUAGE: en #+OPTIONS: num:t toc:nil title:nil #+LATEX_COMPILER: lualatex #+LaTeX_CLASS: letgut #+LaTeX_HEADER: \setmainfont{KpRoman} #+LaTeX_HEADER: \setsansfont{KpSans} #+LaTeX_HEADER: \setmonofont[Scale = MatchLowercase]{RobotoMono} #+LaTeX_HEADER: \letgutsetup{editorial=false} #+LaTeX_HEADER: \input{listings-conf} # #+LaTeX_HEADER: \input{codehigh-conf} #+LaTeX_HEADER: \letgutsetup{detailedtoc} # #+LaTeX_HEADER: \letgutsetup{editorial=false,final} #+PROPERTY: header-args :padline no :mkdirp yes :tangle ../../../tex/lualatex/letgut/letgut.cls :exports both :noweb yes :eval always #+export_file_name: ../../../doc/lualatex/letgut/letgut-code * Ctanomat file :noexport: :PROPERTIES: :CUSTOM_ID: Ctanomatfile-2uoc55h0jlj0 :END: We create here a ~ctanomat~ description file in order to simplify the upload of new versions of the class on CTAN. #+begin_src markdown :tangle ../../../letgut.pkg % This is a description file for ctan-o-mat. % It manages uploads of a package to % CTAN -- the Comprehensive TeX Archive Network. % % The syntax is roughly oriented towards (La)TeX. % Two form of the macros are used. The simple macros take one argument % in braces. Here the argument may not contain embedded macros. % % The second form uses an environment enclosed in \begin{}/\end{}. % In the long text fields logo macros can be used. % % You should enter your values between the begin and the end of the % named type. % ------------------------------------------------------------------------- % This field contains the CTAN id of the package. % The value is optional. % The value is restricted to 32 characters. \pkg{letgut} % ------------------------------------------------------------------------- % This field contains the version of the package. % The value is optional. % The value is restricted to 32 characters. \version{0.9.12 2024-10-30} % ------------------------------------------------------------------------- % This field contains the name of the author(s). % The value is optional. % The value is restricted to 128 characters. \author{Association GUTenberg} % ------------------------------------------------------------------------- % This field contains the email address of the uploader. % The value is an email address. % The value is restricted to 255 characters. \email{secretariat@gutenberg-asso.fr} % ------------------------------------------------------------------------- % This field contains the name of the uploader. % The value is restricted to 255 characters. \uploader{Denis Bitouzé} % ------------------------------------------------------------------------- % This field contains the directory on CTAN. % The value is optional. % The value is restricted to 255 characters. \ctanPath{/macros/luatex/latex/letgut} % ------------------------------------------------------------------------- % This field contains the license. % The value is optional. % The value is restricted to 2048 characters. % Multiple values are allowed. \license{lppl1.3c} % ------------------------------------------------------------------------- % This field contains the URL of the home page. % The value is optional. % The value is a URL. % The value is restricted to 255 characters. % Multiple values are allowed. \home{} % ------------------------------------------------------------------------- % This field contains the URL of the bug tracker. % The value is optional. % The value is a URL. % The value is restricted to 255 characters. % Multiple values are allowed. \bugtracker{https://framagit.org/gutenberg/letgut/-/issues} % ------------------------------------------------------------------------- % This field contains the support channel. % The value is optional. % The value is a URL. % The value is restricted to 255 characters. % Multiple values are allowed. \support{} % ------------------------------------------------------------------------- % This field contains the version management. % The value is optional. % The value is a URL. % The value is restricted to 255 characters. % Multiple values are allowed. \repository{https://framagit.org/gutenberg/letgut/} % ------------------------------------------------------------------------- % This field contains the developer's channel. % The value is optional. % The value is a URL. % The value is restricted to 255 characters. % Multiple values are allowed. \development{https://framagit.org/gutenberg/letgut/-/merge_requests} % ------------------------------------------------------------------------- % This field contains the update indicator; true for update. % The value is optional. % The value is restricted to 8 characters. \update{true} % ------------------------------------------------------------------------- % This field contains the topics id. % The value is optional. % The value is restricted to 1024 characters. % Multiple values are allowed. \topic{} % ------------------------------------------------------------------------- % This field contains the text for the mail announcement. % The value is optional. % The value is restricted to 8192 characters. \begin{announcement} ### Fixed Fatal error in case of to be attached files not found \end{announcement} % ------------------------------------------------------------------------- % This field contains the one-liner for the package. % The value is optional. % The value is restricted to 128 characters. \summary{Class for the newsletter “La Lettre GUTenberg” of the French TeX User Group GUTenberg} % ------------------------------------------------------------------------- % This field contains the descriptive abstract for the package. % The value is optional. % The value is restricted to 4096 characters. \begin{description} # English The French TeX User Group GUTenberg has been publishing “The GUTenberg Letter”, its irregular newsletter, since February 1993. For this purpose, a dedicated, in-house (La)TeX class was gradually created but, depending on new needs and on the people who were publishing the Newsletter, its development was somewhat erratic; in particular, it would not have been possible to publish its code as it was. In addition, its documentation was non-existent. The Board of Directors of the association, elected in November 2020, wished to provide a better structured, more perennial and documented class, able to be published on the CTAN. This is now done with the present `letgut` class. # French L'association GUTenberg publie « La Lettre GUTenberg », son bulletin irrégulomestriel, depuis février 1993. Pour ce faire, une classe (La)TeX dédiée, maison, a peu à peu vu le jour mais, au gré des nouveaux besoins et des personnes qui ont assuré la publication de la Lettre, son développement a été quelque peu erratique ; il n'aurait notamment pas été possible de publier son code en l'état. En outre, sa documentation était inexistante. Le Conseil d'Administration de l'association, élu en novembre 2020, a souhaité fournir une classe mieux structurée, davantage pérenne et documentée, à même d'être publiée sur le CTAN. C'est désormais chose faite avec la présente classe `letgut`. \end{description} % ------------------------------------------------------------------------- % This field contains the note to the CTAN upload managers. % The value is optional. % The value is restricted to 2048 characters. \begin{note} \end{note} % ------------------------------------------------------------------------- % This field contains the archive file. % The value is the file name of the archive to be uploaded. % It may have a relative or absolute directory. \file{../dtx-forge/letgut.zip} #+end_src * Changelog file :noexport: :PROPERTIES: :CUSTOM_ID: Changelogfile-2buc55h0jlj0 :END: #+begin_src markdown :tangle ../../../doc/lualatex/letgut/CHANGELOG.md # Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [0.9.12] - 2024-10-30 ### Fixed Fatal error in case of to be attached files not found ### Added License in the README file ## [0.9.11] - 2024-10-23 ### Fixed - Bibliographic files not attached to the PDF ## [0.9.10] - 2024-10-07 ### Changed - Multiple rebuses handled - Paper clips (links to source files of the articles) not in the magin anymore and separated by spaces - Watermark letter and scale can now be specified ### Fixed - Wrong output with \terminal - Title of publication in small capitals - Options of `letgut-banner` never taken in account - Not all included graphics attached to the PDF - Variables wrongly local or not reset - `\citeauthor` displayed family name in small caps ## [0.9.9] - 2024-03-07 ### Fixed Private scratch variables not declared. ## [0.9.8] - 2024-02-29 ### Changed - Drop use of l3keys2e, as advised. - Announcements possibly neither in the ToC nor in the bookmarks. ### Fixed Floats not outside the article they belong to. ## [0.9.7] - 2023-05-21 ### Changed Announcement's title and toc entry possibly different (backward compatibility broken!) ### Fixed `tabularray`'s needed library added. ## [0.9.6] - 2023-01-14 ### Fixed Hot fix for the attachment to the Lettre's PDF of its source files. ## [0.9.5] - 2023-01-13 ### Added - Files (`.tex` source, images files, bibliographic files, etc.) used to typeset an article possibly attached to the Lettre's PDF. - Starred version of `\inputarticle` that prevents the previous feature. - Boolean option that (un)forces the previous feature. - Plural forms `\lettres` and `\lettresgut` of `\lettre` and `\lettregut`. - Shortcuts for “(a|A)ssociation GUTenberg”. - Starred versions of `\person` and `\author` that sort the lists of persons/authors in alphabetic order. - Environment for announcements. - Environments and commands for rebus and their solutions. ### Changed - `⅛` replaced by `™` as a short equivalent of ~\lstinline~ (the former is considered as math if ~unicode-math~ is loaded). - Documentation updated. ### Fixed Several bugs and sub-optimalities. ## [0.9.4] - 2022-10-03 ### Added - Command `\lettrenumber` that displays various Lettre numbers related to the one of the current issue. - Options of `\lettre` and `\lettregut` that add various Lettre numbers related to the one of the current issue. - Command `\Ucode` for points and names of Unicode characters. ### Changed - Documentation improved. ## [0.9.3] - 2022-09-02 ### Changed - Local conf. file doesn't require anymore to start with \ExplSyntaxOff in some instances. - Documentation improved. ## [0.9.2] - 2022-06-18 ### Added - Listings for commands in terminals. - Aliases of frequently used commands. - New commands for frequently used terms or expressions. - Command for specifying LaTeX packages that benefit from syntax highlighting. - Own ~listings~' language driver file for LaTeX packages syntax highlighting. - Commands for keyboard keys of accentuated characters. - ~detailedtoc~ option for Lettre's structure checking. - Mimic the multiple option of the footmisc package. - Command ~\inputarticle~ (instead of ~\input~) for the input of articles. - ⅛ as a short equivalent of ~\lstinline~. - Some tweaks and improvements. ### Changed - Last names of persons and authors not in small caps anymore. - \tl isn't an acronym anymore and now typesets “TeX Live”. - All the acronyms reset at the beginning of each ~\inputarticle~-ed article. - All options now possibly load-time ones. - Unlikely to change input files searched: 1. in the parent directory if not in the current one, 2. in the TDS. - Right ISSN in case of “paper” version of la Lettre. ### Fixed Several bugs. ## [0.9.1] - 2022-03-22 ### Changed File renamed (Karl Berry request). ## [0.9] - 2022-03-18 ### Added First public testing release. #+end_src * Readme file :noexport: :PROPERTIES: :CUSTOM_ID: Readmefile-8xuc55h0jlj0 :END: #+begin_src markdown :tangle ../../../doc/lualatex/letgut/README.md letgut - Support for the newsletter “La Lettre GUTenberg” ========================================================= About ----- This bundle includes a LaTeX class, a `.sty` file and an acronym file dedicated to the newsletter “La Lettre GUTenberg” of GUTenberg, the French TeX User Group. Release ------- 2024-10-30 v0.9.12 Development ----------- Follow development, submit issues and suggest improvements at https://framagit.org/gutenberg/letgut. License ------- Released under the LaTeX Project Public License v1.3c or later. See https://www.latex-project.org/lppl.txt#+end_src. #+end_src * How to :noexport: :PROPERTIES: :CUSTOM_ID: Howto-565g55h0jlj0 :END: We explain in a \file*{HOWTO.md} file how to: - tangle the \file*{letgut.cls} and \file*{letgut-banner.sty}, - build the: - documented codes \file*{letgut-code.pdf} and \file*{letgut-banner-code.pdf} of the class and the package, - \file*{letgut.pdf} of the class, from the \software[https://orgmode.org/]{Org Mode} source files \file*{letgut.org} and \file*{letgut-banner.org}. #+begin_src markdown :tangle HOWTO.md :exports none In order to: - tangle the `letgut.cls` and `letgut-banner.sty` files, - build the documentations `letgut-code.pdf` and `letgut-banner-code.pdf` of the codes, from the Org Mode source files `letgut.org` and `letgut-banner.org`: - it is necessary to have a reasonably recent version of Emacs, - it is then sufficient to run (in a directory containing the `build-letgut.el` file to be found in the current directory): - for the `letgut` class: emacs -Q letgut.org --batch -l build-letgut.el -f org-babel-tangle --kill emacs -Q letgut.org --batch -l build-letgut.el -f org-latex-export-to-pdf --kill - for the `letgut-banner` package: emacs -Q letgut-banner.org --batch -l build-letgut.el -f org-babel-tangle --kill emacs -Q letgut-banner.org --batch -l build-letgut.el -f org-latex-export-to-pdf --kill This creates the files `letgut.cls`, `letgut-banner.sty`, `letgut-code.tex` and `letgut-banner-code.tex`. One can then build the PDF files `letgut-code.pdf` and `letgut-banner-code.pdf` by running `latexmk` on each of the corresponding `.tex` files in a directory containing the following files to be found in the `.../doc/lualatex/letgut` directory: `latexmkrc`, `letgut.bib`, `letgut-code.pdf`, `letgut-code.tex`, `letgut.pdf`, `letgut.tex`, `listings-conf.tex`, `localconf.tex`, `README.md`, `xindex-letgut.lua`. Likewise, the user documentation `letgut.pdf` is built by running `latexmk` on the corresponding `.tex` file (which doesn't derive from an Org Mode file). #+end_src * Identification :PROPERTIES: :CUSTOM_ID: Identification-mn5g55h0jlj0 :END: #+begin_src latex % This is file `letgut.cls', % generated with the Emacs Org-babel utility. % % The original source file is letgut.org % % -------:| ---------------------------------------------------- % letgut:| Class for the newsletter “La Lettre GUTenberg” % Author:| Association GUTenberg % E-mail:| secretariat@gutenberg-asso.fr % License:| Released under the LaTeX Project Public License % | v1.3c or later % See:| http://www.latex-project.org/lppl.txt % % Copyright (C) 1994-2024 by Association GUTenberg % % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License (LPPL), either % version 1.3c of this license or (at your option) any later % version. The latest version of this license is in the file: % % http://www.latex-project.org/lppl.txt % % This work is “maintained” (as per LPPL maintenance status) % by Association GUTenberg. % #+end_src * Debugging :PROPERTIES: :CUSTOM_ID: Debugging-846g55h0jlj0 :END: #+begin_src latex % \RequirePackage[ % , check-declarations % , enable-debug % , backend=luatex % ]{expl3} #+end_src * Implementation :PROPERTIES: :CUSTOM_ID: Implementation-vy6g55h0jlj0 :END: These document classes can only be used with \LaTeXe, so we make sure that an appropriate message is displayed when another \TeX{} format is used. #+begin_src latex \NeedsTeXFormat{LaTeX2e}[2020-10-01] #+end_src We define some constant token lists immediately useful. #+begin_src latex \ExplSyntaxOn \tl_const:Nn \c__letgut_Lettre_plain_tl { Lettre } \tl_const:Nn \c__letgut_Lettre_tl { \emph{ \c__letgut_Lettre_plain_tl } } \tl_const:Nn \c__letgut_Lettres_tl { \c__letgut_Lettre_tl \emph{ s } } \tl_const:Nn \c__letgut_gutenberg_tl { GUTenberg } \tl_const:Nn \c__letgut_association_tl { association } \tl_const:Nn \c__letgut_Lettre_gutenberg_plain_tl { \c__letgut_Lettre_plain_tl~\c_space_tl \c__letgut_gutenberg_tl } \tl_const:Nn \c__letgut_Lettre_gutenberg_tl { \c__letgut_Lettre_tl~\c_space_tl \c__letgut_gutenberg_tl } \tl_const:Nn \c__letgut_la_lettre_gutenberg_plain_tl { la~ \c__letgut_Lettre_gutenberg_plain_tl } \tl_const:Nn \c__letgut_la_lettre_gutenberg_tl { la~ \c__letgut_Lettre_gutenberg_tl } \tl_const:Nn \c__letgut_La_lettre_gutenberg_tl { \text_titlecase_first:n \c__letgut_la_lettre_gutenberg_tl } \ExplSyntaxOff #+end_src Now, we can announce the class name and its version: #+begin_src latex \ProvidesExplClass{letgut} {2024-10-30} {0.9.12} { Class for the newsletter “The GUTenberg Letter” } #+end_src ** Messages :PROPERTIES: :CUSTOM_ID: ImplementationMessages-xg7g55h0jlj0 :END: We specify the messages come from a class, which is letgut (see \url{https://github.com/latex3/latex3/issues/887}). #+begin_src latex \prop_gput:Nnn \g_msg_module_type_prop { letgut } { Class } #+end_src Some messages are declared for future use. #+begin_src latex \msg_new:nnn{letgut}{Wrong~engine}{ The~ letgut~ class~ requires~ LuaTeX.\\\\ You~ must~ change~ your~ typesetting~ engine~ to~ “lualatex”~ instead~ of~ “latex”~ or~ “pdflatex” or~ “xelatex”. } \msg_new:nnn{letgut}{Existing~command}{ The~ command~ \c_backslash_str \text_lowercase:n{#1}~ already~ exists~ and~ has~ not~ be~ overwritten~ by~ \token_to_str:N \letgutacro{#1}{...}.~ The~ corresponding~ acronym~ has~ to~ be~ used~ e.g.~ like~ this:~ \token_to_str:N \ac{ \text_lowercase:n{#1} }. } \msg_new:nnn{letgut}{Not~month~iso~date}{ The~ supplied~ date~(“#1”)~ isn't~ at~ the~ month~ iso~ date~ format~ (YYYY-MM):~ it~ will~ be~ printed~ as~ it~ is. } \msg_new:nnn{letgut}{Banner~file~not~provided}{ No~ `\c__letgut_banner_file_tl.pdf'~ file~ provided:~ the~ banner~ will~ be~ automatically~ created. } \msg_new:nnn{letgut}{Editorial~file~missing}{ File~`\c__letgut_editorial_file_tl.tex'~missing!~ The~ editorial~ will~ be~ missing. } \msg_new:nnn{letgut}{Informations~file~missing}{ File~ `\c__letgut_informations_gutenberg_file_tl.tex'~ missing!~ The~ informations~ about~ \c__letgut_gutenberg_tl\c_space_tl~ will~ be~ missing. } \msg_new:nnn{letgut}{pagecolor~inoperative~with~paper~option}{ The~ `pagecolor=#1`~ option~ is~ inoperative~ with~ the~ `paper`~ option:~ the~ color~ of~ the~ page~ will~ remain~ white. } \msg_new:nnn{letgut}{frontcover-missing}{ You~ didn't~ use~ the~ `frontcover`~ option~ for~ the~ bookreview~ “#1”,~ so~ the~ book~ cover~image~ will~ be~ missing:~ are~ you~ sure? } \msg_new:nnn{letgut}{frontcover-file-not-found}{ The~ book~ cover~ image~ `#2`~ you~ specified~ via~ the~ `frontcover`~ option~ for~ the~ bookreview~ “#1”~ cannot~ be~ found. } #+end_src ** Engine checking :PROPERTIES: :CUSTOM_ID: ImplementationEnginechecking-lz7g55h0jlj0 :END: #+begin_src latex \sys_if_engine_luatex:F { \msg_fatal:nn{letgut}{Wrong~engine} } #+end_src ** Declarations :PROPERTIES: :CUSTOM_ID: ImplementationDeclarations-3j8g55h0jlj0 :END: **** Scratch variables :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsScratchvariables-onuajq01p4k0 :END: #+begin_src latex \bool_new:N \g__letgut_tmpa_bool \bool_new:N \g__letgut_tmpb_bool \box_new:N \g__letgut_tmpa_box \box_new:N \g__letgut_tmpb_box \clist_new:N \g__letgut_tmpa_clist \clist_new:N \g__letgut_tmpb_clist \coffin_new:N \g__letgut_tmpa_coffin \coffin_new:N \g__letgut_tmpb_coffin \dim_new:N \g__letgut_tmpa_dim \dim_new:N \g__letgut_tmpb_dim \fp_new:N \g__letgut_tmpa_fp \fp_new:N \g__letgut_tmpb_fp \int_new:N \g__letgut_tmpa_int \int_new:N \g__letgut_tmpb_int \ior_new:N \g__letgut_tmpa_ior \ior_new:N \g__letgut_tmpb_ior \iow_new:N \g__letgut_tmpa_iow \iow_new:N \g__letgut_tmpb_iow \muskip_new:N \g__letgut_tmpa_muskip \muskip_new:N \g__letgut_tmpb_muskip \prop_new:N \g__letgut_tmpa_prop \prop_new:N \g__letgut_tmpb_prop \regex_new:N \g__letgut_tmpa_regex \regex_new:N \g__letgut_tmpb_regex \seq_new:N \g__letgut_tmpa_seq \seq_new:N \g__letgut_tmpb_seq \skip_new:N \g__letgut_tmpa_skip \skip_new:N \g__letgut_tmpb_skip \str_new:N \g__letgut_tmpa_str \str_new:N \g__letgut_tmpb_str \tl_new:N \g__letgut_tmpa_tl \tl_new:N \g__letgut_tmpb_tl \bool_new:N \l__letgut_tmpa_bool \bool_new:N \l__letgut_tmpb_bool \box_new:N \l__letgut_tmpa_box \box_new:N \l__letgut_tmpb_box \clist_new:N \l__letgut_tmpa_clist \clist_new:N \l__letgut_tmpb_clist \coffin_new:N \l__letgut_tmpa_coffin \coffin_new:N \l__letgut_tmpb_coffin \dim_new:N \l__letgut_tmpa_dim \dim_new:N \l__letgut_tmpb_dim \fp_new:N \l__letgut_tmpa_fp \fp_new:N \l__letgut_tmpb_fp \int_new:N \l__letgut_tmpa_int \int_new:N \l__letgut_tmpb_int \ior_new:N \l__letgut_tmpa_ior \ior_new:N \l__letgut_tmpb_ior \iow_new:N \l__letgut_tmpa_iow \iow_new:N \l__letgut_tmpb_iow \muskip_new:N \l__letgut_tmpa_muskip \muskip_new:N \l__letgut_tmpb_muskip \prop_new:N \l__letgut_tmpa_prop \prop_new:N \l__letgut_tmpb_prop \regex_new:N \l__letgut_tmpa_regex \regex_new:N \l__letgut_tmpb_regex \seq_new:N \l__letgut_tmpa_seq \seq_new:N \l__letgut_tmpb_seq \skip_new:N \l__letgut_tmpa_skip \skip_new:N \l__letgut_tmpb_skip \str_new:N \l__letgut_tmpa_str \str_new:N \l__letgut_tmpb_str \tl_new:N \l__letgut_tmpa_tl \tl_new:N \l__letgut_tmpb_tl #+end_src *** Booleans :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsBooleans-s09g55h0jlj0 :END: - For testing the emptyness of the title. #+begin_src latex \bool_new:N \g__letgut_title_empty_bool #+end_src - For the paper (or not) output. #+begin_src latex \bool_new:N \g__letgut_paper_bool #+end_src - For testing whether we currently are in a footnote or not. #+begin_src latex \bool_new:N \l__letgut_in_footnote_bool #+end_src - For testing whether we currently ask the draft or the final version. #+begin_src latex \bool_new:N \g__letgut_draft_bool #+end_src - For the included files to (not) be attached. #+begin_src latex \bool_new:N \g__letgut_included_files_attached_bool #+end_src - For the acronym definitions file to (not) be attached. #+begin_src latex \bool_new:N \g__letgut_acronyms_file_attached_bool #+end_src - For the listings language file to (not) be attached. #+begin_src latex \bool_new:N \g__letgut_lstlanguage_file_attached_bool #+end_src *** Dimensions :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsDimensions-gj9g55h0jlj0 :END: - Geometry of the document #+begin_src latex \dim_const:Nn \c__letgut_textheight_dim { 25cm } \dim_const:Nn \c__letgut_textwidth_dim { 14cm } \dim_const:Nn \c__letgut_lmargin_dim { 5cm } \dim_const:Nn \c__letgut_tmargin_dim { 2.92cm } % \dim_const:Nn \c__letgut_tmargin_dim { 3cm } \dim_const:Nn \c__letgut_head_dim { 0.6cm } \dim_const:Nn \c__letgut_headsep_dim { 0.82cm } % \dim_const:Nn \c__letgut_headsep_dim { 0.9cm } \dim_const:Nn \c__letgut_marginparwidth_dim { 3.74cm } #+end_src - Horizontal offset of the headers and the sections titles: #+begin_src latex \dim_const:Nn \c__letgut_hoffset_dim { 3cm } \dim_const:Nn \c__letgut_title_hoffset_dim { -\c__letgut_hoffset_dim } \dim_const:Nn \c__letgut_subtitle_hoffset_dim { \c__letgut_title_hoffset_dim } \dim_const:Nn \c__letgut_section_hoffset_dim { \c__letgut_title_hoffset_dim + 1cm } \dim_const:Nn \c__letgut_subsection_hoffset_dim { \c__letgut_title_hoffset_dim + 1.5cm } \dim_const:Nn \c__letgut_subsubsection_hoffset_dim { \c__letgut_title_hoffset_dim + 2cm } \dim_const:Nn \c__letgut_paragraph_hoffset_dim { \c__letgut_title_hoffset_dim + 2.5cm } \dim_const:Nn \c__letgut_subparagraph_hoffset_dim { \c__letgut_title_hoffset_dim + 3cm } #+end_src - Distance between the baseline of the header text and the decorative line: #+begin_src latex \dim_const:Nn \c__letgut_head_rule_skip_dim { 0.115cm } #+end_src - Head rule width: #+begin_src latex \dim_const:Nn \c__letgut_head_rule_width_dim { 0.03cm } #+end_src - Dimensions of the banner. - Thickness of the “L”. #+begin_src latex \dim_const:Nn \c__letgut_banner_thickness_dim { 4cm } #+end_src - Height of the “L” (that of the text area plus 3cm). #+begin_src latex \dim_const:Nn \c__letgut_banner_height_dim { \c__letgut_textheight_dim + 3cm } #+end_src - Height of the membership reminder box. #+begin_src latex \dim_new:N \g__letgut_membership_reminder_box_height_dim #+end_src - Horizontal space for the frontcover in the margin in book reviews. #+begin_src latex \dim_const:Nn \c__letgut_bookreview_frontcover_margin_sep_dim { 4mm } #+end_src - Dimensions used by the listings and the examples. #+begin_src latex \dim_const:Nn \c__letgut_height_mentions_dim { 5mm } \dim_const:Nn \c__letgut_from_left_boundingbox_to_text_dim { 5.5mm } \dim_const:Nn \c__letgut_number_offset_dim { 1mm } \dim_const:Nn \c__letgut_number_sep_dim { \c__letgut_from_left_boundingbox_to_text_dim + \c__letgut_number_offset_dim } #+end_src *** Skips (lengths with rubber components) :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsSkipslengthswithrubbercomponents-a4ag55h0jlj0 :END: The following skips, borrowed from the standard classes, are specified in ~ex~ unit, which depends on the font used and hence have to be specified after the class has been loaded; in fact, we postpone this at the end of the preamble, when the font is specified (thanks to ~\setmainfont~). #+begin_src latex \AddToHook{begindocument/before}{% #+end_src Before and after: - “titles titles”: #+begin_src latex \skip_const:Nn \c__letgut_before_title_title_skip { 3.5ex plus 1ex minus .2ex } \skip_const:Nn \c__letgut_after_title_title_skip { 2.3ex plus .2ex } #+end_src - subtitles titles: #+begin_src latex \skip_const:Nn \c__letgut_before_subtitle_title_skip { \c__letgut_before_title_title_skip } \skip_const:Nn \c__letgut_after_subtitle_title_skip { \c__letgut_after_title_title_skip } #+end_src - sections titles: #+begin_src latex \skip_const:Nn \c__letgut_before_section_title_skip { 3.25ex plus 1ex minus .2ex } \skip_const:Nn \c__letgut_after_section_title_skip { 1.5ex plus .2ex } #+end_src - subsections titles (identical to the sections ones): #+begin_src latex \skip_const:Nn \c__letgut_before_subsection_title_skip { \c__letgut_before_section_title_skip } \skip_const:Nn \c__letgut_after_subsection_title_skip { \c__letgut_after_section_title_skip } #+end_src - paragraphs titles: #+begin_src latex \skip_const:Nn \c__letgut_before_subsubsection_title_skip { 1.5ex plus .5ex minus .2ex } \skip_const:Nn \c__letgut_after_subsubsection_title_skip { 0.75ex plus 0.1ex } #+end_src - paragraphs titles (identical to the subsubsection ones): #+begin_src latex \skip_const:Nn \c__letgut_before_paragraph_title_skip { \c__letgut_before_subsubsection_title_skip } \skip_const:Nn \c__letgut_after_paragraph_title_skip { \c__letgut_after_subsubsection_title_skip } #+end_src - subparagraphs titles (identical to the paragraph ones): #+begin_src latex \skip_const:Nn \c__letgut_before_subparagraph_title_skip { \c__letgut_before_paragraph_title_skip } \skip_const:Nn \c__letgut_after_subparagraph_title_skip { \c__letgut_after_paragraph_title_skip } #+end_src We close the ~\AddToHook{begindocument/before}~ argument. #+begin_src latex } #+end_src *** Integers :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsIntegers-7pag55h0jlj0 :END: #+begin_src latex \int_new:N \g__letgut_ltx_example_int #+end_src *** Strings :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsStrings-t7bg55h0jlj0 :END: #+begin_src latex \str_new:N \g__letgut_label_ltx_example_str \str_new:N \g__letgut_callout_label_ltx_example_str \str_const:Nn \c__letgut_label_ltx_example_str { __letgut_label_ltx_example } \str_const:Nn \c__letgut_callout_label_ltx_example_str { __letgut_callout_label_ltx_example } #+end_src *** Token lists :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsTokenlists-grbg55h0jlj0 :END: **** Constant ones :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsTokenlistsConstantones-obcg55h0jlj0 :END: #+begin_src latex \tl_const:Nn \c__letgut_online_issn_tl { 2742-6149~ (version~ numérique) } \tl_const:Nn \c__letgut_paper_issn_tl { 1257–2217~ (version~ papier) } \tl_const:Nn \c__letgut_cahier_tl { \emph{ Cahier } } \tl_const:Nn \c__letgut_cahiers_tl { \c__letgut_cahier_tl \emph{ s } } \tl_const:Nn \c__letgut_gnu_linux_tl { \software{GNU/Linux} } \tl_const:Nn \c__letgut_macOS_tl { \software{macOS} } \tl_const:Nn \c__letgut_windows_tl { \software{Windows} } \tl_const:Nn \c__letgut_package_tl { package } \tl_const:Nn \c__letgut_class_tl { classe } \tl_const:Nn \c__letgut_file_tl { fichier } \tl_const:Nn \c__letgut_software_tl { logiciel } \tl_const:Nn \c__letgut_tugboat_tl { \emph{ TUGboat } } \tl_const:Nn \c__letgut_tex_live_tl { \hologo{ TeX }\nobreakspace Live } \tl_const:Nn \c__letgut_banner_file_tl { bandeau } \tl_const:Nn \c__letgut_editorial_file_tl { editorial } \tl_const:Nn \c__letgut_informations_gutenberg_file_tl { informations-gut } \tl_const:Nn \c__letgut_acronyms_file_tl { letgut-acronyms } \tl_const:Nn \c__letgut_local_config_file_tl { localconf } \tl_const:Nn \c__letgut_pre_documentclass_file_tl { pre-documentclass } \tl_const:Nn \c__letgut_lstlanguage_file_tl { letgut-lstlang.sty } \tl_const:Nn \c__letgut_contents_name_tl { Sommaire } \tl_const:Nn \c__letgut_draftwatermark_text_tl { \textnormal{Brouillon} } \tl_const:Nn \c__letgut_membership_reminder_tl { {\LARGE \bfseries Avez-vous~ pensé~ à~ régler~ votre~ cotisation~ ? % \the\year~ ? \par \medskip } Si~ vous~ avez~ oublié,~ ce~ n'est~ ni~ trop~ tard~ ni~ difficile~ : \par \url{https://www.gutenberg-asso.fr/?Adherer-en-ligne} \bool_if:NT \g__letgut_informations_bool { \file_if_exist:nT {./\c__letgut_informations_gutenberg_file_tl}{ \par Voir~ aussi~ page~ \pageref{letgut_label_adhesions}. } } } \tl_const:Nn \c__letgut_missing_editorial_tl { Ne~ pas~ omettre~ l'éditorial~ !\\(à~ faire~ figurer~ dans~ un~ \file*{\c__letgut_editorial_file_tl.tex}~ dans~ le~ dossier~ courant) } \tl_const:Nn \c__letgut_missing_infomations_tl { Ne~ pas~ omettre~ les~ informations~ sur~ \c__letgut_gutenberg_tl{}~ !\\(dans~ un~ \file*{\c__letgut_informations_gutenberg_file_tl.tex}~ situé~ soit~ dans~ le~ dossier~ courant, soit~ dans~ le~ dossier~ parent) } \tl_const:Nn \c__letgut_default_alert_box_color_tl { gray9 } \tl_const:Nn \c__letgut_default_allcolors_links_color_tl { teal!60!black } #+end_src **** Variables ones :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsTokenlistsVariablesones-pxcg55h0jlj0 :END: #+begin_src latex \tl_new:N \g__letgut_mark_tl \tl_new:N \g__letgut_title_tl \tl_new:N \l_letgut_last_name_tl \tl_new:N \l_letgut_first_name_tl \tl_new:N \l_letgut_title_tl \tl_new:N \l__letgut_title_addon_tl \tl_new:N \l__letgut_reference_text_tl \tl_new:N \g__letgut_effective_acronyms_file_tl \tl_new:N \l__letgut_toc_title_announce_tl \tl_new:N \l__letgut_toc_color_announce_tl #+end_src *** Comma separated lists :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsCommaseparatedlists-vhdg55h0jlj0 :END: #+begin_src latex \clist_new:N \g__letgut_pagecolor_clist \clist_const:Nn \c__letgut_default_pagecolor_screen_clist {1.0, 0.98, 0.94} \clist_const:Nn \c__letgut_default_pagecolor_paper_clist {1, 1, 1} #+end_src *** Sequences :PROPERTIES: :CUSTOM_ID: ImplementationDeclarationsSequences-m2eg55h0jlj0 :END: #+begin_src latex \seq_new:N \l__letgut_first_last_names_items_seq \seq_new:N \g__letgut_included_files_seq \seq_new:N \g__letgut_added_bib_resources_seq #+end_src ** Class options :PROPERTIES: :CUSTOM_ID: ImplementationClassoptions-4meg55h0jlj0 :END: We define the 2 load time options for the target audience: - ~for-readers~ (the default), for the “normal” “Lettre”, - ~for-authors~, (only) the author(s) of an article of the “Lettre”. ** Date handling :PROPERTIES: :CUSTOM_ID: ImplementationDatehandling-c5fg55h0jlj0 :END: #+begin_src latex \int_new:N \g__letgut_date_month_int \int_new:N \g__letgut_date_year_int \int_gset:Nn \g__letgut_date_month_int {\the\month} \int_gset:Nn \g__letgut_date_year_int {\the\year} \tl_new:N \g__letgut_date_month_tl \tl_new:N \g__letgut_date_tl \cs_new_protected:Npn \__letgut_date_parse:n #1 { \__letgut_if_is_iso_date:nTF {#1} { \__letgut_date_parse:www #1 \q_stop }{ \msg_term:nnn{letgut}{Not~month~iso~date}{#1} \tl_gset:Nn \g__letgut_date_tl { #1 } } } \prg_new_protected_conditional:Npnn \__letgut_if_is_iso_date:n #1 { T, F, TF } { \regex_match:nnTF { ^\d{4}-(\d{1,2}) } {#1} { \prg_return_true: } { \prg_return_false: } } \prg_new_protected_conditional:Npnn \__letgut_if_is_int:n #1 { T, F, TF } { \regex_match:nnTF { ^[\+\-]?[\d]+$ } {#1} { \prg_return_true: } { \prg_return_false: } } \cs_new_protected:Npn \__letgut_month_name:n #1 { % \text_titlecase_first:n { \int_case:nnF { #1 } { { 1 }{ janvier } { 2 }{ février } { 3 }{ mars } { 4 }{ avril } { 5 }{ mai } { 6 }{ juin } { 7 }{ juillet } { 8 }{ août } { 9 }{ septembre } { 10 }{ octobre } { 11 }{ novembre } { 12 }{ décembre } } { Month~ Error! } % } } \cs_new_protected:Npn \__letgut_date_parse:www #1-#2 \q_stop { \int_compare:nTF { \the\year <= #1 <= \the\year+1 #+end_src # >> (Just not to disturb the parentheses balancing # detection of my editor.) #+begin_src latex }{ \int_gset:Nn \g__letgut_date_year_int {#1} }{ \int_gset:Nn \g__letgut_date_year_int {\the\year} } \__letgut_if_is_int:nTF {#2} { \int_compare:nTF { 1 <= #2 <= 12 #+end_src # >> (Just not to disturb the parentheses balancing # detection of my editor.) #+begin_src latex } {\int_gset:Nn \g__letgut_date_month_int {#2}} {\int_gset:Nn \g__letgut_date_month_int {\the\month}} }{ \int_gset:Nn \g__letgut_date_month_int {\the\month} } \tl_gset:Nn \g__letgut_date_month_tl { \__letgut_month_name:n { \g__letgut_date_month_int } } \tl_gset:Nn \g__letgut_date_tl { \tl_use:N \g__letgut_date_month_tl \c_space_tl \int_use:N \g__letgut_date_year_int } } #+end_src ** Class and package loading :PROPERTIES: :CUSTOM_ID: ImplementationClassandpackageloading-aqfg55h0jlj0 :END: The \letgutcls{} is based on the ~article~ class. It is by default two sided because of the alternating headers, and will by typeset with ~11pt~ as global font size. #+begin_src latex \LoadClass[twoside,11pt]{article} #+end_src We now load some packages. - The \letgutcls{} will have to be used with LuaLaTeX. Hence the font selection package for XeLaTeX and LuaLaTeX. #+begin_src latex \RequirePackage{fontspec} #+end_src - For subliminal refinements towards typographical perfection. #+begin_src latex \RequirePackage[ , stretch=30 , shrink=25 , letterspace=150 ]{microtype} #+end_src - Help in implementing paragraph layouts where the paragraphs are separated by a vertical space instead of (or in addition to) indenting them. #+begin_src latex \RequirePackage{parskip} #+end_src - Extensive control of page headers and footers in \LaTeXe. #+begin_src latex \RequirePackage{fancyhdr} #+end_src - Flexible and complete interface to document dimensions. #+begin_src latex \RequirePackage[a4paper]{geometry} #+end_src - Enhanced support for graphics. #+begin_src latex \RequirePackage{graphicx} #+end_src - Biolinum font. #+begin_src latex \RequirePackage{biolinum} #+end_src - Extending the array and tabular environments. #+begin_src latex \RequirePackage{array} #+end_src - Completely customisable TOCs. #+begin_src latex \RequirePackage{etoc} #+end_src - Control layout of itemize, enumerate, description, and design our own lists. #+begin_src latex \RequirePackage{enumitem} #+end_src - Select alternative section titles. #+begin_src latex \RequirePackage{titlesec} #+end_src - Driver-independent color extensions. #+begin_src latex \RequirePackage[table]{xcolor} #+end_src - Several logos and ornaments. #+begin_src latex \RequirePackage{fourier-orns} #+end_src - Drawing of Vectorian ornaments. #+begin_src latex \RequirePackage{pgfornament} #+end_src - Control float placement. #+begin_src latex \RequirePackage[section,above]{placeins} #+end_src - Sophisticated verbatim text. #+begin_src latex \RequirePackage{fancyvrb} #+end_src - Publication quality tables in LaTeX. #+begin_src latex \RequirePackage{booktabs} #+end_src - Context sensitive quotation facilities. #+begin_src latex \RequirePackage{csquotes} #+end_src - Mathematical tools to use with (and which loads) \package{amsmath}. #+begin_src latex \RequirePackage[fleqn]{mathtools} #+end_src - Better accessibility support for PDF files. This package is used because we want the material added to the background (banner on the first page and draft watermark) to be not selectable in order to let the reader who wants to copy the interesting text be able to select it. #+begin_src latex \RequirePackage{accsupp} #+end_src - A comprehensive (SI) units package. #+begin_src latex \RequirePackage{siunitx} #+end_src - Additional TeX-family logos (which loads and extends \package{hologo} which is collection of logos with bookmark support). #+begin_src latex \RequirePackage{bxtexlogo} #+end_src - Coloured boxes, for LaTeX examples and theorems, etc. #+begin_src latex \RequirePackage{tcolorbox} #+end_src - Compile \TeX{} code stand-alone or as part of a document. #+begin_src latex \RequirePackage[group=false,subpreambles,sort]{standalone} #+end_src - Attach arbitrary files to a PDF document. #+begin_src latex \RequirePackage[icon=Paperclip]{attachfile2} #+end_src - Expandable macros to extract the data from references and allow counter assignments or calculations. #+begin_src latex \RequirePackage{refcount} #+end_src - Select colors with proper WCAG color contrast. #+begin_src latex \RequirePackage{ninecolors} #+end_src - Typeset tabulars and arrays with LaTeX3 (for the alert boxes typeset as simple tabulars). #+begin_src latex \RequirePackage{tabularray} #+end_src - Multilingual support for Plain TeX or LaTeX. #+begin_src latex \RequirePackage[english,french]{babel} #+end_src - Intelligent page references. #+begin_src latex \RequirePackage[nospace,french]{varioref} #+end_src - Macros for Euro sign. #+begin_src latex \RequirePackage[right]{eurosym} #+end_src - Typeset source code listings using LaTeX. #+begin_src latex \RequirePackage{listings} #+end_src - Modifying the layout of floats. #+begin_src latex \RequirePackage{floatrow} #+end_src - Sophisticated Bibliographies in LaTeX. #+begin_src latex \RequirePackage[ sorting=none, datamodel=letgut, citestyle=letgut ]{biblatex} #+end_src - Typeset acronyms. #+begin_src latex \RequirePackage{acro} #+end_src - Allow URL breaks at any alphanumerical character. #+begin_src latex \RequirePackage{xurl} #+end_src The following packages have to be the last ones loaded. So we ensure this by loading them just before the begining of the document: #+begin_src latex \AddToHook{begindocument/before}{ #+end_src - Extensive support for hypertext in LaTeX #+begin_src latex \RequirePackage{hyperref} #+end_src - Adjusting the anchors of captions #+begin_src latex \RequirePackage[all]{hypcap} #+end_src - Intelligent cross-referencing #+begin_src latex \RequirePackage[french]{cleveref} #+end_src We close the ~\AddToHook{begindocument/before}~ argument. #+begin_src latex } #+end_src ** Settings for the loaded packages :PROPERTIES: :CUSTOM_ID: ImplementationSettingsfortheloadedpackages-cdgg55h0jlj0 :END: - We switch to the French typographic conventions for \package{siunitx}. #+begin_src latex \sisetup{ , locale=FR , mode=match } #+end_src - Concerning floats, we ask: - the caption text will be justified, - the figures and their captions to be boxed (in order to distiguish them from the current text), - the tables to have their captions above them. #+begin_src latex \DeclareMarginSet{hangleft}{ \setfloatmargins{\hskip-\c__letgut_hoffset_dim}{\hfil} } \DeclareFloatVCode{__letgut_ruleabove}{ \par\rule{\hsize}{.8pt}\vskip4pt\par } \DeclareFloatVCode{__letgut_rulebelow}{ \par\vskip2pt\rule{\hsize}{.8pt}\par } \DeclareFloatStyle{__letgut_ruled}{ precode=__letgut_ruleabove, postcode=__letgut_rulebelow, % heightadjust=all, floatwidth=.8\linewidth } \floatsetup{objectset=justified} \floatsetup[figure]{ style=__letgut_ruled, margins=hangleft, capposition=beside, capbesideposition={top,left}, floatwidth=0.85\textwidth } \floatsetup[table]{capposition=top} #+end_src Moreover, the tables will be entitled \enquote{tableau} instead of \enquote{table}. #+begin_src latex \renewcommand*\frenchtablename{Tableau} #+end_src - We load a \package{tabularray}'s library. #+begin_src latex \UseTblrLibrary{booktabs} #+end_src - The ~\printbibliography~ command is redefined in order its ~heading~ is by default set to ~subbibliography~. #+begin_src latex \NewCommandCopy{\__letgut_old_printbibliography}{ \printbibliography } \RenewDocumentCommand {\printbibliography} { O{} } { \phantomsection \__letgut_old_printbibliography[#1] \bool_if:NT \g__letgut_included_files_attached_bool { \seq_map_inline:Nn \g__letgut_added_bib_resources_seq { \file_if_exist:nTF {##1}{ \seq_gput_right:Nn \g__letgut_included_files_seq { \attachfile[ description={ Fichier~ bibliographique~ utilisé~ dans~ le~ présent~ article~ (fichier~ `\tl_to_str:n{##1}`) }, mimetype=application/x-bib ] {\tl_to_str:n{##1}} } } } } } #+end_src For printing the bibliography, we define two new bibheadings for the structure levels ~\title~ and ~\subtitle~. #+begin_src latex \defbibheading{title}[\refname]{% \title{#1}} \defbibheading{subtitle}[\refname]{% \subtitle{#1}} #+end_src - The acronyms will be typset in its short form, with small caps shape. When they are (English) foreign, it will be specified and the translation will be added. #+begin_src latex \acsetup{ first-style=short, format/short = {\scshape}, format/foreign = {\em}, foreign/display, locale/format = {\upshape}, locale/display, make-links = true, link-only-first = true } #+end_src We currently have to work around an ~acro~ bug (see \url{https://tex.stackexchange.com/q/661966/18401}). #+begin_src latex \AddToHook{cmd/printacronyms/before}{\bool_set_false:N\l__acro_link_only_first_bool} #+end_src In case the long form of an acronym is explicited in footnote, we want this footnot to be ended with a period. #+begin_src latex \ProvideDocumentCommand \acroendfootnote {} {.} #+end_src The following settings for packages that have to be the last ones loaded are also done just before the begining of the document. - (Temporary?) workaround that moves `standalone` code in hook `begindocument` to `begindocument/before` in order to get rid of the issue \url{https://tex.stackexchange.com/q/670638/18401}. #+begin_src latex \RemoveFromHook{begindocument}[standalone] \ExpandArgs{nv}\AddToHook{begindocument/before}{l__hook_return_tl} #+end_src #+begin_src latex \AddToHook{begindocument/before}{ #+end_src - We want the hyperlinks to be as unobtrusive as possible. #+begin_src latex \bool_if:NTF \g__letgut_paper_bool { \hypersetup{hidelinks} }{ \hypersetup{% colorlinks,% allcolors={letgut_allcolors_links},% }% } #+end_src A preset of acronyms is input (if found, firstly in the current directory, secondly in the parent directory, thirdly in the TDS). #+begin_src latex \file_if_exist:nTF {./\c__letgut_acronyms_file_tl}{ \tl_gset:Nn \g__letgut_effective_acronyms_file_tl {./\c__letgut_acronyms_file_tl} }{ \file_if_exist:nTF {../\c__letgut_acronyms_file_tl}{ \tl_gset:Nn \g__letgut_effective_acronyms_file_tl {../\c__letgut_acronyms_file_tl} }{ \file_if_exist:nT {\c__letgut_acronyms_file_tl}{ \tl_gset:Nn \g__letgut_effective_acronyms_file_tl {\c__letgut_acronyms_file_tl} } } } \input {\g__letgut_effective_acronyms_file_tl} #+end_src - Depending on some chosen class options, some packages have to be loaded, notably before \package*{hyperref} is loaded, and actions are taken accordingly. - If the `draft` mode (default) is on, we load the \package*{lua-typo} which highlights typographical flaws with LuaLaTeX. For the moment, # this option is disabled if the `paper` option is enabled since enabling # both the \package*{lua-typo} isn't loaded since the `luacolor` package it loads # currently does not work well in ~shipout/background~ (see https://github.com/ho-tex/luacolor/issues/4). #+begin_src latex % % \bool_if:NF \g__letgut_paper_bool { \bool_if:NT \g__letgut_draft_bool { % \RequirePackage[All]{lua-typo} \AddToHook{shipout/background} { \__letgut_unselectable:n { \put(0.5\paperwidth,-0.5\paperheight) { \Huge #+end_src Currently, we can't use \package{l3color}'s ~\color_fill:n~ (see \url{https://github.com/ho-tex/luacolor/issues/4\#issuecomment-848774260}) and we have to rely on \package{xcolor}'s ~\color~. #+begin_src latex % \color_fill:n {black!10} \color{black!10} \hbox_set:Nn \l__letgut_tmpa_box { \fontsize{0.25\paperwidth}{0.3\paperwidth} \selectfont \c__letgut_draftwatermark_text_tl } \hbox_set:Nn \l__letgut_tmpb_box { \hbox_overlap_center:n { \box_use:N \l__letgut_tmpa_box } } #+end_src The draft watermak is rotated in order to be parallely slanted to the first diagonal of the page (angle $=\arctan(\text{paper height}/\text{paper width})$). #+begin_src latex \box_rotate:Nn \l__letgut_tmpb_box { \fp_eval:n { atand ( \dim_to_fp:n {\paperheight} / \dim_to_fp:n {\paperwidth} ) } } \box_use:N \l__letgut_tmpb_box } } } #+end_src Moreover, we want all the overfull boxes to be shown (as with ~draft~ option of the standard classes). #+begin_src latex \setlength\overfullrule{5pt} } % % } #+end_src # - We proceed to some settings for the \package*{glossaries-extra}: # - the acronyms will be displayed in small caps, in footnotes, # - the acronym definitions in footnotes are terminated with a period, like # other footnotes, # - we load the file of the built-in glossaries and acronyms terms. # # Note that we don't make use of ~\makeglossaries~ since we don't need # glossaries files, since we don't make use of ~\printglossary~ (and friends) # since we don't need to display a glossary or a list of acronyms. # #+begin_src latex # \setabbreviationstyle[acronym]{short-sc-footnote} # \glsdisablehyper # \renewcommand*{\glsxtrabbrvfootnote}[2]{\footnote{#2.}} # \loadglsentries{letgut-acronyms} # #+end_src We close the ~\AddToHook{begindocument/before}~ argument. #+begin_src latex } #+end_src ** Page color default settings :PROPERTIES: :CUSTOM_ID: ImplementationPagecolordefaultsettings-c1hg55h0jlj0 :END: By default, the page color will be the one linked to the ~screen~ option. #+begin_src latex \pagecolor[rgb]{\c__letgut_default_pagecolor_screen_clist} \clist_set_eq:NN \g__letgut_pagecolor_clist \c__letgut_default_pagecolor_screen_clist #+end_src ** Options :PROPERTIES: :CUSTOM_ID: ImplementationOptions-imhg55h0jlj0 :END: We now define the options of the class: - ~for-readers~/~for-authors~, depending on the target audience, - ~draft~/~final~ depending on the state of the document, - ~paper~/~screen~ depending on the way the document will be read, - ~number~ for the number of the issue, - ~date~ for the date of the issue, either empty (hence the current (month) date) or at the format ~YYYY-MM~ or as free input, - ~pagecolor~ (relevant only with the (default) ~screen~ load time option) for a color of the page other than the default one (used behind the scene by the ~letgut-banner~ package), - ~watermark letter~ for another letter than the “g” in watermark, - ~watermark scale~ for the case the letter in watermark is too big, - ~allcolorslinks~ for the color of (all) the links, - ~membership-reminder~ that typesets a membership reminder on the first page, - ~editorial~ depending on the editorial is wanted or not, - ~infomations~ depending on the GUTenberg informations are wanted or not, - ~detailedtoc~ depending on the automatic ToC is wanted maximally (until subparagraphs) detailed or not. #+begin_src latex \keys_define:nn { letgut } { , for-readers .bool_gset:N = \g__letgut_for_readers_bool , for-readers .initial:n = { true } , for-authors .bool_gset_inverse:N = \g__letgut_for_readers_bool , draft .bool_gset:N = \g__letgut_draft_bool , draft .initial:n = { true } , draft .default:n = { true } , final .bool_gset_inverse:N = \g__letgut_draft_bool , paper .code:n = { \bool_gset_true:N \g__letgut_paper_bool \pagecolor[rgb]{\c__letgut_default_pagecolor_paper_clist} \clist_set_eq:NN \g__letgut_pagecolor_clist \c__letgut_default_pagecolor_paper_clist } , screen .code:n = { \bool_gset_false:N \g__letgut_paper_bool } , number .int_gset:N = \g__letgut_number_int , date .code:n = { \__letgut_date_parse:n { #1 } } , date .initial:x = {\the\year-\the\month} , pagecolor .initial:V = \c__letgut_default_pagecolor_screen_clist , pagecolor .code:n = { \definecolor{letgut_pagecolor}{rgb}{#1} \AddToHook{begindocument/before} { \bool_if:NTF \g__letgut_paper_bool { \msg_warning:nnn{letgut}{ pagecolor~inoperative~with~paper~option }{#1} }{ \clist_gset:Nn \g__letgut_pagecolor_clist { #1 } \pagecolor[rgb]{#1} } } } , watermark~ letter .tl_gset:N = \g__letgut_watermark_letter_tl , watermark~ letter .initial:n = g , watermark~ scale .tl_gset:N = \g__letgut_watermark_scale_tl , watermark~ scale .initial:n = 1 , allcolorslinks .code:n = { \colorlet{letgut_allcolors_links}{#1}} , allcolorslinks .initial:V = \c__letgut_default_allcolors_links_color_tl , membership-reminder .bool_gset:N = \g__letgut_membership_reminder_bool , membership-reminder .initial:n = { true } , editorial .bool_gset:N = \g__letgut_editorial_bool , editorial .initial:n = { true } , informations .bool_gset:N = \g__letgut_informations_bool , informations .initial:n = { true } , detailedtoc .str_gset:N = \g__letgut_detailedtoc_level_str , detailedtoc .default:n = 5 , detailedtoc .initial:n = 0 , reverse-files-attachement .code:n = { \AddToHook{begindocument/before}{ \bool_lazy_and:nnTF {\g__letgut_for_readers_bool} {!\g__letgut_paper_bool} { \bool_gset_false:N \g__letgut_included_files_attached_bool }{ \bool_gset_true:N \g__letgut_included_files_attached_bool } } } } \ProcessKeyOptions[ letgut ] \AddToHook{begindocument/before}{ \bool_lazy_and:nnTF {\g__letgut_for_readers_bool} {!\g__letgut_paper_bool} { \bool_gset_true:N \g__letgut_included_files_attached_bool }{ \bool_gset_false:N \g__letgut_included_files_attached_bool } } #+end_src #+begin_src latex \definecolor{letgut_pagecolor}{rgb}{\g__letgut_pagecolor_clist} #+end_src ** Headers :PROPERTIES: :CUSTOM_ID: ImplementationHeaders-78ig55h0jlj0 :END: We now define the headers. - The distance between the baseline of the header text and the decorative line in the header is made a little bit bigger. #+begin_src latex \renewcommand{\headruleskip}{ \c__letgut_head_rule_skip_dim } #+end_src - The decorative line width in the header is made a little bit bigger. #+begin_src latex \renewcommand{\headrulewidth}{ \c__letgut_head_rule_width_dim } #+end_src - The headers alternate between even and odd pages. #+begin_src latex \fancyhf{} \fancyhead[RO,LE]{\thepage} \fancyhead[RE,LO]{\scshape \g__letgut_mark_tl} #+end_src - The headers are left offset #+begin_src latex \fancyheadoffset[L]{\c__letgut_hoffset_dim} #+end_src - We load the default \package{fancyhdr}'s page style #+begin_src latex \pagestyle{fancy} #+end_src ** Marginal notes :PROPERTIES: :CUSTOM_ID: ImplementationMarginalnotes-1uig55h0jlj0 :END: We want the marginal notes to be in the left margin. #+begin_src latex \reversemarginpar #+end_src ** Table of contents :PROPERTIES: :CUSTOM_ID: ImplementationTableofcontents-rhjg55h0jlj0 :END: The table of contents is customized: - layout: #+begin_src latex \etocsetstyle {section} {} {\leavevmode\leftskip 2.5cm\relax} {\mdseries\small% \etocname~\dotfill~\etocpage\par } {} \etocsetstyle {subsection} {} {\leavevmode\leftskip 3cm\relax} {\mdseries\footnotesize% \etocname~\dotfill~\etocpage\par } {} \etocsetstyle {subsubsection} {} {\leavevmode\leftskip 3.5cm\relax} {\mdseries\scriptsize% \etocname~\dotfill~\etocpage\par } {} \etocsetstyle {paragraph} {} {\leavevmode\leftskip 4cm\relax} {\mdseries\tiny% \etocname~\dotfill~\etocpage\par } {} \etocsetstyle {subparagraph} {} {\leavevmode\leftskip 4.5cm\relax} {\mdseries\tiny% \etocname~\dotfill~\etocpage\par } {} #+end_src - its title is dropped: #+begin_src latex \renewcommand*\frenchcontentsname{} #+end_src ** COMMENT Alerts :PROPERTIES: :CUSTOM_ID: ImplementationAlerts-o4kg55h0jlj0 :END: We create a box to display alerts. #+begin_src latex \DeclareTCBox{\alertbox}{}{ nobeforeafter, colback=red!5!white, colframe=red!75!black, title={Attention !}, fonttitle=\bfseries, before=\begin{center}, after=\end{center} } #+end_src ** Geometry of the document :PROPERTIES: :CUSTOM_ID: ImplementationGeometryofthedocument-mqkg55h0jlj0 :END: #+begin_src latex \geometry{ asymmetric, textheight=\c__letgut_textheight_dim, textwidth=\c__letgut_textwidth_dim, lmargin=\c__letgut_lmargin_dim, tmargin=\c__letgut_tmargin_dim, head=\c__letgut_head_dim, headsep=\c__letgut_headsep_dim, marginparwidth=\c__letgut_marginparwidth_dim, % verbose, % showframe } #+end_src ** Alert box :PROPERTIES: :CUSTOM_ID: ImplementationAlertbox-rblg55h0jlj0 :END: #+begin_src latex \cs_new_protected:Nn \__letgut_alert_box:nn { \noindent \begin{tblr}{ width=\linewidth, rowspec={Q[c,m,#1]}, colspec={| #+end_src # < (Just not to disturb the parentheses balancing # detection of my editor.) #+begin_src latex >{\bfseries}X| }, vlines, hlines, rowsep=2.5mm, colsep=2.5mm } #2 \end{tblr} \skip_vertical:N \c_zero_dim } #+end_src ** Announcements :PROPERTIES: :CUSTOM_ID: ImplementationAnnounces-nahckb909pj0 :END: #+begin_src latex \tcbset{ announce~ style/.style={ enhanced, sharp~ corners, boxrule=0mm, leftrule=1cm, bottomrule=1cm, toptitle=20pt, bottomtitle=20pt, center~ title, before~ title=\hypersetup{hidelinks}, fonttitle=\scshape\bfseries\huge, fontupper=\Large, fontlower=\Large, skin=empty, segmentation~ style=solid, halign=center, toc~ title/.store~ in=\l__letgut_toc_title_announce_tl, color/.store~ in=\l__letgut_toc_color_announce_tl, } } \cs_new_protected:Npn \__letgut_toc_title_announce:nn #1 #2 { \tl_if_empty:NTF {#1}{ \phantomsection\addcontentsline{toc}{title}{#2} }{ \tl_if_empty:NF {#2}{ \phantomsection\addcontentsline{toc}{title}{#1} } } } \NewTColorBox{announcement}{ O{} m } { announce~ style, title=#2, borderline~ west={1cm}{0pt}{\l__letgut_toc_color_announce_tl}, phantom={\__letgut_toc_title_announce:nn {\l__letgut_toc_title_announce_tl}{#2}}, overlay~ unbroken~ and~ first ={ \node[color=\l__letgut_toc_color_announce_tl]~ at~ ([yshift=8pt]title.south) {\pgfornament[width=0.4\linewidth]{88}}; \node[color=white,anchor=north~ west]~ at~ (frame.north~ west) {\huge\bfseries\aldineright{}}; }, #1, coltitle=\l__letgut_toc_color_announce_tl, } #+end_src ** Rebus :PROPERTIES: :CUSTOM_ID: ImplementationRebus-osw8m3f0cpj0 :END: #+begin_src latex \int_new:N \g__letgut_rebus_int \NewDocumentCommand{\solution}{}{\tcblower} \NewDocumentCommand{\displaysolutions}{}{% \tcbstoprecording\tcbinputrecords% } \tcbset{% rebus~ style/.style={% enhanced, boxrule=0pt, frame~hidden, fonttitle=\normalfont\large\bfseries, before~ title={\lefthand\c_space_tl}, halign=center, title~ addon/.store~ in=\l__letgut_title_addon_tl, after~ title={ \tl_if_empty:NF {\l__letgut_title_addon_tl}{ \c_space_tl(\emph{\l__letgut_title_addon_tl}) } }, float = bh, colback = __letgut_background_terminal_stdout, colbacktitle = __letgut_background_terminal_stdin, coltitle = black } } \tcbset{ no~ solution/.style={ no~ recording, after~ upper=dans~ la~ prochaine~ \lettre{}, after~ upper~ pre={ \par\bigskip\hfill\scriptsize\itshape Solution\c_space_tl }, } } \NewTColorBox{rebus}{+!O{}}{% before~ title~ pre = {\int_gincr:N \g__letgut_rebus_int}, rebus~ style, fonttitle=\bfseries, title={Rébus}, label={rebus@\int_use:N\g__letgut_rebus_int}, after~ upper={\vpageref[ci-dessous]{solution@\int_use:N\g__letgut_rebus_int}}, after~ upper~ pre={ \par\bigskip\hfill\scriptsize\itshape Solution\c_space_tl }, lowerbox=ignored, savelowerto=rebus-\int_use:N\g__letgut_rebus_int.tex, record={\string\rebussolution*[\int_use:N\g__letgut_rebus_int][][]}, #1 } \NewDocumentCommand{\rebussolution}{s +o o O{}}{% \IfValueTF{#2}{ \begin{tcolorbox}[ rebus~ style, label=solution@\int_use:N\g__letgut_rebus_int, halign=justify, before~ title={\lefthand{}~Solution~ du~ rébus\c_space_tl}, title={ \IfBooleanTF{#1}{ \vpageref[ci-dessus]{rebus@#2} }{ de~la~\lettre{}\c_space_tl \IfValueTF{#3}{ #3 }{ précédente } } }, phantomlabel={ \IfBooleanT{#1}{ solution@#2 } }, #4 ] \IfBooleanTF{#1}{ \file_if_exist_input:n {rebus-#2.tex} }{ #2 } \end{tcolorbox} }{ \IfValueF{#3}{ \tcbstoprecording \tcbinputrecords } } } #+end_src ** “Title” and marks :PROPERTIES: :CUSTOM_ID: ImplementationTitleandmarks-5ylg55h0jlj0 :END: We redefine ~\@title~ in order to make it empty. Hence we can later test if the ~\title~ has been populated by the user (thanks to ~\title~) and, if so, we will (automatically) display on the first page and headers the provided title instead of the number and the date (see below). #+begin_src latex \tl_gclear:N \@title #+end_src At the end of preamble, we put the ~\@title~ (empty or populated by the user) into ~\g__letgut_@title_str~ for later tests. #+begin_src latex \AddToHook{begindocument/before} { \str_set_eq:NN \g__letgut_@title_str \@title #+end_src The number is added only if it is # < (Just not to disturb the parentheses balancing # detection of my editor.) $>0$. #+begin_src latex \tl_gset:Nn \g__letgut_title_tl { \int_compare:nNnT \g__letgut_number_int #+end_src # < (Just not to disturb the parentheses balancing # detection of my editor.) #+begin_src latex > \c_zero_int {numéro~ \int_use:N\g__letgut_number_int{}~ --~ } \g__letgut_date_tl } \str_if_empty:NTF \g__letgut_@title_str { \tl_gset:Nn \g__letgut_mark_tl { \c__letgut_la_lettre_gutenberg_plain_tl } }{ \tl_gset:Nn \g__letgut_mark_tl { \g__letgut_@title_str } } \tl_gput_right:Nn \g__letgut_mark_tl { ,~\g__letgut_title_tl } } #+end_src ** First page handling :PROPERTIES: :CUSTOM_ID: ImplementationFirstpagehandling-nmmg55h0jlj0 :END: The first page is special as it should automatically contain certain elements: - the banner, - either the number and the date of the issue, or a given title, - the table of contents, - the editorial, - the membership reminder. The first page is inserted only is the target audience is the readers of the Lettre. #+begin_src latex \AddToHook{begindocument/before}{ \bool_if:NT \g__letgut_for_readers_bool { #+end_src #+begin_src latex \file_if_exist:nTF {\c__letgut_banner_file_tl.pdf}{ \AddToHookNext{shipout/background} { \begin{picture}(0,0) \put(-2cm,-25.275cm){ \__letgut_orig_includegraphics*[scale=0.96]{ \c__letgut_banner_file_tl.pdf } } \end{picture} } }{ #+end_src The ~pagecolor~ option is possibly set (with ~\AddToHook{begindocument/before}~) and the page color chosen has to be used for the letters of the banner so the following code has to be postponed after the former (hence here ~\AddToHook{begindocument}~ and with ~\AddToHook{begindocument/before}~). #+begin_src latex \msg_term:nn{letgut}{Banner~file~not~provided} \RequirePackage[ , pagecolor = { \g__letgut_pagecolor_clist } , watermark~ letter = { \g__letgut_watermark_letter_tl } , watermark~ scale = { \g__letgut_watermark_scale_tl } ]{letgut-banner} } #+end_src Here starts what is automatically added at the beginning of the document. #+begin_src latex \AddToHook{begindocument/end} { #+end_src - If a membership reminder is asked, we create an (alert) box containing the corresponding text and reduce the textheight of this page of the height of this box. #+begin_src latex \bool_if:NT \g__letgut_membership_reminder_bool { \box_new:N \g__letgut_membership_reminder_box \vbox_gset:Nn \g__letgut_membership_reminder_box { \alertbox []{ \c__letgut_membership_reminder_tl } } \dim_gset:Nn \g__letgut_membership_reminder_box_height_dim { \box_ht:N \g__letgut_membership_reminder_box } \enlargethispage{ - \g__letgut_membership_reminder_box_height_dim } } #+end_src - We want the text on the first page to not encroach on the horizontal bar of the banner. #+begin_src latex \dim_const:Nn \c__letgut_first_page_shrink_dim { \c__letgut_banner_thickness_dim + \c__letgut_tmargin_dim + \c__letgut_textheight_dim - .5\paperheight - .5\c__letgut_banner_height_dim } \enlargethispage{ - \c__letgut_first_page_shrink_dim } \enlargethispage{ - \baselineskip } #+end_src - If the user has specified a title, we make a (our own) title and use it and the possibly provided author(s) for the metadata of the PDF; otherwise we display the number and the date of the newsletter. #+begin_src latex \str_if_empty:NTF \g__letgut_@title_str { \bool_gset_true:N \g__letgut_title_empty_bool \begin{flushright} \Huge \text_titlecase_first:n { \g__letgut_title_tl } \end{flushright} \hypersetup{ pdftitle={ \c__letgut_Lettre_gutenberg_tl \int_compare:nNnT \g__letgut_number_int #+end_src # < (Just not to disturb the parentheses balancing # detection of my editor.) #+begin_src latex > \c_zero_int { \c_space_tl~ \int_use:N \g__letgut_number_int } }, pdfauthor={ Association~ \c__letgut_gutenberg_tl \c_space_tl (éditeur) }, } \vspace*{1cm} }{ \hypersetup{ pdftitle={\g__letgut_@title_str} } \tl_if_empty:NF \@author { \hypersetup{ pdfauthor={\@author} } } #+end_src Here, we insert the title, but don't rely on ~\maketitle~ because it lets to ~\relax~ the command ~\title~ which is used later as new sectionning levels for the titles of the articles of the Lettre. So we emulate the intersting part of the ~\maketitle~ command (borrowed from \file{article.cls}). #+begin_src latex \null \vskip 2em% \begin{center}% \let \footnote \thanks {\LARGE \@title \par}% \vskip 1.5em% {\large \lineskip .5em% \begin{tabular}[t]{c}% \@author \end{tabular}\par}% \vskip 1em% {\large \@date}% \end{center}% \par \vskip 1.5em } #+end_src - No headers on the first page. This has to be inserted after the previous (customized) ~\maketitle~ since this command inserts a ~\newpage~ which would ruin the effort of ~\thispagestyle{empty}~ if inserted before. #+begin_src latex \thispagestyle{empty} #+end_src - The table of contents is automatically added and has a bookmark entry. By default only the titles of the articles are shown (but the bookmarks have their natural depth) but the ~detailedtoc~ option make its depth until subpargraphs (which may be useful in order to check the structure of the Lettre). #+begin_src latex \etocsetnexttocdepth{\g__letgut_detailedtoc_level_str} \pdfbookmark[1]{ \c__letgut_contents_name_tl }{ \c__letgut_contents_name_tl } \tableofcontents \etocsetnexttocdepth{1} #+end_src Should a title be displayed, the table of contents would be added after it, followed by a new page (otherwise, if ~\title~ used after ~\begin{document}~ sees its title on the front page, it will overflow onto the banner). #+begin_src latex \bool_if:NTF \g__letgut_title_empty_bool { \vspace*{1.5cm} }{ \newpage } #+end_src - Conditionally to the fact the ~editorial~ option is not set to ~false~: if the \file*{editorial.tex} of the editorial is found, its content is input and has a bookmark entry; otherwise, a warning is displayed. #+begin_src latex \bool_if:NTF \g__letgut_editorial_bool { \file_if_exist:nTF {./\c__letgut_editorial_file_tl}{ \RenewDocumentCommand\author{ s m } { \__letgut_author:nn { #1 } {#2} } \pdfbookmark[1]{Éditorial}{ \c__letgut_editorial_file_tl } \inputarticle{./\c__letgut_editorial_file_tl} #+end_src # < (Just not to disturb the parentheses balancing # detection of my editor.) #+begin_src latex % \if\count{\pagenumber}>1 % \else % \newpage % \fi }{ \msg_warning:nn{letgut}{Editorial~file~missing} \alertbox{ \c__letgut_missing_editorial_tl } \newpage } }{ % \newpage } #+end_src We close the ~\AddToHook{begindocument/end}~ argument. #+begin_src latex } #+end_src Membership reminder. #+begin_src latex \AddToHook{begindocument}{ \bool_if:NT \g__letgut_membership_reminder_bool { \AddToHookNext{shipout/background} { \put(1in,-1in){ \put( \oddsidemargin, - \topmargin - \headheight - \headsep - \textheight + \c__letgut_first_page_shrink_dim + .5\baselineskip ){ \box_use:N \g__letgut_membership_reminder_box } } } } } #+end_src ** Last page handling :PROPERTIES: :CUSTOM_ID: ImplementationLastpagehandling-jbng55h0jlj0 :END: The last pages are special: they should automatically contain # the list of the acronyms used in the \lettre, and some informations about \gutenberg. #+begin_src latex \AddToHook{enddocument} { % \clearpage % \printacronyms[heading=title,display=used] #+end_src Conditionally to the fact the ~informations~ option is not set to ~false~: if the \file*{informations-gut.tex} which contains the informations about \gutenberg{} is found (firstly in the current directory, secondly in the parent directory, thirdly in the TDS). Otherwise, a warning is displayed. #+begin_src latex \bool_if:NT \g__letgut_informations_bool { \clearpage \phantomsection \file_if_exist:nTF {./\c__letgut_informations_gutenberg_file_tl}{ \inputarticle*{ ./\c__letgut_informations_gutenberg_file_tl } }{ \file_if_exist:nTF {../\c__letgut_informations_gutenberg_file_tl}{ \inputarticle*{ ../\c__letgut_informations_gutenberg_file_tl } }{ \file_if_exist:nTF {\c__letgut_informations_gutenberg_file_tl}{ \inputarticle*{ \c__letgut_informations_gutenberg_file_tl } }{ \msg_warning:nn{letgut}{Informations~file~missing} \alertbox{ \c__letgut_missing_infomations_tl } } } } } #+end_src We close the ~\AddToHook{enddocument}~ argument. #+begin_src latex } #+end_src We close the boolean which tests whether the target audience is the readers or the author(s) of the “Lettre”. #+begin_src latex } } #+end_src ** Sections, subsections, etc. :PROPERTIES: :CUSTOM_ID: ImplementationSectionssubsectionsetc-vzng55h0jlj0 :END: *** Numbering :PROPERTIES: :CUSTOM_ID: ImplementationSectionssubsectionsetcNumbering-lmog55h0jlj0 :END: We want all the sections to be unnumbered. #+begin_src latex \setcounter{secnumdepth}{-10} #+end_src *** Format :PROPERTIES: :CUSTOM_ID: ImplementationSectionssubsectionsetcFormat-tapg55h0jlj0 :END: When used in titles, ~\hologo~ needs to be protected. In order to not bother the user with this peticularity, we make this the default for it. #+begin_src latex % \AddToHook{cmd/hologo/before}{\protect} \NewCommandCopy{\__letgut_old_hologo}{\hologo} \RenewDocumentCommand {\hologo} { m }{ \protect\__letgut_old_hologo { #1 } } #+end_src We want the \package{hologo}'s ~\hologo~ command to have its mandatory argument not uppercased in the context of ~\text_uppercase:n~ (as in titles, cf. just below). #+begin_src latex \tl_put_right:Nn \l_text_case_exclude_arg_tl { \hologo } % \tl_put_right:Nn \l_text_case_exclude_arg_tl { \ac } % \tl_put_right:Nn \l_text_case_exclude_arg_tl { \acs } % \tl_put_right:Nn \l_text_case_exclude_arg_tl { \acl } % \tl_put_right:Nn \l_text_case_exclude_arg_tl { \acf } #+end_src - We create the new level ~\title~ for the titles of the articles. They are displayed uppercased. #+begin_src latex \AddToHook{begindocument/before}{% \titleclass{\title}{straight}[\part] \titleformat{\title}{ \normalfont \LARGE \bfseries }{}{1em}{ \aldineleft\c_space_tl\text_uppercase:n } \etocsetlevel{title}{0} \def\toclevel@title{0}% \etocsetstyle {title} {} { \leavevmode\leftskip 2cm\relax } { \bool_lazy_or:nnTF { \str_if_eq_p:Vn \g__letgut_detailedtoc_level_str { 0 } }{ \str_if_eq_p:Vn \g__letgut_detailedtoc_level_str { title } } { \mdseries }{ \bfseries } \normalsize \etocname \nobreak\leaders\hbox~ to~ 1ex{\hss.}\hfill \etocpage \par } {} #+end_src - We also create the new level ~\subtitle~ for the subtitles of the articles. They are dispayed uppercased (but in a smaller size than ~\title~). #+begin_src latex \titleclass{\subtitle}{straight}[\title] \titleformat{\subtitle}{ \normalfont \Large \bfseries \text_uppercase:n }{}{1em}{}{} \etocsetlevel{subtitle}{1} \def\toclevel@subtitle{1}% \def\toclevel@subtitle{1} #+end_src - By default (that is when ~\subtitle~ is not used), the toc levels of the sections, subsections, etc. are set to ~1~, ~2~, etc. But, when ~\subtitle~ is used, since this level has toc level ~1~, the toc levels of the sections, subsections, etc. have to be set to ~2~, ~3~, etc. And this has to be reset each time ~\title~ and ~\subtitle~ are used. #+begin_src latex \AddToHook{cmd/title/before}{ \etocsetlevel{section}{1} \def\toclevel@section{1}% \etocsetlevel{subsection}{2} \def\toclevel@subsection{2}% \etocsetlevel{subsubsection}{3} \def\toclevel@subsubsection{3}% \etocsetlevel{paragraph}{4} \def\toclevel@paragraph{4}% \etocsetlevel{subparagraph}{5} \def\toclevel@subparagraph{5}% } \AddToHook{cmd/subtitle/before}{ \etocsetlevel{section}{2} \def\toclevel@section{2}% \etocsetlevel{subsection}{3} \def\toclevel@subsection{3}% \etocsetlevel{subsubsection}{4} \def\toclevel@subsubsection{4}% \etocsetlevel{paragraph}{5} \def\toclevel@paragraph{5}% \etocsetlevel{subparagraph}{6} \def\toclevel@subparagraph{6}% } #+end_src # - The sections have the usual format, except that their titles are uppercase. # #+begin_src latex # \titleformat{\section}{ # \normalfont # \Large # \bfseries # \text_uppercase:n # % }{\thesection}{1em}{}{} # #+end_src - The (sub)paragraphs have the usual format, except that they are not “runin” (\package{titlesec}'s package's terminology). #+begin_src latex \titleformat{\paragraph}{ \normalfont \normalsize \bfseries }{\theparagraph}{1em}{} \titleformat{\subparagraph}{ \normalfont \normalsize \bfseries }{\thesubparagraph}{1em}{} } #+end_src - We modify the spacing, mainly by shifting the titles in the left margin (the rest is borrowed from the standard classes). #+begin_src latex \titlespacing*{\title} {\c__letgut_title_hoffset_dim} {\c__letgut_before_title_title_skip} {\c__letgut_after_title_title_skip} \titlespacing*{\subtitle} {\c__letgut_subtitle_hoffset_dim} {\c__letgut_before_subtitle_title_skip} {\c__letgut_after_subtitle_title_skip} \titlespacing*{\section} {\c__letgut_section_hoffset_dim} {\c__letgut_before_section_title_skip} {\c__letgut_after_section_title_skip} \titlespacing*{\subsection} {\c__letgut_subsection_hoffset_dim} {\c__letgut_before_subsection_title_skip} {\c__letgut_after_subsection_title_skip} \titlespacing*{\subsubsection} {\c__letgut_subsubsection_hoffset_dim} {\c__letgut_before_subsubsection_title_skip} {\c__letgut_after_subsubsection_title_skip} \titlespacing*{\paragraph} {\c__letgut_paragraph_hoffset_dim} {\c__letgut_before_paragraph_title_skip} {\c__letgut_after_paragraph_title_skip} \titlespacing*{\subparagraph} {\c__letgut_subparagraph_hoffset_dim} {\c__letgut_before_subparagraph_title_skip} {\c__letgut_after_subparagraph_title_skip} #+end_src ** Document commands :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommands-s1qg55h0jlj0 :END: *** Setup :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsSetup-roqg55h0jlj0 :END: We define the command that lets us specify the newsletter setup. #+begin_src latex \NewDocumentCommand \letgutsetup { m } { \keys_set:nn { letgut } { #1 } } #+end_src *** For the rubric dedicated to new stuffs appeared on \acs{ctan} :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsFortherubricdedicatedtonewstuffsappearedonacsctan-jerg55h0jlj0 :END: - We create a new type of list, dedicated to the new stuffs (classes, packages, etc.) on CTAN and similar to a description list (except the label provided in the optional argument of ~\item~ is automatically an argument of the ~\package~ command). #+begin_src latex \cs_new_protected:Nn \__letgut_ctan_news_item:n { \package{#1}~: } \newlist{ctannews}{description}{1} \setlist[ctannews]{format=\__letgut_ctan_news_item:n} #+end_src The stuffs created by French speaking people are highlighted in a special way and, for this, a starred variant of the ~\item~ command is provided. We insert a systematic ~\phantomsection~ in order the cross-references to such items are correct. #+begin_src latex \cs_new_protected:Npn \__letgut_item:nn #1 #2 { \tl_if_empty:nTF {#2} { \__letgut_old_item }{ \__letgut_old_item[#2] } \phantomsection \IfBooleanT {#1}{ \mbox{}\marginpar[\mbox{}\hfill\francophony]{} } } \NewCommandCopy{\__letgut_old_item}{\item} \RenewDocumentCommand {\item} { s O{} } { \__letgut_item:nn {#1}{#2} } #+end_src - Command that inserts the \enquote{francophony} logo. #+begin_src latex \NewDocumentCommand {\francophony} { } { \raisebox{-1.5pt}{ \__letgut_orig_includegraphics*[width=\f@size pt]{ letgut-francophony-icon } } } #+end_src *** Persons, authors and list of participants :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsPersonsandauthors-h5sg55h0jlj0 :END: For both persons and authors, the argument of: - a single individual is given as: - \meta{Last name}, \meta{First name} - and possibly \meta{Last name}, \meta{First name}, \meta{Title} - multiple individuals, the schemes for each of the individuals are the same of a single one, separated by a semicolon. #+begin_src latex \NewDocumentCommand {\person} { s m } { \__letgut_process_list:nn {#1} {#2} } \cs_new_protected:Npn \__letgut_author:nn #1 #2 { \nopagebreak \begin{flushright} \__letgut_process_list:nn {#1} {#2} \end{flushright} } \AddToHook{begindocument/end}{% \RenewDocumentCommand\author{ s m } { \__letgut_author:nn { #1 } { #2 } } } #+end_src In the following ~\__letgut_titlecase_name~ control sequence, we parse last and first names, splitting and unsplitting them at spaces and dashes (~-~) with titlecasing in between. #+begin_src latex \cs_new_protected:Npn \__letgut_titlecase_name:n #1 { \seq_set_split:Nnn \l__letgut_tmpa_seq { - } {#1} \seq_set_map_x:NNn \l__letgut_tmpb_seq \l__letgut_tmpa_seq { \text_titlecase_first:n{ \text_lowercase:n {##1} } } \tl_set:Nx \l__letgut_tmpa_tl {\seq_use:Nn \l__letgut_tmpb_seq {-}} \seq_clear:N \l__letgut_tmpa_seq \seq_set_split:NnV \l__letgut_tmpa_seq { ~ } { \l__letgut_tmpa_tl } \seq_set_map_x:NNn \l__letgut_tmpb_seq \l__letgut_tmpa_seq { \text_titlecase_first:n{##1} } \seq_use:Nn \l__letgut_tmpb_seq {~} } #+end_src The following control sequence splits a semi-colon separated list and each item is splitted as a comma separated list. #+begin_src latex \cs_new_protected:Nn \__letgut_person_last_name:n { {% \scshape \__letgut_titlecase_name:n {#1}} } \cs_new_protected:Nn \__letgut_person_first_name_last_name:nn { \__letgut_titlecase_name:n {#1} \c_space_tl \__letgut_person_last_name:n {#2} } \cs_new_protected:Nn \__letgut_person_first_name_last_name_title:nnn { \__letgut_person_first_name_last_name:nn {#1} {#2} \c_space_tl (#3) } \seq_new:N \l__letgut_items_seq \cs_new_protected:Npn \__letgut_process_list:nn #1 #2 { \seq_clear:N \l__letgut_items_seq \seq_set_split:Nnn \l__letgut_tmpa_seq {~and~} {#2} \IfBooleanT{#1}{ \seq_sort:Nn \l__letgut_tmpa_seq { \str_compare:nNnTF { ##1 } > { ##2 } { \sort_return_swapped: } { \sort_return_same: } } } \seq_map_inline:Nn \l__letgut_tmpa_seq { \seq_set_from_clist:Nn \l__letgut_tmpb_seq {##1} \seq_pop_left:NN \l__letgut_tmpb_seq \l_letgut_last_name_tl \seq_pop_left:NN \l__letgut_tmpb_seq \l_letgut_first_name_tl \seq_pop_left:NN \l__letgut_tmpb_seq \l_letgut_title_tl \seq_put_right:Nx \l__letgut_items_seq { \quark_if_no_value:NTF \l_letgut_first_name_tl { \__letgut_person_last_name:n { \l_letgut_last_name_tl } }{ \quark_if_no_value:NTF \l_letgut_title_tl { \__letgut_person_first_name_last_name:nn {\l_letgut_first_name_tl} {\l_letgut_last_name_tl} }{ \__letgut_person_first_name_last_name_title:nnn {\l_letgut_first_name_tl} {\l_letgut_last_name_tl} {\l_letgut_title_tl} } } } } \seq_use:Nnnn \l__letgut_items_seq { \c_space_tl \str_use:N \& \c_space_tl } { ,~ } { \c_space_tl \str_use:N \& \c_space_tl } } #+end_src The list of contributors (possibly the masthead) will be the list of the persons who contributed to the current issue of the \lettre{}, with both a pre- and a post-text, the whole in a centered boxed minipage. #+begin_src latex \tl_const:Nn \c__letgut_preamble_list_of_contributors_tl { De~ près,~ de~ loin,~ par~ leurs~ avis~ éclairés,~ par~ leurs~ remarques~ pertinentes~ ou~ par~ leurs~ articles,~ ont~ contribué~ à~ cette~ \lettre{}~ :~ % } \tl_const:Nn \c__letgut_postamble_list_of_contributors_tl { \c_space_tl (et~ nous~ espérons~ n'avoir~ oublié~ personne). } \cs_new_protected:Nn \__letgut_list_of_contributors:nnn { \par \fbox{ \begin{minipage}[t]{\linewidth-2\fboxsep-2\fboxrule} #1 \person*{#3} #2 \end{minipage} } } \NewDocumentCommand {\listofcontributors} { O{\c__letgut_preamble_list_of_contributors_tl} O{\c__letgut_postamble_list_of_contributors_tl} m } { \__letgut_list_of_contributors:nnn {#1} {#2} {#3} } #+end_src *** Horizontal rule :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsHorizontalrule-8vsg55h0jlj0 :END: #+begin_src latex \NewDocumentCommand {\separator} { } { \par \skip_vertical:N 1em \hrule \skip_vertical:N 1em } #+end_src *** Alert boxes :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsAlertboxes-ijtg55h0jlj0 :END: #+begin_src latex \colorlet {letgut_default_alert_box_color} { \c__letgut_default_alert_box_color_tl } \NewDocumentCommand \alertbox { O{letgut_default_alert_box_color} +m } { \__letgut_alert_box:nn { #1 }{ #2 } } #+end_src *** Typesetting of packages, classes, files and softwares. :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsTypesettingofpackagesclassesfilesandsoftwares-09ug55h0jlj0 :END: The ~\c__letgut_httpsprefix_tl~ comes from: https://github.com/latex3/hyperref/issues/188#issuecomment-826302843. #+begin_src latex \tl_const:Nx \c__letgut_httpsprefix_tl {https\char_generate:nn{58}{12}//} #+end_src We define the font switches dediacted to each of packages and classes (\TeX{} stuff), files and softwares. #+begin_src latex \tl_new:N \l__letgut__tex_stuff_font_switch_tl \tl_new:N \l__letgut_files_font_switch_tl \tl_new:N \l__letgut_softwares_font_switch_tl \tl_set:Nn \l__letgut__tex_stuff_font_switch_tl {\sffamily} \tl_set:Nn \l__letgut_files_font_switch_tl {\ttfamily} \tl_set:Nn \l__letgut_softwares_font_switch_tl {\ttfamily} #+end_src #+begin_src latex \cs_new_protected:Nn \__letgut_tex_stuff:nn { \IfNoValueTF {#1} { \href{ \c__letgut_httpsprefix_tl ctan.org/pkg/#2 }{ {\l__letgut__tex_stuff_font_switch_tl #2} } }{ \tl_if_empty:nTF {#1} { {\l__letgut__tex_stuff_font_switch_tl #2} }{ \href{#1}{{\l__letgut__tex_stuff_font_switch_tl #2}} } } } \cs_new_protected:Nn \__letgut_software:nn { #+end_src We split the software's name at spaces in order to apply the dedicated font switch (~\ttfamily~) to all of it except to the spaces. #+begin_src latex \seq_set_split:Nnn \l__letgut_tmpa_seq { ~ } { #2 } \seq_set_map:NNn \l__letgut_tmpb_seq \l__letgut_tmpa_seq {{\l__letgut_softwares_font_switch_tl ##1}} \tl_if_empty:nTF {#1} { \seq_use:Nn \l__letgut_tmpb_seq { ~ } }{ \href{#1}{ \seq_use:Nn \l__letgut_tmpb_seq { ~ } } } } \cs_new_protected:Nn \__letgut_file:n { {\l__letgut_files_font_switch_tl #1} } \NewDocumentCommand{\package}{ s o m O{\c__letgut_package_tl} } { \IfBooleanT{#1}{ #4 \c_space_tl } \__letgut_tex_stuff:nn {#2}{#3} } \NewDocumentCommand{\class}{ s o m O{\c__letgut_class_tl} } { \IfBooleanT{#1}{ #4 \c_space_tl } \__letgut_tex_stuff:nn {#2}{#3} } \NewDocumentCommand{\file}{ s m O{\c__letgut_file_tl} } { \IfBooleanT{#1}{ #3 \c_space_tl } \__letgut_file:n {#2} } \NewDocumentCommand {\software} { s O{} m O{\c__letgut_software_tl} } { \IfBooleanT{#1}{ #4 \c_space_tl } \__letgut_software:nn {#2}{#3} } #+end_src *** Names, expressions, etc. :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsNamesexpressionsetc-11vg55h0jlj0 :END: We define here some commands for names and expressions that are likely to be frequently used. The more the users will resort to these commands, the less will be inconsistently typesetted these names and expressions. #+begin_src latex \NewExpandableDocumentCommand { \gutenberg } { } { \c__letgut_gutenberg_tl } \NewExpandableDocumentCommand { \gut } { } { \c__letgut_gutenberg_tl } \NewExpandableDocumentCommand { \assogut } { } { \c__letgut_association_tl \c_space_tl \c__letgut_gutenberg_tl } \NewExpandableDocumentCommand { \Assogut } { } { \text_titlecase_first:n {\assogut} } \NewExpandableDocumentCommand { \lettres } { } { \c__letgut_Lettres_tl } \NewExpandableDocumentCommand { \lettresgut } { } { \c__letgut_Lettres_tl \c_space_tl \c__letgut_gutenberg_tl } \NewExpandableDocumentCommand { \Cahier } { } { \c__letgut_cahier_tl } \NewExpandableDocumentCommand { \Cahiers } { } { \c__letgut_cahiers_tl } \NewExpandableDocumentCommand { \cahier } { } { \c__letgut_cahier_tl } \NewExpandableDocumentCommand { \cahiers } { } { \c__letgut_cahiers_tl } \NewExpandableDocumentCommand { \cahiergut } { } { \cahier \c_space_tl \gutenberg } \NewExpandableDocumentCommand { \cahiersgut } { } { \cahiers \c_space_tl \gutenberg } \NewExpandableDocumentCommand { \letgut } { } { \class{letgut} } \NewExpandableDocumentCommand { \letgutcls } { } { \class*{letgut} } \NewExpandableDocumentCommand { \tugboat } { } { \c__letgut_tugboat_tl } \NewExpandableDocumentCommand { \knuth } { } { \person{Knuth,~ Donald~ E.} } \NewExpandableDocumentCommand { \lamport } { } { \person{Lamport,~ Leslie} } \NewExpandableDocumentCommand { \tl } { } { \c__letgut_tex_live_tl } \NewExpandableDocumentCommand { \linux } { } { \c__letgut_gnu_linux_tl } \NewExpandableDocumentCommand { \macos } { } { \c__letgut_macOS_tl } \NewExpandableDocumentCommand { \windows } { } { \c__letgut_windows_tl } #+end_src We define the command ~\lettrenumber~ that displays the number of some \lettre{} issue: - preceeded by “\no” if used starred, - by default the current one, - possibly shifted w.r.t. the current one, depending on the first token of the optional argument: - if it is not ~.~, ~+~ nor ~-~: this argument (pretty useless: it is easier to directly type the desired number), - if it is ~.~: the current number of the \lettre (pretty useless: it is easier to just not use the optional argument), - if it is ~+~ or ~-~ followed by a number: the current number of the \lettre, shifted by what is specified. #+begin_src latex \cs_new_protected:Npn \__letgut_get_lettre_number:n #1 { \tl_if_empty:nTF {#1}{ \int_use:N \g__letgut_number_int }{ \tl_set:Nx \l__letgut_tmpa_tl {\tl_head:n { #1 }} \tl_set:Nn \l__letgut_tmpb_tl { #1 } \tl_case:NnF \l__letgut_tmpa_tl { {\c__letgut_plus_tl} {\int_eval:n {\g__letgut_number_int\l__letgut_tmpa_tl\tl_range:Nnn \l__letgut_tmpb_tl { 2 } { -1 }}} {\c__letgut_minus_tl} {\int_eval:n {\g__letgut_number_int\l__letgut_tmpa_tl\tl_range:Nnn \l__letgut_tmpb_tl { 2 } { -1 }}} {\c__letgut_dot_tl} {\int_use:N \g__letgut_number_int} } {\l__letgut_tmpb_tl} } } \NewDocumentCommand { \lettrenumber } { s O{} } { \IfBooleanT{#1}{ \no } \__letgut_get_lettre_number:n { #2 } } #+end_src The “\lettre” and “\lettregut” expressions are treated separately since they are subject to variations, depending on how they are used. The corresponding commands ~\lettre~ and ~\lettregut~ used without star nor optional argument typeset resp. “\lettre” and “\lettregut”: - immediately followed by “\no” if used starred, - followed by some strings, depending on the first token of their optional argument: - if it is not ~.~, ~+~ nor ~-~: this argument, - if it is ~.~: the current number of the \lettre, - if it is ~+~ or ~-~ followed by a number: the current number of the \lettre, shifted by what is specified. #+begin_src latex \tl_const:Nn \c__letgut_plus_tl { + } \tl_const:Nn \c__letgut_minus_tl { - } \tl_const:Nn \c__letgut_dot_tl { . } \cs_new_protected:Npn \__letgut_lettre:nnn #1 #2 #3 { \c__letgut_Lettre_tl #2 \tl_if_empty:nF {#1} { #3 \nobreakspace \__letgut_get_lettre_number:n {#1} } } \NewDocumentCommand { \lettre } { s O{} } { \IfBooleanTF{#1}{ \__letgut_lettre:nnn { #2 } { } { \tl_if_empty:nF {#2}{ \c_space_tl\no } } }{ \__letgut_lettre:nnn { #2 } { } { } } } \NewDocumentCommand { \lettregut } { s O{} } { \IfBooleanTF{#1}{ \__letgut_lettre:nnn { #2 } { \c_space_tl \c__letgut_gutenberg_tl } { \c_space_tl\no } }{ \__letgut_lettre:nnn { #2 } { \c_space_tl \c__letgut_gutenberg_tl } { } } } #+end_src The ~\lettre~ and ~\lettregut~ can be used in titles, sections, etc. (involving bookmarks) but, because their last argument isn't a mandatory one, they would have an inconsistent behavior if used with their star or their optional argument (see https://tex.stackexchange.com/q/427557/18401). *** Foreign locutions :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsForeignlocutions-1svg55h0jlj0 :END: #+begin_src latex \cs_new_protected:Npn \__letgut_emphasis:n #1 { \emph{#1} } \NewDocumentCommand { \foreignloc } { m } { \__letgut_emphasis:n {#1} } \NewDocumentCommand { \latinloc } { m } { \__letgut_emphasis:n {#1} } #+end_src *** Unicode code points :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsUnicodecodes-30lksfa0nlj0 :END: #+begin_src latex \cs_new_protected:Npn \__letgut_unicode_code:nn #1 #2 { U+\bgroup\addfontfeature{Numbers={Lining,Proportional}}#2\egroup \tl_if_empty:nF {#1}{ \c_space_tl ({\addfontfeature{RawFeature={smcp,c2sc}}#1}) } } \NewDocumentCommand { \Ucode } { O{} m } { \__letgut_unicode_code:nn {#1}{#2} } #+end_src *** Bookmarks handling :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsBookmarkshandling-zbxg55h0jlj0 :END: We disabling some commands when their arguments have to go to bookmarks. #+begin_src latex \AddToHook{begindocument/end}{ \pdfstringdefDisableCommands{ \RenewExpandableDocumentCommand\person { m }{#1} \RenewExpandableDocumentCommand\author{ m }{#1} \RenewExpandableDocumentCommand \package { s O{} m }{ \IfBooleanT{#1}{\c__letgut_package_tl\c_space_tl}#3 } \RenewExpandableDocumentCommand\class { s O{} m }{ \IfBooleanT{#1}{\c__letgut_class_tl\c_space_tl}#3 } \RenewExpandableDocumentCommand\file { s m }{ \IfBooleanT{#1}{\c__letgut_file_tl\c_space_tl}#2 } \RenewExpandableDocumentCommand\software { s O{} m }{ \IfBooleanT{#1}{\c__letgut_software_tl\c_space_tl}#3 } \RenewExpandableDocumentCommand\foreignloc{ m }{#1} \RenewExpandableDocumentCommand\latinloc{ m }{#1} \RenewExpandableDocumentCommand\lettre{ }{Lettre} \RenewExpandableDocumentCommand\gutenberg{ }{GUTenberg} \RenewExpandableDocumentCommand\gut{ }{\gutenberg} \RenewExpandableDocumentCommand\lettregut{ }{ \lettre\c_space_tl\gutenberg } \RenewExpandableDocumentCommand\Cahier{ }{Cahier} \RenewExpandableDocumentCommand\Cahiers{ }{\Cahier s} \RenewExpandableDocumentCommand\cahier{ }{Cahier} \RenewExpandableDocumentCommand\cahiers{ }{\cahier s} \RenewExpandableDocumentCommand\cahiergut{ }{ \cahier\c_space_tl\gutenberg } \RenewExpandableDocumentCommand\cahiersgut{ }{ \cahier s\c_space_tl\gutenberg } \RenewExpandableDocumentCommand\letgut{ }{letgut} \RenewExpandableDocumentCommand\letgutcls{ }{classe~ letgut} \RenewExpandableDocumentCommand\knuth{ }{Donald~ E.~ Knuth} \RenewExpandableDocumentCommand\lamport{ }{Leslie~ Lamport} \RenewExpandableDocumentCommand\linux{ }{GNU/Linux} \RenewExpandableDocumentCommand\macos{ }{macOS} \RenewExpandableDocumentCommand\windows{ }{Windows} } } #+end_src *** Acronyms :PROPERTIES: :CUSTOM_ID: ImplementationDocumentcommandsAcronyms-93yg55h0jlj0 :END: The following command let us define acronyms. The arguments are as follows: - ~#1~: optional argument that let us override the default settings of this command, - ~#2~: the uppercase version of both the id and the short form of the acronym, - ~#3~: the long form (in French if #4 has ~-NoValue-~, in English otherwise), - ~#4~: the French translation of an English acronym. #+begin_src latex \cs_new_protected:Nn \__letgut_acronym:nnnn { \AddToHook{begindocument/before}{ \IfValueTF {#4}{ \tl_if_empty:nTF {#4}{ \exp_args:Nx \DeclareAcronym{\text_lowercase:n {#2}}{ short = \text_lowercase:n {#2}, sort= #2, long = {\emph{#3}}, extra-long = {anglais}, pdfstring = #2, short-acc = #2, #1 } }{ \exp_args:Nx \DeclareAcronym{\text_lowercase:n {#2}}{ short = \text_lowercase:n {#2}, sort= #2, long = {#4}, foreign = {#3}, foreign-babel = english, foreign-locale = anglais, pdfstring = #2, short-acc = #2, #1 } } }{ \exp_args:Nx \DeclareAcronym{\text_lowercase:n {#2}}{ short = \text_lowercase:n {#2}, sort= #2, long = {#3}, pdfstring = #2, short-acc = #2, #1 } } #+end_src The ⟨id⟩ of the acronym will automatically be the name of a public command (~\~​⟨id⟩) acting as ~\ac{id}~. #+begin_src latex \exp_after:wN \cs_if_exist:cT { \text_lowercase:n {#2} } { \msg_note:nnn{letgut}{Existing~command}{#2} } \exp_args:Nc \ProvideDocumentCommand { \text_lowercase:n {#2} } { s } { \IfBooleanTF {##1}{ \exp_args:Nx \acs { \text_lowercase:n {#2} } }{ \exp_args:Nx \ac { \text_lowercase:n { #2 } } } } #+end_src We want the command ~\~​⟨id⟩ to work also in bookmarks (the resulting string will be the uppercased acronym). #+begin_src latex \pdfstringdefDisableCommands { \exp_after:wN \def\cs:w \text_lowercase:n {#2} \cs_end: { #2 } } } } #+end_src The first occurrences of the acronyms will be displayed in their short forms, with the long ones in footnotes. But what about acronyms whom first occurrences arise within footnotes? We want them to be displayed as their short forms followed by their the long form in parentheses. For this, we have to add a boolean at the beginning (and reversed at the end) of the ~\footnote~ command to know whether we currently are in a footnote or not and display the acronym accordingly. BTW, we hack the ~\footnote~ command in order to mimic the ~multiple~ option of the \package{footmisc} package (consecutive ~\footnote~ commands make their corresponding footnote marks separated by commas). See https://tex.stackexchange.com/a/62091. #+begin_src latex \let\__letgut_next_token\relax \cs_new_protected:Npn \__letgut_next_token_is_footnote: {\if_meaning:w\footnote\__letgut_next_token\textsuperscript{,}\fi} \NewCommandCopy{\__letgut_old_footnote}{\footnote} \RenewDocumentCommand {\footnote} { O{} m }{ \bool_set_true:N \l__letgut_in_footnote_bool \tl_if_empty:nTF {#1}{ \__letgut_old_footnote { #2 } }{ \__letgut_old_footnote [#1] { #2 } } \bool_set_false:N \l__letgut_in_footnote_bool \futurelet\__letgut_next_token\__letgut_next_token_is_footnote: } #+end_src We change a bit both the ~footnote~ acro template, the ~description~ list template, and the macro which prints the locale. #+begin_src latex \DeclareAcroProperty{extra-foreign} \DeclareAcroProperty{extra-long} \RenewAcroTemplate {footnote} { \acrowrite {short} \acroiffirstT { #+end_src If we are in a footnote, first occurrences of the acronyms are displayed as “short (long)”. Otherwise, they are displayed as “short\footnote{long}”. #+begin_src latex \bool_if:NTF \l__letgut_in_footnote_bool { \space ( \acroifT {alt} { \acrotranslate {or} ~ \acrowrite {alt} ~ } \acroifT {foreign} { \acrowrite {foreign} } \acrowrite {long} \acrogroupcite ) }{ \acfootnote { \acroifT {alt} { \acrotranslate {or} ~ \acrowrite {alt} :~ } \acroifT {foreign} { \acrowrite {foreign} } \acrowrite {long} \acroifT {extra-long} { ~ [\acrowrite {extra-long}] } \acroifT {extra-foreign} { \c_space_tl [\acrowrite {extra-foreign}] } \acrogroupcite } } } } \RenewAcroTemplate[list]{description}{% \acroheading \acropreamble \begin{description} \acronymsmapF{% \item[\acrowrite{short}\acroifT{alt}{/\acrowrite{alt}}] \acroifT{foreign}{ \acrowrite{foreign}\acroifT{extra}{, } }% \acroifT{extra}{\acrowrite{extra}}% \acroifanyT{foreign,extra}{\acspace (}% \acrowrite{list}% \acroifT {extra-foreign} { , \c_space_tl \acrowrite {extra-foreign} } \acroifanyT{foreign,extra}{)}% \acropagefill \acropages {\acrotranslate{page}\nobreakspace} {\acrotranslate{pages}\nobreakspace}% } {\item\AcroRerun} \end{description} } % #1: id % #2: property % #3: text \cs_set_protected:Npn \acro_locale:nnn #1#2#3 { \acro_if_foreign:nTF {#2} { \acro_if_locale:nnTF {#1} {#2} { \__acro_foreign_language:en { \str_lowercase:e { \acro_property_get:nn {#1} {foreign-babel} } } {#3} \bool_if:NTF \l__acro_list_bool { \bool_if:NT \l__acro_list_show_locale_bool } { \bool_if:NT \l__acro_show_locale_bool } { { \l__acro_locale_format_tl { \acro_property_if_set:nnTF {#1} { foreign-locale } { \acspace [ \acro_property_get:nn {#1} { foreign-locale } ] }{ \baselanguage { \acro_property_get:nn {#1} { foreign-babel } } } } } :~ } } {#3} } {#3} } #+end_src Now, the document command that let the user create acronyms. #+begin_src latex \NewDocumentCommand{\letgutacro}{ O{} m m o } { \__letgut_acronym:nnnn {#1} {#2} {#3} {#4} } #+end_src For printing the acronyms, we define two new heading templates for the structure levels ~\title~ and ~\subtitle~. #+begin_src latex \NewAcroTemplate[heading] {title} { \title { \acrolistname } } \NewAcroTemplate[heading] {subtitle} { \subtitle { \acrolistname } } #+end_src We make ~\letgutacro~ available only in the preamble part of the document (otherwise, no warning from \package{acro} but only the long form of the acronym is printed when used for the first time with ~\ac~). #+begin_src latex \@onlypreamble\letgutacro #+end_src ** Bibliography :PROPERTIES: :CUSTOM_ID: ImplementationBibliography-ruyg55h0jlj0 :END: We want the ~\citeauthor~ command to display, not only the last, but the full name of the authors. #+begin_src latex \NewCommandCopy{\__letgut_old_citeauthor}{ \citeauthor } \RenewDocumentCommand {\citeauthor} { O{} O{} m } { \AtNextCite{ \DeclareNameAlias{labelname}{given-family} \protected\def\mkbibnamefamily#1{% \textnohyphenation{#1}}% } \__letgut_old_citeauthor[#1][#2]{#3} } #+end_src ** Book reviews :PROPERTIES: :CUSTOM_ID: ImplementationBookreviews-ekzg55h0jlj0 :END: #+begin_src latex \tl_new:N \l__letgut_bookreview_frontcover_tl \tl_new:N \g__letgut_bookreview_bibkey_tl #+end_src The keys options are created. #+begin_src latex \keys_define:nn { letgut/bookreview } { title .tl_gset:N = \g__letgut_bookreview_title_tl, frontcover .tl_set:N = \l__letgut_bookreview_frontcover_tl, bibkey .tl_gset:N = \g__letgut_bookreview_bibkey_tl, reviewer .tl_gset:N = \g__letgut_bookreview_reviewer_tl, price .tl_gset:N = \g__letgut_bookreview_price_tl, #+end_src All these options, when used, must receive a value. #+begin_src latex title .value_required:n = true, frontcover .value_required:n = true, bibkey .value_required:n = true, reviewer .value_required:n = true, } #+end_src We create the new environment for the book reviews. #+begin_src latex \cs_generate_variant:Nn \msg_warning:nnn { nnV } \cs_generate_variant:Nn \msg_error:nnnn { nnVV } \NewDocumentEnvironment{bookreview}{ m } { \tl_gclear:N \g__letgut_bookreview_price_tl \keys_set:nn { letgut/bookreview } { #1 } \section{\g__letgut_bookreview_title_tl} \tl_if_empty:NTF \l__letgut_bookreview_frontcover_tl { \msg_warning:nnV{letgut}{frontcover-missing}{ \g__letgut_bookreview_title_tl } }{ #+end_src We check if the front cover file is available against the list of accepted extensions of the ~graphicx~ package. #+begin_src latex \clist_map_inline:Nn \Gin@extensions { \file_if_exist:nT{\l__letgut_bookreview_frontcover_tl##1}{ \bool_set_true:N \l__letgut_tmpa_bool \clist_map_break: } } \bool_if:NTF \l__letgut_tmpa_bool { \marginpar{ \hspace*{\c__letgut_bookreview_frontcover_margin_sep_dim} % \raggedleft \raisebox{-\totalheight}{ \fbox{ \includegraphics*[width=-\c__letgut_title_hoffset_dim]{ \l__letgut_bookreview_frontcover_tl } } } } }{ \msg_error:nnVV {letgut} {frontcover-file-not-found} {\g__letgut_bookreview_title_tl} {\l__letgut_bookreview_frontcover_tl} } } \noindent \textsf{\fullcite{\g__letgut_bookreview_bibkey_tl}} \tl_if_empty:NF \g__letgut_bookreview_price_tl{ .\c_space_tl\g__letgut_bookreview_price_tl\c_space_tl € } \par }{ \exp_args:NV \author{\g__letgut_bookreview_reviewer_tl} \bool_if:NT \g__letgut_included_files_attached_bool { \seq_map_inline:Nn \g__letgut_added_bib_resources_seq { \file_if_exist:nTF {##1}{ \seq_gput_right:Nn \g__letgut_included_files_seq { \attachfile[ description={ Fichier~ bibliographique~ utilisé~ dans~ le~ présent~ article~ (fichier~ `\tl_to_str:n{##1}`) }, mimetype=application/x-bib ] {\tl_to_str:n{##1}} } } } } } #+end_src ** Keyboard keys :PROPERTIES: :CUSTOM_ID: ImplementationKeyboardkeys-qa0h55h0jlj0 :END: We make use of the Linux Biolinum Keyboard font and extend somehow the ~\LKey~ provided by the \package*{biolinum} in order to more easily write keyboard keys for usual characters on French keyboards. #+begin_src latex \DeclareRobustCommand*\LKey[1]{% \ifx#10\biolinumKeyGlyph{zero}% % spurious space removed 2016/06/24 \else\ifx#11\biolinumKeyGlyph{one}% \else\ifx#12\biolinumKeyGlyph{two}% \else\ifx#13\biolinumKeyGlyph{three}% \else\ifx#14\biolinumKeyGlyph{four}% \else\ifx#15\biolinumKeyGlyph{five}% \else\ifx#16\biolinumKeyGlyph{six}% \else\ifx#17\biolinumKeyGlyph{seven}% \else\ifx#18\biolinumKeyGlyph{eight}% \else\ifx#19\biolinumKeyGlyph{nine}% \else\ifx#1à\biolinumKeyGlyph{agrave}% \else\ifx#1À\biolinumKeyGlyph{Agrave}% \else\ifx#1â\biolinumKeyGlyph{acircumflex}% \else\ifx#1Â\biolinumKeyGlyph{Acircumflex}% \else\ifx#1é\biolinumKeyGlyph{eacute}% \else\ifx#1É\biolinumKeyGlyph{Eacute}% \else\ifx#1è\biolinumKeyGlyph{egrave}% \else\ifx#1È\biolinumKeyGlyph{Egrave}% \else\ifx#1ê\biolinumKeyGlyph{ecircumflex}% \else\ifx#1Ê\biolinumKeyGlyph{Ecircumflex}% \else\ifx#1ë\biolinumKeyGlyph{edieresis}% \else\ifx#1Ë\biolinumKeyGlyph{Edieresis}% \else\ifx#1î\biolinumKeyGlyph{icircumflex}% \else\ifx#1Î\biolinumKeyGlyph{Icircumflex}% \else\ifx#1ï\biolinumKeyGlyph{idieresis}% \else\ifx#1Ï\biolinumKeyGlyph{Idieresis}% \else\ifx#1ô\biolinumKeyGlyph{ocircumflex}% \else\ifx#1Ô\biolinumKeyGlyph{Ocircumflex}% \else\ifx#1ù\biolinumKeyGlyph{ugrave}% \else\ifx#1Ù\biolinumKeyGlyph{Ugrave}% \else\ifx#1û\biolinumKeyGlyph{ucircumflex}% \else\ifx#1Û\biolinumKeyGlyph{Ucircumflex}% \else\ifx#1ü\biolinumKeyGlyph{udieresis}% \else\ifx#1Ü\biolinumKeyGlyph{Udieresis}% \else\ifx#1ÿ\biolinumKeyGlyph{ydieresis}% \else\ifx#1Ÿ\biolinumKeyGlyph{Ydieresis}% \else\ifx#1ç\biolinumKeyGlyph{ccedilla}% \else\ifx#1Ç\biolinumKeyGlyph{Ccedilla}% \else\biolinumKeyGlyph{#1}% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} #+end_src ** Miscellanous :PROPERTIES: :CUSTOM_ID: ImplementationMiscellanous-r11h55h0jlj0 :END: - We specify the possible hyphenations of \enquote{\gutenberg}. #+begin_src latex \hyphenation{GUTen-berg} #+end_src *** ISSN :PROPERTIES: :CUSTOM_ID: ImplementationMiscellanousISSN-cr1h55h0jlj0 :END: #+begin_src latex \cs_new_protected:Npn \__letgut_issn: { \bool_if:NTF \g__letgut_paper_bool { \c__letgut_paper_issn_tl }{ \c__letgut_online_issn_tl } } \NewDocumentCommand{\letgutissn}{ }{ \__letgut_issn: } #+end_src *** Non selectable text :PROPERTIES: :CUSTOM_ID: ImplementationMiscellanousNonselectabletext-wh2h55h0jlj0 :END: We create a control sequence that makes its argument not selectable in the PDF. This will be used notably for the line numbers of the listings and the watermarks. #+begin_src latex \cs_new_protected:Npn \__letgut_unselectable:n #1 { \BeginAccSupp{ActualText={}}#1\EndAccSupp{} } #+end_src *** Typesetting of code, etc. :PROPERTIES: :CUSTOM_ID: ImplementationMiscellanousTypesettingofcodeetc-f83h55h0jlj0 :END: We provide a ~\meta~ macro that (poorly) mimics the one of the \package*{doc}. It is added at the very end of the preamble since other package that provide another definition of this macro may have been loaded (e.g. \package{tcolorbox}). #+begin_src latex \colorlet {__letgut_meta} { brown } \cs_new_protected:Nn \__letgut_meta:nn { \bgroup \normalfont \ttfamily \itshape \textcolor{#1}{$\langle$#2$\rangle$} \egroup } \AddToHook{begindocument/end}{ \DeclareDocumentCommand{\meta}{ O{__letgut_meta} m } { \__letgut_meta:nn {#1}{#2} } } #+end_src *** Input of articles :PROPERTIES: :CUSTOM_ID: ImplementationMiscellanousInputofarticles-aqok3ja00pj0 :END: We create our own ~\input~ command for the articles of the Lettre with the following characteristics: - The previous style is applied automatically. Hence, the keywords defined in a previous file (by loading some peticular (La)TeX dialects, i.e. control sequences and keywords specific to some class or packages) won't interfere with the ones of the current file. - All the acronyms are reset (each acronym is developped at its first occurrence). - The source file of the article is attached to the \pdf{} (if desired, otherwise, use the starred version). We first create a function that attach to the PDF a file only if it exists in the current directory and is non empty. This will be applied to both the \file{localconf.tex} and \file{pre-documentclass.tex} files below. #+begin_src latex \cs_new_protected:Npn \__letgut_attach_non_empty_existing_file:n #1 { \file_get_size:nN {./#1.tex} \l__letgut_tmpa_tl \quark_if_no_value:NF \l__letgut_tmpa_tl { \tl_if_eq:NnF \l__letgut_tmpa_tl {0} { \file_if_exist:nTF {##1}{ \seq_gput_left:Nn \g__letgut_included_files_seq { \attachfile[ description={Source~ nécessaire~ (fichier~ `#1.tex`)}, mimetype=application/x-tex] {#1.tex} } } } } } #+end_src #+begin_src latex \cs_new_protected:Npn \__letgut_input_article:nn #1 #2 { \FloatBarrier \lstset{ style=__letgut_reset_listings_styles } \acresetall% \begin{refsection} \input{#2}% \end{refsection} \bool_if:NT \g__letgut_included_files_attached_bool { \IfBooleanF {#1}{ \__letgut_attach_non_empty_existing_file:n { \c__letgut_local_config_file_tl } \__letgut_attach_non_empty_existing_file:n { \c__letgut_pre_documentclass_file_tl } \seq_gput_left:Nn \g__letgut_included_files_seq { \attachfile[ description={Source~ du~ présent~ article~ (fichier~ `#2.tex`)}, mimetype=application/x-tex] {#2.tex} } \bool_if:NT \g__letgut_acronyms_file_attached_bool { \seq_gput_right:No \g__letgut_included_files_seq { \c__letgut_acronyms_file_attached_tl } } \bool_if:NT \g__letgut_lstlanguage_file_attached_bool { \seq_gput_right:No \g__letgut_included_files_seq { \c__letgut_lstlanguage_file_attached_tl } } \seq_remove_duplicates:N \g__letgut_included_files_seq \seq_use:Nn \g__letgut_included_files_seq { \c_space_tl } \seq_clear:N \g__letgut_included_files_seq \bool_gset_false:N \g__letgut_acronyms_file_attached_bool \bool_gset_false:N \g__letgut_lstlanguage_file_attached_bool } } } \NewDocumentCommand{\inputarticle}{ s m }{ \__letgut_input_article:nn { #1 } { #2 } } #+end_src *** Included graphics attached to the PDF :PROPERTIES: :CUSTOM_ID: ImplementationMiscellanousIncludedgraphicsattachedtothePDF-xoc34ja00pj0 :END: We hack the ~\includegraphics~ command in order to attach the included graphics to the \pdf{} (if desired, otherwise, use the starred version). #+begin_src latex \NewCommandCopy {\__letgut_orig_includegraphics} {\includegraphics} \clist_set:Nx \l__letgut_tmpa_clist {\Gin@extensions} \cs_new_protected:Npn \__letgut_includegraphics:nnn #1 #2 #3 { \file_if_exist:nTF {./#3} { \bool_if:NT \g__letgut_included_files_attached_bool { \IfBooleanF {#1}{ \seq_gput_left:Nn \g__letgut_included_files_seq { \attachfile[ description={ Fichier~ image~ inclus~ dans~ le~ présent~ article~ (fichier~ `#3`) }, mimetype=image ]{./#3} } } } \__letgut_orig_includegraphics[#2]{./#3} }{ \bool_gset_false:N \g__letgut_tmpa_bool \clist_map_inline:Nn \l__letgut_tmpa_clist {% \file_if_exist:nT {./#3##1} { \clist_map_break:n { \bool_if:NT \g__letgut_included_files_attached_bool { \IfBooleanF {#1}{ \seq_gput_left:Nn \g__letgut_included_files_seq { \attachfile[ description={Fichier~ image~ inclus~ dans~ le~ présent~ article~ (fichier~ `#3##1`)}, mimetype=image/##1 ]{./#3##1} } } } \__letgut_orig_includegraphics[#2]{#3} \bool_gset_true:N \g__letgut_tmpa_bool } } } % \bool_if:NF \g__letgut_tmpa_bool { % \@latex@error{File~ `#3'~ not~ found}% % {I~ could~ not~ locate~ the~ file~ with~ any~ of~ these~ extensions:^^J% % \clist_use:Nn \l__letgut_tmpa_clist { ~ }^^J\@ehc}% % } } } \RenewDocumentCommand {\includegraphics} {s O{} m } { \__letgut_includegraphics:nnn {#1} {#2} {#3} } #+end_src *** Added bibliographic ressources attached to the PDF :PROPERTIES: :CUSTOM_ID: ImplementationMiscellanousAddedbibliographicressourcesattachedtothePDF-l4e34ja00pj0 :END: We hack the ~\addbibresource~ command in order to attach the bibliographic ressources to the \pdf{}. #+begin_src latex \cs_new:Nn \__letgut_extract_file_for:nn { \seq_clear:N \g__letgut_added_bib_resources_seq \regex_extract_all:nnNT { \c{ #1 } \[?.*?\]? \{ ( .*? ) \} } { #2 } \g__letgut_added_bib_resources_seq { \seq_map_indexed_inline:Nn \g__letgut_added_bib_resources_seq { \int_if_odd:nT {##1} { \seq_gset_item:Nnn \g__letgut_added_bib_resources_seq {##1} {} } } \seq_gremove_duplicates:N \g__letgut_added_bib_resources_seq \seq_gpop:NN \g__letgut_added_bib_resources_seq \l_tmpa_tl } } \NewCommandCopy {\__letgut_orig_addbibresource} {\addbibresource} \cs_new_protected:Npn \__letgut_addbibresource:nnn #1 #2 #3 { \__letgut_orig_addbibresource[#2]{#3} } \RenewDocumentCommand {\addbibresource} { s O{} m } { \__letgut_addbibresource:nnn {#1} {#2} {#3} } \AddToHookWithArguments{cmd/sa@gobble/before}{ \__letgut_extract_file_for:nn { addbibresource }{ #1 } } #+end_src *** Added acronym definitions file attached to the PDF :PROPERTIES: :CUSTOM_ID: ImplementationMiscellanousAddedbibliographicressourcesattachedtothePDF-l4e34ja00pj0 :END: We hack the ~\ac~ and ~\acs~ commands in order to attach the acronym definitions file to the \pdf{}. #+begin_src latex \bool_if:NT \g__letgut_included_files_attached_bool { \tl_const:Nn \c__letgut_acronyms_file_attached_tl { \file_if_exist:nTF {\g__letgut_effective_acronyms_file_t}{ \attachfile[ description={ Source~ du~ fichier~ d'acronymes~ utilisé~ dans~ le~ présent~ article~ (fichier~ `\c__letgut_acronyms_file_tl.tex`) }, mimetype=application/x-tex]% {\g__letgut_effective_acronyms_file_tl}% } } \AddToHook{cmd/ac/before}{ \bool_gset_true:N \g__letgut_acronyms_file_attached_bool } \AddToHook{cmd/acs/before}{ \bool_gset_true:N \g__letgut_acronyms_file_attached_bool } } #+end_src *** Added letgut listings language file attached to the PDF :PROPERTIES: :CUSTOM_ID: ImplementationMiscellanousAddedbibliographicressourcesattachedtothePDF-l4e34ja00pj0 :END: We hack the ~\ac~ and ~\acs~ commands in order to attach the acronym definitions file to the \pdf{}. #+begin_src latex \bool_if:NT \g__letgut_included_files_attached_bool { \file_if_exist:nTF {../\c__letgut_lstlanguage_file_tl}{ \tl_const:Nn \c__letgut_lstlanguage_file_attached_tl { \attachfile[ description={ Source~ du~ fichier~ de~ langages~ informatiques~ utilisé~ dans~ le~ présent~ article~ (fichier~ `\c__letgut_lstlanguage_file_tl`) }, mimetype=application/x-tex]% {../\c__letgut_lstlanguage_file_tl}% } }{ \tl_const:Nn \c__letgut_lstlanguage_file_attached_tl {} } \AddToHook{env/ltx-code/before}{ \bool_gset_true:N \g__letgut_lstlanguage_file_attached_bool } \AddToHook{env/ltx-code-result/before}{ \bool_gset_true:N \g__letgut_lstlanguage_file_attached_bool } \AddToHook{env/ltx-code-external-result/before}{ \bool_gset_true:N \g__letgut_lstlanguage_file_attached_bool } } #+end_src ** Listings :PROPERTIES: :CUSTOM_ID: ImplementationListings-514h55h0jlj0 :END: We define a style for all the listings which resets all the \TeX{} control sequences and keywords, and fix some defaults. #+begin_src latex \lstdefinestyle{__letgut_reset_listings_styles}{ basicstyle=\ttfamily, breaklines, language=TeX,% texcs={},% language={},% keywords={},% keywords=[2]{},% keywords=[3]{},% keywords=[4]{},% keywords=[5]{},% otherkeywords={},% alsoletter={},% alsodigit={},% escapechar=£, columns=fullflexible, keepspaces=true, upquote=true, showstringspaces=false, #+end_src If line numbers are asked, they should always have the same layout and not be selectable (hence the ~\__letgut_unselectable:n~). #+begin_src latex numbersep=\c__letgut_number_sep_dim, numberstyle=\scriptsize\ttfamily \color{__letgut_foregroundLinenumber} \__letgut_unselectable:n, #+end_src Because of a current issue involving \package{parskip} and \package{listings} (\url{https://github.com/FrankMittelbach/fmitex-parskip/issues/3}), we have to set the skip below the displayed listings to a (almost) zero length. We do the same for the above skip. #+begin_src latex aboveskip={0\p@ \@plus 6\p@}, belowskip={0\p@ \@plus 6\p@}, } #+end_src We define as short equivalent of ~\lstinline~ the character \lstDeleteShortInline™\texttt{™} which is unlikely to be used in ordinary text. #+begin_src latex \lstMakeShortInline[breaklines=false]™ #+end_src We start with an empty listings style. #+begin_src latex \lstset{ style=__letgut_reset_listings_styles } #+end_src *** LaTeX listings and examples :PROPERTIES: :CUSTOM_ID: ImplementationListingsLaTeXlistingsandexamples-xt4h55h0jlj0 :END: We define the colors for the syntax highlighting of LaTeX listings. #+begin_src latex \colorlet{__letgut_texcs}{blue} \colorlet{__letgut_comment}{gray} \colorlet{__letgut_argument_specification_separator}{red} \colorlet{__letgut_argument_specification}{cyan} \colorlet{__letgut_mandatory_argument}{purple} \colorlet{__letgut_environment}{teal} \colorlet{__letgut_key}{__letgut_mandatory_argument} \colorlet{__letgut_value}{violet} \colorlet{__letgut_optional_argument}{__letgut_key} \colorlet{__letgut_math}{green!50!black} #+end_src We add our own language files taken in account by the \package*{listings}. They will be considered after the other usual ones, if found. They are searched firstly in the current directory, secondly in the parent directory, thirdly in the TDS. #+begin_src latex \def\lstlanguagefiles{ % lstlang0.sty, lstlang1.sty, lstlang2.sty, lstlang3.sty, ./\c__letgut_lstlanguage_file_tl, ../\c__letgut_lstlanguage_file_tl, \c__letgut_lstlanguage_file_tl, } #+end_src We define a listing style specific to LaTeX listings. #+begin_src latex \lstdefinestyle{__letgut_latex_listings_style}{ language=TeX,% alsolanguage=[AlLaTeX]TeX,% alsolanguage=[LaTeX]TeX,% alsolanguage=[plain]TeX,% alsolanguage=[common]TeX,% alsolanguage=[primitive]TeX,% alsolanguage=[extendedLaTeX]TeX,% alsolanguage=[classes]TeX,% texcsstyle=*\color{__letgut_texcs}, commentstyle=\color{__letgut_comment}\itshape, keywordstyle= \color{__letgut_argument_specification_separator}, keywordstyle={[2]\color{__letgut_environment}}, keywordstyle={[3]\color{__letgut_key}}, keywordstyle={[4]\color{__letgut_value}}, keywordstyle={[5]\color{__letgut_argument_specification}}, keywordstyle={[6]\color{__letgut_key}}, numbers=left, #+end_src The ~listings~ package defines some of the LaTeX's environments as keywords of order 1. This would force us to do the same in our own language driver file but would ruin our effort to stylize in a special way (in red) other keywords (see ~otherkeywords={...}~) that are stylized as keywords of order 1. Hence, we delete these keywords of order 1 and will add them as keywords of order 2 like all the environments in our own language driver file (in the ~extendedLaTeX~ dialect that we load by default). #+begin_src latex deletekeywords={% array,center,displaymath,document,enumerate,eqnarray,% equation,flushleft,flushright,itemize,list,lrbox,math,minipage,% picture,sloppypar,tabbing,tabular,trivlist,verbatim,% },% #+end_src #+begin_src latex literate=*% {\\\\}{{{\color{__letgut_texcs}\textbackslash\textbackslash}}}{2}% {\\[}{{\textcolor{__letgut_math}{\textbackslash[}}}{2}% {\\]}{{\textcolor{__letgut_math}{\textbackslash]}}}{2}% {$}{{\textcolor{__letgut_math}{\$}}}{1}%$ } #+end_src We first define some colors used in the listings and examples. #+begin_src latex \definecolor{__letgut_backgroundCode}{cmyk}{0,0,0,0.04} \definecolor{__letgut_borderCode}{cmyk}{0,0,0,0.2} \definecolor{__letgut_foregroundLinenumber}{cmyk}{0,0,0,0.5} \definecolor{__letgut_foregroundMention}{cmyk}{0,0,0,0} \definecolor{__letgut_backgroundResult}{cmyk}{0,0,0,0} #+end_src For the listings and examples, we rely on \package*{tcolorbox}, and more specifically on some of its libraries. #+begin_src latex \tcbuselibrary{listings,breakable,skins,hooks,documentation} #+end_src We want some common settings for all the ~tcolorbox~es. #+begin_src latex \tcbset{ breakable, sharp~ corners, fonttitle=\sffamily\bfseries, } #+end_src The functions: - ~\__letgut_code_result_mention_box:n~ draws the mentions “code” and “résultat” in the codes boxes and the possible corresponding results boxes, - ~\__letgut_title_code_result_box:n~ for the title of codes and the results boxes: “Exemple” followed by the number of the example and, if a ~title addon~ option is provided, the specified title addon. #+begin_src latex \cs_new_protected:Npn \__letgut_code_result_mention_box:nn #1 #2 { \node[ minimum~ width=1cm, minimum~ height=\c__letgut_height_mentions_dim, outer~ sep=auto, anchor=north~ east, fill=__letgut_borderCode ]~ at~ (#1) { \itshape \small \color{__letgut_foregroundMention} \__letgut_unselectable:n {#2} }; } \cs_new_protected:Npn \__letgut_title_code_result_box:n #1 { Exemple\nobreakspace\thetcbcounter \tl_if_empty:NF {#1} { \hypersetup{hidelinks} \c_space_tl :~#1 } } \cs_new_protected:Nn \__letgut_on_callout_page:nn { \tl_set:Nn \l__letgut_tmpa_int {\getpagerefnumber{#1}} \tl_set:Nn \l__letgut_tmpb_int {\thepage} \int_compare:nNnF {\l__letgut_tmpa_int} = {\l__letgut_tmpb_int} {#2} } #+end_src We define the style of the codes. #+begin_src latex \tl_set:Nn \l__letgut_reference_text_tl { Cf.~\vref{\g__letgut_label_ltx_example_str}. } \tcbset{ __letgut_code/.style={ listing~ options={ style=__letgut_latex_listings_style, }, every~ float=\raggedleft, colback=__letgut_backgroundCode, boxrule=0.25mm, colframe=__letgut_borderCode, sidebyside~ align=top~ seam, toprule~ at~ break=0mm, bottomrule~ at~ break=0mm, colbacktitle=__letgut_borderCode, fonttitle=\sffamily\bfseries, before~ title={ \tl_set:Nn \l__letgut__tex_stuff_font_switch_tl {\rmfamily} }, #+end_src We define a custom \package*{tcolorbox}'s ~title addon~ option that let us specify an addon to the title which will added after the automatically generated title “Exemple \meta{number}”. #+begin_src latex title~ addon/.store~ in=\l__letgut_title_addon_tl, title=\__letgut_title_code_result_box:n {\l__letgut_title_addon_tl}, #+end_src We define a custom \package*{tcolorbox}'s ~reference text~ option that let us override the text of the reference for the examples with code and result side by side that are floating and not being of their call out pages. #+begin_src latex reference~ text/.code={ \tl_set:Nn \l__letgut_reference_text_tl {##1} }, #+end_src We define a custom \package*{tcolorbox}'s ~result width~ option that let us specify the width of the result which is ~\linewidth~ by default. #+begin_src latex result~ width/.store~ in=\l__letgut_result_width_dim, result~ width=\linewidth, }, #+end_src We define more specifically the style of the codes with results. #+begin_src latex __letgut_code_result/.style={ __letgut_code={#1}, bicolor, colbacklower=__letgut_backgroundResult, segmentation~ at~ break=false, top=\c__letgut_height_mentions_dim, middle=\c__letgut_height_mentions_dim, #+end_src We want the side by side code/result examples to automatically be floating. #+begin_src latex sidebyside@true/.code={% \tcb@sidebysidetrue% \tcb@isbreakablefalse% \pgfkeysalso{floatplacement=ht}% \pgfkeysalso{float}% \pgfkeysalso{label={\g__letgut_label_ltx_example_str}}% \tl_set:Nx \l__letgut_tmpa_tl { \getpagerefnumber { \g__letgut_callout_label_ltx_example_str } } \tl_set:Nx \l__letgut_tmpb_tl { \getpagerefnumber { \g__letgut_label_ltx_example_str } } \tl_if_eq:NNF \l__letgut_tmpa_tl \l__letgut_tmpb_tl { \l__letgut_reference_text_tl \tl_set:Nn \l__letgut_reference_text_tl { Cf.~\vref{\g__letgut_label_ltx_example_str}. } \pgfkeysalso{ drop~ shadow=black, grow~ to~ left~ by=4cm, boxed~ title~ style={sharp~ corners}, } \pgfkeysalso{after~ title~ app=\c_space_tl (cf.~page~\thepage)} } },% overlay={ \iftcb@sidebyside \__letgut_code_result_mention_box:nn {segmentation.north} {code} \__letgut_code_result_mention_box:nn {interior.north~ east} {résultat} \else \ifcase\tcbsegmentstate % 0 = Box contains only an upper part \__letgut_code_result_mention_box:nn {interior.north~ east} {code} \or% % 1 = Box contains an upper and a lower part \__letgut_code_result_mention_box:nn {interior.north~ east} {code #+end_src # < (Just not to disturb the parentheses balancing # detection of my editor.) #+begin_src latex \int_compare:nNnT {\thetcbbreakpart} > {1} {~(suite)} } \__letgut_code_result_mention_box:nn { [yshift=.1mm]segmentation.east } {résultat} \else% % 2 = Box contains only a lower part \__letgut_code_result_mention_box:nn {interior.north~ east} {résultat #+end_src # < (Just not to disturb the parentheses balancing # detection of my editor.) #+begin_src latex \int_compare:nNnT {\thetcbbreakpart} > {1} {~(suite)} } \fi \fi }, }, } #+end_src The \package*{tcolorbox} listings defined below make use of \package*{cleveref}'s features. But, since the latter package is loaded ~\AddToHook{begindocument/before}~, the same is needed for these listings. #+begin_src latex \AddToHook{begindocument/before}{ #+end_src We now define the environments that let us display: 1. only LaTeX code: #+begin_src latex \DeclareTCBListing[ auto~ counter, crefname={exemple}{exemples} ]{ltx-code}{ !O{} }{% __letgut_code, listing~ only, #1% } #+end_src 1. both LaTeX code and its result: 1. ordinary: #+begin_src latex \DeclareTCBListing[ use~ counter~ from=ltx-code, crefname={exemple}{exemples} ]{ltx-code-result}{ !O{} }{% __letgut_code_result, #1% } #+end_src 2. with the result obtained externally: #+begin_src latex \DeclareTCBListing[ use~ counter~ from=ltx-code, crefname={exemple}{exemples} ]{ltx-code-external-result}{ O{} m }{% __letgut_code_result, listing~ and~ comment, image~ comment={width=\l__letgut_result_width_dim}{#2}, center~ lower, #1% } #+end_src #+begin_src latex } #+end_src The examples with code and result side by side will be floating but we want the ones being of their call out pages to have before and after them a reduced vertical glue (~\g__letgut_reduced_intextsep_dim~). Hence we store the original glue (~\intextsep~) in a custom one (~\g__letgut_orig_intextsep_dim~) in order to retrieve the original skip for floats other than these ones. #+begin_src latex \skip_const:Nn \c__letgut_orig_intextsep_skip {\intextsep} \skip_const:Nn \c__letgut_reduced_intextsep_skip { 4\p@ \@plus .667\p@ \@minus .667\p@ } #+end_src We now use hooks in order to... #+begin_src latex \AddToHook{env/ltx-code-result/before}{ \int_gincr:N \g__letgut_ltx_example_int \str_set:Nx \g__letgut_label_ltx_example_str { \c__letgut_label_ltx_example_str- \int_use:N \g__letgut_ltx_example_int } \str_set:Nx \g__letgut_callout_label_ltx_example_str { \c__letgut_callout_label_ltx_example_str- \int_use:N \g__letgut_ltx_example_int } \label{\g__letgut_callout_label_ltx_example_str} \tl_set:Nx \l__letgut_tmpa_tl { \getpagerefnumber { \g__letgut_callout_label_ltx_example_str } } \tl_set:Nx \l__letgut_tmpb_tl { \getpagerefnumber { \g__letgut_label_ltx_example_str } } \tl_if_eq:NNF \l__letgut_tmpa_tl \l__letgut_tmpb_tl { \skip_set_eq:NN \intextsep \c__letgut_reduced_intextsep_skip } } #+end_src Since the syntax highlighting is reset at each ~\input~, the ~ltx-code-*~ environments above provide syntax highlighting only for the commands of the \TeX dialects specified in the class. So we provide a specific command that let us specify (the dialects of) the main language (\TeX by default) for which we want syntax highlighting. This assumes that the commands and keywords of these packages are listed (properly, according to the ~listings~ package syntax) in the `lstlang0.sty` or ~letgut-lstlang.sty~ files. #+begin_src latex \cs_new_protected:Npn \__letgut_tcbset:n #1 { \tcbset{ __letgut_code/.append~ style={ listing~ options~ app={ #1 } } } } \cs_new_protected:Npn \__letgut_alsolanguage_list:nn #1 #2 { #+end_src To reduce syntax highlighting conflicts, we reset all previous ones each time a new one is asked. #+begin_src latex \lstset{% style=__letgut_reset_listings_styles,% } \tl_if_empty:nTF {#1} { \tl_set:Nx \l__letgut_tmpa_tl { alsolanguage={#2} } \exp_args:NV \__letgut_tcbset:n { \l__letgut_tmpa_tl } }{ \seq_set_from_clist:Nn \l__letgut_tmpa_seq {#1} \seq_set_map_x:NNn \l__letgut_tmpb_seq \l__letgut_tmpa_seq { alsolanguage={[##1]#2} } \tl_set:Nx \l__letgut_tmpa_tl { \seq_use:Nn \l__letgut_tmpb_seq {,} } \exp_args:NV \__letgut_tcbset:n { \l__letgut_tmpa_tl } } } \NewDocumentCommand{\syntaxhl}{ O{TeX} m}{% \__letgut_alsolanguage_list:nn {#2} {#1} } #+end_src *** Terminal listings :PROPERTIES: :CUSTOM_ID: ImplementationListingsTerminallistings-fq5h55h0jlj0 :END: We define a command dedicated to terminal stdin and stdout. #+begin_src latex \AddToHook{begindocument/before}{ #+end_src We define a listing style specific to these terminal commands. #+begin_src latex \definecolor{__letgut_terminal_prompt}{RGB}{204,0,0} \colorlet{__letgut_terminal_comment}{gray!80} \definecolor{__letgut_terminal_commands}{RGB}{241,124,81} \definecolor{__letgut_terminal_keywords}{RGB}{173,127,168} \definecolor{__letgut_terminal_variables}{RGB}{114,159,207} \colorlet{__letgut_terminal_utilities}{__letgut_terminal_commands} \definecolor{__letgut_terminal_strings}{RGB}{78,154,6} #+end_src #+begin_src latex \lstdefinestyle{__letgut_terminal_listings_style}{ commentstyle= \color{__letgut_terminal_comment}, keywordstyle= \color{__letgut_terminal_commands}, keywordstyle={[2]\color{__letgut_terminal_keywords}}, keywordstyle={[3]\color{__letgut_terminal_utilities}}, stringstyle= \color{__letgut_terminal_strings}, literate=*% {$}{{\textcolor{__letgut_terminal_variables}{\$}}}{1}%$ } #+end_src We define a dialect which is missing in the \package*{listings}. #+begin_src latex \lstdefinelanguage{terminal}{% morekeywords={% alias,bg,bind,break,builtin,caller,cd,command,compgen,% complete,compopt,continue,declare,dirs,disown,echo,enable,% eval,exec,exit,export,fc,fg,getopts,hash,help,history,% jobs,kill,let,local,logout,mapfile,popd,printf,pushd,pwd,% read,readarray,readonly,return,set,shift,shopt,source,% suspend,test,times,trap,type,typeset,ulimit,umask,unalias,% unset,wait,% },% morekeywords=[2]{% case,do,done,elif,else,esac,fi,for,function,if,in,select,% then,time,until,while,% },% morekeywords=[3]{% apropos,apt,apt-get,aptitude,aspell,at,awk,base32,base64,% basename,bash,bc,bzip2,cal,cat,cfdisk,chattr,chgrp,% chkconfig,chmod,chown,chpasswd,chroot,cksum,clear,cmp,comm,% cp,cpio,cron,crontab,csplit,curl,cut,date,dc,dd,ddrescue,% df,diff,diff3,dig,dir,dircolors,dirname,dmesg,dos2unix,% dpkg,du,egrep,eject,env,ethtool,expand,expr,false,fdformat,% fdisk,fgrep,file,find,fmt,fold,format,free,fsck,ftp,fuser,% gawk,grep,groupadd,groupdel,groupmod,groups,gzip,head,% hostname,htop,iconv,id,ifconfig,ifdown,ifup,import,install,% iostat,ip,join,killall,less,link,ln,locate,logname,look,% lpc,lpr,lprint,lprintd,lprintq,lprm,ls,lsattr,lsblk,lsof,% lspci,make,man,mkdir,mkfifo,mkfile,mkisofs,mknod,mktemp,% mmv,more,most,mount,mtools,mtr,mv,nc,netstat,nft,nice,nl,% nohup,notify-send,nslookup,op,open,passwd,paste,pathchk,% Perf,pgrep,ping,pkill,pr,printcap,printenv,ps,pv,quota,% quotacheck,ram,rar,rcp,reboot,remsync,rename,renice,rev,rm,% rmdir,rsync,scp,screen,sdiff,sed,seq,sftp,shuf,shutdown,% sleep,slocate,sort,split,ss,ssh,stat,strace,su,sudo,sum,% sync,tail,tar,tee,timeout,tmux,top,touch,tput,tr,% traceroute,true,tsort,tty,umount,uname,unexpand,uniq,units,% unix2dos,unrar,unshar,uptime,useradd,userdel,usermod,users,% uudecode,uuencode,vdir,vi,vmstat,watch,wc,wget,whereis,% which,who,whoami,write,xargs,xdg-open,xxd,xz,yes,zip,% },% alsoletter={2346-},% morecomment=[l]\#,% morestring=[d]",% morestring=[d]',% sensitive% }[keywords,comments,strings]% #+end_src We define some colors used in the terminal listings. #+begin_src latex \definecolor{__letgut_foreground_terminal_dark}{named}{black} \colorlet{__letgut_background_terminal_dark_stdin}{ letgut_pagecolor!95!gray } \colorlet{__letgut_background_terminal_dark_stdout}{ __letgut_background_terminal_dark_stdin!60 } \definecolor{__letgut_foreground_terminal_light}{named}{black} \definecolor{__letgut_background_terminal_light_stdin}{rgb}{ 0.99,0.975,0.98 } \colorlet{__letgut_background_terminal_light_stdout}{ __letgut_background_terminal_light_stdin!40 } #+end_src #+begin_src latex \bool_if:NTF \g__letgut_paper_bool { \colorlet{__letgut_foreground_terminal}{ __letgut_foreground_terminal_light } \colorlet{__letgut_background_terminal_stdin}{ __letgut_background_terminal_light_stdin } \colorlet{__letgut_background_terminal_stdout}{ __letgut_background_terminal_light_stdout } }{ \colorlet{__letgut_foreground_terminal}{ __letgut_foreground_terminal_dark } \colorlet{__letgut_background_terminal_stdin}{ __letgut_background_terminal_dark_stdin } \colorlet{__letgut_background_terminal_stdout}{ __letgut_background_terminal_dark_stdout } } #+end_src We define the style of the ~tcolorbox~ in which the terminal stdin and stdout will be displayed. #+begin_src latex \tcbset{% terminal/.style={% colupper=__letgut_foreground_terminal, collower=__letgut_foreground_terminal, breakable, segmentation~ at~ break=false, boxrule=0mm, before~ lower={\tcbset{every~ listing~ line={}}}, listing~ options={% style=__letgut_terminal_listings_style, language=terminal, }, fontupper=\ttfamily, fontlower=\ttfamily, }, } #+end_src We now define the command. #+begin_src latex \cs_new_protected:Npn \__letgut_terminal:nnnn #1 #2 #3 #4 { \bool_set_false:N \l__letgut_tmpa_bool \tl_if_empty:nTF {#3}{ \tl_if_empty:nTF {#4}{ \bool_set_true:N \l__letgut_tmpa_bool }{ \tcbset{colback=__letgut_background_terminal_stdout} } }{ \tcbset{colback=__letgut_background_terminal_stdin} \tl_if_empty:nF {#4}{ \tcbset{ bicolor, colbacklower=__letgut_background_terminal_stdout, } } } \bool_if:NF \l__letgut_tmpa_bool { \begin{tcolorbox}[terminal,#2] \lstset{aboveskip=0pt} \tl_if_empty:nF {#3}{ \tl_if_empty:nF {#1}{ \textcolor{__letgut_terminal_prompt}{% \ttfamily% \bfseries% \__letgut_unselectable:n {#1\c_space_tl} } } #3 \tl_if_empty:nF {#4}{ \tcblower } } \tl_if_empty:nF {#4}{ \tl_if_empty:nF {#3}{ \lstset{aboveskip=0pt} } \tcbset{ every~ listing~ line={}, listing~ options~ app={ language={} } } #4 } \end{tcolorbox} } } \NewDocumentCommand{\terminal}{ O{\$} O{} +v +v}{ \__letgut_terminal:nnnn {#1} {#2} {#3} {#4} } #+end_src We close the ~\AddToHook{begindocument/before}~ argument. #+begin_src latex } #+end_src *** Unicode characters with positions above 256 :PROPERTIES: :CUSTOM_ID: ImplementationListingsUnicodecharacterswithpositionsabove256-4l6h55h0jlj0 :END: Unicode characters with positions above 256 cause troubles in listings. Here is a workaround for some of them (see https://tex.stackexchange.com/a/25396). #+begin_src latex \lst@InputCatcodes \def\lst@DefEC{% \lst@CCECUse \lst@ProcessLetter ^^80^^81^^82^^83^^84^^85^^86^^87^^88^^89^^8a^^8b^^8c^^8d^^8e^^8f% ^^90^^91^^92^^93^^94^^95^^96^^97^^98^^99^^9a^^9b^^9c^^9d^^9e^^9f% ^^a0^^a1^^a2^^a3^^a4^^a5^^a6^^a7^^a8^^a9^^aa^^ab^^ac^^ad^^ae^^af% ^^b0^^b1^^b2^^b3^^b4^^b5^^b6^^b7^^b8^^b9^^ba^^bb^^bc^^bd^^be^^bf% ^^c0^^c1^^c2^^c3^^c4^^c5^^c6^^c7^^c8^^c9^^ca^^cb^^cc^^cd^^ce^^cf% ^^d0^^d1^^d2^^d3^^d4^^d5^^d6^^d7^^d8^^d9^^da^^db^^dc^^dd^^de^^df% ^^e0^^e1^^e2^^e3^^e4^^e5^^e6^^e7^^e8^^e9^^ea^^eb^^ec^^ed^^ee^^ef% ^^f0^^f1^^f2^^f3^^f4^^f5^^f6^^f7^^f8^^f9^^fa^^fb^^fc^^fd^^fe^^ff% ^^^^201c% for “ ^^^^201d% for ” ^^^^215b% for ⅛ ^^^^2122% for ™ ^^^^2019% for ’ ^^^^0153% for œ ^^^^0152% for Œ ^^^^20ac% for € ^^^^27e8% for ⟨ ^^^^27e9% for ⟩ ^^00% } \lst@RestoreCatcodes #+end_src ** Local config file :PROPERTIES: :CUSTOM_ID: ImplementationLocalconfigfile-me7h55h0jlj0 :END: Each issue of the Lettre requires certain local configurations: configuration dedicated to the issue in question, particular packages used in the articles, specific configurations of the \package*{listings}, etc. In order to not clutter the main \file*{.tex} of the Lettre, a local configuration file named \file{localconf.tex}, if present in the current directory, is automatically included at the end the preamble. And since this file is input in the current category régime (~\ExplSyntaxOn~), a ~\ExplSyntaxOff~ is automatically inserted at its beginning. #+begin_src latex \file_if_exist:nT {./\c__letgut_local_config_file_tl}{ \@pushfilename \xdef\@currname{\c__letgut_local_config_file_tl} \input {./\c__letgut_local_config_file_tl} \@popfilename } #+end_src We don't want the book review entry types to be listed in the bibliography (they appears only thanks to the ~bookreview~ environment). #+begin_src latex \ExecuteBibliographyOptions[bookreview]{skipbib,skiplab} #+end_src #+begin_src latex \endinput #+end_src * (biblatex) Data model :PROPERTIES: :CUSTOM_ID: biblatexDatamodel-vx7h55h0jlj0 :END: We give the (\package{biblatex}) data model that enriches the default one for several purposes: - the books reviews, - the books advertisements. #+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut.lbx :exports both \ProvidesFile{letgut.lbx}[2024-10-30 v0.9.12 letgut localization] \InheritBibliographyExtras{french} \DeclareBibliographyStrings{ inherit = {french}, number = {{\no}{\no}}, volume = {{volume}{vol\adddot}}, volumes = {{volumes}{vol\adddot}}, } #+end_src We create the new bibliography driver ~bookreview~ (that seems to create the corresponding new entry). #+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut.dbx :exports both \ProvidesFile{letgut.dbx}[2024-10-30 v0.9.12 letgut data model macros] \DeclareBibliographyDriver{bookreview}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author/editor+others/translator+others}% \setunit{\printdelim{nametitledelim}} \newblock \usebibmacro{maintitle+title}% \newunit \printlist{language}% \newunit\newblock \usebibmacro{byauthor}% \newunit\newblock \usebibmacro{byeditor+others}% \newunit\newblock \printfield{edition}% \newunit \iffieldundef{maintitle} {\printfield{volume}% \printfield{part}} {}% \newunit \printfield{volumes}% \newunit\newblock \usebibmacro{series+number}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{publisher+location+date}% \newunit\newblock \usebibmacro{chapter+pages}% \newunit \printfield{pagetotal}% \newunit\newblock \iftoggle{bbx:isbn} {\printfield{isbn}} {}% \newunit\newblock \usebibmacro{doi+eprint+url}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \finentrypunct \usebibmacro{finentry}} #+end_src We provide a specific ~biblatex~ citation style . #+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut.cbx :exports both \ProvidesFile{letgut.cbx}[2024-10-30 v0.9.12 letgut base citation style] \RequireCitationStyle{numeric} #+end_src The books reviewed have their titles not only emphasized, but in bold face as well... #+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut.cbx :exports both \DeclareFieldFormat[bookreview]{title}{\textbf{\emph{#1}}} #+end_src ... but not their subtitles. #+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut.cbx :exports both \renewbibmacro*{title}{% \ifboolexpr{ test {\iffieldundef{title}} and test {\iffieldundef{subtitle}} } {} {\printtext[title]{% \printfield[titlecase]{title}% \setunit{\subtitlepunct}}% \printfield[emph]{subtitle}% \newunit}% \printfield{titleaddon}} #+end_src * Provided files :PROPERTIES: :CUSTOM_ID: Providedfiles-g09h55h0jlj0 :END: ** Example file of an issue of the newsletter :PROPERTIES: :CUSTOM_ID: ProvidedfilesExamplefileofanissueofthenewsletter-ak9h55h0jlj0 :END: #+begin_src latex :tangle ../../../doc/lualatex/letgut/lettre-example.tex :exports both % Hey, Emacs! This is a -*- mode: latex -*- file! \documentclass{letgut} \letgutsetup{ % % Option booléenne pour la version finale de la Lettre. % % L'option contraire`draft` (par défaut) affiche % % « Brouillon » en filigrane et actionne le package % % `lua-typo`. % % , final % % % Option coloriant le fond de la page d'une couleur % % par défaut (`1.0, 0.98, 0.94` en « rgb ») mais % % modifiable au moyen de l'option `pagecolor` ci-dessous. % % , paper % % % Numéro de la Lettre % , number=44 % % % Date de la Lettre. Celle-ci est déduite de la % % date du jour, mais peut être spécifiée sous la forme % % AAAA-MM (avec garde-fous) ou librement % % (p. ex. `date=Printemps 2021`). % % , date=2025-16 % % % Couleur de la page, à spécifier selon le modèle « rgb ». % % , pagecolor={1.0, 0.1, 0.94} % % % Couleur des hyperliens, à spécifier selon le modèle % % « named ». % % , allcolorslinks=cyan % % % Un (r)appel à cotisation est automatiquement ajouté % % en 1re page. Si on ne le souhaite pas, il suffit de % % passer l'option `membership-reminder=false`. % % , membership-reminder=false % % % Si un fichier `editorial.tex`, on s'en doute censé % % contenir l'éditorial, est présent dans le répertoire % % courant, son contenu est automatiquement ajouté en % % 1re page. Si un tel fichier est absent du répertoire % % courant, une alerte est affichée à la place, sauf si, % % parce qu'on ne souhaite pas d'éditorial, on passe % % l'option `editorial=false`. % % , editorial=false % % % Les informations concernant GUTenberg, si elles % % figurent dans un fichier `informations-gut.tex` % % présent dans le répertoire courant, sont % % automatiquement ajoutées en dernière page. % % Si on ne souhaite pas que figurent ces % % informations, il suffit de passer l'option % % `informations=false`. % % , informations=false % % % Lors de la conception d'un numéro de la Lettre, % % il peut être utile d'avoir un plan détaillé au % % maximum de l'ensemble du document. C'est ce que % % permet l'option `detailedtoc`. % % , detailedtoc % % % Les fichiers sources sont attachés au PDF si et seulement si la Lettre est % % à la fois en version pour les lecteurs (option `for-readers' activée par % % défaut) et en sortie écran (option `screen' activée par défaut). L'option % % `reverse-files-attachement' inverse ce comportement par défaut. % % , reverse-files-attachement % } \setmainfont{TeX Gyre Schola} % Par exemple \usepackage[maths=both]{duckuments} \usepackage{mwe} % \addbibresource{biblio.bib} \begin{document} \duckument \end{document} %%% Local Variables: %%% TeX-engine: luatex %%% TeX-master: t %%% End: #+end_src ** Example of an editorial :PROPERTIES: :CUSTOM_ID: ProvidedfilesExampleofaneditorial-06ah55h0jlj0 :END: #+begin_src latex :tangle ../../../doc/lualatex/letgut/editorial.tex :exports both Ceci est un intéressant éditorial de la \lettregut{} dans lequel on peut causer de l'\ag{} et du \ca{} de l'association. Il peut aussi y être question du \ctan. \lipsum[1-5] \begin{figure}[ht] \centering \includegraphics[width=.7\linewidth]{example-image} \caption{Ducks ?} \label{fig:ducks} \end{figure} \lipsum[6-10] #+end_src ** Informations about \gutenberg :PROPERTIES: :CUSTOM_ID: ProvidedfilesInformationsabout\gutenberg-hqah55h0jlj0 :END: #+begin_src latex :tangle ../../../tex/lualatex/letgut/informations-gut.tex :exports both % Hey, Emacs! This is a -*- mode: latex -*- file! \enlargethispage{1.5cm} \scriptsize \vspace*{-1cm} \hspace*{-1.5cm}% \ExplSyntaxOn \raisebox{-\height+0.7\baselineskip}{% \begin{minipage}[t]{.6\textwidth}%\vspace{0pt}% \__letgut_orig_includegraphics*[width=\linewidth]{logo-gut.pdf} \end{minipage}% }% \ExplSyntaxOff \hfill% \begin{minipage}[t]{.5\textwidth}%\vspace{0pt}% \footnotesize\raggedleft% Association \gut{}\\ 15 rue des Halles -- \textsc{bp} 74\\ 75001 Paris\\ France\\ \url{secretariat[at]gutenberg-asso[dot]fr} \end{minipage}% \begin{description} \item[Site Internet :] \url{https://www.gutenberg-asso.fr/} \item[\Cahiers{} :] \url{http://www.numdam.org/journals/CG/} \item[Problèmes techniques :] \leavevmode \begin{description} \item[la liste \texttt{gut} :] \url{https://www.gutenberg-asso.fr/-Listes-de-diffusion-} \item[le site \hologo{TeX}nique de questions et réponses :] \url{https://texnique.fr/} \item[la foire aux questions :] \url{https://faq.gutenberg-asso.fr/} \end{description} \end{description} % \alertbox{% Cette association est la vôtre : faites-nous part de vos idées, de vos envies, de vos préoccupations à l'adresse \url{secretariat[at]gutenberg-asso[dot]fr}.% } % \section[Association GUTenberg (tout sur l')] % {Adhésion à l'association} \title{Adhésion à l'association} \label{letgut_label_adhesions} \begin{itemize} \item % Adhésions et abonnements Les adhésions sont à renouveler en début d'année pour l'année civile. % \item Il n'y a pas de lettre de rappel, chaque membre % doit faire son renouvellement annuel; %\hspace*{1em} % merci de renvoyer spontanément le bulletin ci-dessous % en début d'année. \item Les administrations peuvent joindre un bon de commande revêtu de la signature de la personne responsable ; les étudiants doivent joindre un justificatif. % \item Si vous souhaitez que vos coordonnées restent % confidentielles, merci de le signaler. \end{itemize} \vspace*{-0.7cm} \section{Tarifs \the\year} Les membres de \gut\ peuvent adhérer à l'association internationale, le \acf{tug}, et recevoir son bulletin \tugboat{} à un tarif préférentiel : \begin{description} \item[tarif normal :] 65~€ (au lieu de 85~\$) \item[tarif étudiant :] 40~€ (au lieu de 55~\$) \end{description} % (49~€50}, étudiants et demandeurs d'emploi : % 29~€, au lieu de 85\$ et % 65\$). Voir % \url{% % https://www.gutenberg-asso.fr/?Adherer-en-ligne% % }. \footnotesize \begin{center} \begin{tabular}{lr} \toprule \textbf{Type d'adhésion} & \textbf{Prix} \\ \midrule Membre individuel & 30~€ \\ Membre individuel + adhésion \acs{tug} & 95~€ \\ Membre individuel étudiant/demandeur d'emploi & 15~€ \\ Membre individuel étudiant + adhésion \acs{tug} & 55~€ \\ Association d'étudiants & 65~€ \\ Organisme à but non lucratif & 130~€ \\ Organisme à but lucratif & 229~€ \\ \bottomrule \end{tabular} \end{center} \section{Règlements} Les règlements peuvent s'effectuer par : \begin{itemize} \item \textbf{virement bancaire}% \footnote{Nous vous remercions de \textbf{privilégier} le \textbf{virement bancaire}.\label{fn:1}} (\textsc{iban} : FR76 3000 3001 0900 0372 6086 280)% \leavevmode \alertbox{% Veillez à bien \emph{indiquer vos nom et prénom} dans les références du virement !% } \item Paypal\footnotemark[\value{footnote}] : \url{https://www.gutenberg-asso.fr/?Adherer-en-ligne} \item bulletin et chèque\footnotemark[\value{footnote}] : \url{https://www.gutenberg-asso.fr/?Adherer-a-l-association} \end{itemize} \vfill \mbox{} \vfill{} \begin{center} \begin{tblr}{ width=.9\linewidth, colspec={ % < (Just not to disturb the parentheses % balancing detection of my editor.) >{\bfseries}r@{ }X }, vline{1,3}={solid}, hline{1,7}={solid}, rowsep=0mm, row{1} = {abovesep+=.25cm}, row{2} = {belowsep+=.125cm}, row{6} = {belowsep+=.25cm}, % colsep=2.5mm, } \SetCell[c=2]{c} \emph{La \lettregut}\\ \SetCell[c=2]{c} \mdseries Bulletin irrégulomestriel de l'association \gut\\ Directeur de la publication : & \person{Bideault, Patrick} \\ Comité de rédaction : & {Patrick Bideault, Denis Bitouzé, \\ Céline Chevalier, Maxime Chupin \& Bastien Dumont} \\ Adresse de la rédaction : & { Association \gut\\ 15 rue des Halles -- \textsc{bp} 74\\ 75001 Paris } \\ \acs{issn} : & \letgutissn \end{tblr} \end{center} \clearpage #+end_src ** Acronyms :PROPERTIES: :CUSTOM_ID: ProvidedfilesAcronyms-8cbh55h0jlj0 :END: #+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut-acronyms.tex :exports both % Hey, Emacs! This is a -*- mode: latex -*- file! %%%%%%%%%%%%%%%%%%%%% % Acronymes anglais % %%%%%%%%%%%%%%%%%%%%% \letgutacro% {CTAN}% {\href{https://www.ctan.org/}{Comprehensive \hologo{TeX} Archive Network}}% [réseau complet d'archives \hologo{TeX}] \letgutacro% {PDF}% {Portable Document Format}% [format de document portable] \letgutacro% {URL}% {Uniform Resource Locator}% [localisateur uniforme de ressource ou, plus clairement, format des adresses du Web] \letgutacro% {ORCID}% {Open Researcher and Contributor \textsc{id}}% [identifiant ouvert pour chercheur et contributeur] \letgutacro%[extra-foreign=souvent librement traduit en \enquote{foire %aux questions}] {FAQ}% {Frequently Asked Questions}% [questions fréquemment posées] \letgutacro% {SVG}% {Scalable Vector Graphics}% [graphiques vectoriels extensibles] \letgutacro% {DNS}% {Domain Name System}% [système de noms de domaine] \letgutacro% {VPS}% {Virtual Private Server}% [serveur dédié virtuel] \letgutacro% {LDAP}% {Lightweight Directory Access Protocol}% [protocole d'accès à répertoire léger, sytème garantissant l'authentification d'utilisateurs de plusieurs services dispersés] \letgutacro% {OTF}% {Open Type Format}% [] \letgutacro% {DOI}% {Digital Object Identifier}% [identifiant numérique d'objet] \letgutacro% {ISSN}% {International Standard Serial Number}% [numéro international normalisé des publications en série] \letgutacro% {TUG}% {\hologo{TeX} User Group}% [groupe (international) d'utilisateurs de \hologo{TeX}] \letgutacro% {WCAG}% {Web Content Accessibility Guidelines}% [directives sur l'accessibilité du contenu Web] \letgutacro% {HTML}% {HyperText Markup Language}% [langage de balises pour l'hypertexte] \letgutacro% {CSS}% {Cascading Style Sheets}% [feuilles de style en cascade] \letgutacro% {UTF}% {Universal (Character Set) Transformation Format}% [format de transformation (du jeu) universel (de caractères codés)] \letgutacro%[short=\emph{Ti\emph{k}Z},short-format=\em,foreign-babel=german,foreign-locale=allemand] {TIKZ}% {Ti\emph{k}Z ist \emph{kein} Zeichenprogramm}% [Ti\emph{k}Z \emph{n'}est \emph{pas} un programme de dessin] \letgutacro% {PGF}% {Portable Graphics Format}% [format de graphiques portable] \letgutacro% {GPL}% {\textsc{gnu} General Public License}% [licence publique générale \textsc{gnu}] \letgutacro% {OFL}% {SIL Open Font License}% [] \letgutacro% {DVI}% {DeVice-Independent}% [indépendant du type de périphérique] \letgutacro% {PS}% {PostScript}% [] \letgutacro% {DVIPS}% {\acs{dvi}-to-\acs{ps} (translator)}% [(convertisseur) \acs{dvi} vers \acs{ps}] \letgutacro% {IPA}% {International Phonetic Alphabet}% [alphabet phonétique international] \letgutacro% {TIPA}% {\hologo{TeX} \acs{ipa} or Tokyo \acs{ipa}}% [alphabet phonétique international] \letgutacro% {XML}% {eXtensible Markup Language}% [langage de balisage extensible] \letgutacro% {APA}% {American Psychological Association}% [association américaine de psychologie] \letgutacro% {OS}% {Operating System}% [système d'exploitation] \letgutacro% {BSD}% {Berkeley Software Distribution}% [collection de logiciels de Berkeley] \letgutacro% {IMAP}% {Internet Message Access Protocol}% [] \letgutacro% {SMTP}% {Simple Mail Transfer Protocol}% [protocole simple de transfert de courrier] \letgutacro% {RTF}% {Rich Text Format}% [format de texte enrichi] \letgutacro% {WYSIWYG}% {What You See Is What You Get}% [ce que vous voyez est ce que vous obtenez] \letgutacro% {ISO}% {\href{https://www.iso.org/home.html}{International Organization for Standardization}}% [\href{https://www.iso.org/fr/home.html}{organisation internationale de normalisation}] \letgutacro% {OFF}% {Open Font Format}% [format de fonte ouvert] \letgutacro% {CSV}% {Comma-separated values}% [valeurs séparées par des virgules] \letgutacro% {YAML}% {\textsc{yaml} Ain’t Markup Language}% [\textsc{yaml} n'est pas un langage de balisage (acronyme récursif)] \letgutacro% {UCA}% {Unicode Collation Algorithm}% [algorithme de tris d'Unicode] \letgutacro% {NFSS}% {New Font Selection Scheme}% [nouveau schéma de sélection de fonte] \letgutacro% {ASCII}% {American Standard Code for Information Interchange}% [code américain normalisé pour l'échange d'information] \letgutacro% {TDS}% {\TeX{} Directory Structure}% [structure de répertoire de \TeX{}] %%%%%%%%%%%%%%%%%%%%%% % Acronymes français % %%%%%%%%%%%%%%%%%%%%%% \letgutacro% {SMAI}% {\href{http://smai.emath.fr/}{Société de Mathématiques Appliquées et Industrielles}}% \letgutacro% {AG}% {Assemblée Générale}% \letgutacro% {CA}% {Conseil d'Administration}% \letgutacro% {SHS}% {Sciences Humaines et Sociales}% \letgutacro% {IREM}% {\href{https://www.univ-irem.fr/}{Instituts de Recherche sur l'Enseignement des Mathématiques}}% \letgutacro% {MEEF}% {Métiers de l'Enseignement, de l'Éducation et de la Formation}% \letgutacro% {ECM}% {\href{https://texnique.fr/osqa/faq/\#custom-id-ecm}{Exemple Complet Minimal}}% \letgutacro% {INSPÉ}% {\href{https://www.reseau-inspe.fr/}{Instituts Nationaux Supérieurs du Professorat et de l'Éducation}}% \letgutacro%[short=\textsc{gra}pp\textsc{a},short-format=\upshape] {GRAppA}% {Groupe de recherche en Apprentissage Automatique}% \letgutacro% {BBB}% {BigBlueButton}% \letgutacro% {CV}% {Curriculum Vitæ}% \letgutacro% {RGPD}% {Règlement Général sur la Protection des Données}% \letgutacro% {NDLR}% {Note de la Rédaction}% \letgutacro% {BTS}% {Brevet de Technicien Supérieur}% \letgutacro% {APMEP}% {Association des Professeurs de Mathématiques de l'Enseignement Public}% \letgutacro% {PAO}% {Publication Assistée par Ordinateur}% #+end_src ** Language driver file :PROPERTIES: :CUSTOM_ID: ProvidedfilesLanguagedriverfile-4cch55h0jlj0 :END: #+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut-lstlang.sty :exports both % \lst@definelanguage[...]{TeX}{% % % Control sequences names % moretexcs={% % },% % % Keywords of class 1 : keywords that contain other characters % % (since of the same class as the ones specified as 'otherkeywords') % morekeywords={% % },% % % Keywords of class 2 : environments names % morekeywords=[2]{% % },% % % Keywords of class 3 : mandatory arguments (not environments) & % % optional arguments which are keys (in key=value) % morekeywords=[3]{% % },% % % Keywords of class 4 : values of keys (in key=value) % morekeywords=[4]{% % },% % % Keywords of class 5 : arguments specifications (after ":" in expl3 % % syntax) % morekeywords=[5]{% % },% % % Keywords of class 6 : current package name (and possibly derived % % packages) % morekeywords=[6]{% % % % },% % % otherkeywords={}, % % alsoletter={}, % % alsodigit={},% % % alsoother={},% % sensitive,% % }[keywords,tex,comments] \lst@definelanguage[lstfiracode]{TeX}{% % Control sequences names moretexcs={% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% FiraCodeStyle% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% lstfiracode% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[Scrabble]{TeX}{% % Control sequences names moretexcs={% PlateauScrabble,ScrabblePlaceMot,% ScrabbleBoard,ScrabblePutWord,% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% EnvScrabble,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% FR,EN,DE,ES,GR,SP,% Echelle,Echellelabels,Cadre,Labels,Aide,% Scale,ScaleLabels,Border,Help,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% Scrabble% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[FiraSans]{TeX}{% % Control sequences names moretexcs={% sufigures,firaoldstyle,firalining,firatabular,firaproportional, firathin,firalight,firaextralight,firaultralight,firamedium,firabook, firasemibold,firaextrabold,firaheavy,% }% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% sfdefault,scaled,scale,type1,lining,lf,oldstyle,osf,tabular,t,proportional,% p,book,medium,mb,semibold,sb,light,l,extralight,ultralight,thin,% extrabold,heavy,default,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% FiraSans% },% % otherkeywords={}, alsoletter={1}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[luagcd]{TeX}{% % Control sequences names moretexcs={% luagcdwithsteps,% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% luagcd% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[maze]{TeX}{% % Control sequences names moretexcs={% maze,% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% maze% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[animate]{TeX}{% % Control sequences names moretexcs={% multiframe,% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% animateinline, },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% poster,controls,palindrome,bb,rx,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% first,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% animate% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[tikz-mirror-lens]{TeX}{% % Control sequences names moretexcs={% lensSphGaussFixed,% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tikz-mirror-lens% },% % otherkeywords={}, alsoletter={-}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[jeuxcartes]{TeX}{% % Control sequences names moretexcs={% MainCartesJeu,% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% Eventail,10C,10K,AC,AT,AP,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% jeuxcartes% },% % otherkeywords={}, alsoletter={0123456789}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[plex-otf]{TeX}{% % Control sequences names moretexcs={% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% RM },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% plex-otf% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[mathtools]{TeX}{% % Control sequences names moretexcs={% mathclap,DeclarePairedDelimiter,% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% % },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[tikz-ext]{TeX}{% % Control sequences names moretexcs={% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% distancebetween,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tikz-ext% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[tikzfill]{TeX}{% % Control sequences names moretexcs={% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% pattern,hexagon,cycle,color, },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tikzfill },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[unicodemath]{TeX}{% % Control sequences names moretexcs={% symscr,symbb,symfrak,symsfup,symsfit,symtt,setmathfont,% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% range,mathrm,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% up,it,bb,bbit,scr,cal,bfcal,frak,tt,sfup ,sfit,bfup,bfit,bfscr,bffrak,% bfsfup,bfsfit,sym,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% unicode-math },% % otherkeywords={}, alsoletter={-}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[xcharter-otf]{TeX}{% % Control sequences names moretexcs={% Bbbone,Bbbk,% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% range },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% xcharter-otf },% % otherkeywords={}, alsoletter={-}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[braille]{TeX}{% % Control sequences names moretexcs={% braille },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% % },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[swungdash]{TeX}{% % Control sequences names moretexcs={% swungdash },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% % },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[simples-matrices]{TeX}{% % Control sequences names moretexcs={% matrice },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% b,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% % },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[customdice]{TeX}{% % Control sequences names moretexcs={% dice },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% violet,yellow },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% % },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments] \lst@definelanguage[pingu]{TeX}{% % Control sequences names moretexcs={% pingu },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% left,wing,wave,right,grab,eyes,shiny,cup,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% % },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[letgut]{TeX}{% % Control sequences names moretexcs={% letgutsetup,title,subtitle,author,francophony,person,author,% package,package*,class,class*,software,software*,file,file*,% foreignloc,latinloc,gutenberg,gut,lettre,lettregut,Cahier,% Cahiers,letgut,letgutcls,knuth,lamport,tugboat,item*,letgutacro,% separator,alertbox,terminal,inputarticle,lettrenumber,solution,% rebussolution,Ucode,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% ctannews,ltx-code,ltx-code-result,ltx-code-external-result,% bookreview,announcement,rebus,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% for-authors,for-readers,draft,final,screen,paper,number,date,% pagecolor,allcolorslinks,membership-reminder,editorial,informations,% title,addon,result width,reference,text,title,reviewer,bibkey,% frontcover,price,result,and,no,solution,color,toc,title,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% letgut% },% % otherkeywords={},% alsoletter={-\ },% % alsodigit={},% alsoother={*},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % LaTeX texcs and keywords that are missing in `listings` driver file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[extendedLaTeX]{TeX}{% % Control sequences names moretexcs={% Huge,LARGE,Large,LoadClass,NewCommandCopy,RequirePackage,% ShowCommand,abovecaptionskip,abstractname,appendix,appendixname,% arraycolsep,arrayrulewidth,author,backmatter,baselinestretch,% belowcaptionskip,bf,bibindent,bibname,bigskipamount,bottomfraction,% brokenpenalty,cal,chapter,chaptermark,chaptername,clubpenalty,% columnsep,columnseprule,contentsname,date,dblfloatpagefraction,% dblfloatsep,dbltextfloatsep,dbltopfraction,descriptionlabel,% displaywidowpenalty,doublerulesep,evensidemargin,fboxrule,fboxsep,% figurename,floatpagefraction,floatsep,footins,footnoterule,% footnotesep,footnotesize,footskip,frontmatter,headheight,headsep,% huge,indexname,indexspace,interlinepenalty,intextsep,it,jot,% labelenumi,labelenumii,labelenumiii,labelenumiv,labelitemfont,% labelitemi,labelitemii,labelitemiii,labelitemiv,labelsep,% labelwidth,large,leftmargin,leftmargini,leftmarginii,leftmarginiii,% leftmarginiv,leftmarginv,leftmarginvi,lineskip,listfigurename,% listoffigures,listoftables,listtablename,mainmatter,maketitle,% marginparpush,marginparsep,marginparwidth,maxdepth,medskipamount,% mit,newblock,normallineskip,normalsize,oddsidemargin,paragraph,% paragraphmark,parindent,parskip,part,partname,partopsep,% postdisplaypenalty,predisplaypenalty,refname,rm,sc,scriptsize,% section,sectionmark,setlength,sf,sl,small,smallskipamount,% subitem,subparagraph,subparagraphmark,subsection,subsectionmark,% subsubitem,subsubsection,subsubsectionmark,tabbingsep,tabcolsep,% tablename,tableofcontents,textfloatsep,textfraction,textheight,% textwidth,thechapter,theenumi,theenumii,theenumiii,theenumiv,% theequation,theparagraph,thepart,thesection,thesubparagraph,% thesubsection,thesubsubsection,tiny,title,today,topfraction,% topmargin,topskip,tt,widowpenalty,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% abstract,array,center,description,displaymath,document,enumerate,% eqnarray,equation,figure,flushleft,flushright,itemize,list,lrbox,math,% minipage,picture,quotation,quote,sloppypar,tabbing,table,tabular,% thebibliography,theindex,titlepage,trivlist,verbatim,verse,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% % c,cc,ccc,cccc,X,l, empty,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% % }, otherkeywords={|},% % alsoletter={},% alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[listings]{TeX}{% % Control sequences names moretexcs={% lstDeleteShortInline,lstMakeShortInline,lstalias,lstaspectfiles,% lstdefineformat,lstdefinelanguage,lst@definelanguage,lstdefinestyle,% lstindexmacro,lstinline,lstinputlisting,lstlanguagefiles,% lstlgrindeffile,lstlistingname,lstlistingnamestyle,% lstlistlistingname,lstlistoflistings,lstloadlanguages,lstname,% lstnewenvironment,lstset,theHlstnumber,thelstlabel,thelstlisting,% thelstnumber,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% lstlisting,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% 0.21,ABAP,ACM,ACMscript,ACSL,Ada,Algol,Ant,Assembler,Awk,% Basic,C,C++,CIL,Caml,Clean,Cobol,Comal 80,Comsol,Delphi,% Eiffel,Elan,Euphoria,Fortran,GAP,GCL,Gnuplot,Go,HTML,Haskell,% IDL,JVMIS,Java,LLVM,Lingo,Lisp,Logo,Lua,ML,Mathematica,Matlab,% Mercury,MetaPost,Miranda,Mizar,Modula-2,MuPAD,NASTRAN,OCL,% OORexx,Oberon-2,Octave,Oz,PHP,PL/I,POV,PSTricks,Pascal,Perl,% Plasm,PostScript,Prolog,Promela,Python,R,RSL,Reduce,Rexx,Ruby,% S,SAS,SHELXL,SPARQL,SQL,Scala,Scilab,Simula,Swift,TeX,% VBScript,VHDL,VRML,Verilog,XML,XSLT,[03]Fortran,[08]Fortran,% [1.0]Mathematica,[11.0]Mathematica,[11]C++,[1974]Cobol,[1985]Cobol,% [2005]Ada,[3.0]Mathematica,[5.0]Lua,[5.1]Lua,[5.2]Lua,% [5.2]Mathematica,[5.3]Lua,[60]Algol,[67]Simula,[68]Algol,% [77]Fortran,[83]Ada,[90]Fortran,[95]Ada,[95]Fortran,[97]VRML,% [AMS]VHDL,[ANSI]C,[ANSI]C++,[AlLaTeX]TeX,[AspectJ]Java,[Auto]Lisp,% [Borland6]Pascal,[CII]Simula,[CORBA]IDL,[DEC]Simula,[GNU]C++,% [Handel]C,[IBM]Simula,[ISO]C++,[LaTeX]TeX,[Motorola68k]Assembler,% [OMG]OCL,[Objective]C,[Objective]Caml,[PLUS]S,[POSIX]Awk,[R/2 4.3]ABAP,[R/2 5.0]ABAP,[R/3 3.1]ABAP,[R/3 4.6C]ABAP,[R/3 6.10]ABAP,% [Sharp]C,[Standard]Pascal,[VM/XA]Rexx,[Visual]Basic,[Visual]C++,% [WinXP]command.com,[XSC]Pascal,[common]TeX,[decorative]OCL,% [empty]IDL,[empty]Java,[empty]Lisp,[empty]Rexx,[empty]S,% [empty]VHDL,[empty]make,[empty]tcl,[gnu]Awk,[gnu]make,[ibm]Cobol,% [light]Caml,[plain]TeX,[primitive]TeX,[tk]tcl,[x86masm]Assembler,% abovecaptionskip,aboveskip,alsodigit,alsolanguage,alsoletter,% alsoother,backgroundcolor,basewidth,bash,basicstyle,% belowcaptionskip,belowskip,boxpos,breakatwhitespace,breakautoindent,% breakindent,breaklines,caption,captionpos,classoffset,columns,% command.com,comment,comments,commentstyle,consecutivenumbers,csh,% defaultdialect,deletecomment,deletedelim,deletedirectives,% deleteemph,deleteendkeywords,deletehyperref,deleteindex,% deletekeywordcomment,deletekeywords,deleteprocnamekeys,deletestring,% deletetxcs,delim,directives,directivestyle,draft,elisp,emph,% emphstyle,emptylines,erlang,escapebegin,escapechar,escapeend,% escapeinside,extendedchars,fancyvrb,fillcolor,final,firstline,% firstnumber,flexiblecolumns,float,floatplacement,fontadjust,% formats,formfeed,frame,frameround,framerule,framesep,frameshape,% framexbottommargin,framexleftmargin,framexrightmargin,% framextopmargin,fvcmdparams,gobble,hansl,hyper,hyperanchor,% hyperlink,hyperref,identifierstyle,includerangemarker,index,% indexprocnames,indexstyle,inform,inputencoding,inputpath,% keepspaces,keywordcomment,keywordcommentsemicolon,keywords,% keywordsprefix,keywordstyle,ksh,label,language,lastline,lgrind,% lgrindef,linerange,lineskip,linewidth,literate,make,makemacrouse,% markfirstintag,mathescape,morecomment,moredelim,moredirectives,% moreemph,moreendkeywords,morefvcmdparams,morehyperref,moreindex,% morekeywordcomment,morekeywords,moreprocnamekeys,morestring,% moretexcs,multicols,name,ndkeywords,ndkeywordstyle,noaspects,% nolol,numberblanklines,numberbychapter,numberfirstline,numbers,% numbersep,numberstyle,otherkeywords,podcomment,postbreak,prebreak,% print,printpod,procnamekeys,procnames,procnamestyle,% rangebeginprefix,rangebeginsuffix,rangeendprefix,rangeendsuffix,% rangeprefix,rangesuffix,resetmargins,rulecolor,rulesep,% rulesepcolor,savemem,sensitive,% sh,showlines,showspaces,showstringspaces,showtabs,stepnumber,% string,stringstyle,style,tab,tabsize,tag,tagstyle,tcl,texcl,% texcs,texcsstyle,title,upquote,usekeywordsintag,xleftmargin,% xrightmargin,LaTeX,TeX,tex% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% b,c,t,none,left,right,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% listings,% },% % otherkeywords={},% alsoletter={@021.[]},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[xcolor]{TeX}{% % Control sequences names moretexcs={% color,pagecolor,definecolor,colorlet,textcolor,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,% lightgray,brown,lime,olive,orange,pink,purple,teal,violet },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% xcolor },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[expl3]{TeX}{% % Control sequences names moretexcs={% .bool_gset,% ExplFileDate,ExplFileDescription,ExplFileName,ExplFileVersion,% ExplSyntaxOff,ExplSyntaxOn,GetIdInfo,ProvidesExplClass,% ProvidesExplFile,ProvidesExplPackage,bool_case_false,bool_case_true,% bool_const,bool_do_until,bool_do_while,bool_gset,bool_gset_eq,% bool_gset_false,bool_gset_inverse,bool_gset_true,bool_if,% bool_if_exist,bool_if_exist_p,bool_if_p,bool_lazy_all,% bool_lazy_all_p,bool_lazy_and,bool_lazy_and_p,bool_lazy_any,% bool_lazy_any_p,bool_lazy_or,bool_lazy_or_p,bool_log,bool_new,% bool_not_p,bool_set,bool_set_eq,bool_set_false,bool_set_inverse,% bool_set_true,bool_show,bool_to_str,bool_until_do,bool_while_do,% bool_xor,bool_xor_p,box_autosize_to_wd_and_ht,% box_autosize_to_wd_and_ht_plus_dp,box_clear,box_clear_new,box_clip,% box_dp,box_gautosize_to_wd_and_ht,box_gautosize_to_wd_and_ht_plus_dp,% box_gclear,box_gclear_new,box_gclip,box_gresize_to_ht,% box_gresize_to_ht_plus_dp,box_gresize_to_wd,box_gresize_to_wd_and_ht,% box_gresize_to_wd_and_ht_plus_dp,box_grotate,box_gscale,box_gset_dp,% box_gset_eq,box_gset_eq_drop,box_gset_ht,box_gset_to_last,% box_gset_trim,box_gset_viewport,box_gset_wd,box_ht,box_ht_plus_dp,% box_if_empty,box_if_empty_p,box_if_exist,box_if_exist_p,% box_if_horizontal,box_if_horizontal_p,box_if_vertical,% box_if_vertical_p,box_log,box_move_down,box_move_left,% box_move_right,box_move_up,box_new,box_resize_to_ht,% box_resize_to_ht_plus_dp,box_resize_to_wd,box_resize_to_wd_and_ht,% box_resize_to_wd_and_ht_plus_dp,box_rotate,box_scale,box_set_dp,% box_set_eq,box_set_eq_drop,box_set_ht,box_set_to_last,box_set_trim,% box_set_viewport,box_set_wd,box_show,box_use,box_use_drop,box_wd,% c_alignment_token,c_ampersand_str,c_atsign_str,c_backslash_str,% c_catcode_active_space_tl,c_catcode_active_tl,c_catcode_letter_token,% c_catcode_other_space_tl,c_catcode_other_token,c_circumflex_str,% c_code_cctab,c_colon_str,c_document_cctab,c_dollar_str,c_e_fp,% c_empty_box,c_empty_clist,c_empty_coffin,c_empty_prop,c_empty_seq,% c_empty_tl,c_false_bool,c_group_begin_token,c_group_end_token,% c_hash_str,c_inf_fp,c_initex_cctab,c_left_brace_str,c_log_iow,% c_math_subscript_token,c_math_superscript_token,c_math_toggle_token,% c_max_char_int,c_max_dim,c_max_int,c_max_muskip,c_max_register_int,% c_max_skip,c_minus_inf_fp,c_minus_zero_fp,c_nan_fp,c_novalue_tl,% c_one_degree_fp,c_one_fp,c_one_int,c_other_cctab,c_parameter_token,% c_percent_str,c_pi_fp,c_right_brace_str,c_space_tl,c_space_token,% c_str_cctab,c_sys_backend_str,c_sys_day_int,c_sys_engine_exec_str,% c_sys_engine_format_str,c_sys_engine_str,c_sys_engine_version_str,% c_sys_hour_int,c_sys_jobname_str,c_sys_minute_int,c_sys_month_int,% c_sys_output_str,c_sys_platform_str,c_sys_shell_escape_int,% c_sys_year_int,c_term_iow,c_tilde_str,c_true_bool,c_underscore_str,% c_zero_dim,c_zero_fp,c_zero_int,c_zero_muskip,c_zero_skip,% c_zero_str,cctab_begin,cctab_const,cctab_end,cctab_gset,% cctab_if_exist,cctab_if_exist_p,cctab_item,cctab_new,cctab_select,% char_foldcase,char_generate,char_gset_active_eq,char_lowercase,% char_set_active_eq,char_set_catcode,char_set_catcode_active,% char_set_catcode_alignment,char_set_catcode_comment,% char_set_catcode_end_line,char_set_catcode_escape,% char_set_catcode_group_begin,char_set_catcode_group_end,% char_set_catcode_ignore,char_set_catcode_invalid,% char_set_catcode_letter,char_set_catcode_math_subscript,% char_set_catcode_math_superscript,char_set_catcode_math_toggle,% char_set_catcode_other,char_set_catcode_parameter,% char_set_catcode_space,char_set_lccode,char_set_mathcode,% char_set_sfcode,char_set_uccode,char_show_value_catcode,% char_show_value_lccode,char_show_value_mathcode,% char_show_value_sfcode,char_show_value_uccode,char_str_foldcase,% char_str_lowercase,char_str_titlecase,char_str_uppercase,% char_titlecase,char_to_nfd,char_to_utfviii_bytes,char_uppercase,% char_value_catcode,char_value_lccode,char_value_mathcode,% char_value_sfcode,char_value_uccode,clist_clear,clist_clear_new,% clist_concat,clist_const,clist_count,clist_gclear,clist_gclear_new,% clist_gconcat,clist_get,clist_gpop,clist_gpush,clist_gput_left,% clist_gput_right,clist_gremove_all,clist_gremove_duplicates,% clist_greverse,clist_gset,clist_gset_eq,clist_gset_from_seq,% clist_gsort,clist_if_empty,clist_if_empty_p,clist_if_exist,% clist_if_exist_p,clist_if_in,clist_item,clist_log,clist_map_break,% clist_map_function,clist_map_inline,clist_map_tokens,% clist_map_variable,clist_new,clist_pop,clist_push,clist_put_left,% clist_put_right,clist_rand_item,clist_remove_all,% clist_remove_duplicates,clist_reverse,clist_set,clist_set_eq,% clist_set_from_seq,clist_show,clist_sort,clist_use,coffin_attach,% coffin_clear,coffin_display_handles,coffin_dp,coffin_gattach,% coffin_gclear,coffin_gjoin,coffin_gresize,coffin_grotate,% coffin_gscale,coffin_gset_eq,coffin_gset_horizontal_pole,% coffin_gset_vertical_pole,coffin_ht,coffin_if_exist,% coffin_if_exist_p,coffin_join,coffin_log,coffin_log_structure,% coffin_mark_handle,coffin_new,coffin_resize,coffin_rotate,% coffin_scale,coffin_set_eq,coffin_set_horizontal_pole,% coffin_set_vertical_pole,coffin_show,coffin_show_structure,% coffin_typeset,coffin_wd,color_ensure_current,color_export,% color_fill,color_group_begin,color_group_end,color_log,color_math,% color_model_new,color_profile_apply,color_select,color_set,% color_set_eq,color_show,color_stroke,cs_argument_spec,cs,cs_end,% cs_generate_from_arg_count,cs_generate_variant,cs_gset,cs_gset_eq,% cs_gset_nopar,cs_gset_protected,cs_gset_protected_nopar,cs_if_eq,% cs_if_eq_p,cs_if_exist,cs_if_exist_p,cs_if_exist_use,cs_if_free,% cs_if_free_p,cs_log,cs_meaning,cs_new,cs_new_eq,cs_new_nopar,% cs_new_protected,cs_new_protected_nopar,cs_prefix_spec,% cs_replacement_spec,cs_set,cs_set_eq,cs_set_nopar,cs_set_protected,% cs_set_protected_nopar,cs_show,cs_split_function,cs_to_str,% cs_undefine,debug_off,debug_on,debug_resume,debug_suspend,dim_abs,% dim_add,dim_case,dim_compare,dim_compare_p,dim_const,dim_do_until,% dim_do_while,dim_eval,dim_gadd,dim_gset,dim_gset_eq,dim_gsub,% dim_gzero,dim_gzero_new,dim_if_exist,dim_if_exist_p,dim_log,% dim_max,dim_min,dim_new,dim_ratio,dim_set,dim_set_eq,dim_show,% dim_sign,dim_step_function,dim_step_inline,dim_step_variable,% dim_sub,dim_to_decimal,dim_to_decimal_in_bp,dim_to_decimal_in_sp,% dim_to_decimal_in_unit,dim_to_fp,dim_until_do,dim_use,dim_while_do,% dim_zero,dim_zero_new,draw_begin,draw_end,else,exp_after,exp_args,% exp_args_generate,exp_end,exp_end_continue_f,exp_last_two_unbraced,% exp_last_unbraced,exp_not,exp_stop_f,expandafter,expanded,fi,% file_compare_timestamp,file_compare_timestamp_p,file_full_name,% file_get,file_get_full_name,file_get_hex_dump,file_get_mdfive_hash,% file_get_size,file_get_timestamp,file_hex_dump,file_if_exist,% file_if_exist_input,file_input,file_input_stop,file_log_list,% file_mdfive_hash,file_parse_full_name,file_parse_full_name_apply,% file_show_list,file_size,file_timestamp,flag_clear,flag_clear_new,% flag_height,flag_if_exist,flag_if_exist_p,flag_if_raised,% flag_if_raised_p,flag_log,flag_new,flag_raise,flag_raise_if_clear,% flag_show,fp_abs,fp_add,fp_compare,fp_compare_p,fp_const,% fp_do_until,fp_do_while,fp_eval,fp_format,fp_gadd,fp_gset,% fp_gset_eq,fp_gsub,fp_gzero,fp_gzero_new,fp_if_exist,fp_if_exist_p,% fp_if_nan,fp_if_nan_p,fp_log,fp_max,fp_min,fp_new,fp_set,% fp_set_eq,fp_show,fp_sign,fp_step_function,fp_step_inline,% fp_step_variable,fp_sub,fp_to_decimal,fp_to_dim,fp_to_int,% fp_to_scientific,fp_to_tl,fp_trap,fp_until_do,fp_use,fp_while_do,% fp_zero,fp_zero_new,fparray_count,fparray_gset,fparray_gzero,% fparray_item,fparray_item_to_tl,fparray_new,g_file_curr_dir_str,% g_file_curr_ext_str,g_file_curr_name_str,g_msg_module_name_prop,% g_msg_module_type_prop,g_peek_token,% g__letgut_tmpa_bool,g__letgut_tmpa_box,g__letgut_tmpa_clist,% g__letgut_tmpa_coffin,g__letgut_tmpa_dim,g__letgut_tmpa_fp,% g__letgut_tmpa_int,g__letgut_tmpa_ior,g__letgut_tmpa_iow,% g__letgut_tmpa_muskip,g__letgut_tmpa_prop,g__letgut_tmpa_regex,% g__letgut_tmpa_seq,g__letgut_tmpa_skip,g__letgut_tmpa_str,% g__letgut_tmpa_tl,g__letgut_tmpb_bool,g__letgut_tmpb_box,% g__letgut_tmpb_clist,g__letgut_tmpb_coffin,g__letgut_tmpb_dim,% g__letgut_tmpb_fp,g__letgut_tmpb_int,g__letgut_tmpb_ior,% g__letgut_tmpb_iow,g__letgut_tmpb_muskip,g__letgut_tmpb_prop,% g__letgut_tmpb_regex,g__letgut_tmpb_seq,g__letgut_tmpb_skip,% g__letgut_tmpb_str,g__letgut_tmpb_tl,% group_align_safe_begin,% group_align_safe_end,group_begin,group_end,group_insert_after,% group_log_list,group_show_list,hbox,hbox_gset,hbox_gset_end,% hbox_gset_to_wd,hbox_overlap_center,hbox_overlap_left,% hbox_overlap_right,hbox_set,hbox_set_end,hbox_set_to_wd,hbox_to_wd,% hbox_to_zero,hbox_unpack,hbox_unpack_drop,hcoffin_gset,% hcoffin_gset_end,hcoffin_set,hcoffin_set_end,if,if_bool,% if_box_empty,if_case,if_catcode,if_charcode,if_cs_exist,if_dim,% if_eof,if_false,if_hbox,if_int_compare,if_int_odd,if_meaning,% if_mode_horizontal,if_mode_inner,if_mode_math,if_mode_vertical,% if_predicate,if_true,if_vbox,int_abs,int_add,int_case,int_compare,% int_compare_p,int_const,int_decr,int_div_round,int_div_truncate,% int_do_until,int_do_while,int_eval,int_from_alph,int_from_base,% int_from_bin,int_from_hex,int_from_oct,int_from_roman,int_gadd,% int_gdecr,int_gincr,int_gset,int_gset_eq,int_gsub,int_gzero,% int_gzero_new,int_if_even,int_if_even_p,int_if_exist,int_if_exist_p,% int_if_odd,int_if_odd_p,int_incr,int_log,int_max,int_min,int_mod,% int_new,int_rand,int_set,int_set_eq,int_show,int_sign,% int_step_...,int_step_function,int_step_inline,int_step_variable,% int_sub,int_to_Alph,int_to_Base,int_to_Hex,int_to_Roman,% int_to_alph,int_to_arabic,int_to_base,int_to_bin,int_to_hex,% int_to_oct,int_to_roman,int_to_symbols,int_until_do,int_use,% int_value,int_while_do,int_zero,int_zero_new,% intarray_const_from_clist,intarray_count,intarray_gset,% intarray_gset_rand,intarray_gzero,intarray_item,intarray_log,% intarray_new,intarray_rand_item,intarray_show,intarray_to_clist,% ior_close,ior_get,ior_get_term,ior_if_eof,ior_if_eof_p,ior_log,% ior_log_list,ior_map_break,ior_map_inline,ior_map_variable,ior_new,% ior_open,ior_shell_open,ior_show,ior_show_list,ior_str_get,% ior_str_get_term,ior_str_map_inline,ior_str_map_variable,% iow_allow_break,iow_char,iow_close,iow_indent,iow_log,iow_log_list,% iow_new,iow_newline,iow_now,iow_open,iow_shipout,iow_shipout_x,% iow_show,iow_show_list,iow_term,iow_wrap,keys_define,% keys_if_choice_exist,keys_if_choice_exist_p,keys_if_exist,% keys_if_exist_p,keys_log,keys_set,keys_set_filter,keys_set_groups,% keys_set_known,keys_show,keyval_parse,l_char_active_seq,% l_char_special_seq,l_color_fixed_model_tl,l_color_math_active_tl,% l_file_search_path_seq,l_iow_line_count_int,l_keys_choice_int,% l_keys_choice_tl,l_keys_key_str,l_keys_path_str,% l_keys_usage_load_prop,l_keys_usage_preamble_prop,l_keys_value_tl,% l_my_int,l_peek_token,l_text_accents_tl,l_text_case_exclude_arg_tl,% l_text_expand_exclude_tl,l_text_letterlike_tl,l_text_math_arg_tl,% l_text_math_delims_tl,l_text_titlecase_check_letter_bool,% l__letgut_tmpa_bool,l__letgut_tmpa_box,l__letgut_tmpa_clist,% l__letgut_tmpa_coffin,l__letgut_tmpa_dim,l__letgut_tmpa_fp,% l__letgut_tmpa_int,l__letgut_tmpa_muskip,l__letgut_tmpa_prop,% l__letgut_tmpa_regex,l__letgut_tmpa_seq,l__letgut_tmpa_skip,% l__letgut_tmpa_str,l__letgut_tmpa_tl,l__letgut_tmpb_bool,% l__letgut_tmpb_box,l__letgut_tmpb_clist,l__letgut_tmpb_coffin,% l__letgut_tmpb_dim,l__letgut_tmpb_fp,l__letgut_tmpb_int,% l__letgut_tmpb_muskip,l__letgut_tmpb_prop,l__letgut_tmpb_regex,% l__letgut_tmpb_seq,l__letgut_tmpb_skip,l__letgut_tmpb_str,% l__letgut_tmpb_tl,% legacy_if,legacy_if_gset,legacy_if_gset_false,% legacy_if_gset_true,legacy_if_p,legacy_if_set,legacy_if_set_false,% legacy_if_set_true,lua_escape,lua_now,lua_shipout,lua_shipout_e,% mode_if_horizontal,mode_if_horizontal_p,mode_if_inner,% mode_if_inner_p,mode_if_math,mode_if_math_p,mode_if_vertical,% mode_if_vertical_p,mode_leave_vertical,msg_critical,% msg_critical_text,msg_error,msg_error_text,msg_expandable_error,% msg_fatal,msg_fatal_text,msg_gset,msg_if_exist,msg_if_exist_p,% msg_info,msg_info_text,msg_line_context,msg_line_number,msg_log,% msg_log_eval,msg_module_name,msg_module_type,msg_new,msg_none,% msg_note,msg_redirect_class,msg_redirect_module,msg_redirect_name,% msg_see_documentation_text,msg_set,msg_show,msg_show_eval,% msg_show_item,msg_show_item_unbraced,msg_term,msg_warning,% msg_warning_text,muskip_add,muskip_const,muskip_eval,muskip_gadd,% muskip_gset,muskip_gset_eq,muskip_gsub,muskip_gzero,% muskip_gzero_new,muskip_if_exist,muskip_if_exist_p,muskip_log,% muskip_new,muskip_set,muskip_set_eq,muskip_show,muskip_sub,% muskip_use,muskip_zero,muskip_zero_new,pdf_destination,% pdf_object_if_exist,pdf_object_if_exist_p,pdf_object_new,% pdf_object_ref,pdf_object_ref_last,pdf_object_unnamed_write,% pdf_object_write,pdf_pageobject_ref,pdf_pagobject_ref,pdf_uncompress,% pdf_version,pdf_version_compare,pdf_version_compare_p,% pdf_version_gset,pdf_version_major,pdf_version_min_gset,% pdf_version_minor,peek_N_type,peek_after,peek_analysis_map_break,% peek_analysis_map_inline,peek_catcode,peek_catcode_collect_inline,% peek_catcode_remove,peek_charcode,peek_charcode_collect_inline,% peek_charcode_remove,peek_gafter,peek_meaning,% peek_meaning_collect_inline,peek_meaning_remove,peek_regex,% peek_regex_remove_once,peek_regex_replace_once,peek_remove_filler,% peek_remove_spaces,prg_break,prg_break_point,prg_do_nothing,% prg_generate_conditional_variant,prg_map_break,prg_new_conditional,% prg_new_eq_conditional,prg_new_protected_conditional,prg_replicate,% prg_return_false,prg_return_true,prg_set_conditional,% prg_set_eq_conditional,prg_set_protected_conditional,prop_clear,% prop_clear_new,prop_concat,prop_const_from_keyval,prop_count,% prop_gclear,prop_gclear_new,prop_gconcat,prop_get,prop_gpop,% prop_gput,prop_gput_from_keyval,prop_gput_if_new,prop_gremove,% prop_gset_eq,prop_gset_from_keyval,prop_if_empty,prop_if_empty_p,% prop_if_exist,prop_if_exist_p,prop_if_in,prop_if_in_p,prop_item,% prop_log,prop_map_break,prop_map_function,prop_map_inline,% prop_map_tokens,prop_new,prop_pop,prop_put,prop_put_from_keyval,% prop_put_if_new,prop_rand_key_value,prop_remove,prop_set_eq,% prop_set_from_keyval,prop_show,prop_to_keyval,q_mark,q_nil,% q_no_value,q_recursion_stop,q_recursion_tail,q_stop,quark_if_nil,% quark_if_nil_p,quark_if_no_value,quark_if_no_value_p,% quark_if_recursion_tail_break,quark_if_recursion_tail_stop,% quark_if_recursion_tail_stop_do,quark_new,regex_const,regex_count,% regex_extract_all,regex_extract_once,regex_gset,regex_log,% regex_match,regex_match_case,regex_new,regex_replace,% regex_replace_all,regex_replace_case_all,regex_replace_case_once,% regex_replace_once,regex_set,regex_show,regex_split,reverse_if,% s_stop,scan_new,scan_stop,seq_clear,seq_clear_new,seq_concat,% seq_const_from_clist,seq_count,seq_gclear,seq_gclear_new,% seq_gconcat,seq_get,seq_get_left,seq_get_right,seq_gpop,% seq_gpop_item,seq_gpop_left,seq_gpop_right,seq_gpush,seq_gput_left,% seq_gput_right,seq_gremove_all,seq_gremove_duplicates,seq_greverse,% seq_gset_eq,seq_gset_filter,seq_gset_from_clist,% seq_gset_from_function,seq_gset_from_inline_x,seq_gset_item,% seq_gset_map,seq_gset_map_x,seq_gset_split,% seq_gset_split_keep_spaces,seq_gshuffle,seq_gsort,seq_if_empty,% seq_if_empty_p,seq_if_exist,seq_if_exist_p,seq_if_in,seq_item,% seq_log,seq_map_break,seq_map_function,seq_map_indexed_function,% seq_map_indexed_inline,seq_map_inline,seq_map_tokens,% seq_map_variable,seq_mapthread_function,seq_new,seq_pop,% seq_pop_item,seq_pop_left,seq_pop_right,seq_push,seq_put_left,% seq_put_right,seq_rand_item,seq_remove_all,seq_remove_duplicates,% seq_reverse,seq_set_eq,seq_set_filter,seq_set_from_clist,% seq_set_from_function,seq_set_from_inline_x,seq_set_item,seq_set_map,% seq_set_map_x,seq_set_split,seq_set_split_keep_spaces,seq_show,% seq_shuffle,seq_sort,seq_use,skip_add,skip_const,skip_eval,% skip_gadd,skip_gset,skip_gset_eq,skip_gsub,skip_gzero,% skip_gzero_new,skip_horizontal,skip_if_eq,skip_if_eq_p,% skip_if_exist,skip_if_exist_p,skip_if_finite,skip_if_finite_p,% skip_log,skip_new,skip_set,skip_set_eq,skip_show,skip_sub,% skip_use,skip_vertical,skip_zero,skip_zero_new,sort_return_same,% sort_return_swapped,str_case,str_case_e,str_clear,str_clear_new,% str_compare,str_compare_p,str_concat,str_const,str_convert_pdfname,% str_count,str_count_ignore_spaces,str_count_spaces,str_foldcase,% str_gclear,str_gconcat,str_gput_left,str_gput_right,str_gremove_all,% str_gremove_once,str_greplace_all,str_greplace_once,str_gset,% str_gset_convert,str_gset_eq,str_head,str_head_ignore_spaces,% str_if_empty,str_if_empty_p,str_if_eq,str_if_eq_p,str_if_exist,% str_if_exist_p,str_if_in,str_item,str_item_ignore_spaces,str_log,% str_lowercase,str_map_break,str_map_function,str_map_inline,% str_map_tokens,str_map_variable,str_new,str_put_left,str_put_right,% str_range,str_range_ignore_spaces,str_remove_all,str_remove_once,% str_replace_all,str_replace_once,str_set,str_set_convert,str_set_eq,% str_show,str_tail,str_tail_ignore_spaces,str_uppercase,str_use,% sys_finalise,sys_get_shell,sys_gset_rand_seed,sys_if_engine_luatex,% sys_if_engine_luatex_p,sys_if_engine_pdftex,sys_if_engine_pdftex_p,% sys_if_engine_ptex,sys_if_engine_ptex_p,sys_if_engine_uptex,% sys_if_engine_uptex_p,sys_if_engine_xetex,sys_if_engine_xetex_p,% sys_if_output_dvi,sys_if_output_dvi_p,sys_if_output_pdf,% sys_if_output_pdf_p,sys_if_platform_unix,sys_if_platform_unix_p,% sys_if_platform_windows,sys_if_platform_windows_p,sys_if_rand_exist,% sys_if_rand_exist_p,sys_if_shell,sys_if_shell_p,% sys_if_shell_restricted,sys_if_shell_restricted_p,% sys_if_shell_unrestricted,sys_if_shell_unrestricted_p,% sys_load_backend,sys_load_debug,sys_rand_seed,sys_shell_now,% sys_shell_shipout,sys_timer,text_declare_expand_equivalent,% text_declare_purify_equivalent,text_expand,text_lowercase,% text_purify,text_titlecase,text_titlecase_first,text_uppercase,% tl_analysis_log,tl_analysis_map_inline,tl_analysis_show,% tl_build_begin,tl_build_clear,tl_build_end,tl_build_gbegin,% tl_build_gclear,tl_build_gend,tl_build_get,tl_build_gput_left,% tl_build_gput_right,tl_build_put_left,tl_build_put_right,tl_case,% tl_clear,tl_clear_new,tl_concat,tl_const,tl_count,tl_count_tokens,% tl_gclear,tl_gclear_new,tl_gconcat,tl_gput_left,tl_gput_right,% tl_gremove_all,tl_gremove_once,tl_greplace_all,tl_greplace_once,% tl_greverse,tl_gset,tl_gset_eq,tl_gset_rescan,tl_gsort,% tl_gtrim_spaces,tl_head,tl_if_blank,tl_if_blank_p,tl_if_empty,% tl_if_empty_p,tl_if_eq,tl_if_eq_p,tl_if_exist,tl_if_exist_p,% tl_if_head_eq_catcode,tl_if_head_eq_catcode_p,tl_if_head_eq_charcode,% tl_if_head_eq_charcode_p,tl_if_head_eq_meaning,% tl_if_head_eq_meaning_p,tl_if_head_is_N_type,tl_if_head_is_N_type_p,% tl_if_head_is_group,tl_if_head_is_group_p,tl_if_head_is_space,% tl_if_head_is_space_p,tl_if_in,tl_if_novalue,tl_if_novalue_p,% tl_if_single,tl_if_single_p,tl_if_single_token,tl_if_single_token_p,% tl_item,tl_log,tl_map_break,tl_map_function,tl_map_inline,% tl_map_tokens,tl_map_variable,tl_new,tl_put_left,tl_put_right,% tl_rand_item,tl_range,tl_range_braced,tl_range_unbraced,% tl_remove_all,tl_remove_once,tl_replace_all,tl_replace_once,% tl_rescan,tl_reverse,tl_reverse_items,tl_set,tl_set_eq,% tl_set_rescan,tl_show,tl_sort,tl_tail,tl_to_str,tl_trim_spaces,% tl_trim_spaces_apply,tl_use,token_case_catcode,token_case_charcode,% token_case_meaning,token_if_active,token_if_active_p,% token_if_alignment,token_if_alignment_p,token_if_chardef,% token_if_chardef_p,token_if_cs,token_if_cs_p,token_if_dim_register,% token_if_dim_register_p,token_if_eq_catcode,token_if_eq_catcode_p,% token_if_eq_charcode,token_if_eq_charcode_p,token_if_eq_meaning,% token_if_eq_meaning_p,token_if_expandable,token_if_expandable_p,% token_if_font_selection,token_if_font_selection_p,% token_if_group_begin,token_if_group_begin_p,token_if_group_end,% token_if_group_end_p,token_if_int_register,token_if_int_register_p,% token_if_letter,token_if_letter_p,token_if_long_macro,% token_if_long_macro_p,token_if_macro,token_if_macro_p,% token_if_math_subscript,token_if_math_subscript_p,% token_if_math_superscript,token_if_math_superscript_p,% token_if_math_toggle,token_if_math_toggle_p,token_if_mathchardef,% token_if_mathchardef_p,token_if_muskip_register,% token_if_muskip_register_p,token_if_other,token_if_other_p,% token_if_parameter,token_if_parameter_p,token_if_primitive,% token_if_primitive_p,token_if_protected_long_macro,% token_if_protected_long_macro_p,token_if_protected_macro,% token_if_protected_macro_p,token_if_skip_register,% token_if_skip_register_p,token_if_space,token_if_space_p,% token_if_toks_register,token_if_toks_register_p,token_to_meaning,% token_to_str,unvcopy,use,use_i,use_i_delimit_by_q_nil,% use_i_delimit_by_q_recursion_stop,use_i_delimit_by_q_stop,use_i_ii,% use_ii,use_ii_i,use_iii,use_iv,use_none,use_none_delimit_by_q_nil,% use_none_delimit_by_q_recursion_stop,use_none_delimit_by_q_stop,% use_none_delimit_by_s_stop,vbox,vbox_gset,vbox_gset_end,% vbox_gset_split_to_ht,vbox_gset_to_ht,vbox_gset_top,vbox_set,% vbox_set_end,vbox_set_split_to_ht,vbox_set_to_ht,vbox_set_top,% vbox_to_ht,vbox_to_zero,vbox_top,vbox_unpack,vbox_unpack_drop,% vcoffin_gset,vcoffin_gset_end,vcoffin_set,vcoffin_set_end,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% name,alternative-model,alternative-values,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% cmyk,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% D,N,Nn,NF,NN,Nx,NT,NTF,NNn,NnV,Nnn,Npn,Nnnn,V,c,e,en,f,n,nF,% nn,nT,nnn,nnF,nnV,nTF,nnnn,nNnF,nNnT,nnVV,o,p,v,w,x,nnTF,% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% expl3,% }, otherkeywords={:,~},% alsoletter={_-.},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[pdftex]{TeX}{% % Control sequences names moretexcs={% pdfinfo,pdfcatalog,pdfpageattr,pdfpagesattr,pdfpageresources,% pdfcolorstack,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% pdftex,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[luatex]{TeX}{% % Control sequences names moretexcs={% pdfextension,ifluatex,directlua,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% colorstack },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% luatex,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[dvips]{TeX}{% % Control sequences names moretexcs={% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% color,push,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% dvips,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[xetex]{TeX}{% % Control sequences names moretexcs={% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% pdfcolorstack,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% xetex,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[inputenc]{TeX}{% % Control sequences names moretexcs={% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% latin1 },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% inputenc,% },% % otherkeywords={},% alsoletter={1},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[pdfmanagement-testphase]{TeX}{% % Control sequences names moretexcs={% pdfmanagement_add,DeclareDocumentMetadata,AddToDocumentProperties,% ShowDocumentProperties,GetDocumentProperties,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% Keys or optional arguments pdfmanagement-testphase,uncompress,geometry,top-level,backend,Info,% ThisPage,pdfversion,pdfstandard,paper,topic,Title,Rotate,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% dvipdfmx,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% nnn,% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% pdfmanagement-testphase,% }, otherkeywords={:},% alsoletter={_-},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[rotating]{TeX}{% % Control sequences names moretexcs={% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% sidewaystable,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% rotating,% },% % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[fontenc]{TeX}% {% % Control sequences names moretexcs={% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% T1 },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% fontenc,% },% % otherkeywords={}, % alsoletter={1},% alsodigit={1},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[babel]{TeX}% {% % Control sequences names moretexcs={% foreignlanguage,selectlanguage,iflanguage,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% otherlanguage,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% UKenglish,USenglish,acadian,afrikaans,american,arabic,australian,% austrian,azerbaijani,bahasa,bahasai,basque,bgreek,brazil,% brazilian,breton,british,bulgarian,canadian,canadien,catalan,% croatian,czech,danish,dutch,english,esperanto,estonian,ethiop,% farsi,finnish,francais,french,frenchle,friulan,galician,german,% germanb,greek,hebrew,hindi,ibygreek,icelandic,indon,indonesian,% interlingua,irish,italian,japanese,latin,latvian,lithuanian,% lowersorbian,magyar,malay,melayu (bahasam),mongolian,naustrian,% newzealand,ngerman,norsk,nynorsk,pinyin,polish,polutonikogreek,% portuges,portuguese,romanian,romansh,russian,samin,scottish,% serbian,serbianc,slovak,slovene,spanglish,spanish,swedish,thai,% thaicjk,turkish,turkmen,ukrainian,uppersorbian,vietnamese,% welsh,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% babel,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[babel-french]{TeX}% {% % Control sequences names moretexcs={% og,fg,up,bsc,ier,iers,iere,ieres,ieme,iemes,primo,secundo,% tertio,quarto,FrenchEnumerate,No,Nos,no,nos,degre,nombre,% frenchabstractname,frenchbibname,frenchrefname,frenchprefacename,% frenchchaptername,frenchappendixname,frenchcontentsname,% frenchlistfigurename,frenchlisttablename,frenchindexname,% frenchglossaryname,frenchfigurename,frenchtablename,frenchpartname,% frenchenclname,frenchccname,frenchheadtoname,frenchpagename,% frenchseename,frenchalsoname,frenchproofname%,% frquote,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% babel-french,% },% % otherkeywords={},% alsoletter={-},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[kantlipsum]{TeX}{% % Control sequences names moretexcs={% kant,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% kantlipsum,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[hyperxmp]{TeX}{% % Control sequences names moretexcs={% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% hyperxmp,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[hyperref]{TeX}{% % Control sequences names moretexcs={% hypersetup,href,phantomsection,pdfstringdefDisableCommands,url,% nolinkurl,hyperbaseurl,hyperimage,hyperdef,hyperref,hyperlink,% hypertarget,hyperget,autoref,autopageref,ref*,pageref*,autoref*,% autopageref*,pdfstringdef,pdfbookmark,currentpdfbookmark,% subpdfbookmark,belowpdfbookmark,texorpdfstring,thispdfpagelabel,% hypercalcbp,nameref,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% allbordercolors,allcolors,anchorcolor,backref,baseurl,bookmarks,% bookmarksnumbered,bookmarksopen,bookmarksopenlevel,bookmarkstype,% breaklinks,CJKbookmarks,citebordercolor,citecolor,colorlinks,debug,% destlabel,draft,driverfallback,dvipdfm,dvipdfmx,dvips,dvipsone,% dviwindo,encap,extension,filebordercolor,filecolor,final,% frenchlinks,hidelinks,hyperfigures,hyperfootnotes,hyperindex,% hypertex,hypertexnames,implicit,latex2html,linkbordercolor,% linkcolor,linktoc,linktocpage,menubordercolor,menucolor,nativepdf,% naturalnames,nesting,next-anchor,pageanchor,pagebackref,pdfauthor,% pdfborder,pdfborderstyle,pdfcenterwindow,pdfcreator,pdfdirection,% pdfdisplaydoctitle,pdfduplex,pdffitwindow,pdfhighlight,pdfinfo,% pdfkeywords,pdflang,pdfmark,pdfmenubar,pdfnewwindow,% pdfnonfullscreenpagemode,pdfnumcopies,pdfpagelabels,pdfpagelayout,% pdfpagemode,pdfpagescrop,pdfpagetransition,pdfpicktraybypdfsize,% pdfprintarea,pdfprintclip,pdfprintpagerange,pdfprintscaling,% pdfproducer,pdfremotestartview,pdfstartpage,pdfstartview,pdfsubject,% pdftex,pdftitle,pdftoolbar,pdftrapped,pdfview,pdfviewarea,% pdfviewclip,pdfwindowui,plainpages,ps2pdf,psdextra,raiselinks,% runbordercolor,runcolor,setpagesize,tex4ht,textures,unicode,% urlbordercolor,urlcolor,verbose,vtex,xetex,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% hyperref,% },% % otherkeywords={},% alsoletter={*},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[graphicx]{TeX}{% % Control sequences names moretexcs={% includegraphics,includegraphics*,definecolor,color,textcolor,% mathcolor,pagecolor,nopagecolor,colorbox,fcolorbox,rotatebox,% scalebox,reflectbox,resizebox,resizebox*,graphicspath,% DeclareGraphicsExtensions,DeclareGraphicsRule },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% draft,final,hiresbb,demo,setpagesize,nosetpagesize,dvips,xdvi,% dvipdf,dvipdfm,dvipdfmx,xetex,pdftex,luatex,dvisvgm,dvipsone,% dviwindo,emtex,dviwin,oztex,textures,pctexps,pctexwin,pctexhp,% pctex32,truetex,tcidvi,vtex,debugshow,hiderotate,hidescale,alt,% % bb,bbllx,bblly,bburx,bbury,natwidth,natheight,hiresbb,pagebox,% viewport,trim,angle,origin,width,height,totalheight,% keepaspectratio,scale,clip,draft,type,ext,read,command,quiet,% page,interpolate,decodearray,origin,x,y,units,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% mediabox,cropbox,bleedbox,trimbox,artbox,true,false,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% graphicx,% },% % otherkeywords={},% alsoletter={23},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[geometry]{TeX}{% % Control sequences names moretexcs={% geometry,newgeometry,restoregeometry,savegeometry,loadgeometry,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% paper,papername,paperwidth,paperheight,papersize,landscape,% portrait,layout,layoutwidth,layoutheight,layoutsize,layouthoffset,% layoutvoffset,layoutoffset,hscale,vscale,scale,width,totalwidth,% height,totalheight,total,textwidth,textheight,text,body,lines,% includehead,includefoot,includeheadfoot,includemp,includeall,% ignorehead,ignorefoot,ignoreheadfoot,ignoremp,ignoreall,% heightrounded,hdivide,vdivide,divide,left,lmargin,inner,right,% rmargin,outer,top,tmargin,bottom,bmargin,hmargin,vmargin,margin,% hmarginratio,vmarginratio,marginratio,ratio,hcentering,vcentering,% centering,twoside,asymmetric,headheight,head,headsep,footskip,% foot,nohead,nofoot,noheadfoot,footnotesep,marginparwidth,% marginparsep,nomarginpar,columnsep,hoffset,voffset,offset,% twocolumn,onecolumn,reversemp,reversemarginpar,verbose,reset,mag,% truedimen,pass,showframe,showcrop,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% a0paper,a1paper,a2paper,a3paper,a4paper,a5paper,a6paper,b0paper,% b1paper,b2paper,b3paper,b4paper,b5paper,b6paper,c0paper,c1paper,% c2paper,c3paper,c4paper,c5paper,c6paper,b0j,b1j,b2j,b3j,b4j,% b5j,b6j,ansiapaper,ansibpaper,ansicpaper,ansidpaper,ansiepaper,% letterpaper,executivepaper,legalpaper,screen,dvips,dvipdfm,pdftex,% luatex,xetex,vtex,dvipdfmx,xdvipdfmx,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% geometry,% },% % otherkeywords={},% alsoletter={0123456},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[newpax]{TeX}{% % Control sequences names moretexcs={% newpaxsetup,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% addannots,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% false,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% newpax,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[tikz]{TeX}{% % Control sequences names moretexcs={% usetikzlibrary,draw,node,matrix,fill,foreach,tikz,pgfmathsetmacro,% path,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% tikzpicture,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% pic,rotate,xshift,yshift,every node,inner sep,blend mode,fill,% fit,circle,anchor,in,count,x,y,matrix,of,math,nodes,above right,% at,--,-|,|-,thick,size,angle,circle,through,intersection,of,% draw,coordinate,shift,and,cycle,cs:A,node,barycentric,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% multiply,lightgray,base,red% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tikz,% },% % otherkeywords={},% alsoletter={-| \ :},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[tikzducks]{TeX}{% % Control sequences names moretexcs={% duck,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% alien,aodai,baguette,basket,beard,beret,bill,body,book,% bookcolour,bowtie,bubblecolour,bunny,buttons,cake,cap,cape,% cheese,chef,cocktail,conicalhat,crazyhair,cricket,crown,crozier,% crystalball,darthvader,devil,easter,egga,eggb,eggc,eye,eyebrow,% flavoura,flavourb,flavourc,football,glasses,graduate,grumpy,% handbag,harlequin,hat,head,helmet,hockey,horsetail,icecream,% inear,invisible,jacket,kingcrown,lapel,laughing,lightsaber,% longhair,magichat,magicstars,magicwand,mask,milkshake,mohican,% mullet,name,neckerchief,necklace,niuqelrah,overleaf,parrot,% parting,peakedcap,pickaxe,pizza,prison,queencrown,recedinghair,% ribbon,rollingpin,sailor,santa,sheep,shorthair,shovel,signback,% signcolour,signpost,snowduck,speech,squareglasses,stethoscope,% strawhat,sunglasses,tail,tassel,think,tie,tophat,torch,tshirt,% umbrella,umbrellaclosed,unicorn,vampire,viking,water,wine,wing,% witch,woggle,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% blue,green,red,yellow,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tikzducks,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[tikzlings]{TeX}{% % Control sequences names moretexcs={% anteater,bear,bee,cat,chicken,coati,elephant,hippo,koala,% marmot,mole,mouse,owl,panda,penguin,pig,rhino,sheep,sloth,% squirrel,snowman,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% 3D,eye,contour,back,globalwarming,whiskers,schroedinger,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tikzlings,% },% % otherkeywords={},% alsoletter={3},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[amsmath]{TeX}{% % Control sequences names moretexcs={% cdots,ddots,vdots,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% pmatrix,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% amsmath,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % xparse %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[xparse]{TeX}{% % Control sequences names moretexcs={% NewDocumentCommand,RenewDocumentCommand,ProvideDocumentCommand,% DeclareDocumentCommand,NewDocumentEnvironment,% RenewDocumentEnvironment,ProvideDocumentEnvironment,% DeclareDocumentEnvironment,NewExpandableDocumentCommand,% RenewExpandableDocumentCommand,ProvideExpandableDocumentCommand,% DeclareExpandableDocumentCommand,IfNoValueT,IfNoValueF,IfNoValueTF,% IfValueT,IfValueF,IfValueTF,IfBooleanT,IfBooleanF,IfBooleanTF,% BooleanTrue,BooleanFalse,ProcessedArgument,ReverseBoolean,% SplitArgument,SplitList,ProcessList,TrimSpaces,% GetDocumentCommandArgSpec,GetDocumentEnvironmentArgSpec,% ShowDocumentCommandArgSpec,ShowDocumentEnvironmentArgSpec,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% log-declarations,% m,r,R,v,b,o,d,O,D,s,t,e,E,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% xparse,% },% % otherkeywords={},% alsoletter={-},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % colortbl %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[colortbl]{TeX}{% % Control sequences names moretexcs={% columncolor,rowcolor,cellcolor,arrayrulecolor,doublerulesepcolor,% minrowclearance,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% colortbl,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % multirow %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[multirow]{TeX}% {% % Control sequences names moretexcs={% multirow,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% multirow,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % nicematrix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[nicematrix]{TeX}% {% % Control sequences names moretexcs={% Cdots,Ddots,Vdots,Body,CodeBefore,CodeAfter,Block,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% pNiceMatrix,NiceMatrix,NiceTabular,bNiceArray,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% hvlines,rules/width,baseline,colortbl-like,margin,right-margin,% create-cell-nodes,rounded-corners,draw,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% nicematrix,% }, otherkeywords={&},% alsoletter={/},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % booktabs %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[booktabs]{TeX}% {% % Control sequences names moretexcs={% toprule,midrule,bottomrule,cmidrule,addlinespace,morecmidrules,% specialrule,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% booktabs,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % strands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[strands]{TeX}% {% % Control sequences names moretexcs={% strands,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% strands,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % cartonaugh %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[cartonaugh]{TeX}% {% % Control sequences names moretexcs={% maxterms,minterms,terms,implicant,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% cartonaugh,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% cartonaugh,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % xistercian %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[xistercian]{TeX}% {% % Control sequences names moretexcs={% cisterciannum,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% xistercian,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% xistercian,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % aboensis %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[aboensis]{TeX}% {% % Control sequences names moretexcs={% abcursivefamily,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% aboensis,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tabularray %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[tabularray]{TeX}% {% % Control sequences names moretexcs={% ,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% tblr,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% width,colspec,row,bg,fg,font,column,hlines,X,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% odd,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tabularray,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ninecolors %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[ninecolors]{TeX}% {% % Control sequences names moretexcs={% NineColors,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% gray1,red1,brown1,yellow1,olive1,green1,teal1,cyan1,azure1,% blue1,violet1,magenta1,purple1,gray2,red2,brown2,yellow2,olive2,% green2,teal2,cyan2,azure2,blue2,violet2,magenta2,purple2,gray3,% red3,brown3,yellow3,olive3,green3,teal3,cyan3,azure3,blue3,% violet3,magenta3,purple3,gray4,red4,brown4,yellow4,olive4,% green4,teal4,cyan4,azure4,blue4,violet4,magenta4,purple4,gray5,% red5,brown5,yellow5,olive5,green5,teal5,cyan5,azure5,blue5,% violet5,magenta5,purple5,gray6,red6,brown6,yellow6,olive6,% green6,teal6,cyan6,azure6,blue6,violet6,magenta6,purple6,gray7,% red7,brown7,yellow7,olive7,green7,teal7,cyan7,azure7,blue7,% violet7,magenta7,purple7,gray8,red8,brown8,yellow8,olive8,% green8,teal8,cyan8,azure8,blue8,violet8,magenta8,purple8,gray9,% red9,brown9,yellow9,olive9,green9,teal9,cyan9,azure9,blue9,% violet9,magenta9,purple9,gray1,red1,brown1,yellow1,olive1,% green1,teal1,cyan1,azure1,blue1,violet1,magenta1,purple1,gray2,% red2,brown2,yellow2,olive2,green2,teal2,cyan2,azure2,blue2,% violet2,magenta2,purple2,gray3,red3,brown3,yellow3,olive3,% green3,teal3,cyan3,azure3,blue3,violet3,magenta3,purple3,gray4,% red4,brown4,yellow4,olive4,green4,teal4,cyan4,azure4,blue4,% violet4,magenta4,purple4,gray5,red5,brown5,yellow5,olive5,% green5,teal5,cyan5,azure5,blue5,violet5,magenta5,purple5,gray6,% red6,brown6,yellow6,olive6,green6,teal6,cyan6,azure6,blue6,% violet6,magenta6,purple6,gray7,red7,brown7,yellow7,olive7,% green7,teal7,cyan7,azure7,blue7,violet7,magenta7,purple7,gray8,% red8,brown8,yellow8,olive8,green8,teal8,cyan8,azure8,blue8,% violet8,magenta8,purple8,gray9,red9,brown9,yellow9,olive9,% green9,teal9,cyan9,azure9,blue9,violet9,magenta9,purple9,% saturation,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% low,medium,high,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% ninecolors,% },% % otherkeywords={},% alsoletter={123456789},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[fontspec]{TeX}{% % Control sequences names moretexcs={% EncodingAccent,EncodingCommand,EncodingComposite,% EncodingCompositeCommand,EncodingSymbol,IfFontExistsTF,% IfFontFeatureActiveTF,UndeclareAccent,UndeclareCommand,% UndeclareComposite,UndeclareSymbol,addfontfeature,addfontfeatures,% aliasfontfeature,aliasfontfeatureoption,defaultfontfeatures,fontspec,% liningnums,newAATfeature,newfontface,newfontfamily,newfontfeature,% newfontlanguage,newfontscript,newopentypefeature,oldstylenums,% providefontface,providefontfamily,renewfontface,renewfontfamily,% setboldmathrm,setfontface,setfontfamily,setmainfont,setmathrm,% setmathsf,setmathtt,setmonofont,setromanfont,setsansfont,strong,% strongfontdeclare,strongresetsetmainfont,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% Alternate,Annotation,AutoFakeBold,AutoFakeSlant,BoldFeatures,% BoldFont,BoldItalicFeatures,BoldItalicFont,BoldSlantedFeatures,% BoldSlantedFont,BoldSwashFeatures,BoldSwashFont,CJKShape,ItalicFeatures,% CharacterVariant,CharacterWidth,Color,Colour,Contextuals,% Diacritics,Extension,FakeBold,FakeSlant,FakeStretch,Font,FontFace,% Fractions,HyphenChar,IgnoreFontspecFileItalicFeatures,ItalicFont,% Kerning,Language,LetterSpace,Letters,Ligatures,LocalForms,% NFSSFamily,Numbers,OpticalSize,Ornament,Path,PunctuationSpace,% RawFeature,Scale,ScaleAgain,Script,Size,SizeFeatures,% SlantedFeatures,SlantedFont,SmallCapsFeatures,SmallCapsFont,Style,% StylisticAlternates,StylisticSet,SwashFeatures,SwashFont,% UprightFeatures,UprightFont,Variant,Vertical,VerticalPosition,% WordSpace,Mapping,Renderer,Traditional,Simplified,JIS1978,JIS1983,% JIS1990,Expert,NLC,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% AboveBase,Alternate,AlternateHalf,AlternateMetrics,% AlternateProportional,Alternates,AlternatesForRotation,Arabic,% ArabicOff,BelowBase,Common,Contextual,Cursive,Denominator,% Discretionary,Expert,Full,Half,HalfMetrics,Historic,% HorizontalKana,Inferior,Inner,Italic,JIS1978,JIS1983,JIS1990,% KanaAlternates,Kerning,LineFinal,Lining,LiningOff,Lowercase,% LowercaseOff,MarkToBase,MarkToMark,Monospaced,MonospacedOff,NLC,% Numerator,Off,OldStyle,OldStyleOff,On,Ordinal,PetiteCaps,% Proportional,ProportionalMetrics,ProportionalOff,Quarter,Rare,% Required,Reset,ResetAll,RotatedGlyphs,Ruby,ScientificInferior,% Simplified,SlashedZero,SlashedZeroOff,SmallCaps,Superior,Swash,% TeX,Thurd,Titling,Traditional,Unicase,Uppercase,UppercaseOff,% UppercasePetiteCaps,UppercaseSmallCaps,VerticalKana,WordFinal,% WordInitial,ResetAll,c2sc,scmp,sinf,sups,zero,ss06,ss01,% ss04,-liga,frac,titl,swsh,hist,hlig,MatchUppercase,MatchLowercase,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% fontspec% },% % otherkeywords={},% alsoletter={20614-},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[ProfCollege]{TeX}{% % Control sequences names moretexcs={% Thales,Pourcentage,ResolEquation% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% Twitter,Scratch,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% Auteur,Logo,Calculer,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% Place,Drapeau,Avancer,Repeter,Tournerg,FinBlocRepeter,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% ProfCollege,% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[tkz-euclide]{TeX}{% % Control sequences names moretexcs={% tkzDefPoint,tkzInterCC,tkzGetPoints,tkzDrawCircles,tkzDrawPolygon,% tkzDrawPoints,tkzMarkSegments,tkzLabelSegments,tkzLabelPoints,% tkzLabelPoints,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% tikzpicture,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% mark,swap,above,scale,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tkz-euclide },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[tkz-fct]{TeX}{% % Control sequences names moretexcs={% tkzInit,tkzDrawX,tkzDrawY,tkzFct,tkzDefPoint,tkzDrawPoint,% tkzPointShowCoord,tkzDefPoint,tkzDrawPoint,tkzPointShowCoord,% tkzRep,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% tikzpicture,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% xmin,xmax,ymin,ymax,samples,domain,xlabel,ylabel,xscale,yscale% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tkz-fct },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[tkz-tab]{TeX}{% % Control sequences names moretexcs={% tkzTabInit,tkzTabLine,tkzTabVar,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% tikzpicture,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% lgt,espcl,t,d,z,+,-,-D+/,+/,-/,+D/,scale,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tkz-tab },% % otherkeywords={},% alsoletter={+-/},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[mecaso]{TeX}{% % Control sequences names moretexcs={% KineticT,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% mecaso },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[hanzibox]{TeX}{% % Control sequences names moretexcs={% hanzibox*,hanziboxset,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% frametype,pinyinline,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% none,true,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% hanzibox },% % otherkeywords={},% % alsoletter={},% % alsodigit={},% alsoother={*},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[tikz-bagua]{TeX}{% % Control sequences names moretexcs={% Bagua*,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tikz-bagua },% % otherkeywords={},% % alsoletter={},% % alsodigit={},% alsoother={*},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[bodeplot]{TeX}{% % Control sequences names moretexcs={% addBodeZPKPlots },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% BodePlot,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% ylabel,ytick,distance,height,width,magnitude,z,p,k,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% true,black,thick,linear,red,dashed,thick,asymptotic,blue,% dotted,thick,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% bodeplot },% % otherkeywords={},% alsoletter={/},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[formal-grammar]{TeX}{% % Control sequences names moretexcs={% highlight,firstcase,gralt,nonterm },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% grammar },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% formal-grammar },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[numerica-plus]{TeX}{% % Control sequences names moretexcs={% nmcRecur,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% do,see1,f_,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% numerica-plus },% % otherkeywords={},% alsoletter={_1},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[pascaltriangle]{TeX}{% % Control sequences names moretexcs={% pascal,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% pascaltriangle },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[pgf-interference]{TeX}{% % Control sequences names moretexcs={% pgfinterferencepattern,% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% slits,wavelength,slit-distance,intensity,ruler,scale,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% pgf-interference% },% % otherkeywords={},% alsoletter={-},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[clistmap]{TeX}{% % Control sequences names moretexcs={% ExplSyntaxOn,ExplSyntaxOff,clistmap,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% first_math,serial_rest_math_and,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% nnn,N,% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% clistmap },% % otherkeywords={},% alsoletter={_},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[hexboard]{TeX}{% % Control sequences names moretexcs={% hexmove,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% hexgamelabels,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% hexboard },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[robotarm]{TeX}{% % Control sequences names moretexcs={% robotArm,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% tikzpicture },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% config,q1,q2,q3,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% robotarm },% % otherkeywords={},% alsoletter={123},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[amsfonts]{TeX}{% % Control sequences names moretexcs={% mathbb,mathfrak,angle,Box,dasharrow,dashleftarrow,dashrightarrow,% Diamond,hbar,Join,leadsto,lhd,llcorner,lozenge,lrcorner,mho,% rhd,rightleftharpoons,rightsquigarrow,sqsubset,sqsupset,square,% trianglelefteq,trianglerighteq,ulcorner,unlhd,unrhd,urcorner,% vartriangleleft,vartriangleright,widehat{arg},widetilde{arg},yen,% checkmark,circledR,maltese,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% amsfonts },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[biolinum]{TeX}{% % Control sequences names moretexcs={% biolinum,biolinumOsF,biolinumLF,biolinumkey,sufigures,textsu,% textsuperior,oldstylenums,liningnums,oldstylenumsf,liningnumsf,% tabularnums,proportionalnums,tabularnumsf,proportionalnumsf,% DeclareTextGlyphY,biolinumGlyph,biolinumKeyGlyph,LKey,LKeyPad,% LKeyF,LKeyAltF,LKeyStrgAltF,LKeyCtrlAltF,LKeyStrgX,LKeyCtrlX,% LKeyShiftX,LKeyAltX,LKeyAltGrX,LKeyShiftStrgX,LKeyShiftCtrlX,% LKeyShiftAltX,LKeyShiftAltGrX,LKeyStrgAltX,LKeyCtrlAltX,% LKeyStrgAltEnt,LKeyCtrlAltEnt,LKeyReset,LKeyTux,LKeyWin,LKeyMenu,% LKeyStrg,LKeyCtrl,LKeyAlt,LKeyAltGr,LKeyShift,LKeyTab,LKeyEnter,% LKeyCapsLock,LKeyPos,LKeyEntf,LKeyEinf,LKeyLeer,LKeyEsc,LKeyEnde,% LKeyCommand,LKeyOptionKey,LKeyBack,LKeyUp,LKeyDown,LKeyLeft,% LKeyRight,LKeyPgUp,LKeyPgDown,LKeyAt,LKeyFn,LKeyHome,LKeyDel,% LKeySpace,LKeyScreenUp,LKeyScreenDown,LKeyIns,LKeyEnd,LKeyGNU,% LKeyPageUp,LKeyPageDown,LMouseEmpty,LMouseN,LMouseL,LMouseM,% LMouseR,LMouseLR,LMouseIIEmpty,LMouseIIN,LMouseIIL,LMouseIIR,% LMouseIILR,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% sfdefault,type1,nofontspec,lining,nf,lf,oldstyle,osf,sflining,% sflf,sfoldstyle,sfosf,osfss,tabular,t,p,sftabular,sft,% sfproportional,sfp,scaled,scale,defaultfeatures,space,uni0020,% exclam,uni0021,quotedbl,uni0022,numbersign,uni0023,dollar,% uni0024,percent,uni0025,ampersand,uni0026,quotesingle,uni0027,% parenleft,uni0028,parenright,uni0029,asterisk,uni002A,plus,% uni002B,comma,uni002C,hyphen,uni002D,period,uni002E,slash,% uni002F,zero,uni0030,one,uni0031,two,uni0032,three,uni0033,% four,uni0034,five,uni0035,six,uni0036,seven,uni0037,eight,% uni0038,nine,uni0039,colon,uni003A,semicolon,uni003B,less,% uni003C,equal,uni003D,greater,uni003E,question,uni003F,at,% bracketleft,uni005B,backslash,uni005C,bracketright,uni005D,% asciicircum,uni005E,underscore,uni005F,grave,uni0060,uni007A,% braceleft,uni007B,bar,uni007C,braceright,uni007D,asciitilde,% uni007E,exclamdown,uni00A1,cent,uni00A2,sterling,uni00A3,% currency,uni00A4,yen,uni00A5,brokenbar,uni00A6,section,uni00A7,% dieresis,uni00A8,guillemotleft,uni00AB,uni00AD,degree,uni00B0,% plusminus,uni00B1,acute,uni00B4,uni00B5,periodcentered,uni00B7,% cedilla,uni00B8,guillemotright,uni00BB,Agrave,uni00C0,Aacute,% uni00C1,Acircumflex,uni00C2,Atilde,uni00C3,Adieresis,uni00C4,% Aring,uni00C5,Ccedilla,uni00C7,Egrave,uni00C8,Eacute,uni00C9,% Ecircumflex,uni00CA,Edieresis,uni00CB,Igrave,uni00CC,Iacute,% uni00CD,Icircumflex,uni00CE,Idieresis,uni00CF,Eth,uni00D0,Ntilde,% uni00D1,Ograve,uni00D2,Oacute,uni00D3,Ocircumflex,uni00D4,Otilde,% uni00D5,Odieresis,uni00D6,multiply,uni00D7,Oslash,uni00D8,Ugrave,% uni00D9,Uacute,uni00DA,Ucircumflex,uni00DB,Udieresis,uni00DC,% Yacute,uni00DD,Thorn,uni00DE,germandbls,uni00DF,agrave,uni00E0,% aacute,uni00E1,acircumflex,uni00E2,atilde,uni00E3,adieresis,% uni00E4,aring,uni00E5,ae,uni00E6,ccedilla,uni00E7,egrave,% uni00E8,eacute,uni00E9,ecircumflex,uni00EA,edieresis,uni00EB,% igrave,uni00EC,iacute,uni00ED,icircumflex,uni00EE,idieresis,% uni00EF,eth,uni00F0,ntilde,uni00F1,ograve,uni00F2,oacute,% uni00F3,ocircumflex,uni00F4,otilde,uni00F5,odieresis,uni00F6,% divide,uni00F7,oslash,uni00F8,ugrave,uni00F9,uacute,uni00FA,% ucircumflex,uni00FB,udieresis,uni00FC,yacute,uni00FD,thorn,% uni00FE,ydieresis,uni00FF,Amacron,uni0100,amacron,uni0101,Abreve,% uni0102,abreve,uni0103,Aogonek,uni0104,aogonek,uni0105,Cacute,% uni0106,cacute,uni0107,Ccircumflex,uni0108,ccircumflex,uni0109,% Cdotaccent,uni010A,cdotaccent,uni010B,Ccaron,uni010C,ccaron,% uni010D,Dcaron,uni010E,dcaron,uni010F,Dcroat,uni0110,dcroat,% uni0111,Emacron,uni0112,emacron,uni0113,Ebreve,uni0114,ebreve,% uni0115,Edotaccent,uni0116,edotaccent,uni0117,Eogonek,uni0118,% eogonek,uni0119,Ecaron,uni011A,ecaron,uni011B,Gcircumflex,% uni011C,gcircumflex,uni011D,Gbreve,uni011E,gbreve,uni011F,% Gdotaccent,uni0120,gdotaccent,uni0121,Gcommaaccent,uni0122,% gcommaaccent,uni0123,Hcircumflex,uni0124,hcircumflex,uni0125,Hbar,% uni0126,hbar,uni0127,Itilde,uni0128,itilde,uni0129,Imacron,% uni012A,imacron,uni012B,Ibreve,uni012C,ibreve,uni012D,Iogonek,% uni012E,iogonek,uni012F,Idotaccent,uni0130,dotlessi,uni0131,IJ,% uni0132,ij,uni0133,Jcircumflex,uni0134,jcircumflex,uni0135,% Kcommaaccent,uni0136,kcommaaccent,uni0137,kgreenlandic,uni0138,% Lacute,uni0139,lacute,uni013A,Lcommaaccent,uni013B,lcommaaccent,% uni013C,Lcaron,uni013D,lcaron,uni013E,Ldot,uni013F,ldot,uni0140,% Lslash,uni0141,lslash,uni0142,Nacute,uni0143,nacute,uni0144,% Ncommaaccent,uni0145,ncommaaccent,uni0146,Ncaron,uni0147,ncaron,% uni0148,napostrophe,uni0149,Omacron,uni014C,omacron,uni014D,% Obreve,uni014E,obreve,uni014F,Ohungarumlaut,uni0150,ohungarumlaut,% uni0151,Racute,uni0154,racute,uni0155,Rcommaaccent,uni0156,% rcommaaccent,uni0157,Rcaron,uni0158,rcaron,uni0159,Sacute,% uni015A,sacute,uni015B,Scircumflex,uni015C,scircumflex,uni015D,% Scedilla,uni015E,scedilla,uni015F,Scaron,uni0160,scaron,uni0161,% Tcedilla,uni0162,tcedilla,uni0163,Tcaron,uni0164,tcaron,uni0165,% Tbar,uni0166,tbar,uni0167,Utilde,uni0168,utilde,uni0169,Umacron,% uni016A,umacron,uni016B,Ubreve,uni016C,ubreve,uni016D,Uring,% uni016E,uring,uni016F,Uhungarumlaut,uni0170,uhungarumlaut,uni0171,% Uogonek,uni0172,uogonek,uni0173,Wcircumflex,uni0174,wcircumflex,% uni0175,Ycircumflex,uni0176,ycircumflex,uni0177,Ydieresis,uni0178,% Zacute,uni0179,zacute,uni017A,Zdotaccent,uni017B,zdotaccent,% uni017C,Zcaron,uni017D,zcaron,uni017E,h.superior,uni02B0,% hhook.superior,uni02B1,j.superior,uni02B2,r.superior,uni02B3,% rturned.superior,uni02B4,rhookturned.superior,uni02B5,% Rsmallinverted.superior,uni02B6,w.superior,uni02B7,y.superior,% uni02B8,uni02B9,uni02BA,uni02BB,afii57929,uni02BC,afii64937,% uni02BD,uni02BE,uni02BF,uni02C0,uni02C1,uni02C2,uni02C3,uni02C4,% uni02C5,circumflex,uni02C6,caron,uni02C7,uni02C8,uni02C9,uni02CA,% uni02CB,uni02CC,uni02CD,uni02CE,uni02CF,uni02D0,uni02D1,uni02D2,% uni02D3,uni02D4,uni02D5,uni02D6,uni02D7,breve,uni02D8,dotaccent,% uni02D9,ring,uni02DA,ogonek,uni02DB,tilde,uni02DC,hungarumlaut,% uni02DD,uni02DE,uni02DF,gammalatin.superior,uni02E0,l.superior,% uni02E1,s.superior,uni02E2,x.superior,uni02E3,% glottalstopreversed.superior,uni02E4,uni02EC,uni02ED,uni02EE,% gravecomb,uni0300,acutecomb,uni0301,uni0302,tildecomb,uni0303,% uni0304,uni0305,uni0306,uni0307,uni0308,hookabovecomb,uni0309,% uni030A,uni030B,uni030C,uni030D,uni030E,uni030F,uni0310,uni0311,% uni0312,uni0313,uni0314,uni0315,uni0316,uni0317,uni0318,uni0319,% uni031A,uni031B,uni031C,uni031D,uni031E,uni031F,uni0320,uni0321,% uni0322,dotbelowcomb,uni0323,uni0324,uni0325,uni0326,uni0327,% uni0328,uni0329,uni032A,uni032B,uni032C,uni032D,uni032E,uni032F,% uni0330,uni0331,uni0338,uni0342,uni0343,uni0351,uni0357,uni0358,% uni0359,uni035A,uni035B,uni035C,uni035D,uni035E,uni035F,uni0360,% uni0361,uni0362,uni0363,uni0374,uni0375,afii57799,uni05B0,% afii57801,uni05B1,afii57800,uni05B2,afii57802,uni05B3,afii57793,% uni05B4,afii57794,uni05B5,afii57795,uni05B6,afii57798,uni05B7,% afii57797,uni05B8,afii57806,uni05B9,uni05BA,afii57796,uni05BB,% afii57807,uni05BC,afii57839,uni05BD,afii57645,uni05BE,afii57841,% uni05BF,afii57842,uni05C0,afii57804,uni05C1,afii57803,uni05C2,% afii57658,uni05C3,uni05C6,afii57664,uni05D0,afii57665,uni05D1,% afii57666,uni05D2,afii57667,uni05D3,afii57668,uni05D4,afii57669,% uni05D5,afii57670,uni05D6,afii57671,uni05D7,afii57672,uni05D8,% afii57673,uni05D9,afii57674,uni05DA,afii57675,uni05DB,afii57676,% uni05DC,afii57677,uni05DD,afii57678,uni05DE,afii57679,uni05DF,% afii57680,uni05E0,afii57681,uni05E1,afii57682,uni05E2,afii57683,% uni05E3,afii57684,uni05E4,afii57685,uni05E5,afii57686,uni05E6,% afii57687,uni05E7,afii57688,uni05E8,afii57689,uni05E9,afii57690,% uni05EA,afii57716,uni05F0,afii57717,uni05F1,afii57718,uni05F2,% arrowleft,uni2190,arrowup,uni2191,arrowright,uni2192,arrowdown,% uni2193,arrowboth,uni2194,arrowupdn,uni2195,uni2196,uni2197,% uni2198,uni2199,uni219A,uni219B,uni21A5,uni21A7,uni21BC,uni21BD,% uni21C0,uni21C1,arrowdblleft,uni21D0,arrowdblup,uni21D1,% arrowdblright,uni21D2,arrowdbldown,uni21D3,arrowdblboth,uni21D4,% uni21D5,Nwarrow,uni21D6,Nearrow,uni21D7,Searrow,uni21D8,Swarrow,% uni21D9,uni2318,uni2325,uni2326,uni2327,uni232B,uni237D,uni2380,% uni2423,filledbox,uni25A0,H22073,uni25A1,triagup,uni25B2,uni25B3,% uni25B6,uni25B7,triagdn,uni25BC,uni25BD,uni25C0,uni25C1,uni25C6,% uni25C7,uni25C9,lozenge,uni25CA,circle,uni25CB,uni25CE,H18533,% uni25CF,uni25D0,uni25D1,uni25D2,uni25D3,uni25D4,uni25D5,uni25D6,% uni25D7,openbullet,uni25E6,uni2605,uni2619,uni261B,uni261E,% uni2627,uni262F,uni2639,uni263A,uni263B,uni263C,uni263D,uni263E,% uni263F,female,uni2640,uni2641,male,uni2642,uni2643,uni2644,% uni2645,uni2646,uni2647,uni2648,uni2649,uni264A,uni264B,uni264C,% uni264D,uni264E,uni264F,uni2650,uni2651,uni2652,uni2653,uni2660,% uni2663,uni2665,uni2666,uni2669,musicalnote,uni266A,% musicalnotedbl,uni266B,uni266C,uni2695,uni2698,uni26A2,uni26A3,% uni26A4,uni26A5,uni26AD,uni2767,uni2776,uni2777,uni2778,uni2779,% uni277A,uni277B,uni277C,uni277D,uni277E,uni277F,T_u_x,uniE000,% uniE104,uniE128,uniE129,uniE12A,uniE130,uniE131,uniE132,uniE133,% uniE134,uniE135,uniE138,uniE139,uniE13A,uniE13C,uniE13D,uniE168,% B_a_c_k,uniE16E,S_t_r_g,uniE170,A_l_t,uniE171,A_l_t_G_r,uniE172,% C_t_r_l,uniE173,S_h_i_f_t,uniE174,T_a_b,uniE175,E_n_t_e_r,% uniE176,C_a_p_s_l_o_c_k,uniE177,F_1,uniE178,F_2,uniE179,F_3,% uniE17A,F_4,uniE17B,F_5,uniE17C,F_6,uniE17D,F_7,uniE17E,F_8,% uniE17F,F_9,uniE180,F_1_0,uniE181,F_1_1,uniE182,F_1_2,uniE183,% F_1_3,uniE184,F_1_4,uniE185,F_1_5,uniE186,F_1_6,uniE187,uniE188,% H_o_m_e,uniE189,D_e_l,uniE18A,I_n_s,uniE18B,uniE18C,E_n_d,% uniE18E,G_N_U,uniE190,P_o_s_1,uniE191,E_n_t_f,uniE192,E_i_n_f,% uniE193,L_e_e_r,uniE194,E_s_c,uniE195,E_n_d_e,uniE196,uniE198,% uniE199,uniE19A,uniE19B,uniE1A0,uniE1A1,uniE1A2,uniE1A3,uniE1A4,% uniE1A5,uniE1A6,uniE1A7,uniE1A8,uniE1A9,uniE1AA,uniE1AB,uniE1AC,% uniE1AD,uniE1AE,uniE1B0,uniE1B1,grave.cap,uniE358,acute.cap,% uniE359,circumflex.cap,uniE35A,caron.cap,uniE35B,breve.cap,% uniE35C,hungarumlaut.cap,uniE35D,space_uni030F.cap,uniE35E,% breveinvertedcmb.cap,uniE35F,breve.cyrcap,uniE360,breve.cyr,% uniE361,dieresis.cap,uniE362,hookabovecomb.cap,uniE363,uniFFFD,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% biolinum },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[biblatex]{TeX}{% % Control sequences names moretexcs={% cite,Cite,parencite,Parencite,footcite,footcitetext,smartcite,% Smartcite,textcite,Textcite,supercite,cites,Cites,parencites,% Parencites,footcitesfootcitetexts,textcites,Textcites,supercites,% autocite,Autocite,autocite*,Autocite*,autocites,Autocites,% citeauthor,Citeauthor,citetitle,citetitle*,citeyear,citeurl,% parentext,brackettext,nocite,fullcite,footfullcite,volcite,% Volcite,pvolcite,Pvolcite,fvolcite,ftvolcite,tvolcite,Tvolcite,% avolcite,Avolcite,notecite,Notecite,pnotecite,Pnotecite,fnotecite,% citename,citelist,citefield,printbibliography,bibliography,% citedate,ExecuteBibliographyOptions,defbibnote,psq,psqq,% addbibresource,AtNextCite,DeclareNameAlias,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% abstract,addendum,afterword,annotation,annotator,author,% authortype,bookauthor,bookpagination,booksubtitle,booktitle,% booktitleaddon,chapter,commentator,date,doi,edition,editor,% editora,editorb,editorc,editortype,editoratype,editorbtype,% editorctype,eid,eprint,eprintclass,eprinttype,eventdate,% eventtitle,file,foreword,holder,howpublished,indextitle,% institution,introduction,isan,isbn,ismn,isrn,issn,issue,% issuesubtitle,issuetitle,iswc,journalsubtitle,journaltitle,label,% language,library,location,mainsubtitle,maintitle,maintitleaddon,% month,nameaddon,note,number,organization,origdate,origlanguage,% origlocation,origpublisher,origtitle,pages,pagetotal,pagination,% part,publisher,pubstate,reprinttitle,series,shortauthor,% shorteditor,shorthand,shorthandintro,shortjournal,shortseries,% shorttitle,subtitle,title,titleaddon,translator,type,url,urldate,% venue,version,volume,volumes,year,crossref,entryset,entrysubtype,% execute,gender,hyphenation,indexsorttitle,keywords,options,% presort,sortkey,sortname,sorttitle,sortyear,xref,annote,% archiveprefix,journal,key,pdf,primaryclass,school,address,% datamodel,% % backend,style,citestyle,bibstyle,sorting,maxnames,minnames,% maxitems,minitems,backref,abbreviate,firstinits,prenote,postnote,% useprefix,autopunct,giveninits,labelname,given-family,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% submitted,inpress,danish dutch,american,USenglish,english,british,% UKenglish,canadian,australian,newzealand,finnish,french,francais,% canadien,german,ngerman,austrian,naustrian,greek,italian,norsk,% nynorsk,brazil,portuges,spanish,swedish,% % biber,numeric,numeric-comp,numeric-verb,alphabetic,alphabetic-verb,% authoryear,authoryear-comp,authoryear-ibid,authoryear-icomp,% authortitle,authortitle-comp,authortitle-ibid,authortitle-icomp,% authortitle-terse,authortitle-tcomp,authortitle-ticomp,verbose,% verbose-ibid,verbose-note,verbose-inote,verbose-trad1,verbose-trad2,% verbose-trad3,reading,draft,debug,and,inline,footnote,% superscript,plain,nyt,ynt,none,false,true,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% biblatex },% % directives directives={% article,book,inbook,bookinbook,suppbook,booklet,collection,% conference,incollection,suppcollection,manual,misc,online,patent,% periodical,suppperiodical,proceedings,inproceedings,reference,% inreference,report,thesis,unpublished,masterthesis,phdthesis,% string,comment,% },% % otherkeywords={},% alsoletter={-},% % alsodigit={},% delim=*[directive]@,sensitive=false,% }[keywords,directives,tex,comments]% \lst@definelanguage[lthooks]{TeX}{% % Control sequences names moretexcs={% AddToHook,BeforeBeginEnvironment,AtBeginEnvironment,AtEndEnvironment,% AfterEndEnvironment,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% % begin,end, before,after,begindocument,begindocument/before,% begindocument/end,enddocument,enddocument/afterlastpage,% enddocument/afteraux,enddocument/info,enddocument/end,env,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% lthooks },% % otherkeywords={},% alsoletter={/},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[l3keys2e]{TeX}{% % Control sequences names moretexcs={% ProcessKeysOptions,ProcessKeysPackageOptions,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% l3keys2e },% % otherkeywords={},% alsoletter={23},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[varioref]{TeX}{% % Control sequences names moretexcs={% vref,vpageref,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% varioref },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[hologo]{TeX}{% % Control sequences names moretexcs={% hologo },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=va ,lue) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% hologo% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[acro]{TeX}{% % Control sequences names moretexcs={% Ac,Aca,Acap,Acf,Acfp,Acl,Aclp,Acp,AcroAcronymsMap,AcroAddRow,% AcroMapBreak,AcroNeedPackage,AcroPropertiesMap,AcroPropertiesSet,% AcroRerun,AcroStyle,AcroTemplateName,AcroTemplateType,AcronymID,% AcronymTable,Acs,Acsp,BeginAccSupp,Dacs,DeclareAcroArticle,% DeclareAcroEnding,DeclareAcroPreset,DeclareAcroProperty,% DeclareAcroPropertyAlias,DeclareAcroTranslation,DeclareAcronym,Iac,% Iaca,Iacf,Iacl,Iacs,MakeAcroPropertyAlias,NewAcroCommand,% NewAcroPreset,NewAcroTemplate,RenewAcroCommand,RenewAcroPreset,% RenewAcroTemplate,SetupAcroTemplate,SetupNextAcroTemplate,% UseAcroTemplate,abbrdot,ac,aca,acap,acbarrier,acdot,acf,acfg,% acflike,acfootnote,acfp,acg,aciftrailing,acl,aclg,aclp,acp,% acreset,acresetall,acrocite,acrodefinite,acrodonotuse,acrodotfill,% acroendfootnote,acroformat,acrofull,acrogroupcite,acroheading,% acroifT,acroifTF,acroifallTF,acroifanyT,acroifanyTF,% acroifbooleanTF,acroifchapterF add,acroifchapterTF,acroiffirstT,% acroiffirstTF addchap,acroifpagesTF,acroifsingleTF,acroifstarredTF,% acroiftagTF,acroifusedTF,acroindefinite,acrolistname,acroneedpages,% acronopagerange,acronymsmap,acronymsmapF,acronymsmapTF,acropagefill,% acropages,acroplural,acropossessive,acropreamble,acroshow,% acrotranslate,acroupper,acrowrite,acs,acsetup,acsp,acspace,% acswitchoff,acswitchon,acuse,dacs,declareAcronym,iac,iaca,iacf,% iacl,iacs,iacsg,printacronyms,% % acro_locale,acro_if_foreign,acro_if_locale,__acro_foreign_language,% acro_property_get,acro_property_if_set,acro_property_get,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% activate,addsec,addsec*,all,alt,alt,alt-acc,alt-format,% alt-indefinite,alt-plural,alt-plural-form,barriers,before-citation,% caption,% case-insensitive,%case-sensitive,%chapter,chapter*,cite,clear,cmd,% deactivate,define,description,disable,display,exclude,extra,% extra-acc,extra-foreign,extra-format,extra-long,fill,first,% first-long,first-long-format,first-style,first-style ,floats,% footnote,foreign,foreign,foreign-acc,foreign-babel,foreign-format ,% foreign-locale,foreign-plural,foreign-plural-form,format,format,% group,heading,id,include,index,index,index-cmd,index-sort,% language,link-only-first,list,list,list-acc,list-format,% list/display,lists,load-style,local,locale,lof,long,long,% long-acc,long-format,long-indefinite,long-plural,long-plural-ending,% long-plural-form,long-post,long-short,longtable,longtabu,lppl,% ltxtable,make-links,maketitle,method,name,no-index,none,options,% pages,pdf,pdf,pdfcomment,pdfcomment/cmd,pdfcomment/use,pdfstring,% post,pre,preamble,preset,replace,reset,section,section*,short,% short,short,short-acc,short-format,short-indefinite,short-long,% short-plural,short-plural-ending,short-plural-form ,show,single,% single,single,single-acc threshold,single-format title,single-style,% single-style,sort,sort,subsequent-style,subsequent-style,% supertabular,tabular,tabularx,tag,upgrade,use,use-id-as-short,% uselist,version,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% acro% },% % otherkeywords={},% alsoletter={-_},% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% \lst@definelanguage[csquotes]{TeX}{% % Control sequences names moretexcs={% enquote,% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% },% % Keywords of class 2 : environments names morekeywords=[2]{% displayquote,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% csquotes% },% % otherkeywords={}, % alsoletter={}, % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tcolorbox %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[tcolorbox]{TeX}% {% % Control sequences names moretexcs={% tcbuselibrary,newtcbtheorem,tcbset% },% % Keywords of class 1 : keywords that contain other characters (since % of the same class as the ones specified as 'otherkeywords') morekeywords={% % },% % Keywords of class 2 : environments names morekeywords=[2]{% absquote,boxarraystore,dispExample,dispExample*,dispListing,% dispListing*,docCommand,docCommand*,docCommands,docEnvironment,% docEnvironment*,docEnvironments,docKey,docKey*,docKeys,% docPathOperation,docPathOperation*,docPathOperations,extcolorbox,% extikzpicture,fooauxenv,foocolorbox,foocolorbox*,posterboxenv,% tcbclipframe,tcbclipinterior,tcbcliptitle,tcbexternal,% tcbinvclipframe,tcbitemize,tcblisting,tcboutputlisting,% tcboxeditemize,tcboxedraster,tcbposter,tcbraster,tcbverbatimwrite,% tcbwritetemp,tcolorbox,% },% % Keywords of class 3 : mandatory arguments (not environments) & % optional arguments which are keys (in key=value) morekeywords=[3]{% Crefname,IfBooleanF,IfBooleanT,IfBooleanTF,IfNoValueF,IfNoValueT,% IfNoValueTF,IfValueF,IfValueT,IfValueTF,PassOptionsToClass,% PassOptionsToPackage,above*,above,actual,adapt,add,adjust,% adjusted,after,alert,alerted,algorithm,align*,align,all,ams,% and,angular,annotate,app,arara,arc,array,as,at,attach,auto,% autoparskip,balanced,base,basedim,baseline,beamer,bean,before,% beforeafter,% begin, below,between,biber,bibtex,bicolor,blank,% blanker,blankest,blend,body,bold,bookmark*,bookmark,borderline,% both,bottom*,bottom,bottomrule,bottomsep,bottomtitle,bounding,% box,boxed,boxes,boxrule,boxsep,break*,break,breakable,broken,% by,caption,capture,center,check,circular,clear,clip,code,% colback,colbacklower,colbacktitle,colframe,collower,colon,color,% colorize,colors,colspacing,coltext,coltitle,column*,column,% columns,colupper,command,comment,compilable,compiler,compress,% content,corner,corners,counter*,counter,counters,coverage,% crefname,current,curved,dash,default,definition,delimiters,% description,detach,directory,do,doc,docexample,documentation,% downwards,draft,draftmode,draw,drop,dvips,east,empty,% end, % enforce,engine,english,enhanced,enlarge,enlargement,enlargepage,% entry,environment,environments,equal,equation*,equation,error,% even,every,example!,example,extend,extension,external,% externalize,extras,extrude,fade,fading,file,fill,filled,finally,% finish,first,fit,fitting,fixed,flexible,flip,float*,float,% floatplacement,flush,flushleft,flushright,font,fontlower,fontsize,% fonttitle,fontupper,for,force,format,formatter,frame,freelance,% freelancefirst,freelancelast,freelancemiddle,freestyle,freeze,from,% full,fuzzy,gap,gather*,gather,geometry,german,goal,graphical,% graphics,group,grow,halign,halo,hanging,hbox,head,height,% hidden,hide,higher,highlight,hooks,horizontal,hyperlink,hyperref,% hypertarget,hyperurl*,hyperurl,hyphenationfix,if,ignore,image,in,% indent,index*,index,inherit,initially,input,inputencoding,inside,% interior,into,invisible,inwards,is,jigsaw,jpg,key,keypath,keys,% keywords,label,language,large,last,latex,layer,layers,left*,% left,lefthand,leftlower,leftright,leftrule,lefttitle,leftupper,% length,lengths,level,lifted,limit,line*,line,lines,list,% listing!,listing,listings,listingsutf,lower*,lower,lowerbox,% lowered,lualatex,m,macros,magazine,makeindex,many,marginnote,% marker,math,maxfontdiff,maxfontdiffgap,maxstep,maxwidthdiff,% maxwidthdiffgap,method,midday,middle,minimum,minipage,minted,% most,move,multicolumn,multirow,n,name,nameref,natural,new,% nirvana,no,nobeforeafter,nobreak,node,nodes,nodisplayskip,% nofloat,none,noparskip,nophantom,north,northeast,northwest,not,% notitle,number,octogon,odd,of,offset,on,oneside*,oneside,only,% opacity,opacityback,opacitybacklower,opacitybacktitle,opacityfill,% opacityframe,opacitylower,opacitytext,opacitytitle,opacityupper,% option,options,or,orientation,out,outer,outside,outwards,over,% overlay,overlays,oversize,overzoom,pad,page*,page,pages,% pageshort,parameter,parbox,parenthesis,parfillskip,parskip,path,% paths,pdf,pdflatex,percent,phantom,phantomlabel,placeholder,% plain,plus,png,poster,pre,preamble,preclass,prefix,process,% pspdf,quote,raise,raised,raster,ratio,record,recording,remake,% remember,remove,reset,restore,right*,right,righthand,rightlower,% rightrule,righttitle,rightupper,rotate,rounded,row,rows,% rowspacing,rowspan,run,runner,runs,safety,savedelimiter,% savelowerto,saveto,scale,scope,segmentation,semi,separated,% separator,sequence,settings,shade,shading,shadow,sharp,sharpish,% shield,show,showframe,shrink,side,sidebyside,sidewards,sign,% size,skin,skins,skip,small,smart,sort,source,south,southeast,% southwest,space,spacing,span,spartan,split,spread,square,% squeezed,stack,standard,step,store,stretch,style,subskin,% subtitle,supplement,switch,system,tabulars*,tabulars,tabularx*,% tabularx,tcbimage,tcbox,preamble tcbset,tempfile,terminator,text,% theorem,theorems,tight,tikz,tikznode,tile,title*,title,titlebox,% titled,titlerule,to,toggle,top*,top,toprule,topsep,toptitle,% type,unbreakable,unbroken,underlay,updated,upper*,upper,upperbox,% upwards*,upwards,use,utf,valign,value,values,varwidth,verbatim,% vertical,vfill,vignette,visible,void,warning,watermark,west,% widget,width,with,within,xelatex,xmax,xmin,xparse,xshift,ymax,% ymin,yshift*,yshift,yshifttext,zoom,% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% all,and,apart,areasize*,areasize,as-is,auto,base,baselineskip,% beamer,beamerfirst,beamerlast,beamermiddle,bicolor,bicolorfirst,% bicolorlast,bicolormiddle,both,bottom,break,broken,center,change,% clipped,colon,copy,dash,direct,doc,downhill,draft,east,empty,% emptyfirst,emptylast,emptymiddle,enhanced,enhancedfirst,% enhancedlast,enhancedmiddle,evenpage,false,fbox,figures,final,% first,fitbox,flush,fontsize*,fontsize,forced,freelance,% freelancefirst,freelancelast,freelancemiddle,hang,hbox,hybrid*,% hybrid,ignored,invisible,jigsaw,justify,landscape*,landscape,% last,left,limited,listings,margin,maximum,middle,minimal,% minimum,minipage,minted,none,normal,north,northeast,northwest,% off,on,path,pathfirst,pathfirstjigsaw,pathjigsaw,pathlast,% pathlastjigsaw,pathmiddle,pathmiddlejigsaw,pgf,pgfchapter,% pgfsection,plain,portrait*,portrait,right,rows,scale*,scale,% seam,small,south,southeast,southwest,spartan,squeeze,standard,% tables,tight,tile,tilefirst,tilelast,tilemiddle,title,top,true,% unbroken,unlimited,uphill,visible,west,widget,widgetfirst,% widgetlast,widgetmiddle,red,black,white,none,% },% % Keywords of class 5 : arguments specifications (after ":" in expl3 % syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly derived % packages) morekeywords=[6]{% tcolorbox% },% % otherkeywords={},% alsoletter={ \ },% % alsodigit={},% % alsoother={},% sensitive,% }[keywords,tex,comments]% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Classes (La)TeX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \lst@definelanguage[classes]{TeX}{% % Control sequences moretexcs={% },% % Keywords of class 1 : keywords that contain other characters % (since of the same class as the ones specified as % 'otherkeywords') morekeywords={% % },% % Keywords of class 2 : environments names morekeywords=[2]{% },% % Keywords of class 3 : mandatory arguments (not environments) % & optional arguments which are keys (in key=value) morekeywords=[3]{% },% % Keywords of class 4 : values of keys (in key=value) morekeywords=[4]{% },% % Keywords of class 5 : arguments specifications (after “:” % in expl3 syntax) morekeywords=[5]{% },% % Keywords of class 6 : current package name (and possibly % derived packages) morekeywords=[6]{% a0poster,aalok,aastex631,abntex2,achemso,acmart,acmconf, active-conf,adfathesis,afparticle,afthesis,aguplus,aiaa-tc, akklecture,akkscript,akktecdoc,akletter,myletter,ametsoc, amsart,amsbook,amsdtx,amsldoc,amsproc,aomart,apa,apa6, apa6e,apa7,arabart,arabbook,arabrep,arabrep1,articleingud, asaetr,ascelike,asmeconf,asmejour,assignment,aucklandthesis, bangorcsthesis,bangorexam,barticle,bbook,bletter, bankstatement,article,book,letter,ltnews,ltxdoc,ltxguide, minimal,proc,report,slides,source2edoc,basque-book,beamer, beamerswitch,beaulivre,beilstein,argetabelle,bewerbung, bgteubner,BHCexam,bitart,bitbook,bjfuthesis,BMSTU-IU8, bookcover,bookest,bookshelf,br-lex,brandeis-dissertation, brandeis-problemset,brandeis-thesis,buctcover,buctthesis, bxjsarticle,bxjsbook,bxjsreport,bxjsslide,cascadilla,cd, cd-cover,articoletteracdp,letteracdp,cesenaexam,cheatsheet, chemmacros-manual,chletter,cje,cnbwp,cnltx-doc,codedoc, colorart,colorbook,combine,cc,ConcProg,confproc,contracard, courseoutline,coursepaper,cquthesis,csbulletin,csbulobalka, csbulv1,ctexart,ctexbeamer,ctexbook,ctexrep,ctxdoc,curve, cv4tw,cweb,idcc,ijdc-v14,ijdc-v9,dinbrief,disser,gost732, dithesis,droit-fr,dtk,dvdcoll,easybook,ebsthesis,agecon, ajae,apecon,ecca,erae,itaxpf,jrurstud,njf,oegatb,pocoec, regstud,worlddev,ecv,einfart,ejpecp,elbioimp,elegantbook, elegantnote,elegantpaper,elpres,cas-dc,cas-sc,elsarticle, elteikthesis,emisa,emulateapj,erdc,eskd,eskdgraph,eskdtab, eskdtext,estcpmm,europasscv,europecv,exam,exam-n,examdesign, exesheet,extarticle,extbook,extletter,extproc,extreport, facsimile,factura,fancyhandout,fancyslides,fbithesis,fcavtex, fdudoc,fduthesis-en,fduthesis,fei,ffslides,fithesis, fithesis2,fithesis3,fithesis4,flacards,flashcards,frletter, g-brief,g-brief2,gaceta,gammas,gatech-thesis,gmdocc, gradstudentresume,grant-afosr,grant-aro,grant-darpa,grant-doe, grant-nih,grant-nrl,grant-nsf,grant-onr,grant,graphpaper, gridslides,gsemthesis,guitartabs,gzt,gztarticle,h2020proposal, hgbarticle,hgbreport,hgbthesis,harnon-cv,hausarbeit-jura, hcart,hcletter,hcreport,hcslides,hecthese,hepthesis,hitec, hithesis,hitreport,hitszthesis,hletter,hpsdiss,fsbispit, huawei,hustthesis,icsv,IEEEconf,IEEEtran,ijmart,ijsra, image-gallery,IMTEKda,inkpaper,invoice-class,iodhbwm,iscram, isov2,isodoc,iwhdp,jacow,jlreq,jmlr,jmlrbook,jnuexam,jpsj2, jura,jurabook,juraovw,juraurtl,kdgcoursetext,kdgmasterthesis, kdpcover,kerntest,kluwer,knittingpattern,scrartcl,scrarticle, scrbook,scrdoc,scrletter,scrlttr2,scrreport,scrreprt,komacv, oblivoir-utf,oblivoir-xl,oblivoir,xoblivoir,ksp-thesis,l3doc, labbook,leadsheet,leaflet,lebhart,lectures,letgut,lettre,limap, limecv,lion-msc,lni,lps,lt3graph-packagedoc,ltxdockit, ltxguidex,abstbook,beletter,flashcard,iagproc,cours,fiche, matapli,matc3mem,mcmthesis,ltxmdf,medstarbeamer,meetingmins, memoir,mensa-tex,mentis,metanorma,milog,minimart,minimbook, mla,mluexercise,mnras,moderncv,modernposter,msu-thesis, mucproc,mugsthesis,muling,musuos,muthesis,third-rep,mwart, mwbk,mwrep,mycv,nature,ncc,nccproc,sibjnm,nddiss2e, ndsu-thesis,newlfm,nih,nihbiosketch,njurepo,nlctdoc,nostarch, nrc1,nrc2,artikel1,artikel2,artikel3,boek,boek3,brief, rapport1,rapport3,nwejm,nwejmart,octavo,onrannual, oup-authoring-template,journal,paper,papertex,pbsheet,pecha, petiteannonce,philosophersimprint,pittetd,pkuthss,plari,play, postcards,powerdot,FUpowerdot,ppr-prv,pracjourn,pressrelease, proposal,reporting,dfgproposal,dfgreporting,euproposal, eureporting,prosper,protocol,prtec,upmgr,wkmgr,pst-doc, ptptex,qcm,quantumarticle,qyxf-book,ReadableCV,recipe, RecipeBook,recipecard,refart,refrep,resphilosophica,revtex4-2, revtex4,revtex4-1,rtklage,ryersonSGSThesis,ryethesis,sageep, sapthesis,schuleab,schulein,schuleit,schulekl,schuleub, schuleue,schullsg,schullzk,schulma-ab,schulma-gutachten, schulma-klausur,schulma-komp,schulma-mdlprf,schulma-praes, schwalbe,sciposter,screenplay,scrjrnl,sdapsclassic,sduthesis, seminar,semproc,sesamanuel,seuthesix,sffms,cassete,etiketka, shtthesis,caesar_book,sides,simplecv,simplivre,skbarticle, skbbeamer,skbbook,skblncsbeamer,skblncsppt,skbmoderncv,skdoc, skeyval-testclass,skrapport,smfart,smfbook,SPhdThesis,spie, sr-vorl,sslides,stage,standalone,usthesis,hwexam,mikoslides, omdoc,smglom,subfiles,suftesi,sugconf,tabriz-thesis,talk, tcldoc,tclldoc,powersem,thesis-ekf,thesis-gwu,thuthesis, tikz-kalender,tikzposter,tlc-article,TOPletter,toptesi, tudabeamer,tudaexercise,tudaleaflet,tudaletter,tudaposter, tudapub,tudasciposter,tudscrartcl,tudscrbook,tudscrdoc, tudscrmanual,tudscrposter,tudscrreprt,tufte-book,tufte-handout, ltugboat,ltugproc,tui,turabian,turabian-researchpaper, turabian-thesis,my-thesis,ua-thesis,uafthesis, uantwerpenbamathesis,uantwerpencoursetext,uantwerpenexam, uantwerpenletter,uantwerpenphdthesis,uantwerpenreport, ucalgmthesis,ucbthesis,ucdavisthesis,ucsmonograph,ucthesis, udesoftec,uebungsblatt,uestcthesis,uhhassignment,uiucredborder, uiucthesis,ulthese,legislation,umich-thesis,umthesis, unam-thesis,unifith,unitn-bimrep,univie-ling-expose, univie-ling-paper,univie-ling-thesis,univie-ling-wlg, unizgklasa,uothesis,UoWthesis,upmethodology-document,URbeamer, URletter,uspatent,ut-thesis,utexasthesis,uwmslide,uwthesis, verifica,webquiz,willowtreebook,withargs-packagedoc, wsemclassic,xduthesis,xebaposter,xmuthesis,xsim-manual, yaletter,yathesis,ycbook,ydoc,york-thesis, },% % otherkeywords={},% alsoletter={0123456789-},% % alsodigit={},% sensitive% }[keywords,tex,comments]% #+end_src