[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
29/66: programming-2022: Adjust to <Programming> style.
From: |
Ludovic Courtès |
Subject: |
29/66: programming-2022: Adjust to <Programming> style. |
Date: |
Wed, 29 Jun 2022 11:32:00 -0400 (EDT) |
civodul pushed a commit to branch master
in repository maintenance.
commit 7183c5da6bfdde41771ffa5f7f9f998403d4b936
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Thu Jan 13 17:38:25 2022 +0100
programming-2022: Adjust to <Programming> style.
* doc/programming-2022/programming.cls: New file.
* doc/programming-2022/supply-chain.skb: Adjust.
---
doc/programming-2022/programming.cls | 949 ++++++++++++++++++++++++++++++++++
doc/programming-2022/supply-chain.skb | 69 +--
2 files changed, 966 insertions(+), 52 deletions(-)
diff --git a/doc/programming-2022/programming.cls
b/doc/programming-2022/programming.cls
new file mode 100644
index 0000000..3313ded
--- /dev/null
+++ b/doc/programming-2022/programming.cls
@@ -0,0 +1,949 @@
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\def\P@banner{The Art, Science, and Engineering of Programming}
+\ProvidesClass{programming}%
+ [2017/11/16 v1.3a ^^J Articles for \P@banner^^J]
+
+
+%%
+% `ifplatform` raises a confusing warning when an info would suffice.
+% We hack the warning out to not confuse users.
+% begin: hack
+\RequirePackage{infwarerr}
+\let\P@PWNL\PackageWarningNoLine\relax%
+\long\def\PackageWarningNoLine#1#2{%
+ \def\tempa{ifplatform}\def\tempb{#1}%
+ \ifx\tempa\tempb\@PackageInfoNoLine{#1}{#2}%
+ \else\@PackageWarningNoLine{#1}{#2}\fi}%
+\RequirePackage{hardwrap}
+\let\PackageWarningNoLine\P@PWNL\relax%
+% end: hack
+
+\GenerateLogMacros{class}[P]{programming}
+
+\RequirePackage{etoolbox}
+\RequirePackage{scrbase}[2014/10/28]
+\@ifpackagelater{scrbase}{2014/10/28}{}{%
+ \P@error{KOMA-Script too old}{Please upgrade to at least TeXLive 2015 or
similar, or upgrade your MiKTeX 2.9 packages.}}
+%%
+\RequirePackage{ifthen,ifpdf,ifluatex,ifxetex}
+\ifthenelse{\boolean{luatex}}%
+ {\IfFileExists{luatex85.sty}%
+ {\RequirePackage{luatex85}
+ \@ifpackagelater{luatex85}{2016/06/15}%
+ {}% creationdate-problem fixed
+ {{\outputmode=1 \xdef\pdfcreationdate{\pdffeedback creationdate}}}}
+ {}}%
+ {}
+
+%%%%
+%% DATA
+%%%%
+\newcommand*\P@@DOI@Prefix{10.22152/programming-journal.org/}
+\providecommand*\P@DOI{}
+\newcommand*\P@@DOI@Setup{%
+ \xdef\P@DOI{\P@@DOI@Prefix \P@Year/\P@Volume/\P@ArticleNumber}}
+
+
+
+%% OPTIONS
+% from scrkbase
+\DefineFamily{programming}
+\def\P@Family{\DefineFamilyMember{programming}}
+\P@Family%
+
+\newcommand*{\P@Key}[1][.\@currname.\@currext]{%
+ \DefineFamilyKey[#1]{programming}}
+\newcommand*{\P@ExecuteOptions}[1][.\@currname.\@currext]{%
+ \FamilyExecuteOptions[#1]{programming}}
+
+\newcommand*{\P@Options}{\FamilyOptions{programming}}
+\let\paperdetails\P@Options
+\newcommand*{\AfterP@Options}{}
+\let\AfterP@Options\AtEndOfFamilyOptions
+\newcommand*{\P@Option}{\FamilyOption{programming}}
+
+\newcommand*{\P@newif}{\P@Family\FamilyBoolKey{programming}}
+\newcommand*{\P@setif}{\FamilySetBool{programming}}
+\newcommand*{\P@newnum}{\P@Family\FamilyNumericalKey{programming}}
+\newcommand*{\P@setnum}{\FamilySetNumerical{programming}}
+
+\newcommand*{\P@newifStd}[1]{%
+ \newbool{P@#1}
+ \P@newif{#1}{P@#1}}
+
+\newcommand*{\P@curropt}{}
+\newcommand*{\P@StdOption}[3][]{%
+ \let\P@curropt\CurrentOption
+ \DeclareOption{#2}{
+ #1%
+ \P@ExecuteOptions{#3}}
+ \let\CurrentOption\P@curropt
+}
+
+\newbool{P@submission}
+\P@Key{phase}[final]{%
+ \ifstr{#1}{final}{\boolfalse{P@submission}}{}
+ \ifstr{#1}{submission}{\booltrue{P@submission}}{}
+ \FamilyKeyStateProcessed}
+\P@StdOption{submission}{phase=submission}
+\P@StdOption{crc}{phase=final}
+
+\providecommand*{\P@SubmissionKey}{}
+\def\P@SubmissionKey#1#2{\P@Key{#1}{%
+ \AfterP@Options{\ifthenelse{\boolean{P@submission}}%
+ {#2}{}}}}
+\providecommand*{\P@CRCKey}{}
+\def\P@CRCKey#1#2{\P@Key{#1}{%
+ \AfterP@Options{\ifthenelse{\boolean{P@submission}}%
+ {}{#2}}}}
+
+
+\providecommand*\P@codefont{sf}
+\P@Key{code}{
+ \P@setnum{code}{@tempa}{%
+ {sf}{0},{sans}{0},{sansserif}{0},%
+ {tt}{1},{mono}{1},{monospace}{1},%
+ {ttx}{2},{monoextended}{2},{monospaceexended}{2},%
+ }{#1}
+ \ifcase \@tempa\relax
+ \renewcommand*\P@codefont{sf}
+ \or \renewcommand*\P@codefont{tt}
+ \or \renewcommand*\P@codefont{ttx}
+ \fi
+ \FamilyKeyStateProcessed}
+
+
+\providecommand*\P@license{by}
+
+\newcommand*\P@set@license[1]{%
+ \renewcommand*\P@license{#1}
+ \if@atdocument
+ \setkeys{doclicense}{modifier=#1}
+ \else%
+ \PassOptionsToPackage{doclicense}{modifier=#1}%
+ \fi}
+
+\P@Key{license}{
+ \P@setnum{license}{@tempa}{%
+ {ccby}{0},{cc-by}{0},%
+ {ccbync}{1},{cc-by-nc}{1},%
+ }{#1}
+ \ifcase \@tempa\relax
+ \P@set@license{by}
+ \or
+ \P@set@license{by-nc}
+ \fi
+ \FamilyKeyStateProcessed}
+
+\P@StdOption{ccby}{license=ccby}
+\P@StdOption{ccbync}{license=ccbync}
+
+
+% for paperdetails
+
+\providecommand*\P@area{%
+ \P@warning@noline{No area specified}%
+ {\larger\textbf{No area specified. Please add a \texttt{area=..} option to
\string\paperdetails{...}.}}}
+\P@SubmissionKey{area}{\gdef\P@area{#1}\FamilyKeyStateProcessed}
+
+\providecommand*\P@perspective{%
+ \P@warning@noline{No perspective selected}%
+ {\larger\textbf{No perspective selected. Please add a
\texttt{perspective=...} option to \string\paperdetails{...}.}}}%
+\P@SubmissionKey{perspective}{
+ \P@setnum{perspective}{@tempa}{%
+ {art}{0},{theart}{0},%
+ {sciencetheoretical}{1},{theoreticalscience}{1},%
+ {theoretical}{1},{science-theoretical}{1},%
+ {theoretical-science}{1},%
+ {scienceempirical}{2},{empiricalscience}{2},%
+ {empirical}{2},{science-empirical}{2},%
+ {empirical-science}{2},%
+ {engineering}{3},%
+ }{#1}
+ \ifcase \@tempa\relax
+ \renewcommand*\P@perspective{The Art of Programming}
+ \or
+ \renewcommand*\P@perspective{The Theoretical Science of Programming}
+ \or
+ \renewcommand*\P@perspective{The Empirical Science of Programming}
+ \or
+ \renewcommand*\P@perspective{The Engineering of Programming}
+ \fi
+ \FamilyKeyStateProcessed}
+
+\P@StdOption{art}{perspective=art}
+\P@StdOption{theart}{perspective=theart}
+\P@StdOption{empirical}{perspective=empirical}
+\P@StdOption{science-empirical}{perspective=science-empirical}
+\P@StdOption{empirical-science}{perspective=empirical-science}
+\P@StdOption{theoretical}{perspective=theoretical}
+\P@StdOption{science-theoretical}{perspective=science-theoretical}
+\P@StdOption{theoretical-science}{perspective=theoretical-science}
+\P@StdOption{engineering}{perspective=engineering}
+
+\providecommand*\P@Year{}
+\providecommand*\P@Volume{}
+\providecommand*\P@Issue{}
+\providecommand*\P@ArticleNumber{}
+
+\newcommand*\P@DOI@BASE{https://doi.org/}
+
+\P@CRCKey{year}{\renewcommand*\P@Year{#1}\P@@DOI@Setup\FamilyKeyStateProcessed}
+\P@CRCKey{volume}{\renewcommand*\P@Volume{#1}\P@@DOI@Setup\FamilyKeyStateProcessed}
+\P@CRCKey{issue}{\renewcommand*\P@Issue{#1}\P@@DOI@Setup\FamilyKeyStateProcessed}
+\P@CRCKey{articlenumber}{\renewcommand*\P@ArticleNumber{#1}\P@@DOI@Setup\FamilyKeyStateProcessed}
+\P@CRCKey{submitted}{\DTMsavedate{P@date@submitted}{#1}\FamilyKeyStateProcessed}
+\P@CRCKey{published}{\DTMsavedate{P@date@published}{#1}\FamilyKeyStateProcessed}
+
+\P@ExecuteOptions{phase=final,code=sf}
+
+
+\FamilyProcessOptions{programming}\relax
+
+%%
+
+%% CLASS LOADING
+% \PassOptionsToPackage{latest}{latexrelease}
+\IfFileExists{latexrelease.sty}%
+ % % Hack. we want the latest, but it spits out a warning that should be an
info.
+ % {\bgroup\let\PackageWarningNoLine\@gobbletwo\relax
+ % \RequirePackage{latexrelease}\egroup}%
+ {\PreventPackageFromLoading*[%
+ \typeout{avoid fixltx2e if it does nothing in the first place}]%
+ {fixltx2e}}
+ {\RequirePackage{fixltx2e}}%
+
+% don't be too noisy.
+ \PassOptionsToPackage{log-declarations=false}{xparse}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Fixes for intermediate versions.
+% TL 2015
+\@ifpackagelater{scrbase}{2015/09/29}%
+ {}% newer, ok
+ {\def\set@pdftextpagesize{\set@pdftexpagesize}}
+
+% TL 2016
+\@ifpackagelater{scrbase}{2015/11/22}%
+ {\@ifpackagelater{scrbase}{2016/06/09}%
+ {}% new enough, ok.
+ {% There's a bug in tocbasic that got fixed post TL2016.
+ % see https://sourceforge.net/p/koma-script/code/2475/
+ % workaround by specifying tocdepths manually.
+ \@namedef{subsectiontocdepth}{2}%
+ \@namedef{subsubsectiontocdepth}{3}%
+ \@namedef{subparagraphtocdepth}{5}}}%
+ {}% old enough, ok
+
+\LoadClass{scrartcl}
+
+\KOMAoptions{
+ fontsize=11pt,
+ paper=a4,
+ pagesize=automedia,
+ DIV=9,
+ twoside=semi,
+ twocolumn=false,
+ titlepage=false,
+ footinclude=false,
+ headinclude=false,
+ headings=normal,
+ numbers=noenddot,
+}
+\KOMAoption{captions}{nooneline,tableheading}
+
+\newcommand*\P@settopbottommargins{%
+ \setlength{\topmargin}{-15pt}%
+ \setlength{\headsep}{20pt}%
+ \setlength{\headheight}{17pt}%
+ \setlength{\footheight}{\headheight}%
+ \setlength{\footskip}{49pt}%
+ \setlength{\marginparpush}{6pt}%
+ \setlength{\marginparwidth}{48pt}%
+}
+\AfterCalculatingTypearea{\P@settopbottommargins}
+\AfterSettingArea{\P@settopbottommargins}
+
+
+\AtEndPreamble{\areaset[current]{\textwidth}{1.61803399\textwidth}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{babel}
+
+\RequirePackage[LGR,OT1,LY1,T1]{fontenc}
+\ifthenelse{\boolean{xetex}\OR\boolean{luatex}}{}{%
+ %% \RequirePackage[utf8]{inputenx}
+ %% \input{ix-utf8enc.dfu}
+ \RequirePackage{alphabeta}}
+\RequirePackage{textcomp,textcase,relsize}
+
+%%% Clashes with mathdesign
+\PreventPackageFromLoading{amssymb,amsfont}
+%
+% Mathdesign spuriously redefines things it should not. {{{
+\csedef{P@MDback@fboxrule}{\the\fboxrule}
+\csedef{P@MDback@fboxsep}{\the\fboxsep}
+\csedef{P@MDback@arrayrulewidth}{\the\arrayrulewidth}
+\cslet{P@MDback@bfdefault}{\bfdefault}
+\cslet{P@MDback@footnoterule}{\footnoterule}
+\cslet{P@MDback@hrulefill}{\hrulefill}
+%
+\RequirePackage[charter,expert]{mathdesign}
+%
+\setlength{\fboxrule}{\csuse{P@MDback@fboxrule}}
+\setlength{\fboxsep}{\csuse{P@MDback@fboxsep}}
+\setlength{\arrayrulewidth}{\csuse{P@MDback@arrayrulewidth}}
+\letcs{\bfdefault}{P@MDback@bfdefault}
+\letcs{\footnoterule}{P@MDback@footnoterule}
+\letcs{\hrulefill}{P@MDback@hrulefill}
+% cleanup
+\csundef{P@MDback@fboxrule}
+\csundef{P@MDback@fboxsep}
+\csundef{P@MDback@arrayrulewidth}
+\csundef{P@MDback@bfdefault}
+\csundef{P@MDback@footnoterule}
+\csundef{P@MDback@hrulefill}
+% }}}
+\ifthenelse{\boolean{xetex}\OR\boolean{luatex}}%
+ {\@ifpackagelater{scrbase}{2015/11/22}%
+ {% >= TL 2016; not much is tuenc ready.
+ \PassOptionsToPackage{euenc}{fontspec}}
+ {}
+ \RequirePackage{fontspec}[2013/05/20]
+ \ifthenelse{\boolean{xetex}}%
+
{\setmainfont[Numbers=OldStyle,SmallCapsFeatures={Letters=SmallCaps,LetterSpace=5}]{XCharter}\relax}%
+ {\setmainfont[Numbers=OldStyle]{XCharter}\relax}
+ \def\P@fontscale{MatchLowercase}}%
+ {\RequirePackage[osfI,sups]{XCharter}
+ \def\P@fontscale{.92}}
+\RequirePackage[scaled=\P@fontscale,semibold]{FiraSans}
+\ifdefstring{\P@codefont}{sf}%
+ {\global\let\ttfamily\sffamily}
+ {\ifdefstring{\P@codefont}{tt}%
+ {\RequirePackage[scaled=\P@fontscale,lining,nomap]{FiraMono}}
+ {}}
+\linespread{1.05}
+
+\defcaptionname{english}{\figureautorefname}{figure}
+\defcaptionname{english}{\tableautorefname}{table}
+\defcaptionname{english}{\lstlistingautorefname}{listing}
+\defcaptionname{english}{\lstnumberautorefname}{line}
+\defcaptionname{english}{\subsectionautorefname}{\sectionautorefname}
+\defcaptionname{english}{\subsubsectionautorefname}{\sectionautorefname}
+\defcaptionname{english}{\appendixautorefname}{appendix}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\ifthenelse{\boolean{luatex}}%
+ {\RequirePackage[final]{microtype}[2013/05/23]}%
+ {\RequirePackage[final,babel=true]{microtype}[2013/05/23]}
+\ifthenelse{\boolean{xetex}}%
+ {\let\textls\undefined
+ \DeclareRobustCommand{\textls}[2][80]{%
+ {{\addfontfeature{LetterSpace=\the\numexpr#1/10\relax}#2}}}}%
+ {}
+
+\ifthenelse{\boolean{xetex}}%
+ {}% see above
+ {\microtypesetup{letterspace=50}
+ \ifthenelse{\boolean{luatex}}{}{\microtypesetup{tracking}}
+ \DisableLigatures{encoding = *, family = tt* }}
+
+\newcommand*\P@CodeSetup{%
+ \ifthenelse{\boolean{xetex}\or\boolean{luatex}}%
+ {\addfontfeatures{Ligatures={NoCommon}}%
+ \ifthenelse{\boolean{luatex}}%
+ {\addfontfeatures{RawFeature={-tlig,-trep}}}%
+ {\addfontfeatures{Mapping=}}}%
+ {}}
+
+\AtBeginEnvironment{verbatim}{\microtypesetup{activate=false}\P@CodeSetup}
+
+
+\AfterPackage{url}{
+ \urlstyle{sf}
+ % path is tt-only and actually, urls are better.
+ \DeclareUrlCommand\path{}% fool emacs: }
+}
+
+\PassOptionsToPackage{log-declarations=false}{xparse}
+\PassOptionsToPackage{hyphens}{url}
+\PassOptionsToPackage{all}{hypcap}
+\PassOptionsToPackage{%
+ final,%
+ unicode=true,%
+ plainpages=false,%
+ pdfpagelabels=true,%
+ breaklinks=true,
+ pdfborder={0 0 0},
+ bookmarksnumbered = true,
+ pdfpagemode = UseOutlines,
+}{hyperref}
+\AtEndPreamble{%
+ \RequirePackage{hyperref}%
+ \RequirePackage{hyperxmp}
+ \RequirePackage{hypcap}
+ \RequirePackage{accsupp}
+}
+
+\RequirePackage[table,svgnames,dvipsnames,x11names]{xcolor}
+\definecolor{P@Blue}{named}{RoyalBlue}
+\definecolor{P@ColorOnBlue}{gray}{.95}
+\definecolor{P@GrayFG}{named}{darkgray}
+\definecolor{P@GrayBG}{gray}{.90}
+
+\newlength{\doclicenseimagewidth}
+\setlength{\doclicenseimagewidth}{2.7cm}
+\RequirePackage[
+ type={CC},
+ modifier=\P@license,
+ version={4.0},
+ imagewidth=\doclicenseimagewidth,
+]{doclicense}
+
+% Fixes for intermediate versions.
+% TL 2015
+% this is actually an installation bug for TL 2015,
+% but we cannot reliably test that, so we resort to the check
+% if the package is new enough for TL 2016.
+\@ifpackagelater{doclicense}{2016/04/24}%
+ {\let\P@doclicenseImage\doclicenseImage}% we're good.
+ {\def\P@doclicenseImage{%
+ \makebox[\doclicenseimagewidth]{%
+ \setlength{\fboxsep}{5pt}%
+
\raisebox{.5\baselineskip}{\colorbox{P@GrayBG}{\Huge\selectfont\doclicenseIcon}}}}}
+
+\RequirePackage[tbtags,fleqn]{amsmath}
+\PassOptionsToPackage{final}{graphicx}
+\RequirePackage{graphicx,grffile,grfext}
+% prefer pdf over png
+\PrependGraphicsExtensions{.pdf,.PDF}
+% ai's are just pdfs.
+\ifthenelse{\boolean{xetex}}{
+ \DeclareGraphicsRule{.ai}{QTm}{*}{}
+}{
+ \DeclareGraphicsRule{.ai}{pdf}{*}{}
+}
+\AppendGraphicsExtensions{.ai,.AI}
+
+\RequirePackage{multirow,tabularx,booktabs,threeparttable}
+\RequirePackage[figuresright]{rotating}
+\RequirePackage{caption,subcaption} % subfig
+\RequirePackage{totpages}
+\RequirePackage[useregional]{datetime2}
+
+
+\ifthenelse{\boolean{xetex}\or\boolean{luatex}}%
+ {\newfontfamily\firaoldstylemono
+ [ Numbers = {Monospaced,OldStyle},
+ UprightFont = *-Book ,
+ ItalicFont = *-BookItalic ,
+ BoldFont = *-Bold ,
+ BoldItalicFont = *-BoldItalic ,
+ ]
+ {FiraSans}}{}
+
+
+\newcommand*\P@listingnumbersfont{%
+ \sffamily\small\color{P@GrayFG!40}%
+ \ifthenelse{\boolean{xetex}\or\boolean{luatex}}%
+ {\firaoldstylemono}
+ {\tbfigures}}%
+
+
+\RequirePackage{listings}
+\lstset{%
+ basicstyle=\small\ttfamily,%
+ columns=fullflexible,
+ extendedchars=true,
+ upquote=true,
+ captionpos=t,
+ backgroundcolor=\color{P@GrayBG},%
+ breaklines=true,
+
postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{P@Blue}\hookrightarrow\space}},
+ numbers=left,
+ numberstyle=\P@listingnumbersfont,
+ numbersep=.5em,
+ frame=single,
+ framerule=0pt}
+\lst@AddToHook{FontAdjust}{\P@CodeSetup}
+\lst@AddToHook{DisplayStyle}{\def\baselinestretch{1}\@currsize}
+\lst@AddToHook{TextStyle}{\lstset{breaklines=false}}
+% work around listings being too smart
+\lst@AddToHook{Init}{\let\ttdefault\f@family}
+
+
+\AtEndPreamble{\RequirePackage{siunitx}}
+\AfterPackage{siunitx}{%
+ \sisetup{
+ binary-units,
+ detect-all,
+ free-standing-units,
+ space-before-unit,
+ use-xspace,
+ unit-optional-argument,
+ parse-units = false}
+ \AtEndPreamble{
+ \@ifpackageloaded{pgf}{\SendSettingsToPgf }{}
+ \addto\extrasenglish{\sisetup{locale = US}}}}
+
+\PassOptionsToPackage{style=numeric,sortcites}{biblatex}
+\AfterPackage{biblatex}{
+ \setcounter{biburllcpenalty}{7000}
+ \setcounter{biburlucpenalty}{8000}
+ \ExecuteBibliographyOptions{
+ url=true,%
+ abbreviate=false,%
+ maxnames=20}
+ \@ifpackagelater{biblatex}{2016/09/10}%
+ {\ExecuteBibliographyOptions{urldate=edtf,seconds=true}}%
+ {\ExecuteBibliographyOptions{urldate=iso8601}}
+ \PreventPackageFromLoading[\message{%
+ ^^J^^JERROR: You tried to load the cite package that is not compatible
+ with biblatex.^^J^^J%
+ }]{cite}
+}
+\AtEndPreamble{
+ \@ifpackageloaded{biblatex}{}{
+ % normal bibtex
+ \bibliographystyle{plainurl}}}
+
+
+\setfootnoterule{4cc}
+\setkomafont{footnoterule}{\color{P@GrayFG}}
+\setlength{\skip\footins}{2\baselineskip}
+\setlength{\footskip}{0pt}
+\addtokomafont{footnote}{\small}
+\deffootnote[1em]{1.5em}{1em}{\textsuperscript{\thefootnotemark}\,}
+\RequirePackage{fnpct}
+\setfnpct{after-punct-space={-.2em}}
+
+% koma-hacks
+\RequirePackage{etoolbox}
+\AtEndPreamble{\RequirePackage{scrhack}}
+
+\setkomafont{pageheadfoot}{\firamedium}
+
+\newkomafont{listlabel}{\sffamily\mdseries\color{P@GrayFG}}
+\addtokomafont{descriptionlabel}{\sffamily\color{P@GrayFG}}
+
+\setlength\leftmargini {1.2\parindent}
+\setlength\leftmarginii {1.2em}
+\setlength\leftmarginiii{1.2em}
+\setlength\leftmarginiv {1.2em}
+\setlength\leftmarginv {1.2em}
+\setlength\leftmarginvi {1.2em}
+\setlength{\leftmargin}{\leftmargini}
+
+\newcommand*\P@Bullet{\color{P@GrayFG}\rule[1.5pt]{3pt}{3pt}}
+\renewcommand*\labelenumi{\usekomafont{listlabel}\theenumi.}
+\renewcommand*\labelenumii{\usekomafont{listlabel}\theenumii.}
+\renewcommand*\labelenumiii{\usekomafont{listlabel}\theenumiii.}
+\renewcommand*\labelenumiv{\usekomafont{listlabel}\theenumiv.}
+\renewcommand*\labelitemi{\usekomafont{listlabel}\P@Bullet}%
+\renewcommand*\labelitemii{\usekomafont{listlabel}--}%
+\renewcommand*\labelitemiii{\usekomafont{listlabel}\raisebox{-0.3ex}{\textasteriskcentered}}%
+\renewcommand*\labelitemiv{\usekomafont{listlabel}\textperiodcentered}%
+
+\renewcommand*{\@list@extra}{%
+ \topsep 2pt\parsep\parskip\itemsep 2pt
+}
+
+
+\AtEndPreamble{%
+ \RedeclareSectionCommand[%
+ beforeskip=-2\baselineskip,
+ afterskip=1\baselineskip]{section}
+ \RedeclareSectionCommand[%
+ beforeskip=-1\baselineskip,
+ afterskip=1\baselineskip]{subsection}
+ \RedeclareSectionCommand[%
+ beforeskip=-1\baselineskip,
+ afterskip=1sp plus -1sp minus 1sp]{subsubsection}
+ \RedeclareSectionCommand[%
+ beforeskip=1\baselineskip]{paragraph}
+ \RedeclareSectionCommand[%
+ beforeskip=1\baselineskip]{subparagraph}
+}
+
+\providecommand*\hairspace{\ifmmode\mskip1mu\else\kern0.08em\fi}
+\providecommand*\email[1]{\href{mailto:#1}{\nolinkurl{#1}}\xspace}
+\newenvironment{wide}
+ {\list{}{%
+ \leftmargin-1.5cm
+ \rightmargin\leftmargin}
+ \item\relax}
+ {\endlist}
+
+\newcommand*\acks{\paragraph*{Acknowledgements}}
+
+
+\renewcommand*{\sectionformat}{%
+ \colorbox{P@Blue}{%
+ {\hspace*{.15em}%
+ \color{P@ColorOnBlue}%
+ \large\thesection\autodot%
+ \hspace*{.17em}}}%
+ \quad}
+
+\usepackage{scrlayer-scrpage}
+\pagestyle{scrheadings}
+\clearpairofpagestyles
+
+
+\newlength{\P@corebaselineskip}
+\setlength{\P@corebaselineskip}{\baselineskip}
+\newcommand*\P@pagemarkseparator{\kern.06667em :\kern.06667em\relax}
+
+
+\AtBeginDocument{%
+ \setlength{\P@corebaselineskip}{\baselineskip}}
+
+\RequirePackage{comment}
+\excludecomment{CCSXML}
+
+\let\@ACMccs\@empty
+\newcommand*\ccsdesc[2][100]{%
+ \@@ACMccs#2[#1]}
+\def\@@ACMccs#1~#2[#3]{%
+ \def\@tempa{\relax}%
+ \ifnum#3>299\def\@tempa{\itshape}\fi%
+ \ifnum#3>499\def\@tempa{\bfseries}\fi%
+%
+ \ifcsdef{@ACMccs@#1}{}{%
+ \def\@tempb{\item{}\begingroup}
+ \eappto{\@tempb}{\expandonce\@tempa}
+ \appto{\@tempb}{#1 → }
+ \global\cslet{@ACMccs@#1}\@tempb
+ \gappto\@ACMccs{\csuse{@ACMccs@#1}\endgroup}}%
+ \csgappto{@ACMccs@#1}{#2; }}
+
+\let\P@keywords\@empty
+\newcommand*\keywords[1]{\gdef\P@keywords{#1}}
+
+\addtokomafont{caption}{\small}
+\addtokomafont{captionlabel}{\sffamily\bfseries}
+\renewcommand*{\captionformat}{\quad}
+
+\newcommand*\P@BlueBox{%
+ \kern0.05em{\color{P@Blue}\rule{0.73em}{0.73em}}%
+ \hspace*{0.67em}}
+\DeclareCaptionLabelFormat{withbox}{%
+ \P@BlueBox\bothIfFirst{#1}{~}#2}
+\captionsetup{labelformat=withbox}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% Authors and Affiliation
+\newkomafont{affiliation}{\footnotesize}
+
+\providecommand*\P@last@author{}
+\providecommand*\P@authors{}
+\newcounter{P@authors}
+\providecommand*\P@affiliations{}
+\newcounter{P@affiliations}
+\providecommand*\P@authorinfos{}
+
+
+\newcommand*\P@author@link[1]{%
+ \texorpdfstring%
+ {\hyperlink{P:authorinfo:\detokenize{#1}}{#1}}%
+ {#1}}%
+
+\newcommand*\P@author@[2][]{%
+ \gdef\P@last@author{#2}%
+ \listgadd\P@authors{%
+ \P@author@link{#2}\ignorespaces%
+ \P@affil{#1}\relax}%
+ \stepcounter{P@authors}%
+ \P@author@serialize%
+}
+\newcommand*\P@author@@{%
+ \addtocounter{P@affiliations}{1}%
+ \edef\@tempa{\alph{P@affiliations}}%
+ \addtocounter{P@affiliations}{-1}%
+ \expandafter\P@author@\expandafter[\@tempa]}
+
+\renewcommand*\author{%
+ \@ifnextchar[ %]
+ \P@author@%
+ \P@author@@}
+
+% Long.
+\newcommand\authorinfo[2][]{%
+ \expandafter\listgadd%
+ \expandafter\P@authorinfos%
+ \expandafter{%
+ \expandafter{\P@last@author}{#1}{#2}}}
+
+
+\newlength{\P@authorinfo@imagewidth}
+\newlength{\P@current@parindent}
+\setlength{\P@authorinfo@imagewidth}{2.5cm}
+\newcommand\P@makeauthorinfo[3]{%
+ \begingroup%
+ \setlength\P@current@parindent\parindent
+ \noindent%
+ \begin{minipage}[t]{\dimexpr\linewidth - \P@authorinfo@imagewidth -
2\columnsep\relax}
+ \setlength\parindent\P@current@parindent
+ \vspace*{0pt}%
+ \noindent%
+
\strut\hypertarget{P:authorinfo:\detokenize{#1}}{\textbf{#1}}\space\ignorespaces
#3\par
+ \end{minipage}%
+ \hspace*{1.5\columnsep}%
+ \begin{minipage}[t]{\P@authorinfo@imagewidth}%
+ \vspace*{0pt}
+ \ifstrempty{#2}{\hfil}{%
+ \includegraphics[width=\P@authorinfo@imagewidth]{#2}}%
+ \end{minipage}%
+ \par\vspace{\baselineskip}
+ \endgroup}
+
+\providecommand*\abouttheauthorsname{%
+ About the author\ifnum 1<\value{P@authors}s\fi}
+
+\newcommand*\P@printauthorinfos{%
+ \ifdefvoid{\P@authorinfos}{}\P@@printauthorinfos}
+\newcommand*\P@@printauthorinfos{%
+ \begingroup
+ \clearpage%
+ \phantomsection
+ \addcontentsline{toc}{section}{\abouttheauthorsname}
+ \section*{\abouttheauthorsname}
+ \renewcommand\do[1]{\P@makeauthorinfo##1}
+ \dolistloop{\P@authorinfos}
+ \endgroup}
+\AtEndDocument{\P@printauthorinfos}
+
+\newcommand*\affiliation[2][]{%
+ \begingroup
+ \def\@tempa{#1}
+ \stepcounter{P@affiliations}%
+ \ifdefempty{\@tempa}{\edef\@tempa{\alph{P@affiliations}}}{}%
+ \expandafter\listgadd%
+ \expandafter\P@affiliations%
+ \expandafter{%
+ \expandafter{\@tempa}{#2}}
+ \endgroup}
+
+\newcommand*\printaffiliations{%
+ \begin{list}{}{%
+ \setlength{\topsep}{0pt}%
+ \setlength{\partopsep}{0pt}%
+ \setlength{\parskip}{0pt}%
+ \setlength{\labelsep}{0pt}%
+ \setlength{\labelwidth}{1.5em}%
+ \setlength{\leftmargin}{\labelwidth}}
+ \def\makelabel##1{\rlap{##1}\hss}
+ \def\@tempa##1##2{\item[##1]{##2}}
+ \renewcommand*{\do}[1]{\@tempa##1}
+ \dolistloop{\P@affiliations}
+ \end{list}\ignorespaces}
+
+
+\newcommand*\P@and{,\space}
+\newcommand*\P@midand{\space and\space}
+\newcommand*\P@lastand{, and\space}
+\let\and\P@and
+\let\midand\P@midand
+\let\lastand\P@lastand
+\let\P@affil\@gobble
+
+\newcommand\P@author@serialize{%
+ \gdef\@author{}
+ \def\P@i{1}
+ \forlistloop{%
+ \ifnumequal{1}{\P@i}%
+ {}% nothing
+ {\ifnumless{\P@i}{\value{P@authors}}%
+ {\xappto\@author\and}%
+ {\ifnumequal{2}{\P@i}%
+ {\xappto\@author\midand}%
+ {\xappto\@author\lastand}}}
+ \edef\P@i{\number\expandafter\numexpr\P@i + 1\relax}
+ \gappto\@author}{\P@authors}}
+
+
+\newtoks\authorrunning
+\newtoks\titlerunning
+\providecommand*\@authorrunning{\@author}
+\providecommand*\@titlerunning{\@title}
+\rohead{\usekomafont{pageheadfoot}\@authorrunning}
+\lehead{\usekomafont{pageheadfoot}\@titlerunning}
+\setkomafont{pagenumber}{\firamedium}
+\cfoot{%
+ \ifdefvoid\P@ArticleNumber{}{%
+ \usekomafont{pagenumber}\mdseries\P@ArticleNumber\P@pagemarkseparator}%
+ \pagemark}
+
+
+%%
+%%
+\newcommand*\P@firstpage{\pageref{P:firstpage}}
+\newcommand*\P@lastpage{\pageref{TotPages}}
+
+\defpagestyle{P@titlepage}{{}{}{}}{%
+{}{%
+ \begin{minipage}[b][0pt][b]{\textwidth}
+ \null\noindent%
+ \normalfont%
+ \hspace{-1mm}\P@doclicenseImage%
+ \hfill%
+ \begin{minipage}[b]%
+ {\dimexpr\linewidth - \doclicenseimagewidth - 1\columnsep\relax}%
+ \ignorespaces
+ \scriptsize%
+ \textcopyright\ {\@author}\\
+ \doclicenseText\\
+ \ifthenelse{\boolean{P@submission}}%
+ {Submitted to \textit{\P@banner}.}%
+ {In \textit{\P@banner}\ignorespaces%
+ \ifcsvoid{P@Volume}{}{, vol.\,\P@Volume\ignorespaces}%
+ \ifcsvoid{P@Issue}{}{, no.\,\P@Issue\ignorespaces}%
+ \ifcsvoid{P@Year}{}{, \P@Year\ignorespaces}%
+ \ifcsvoid{P@ArticleNumber}{}{, article \P@ArticleNumber}%
+ ; \P@lastpage\space pages.}%
+ \end{minipage}%
+ \end{minipage}
+}{}
+}
+\renewcommand*{\titlepagestyle}{P@titlepage}
+
+\addtokomafont{title}{\Large\sffamily\bfseries\mathversion{bold}}
+\addtokomafont{author}{\large}
+
+\renewcommand*\@maketitle{%
+ \label{P:firstpage}%
+ \unskip% just in case
+ \begingroup
+ \parindent\z@ \raggedright%
+ \normalfont%
+ \raggedright%
+ {\usekomafont{title}\@title\par}%
+ \ifdefvoid\@subtitle{}{%
+ {\usekomafont{subtitle}\selectfont%
+ \vskip .5\baselineskip%
+ \@subtitle \par}}
+ \bigskip%
+ %
+ {\let\P@affil\textsuperscript
+ \usekomafont{author}\@author \par}
+ \smallskip%
+ %
+ {\usekomafont{affiliation}%
+ \printaffiliations}%
+ \endgroup
+ %
+ \if!\the\authorrunning!\relax\else
+ \xdef\@authorrunning{\the\authorrunning}\fi
+ \if!\the\titlerunning!\else\relax
+ \xdef\@titlerunning{\the\titlerunning}\fi
+ \begingroup
+ \let\@@author\@author
+ \def\and{, }\def\midand{, }\def\lastand{, }
+ \P@author@serialize
+ \hypersetup{pdfauthor=\@author}
+ \global\let\@author\@@author
+ \hypersetup{pdfkeywords = {\P@keywords}}
+ \ifdefvoid{\@subtitle}%
+ {\hypersetup{pdftitle={\@title}}}%
+ {\hypersetup{pdftitle={\@title: \@subtitle}}}%
+ \relax%
+ \hypersetup{pdfcreator={programming},pdfproducer={programming}}% WOAMI
+ \ifthenelse{\boolean{pdf}}%
+ {\ifthenelse{\boolean{luatex}}%
+ {\gdef\P@aftertitle{\directlua{pdf.setsuppressoptionalinfo(15)}}}%
+
{\gdef\P@aftertitle{\ifx\pdfsuppressptexinfo\undefined\relax\else\global\pdfsuppressptexinfo=-1\fi}}}%
+ {\gdef\P@aftertitle{}}%
+ \aftergroup\P@aftertitle\relax
+ \endgroup%
+ \global\let\P@affil\@gobble%
+}
+
+\newcommand*\P@headersection[1]{%
+ \par\vspace*{.5\baselineskip}%
+ \footnotesize\sffamily%
+ \noindent{\bfseries\color{P@GrayFG} #1}\enspace}
+
+\newkomafont{abstract}{\fontsize{8.5}{10}\selectfont}
+\renewenvironment{abstract}%
+ {\par\smallskip%
+ \begingroup
+ \newcommand\P@gobblepar[1]{\@ifnextchar\par{\P@gobblepar}{}}
+ {\P@headersection{\abstractname}}
+ \begingroup\usekomafont{abstract}
+ \@ifnextchar\par{\P@gobblepar}{}%
+}{%
+ \par
+ \endgroup
+ \begingroup
+ \raggedright
+ \ifcsvoid{@ACMccs}{}{%
+ {\P@headersection{ACM CCS 2012}
+ \begin{itemize}\@ACMccs\end{itemize}%
+ \vspace{-\topsep}}}%
+ \ifcsvoid{P@keywords}{}{%
+ {\P@headersection{Keywords}
+ \P@keywords}}%
+ \par%
+ \vfill%
+ \noindent\null\begin{minipage}[t][6\P@corebaselineskip][t]{\linewidth}{}%
+ \vspace*{0pt}%
+ \ifthenelse{\value{page} > 1}{\P@warning{%
+ Your abstract seems to extend over the first page. Please consider
+ adding \string\smaller\ right after \string\begin{abstract}.
+ }}{}%
+ {\microtypesetup{activate=false}%
+ \Large\selectfont \P@banner\par}
+ {\color{P@Blue}\rule{\linewidth}{.5\P@corebaselineskip}\par}%
+ \sffamily
+ \ifthenelse{\boolean{P@submission}}{%
+ {{\P@headersection{\rlap{Perspective}\phantom{Area of
Submission}}}{\normalsize\P@perspective}}\strut%
+ {{\P@headersection{Area of Submission}}{\normalsize\P@area}}\strut%
+ }{%
+ \DTMifsaveddate{P@date@submitted}{%
+ {{\P@headersection{{Submitted}}}
+ \DTMUsedate{P@date@submitted}}}{}\strut%
+ \DTMifsaveddate{P@date@published}{%
+ {{{\P@headersection{\rlap{Published}\phantom{Submitted}}}
+ \DTMUsedate{P@date@published}}}}{}\strut%
+ \ifcsvoid{P@DOI}{}{%
+ {{\P@headersection{\rlap{\textsc{doi}}\phantom{Submitted}}}
+ \href{\P@DOI@BASE\P@DOI}{\P@DOI}}}%
+ }\par
+ \vfill
+ \end{minipage}
+ % \setlength{\skip\footins}{.5\baselineskip}
+ \endgroup
+ \endgroup
+ \clearpage
+ \ignorespaces}
+
+% From the TeX FAQ
+\renewcommand{\topfraction}{.85}
+\renewcommand{\bottomfraction}{.7}
+\renewcommand{\textfraction}{.15}
+\renewcommand{\floatpagefraction}{.66}
+\renewcommand{\dbltopfraction}{.66}
+\renewcommand{\dblfloatpagefraction}{.66}
+\setcounter{topnumber}{9}
+\setcounter{bottomnumber}{9}
+\setcounter{totalnumber}{20}
+\setcounter{dbltopnumber}{9}
+
+% \emergencystretch=1em
+\clubpenalty10000
+\widowpenalty10000
+\displaywidowpenalty=10000
+\frenchspacing
+\raggedbottom
+
+\tolerance=100
+\emergencystretch=2pt
+
+\endinput
+% EOF
diff --git a/doc/programming-2022/supply-chain.skb
b/doc/programming-2022/supply-chain.skb
index 7804540..0c6db4a 100644
--- a/doc/programming-2022/supply-chain.skb
+++ b/doc/programming-2022/supply-chain.skb
@@ -66,51 +66,16 @@
;; See
<https://en.wikibooks.org/wiki/LaTeX/Labels_and_Cross-referencing>
;; and
<http://tug.org/pipermail/texhax/2010-September/015596.html>.
(string-append u "\n"
- "\\usepackage{microtype}\n"
- ;; "\\usepackage[hypcap]{caption}\n"
- ;; "\\DeclareCaptionType{copyrightbox}\n"
- "\\usepackage{balance}\n"
-
;; Trick so that ‘…’ is properly
;; typeset inside teletype text.
"\\DeclareUnicodeCharacter{2026}{\\textrm{\\ldots}}\n"
;; Improve hyphenation.
- "\\hyphenation{Open-PGP}\n"
-
- "\
-%% \\fancyhf{} % Remove fancy page headers
-%% \\fancyhead[C]{Anonymous submission \\#9999 to ACM CCS 2021} % TODO:
replace 9999 with your paper number
-%% \\fancyfoot[C]{\\thepage}
-
-\\setcopyright{none} % No copyright notice required for submissions
-\\acmYear{2022}
-
-%% \\let\\oldthing\\footnotetextcopyrightpermission
-%% \\renewcommand\\footnotetextcopyrightpermission[1]{\\oldthing{
-%% % Per
-%% %
<https://www.legifrance.gouv.fr/affichCodeArticle.do?cidTexte=LEGITEXT000006069414&idArticle=LEGIARTI000006278959&dateTexte=20170831>,
-%% % the copyright holder is me personally, not Inria.
-%% Copyright \\copyright 2021 Ludovic Courtès.\\
-%%
-%% Permission is granted to copy, distribute and/or modify this document
-%% under the terms of the GNU Free Documentation License, Version 1.3
-%% or any later version published by the Free Software Foundation;
-%% with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
-%% A copy of the license is
-%% available at \\url{https://www.gnu.org/licenses/gfdl.html}.
-%%
-%% % Give a link to the 'Transparent Copy', as per Section 3 of the GFDL.
-%% The source of this document is available from
-%% \\url{https://git.sv.gnu.org/cgit/guix/maintenance.git}.
-%% }}
-")))
+ "\\hyphenation{Open-PGP}\n")))
(let ((latex (find-engine 'latex)))
(engine-custom-set! latex 'documentclass
- "\\documentclass[sigconf,anonymous,review]{acmart}")
-
- (engine-custom-set! latex 'maketitle #f)
+ "\\documentclass[english,submission]{programming}")
(markup-writer '&latex-author latex
:action (lambda (n e)
@@ -118,12 +83,11 @@
(for-each (lambda (a)
(display "\\author{")
(output (markup-option a :name) e)
- (display "}\n\\affiliation{\n")
- (display " \\institution{")
+ (display "}\n\\affiliation{")
(output (markup-option a :affiliation) e)
- (display "}\n \\city{")
+ (display "}\n\\authorinfo{")
(output (markup-option a :address) e)
- (display "}}\n"))
+ (display "}\n"))
(if (pair? body) body (list body))))))
(markup-writer '&acm-category latex
@@ -179,9 +143,18 @@
(document :title [Building a Secure Software Supply Chain with GNU Guix]
-;; :author (list (author :name "Ludovic Courtès"
-;; :affiliation "Inria"
-;; :address (list "Bordeaux, France")))
+ :author (list (author :name "Ludovic Courtès"
+ :affiliation "Inria"
+ :email "ludovic.courtes@inria.fr"
+ :address (list "Bordeaux, France")))
+
+ (!latex "\\paperdetails{perspective=engineering,
+area={Security programming}, license=cc-by-sa}\n")
+
+ ;; See <http://dl.acm.org/ccs/ccs_flat.cfm>.
+ (!latex "\\input{categories.tex}\n")
+
+ (acm-keywords [software deployment, security, version control, Git])
(acmart-abstract
@@ -205,13 +178,6 @@ against downgrade attacks and related threats. We explain
implementation choices and report on our experience since the mechanism
entered production use.]))
- ;; See <http://dl.acm.org/ccs/ccs_flat.cfm>.
- (!latex "\\input{categories.tex}\n")
-
- (acm-keywords [Software deployment, Security, Git])
-
- (!latex "\\maketitle\n")
-
(chapter :title [Introduction]
(p [Package managers and related software deployment tools are in
@@ -1094,7 +1060,6 @@ possibly allowing users to register those when they first
pull from the
channel. All this requires more thought, but it looks like there are
new opportunities here.]))
- (!latex "\n\\newpage\n\\balance\n")
(references))
;;; Local Variables:
- 05/66: ccs-2021: Move "Notes on SHA-1" under "Implementation"., (continued)
- 05/66: ccs-2021: Move "Notes on SHA-1" under "Implementation"., Ludovic Courtès, 2022/06/29
- 06/66: ccs-2021: Turn on review mode for good., Ludovic Courtès, 2022/06/29
- 03/66: ccs-2021: Tweak main sections., Ludovic Courtès, 2022/06/29
- 12/66: ccs-2021: Add abstract and tweak intro., Ludovic Courtès, 2022/06/29
- 07/66: ccs-2021: Discuss in-toto in "Related Work"., Ludovic Courtès, 2022/06/29
- 11/66: ccs-2021: Complete introductions., Ludovic Courtès, 2022/06/29
- 25/66: icse-2022: Final (?) tweaks., Ludovic Courtès, 2022/06/29
- 04/66: ccs-2021: Tweak "related work", add proper references., Ludovic Courtès, 2022/06/29
- 09/66: ccs-2021: Write conclusion., Ludovic Courtès, 2022/06/29
- 21/66: icse-2022: Link to "Git Cryptography Protocol"., Ludovic Courtès, 2022/06/29
- 29/66: programming-2022: Adjust to <Programming> style.,
Ludovic Courtès <=
- 31/66: programming-2022: Expand "Related Work"., Ludovic Courtès, 2022/06/29
- 32/66: programming-2022: Use a monospace font for code snippets., Ludovic Courtès, 2022/06/29
- 08/66: ccs-2021: Capitalize section titles., Ludovic Courtès, 2022/06/29
- 10/66: ccs-2021: Improve "Rationale" section., Ludovic Courtès, 2022/06/29
- 13/66: ccs-2021: Proof-read and tweak., Ludovic Courtès, 2022/06/29
- 15/66: ccs-2021: Typos, hyphenation, and other improvements., Ludovic Courtès, 2022/06/29
- 14/66: ccs-2021: Update ACM categories., Ludovic Courtès, 2022/06/29
- 16/66: ccs-2021: Tweak "Related Work"., Ludovic Courtès, 2022/06/29
- 17/66: ccs-2021: Give example authentication throughput., Ludovic Courtès, 2022/06/29
- 18/66: ccs-2021: Prepare for ICSE resubmission., Ludovic Courtès, 2022/06/29