summaryrefslogtreecommitdiff
path: root/macros
diff options
context:
space:
mode:
Diffstat (limited to 'macros')
-rw-r--r--macros/latex/contrib/acmart/README3
-rw-r--r--macros/latex/contrib/acmart/acmart.bib6
-rw-r--r--macros/latex/contrib/acmart/acmart.dtx344
-rw-r--r--macros/latex/contrib/acmart/acmart.pdfbin876024 -> 863525 bytes
-rw-r--r--macros/latex/contrib/acmart/acmguide.pdfbin417565 -> 420338 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmlarge.pdfbin608941 -> 610121 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdfbin1052776 -> 1054227 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdfbin621006 -> 622637 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmsmall.pdfbin618534 -> 620122 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-acmtog.pdfbin566190 -> 567307 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-authordraft.pdfbin1046042 -> 1047403 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-base.bib1
-rw-r--r--macros/latex/contrib/acmart/samples/sample-lualatex.pdfbin779647 -> 781211 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-manuscript.pdfbin620099 -> 622255 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdfbin0 -> 1059382 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-sigconf.pdfbin1042222 -> 1043594 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-sigplan.pdfbin1050621 -> 1052136 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/sample-xelatex.pdfbin658185 -> 659566 bytes
-rw-r--r--macros/latex/contrib/acmart/samples/samples.dtx94
-rw-r--r--macros/latex/contrib/acmart/samples/samples.ins1
-rw-r--r--macros/latex/contrib/atendofenv/LICENSE24
-rw-r--r--macros/latex/contrib/atendofenv/README.md24
-rw-r--r--macros/latex/contrib/atendofenv/atendofenv.dtx149
-rw-r--r--macros/latex/contrib/atendofenv/atendofenv.ins48
-rw-r--r--macros/latex/contrib/microtype/README.md8
-rw-r--r--macros/latex/contrib/microtype/microtype-code.pdfbin2149691 -> 2157678 bytes
-rw-r--r--macros/latex/contrib/microtype/microtype-utf.dtx11
-rw-r--r--macros/latex/contrib/microtype/microtype.dtx514
-rw-r--r--macros/latex/contrib/microtype/microtype.ins4
-rw-r--r--macros/latex/contrib/microtype/microtype.pdfbin667452 -> 670040 bytes
-rw-r--r--macros/luatex/latex/luacensor/README5
-rw-r--r--macros/luatex/latex/luacensor/luacensor.pdfbin129263 -> 158771 bytes
-rw-r--r--macros/luatex/latex/luacensor/luacensor.sty211
-rw-r--r--macros/luatex/latex/luacensor/luacensor.tex418
34 files changed, 1455 insertions, 410 deletions
diff --git a/macros/latex/contrib/acmart/README b/macros/latex/contrib/acmart/README
index ed1def7383..0e67fae461 100644
--- a/macros/latex/contrib/acmart/README
+++ b/macros/latex/contrib/acmart/README
@@ -12,6 +12,9 @@ The production version is the one on CTAN and ACM sites.
Changes
+Version 1.83 Support for multilanguage papers
+ ISSN changes for some journals
+
Version 1.82 Bug fixes.
New command \anon for anonymization of short strings.
Documentation update.
diff --git a/macros/latex/contrib/acmart/acmart.bib b/macros/latex/contrib/acmart/acmart.bib
index c4ccd85f31..2e422a7ff4 100644
--- a/macros/latex/contrib/acmart/acmart.bib
+++ b/macros/latex/contrib/acmart/acmart.bib
@@ -87,3 +87,9 @@
note = {\url{http://www.ctan.org/pkg/textcase}}
}
+@Manual{Braams22:Babel,
+ title = {Babel},
+ author = {Johannes L. Braams and Javier Bezos},
+ year = 2022,
+ note = {\url{http://www.ctan.org/pkg/babel}}}
+
diff --git a/macros/latex/contrib/acmart/acmart.dtx b/macros/latex/contrib/acmart/acmart.dtx
index 0940dc856d..01f6c81eba 100644
--- a/macros/latex/contrib/acmart/acmart.dtx
+++ b/macros/latex/contrib/acmart/acmart.dtx
@@ -420,7 +420,9 @@
% \end{tabularx}
% \end{table}
%
-%
+% The option |language| is used to define the languages for the
+% multi-language papers. It is discussed in
+% Section~\ref{sec:ug_i13n}.
%
%\subsection{Top matter}
%\label{sec:ug_topmatter}
@@ -1153,6 +1155,82 @@
% \end{verbatim}
%
%
+%
+%\subsection{Internationalization}
+%\label{sec:ug_i13n}
+%
+% ACM accepts publications in languages other than English, as well as
+% papers in English with translations of titles, subtitles, keywords
+% and abstracts into other languages. Papers in languages other than
+% English usually have titles, subtitles (if applicable), keywords and
+% abstracts in English. Note that CCS concepts are always typeset in
+% English.
+%
+% To submit these papers you need to set the option |language| in the
+% \cs{documentclass} command. This option can be repeated, for
+% example,
+% \begin{verbatim}
+% \documentclass[sigconf, language=french, language=english]{acmart}
+% \end{verbatim}
+% The last language in the list is the main language of the paper,
+% i.e. the one for the main title, abstract, body, etc. The other
+% languages are \emph{secondary,} and used for translated titles,
+% keywords, abstracts. Thus the paper above is written in English,
+% and has a secondary abstract and a secondary title in French. On
+% the other hand, a paper in French wih secondary titles and abstracts
+% in English and German should use, for example
+% \begin{verbatim}
+% \documentclass[sigconf,
+% language=german,
+% language=english,
+% language=french]{acmart}
+% \end{verbatim}
+%
+%
+% This key can use any language defined in \textsl{babel}
+% package~\cite{Braams22:Babel} (currently the package is tested with
+% English, French, German and Spanish languages; other languages may
+% require a translation of \cs{keywordsname} macro). Actually
+% \textsl{acmart} loads \textsl{babel} internally, so you can use the
+% facilities provided by this package.
+%
+%
+% If this key is set, you have access to several additional top matter
+% commands.
+%
+% \DescribeMacro{\translatedtitle}%
+% \DescribeMacro{\translatedsubtitle}%
+% \DescribeMacro{\translatedkeywords}%
+% The commands \cs{translatedtitle}\marg{language}{title},
+% \cs{translatedsubtitle}\marg{language}{subtitle} and
+% \cs{translatedkeywords}{language}{keywords} are used to set title,
+% subtitle and keywords in the secondary language. For example, a
+% paper in English with French title and abstract may set
+% \begin{verbatim}
+% \title{A note on computational complexity}
+% \translatedtitle{french}{Remarque sur la complexit\'e de calcul}
+% \end{verbatim}
+% while a paper in French should set
+% \begin{verbatim}
+% \title{Remarque sur la complexit\'e de calcul}
+% \translatedtitle{english}{A note on computational complexity}
+% \end{verbatim}
+%
+% \DescribeEnv{translatedabstract}%
+% Similarly, |translatedabstract| environment has a mandatory language
+% argument, for example,
+% \begin{verbatim}
+% \begin{translatedastract}{english}
+% This is the English version of the abstract
+% \end{translatedastract}
+% \end{verbatim}
+%
+% You can repeat these commands if a paper has more than one secondary
+% language.
+%
+% Use the standard commands (\cs{title}, \cs{subtitle},
+% \cs{keywords}, |abstract|) for the main language of the paper.
+%
%\subsection{Algorithms}
%\label{sec:ug_algorithms}
%
@@ -1965,7 +2043,7 @@
\ProvidesFile{acmart.dtx}
%</gobble>
%<class>\ProvidesClass{acmart}
-[2022/02/05 v1.82 Typesetting articles for the Association for Computing Machinery]
+[2022/02/19 v1.83 Typesetting articles for the Association for Computing Machinery]
% \end{macrocode}
%
% \changes{v1.00}{2016/04/14}{First released version}
@@ -2367,6 +2445,21 @@
%
% \end{macro}
%
+%
+%
+% \begin{macro}{\ACM@languages}
+% \changes{v1.83}{2022/02/19}{Introduced macro}
+% The languages of the document
+% \begin{macrocode}
+\def\ACM@languages{}
+\DeclareOptionX{language}{%
+ \ifx\ACM@languages\@empty
+ \gdef\ACM@languages{english}\fi
+ \g@addto@macro\ACM@languages{, #1}}
+% \end{macrocode}
+%
+%
+% \end{macro}
%
% \changes{v1.01}{2016/04/18}{Explicitly put draft option
% (closes \url{https://github.com/borisveytsman/acmart/issues/4})}
@@ -2560,6 +2653,9 @@
% \end{macrocode}
%
%
+%
+%
+%
%\subsection{Citations}
% \changes{v1.19}{2016/07/28}{Include 'References' in PDF bookmarks
% (Matthew Fluet)}
@@ -2691,6 +2787,166 @@
\fi
% \end{macrocode}
%
+%
+%\subsection{Internationalization}
+%\label{sec:i13n}
+%
+%
+%
+% \changes{v1.83}{2022/02/19}{Use babel for multilanguage papers}
+% \begin{macrocode}
+\if@ACM@journal
+ \renewcommand\keywordsname{Additional Key Words and Phrases}%
+\else
+ \renewcommand\keywordsname{Keywords}%
+\fi
+\ifx\ACM@languages\@empty
+\else
+ \RequirePackage[\ACM@languages]{babel}%
+ \addto\captionsenglish{%
+ \if@ACM@journal
+ \renewcommand\keywordsname{Additional Key Words and Phrases}%
+ \else
+ \renewcommand\keywordsname{Keywords}%
+ \fi
+ \renewcommand\acksname{Acknowledgements}%
+ }%
+ \addto\captionsfrench{%
+ \if@ACM@journal
+ \renewcommand\keywordsname{Mots Clés et Phrases Supplémentaires}%
+ \else
+ \renewcommand\keywordsname{Mots clés}%
+ \fi
+ \renewcommand\acksname{Remerciements}%
+ }%
+ \addto\captionsgerman{%
+ \if@ACM@journal
+ \renewcommand\keywordsname{Zusätzliche Schlüsselwörter und Phrasen}%
+ \else
+ \renewcommand\keywordsname{Schlüsselwörter}%
+ \fi
+ \renewcommand\acksname{Danksagungen}%
+ }%
+ \addto\captionsspanish{%
+ \if@ACM@journal
+ \renewcommand\keywordsname{Palabras y Frases Claves Adicionales}%
+ \else
+ \renewcommand\keywordsname{Palabras claves}%
+ \fi
+ \renewcommand\acksname{Expresiones de gratitud}%
+ }%
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\ACM@lang@check}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% Some commands should not be used if the document is monlingual
+% \begin{macrocode}
+\newcommand\ACM@lang@check[1]{%
+ \ifx\ACM@languages\@empty\relax
+ \ClassError{\@classname}{%
+ Command \string#1 \MessageBreak is used in monlingual document}{%
+ You used a command (\string#1) \MessageBreak
+ that does not have a meaning \MessageBreak
+ unless are languages are defined. \MessageBreak
+ Please choose the languages in \string\documentclass
+ \MessageBreak
+ (e.g. \string\documentclass[languages={french, english}]{acmart}),
+ \MessageBreak
+ or delete the command.}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@translatedtitle}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% \begin{macrocode}
+\def\@translatedtitle{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\translatedtitle}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% The title of the paper in a different language
+% \begin{macrocode}
+\newcommand\translatedtitle[2]{\ACM@lang@check{\translatedtitle}%
+\g@addto@macro\@translatedtitle{\par\foreignlanguage{#1}{#2}}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@translatedsubtitle}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% \begin{macrocode}
+\def\@translatedsubtitle{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\translatedsubtitle}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% The subtitle of the paper in a different language
+% \begin{macrocode}
+\newcommand\translatedsubtitle[2]{\ACM@lang@check{\translatedsubtitle}%
+\g@addto@macro\@translatedsubtitle{\par\foreignlanguage{#1}{#2}}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@translatedkeywords}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% \begin{macrocode}
+\def\@translatedkeywords{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\translatedkeywords}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% Add keywords to the paper in the language specified
+% \begin{macrocode}
+\newcommand\translatedkeywords[2]{\ACM@lang@check{\translatedkeywords}%
+\g@addto@macro\@translatedkeywords{\@mktranslatedkeywords{#1}{#2}}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\@translatedabstracts}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% The container for translated abstracts.
+% \begin{macrocode}
+\def\@translatedabstracts{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{translatedabstract}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% We save translated abstracts into \cs{@translatedabstracts}
+% \begin{macrocode}
+\newenvironment{translatedabstract}[1]{\Collect@Body
+ \@savetranslatedabstract\@mktranslatedabstract{#1}}{}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@savetranslatedabstract}
+% And saving the abstract
+% \begin{macrocode}
+\long\def\@savetranslatedabstract#1{\if@ACM@maketitle@typeset
+ \ClassError{\@classname}{Abstract must be defined before maketitle
+ command. Please move it!}\fi
+ \ACM@lang@check{translatedabstract}%
+ \g@addto@macro\@translatedabstracts{\bgroup#1\egroup}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%\subsection{Sectioning}
+%\label{sec:sectioning}
+%
+%
+%
% \begin{macro}{\@startsection}
% \changes{v1.31}{2017/03/04}{Added \cs{tochangmeasure}}
% Before we call |hyperref|, we redefine \cs{startsection} commands to
@@ -2902,10 +3158,16 @@
%
% \end{macro}
%
+%
+%\subsection{Hyperxmp and hyperref}
+%\label{sec:hyper}
+%
+%
+%
% Adding |hyperxmp|
% \changes{v1.72}{2020/06/14}{Added hyperxmp}
-% \changes{v1.76}{2021/02/21}{Moved before hyperref, see
-% https://github.com/borisveytsman/acmart/issues/425}
+% \changes{v1.76}{2021/02/21}{Moved hyperxmp before hyperref, see
+% \url{https://github.com/borisveytsman/acmart/issues/425}}
% \begin{macrocode}
\RequirePackage{hyperxmp}
% \end{macrocode}
@@ -3006,6 +3268,11 @@
% \end{macro}
%
%
+%\subsection{Other packages}
+%\label{sec:packages}
+%
+%
+%
% Graphics and color.
% \changes{1.48}{2017/10/22}{Added prologue option to xcolor}
% \begin{macrocode}
@@ -3866,6 +4133,8 @@
\or % JOCCH
\def\@journalName{ACM Journal on Computing and Cultural Heritage}%
\def\@journalNameShort{ACM J. Comput. Cult. Herit.}%
+ \def\@permissionCodeOne{1556-4673}%
+ \def\@permissionCodeTwo{1556-4711}%
\or % PACMCGIT
\def\@journalName{Proceedings of the ACM on Computer Graphics and Interactive Techniques}%
\def\@journalNameShort{Proc. ACM Comput. Graph. Interact. Tech.}%
@@ -4012,7 +4281,7 @@
\def\@journalName{ACM Transactions on Multimedia Computing, Communications and Applications}%
\def\@journalNameShort{ACM Trans. Multimedia Comput. Commun. Appl.}%
\def\@permissionCodeOne{1551-6857}%
- \def\@permissionCodeTwo{0100}%
+ \def\@permissionCodeTwo{1551-6865}%
\or % TOMPECS
\def\@journalName{ACM Transactions on Modeling and Performance Evaluation of Computing Systems}%
\def\@journalNameShort{ACM Trans. Model. Perform. Eval. Comput. Syst.}%
@@ -4070,8 +4339,8 @@
\def\@journalNameShort{ACM Trans. Web}%
\def\@permissionCodeOne{1559-1131}%
\else % FACMP, a dummy journal
- \def\@journalName{Forthcoming ACM Publication}%
- \def\@journalNameShort{ACM Forthcoming}%
+ \def\@journalName{ACM Just Accepted}%
+ \def\@journalNameShort{ACM Accepted}%
\def\@permissionCodeOne{XXXX-XXXX}%
\fi
\ClassInfo{\@classname}{Using journal code \@journalCode}%
@@ -4384,6 +4653,18 @@
%
% \end{macro}
%
+% \begin{macro}{\@mktranslatedkeywords}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% We have two argument: the language to typeset keywords and the
+% keywords.
+% \begin{macrocode}
+\newcommand\@mktranslatedkeywords[2]{\bgroup
+ \selectlanguage{#1}%
+ {\@specialsection{\keywordsname}%
+ \noindent#2\par}\egroup}
+% \end{macrocode}
+%
+% \end{macro}
%
% \begin{macro}{\@titlenotes}
% The title notes
@@ -5370,6 +5651,7 @@
% address fields}
% \changes{v1.75}{2020/11/15}{Added \cs{@beginmaketitlehook}}
% \changes{v1.76}{2021/04/05}{Put \cs{par} inside group for keywords}
+% \changes{v1.83}{2022/02/20}{I13n}
% The (in)famous \cs{maketitle}. Note that in |sigchi-a| mode, authors
% are \emph{not} in the title box.
%
@@ -5470,6 +5752,8 @@
\endgroup
\setcounter{footnote}{0}%
\@mkabstract
+ \ifx\@translatedabstracts\@empty\else
+ \@translatedabstracts\fi
\if@ACM@printccs
\ifx\@concepts\@empty\else\bgroup
{\@specialsection{CCS Concepts}%
@@ -5477,13 +5761,12 @@
\fi
\fi
\ifx\@keywords\@empty\else\bgroup
- {\if@ACM@journal
- \@specialsection{Additional Key Words and Phrases}%
- \else
- \@specialsection{Keywords}%
- \fi
+ {\@specialsection{\keywordsname}%
\noindent\@keywords\par}\egroup
\fi
+ \ifx\@translatedkeywords\@empty\else
+ \@translatedkeywords
+ \fi
\let\metadata@authors=\authors
\nxandlist{, }{, }{, }\metadata@authors
\def\@ACM@checkaffil{}%
@@ -5716,6 +5999,8 @@
% \begin{macro}{\@mktitle@i}
% \changes{v1.06}{2016/05/01}{Made generic}
% \changes{v1.06}{2016/05/01}{Added processing badges}
+% \changes{v1.83}{2022/02/20}{Added \cs{translatedtitle} and
+% \cs{translatedsubtitle}}
% The version of \cs{mktitle} for most journals
% \begin{macrocode}
\def\@mktitle@i{\hsize=\textwidth
@@ -5736,9 +6021,9 @@
\fi
\parbox[t]{\@ACM@title@width}{\raggedright
\@titlefont\noindent
- \@title
+ \@title\@translatedtitle%
\ifx\@subtitle\@empty\else
- \par\noindent{\@subtitlefont\@subtitle}
+ \par\noindent{\@subtitlefont\@subtitle\@translatedsubtitle}%
\fi}%
\ifx\@acmBadgeR@image\@empty\else
\hskip\@ACM@badge@skip
@@ -5760,6 +6045,8 @@
% \begin{macro}{\@mktitle@iii}
% \changes{v1.06}{2016/05/01}{Made more generic}
% \changes{v1.06}{2016/05/01}{Added processing badges}
+% \changes{v1.83}{2022/02/20}{Added \cs{translatedtitle} and
+% \cs{translatedsubtitle}}
% The version of \cs{@mktitle} for SIG proceedings. Note that since
% the title is centered, we leave space for the left badge even if
% only the right badge is defined.
@@ -5778,9 +6065,9 @@
\hskip\@ACM@badge@skip
\fi
\parbox[t]{\@ACM@title@width}{\centering\@titlefont
- \@title
+ \@title\@translatedtitle%
\ifx\@subtitle\@empty\else
- \par\noindent{\@subtitlefont\@subtitle}
+ \par\noindent{\@subtitlefont\@subtitle\@translatedsubtitle}
\fi
}%
\if@ACM@badge
@@ -5799,14 +6086,16 @@
%
% \begin{macro}{\@mktitle@iv}
% \changes{v1.06}{2016/05/01}{Made more generic}
+% \changes{v1.83}{2022/02/20}{Added \cs{translatedtitle} and
+% \cs{translatedsubtitle}}
% The version of \cs{@mktitle} for |sigchi-a|
% \begin{macrocode}
\def\@mktitle@iv{\hsize=\textwidth
\setbox\mktitle@bx=\vbox{\raggedright\leftskip5pc\@titlefont
\noindent\leavevmode\leaders\hrule height 2pt\hfill\kern0pt\par
- \noindent\@title
+ \noindent\@title\@translatedtitle%
\ifx\@subtitle\@empty\else
- \par\noindent\@subtitlefont\@subtitle
+ \par\noindent\@subtitlefont\@subtitle\@translatedsubtitle%
\fi
\par\bigskip}}%
% \end{macrocode}
@@ -6414,11 +6703,12 @@
% Wickerson)}
% \changes{v1.48}{2017/09/16}{Removed spurious indentation if abstract
% is followed by an empty line}
+% \changes{v1.83}{2022/02/20}{I13n}
% Typesetting the abstract
% \begin{macrocode}
\def\@mkabstract{\bgroup
\ifx\@abstract\@lempty\else
- {\phantomsection\addcontentsline{toc}{section}{Abstract}%
+ {\phantomsection\addcontentsline{toc}{section}{\abstractname}%
\if@ACM@journal
\everypar{\setbox\z@\lastbox\everypar{}}\small
\else
@@ -6430,6 +6720,22 @@
%
% \end{macro}
%
+% \begin{macro}{\@mktranslatedabstract}
+% \changes{v1.83}{2022/02/20}{Added macro}
+% Typesetting a translated abstract
+% \begin{macrocode}
+\def\@mktranslatedabstract#1{\selectlanguage{#1}%
+ \if@ACM@journal
+ \everypar{\setbox\z@\lastbox\everypar{}}\small
+ \else
+ \section*{\abstractname}%
+ \fi
+ \ignorespaces}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
% \begin{macro}{\@mkbibcitation}
% \changes{v1.17}{2016/07/10}{Changed format for sigs}
% \changes{v1.17}{2016/07/10}{Added \cs{nobreak}}
diff --git a/macros/latex/contrib/acmart/acmart.pdf b/macros/latex/contrib/acmart/acmart.pdf
index 54cdddd6ec..cdeaf52e2f 100644
--- a/macros/latex/contrib/acmart/acmart.pdf
+++ b/macros/latex/contrib/acmart/acmart.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/acmguide.pdf b/macros/latex/contrib/acmart/acmguide.pdf
index d38eb1f501..fcebb0ab63 100644
--- a/macros/latex/contrib/acmart/acmguide.pdf
+++ b/macros/latex/contrib/acmart/acmguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf b/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf
index abd69928c5..b5dcfd9ca7 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmlarge.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf
index ee09eb7293..9b3ca788b6 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmsmall-conf.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf
index e66dbef206..be9729af33 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmsmall-submission.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf b/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf
index a3d2359e9c..6873d96090 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmsmall.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-acmtog.pdf b/macros/latex/contrib/acmart/samples/sample-acmtog.pdf
index 26392c84b6..d78ce126dc 100644
--- a/macros/latex/contrib/acmart/samples/sample-acmtog.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-acmtog.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-authordraft.pdf b/macros/latex/contrib/acmart/samples/sample-authordraft.pdf
index 4954f8ba20..e51ee62a27 100644
--- a/macros/latex/contrib/acmart/samples/sample-authordraft.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-authordraft.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-base.bib b/macros/latex/contrib/acmart/samples/sample-base.bib
index a129320c6d..a782f26eda 100644
--- a/macros/latex/contrib/acmart/samples/sample-base.bib
+++ b/macros/latex/contrib/acmart/samples/sample-base.bib
@@ -1509,6 +1509,7 @@ pages = "24--31"}
@online{CTANacmart,
author = {Boris Veytsman},
title = {acmart---{C}lass for typesetting publications of {ACM}},
+ year = 2017,
url = {http://www.ctan.org/pkg/acmart},
lastaccessed = {May 27, 2017}
}
diff --git a/macros/latex/contrib/acmart/samples/sample-lualatex.pdf b/macros/latex/contrib/acmart/samples/sample-lualatex.pdf
index 3913aa0ca5..d06751562f 100644
--- a/macros/latex/contrib/acmart/samples/sample-lualatex.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-lualatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-manuscript.pdf b/macros/latex/contrib/acmart/samples/sample-manuscript.pdf
index 438d5f3428..25cca1bc7f 100644
--- a/macros/latex/contrib/acmart/samples/sample-manuscript.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-manuscript.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf b/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf
new file mode 100644
index 0000000000..8960ce2ff4
--- /dev/null
+++ b/macros/latex/contrib/acmart/samples/sample-sigconf-i13n.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-sigconf.pdf b/macros/latex/contrib/acmart/samples/sample-sigconf.pdf
index cf6ba1b17a..bd85371e7e 100644
--- a/macros/latex/contrib/acmart/samples/sample-sigconf.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-sigconf.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-sigplan.pdf b/macros/latex/contrib/acmart/samples/sample-sigplan.pdf
index fa7caf450e..d8c8f67f1c 100644
--- a/macros/latex/contrib/acmart/samples/sample-sigplan.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-sigplan.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/sample-xelatex.pdf b/macros/latex/contrib/acmart/samples/sample-xelatex.pdf
index 4454bdb0aa..25a4bdef54 100644
--- a/macros/latex/contrib/acmart/samples/sample-xelatex.pdf
+++ b/macros/latex/contrib/acmart/samples/sample-xelatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/acmart/samples/samples.dtx b/macros/latex/contrib/acmart/samples/samples.dtx
index 36c3752677..3d8fc9abda 100644
--- a/macros/latex/contrib/acmart/samples/samples.dtx
+++ b/macros/latex/contrib/acmart/samples/samples.dtx
@@ -1,4 +1,4 @@
-%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf>
+%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
%%
%%
%% Commands for TeXCount
@@ -26,6 +26,8 @@
%<sigplan>\documentclass[sigplan,screen]{acmart}
%<sigchi>\documentclass[sigchi]{acmart}
%<sigchi-a>\documentclass[sigchi-a, nonacm]{acmart}
+%<sigconf-i13n>\documentclass[sigconf, language=french,
+%<sigconf-i13n>language=german, language=spanish, language=english]{acmart}
%%
%% \BibTeX command to typeset BibTeX logo in the docs
@@ -44,8 +46,8 @@
\acmYear{2018}
\acmDOI{XXXXXXX.XXXXXXX}
-%</manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf>
-%<*manuscript|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf>
+%</manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
+%<*manuscript|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
%% These commands are for a PROCEEDINGS abstract or paper.
\acmConference[Conference acronym 'XX]{Make sure to enter the correct
conference title from your rights confirmation emai}{June 03--05,
@@ -58,7 +60,7 @@
% June 03--05, 2018, Woodstock, NY}
\acmPrice{15.00}
\acmISBN{978-1-4503-XXXX-X/18/06}
-%</manuscript|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf>
+%</manuscript|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
%<*acmsmall|acmsmall-submission|acmlarge|acmtog>
%%
@@ -71,7 +73,7 @@
\acmArticle{111}
\acmMonth{8}
%</acmsmall|acmsmall-submission|acmlarge|acmtog>
-%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf>
+%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
%%
@@ -103,6 +105,9 @@
%% The "title" command has an optional parameter,
%% allowing the author to define a "short title" to be used in page headers.
\title{The Name of the Title is Hope}
+%<sigconf-i13n>\translatedtitle{french}{Le nom du titre est l'espoir}
+%<sigconf-i13n>\translatedtitle{german}{Der Name des Titels ist Hoffnung}
+%<sigconf-i13n>\translatedtitle{spanish}{El nombre del título es esperanza}
%%
%% The "author" command and its associated commands are used to define
@@ -201,6 +206,40 @@
as many of the formatting elements an author may use in the
preparation of the documentation of their work.
\end{abstract}
+%</manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
+%<*sigconf-i13n>
+
+\begin{translatedabstract}{french}
+ Un document \LaTeX\ clair et bien documenté est présenté comme un
+ article formaté pour publication par ACM dans les actes d'une
+ conférence ou parution dans une revue. Basé sur la classe de
+ document ``acmart'', ce l'article présente et explique de nombreuses
+ variations courantes, ainsi que autant d'éléments de mise en forme
+ qu'un auteur peut utiliser dans le préparation de la documentation
+ de leur travail.
+\end{translatedabstract}
+
+\begin{translatedabstract}{german}
+ Ein übersichtliches und gut dokumentiertes \LaTeX\-Dokument wird als
+ Artikel, der für die Veröffentlichung durch ACM in einem Tagungsband
+ formatiert wurde oder Zeitschriftenveröffentlichung. Basierend auf
+ der Dokumentenklasse ``acmart'', this Artikel präsentiert und
+ erklärt auch viele der gängigen Variationen so viele der
+ Formatierungselemente, die ein Autor in der verwenden darf
+ Vorbereitung der Dokumentation ihrer Arbeit.
+\end{translatedabstract}
+
+\begin{translatedabstract}{spanish}
+ Un documento \LaTeX\ claro y bien documentado se presenta como un
+ artículo formateado para su publicación por ACM en las actas de una
+ conferencia o publicación de una revista. Basado en la clase de
+ documento ``acmart'', este artículo presenta y explica muchas de las
+ variaciones comunes, así como tantos de los elementos de formato que
+ un autor puede usar en el preparación de la documentación de su
+ trabajo.
+ \end{translatedabstract}
+%</sigconf-i13n>
+%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
%%
%% The code below is generated by the tool at http://dl.acm.org/ccs.cfm.
@@ -240,9 +279,16 @@
%% Keywords. The author(s) should pick words that accurately describe
%% the work being presented. Separate the keywords with commas.
\keywords{datasets, neural networks, gaze detection, text tagging}
-
-%</manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf>
-%<*sigconf|authordraft|sigplan|acmsmall-conf>
+%<sigconf-i13n>\translatedkeywords{french}{ensembles de données,
+%<sigconf-i13n> réseaux de neurones,
+%<sigconf-i13n> détection du regard, marquage de texte}
+%<sigconf-i13n> \translatedkeywords{german}{Datensätze,
+%<sigconf-i13n> neuronale Netze, Blickerkennung, Text-Tagging}
+%<sigconf-i13n> \translatedkeywords{spanish}{conjuntos de datos,
+%<sigconf-i13n> redes neuronales, detección de mirada, etiquetado de texto}
+
+%</manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
+%<*sigconf|authordraft|sigplan|acmsmall-conf|sigconf-i13n>
%% A "teaser" image appears between the author and affiliation
%% information and the body of the document, and typically spans the
%% page.
@@ -253,8 +299,8 @@
seats. Ichiro Suzuki preparing to bat.}
\label{fig:teaser}
\end{teaserfigure}
-%</sigconf|authordraft|sigplan|acmsmall-conf>
-%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf>
+%</sigconf|authordraft|sigplan|acmsmall-conf|sigconf-i13n>
+%<*manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
%%
%% This command processes the author and affiliation and title
@@ -350,6 +396,8 @@ source file:
%<sigplan>\documentclass[sigplan,screen]{acmart}
%<sigchi>\documentclass[sigchi]{acmart}
%<sigchi-a>\documentclass[sigchi-a]{acmart}
+%<sigconf-i13n>\documentclass[sigconf, language=french,
+%<sigconf-i13n>language=german, language=spanish, language=english]{acmart}
\end{verbatim}
@@ -744,6 +792,30 @@ and note that in the appendix, sections are lettered, not
numbered. This document has two appendices, demonstrating the section
and subsection identification method.
+\section{Multi-language papers}
+
+Papers may be written in languages other than English or include
+titles, subtitles, keywords and abstracts in different languages (as a
+rule, a paper in a language other than English should include an
+English title and an English abstract). Use \verb|language=...| for
+every language used in the paper. The last language indicated is the
+main language of the paper. For example, a French paper with
+additional titles and abstracts in English and German may start with
+the following command
+\begin{verbatim}
+\documentclass[sigconf, language=english, language=german,
+ language=french]{acmart}
+\end{verbatim}
+
+The title, subtitle, keywords and abstract will be typeset in the main
+language of the paper. The commands \verb|\translatedXXX|, \verb|XXX|
+begin title, subtitle and keywords, can be used to set these elements
+in the other languages. The environment \verb|translatedabstract| is
+used to set the translation of the abstract. These commands and
+environment have a mandatory first argument: the language of the
+second argument. See \verb|sample-sigconf-i13n.tex| file for examples
+of their usage.
+
\section{SIGCHI Extended Abstracts}
The ``\verb|sigchi-a|'' template style (available only in \LaTeX\ and
@@ -807,4 +879,4 @@ rhoncus. Maecenas eu arcu ac neque placerat aliquam. Nunc pulvinar
massa et mattis lacinia.
\end{document}
-%</manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf>
+%</manuscript|acmsmall|acmsmall-submission|acmlarge|acmtog|sigconf|authordraft|sigplan|sigchi|sigchi-a|acmsmall-conf|sigconf-i13n>
diff --git a/macros/latex/contrib/acmart/samples/samples.ins b/macros/latex/contrib/acmart/samples/samples.ins
index 64a6513fe4..7c5c974a66 100644
--- a/macros/latex/contrib/acmart/samples/samples.ins
+++ b/macros/latex/contrib/acmart/samples/samples.ins
@@ -18,5 +18,6 @@
\file{sample-lualatex.tex}{\from{samples.dtx}{sigconf}}
\file{sample-sigplan.tex}{\from{samples.dtx}{sigplan}}
\file{sample-acmsmall-conf.tex}{\from{samples.dtx}{acmsmall-conf}}
+ \file{sample-sigconf-i13n.tex}{\from{samples.dtx}{sigconf-i13n}}
}
diff --git a/macros/latex/contrib/atendofenv/LICENSE b/macros/latex/contrib/atendofenv/LICENSE
new file mode 100644
index 0000000000..fdddb29aa4
--- /dev/null
+++ b/macros/latex/contrib/atendofenv/LICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <https://unlicense.org>
diff --git a/macros/latex/contrib/atendofenv/README.md b/macros/latex/contrib/atendofenv/README.md
new file mode 100644
index 0000000000..7d3e3cced3
--- /dev/null
+++ b/macros/latex/contrib/atendofenv/README.md
@@ -0,0 +1,24 @@
+# Package `atendofenv`
+
+A LaTeX package to allow adding a custom symbol at the end of an environment
+(e.g. theorems, definitions, remarks)
+
+## Usage
+
+To add a small triangle at the end of a theorem, simply insert this after
+declaring the `theorem` environment with `\newtheorem`.
+
+```tex
+ \AtEndOfEnv{theorem}{$\triangleleft$}
+```
+
+## Dependencies
+- amsthm (for the QED stack)
+- letltxmacro (for saving existing macros)
+
+
+## Maintainer
+Fangyi Zhou <me+ctan@fangyi.io>
+
+## Licence
+The Unlicense
diff --git a/macros/latex/contrib/atendofenv/atendofenv.dtx b/macros/latex/contrib/atendofenv/atendofenv.dtx
new file mode 100644
index 0000000000..161db37603
--- /dev/null
+++ b/macros/latex/contrib/atendofenv/atendofenv.dtx
@@ -0,0 +1,149 @@
+% \iffalse meta-comment
+% This is free and unencumbered software released into the public domain.
+%
+% Anyone is free to copy, modify, publish, use, compile, sell, or
+% distribute this software, either in source code form or as a compiled
+% binary, for any purpose, commercial or non-commercial, and by any
+% means.
+%
+% In jurisdictions that recognize copyright laws, the author or authors
+% of this software dedicate any and all copyright interest in the
+% software to the public domain. We make this dedication for the benefit
+% of the public at large and to the detriment of our heirs and
+% successors. We intend this dedication to be an overt act of
+% relinquishment in perpetuity of all present and future rights to this
+% software under copyright law.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+% IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+% OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+% OTHER DEALINGS IN THE SOFTWARE.
+%
+% For more information, please refer to <https://unlicense.org>
+% \fi
+
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{atendofenv}[2022/02/23 v0.1 Initial Version]
+%<package>\RequirePackage{amsthm}
+%<package>\RequirePackage{letltxmacro}
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{mathpazo}
+\usepackage[scale=0.85]{FiraMono}
+\usepackage{FiraSans}
+\usepackage[a4paper, margin=3cm]{geometry}
+\usepackage{indentfirst}
+\usepackage[hidelinks]{hyperref}
+\usepackage{atendofenv}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{atendofenv.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{0}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \GetFileInfo{atendofenv.sty}
+%
+% \title{At End of Env}
+% \author{Fangyi Zhou}
+% \maketitle
+%
+% \section{Motivation}
+% The \texttt{amsthm} package conveniently provides environments for
+% declaring theorems and friends.
+% By default, the \texttt{proof} environment inserts a
+% \href{https://en.wikipedia.org/wiki/Q.E.D.}{QED} symbol at the end of
+% environment.
+% It is sometimes also desirable to insert a similar symbol at the end of other
+% environments, e.g.~at the end of a definition or a remark, which motivates
+% this package.
+%
+% \section{Usage}
+% Let us begin with defining a theorem environment with \texttt{amsthm}:
+% \newtheorem{theorem}{Theorem}
+% \begin{verbatim}
+% \newtheorem{theorem}{Theorem}
+% \end{verbatim}
+% And we can create a theorem like this:
+% \begin{verbatim}
+% \begin{theorem}
+% This is a long theorem that will be very long, and it will be helpful if I
+% can add a symbol at the end of it to mark its end.
+% \end{theorem}
+% \end{verbatim}
+% \begin{theorem}
+% This is a long theorem that will be very long, and it will be helpful if I
+% can add a symbol at the end of it to mark its end.
+% \end{theorem}
+% To do so, simply put after defining a theorem environment:
+% \AtEndOfEnv{theorem}{$\triangleleft$}
+% \begin{verbatim}
+% \AtEndOfEnv{theorem}{$\triangleleft$}
+% \end{verbatim}
+% Now theorems look like this:
+% \begin{theorem}
+% This is a long theorem that will be very long, and it will be helpful if I
+% can add a symbol at the end of it to mark its end.
+% \end{theorem}
+% \noindent
+% \textbf{Q:} \emph{But, couldn't I change tweak the style of theorems when defining them?}
+%
+% \noindent
+% \textbf{A:} Of course, but sometimes they are defined by a class file (e.g.~from
+% publishers), and tweaking class files may be a sin in many situations.
+%
+% \section{Implementation}
+% \begin{macrocode}
+\newcommand{\AtEndOfEnv}[2]{
+% \end{macrocode}
+% We first check whether the environment is defined. If so, save the original
+% macros; otherwise report an error.
+% \begin{macrocode}
+ \ifcsname #1\endcsname
+ \expandafter\LetLtxMacro\csname aeoe@old#1\expandafter\endcsname\csname #1\endcsname
+ \else
+ \PackageError{atendofenv}{Environment #1 undefined}{Check the environment
+ name passed to AtEndOfEnv}
+ \fi
+ \ifcsname end#1\endcsname
+ \expandafter\LetLtxMacro\csname aeoe@oldend#1\expandafter\endcsname\csname end#1\endcsname
+ \else
+ \PackageError{atendofenv}{Environment #1 undefined}{Check the environment
+ name passed to AtEndOfEnv}
+ \fi
+% \end{macrocode}
+% Then we redefined the environment, and use the QED stack of \texttt{amsthm}
+% to get a symbol at the end.
+% \begin{macrocode}
+ \renewenvironment{#1}
+ {\pushQED{\qed}\renewcommand{\qedsymbol}{#2}\expandafter\csname aeoe@old#1\endcsname}
+ {\popQED\expandafter\csname aeoe@oldend#1\endcsname}
+}
+% \end{macrocode}
+% \Finale
diff --git a/macros/latex/contrib/atendofenv/atendofenv.ins b/macros/latex/contrib/atendofenv/atendofenv.ins
new file mode 100644
index 0000000000..400f095914
--- /dev/null
+++ b/macros/latex/contrib/atendofenv/atendofenv.ins
@@ -0,0 +1,48 @@
+\input docstrip.tex
+\keepsilent
+\usedir{tex/latex/atendofenv}
+\preamble
+This is a generated file.
+
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <https://unlicense.org>
+\endpreamble
+
+\generate{\file{atendofenv.sty}{\from{atendofenv.dtx}{package}}}
+
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space atendofenv.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file atendofenv.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile
+
diff --git a/macros/latex/contrib/microtype/README.md b/macros/latex/contrib/microtype/README.md
index 314a9165e7..fadf68236d 100644
--- a/macros/latex/contrib/microtype/README.md
+++ b/macros/latex/contrib/microtype/README.md
@@ -4,7 +4,7 @@ The `microtype` package
**Subliminal refinements towards typographical perfection**
- (v3.0b -- 2021/12/10)
+ (v3.0c -- 2022/02/22)
Overview
@@ -58,7 +58,7 @@ To install the package, use one of the following methods
- To use the latest development version, clone the github repository at
`https://github.com/schlcht/microtype` and run `make`
- (or just `pdflatex microtype.ins` to generate the run files).
+ (or just `latex microtype.ins` to generate the run files).
License
@@ -67,7 +67,7 @@ License
This work may be distributed and/or modified under the conditions of the
LaTeX Project Public License, either version 1.3c of this license or (at
your option) any later version. The latest version of this license is in:
-http://www.latex-project.org/lppl.txt, and version 1.3c or later is part
+https://www.latex-project.org/lppl.txt, and version 1.3c or later is part
of all distributions of LaTeX version 2005/12/01 or later.
This work has the LPPL maintenance status 'maintained'.
@@ -82,4 +82,4 @@ provided that: (1) the original copyright statement is not removed, and
(2) the identification string is changed.
------------------------------------------------------
-Copyright (c) 2004--2021 R Schlicht `<w.m.l@gmx.net>`
+Copyright (c) 2004--2022 R Schlicht `<w.m.l@gmx.net>`
diff --git a/macros/latex/contrib/microtype/microtype-code.pdf b/macros/latex/contrib/microtype/microtype-code.pdf
index c09c7e3676..0d32629722 100644
--- a/macros/latex/contrib/microtype/microtype-code.pdf
+++ b/macros/latex/contrib/microtype/microtype-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/microtype/microtype-utf.dtx b/macros/latex/contrib/microtype/microtype-utf.dtx
index af3dbed51d..67d8566f19 100644
--- a/macros/latex/contrib/microtype/microtype-utf.dtx
+++ b/macros/latex/contrib/microtype/microtype-utf.dtx
@@ -3,12 +3,12 @@
% ------------------------------------------------------------------------
% The `microtype' package
% Subliminal refinements towards typographical perfection
-% Copyright (c) 2004--2021 R Schlicht <w.m.l@gmx.net>
+% Copyright (c) 2004--2022 R Schlicht <w.m.l@gmx.net>
%
% This work may be distributed and/or modified under the conditions of the
% LaTeX Project Public License, either version 1.3c of this license or (at
% your option) any later version. The latest version of this license is in:
-% http://www.latex-project.org/lppl.txt, and version 1.3c or later is part
+% https://www.latex-project.org/lppl.txt, and version 1.3c or later is part
% of all distributions of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
@@ -27,7 +27,7 @@
\ProvidesFile
%</!EBGaramond>
%<*driver>
- {\jobname.dtx}[2021/12/10 v3.0b]
+ {\jobname.dtx}[2022/02/22 v3.0c]
%</driver>
%<CharisSIL> {mt-CharisSIL.cfg}[2017/07/07 v1.1 microtype config. file: Charis SIL (RS)]
%<LatinModernRoman> {mt-LatinModernRoman.cfg}[2021/02/21 v1.1 microtype config. file: Latin Modern Roman (RS)]
@@ -36,11 +36,12 @@
%<TU-basic> {mt-TU-basic.cfg}[2021/06/22 v1.1 microtype config. file: fonts with basic glyph set (RS)]
%<TU-empty> {mt-TU-empty.cfg}[2021/06/22 v1.1 microtype config. file: fonts with nonstandard glyph set (RS)]
%<*driver>
+\makeatletter
+\AddToHook{package/doc/before}{\pkgcls@targetdate=1 \def\pkgcls@targetlabel{v2}}
\documentclass[10pt,a4paper]{ltxdoc}
\usepackage{fontspec}
\usepackage{luatexbase}
\RequireLuaModule{luainputenc}
-\makeatletter
% microtype-doc.sty is 8-bit, and the following is a hack
\luatexbase@directlua{luatexbase.add_to_callback('process_input_buffer', luainputenc.fake_utf_read, 'luainputenc.fake_utf_read')}
\usepackage{microtype-doc}
@@ -58,7 +59,7 @@
\usepackage{luacode}
\tracinglostchars2
% we replace any missing characters (in Palatino) with CharisSIL
-% the lua code is mostly stolen from http://tex.stackexchange.com/a/120529 and http://tex.stackexchange.com/a/119945
+% the lua code is mostly stolen from https://tex.stackexchange.com/a/120529 and https://tex.stackexchange.com/a/119945
{\CharisSIL\footnotesize\global\expandafter\let\expandafter\fallbackfont\the\font}
\begin{luacode}
local fontcharacters = { }
diff --git a/macros/latex/contrib/microtype/microtype.dtx b/macros/latex/contrib/microtype/microtype.dtx
index 03f19a1d69..1649f7fed4 100644
--- a/macros/latex/contrib/microtype/microtype.dtx
+++ b/macros/latex/contrib/microtype/microtype.dtx
@@ -3,12 +3,12 @@
% ------------------------------------------------------------------------
% The `microtype' package
% Subliminal refinements towards typographical perfection
-% Copyright (c) 2004--2021 R Schlicht <w.m.l@gmx.net>
+% Copyright (c) 2004--2022 R Schlicht <w.m.l@gmx.net>
%
% This work may be distributed and/or modified under the conditions of the
% LaTeX Project Public License, either version 1.3c of this license or (at
% your option) any later version. The latest version of this license is in:
-% http://www.latex-project.org/lppl.txt, and version 1.3c or later is part
+% https://www.latex-project.org/lppl.txt, and version 1.3c or later is part
% of all distributions of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
@@ -37,7 +37,7 @@
%<lua-> {microtype-luatex.def}
%<xe-> {microtype-xetex.def}
%<*package|letterspace|m-t|pdf-|lua-|xe-|show>
- [2021/12/10 v3.0b
+ [2022/02/22 v3.0c
%<package> Micro-typographical refinements
%<letterspace> Robust letterspacing
%<show> Visual debugging for the microtype package
@@ -52,8 +52,8 @@
%<luafile>local microtype = microtype
%<luafile>microtype.module = {
%<luafile> name = "microtype",
-%<luafile> version = "3.0b",
-%<luafile> date = "2021/12/10",
+%<luafile> version = "3.0c",
+%<luafile> date = "2022/02/22",
%<luafile> description = "microtype module.",
%<luafile> author = "E. Roux, R. Schlicht and P. Gesang",
%<luafile> copyright = "E. Roux, R. Schlicht and P. Gesang",
@@ -80,8 +80,9 @@
%
%<*driver|docsty>
%<*driver>
-\documentclass[10pt,a4paper]{ltxdoc}
\makeatletter
+\AddToHook{package/doc/before}{\pkgcls@targetdate=1 \def\pkgcls@targetlabel{v2}}
+\documentclass[10pt,a4paper]{ltxdoc}
%</driver>
% Compiling microtype.dtx with the command line option
% --jobname=microtype-code
@@ -389,9 +390,9 @@
\ignorespaces \makeatletter \scan@allowedfalse}%
\def\subitem{\par\hangindent 15pt}%
\def\subsubitem{\subitem\hspace*{7.5pt}}}
-% change history
-% (lots of the following stolen from Tom Bombadil's answer:
-% https://tex.stackexchange.com/a/61251/7674)
+% Change history
+% based on an original idea by Tom Bombadil (https://tex.stackexchange.com/a/61251/7674),
+% but don't look too closely at the messy rest, or you'll lose all your tikz skills
%<*!docsty>
\ifcodedoc
\usepackage{tikz,pgfcalendar}
@@ -403,48 +404,98 @@
\pgfmathsetmacro{\MThistyears}{\MThistlastyear-\MThistfirstyear}
\pgfmathsetmacro{\MThistvsep}{1.75}
\pgfmathsetmacro{\MThisthshift}{3}
-\pgfmathsetmacro{\MThistnodewidth}{3mm}
\def\MThistprepare{%
- \pgfmathsetmacro{\MThistnodesep}{(\textwidth+\MThisthshift cm-\MThistnodewidth-1pt)/\theMThistitem}
+ \pgfmathsetmacro{\MThistnodesep}{(\textwidth+\MThisthshift cm+2pt)/(\theMThistitem/2+1)}% why the extra 2pt? I have no idea... probably because all this only pretends to be automatic...!
+ \pgfmathsetmacro{\MThistnodewidth}{\MThistnodesep*3/4}
+ \pgfmathsetmacro{\MThistxshift}{1.4pt}
+ \let\MThistcurrnodesep\MThistnodesep
\setcounter{MThistitem}{0}
\node[inner sep=0pt] (n-0) at (-\MThisthshift,\MThistvsep) {}; }
\let\MThistshow\@empty
\def\MThist@versiondate#1#2{% count items and reverse order
- \gpreto\MThistshow{\MT@doversion{#1}{#2}}
- \stepcounter{MThistitem}}
-\def\MT@doversion#1#2{%
- \stepcounter{MThistitem}
- \node[right=\MThistnodesep,text width=\MThistnodewidth,inner sep=1pt,outer sep=0pt,fill=theshade,align=center]
- (n-\theMThistitem) at (\MThistlastnode.west) {\hyperref[sub:changes:#1]{#1\strut}};
- \draw (n-\theMThistitem.north west) -- (n-\theMThistitem.north east);
- \draw (n-\theMThistitem.south west) -- (n-\theMThistitem.south east);
+ \ifnum\pdfmatch{([a-z])}{#1}=1
+ \gpreto\MThistshow{\MT@doversion{#1}{#2}{2}}%
+ \addtocounter{MThistitem}{1}%
+ \else
+ \gpreto\MThistshow{\MT@doversion{#1}{#2}{1}}%
+ \addtocounter{MThistitem}{2}%
+ \fi}
+\def\MThist@ifmajor{1}
+\def\MThistlastmajor{1}
+\def\MT@doversion#1#2#3{%
+ \stepcounter{MThistitem}%
+ \def\MThist@xshift{0}%
+ \ifnum#3=2
+ \ifnum\pdfmatch{([a-z])}{#1}=1
+ \edef\MThist@current{\expandafter\strip@prefix\pdflastmatch1 }%
+ \fi
+ \ifnum\MThist@ifmajor>0 \def\MThist@xshift{-\MThistxshift}\fi
+ \def\MThist@ifmajor{0}%
+ \else
+ \def\MThist@current{#1}%
+ \ifnum\MThist@ifmajor<1 \def\MThist@xshift{\MThistxshift}\fi
+ \def\MThist@ifmajor{1}%
+ \fi
+ \node[right=\MThistcurrnodesep,xshift=\MThist@xshift,outer sep=0pt,align=center,nodemajor]
+ (n-\theMThistitem) at (\MThistlastnode.west) {\hyperref[sub:changes:#1]{\MThist@current\strut}};
+ \pgfmathsetmacro{\MThistcurrnodesep}{\MThistnodesep/#3}%
+ \ifnum\MThist@ifmajor>0
+ \ifnum\theMThistitem>1
+ \draw (n-\MThistlastmajor.north west) -- ($(n-\theMThistitem.north east)-(\MThistcurrnodesep pt,0)$);
+ \draw (n-\MThistlastmajor.south west) -- ($(n-\theMThistitem.south east)-(\MThistcurrnodesep pt,0)$);
+ \edef\MThistlastmajor{\theMThistitem}%
+ \fi
+ \else
+ \draw [very thin] ($(n-\theMThistitem.north west)+(.8pt,-.9pt)$) -- ($(n-\theMThistitem.north east)-( .8pt,.9pt)$);
+ \draw [very thin] ($(n-\theMThistitem.south west)+(.8pt, .9pt)$) -- ($(n-\theMThistitem.south east)+(-.8pt,.9pt)$);
+ \fi
\MThist@splitdate#2\relax
\pgfcalendardatetojulian{\MTYear-\MTMonth-\MTDay}{\@tempcnta}
\pgfcalendardatetojulian{\MTYear-1-1}{\@tempcntb}
\advance\@tempcnta-\@tempcntb
\pgfmathsetmacro{\MTDate}{\MTYear-\MThistfirstyear+\@tempcnta/365}
\expandafter\edef\csname MThistnodetime\theMThistitem\endcsname{\MTDate}
+ \expandafter\edef\csname MThist@ifmajor\theMThistitem\endcsname{\MThist@ifmajor}
\edef\MThistlastnode{n-\theMThistitem}}
\def\MThist@splitdate#1/#2/#3\relax{\def\MTYear{#1}\def\MTMonth{#2}\def\MTDay{#3}}
\def\MThisttimeline{%
- \draw[very thick,-latex] (0,0) -- ($(\MThistlastnode.east)-(0,\MThistvsep)+(1,0)$) ;
\path (n-\theMThistitem.east); \pgfgetlastxy{\MT@tempdim}{\@tempdima};
\pgfmathsetmacro{\MThistxposition}{\MT@tempdim/28.452755}
\foreach \x in {1,...,\theMThistitem}{
\pgfmathsetmacro{\MThisttimeposition}{\MThistxposition/(\MThistlastyear-\MThistfirstyear)*\csname MThistnodetime\x \endcsname}
- \draw[rounded corners=2pt] (\MThisttimeposition,0) -- (\MThisttimeposition,0.5) -- ($(n-\x.south)-(0,0.5)$) -- (n-\x.south); }
+ \draw[rounded corners=3pt,arrowmajor]
+ (\MThisttimeposition,0) -- (\MThisttimeposition,0.5) -- ($(n-\x.south)-(0,0.5)$) -- (n-\x.south); }
+ \draw[very thick,-latex] (0,0) -- ($(\MThistlastnode.east)-(0,\MThistvsep)+(1,0)$);
\foreach \x in {0,...,\MThistyears}{
\pgfmathsetmacro{\MThistlabelposition}{\MThistxposition/(\MThistlastyear-\MThistfirstyear)*\x}
\node[below] (label-\x) at (\MThistlabelposition,-0.2) {\number\numexpr\MThistfirstyear+\x};
\draw (label-\x.north) -- ++ (0,0.2); }}
\def\PrintHistory{%
\InputIfFileExists{microtype-hist.tmp}{\let\VersionDate\MThist@versiondate\@firstofone}\@gobble
- {\hypersetup{linkcolor=thered}%
+ {\hypersetup{linkcolor=thered}%
\hspace{-\MThisthshift cm}%
- \rlap{\begin{tikzpicture}[color=thegrey,font=\fontsize{4.5}{6}\selectfont]
- \MThistprepare
- \MThistshow
- \MThisttimeline
+ \rlap{%
+ \begin{tikzpicture}[color=thegrey,font=\fontsize{4.5}{6}\selectfont,
+ nodemajor/.code={%
+ \ifnum\MThist@ifmajor>0
+ \tikzset{fill=theshade,text width=\MThistnodewidth,inner sep=1pt}
+ \else
+ \tikzset{color=theshade,line width=1.6pt,draw,fill=white,text width=\MThistnodewidth/2,
+ font=\fontsize{4}{6}\selectfont,inner sep=0.4pt}
+ \fi
+ },
+ arrowmajor/.code={%
+ \expandafter\ifnum\csname MThist@ifmajor\x\endcsname=0
+ \tikzset{shorten >=-.8pt,very thin}
+ \fi
+ }]
+ \MThistprepare
+ \MThistshow
+ \MThisttimeline
+ % borders for the last major version
+ \ifnum\MThist@ifmajor>0 \def\@tempa{0,0}\def\@tempb{0,0}\else\def\@tempa{.8pt,.6pt}\def\@tempb{.8pt,-.6pt}\fi
+ \draw (n-\MThistlastmajor.north west) -- ($(n-\theMThistitem.north east)+(\@tempa)$);
+ \draw (n-\MThistlastmajor.south west) -- ($(n-\theMThistitem.south east)+(\@tempb)$);
\end{tikzpicture}}}}
\fi
%</!docsty>
@@ -566,8 +617,9 @@
\DeclareMicrotypeSetDefault,\SetProtrusion,\SetExpansion,\SetTracking,
\SetExtraKerning,\SetExtraSpacing,\DisableLigatures,\DeclareCharacterInheritance,
\DeclareMicrotypeVariants,\DeclareMicrotypeAlias,\DeclareMicrotypeBabelHook,
- \LoadMicrotypeFile,\microtypecontext,\textmicrotypecontext,
- \textls,\lsstyle,\lslig,\leftprotrusion,\rightprotrusion,\Microtype@Hook},
+ \LoadMicrotypeFile,\microtypecontext,\textmicrotypecontext,\textls,\lsstyle,\lslig,
+ \leftprotrusion,\rightprotrusion,\noprotrusion,\noprotrusionifhmode,
+ \Microtype@Hook},
keywordstyle=[0]\color{thegreen},
keywords=[1]{protrusion,expansion,activate,DVIoutput,disable,verbose,
config,factor,auto,stretch,shrink,step,selected,unit,tracking,kerning,
@@ -606,7 +658,8 @@
{\ifcodedoc User manual\else Implementation\fi}}
%</!docsty>
\externaldocument{microtype\ifcodedoc\else-code\fi}
- \PassOptionsToPackage{nodvi}{totpages} % remove annoying log output
+ \let\r@TotPages\relax % suppress multiply defined warning
+ \PassOptionsToPackage{nodvi}{totpages} % and annoying log output
\usepackage{hyperxmp} % (hyperxmp loads totpages)
\usepackage{attachfile}
\usepackage{pdfpages}
@@ -618,12 +671,12 @@
pdfkeywords={TeX, LaTeX, pdfTeX, LuaTeX, XeTeX, typography, micro-typography,
character protrusion, margin kerning, optical alignment, font expansion,
font scaling, hz, kerning, spacing, glue, letterspacing, tracking, ligatures},
- pdfcopyright={\textcopyright\ 2004--2021 R Schlicht\textLF
+ pdfcopyright={\textcopyright\ 2004--2022 R Schlicht\textLF
This work may be distributed and/or modified under the conditions
of the LaTeX Project Public License, either version 1.3c of this
license or (at your option) any later version.\textLF
This work has the LPPL maintenance status `maintained'.},
- pdflicenseurl={http://www.latex-project.org/lppl/},
+ pdflicenseurl={https://www.latex-project.org/lppl/},
pdflang={en-GB}
}
% we no longer use {hypdestopt}, as it would break the external references
@@ -665,7 +718,7 @@
\def\codeline#1{{\itshape\link@sanitize#1-\@nil{#1}}}
\def\link@sanitize#1-#2\@nil{\link@@sanitize#1,\@nil}
\def\link@@sanitize#1,#2\@nil{\hyperlink{L:#1}}
- \def\ctanurl#1{Available from \acronym{CTAN} at \href{http://mirror.ctan.org/#1}{\nolinkurl{/#1}}}
+ \def\ctanurl#1{Available from \acronym{CTAN} at \href{https://mirror.ctan.org/#1}{\nolinkurl{/#1}}}
\def\ctanpkgurl#1{Available from \acronym{CTAN} at \href{https://www.ctan.org/pkg/#1}{\nolinkurl{pkg/#1}}}
\DeclareRobustCommand\mailto[1]{\href{mailto:#1}{\nolinkurl{#1}}}
\def\mailtoRS{\href % some PDF viewers don't like spaces:
@@ -908,9 +961,9 @@
% other extensions (see section~\ref{sec:lettersp}\ifcodedoc\space of the User manual\fi).
%
%\bigskip\noindent
-% This package is copyright \textcopyright\ 2004\kern.09em--2021 R Schlicht.
+% This package is copyright \textcopyright\ 2004\kern.09em--2022 R Schlicht.
% It may be distributed and/or modified under the conditions of the
-% \IfFileExists{lppl.tex}{\hyperref[LPPL:LPPL]}{\href{http://www.latex-project.org/lppl/}}
+% \IfFileExists{lppl.tex}{\hyperref[LPPL:LPPL]}{\href{https://www.latex-project.org/lppl/}}
% {\LaTeX\ Project Public License},
% either version~1.3c of this license or (at your option) any later version.
% This work has the <LPPL> maintenance status `maintained'.
@@ -1372,7 +1425,8 @@
%\medskip
%\Describe{Option}{babel}{true,!false}
% Loading the package with the \opt{babel} option will adjust the typesetting
-% according to the respective selected language. Read section~\ref{sec:context}
+% according to the respective selected language. This also works with the
+% \pkg{polyglossia} package. Read section~\ref{sec:context}
% for further information.
%
%\medskip
@@ -2536,7 +2590,7 @@
%
%\medskip
%\Describe{Macro}{\DeclareMicrotypeBabelHook}
-% {list of \pkg{babel} languages,context list}
+% {list of \pkg{babel}/\pkg{polyglossia} languages,context list}
% Naturally, \microtype\ does not know about the typographic specialties of
% every language. This command is a means of teaching it how to adjust the
% context when a particular language is selected. The main configuration file
@@ -2586,7 +2640,8 @@
%\medskip
%\Describe{Macro}{\lslig}{ligature}
% Since the commands \cs{textls} and \cs{lsstyle} will also evaluate the
-% `\texttt{no ligatures}' key for the respective font, you usually need not worry
+% `\texttt{no ligatures}' key for the respective font (cf.
+% section~\ref{sub:tracking}), you usually need not worry
% about protecting or breaking ligatures with most fonts. However, in certain
% situations, there may be a conflict of ligatures beginning with the same
% letter, where some of them should be inhibited, while others should not. For
@@ -2604,7 +2659,7 @@
% (namely, `\textls{\def\!#1{\textcolor{thegreen}{\lslig{#1}}}^^A
% \def\?#1{\textcolor{thered}{#1}}^^A
% \textfrak{Au\!{s:}\?{si}\!{ch}t\!{s:}lo\?{si}gkeit}}',
-% with ligatures here shown in green, inhibited ligatures in red).
+% with ligatures here highlighted in green, inhibited ligatures in red).
%
%\begin{verbatim}[morekeywords={[0]{\kern}}]
%\SetTracking[no ligatures={f}]{encoding = LY, family = yfrak}{120}
@@ -2663,7 +2718,8 @@
% ^^A Otherwise, it won't work at all
%
%
-%\section{Being pedantic about protrusion}\label{sec:pedantic}
+%\section[Being pedantic about protrusion]
+% {Being pedantic about protrusion \requires{\etex}}\label{sec:pedantic}
%
% Protrusion works well in running paragraphs, but may also be desirable
% in situations where \TeX, in contrast to human eyes, would not see a margin,^^A
@@ -2696,7 +2752,11 @@
%\DescribeMacro{\noprotrusion}
% is a command from \LaTeX\ proper, so it's just mentioned apropos.
% When added to the beginning or end of a line, protrusion at the respective
-% margin will be prevented.
+% margin will be prevented.\linebreak
+%\DescribeMacro{\noprotrusionifhmode}
+% While the latter command will always leave vertical mode first
+% (which in some situations may result in unwanted vertical space),
+% this variant prevents protrusion only if already in horizontal mode.
%
%\medskip\noindent
% The \microtype\ package defines a number of patches in order to get protrusion
@@ -2713,20 +2773,24 @@
% line above -- are neatly aligned; without the patch, the first A would be
% slightly shifted to the right.
% This patch also affects environments such as |quote| or |flushleft|, which are
-% implemented in \LaTeX\ as lists with an implicit empty item.
+% implemented in \LaTeX\ as lists starting with an implicit empty item.
% \MTsupp{standard classes, \cls{beamer}, \cls{simplecv}}
-% \item[toc] Adds protrusion at the left margin of sectioning titles in the Table of Contents
+% \item[toc] Adds protrusion at the left margins of sectioning titles in the Table of Contents
% and similar Lists of \meta{Things}.
% \MTsupp{standard classes, \cls{memoir}}
-% \item[footnote] Protrusion for the first line of footnote text (only visible when
-% the footnote text is set in block paragraphs, like in this document).
+% \item[footnote] Protrusion for the first line of footnote text (visible in particular
+% when the footnote text is set in block paragraphs, like in this document).
% \MTsupp{standard classes, \cls{memoir}, <\cls{KOMA}> classes, \pkg{hyperref}}
-% \item[eqnum] Protrusion for equation numbers on either side.
+% \item[eqnum] Protrusion for equation numbers on either side. If you are using the
+% interface provided by \pkg{mathtools}, insert the relevant commands
+% yourself, \eg:
+%\begin{verbatim}[belowskip=-\smallskipamount]
+%\newtagform{mytag}[\textbf]{\leftprotrusion{(}}{\rightprotrusion{)}}
+%\end{verbatim}^^A
% \MTsupp{standard classes, \pkg{amsmath}, \cls{IEEEtran}}
%\endlist\endgroup
%
-%\enlargethispage{\baselineskip} ^^A layout
-%\noindent
+%\medskip\noindent
% By default, all of the above patches will be applied. Should this not be desired,
% or in case you are running into problems, you may prevent or undo the patches through
% the \textcolor{thered}{\opt{patch}} and \textcolor{thered}{\opt{nopatch}} options,
@@ -2741,8 +2805,9 @@
%
%\medskip\noindent
%\leavevmode\llap{\itshape\color{thegrey}Help wanted!\hskip\marginparsep}^^A
-%\leftprotrusion These pedantic protrusion patches are work-in-progress. I suspect many use cases
-% where they either do not work as advertised, or worse, where they may even lead to errors.
+%\leftprotrusion These pedantic protrusion patches are still work-in-progress.
+% I suspect many use cases where they either do not work as advertised,
+% or worse, where they may even lead to errors.
% Also, I am aware that there are myriads of classes and packages out there that
% modify internal commands in their own ways, possibly rendering the patches useless.
% Finally, there will certainly be many more situations where protrusion would be appropriate.
@@ -2750,7 +2815,7 @@
% so I welcome any suggestions and problem reports you may have.
%
%
-%\section{Creating configurations and contributing}\label{sec:contrib} ^^A [also referencd in microtype.ins]
+%\section{Creating configurations and contributing}\label{sec:contrib} ^^A [also referenced in microtype.ins]
%
% I would also be glad to include configuration files for more fonts. Preparing such
% configurations is quite a time-consuming task and requires a lot of patience.
@@ -2934,7 +2999,7 @@
% the settings will only work reliably if you specify the |inputenc| key.
%\changes{v2.3a}{2008/02/25}{add hint about \pkg{babel} having to be loaded first}
% \item When loading the package with the \opt{babel} option, you must load
-% the \pkg{babel} package before \microtype.
+% the \pkg{babel} or \pkg{polyglossia} package before \microtype.
%\changes{v2.5}{2012/09/11}{add hint about \luatex\ compatibility}
% \item Before this package was fully compatible with \luatex, the following
% method of enabling expansion and protrusion with the \cite{fontspec}
@@ -2981,7 +3046,6 @@
% possible in <DVI> mode with \pdftex, it requires that all instances of the expanded fonts
% exist on your \TeX\ system.
%
-%\pagebreak ^^A layout
% \item
%\begin{verbatim}
%! pdfTeX error (font expansion): auto expansion is only possible with scalable fonts.
@@ -2999,7 +3063,7 @@
%Package microtype Warning: Unknown slot number of character
%(microtype) `<\k A>'
%(microtype) in font encoding `TU' in inheritance list
-%(microtype) `microtype.cfg/406(protrusion)'.
+%(microtype) `"\csname MT@pr@inh@TU////\endcsname"'.
%\end{verbatim}
%\changes{v3.0}{2021/06/26}{add hint about unknown slot numbers}
% If you receive lots of warnings like the above, and you are running \luatex\
@@ -3071,7 +3135,6 @@
% \file{pdflatex.ini} (2.5 or newer).
%
% \item
-%\pagebreak ^^A layout
%\begin{verbatim}
%pdfTeX warning (font expansion): font should be expanded before its first use
%\end{verbatim}
@@ -3086,7 +3149,7 @@
% If you wonder how this document was created, just have a look at the source
% code in \file{microtype.dtx}, which is either already included in your \TeX\
% distribution, or else can be downloaded from
-% \href{http://mirror.ctan.org/macros/latex/contrib/microtype/}
+% \href{https://mirror.ctan.org/macros/latex/contrib/microtype/}
% {\acronym{CTAN}}.
% For the source code of the logo on the title page and of the letterspacing
% sample from section~\ref{sub:tracking}, see the Implementation part,
@@ -3149,8 +3212,9 @@
% original meanings of all activated characters, thus allowing for these
% characters to be used in the configuration files.
% \contributor Peter Wilson <herries.press\at earthlink.net>
-% kindly provided a hook in his \pkg{ledmac}/\pkg{ledpar} packages, so that
-% critical editions can finally also benefit from character protrusion.
+% kindly provided a hook in his \pkg{ledmac}/\pkg{ledpar} packages
+% (inherited by their successors \pkg{reledmac}\slash\pkg{reledpar}),
+% so that critical editions can also benefit from character protrusion.
% Likewise,
% \contributor Donald Arseneau <asnd\at triumf.ca>
% patched his \pkg{shapepar} package to accommodate protrusion.
@@ -3257,14 +3321,19 @@
% `\contributor tnull <@\at @>', ^^A https://tex.stackexchange.com/users/91987/tnull
% `\contributor azur <@\at @>', ^^A https://tex.stackexchange.com/users/216369/azur
% `\contributor Safron <@\at @>', ^^A https://tex.stackexchange.com/users/149123/safron
+% \contributor Joseph Wright <@\at @>, ^^A https://tex.stackexchange.com/users/73/joseph-wright
% \contributor Gustavo Barros <@\at @>, ^^A https://tex.stackexchange.com/users/105447/gusbrs
% \contributor Torsten Schuetze <torsten.schuetze\at gmx.net>,
% `\contributor florian <@\at @>', ^^A https://tex.stackexchange.com/users/172863/florian
% \contributor Liang-Bo Wang <@\at @>, ^^A https://github.com/ccwang002
% `\contributor MisterFiLou <@\at @>', ^^A https://github.com/MisterFiLou
-% \contributor Akira Yokosawa <@\at @> ^^A https://github.com/akiyks
+% \contributor Akira Yokosawa <@\at @>, ^^A https://github.com/akiyks
+% `\contributor theufman <@\at @>', ^^A https://github.com/theufman
+% `\contributor frafl <@\at @>', ^^A https://github.com/frafl
+% \contributor Joel Coffman <@\at @>, ^^A https://github.com/joel-coffman
+% `\contributor user182849 <@\at @>' ^^A https://tex.stackexchange.com/users/182849/user182849
% and
-% `\contributor theufman <@\at @>'. ^^A https://github.com/theufman
+% `\contributor NightShade <@\at @>'. ^^A https://tex.stackexchange.com/users/260836/nightshade
%
%\iffalse
%\section{History of micro-typography} ^^A some time ...
@@ -3298,85 +3367,81 @@
%\begin{thebibliography}{}
% \bibitem[Th\`anh 2000]{ThanhThesis}
% \thanh, `Micro-typographic extensions to the \TeX\ typesetting system',
-% \newblock Diss. Masaryk University Brno 2000,
-% \newblock in: \textit{TUGBoat}, vol.~21 (2000), no.~4, pp.~317--434.
-% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb21-4/tb69thanh.pdf})
+% Diss. Masaryk University Brno 2000,
+% in: \textit{TUGBoat}, vol.~21 (2000), no.~4, pp.~317--434.
+% (Online at \url{https://www.tug.org/TUGboat/Articles/tb21-4/tb69thanh.pdf})
%
%\iffalse ^^A obsolete
% \bibitem[Th\`anh 2001]{ThanhTUG}
% \thanh, `Margin Kerning and Font Expansion with \pdftex',
-% \newblock in: \textit{TUGBoat}, vol.~22 (2001), no.~3:
-% `Proceedings of the 2001 Annual Meeting', pp.~146--148.
-% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb22-3/tb72thanh.pdf})
+% in: \textit{TUGBoat}, vol.~22 (2001), no.~3:
+% `Proceedings of the 2001 Annual Meeting', pp.~146--148.
+% (Online at \url{https://www.tug.org/TUGboat/Articles/tb22-3/tb72thanh.pdf})
%\fi
%
% \bibitem[Th\`anh 2004]{ThanhPracTeX}
% \thanh, `Micro-typographic extensions of \pdftex\ in practice',
-% \newblock in: \textit{TUGBoat}, vol.~25 (2004), no.~1:
-% `Proceedings of the Practical \TeX\ 2004 Conference', pp.~35--38.
-% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb25-1/thanh.pdf})
+% in: \textit{TUGBoat}, vol.~25 (2004), no.~1:
+% `Proceedings of the Practical \TeX\ 2004 Conference', pp.~35--38.
+% (Online at \url{https://www.tug.org/TUGboat/Articles/tb25-1/thanh.pdf})
%
%\iffalse
% \bibitem[Th\`anh 2005]{ThanhEuroTeX05}
% \thanh, `Experiences with micro-typographic extensions of \pdftex\ in practice',
-% \newblock in: Euro\TeX\ 2005 Proceedings
-% ^^A 15th~Annual Meeting of the European \TeX\ Users,
-% ^^A March~7 -- March~11, 2005, Abbaye des Pr\'emontr\'es, Pont-\`a-Mousson,
-% [=~\textit{TUGBoat}, vol.~27 (2006), no.~0],
-% pp.~159--164.
-% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb27-0/thanh.pdf})
-% ^^A = \url{http://www.dante.de/dante/events/eurotex/papers/TUT07.pdf}
+% in: Euro\TeX\ 2005 Proceedings
+% ^^A 15th~Annual Meeting of the European \TeX\ Users,
+% ^^A March~7 -- March~11, 2005, Abbaye des Pr\'emontr\'es, Pont-\`a-Mousson,
+% [=~\textit{TUGBoat}, vol.~27 (2006), no.~0], pp.~159--164.
+% (Online at \url{https://www.tug.org/TUGboat/Articles/tb27-0/thanh.pdf})
%\fi
%
% \bibitem[Th\`anh 2008]{ThanhEuroTeX07}
% \thanh, `Font-specific issues in \pdftex',
-% \newblock in: \textit{TUGBoat}, vol.~29 (2008), no.~1:
-% `EuroBacho\TeX\ 2007 Proceedings', pp.~36--41.
-% \newblock (Online at \url{http://www.tug.org/TUGboat/Articles/tb29-1/tb91thanh-fonts.pdf})
+% in: \textit{TUGBoat}, vol.~29 (2008), no.~1:
+% `EuroBacho\TeX\ 2007 Proceedings', pp.~36--41.
+% (Online at \url{https://www.tug.org/TUGboat/Articles/tb29-1/tb91thanh-fonts.pdf})
%
% \bibitem[\pdftex\ manual]{pdftexman}
% \thanh, Sebastian Rahtz, Hans Hagen, Hartmut Henkel, Pawe\l\ Jackowski, Martin Schr\"oder, Karl Berry,
% \emph{The \pdftex\ user manual},
-% \newblock 18~February 2021.
-% \newblock (\ctanurl{systems/doc/pdftex/manual/pdftex-a.pdf})
-% ^^A latest version at \url{http://sarovar.org/projects/pdftex/}
-% ^^A or even \url{http://foundry.supelec.fr/scm/?group_id=23}
+% 18~February 2021.
+% (\ctanurl{systems/doc/pdftex/manual/pdftex-a.pdf})
%
% \bibitem[Fontname]{fontname}
% Karl Berry, \emph{Fontname: Filenames for \TeX\ fonts},
-% \newblock July 2009.
-% \newblock (\ctanurl{info/fontname/fontname.pdf})
+% July 2009.
+% (\ctanurl{info/fontname/fontname.pdf})
%
% \bibitem[\LaTeXe\ font selection]{fntguide}
% \LaTeX\ Project Team, \emph{\LaTeXe\ font selection},
-% \newblock March 2021.
-% \newblock (\ctanurl{macros/latex/base/fntguide.pdf})
+% March 2021.
+% (\ctanurl{macros/latex/base/fntguide.pdf})
%
% \bibitem[\pkg{fontspec}]{fontspec}
% Will Robertson,
-% \emph{The \pkg{fontspec} package: Font selection for \xe\LaTeX\ and Lua\LaTeX},
-% \newblock 21~February 2020.
-% \newblock (\ctanpkgurl{fontspec})
+% \emph{The \pkg{fontspec} package: Font selection for \xe\LaTeX\ and Lua\LaTeX},
+% 15~January 2022.
+% (\ctanpkgurl{fontspec})
%
% \bibitem[\pkg{luaotfload}]{luaotfload}
% \LaTeX3 Project, \'Elie Roux, Khaled Hosny, Philipp Gesang, Ulrike Fischer, Marcel Kr\"uger,
-% \emph{The \pkg{luaotfload} package},
-% \newblock 21~May 2021.
-% \newblock (\ctanpkgurl{luaotfload})
+% \emph{The \pkg{luaotfload} package},
+% 21~May 2021.
+% (\ctanpkgurl{luaotfload})
%
% \bibitem[\pkg{pdfcprot}]{pdfcprot}
% Carsten Schurig, Tobias Schlemmer, \emph{The \pkg{pdfcprot}|.sty| package},
-% \newblock 10 June 2005.
-% \newblock (\ctanpkgurl{pdfcprot})
+% 10 June 2005.
+% (\ctanpkgurl{pdfcprot})
%
% \bibitem[\pkg{soul}]{soul}
% Melchior Franz, \emph{The \pkg{soul} package},
-% \newblock 17 November 2003.
-% \newblock (\ctanpkgurl{soul}).
+% 17 November 2003.
+% (\ctanpkgurl{soul}).
%\changes{v2.3a}{2008/01/06}{mention \pkg{soulutf8}}
-% \newblock See also Heiko Oberdiek's extension of this package,
-% \pkg{soulutf8}, which adds Unicode support.
-% \newblock (\ctanpkgurl{soulutf8})
+% See also Heiko Oberdiek's extension of this package,
+% \pkg{soulutf8}, which adds Unicode support.
+% (\ctanpkgurl{soulutf8})
%
%\end{thebibliography}
%
@@ -3415,6 +3480,8 @@
%
%\VersionDate{\expandafter\@gobble\fileversion}{\filedate}
%
+%\VersionDate{3.0b}{2021/12/10}
+%
%\VersionDate{3.0a}{2021/12/02}
%
%\Version{3.0}{2021/10/31}
@@ -3772,8 +3839,8 @@
%^^A\DoNotIndex{\font,\fontdimen,\fontname,\nullfont,\sfcode,\spacefactor,
%^^A \spaceskip,\xspaceskip} ^^A tex
%\DoNotIndex{\currentgrouplevel,\currentgrouptype,\currentiflevel,\detokenize,
-% \dimexpr,\eTeXversion,\ifcsname,\ifdefined,\lastnodetype,\numexpr,
-% \scantokens,\unexpanded}
+% \dimexpr,\eTeXversion,\ifcsname,\ifdefined,\lastnodetype,\numexpr,\protected,
+% \unexpanded}
%^^A\DoNotIndex{\fontcharwd,\iffontchar} ^^A e-tex
%\DoNotIndex{\pdfannot,\pdfmatch,\pdfoutput,\pdfstrcmp,
% \pdftexrevision,\pdftexversion}
@@ -3784,7 +3851,7 @@
%\DoNotIndex{\XeTeXversion,\XeTeXrevision,\strcmp}
%^^A\DoNotIndex{\XeTeXcharglyph,\XeTeXfonttype,\XeTeXglyph,\XeTeXglyphindex,
%^^A \XeTeXglyphname,\XeTeXlastfontchar,\XeTeXprotrudechars} ^^A xetex
-%\DoNotIndex{\directlua,\glet,\luatexversion}
+%\DoNotIndex{\directlua,\glet,\luatexversion,\pdfextension,\pdffeedback}
%^^A\DoNotIndex{\adjustspacing,\copyfont,\expandglyphsinfont,
%^^A \ignoreligaturesinfont,\outputmode,\protrudechars,\tracingfonts} ^^A luatex
%\DoNotIndex{\eplain,\usepkg@pkg} ^^A eplain
@@ -3792,13 +3859,13 @@
% \@currname,\@defaultunits,\@elt,\@empty,\@eqnnum,\@expandtwoargs,\@fileswfalse,
% \@firstofone,\@firstoftwo,\@footnotetext,\@gobble,\@gobbletwo,\@ifclassloaded,
% \@ifl@t@r,\@ifl@aded,\@ifpackagelater,\@ifpackageloaded,\@ifstar,\@ifundefined,\@item,
-% \@let@token,\@m,\@M,\@makeother,\@minus,\@nameuse,\@ne,\@newlistfalse,\@nil,\@nnil,
-% \@onelevel@sanitize,\@onlypreamble,\@pkgextension,\@plus,\@ptionlist,\@removeelement,
-% \@secondoftwo,\@spaces,\@sptoken,\@tempa,\@tempb,\@tempc,\@tempcnta,\@tempcntb,\@tempdima,
-% \@typeset@protect,\@undefined,\@unprocessedoptions,\@unusedoptionlist,\@xobeysp,
-% \check@icr,\cl@@ckpt,\color@begingroup,\color@endgroup,\g@addto@macro,\hmode@bgroup,\m@ne,
-% \maybe@ic,\maybe@ic@,\nfss@text,\not@math@alphabet,\on@line,\p@,\set@display@protect,
-% \strip@prefix,\strip@pt,\@text@composite,\tw@,\z@,\z@skip,\zap@space,
+% \@let@token,\@m,\@M,\@makeother,\@minus,\@mpfootnotetext,\@nameuse,\@ne,\@newlistfalse,
+% \@nil,\@nnil,\@onelevel@sanitize,\@onlypreamble,\@pkgextension,\@plus,\@ptionlist,
+% \@removeelement,\@secondoftwo,\@spaces,\@sptoken,\@tempa,\@tempb,\@tempc,\@tempcnta,
+% \@tempcntb,\@tempdima,\@typeset@protect,\@undefined,\@unprocessedoptions,\@unusedoptionlist,
+% \@xobeysp,\check@icr,\cl@@ckpt,\color@begingroup,\color@endgroup,\g@addto@macro,
+% \hmode@bgroup,\m@ne,\maybe@ic,\maybe@ic@,\nfss@text,\not@math@alphabet,\on@line,
+% \p@,\set@display@protect,\strip@prefix,\strip@pt,\@text@composite,\tw@,\z@,\z@skip,\zap@space,
% \active,\documentclass,\dotfill,\fbox,\fboxrule,\fboxsep,\fmtversion,\footnotesize,
% \leavevmode,\llap,\makeatletter,\makebox,\mathrm,\mbox,\medskip,\newbox,\newcommand,
% \newcount,\newdimen,\newif,\newline,\newskip,\newtoks,\nobreak,\nonfrenchspacing,
@@ -3807,7 +3874,7 @@
% \value,\AddToHook,\AtBeginDocument,\AtEndOfPackage,\CheckCommand,\CurrentOption,
% \DeclareOption,\DeclareRobustCommand,\IfFileExists,\IfFormatAtLeastTF,\InputIfFileExists,
% \MessageBreak,\PackageError,\PackageInfo,\PackageWarning,\PassOptionsToPackage,
-% \ProcessOptions,\RequirePackage,\@@enc@update,\UnicodeEncodingName}
+% \ProcessOptions,\RawNoindent,\RequirePackage,\@@enc@update,\UnicodeEncodingName}
%^^A\DoNotIndex{\add@accent,\cf@encoding,\curr@fontshape,\define@newfont,
%^^A \do@subst@correction,\f@encoding,\f@family,\f@size,\font@name,\fontencoding,
%^^A \fontseries,\fontshape,\glb@currsize,\glb@settings,\normalfont,\pickup@font,
@@ -3815,9 +3882,10 @@
%\DoNotIndex{\normalpdfoutput,\normalpdftexversion,\normalpdftexrevision} ^^A tex live 2004
%\DoNotIndex{\foreign@language,\languagename,\select@language,\shorthandoff} ^^A babel
%\DoNotIndex{\percentsign} ^^A babel/spanish,galician,mexican
+%\DoNotIndex{\polyglossia@language@switched} ^^A polyglossia
%\DoNotIndex{\CJK@ifundefined,\CJK@plane,\CJK@temp,\CJK@addcmap} ^^A CJK,CJKutf8
%\DoNotIndex{\color} ^^A color
-%\DoNotIndex{\@disablequotes} ^^A csquotes
+%\DoNotIndex{\csqQQ,\csq@bqgroup,\csq@eqgroup,\@disablequotes} ^^A csquotes
%\DoNotIndex{\ifHy@hyperfootnotes,\pdfstringdefDisableCommands,\pdfstringdefWarn} ^^A hyperref
%\DoNotIndex{\ifpdf,\ifetex,\ifluatex,\ifxetex} ^^A ifpdf/iftex
%\DoNotIndex{\@inpenc@undefined@,\IeC,\inputencoding,\inputencodingname} ^^A inputenc
@@ -3987,6 +4055,8 @@
\newcommand*\textmicrotypecontext[2]{#2}
\newcommand\leftprotrusion[1]{#1}
\newcommand\rightprotrusion[1]{#1}
+\providecommand*\noprotrusion{}
+\newcommand*\noprotrusionifhmode{}
\@ifpackageloaded{letterspace}{\let\MT@textls\relax}{%
%</package>
\newcommand*\lsstyle{}
@@ -4157,6 +4227,8 @@
% requires a viewer for <PDF> version 1.5 (you could use |/Text| if you're
% using an older <PDF> viewer).
% \begin{macrocode}
+\ifx\directlua\@undefined \else
+ \protected\def\pdfannot{\pdfextension annot }\fi
\def\MT@show@pdfannot#1{%
\ifnum\tracingmicrotypeinpdf<#1 \else
\iftracingmicrotypeinpdfall\leavevmode\fi
@@ -4904,14 +4976,20 @@
^^X\RequirePackage{etoolbox}
% \end{macrocode}
%\begin{macro}{\MT@toks}
-% We need a token register.
+% We need a token register,
%\changes{v1.9}{2005/09/28}{use instead of \cmd\toks@}
% \begin{macrocode}
\newtoks\MT@toks
% \end{macrocode}
%\end{macro}
+%\begin{macro}{\MT@tempbox}
+% our own box,
+% \begin{macrocode}
+\newbox\MT@tempbox
+% \end{macrocode}
+%\end{macro}
%\begin{macro}{\ifMT@if@}
-% A scratch if.
+% and a scratch if.
% \begin{macrocode}
\newif\ifMT@if@
% \end{macrocode}
@@ -6292,7 +6370,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
\MT@with@package@T{csquotes}{%
\@ifpackagelater{csquotes}{2005/05/11}{%
\g@addto@macro\MT@setupfont@hook\@disablequotes
- \g@addto@macro\MT@prot@hook\@disablequotes
+ ^^X\apptocmd\csq@bqgroup{\let\MT@csq@eqgroup\csq@eqgroup}\relax\relax
}{%
\MT@warning@nl{%
Should you receive warnings about unknown slot\MessageBreak
@@ -6653,11 +6731,12 @@ time will almost certainly lead to undesired results. Have your choice!}%
% \item (a patch for \pkg{titletoc} would also be worthwhile~\dots)
%\todo{patch for \pkg{titletoc}}
% \end{itemize}
-% \item [|eqnum|] equation numbers (with or without \pkg{amsmath}). \cmd\eqref\ relies
-% on \cmd\tagform@, so we have to make it use the original definition.
+% \item [|eqnum|] equation numbers
%\changes{v3.0}{2021/05/21}{protrusion patch for equation numbers
% (provided by \contributor Holger Gerhardt <holger.gerhardt\at uni-bonn.de>)}
%\changes{v3.0a}{2021/11/22}{protrusion patch \texttt{eqnum} for \cls{IEEEtran}}
+% \begin{itemize}
+% \item \cls{IEEEtran}
% \begin{macrocode}
\MT@define@patch{eqnum}{%
\@ifclassloaded{IEEEtran}
@@ -6666,17 +6745,43 @@ time will almost certainly lead to undesired results. Have your choice!}%
\MT@patch@patch\theIEEEsubequationdis{(}{\leftprotrusion{(}}%
\MT@patch@patch\theIEEEsubequationdis{)}{\rightprotrusion{)}}}%
{}%
+% \end{macrocode}
+% \item \cmd\eqref\ relies on \cmd\tagform@, so we have to have it
+% use the original definition.
+% \begin{macrocode}
\@ifpackageloaded{amsmath}
{\MT@patch@patch\tagform@{(}{\leftprotrusion{(}}%
\MT@patch@patch\tagform@{)}{\rightprotrusion{)}}%
- \MT@patch@patch\eqref{\tagform@}{\@nameuse{MT@patch@saved@\string\tagform@}}}
+ \MT@patch@patch\eqref{\tagform@}{\@nameuse{MT@patch@saved@\string\tagform@}}%
+% \end{macrocode}
+% \item If the user has altered the tags' appearance via \pkg{mathtools}'s \cmd\newtagform\
+% interface, our patch won't have any effect. We don't issue a warning
+% because \verb/\(left|right)protrusion/ might have been specified appropriately
+% in \cmd\newtagform. We could also patch the latter command (or, to be more
+% precise, |\MT_define_tagform:nwnn|), but the timing is a bit tricky, so
+% for now info it is.
+%\todo{patch for \pkg{mathtools}'s \cmd\newtagform}
+%\changes{v3.0c}{2021/12/30}{info that protrusion patch \texttt{eqnum} may not be effective with \pkg{mathtools}
+% (reported by \contributor user182849 <@\at @>)}
+% ^^A https://tex.stackexchange.com/questions/628090/usetagform-incompatible-with-microtype/
+% \begin{macrocode}
+ \MT@with@package@T{mathtools}{%
+ \ifMT@patch@ok\else \MT@patch@oktrue
+ \MT@info@nl{The `eqnum' patch may not be effective because you are\MessageBreak
+ using the mathtools package. Make sure to insert\MessageBreak
+ `\@backslashchar leftprotrusion' and
+ `\@backslashchar rightprotrusion' as\MessageBreak
+ appropriate in mathtools's `\@backslashchar newtagform' command}%
+ \fi}}
{\MT@patch@patch\@eqnnum{(}{\leftprotrusion{(}}%
\MT@patch@patch\@eqnnum{)}{\rightprotrusion{)}}}%
}{}%
% \end{macrocode}
+% \end{itemize}
% \item [|footnote|] footnote text (only visible with block paragraphs)
-%\changes{v3.0}{2021/05/25}{protrusion patch for footnote text}
-%\begin{itemize}
+%\changes{v3.0}{2021/05/25}{protrusion patch for footnote text}^^A
+%\changes{v3.0c}{2022/01/21}{protrusion patch \texttt{footnote}: also for minipages}^^A
+% \begin{itemize}
% \item \pkg{hyperref} also patches this command (but only if |hyperfootnotes=true|)
%\changes{v3.0a}{2021/11/30}{fix protrusion patch \texttt{footnote} with \pkg{hyperref}
% (reported by \contributor Liang-Bo Wang <@\at @>) \githubissue{2}}
@@ -6686,27 +6791,34 @@ time will almost certainly lead to undesired results. Have your choice!}%
{\ifHy@hyperfootnotes\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
\@secondoftwo
{\MT@patch@patch\@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}%
- \MT@patch@patch\@footnotetext{\@empty\ignorespaces}{\@empty\ignorespaces\leftprotrusion}}
+ \MT@patch@patch\@footnotetext{\@empty\ignorespaces}{\@empty\ignorespaces\leftprotrusion}%
+ \MT@patch@patch\@mpfootnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}%
+ \MT@patch@patch\@mpfootnotetext
+ {{\expandafter\hyper@@anchor\expandafter
+ {\Hy@footnote@currentHref}{\relax}}\ignorespaces}
+ {{\expandafter\hyper@@anchor\expandafter
+ {\Hy@footnote@currentHref}{\relax}}\ignorespaces\leftprotrusion}}
% \end{macrocode}
-% \item so do the <\cls{KOMA}> classes (which load \pkg{scrkbase})
-%\changes{v3.0a}{2021/12/02}{fix protrusion patch \texttt{footnote} with <\cls{KOMA}> classes
-% (reported by \contributor MisterFiLou <@\at @>) \githubissue{2}}
+% \item \cls{memoir} additionally allows footnotes in the margins
% \begin{macrocode}
- {\@ifpackageloaded{scrkbase}
- {\MT@patch@patch\scr@saved@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}}
+ {\@ifclassloaded{memoir}
+ {\MT@patch@patch\@footnotetext{\foottextfont #1}{\foottextfont\leftprotrusion #1}%
+ \MT@patch@patch\@mpfootnotetext{\foottextfont #1}{\foottextfont\leftprotrusion #1}}
+ {\MT@patch@patch\@mpfootnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}%
% \end{macrocode}
-% \item base classes
+% \item the <\cls{KOMA}> classes (which load \pkg{scrkbase})
+%\changes{v3.0a}{2021/12/02}{fix protrusion patch \texttt{footnote} with <\cls{KOMA}> classes
+% (reported by \contributor MisterFiLou <@\at @>) \githubissue{2}}
% \begin{macrocode}
- {\MT@patch@patch\@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}%
+ \@ifpackageloaded{scrkbase}
+ {\MT@patch@patch\scr@saved@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}}%
% \end{macrocode}
-% \item \cls{memoir} additionally allows footnotes in the margins
+% \item the base classes
% \begin{macrocode}
- \@ifclassloaded{memoir}
- {\MT@patch@patch\@footnotetext{\foottextfont #1}{\foottextfont\leftprotrusion #1}}
- {}}}%
+ {\MT@patch@patch\@footnotetext{\ignorespaces}{\ignorespaces\leftprotrusion}}}}%
}{}%
% \end{macrocode}
-%\end{itemize}
+% \end{itemize}
% Finally, execute any redefinitions.
% \begin{macrocode}
\MT@redefined@patches
@@ -6978,7 +7090,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
%<pdf-> \pdffontsize\MT@font
%<lua-> \MT@requires@luatex4{\pdffeedback fontsize}{\pdffontsize}\MT@font
%<xe-> \MT@size pt
- \MT@info{Fixing zero \string\fontdimen 6 for font `\MT@@font'\MessageBreak
+ \MT@info{Fixing zero \@backslashchar fontdimen 6 for font `\MT@@font'\MessageBreak
(new value: \the\fontdimen6\MT@font)}%
%<pdf-> \MT@requires@pdftex8\relax{\MT@glet@nc{\MT@@font-fake6}\@empty}%
\fi
@@ -7942,9 +8054,11 @@ time will almost certainly lead to undesired results. Have your choice!}%
}
% \end{macrocode}
%\end{macro}
-%\begin{macro}{\MT@tempbox}
+%\begin{macro}{\noprotrusionifhmode}
+%\changes{v3.0c}{2021/12/22}{new command}
+% Same, but only if we're already in hmode.
% \begin{macrocode}
-\newbox\MT@tempbox
+\DeclareRobustCommand\noprotrusionifhmode{\relax\ifhmode\kern-\p@\kern\p@\fi}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\leftprotrusion}
@@ -7953,8 +8067,11 @@ time will almost certainly lead to undesired results. Have your choice!}%
% We try to reconstruct the next glyph (possibly a ligature).\footnote{
% \luatex\ offers the command \cmd\protrusionboundary, which could
% potentially be very helpful here, but it doesn't seem to do what it
-% promises (not even the example from the manual works as advertised).}
+% promises (not even the example from the manual works as advertised).
% ^^A cf. https://mailman.ntg.nl/pipermail/dev-luatex/2021-May/006486.html
+% Maybe \contributor Marcel Kr\"uger <@\at @>'s attempt at a
+% |betterprotrusionboundary| (\url{https://tex.stackexchange.com/a/629080})
+% could be an option.}
% \begin{macrocode}
\DeclareRobustCommand\leftprotrusion{%
\MT@toks{}%
@@ -7965,52 +8082,72 @@ time will almost certainly lead to undesired results. Have your choice!}%
%\begin{macro}{\MT@prot@l}
%\changes{v3.0b}{2021/12/05}{make \cmd\long\ again
% (reported by \contributor Akira Yokosawa <@\at @>) \githubissue{3}}
+%\changes{v3.0c}{2022/01/14}{next try at removing \cmd\long}
% This probably doesn't need to be \cmd\long\ any longer.
% \begin{macrocode}
-\long\def\MT@prot@l#1{%
+\def\MT@prot@l#1{%
\MT@get@prot{#1}{left}%
#1%
}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\rightprotrusion}
+%\changes{v3.0}{2021/05/15}{new command}
+%\begin{macro}{\MT@prot@r}
+%\changes{v3.0c}{2022/01/14}{no longer \cmd\long}
% Unfortunately, there's no way to retrieve anything that's already been typeset,
% so the counterpart cannot be defined symmetrically.
-%\changes{v3.0}{2021/05/15}{new command}
% \begin{macrocode}
\DeclareRobustCommand\rightprotrusion{\MT@prot@r}
-% \end{macrocode}
-%\end{macro}
-%\begin{macro}{\MT@prot@r}
-% \begin{macrocode}
-\long\def\MT@prot@r#1{%
+\def\MT@prot@r#1{%
{#1}%
\MT@get@prot{#1}{right}%
}
% \end{macrocode}
%\end{macro}
+%\end{macro}
%\begin{macro}{\MT@get@prot}
% Typeset the text inside a box and get the left and right margin kerns.
% We add an extra \cmd\vbox\ in case we're inside a |tabular|.
% \cmd\@newlistfalse\ is meant to make \cmd\\ work in |centering| etc.
-%\changes{v3.0a}{2021/11/22}{reset counters}
+%\changes{v3.0a}{2021/11/22}{reset counters}^^A
%\changes{v3.0a}{2021/11/05}{compatibility fix for \pkg{csquotes}
-% (reported by \contributor Gustavo Barros <@\at @>) \githubissue{1}}
+% (reported by \contributor Gustavo Barros <@\at @>) \githubissue{1}}^^A
% ^^A https://tex.stackexchange.com/questions/621440/microtype-csquotes-autoquote-and-itemize-interaction
%\changes{v3.0a}{2021/11/27}{set penalties to zero and vfuzz to max
-% (reported by \contributor florian <@\at @>)}
+% (reported by \contributor florian <@\at @>)}^^A
% ^^A https://tex.stackexchange.com/questions/624171/overfull-vbox-in-list-of-figures-since-miktex-update
-%\changes{v3.0b}{2021/12/05}{unconditionally \cmd\leavevmode}
+%\changes{v3.0b}{2021/12/05}{unconditionally \cmd\leavevmode}^^A
% We set various penalties to zero to allow linebreaking, and don't
% bother if the split box is overfull (but shouldn't we? -- after all,
% that's how the penalties bug was discovered~\dots).
%\begin{macro}{\MT@ckpt}
% We also reset the counters and disable writing to auxiliary files.
%\begin{macro}{\MT@prot@hook}
-% Furthermore, we have a hook for compatibility fixes.
+% Furthermore, we have a hook for compatibility fixes (not used at the moment),
+%\begin{macro}{\MT@csq@eqgroup}
+%\changes{v3.0c}{2022/01/06}{compatibility for \pkg{csquotes}, again
+% (reported by \contributor NightShade <@\at @>)}
+% ^^A https://tex.stackexchange.com/questions/629068/microtype-quotation-marks-in-itemize-not-aligned-properly-at-begin-of-an-item
+% and a command for \pkg{csquotes}'s grouping (because we actually typeset
+% the quote character, instead of disabling quotes altogether (as we suggested
+% for \githubissue{1}, which was wrong)).
+%\begin{macro}{\MT@noindent}
+%\changes{v3.0c}{2022/01/14}{use \cmd\RawNoindent, if available \githubissue{8}}
+% Finally, \LaTeX's new paragraph hooks require special attention, as they're
+% (currently?) unable to distinguish between real typesetting and trial runs.
+% In our case, fortunately, we really don't want to trigger the hooks.
+% Also, we don't need a \cmd\RawParEnd\ at the end (as suggested in \file{ltpara}),
+% I think, as none of our commands are \cmd\long\ anymore.
% \begin{macrocode}
\let\MT@prot@hook\@empty
-\long\def\MT@get@prot#1#2{%
+\let\MT@csq@eqgroup\relax
+\ifx\RawNoindent\@undefined
+ \let\MT@noindent\noindent
+\else
+ \let\MT@noindent\RawNoindent
+\fi
+\def\MT@get@prot#1#2{%
\begingroup
\def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
\edef\MT@ckpt{\cl@@ckpt}%
@@ -8025,7 +8162,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
\interlinepenalty\z@
\@newlistfalse
\MT@prot@hook
- \noindent #1}%
+ \MT@noindent #1\MT@csq@eqgroup}%
\vbadness=\@M
\splittopskip=\z@
\vfuzz=\maxdimen
@@ -8052,6 +8189,8 @@ time will almost certainly lead to undesired results. Have your choice!}%
%\end{macro}
%\end{macro}
%\end{macro}
+%\end{macro}
+%\end{macro}
%\begin{macro}{\MT@prot@ifx}
% Test next token.
% \begin{macrocode}
@@ -8073,7 +8212,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
%\begin{macro}{\MT@prot@ifmacro@@}
% Test whether \meta{\#1} is a macro or an active character
% that does not take an argument.
-% (inspired by Joseph Wright). ^^A https://tex.stackexchange.com/a/331696/
+% (inspired by \contributor Joseph Wright <@\at @>). ^^A https://tex.stackexchange.com/a/331696/
% Only works with \etex.
% \begin{macrocode}
^^X\def\MT@prot@ifmacro{%
@@ -8095,11 +8234,15 @@ time will almost certainly lead to undesired results. Have your choice!}%
%\end{macro}
%\end{macro}
%\begin{macro}{\MT@prot@iffirstcmd}
-% Test for the first command.
+% Test whether the first token in \cs{MT@prot@next} (once expanded) is the
+% command \meta{\#1}. Since \cs{MT@prot@next} may also be user-defined (or
+% whatever), we have to use our own, \cmd\long\ version of \cmd\@car.
+%\changes{v3.0c}{2021/12/17}{use \cmd\long\ variant of \cmd\@car\
+% (reported by \contributor frafl <@\at @>) \githubissue{6}}
% \begin{macrocode}
\def\MT@prot@iffirstcmd#1{%
- \ifx\relax#1\relax\expandafter\@secondoftwo\else
- \MT@exp@two@c\ifx\@car\MT@prot@next\relax\@empty\@nil#1%
+ \ifx\relax#1\expandafter\@secondoftwo\else
+ \MT@exp@two@c\ifx\MT@car\MT@prot@next\relax\@nil#1%
\expandafter\expandafter\expandafter\@firstoftwo
\else
\expandafter\expandafter\expandafter\@secondoftwo
@@ -8108,6 +8251,12 @@ time will almost certainly lead to undesired results. Have your choice!}%
}
% \end{macrocode}
%\end{macro}
+%\begin{macro}{\MT@car}
+% A long car.
+% \begin{macrocode}
+\long\def\MT@car#1#2\@nil{#1}
+% \end{macrocode}
+%\end{macro}
%\begin{macro}{\MT@prot@iflicrcmd}
% Fun with <LICR>:
% Test if the first command of the third command of the first command
@@ -8138,6 +8287,7 @@ time will almost certainly lead to undesired results. Have your choice!}%
% If we have a group, we inject \cs{MT@prot@get@firstchar} at the
% beginning again and don't bother about the rest. This still allows,
% \eg, |\verb|, |verbatim| or |lstlistings| material.
+% The downside of being this cautious is that we'll miss lots of cases.
%\changes{v3.0b}{2021/12/05}{don't rescan anymore
% (reported by \contributor Akira Yokosawa <@\at @>
% and \contributor theufman <@\at @>) \githubissue{3,4}}
@@ -8194,11 +8344,16 @@ time will almost certainly lead to undesired results. Have your choice!}%
\MT@prot@iffirstcmd\UTFviii@four@octets{%
\def\MT@temp*##1##2##3##4{\MT@prot@l{##1##2##3##4}}%
}{%
- \MT@prot@iflicrcmd{T1}{%
- \MT@prot@iflicrcmd{TU}{%
- \MT@prot@iflicrcmd{LY1}{%
- \MT@prot@iflicrcmd{OT1}{%
- \MT@prot@iflicrcmd{T2A}\relax % should we add more encodings?
+% \end{macrocode}
+% (this is for \pkg{csquotes})
+% \begin{macrocode}
+ \MT@prot@iffirstcmd\csqQQ{\def\MT@temp*##1{\MT@prot@l{##1}}}{%
+ \MT@prot@iflicrcmd{T1}{%
+ \MT@prot@iflicrcmd{TU}{%
+ \MT@prot@iflicrcmd{LY1}{%
+ \MT@prot@iflicrcmd{OT1}{%
+ \MT@prot@iflicrcmd{T2A}\relax % should we add more encodings?
+ }%
}%
}%
}%
@@ -12191,7 +12346,7 @@ end
\renewcommand*\DisableLigatures[2][]{%
\MT@error{Disabling ligatures of a font is only possible\MessageBreak
with pdftex version 1.30 or newer.\MessageBreak
- Ignoring \string\DisableLigatures}{%
+ Ignoring \@backslashchar DisableLigatures}{%
%<pdf-> Upgrade
%<xe-> Use
pdftex.}%
@@ -13796,8 +13951,8 @@ end
% is now officially deprecated.
% \begin{macrocode}
\MT@ifdefined@c@T\MicroType@Hook{\MT@error{%
- Command \string\MicroType@Hook\space is deprecated.\MessageBreak
- Use \string\Microtype@Hook\space instead}
+ Command \@backslashchar MicroType@Hook is deprecated.\MessageBreak
+ Use \@backslashchar Microtype@Hook instead}
{You might want to inform the font package authors.}\MicroType@Hook}
\MT@ifdefined@c@T\Microtype@Hook\Microtype@Hook
% \end{macrocode}
@@ -14490,9 +14645,9 @@ end
\ifnum\sfcode`\. > 1500
\MT@ifstreq\MT@sp@context{nonfrench}\relax{%
\MT@warning@nl{%
- \string\nonfrenchspacing\space is active. Adjustment of\MessageBreak
+ \@backslashchar nonfrenchspacing is active. Adjustment of\MessageBreak
interword spacing will disable it. You might want\MessageBreak
- to add `\@backslashchar\MT@MT context{spacing=nonfrench}'\MessageBreak
+ to add `\@backslashchar microtypecontext{spacing=nonfrench}'\MessageBreak
to your preamble}%
}%
\fi
@@ -14664,7 +14819,7 @@ end
}
% \end{macrocode}
%\end{macro}
-% We patch the language switching commands to enable language-dependent setup.
+% We patch \pkg{babel}'s language switching commands to enable language-dependent setup.
% \begin{macrocode}
\MT@addto@setup{%
\ifMT@babel
@@ -14710,9 +14865,26 @@ end
% In case \pkg{babel} was loaded before \microtype:
% \begin{macrocode}
\MT@set@babel@context\languagename
+% \end{macrocode}
+% The \pkg{polyglossia} package has a useful hook.
+%\changes{v3.0c}{2022/01/21}{make \opt{babel} option work with \pkg{polyglossia}}
+% Unfortunately, compatibility with \pkg{polyglossia} is less useful in itself,
+% as only \luatex\ allows working on font copies, and currently doesn't provide
+% the kerning or spacing feature. But who knows, maybe somebody would want more
+% protrusion in French\dots
+% \begin{macrocode}
}{%
- \MT@warning@nl{You did not load the babel package.\MessageBreak
- The `babel' option won't have any effect}%
+ \@ifpackageloaded{polyglossia}{%
+ \MT@info@nl{Registering with polyglossia's language switching hook}%
+ \gappto\polyglossia@language@switched{%
+ \MT@set@babel@context{\languagename}%
+ }%
+ \MT@set@babel@context\languagename
+ }{%
+ \MT@warning@nl{%
+ You did not load the babel or the polyglossia package.\MessageBreak
+ The `babel' option won't have any effect}%
+ }%
}%
\fi
}
@@ -15378,7 +15550,7 @@ end
% ^^A http://tug.org/pipermail/tex-live/2008-September/017385.html
% The Romanian \cmd\textcommabelow\ accents are actually replacements for the
% \cmd\c\ variants, which had previously (and erroneously\footnote{
-% Cf. \url{http://tug.org/pipermail/tex-live/2008-August/017204.html}})
+% Cf. \url{https://tug.org/pipermail/tex-live/2008-August/017204.html}})
% been included in <QX> encoding. They are still kept for backwards
% compatibility.
%\iffalse
@@ -19402,7 +19574,7 @@ end
% (|space| or |1em|). For Times, for example, a thin space would be 665. I
% don't know whether French typography really wants a thin space, or rather (as
% it happens to turn out with <CMR>) half a space.
-% (Wikipedia\footnote{\url{http://fr.wikipedia.org/wiki/Espace_typographique}, 5 July 2007.}
+% (Wikipedia\footnote{\url{https://fr.wikipedia.org/wiki/Espace_typographique}, 5 July 2007.}
% claims it should be a quarter of an em, which seems too much to me; then
% again, it also says that this \emph{was} a thin space in French typography.)
% \begin{macrocode}
@@ -19565,11 +19737,9 @@ This is the current font stretched by 5\%, normal, and shrunk by 5\%:
% \appendix
% \AppendixSettings
% \GeneralChanges{Documentation}
-%
%\changes{v2.5}{2013/02/23}{include \file{microtype-logo.dtx} and \file{microtype-lssample.dtx}}
% \InputIfFileExists{microtype-logo.dtx}\relax\relax
% \InputIfFileExists{microtype-lssample.dtx}\relax\relax
-%
% \PrintChanges
%
% ^^A -------------------------------------------------------------------------
@@ -19591,7 +19761,7 @@ This is the current font stretched by 5\%, normal, and shrunk by 5\%:
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
-% \CheckSum{12313}
+% \CheckSum{12399}
%
% \Finale
%
diff --git a/macros/latex/contrib/microtype/microtype.ins b/macros/latex/contrib/microtype/microtype.ins
index 13f8092749..0efb05765f 100644
--- a/macros/latex/contrib/microtype/microtype.ins
+++ b/macros/latex/contrib/microtype/microtype.ins
@@ -10,12 +10,12 @@
The `microtype' package
Subliminal refinements towards typographical perfection
- Copyright (c) 2004--2021 R Schlicht <w.m.l@gmx.net>
+ Copyright (c) 2004--2022 R Schlicht <w.m.l@gmx.net>
This work may be distributed and/or modified under the conditions of the
LaTeX Project Public License, either version 1.3c of this license or (at
your option) any later version. The latest version of this license is in:
-http://www.latex-project.org/lppl.txt, and version 1.3c or later is part
+https://www.latex-project.org/lppl.txt, and version 1.3c or later is part
of all distributions of LaTeX version 2005/12/01 or later.
This work has the LPPL maintenance status `maintained'.
diff --git a/macros/latex/contrib/microtype/microtype.pdf b/macros/latex/contrib/microtype/microtype.pdf
index 6562dd097f..c9b57b638d 100644
--- a/macros/latex/contrib/microtype/microtype.pdf
+++ b/macros/latex/contrib/microtype/microtype.pdf
Binary files differ
diff --git a/macros/luatex/latex/luacensor/README b/macros/luatex/latex/luacensor/README
index 6d737bcdac..1e1d26990a 100644
--- a/macros/luatex/latex/luacensor/README
+++ b/macros/luatex/latex/luacensor/README
@@ -1,5 +1,7 @@
luacensor - redacting sensitive information with Lua
+version: 1.1.0
+
luacensor is a package that takes advantage of Lua to securely redact documents, both by hiding all characters and by slightly varying the length of strings to prevent jigsaw identification. It also is friendly to screen readers by adding alt-text indicating redacted content.
See the documentation (luacensor.pdf) for examples and instructions for
@@ -8,5 +10,8 @@ installation and usage.
This work may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), version 1.3 or later.
+
For suggestions, feature requests, and bug reports, please use the project's
GitHub site: https://github.com/ezgranet/luacensor
+
+Version history: 23/02/2022: new `warning' option added to allow for printing a warning with redacted text
diff --git a/macros/luatex/latex/luacensor/luacensor.pdf b/macros/luatex/latex/luacensor/luacensor.pdf
index 3abd55551d..f2f27f9805 100644
--- a/macros/luatex/latex/luacensor/luacensor.pdf
+++ b/macros/luatex/latex/luacensor/luacensor.pdf
Binary files differ
diff --git a/macros/luatex/latex/luacensor/luacensor.sty b/macros/luatex/latex/luacensor/luacensor.sty
index 614378a56e..22a8003e2d 100644
--- a/macros/luatex/latex/luacensor/luacensor.sty
+++ b/macros/luatex/latex/luacensor/luacensor.sty
@@ -1,7 +1,7 @@
%luacensor.sty
-\def\luacensorversionnumber{1.0.0}
+\def\luacensorversionnumber{1.1.0}
\ProvidesPackage{luacensor}
-[2022/02/18 \luacensorversionnumber\
+[2022/02/22 \luacensorversionnumber\
Redact sensitive information using Lua]
% !TeX program = lualatex
% !TeX encoding = utf8
@@ -18,6 +18,16 @@
% The Current Maintainer of this work is Elijah Z Granet
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% option (we'll come back
+% to this later
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifwarning
+\warningfalse
+\DeclareOption{warning}{\warningtrue}
+\ProcessOptions*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DEPENDENCIES
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -34,8 +44,11 @@
%a lighter version of this
%package with just asterisks
%or `[TEXT-REDACTED]'
-%And perhaps that's better for
+%And perhaps that would be better for
%the environment with printing
+%BUT I MADE MY CHOICE!
+\RequirePackage{xcolor}
+\RequirePackage{graphicx}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FONTS
@@ -54,15 +67,16 @@
\IfFontExistsTF{Redacted}{%
\newfontface\cnsrfnt[%%%%%%
%the scale is arbitrary, but kind of works
-Scale=1.1,
+%Scale=1.1,
%%the below declarations are to prevent warnings about shapes not being available
-ItalicFont=Redacted,%
-BoldItalicFont=Redacted,%
-BoldFont=Redacted,%
-SmallCapsFont=Redacted]{Redacted}
+%WordSpace=0,
+ItalicFont={Redacted},%
+BoldItalicFont={Redacted},%
+BoldFont={Redacted},%
+SmallCapsFont={Redacted}]{Redacted}
\newcommand{\onething}{\cnsrfnt\ • }
-\newcommand{\twothings}{\cnsrfnt\ • • }
-\newcommand{\donothing}{}
+\newcommand{\twothings}{\cnsrfnt\ • •}
+\newcommand{\donothing}{\cnsrfnt\ }
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%The little spaces let justification happen
@@ -70,7 +84,7 @@ SmallCapsFont=Redacted]{Redacted}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% x chosen as an arbitrary average width
+% • chosen as an arbitrary average width
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
}{
@@ -93,7 +107,7 @@ ItalicFont={Source Sans Pro Black},BoldItalicFont={Source Sans Pro Black},BoldFo
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\onething}{\cnsrfnt â–¬ }
\newcommand{\twothings}{\cnsrfnt â–¬ â–¬ }
-\newcommand{\donothing}{}
+\newcommand{\donothing}{ }
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -134,15 +148,14 @@ ItalicFont={Source Sans Pro Black},BoldItalicFont={Source Sans Pro Black},BoldFo
\newif\ifcnsr\cnsrfalse
\newcommand{\cnsr}[1]{%
- \ifcnsr{%
-
-\voidenvironment{equation*}
-\voidenvironment{equation}
-\voidenvironment{table}
-\voidenvironment{table*}
-\voidenvironment{tabular}
-\voidenvironment{tabular*}
-\voidenvironment{}
+\ifcnsr{%
+\voidenvironment{equation*}%
+\voidenvironment{equation}%
+\voidenvironment{table}%
+\voidenvironment{table*}%
+\voidenvironment{tabular}%
+\voidenvironment{tabular*}%
+\voidenvironment{}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% I don't know how many
% people use TEX native accent commands
@@ -151,43 +164,29 @@ ItalicFont={Source Sans Pro Black},BoldItalicFont={Source Sans Pro Black},BoldFo
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\renewcommand{\`}[1]{}
-\renewcommand{\'}[1]{}
-\renewcommand{\^}[1]{}
-\renewcommand{\"}[1]{}
-\renewcommand{\H}[1]{}
-\renewcommand{\~}[1]{}
-\renewcommand{\c}[1]{}
-\renewcommand{\k}[1]{}
-\renewcommand{\l}[1]{}
-\renewcommand{\=}[1]{}
-\renewcommand{\b}[1]{}
-\renewcommand{\.}[1]{}
-\renewcommand{\d}[1]{}
-\renewcommand{\r}[1]{}
-\renewcommand{\u}[1]{}
-\renewcommand{\v}[1]{}
-\renewcommand{\t}[1]{}
-\renewcommand{\o}[1]{}
-\renewcommand{\i}[1]{}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%TEX primitives can break the
-%code because they don't have the good manners
-%to put their arguments in brackets
-%No offence, of course, to the
-%honoured Prof Knuth, who had
-%magnificent genius reasons
-%for coding things that way
-%it's just that i'm an idiot
-%and therefore need things simple
+\renewcommand{\`}[1]{}%
+\renewcommand{\'}[1]{}%
+\renewcommand{\^}[1]{}%
+\renewcommand{\"}[1]{}%
+\renewcommand{\H}[1]{}%
+\renewcommand{\~}[1]{}%
+\renewcommand{\c}[1]{}%
+\renewcommand{\k}[1]{}%
+\renewcommand{\l}[1]{}%
+\renewcommand{\=}[1]{}%
+\renewcommand{\b}[1]{}%
+\renewcommand{\.}[1]{}%
+\renewcommand{\d}[1]{}%
+\renewcommand{\r}[1]{}%
+\renewcommand{\u}[1]{}%
+\renewcommand{\v}[1]{}%
+\renewcommand{\t}[1]{}%
+\renewcommand{\o}[1]{}%
+\renewcommand{\i}[1]{}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%d
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\renewcommand{\hskip}[1]{}
-\renewcommand{\vskip}[1]{}
-\renewcommand{\raise}[1]{}
-\renewcommand{\lower}[1]{}
-\renewcommand{\kern}[1]{}
% here we have the accsupp magic
% this operates by replacing the 'x's
% or unicode black squares as the case
@@ -202,10 +201,9 @@ ItalicFont={Source Sans Pro Black},BoldItalicFont={Source Sans Pro Black},BoldFo
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\BeginAccSupp{method=plain,ActualText={TEXT REDACTED}}%
-\rndstring{#1}
-\EndAccSupp{}%
-}
- \else%
+\rndstring{#1}%
+\EndAccSupp{}}%
+\else%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% if the conditional is off
@@ -226,11 +224,10 @@ ItalicFont={Source Sans Pro Black},BoldItalicFont={Source Sans Pro Black},BoldFo
\begin{luacode}
--fulsome thanks to TeX.SE users Henri Menke and David Carlisle, without whom none of this would be possible
local function rndstring()
-
local toks = token.scan_toks(s)
local on = true
for n, t in ipairs(toks) do
- if t.csname == "begin" or t.csname == "end" then
+ if t.csname == "begin" or t.csname == "end" then
on = false
-- The below is necessary as TeX primitives can break the code otherwise because they do not use brackets
end
@@ -242,7 +239,7 @@ end
if on and t.csname == "&" then
local letter = token.create'donothing'
toks[n] = letter
-
+
elseif on and t.csname == "%" then
local letter = token.create'donothing'
toks[n] = letter
@@ -364,4 +361,92 @@ local lft = lua.get_functions_table()
--make a global command
lft[#lft + 1] = rndstring
token.set_lua("rndstring", #lft, "global")
-\end{luacode} \ No newline at end of file
+\end{luacode}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% WARNING FUN YAY
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Definitely this whole section
+%is there to be user modified, because
+% depending on language, jurisdiction
+%type of document etc, everyone will need
+%a specific warning style. So the important
+% part of the code here is the
+% conditional and global [warning]
+% option, because that's the magic value added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% fonts for the warning:
+%I chose default LaTeX fonts
+% here to be changed as users wish
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newfontface\wrnstncl{QT Military}
+\newcommand{\warnword}{WARNING}
+\newfontface\smbl{Deja Vu Sans Bold}
+\newcommand{\danger}{\smbl ⚠︎\normalfont}
+\newcommand{\warnformat}{\sffamily\bfseries \color{red}}
+\newcommand{\textwarn}{This document is {\underline{NOT}} redacted. It contains private and confidential personal data, and may {\underline{NOT}} be distributed, published, or shown to those without the right to view such information. The publication of the information in this document may constitute a contempt of court, punishable by a term of imprisonment.}
+\newcommand{\textsafe}{This document has been altered to remove sensitive personal data. It is cleared for publication and dissemination.
+}
+\definecolor{darkgreen}{rgb}{0.0, 0.2, 0.13}
+\definecolor{darkspringgreen}{rgb}{0.09, 0.45, 0.27}
+ \definecolor{forestgreen}{rgb}{0.13, 0.55, 0.13}
+\newcommand{\dquad}{\danger\danger\danger\danger}
+\newcommand{\dangersign}[1]{\scalebox{2}{\huge\danger}}
+\newcommand{\dangerblock}{\scalebox{2}{\huge\danger\quad\danger\quad\danger}}
+\newcommand{\warnblock}{{\Large\wrnstncl\warnword\quad\warnword\quad\warnword}}
+\newcommand{\tworules}{\hrule width \hsize height .7pt\vskip2pt\hrule width \hsize height .7pt}
+\newcommand{\allwarning}{\dangerblock\\\warnblock\\\normalfont\smallskip\warnformat\textwarn }
+\newcommand{\confwarning}{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The warning option
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifwarning
+\ifcnsr
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% a note saying document is redacted
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{center}
+\color{forestgreen}
+\tworules\vskip5pt
+\normalsize\normalfont\sffamily\bfseries\textsafe
+\vskip5pt\tworules
+\end{center}
+\else
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The WARNING for un-redacted docs
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{center}\color{red}\tworules\vskip 5pt\allwarning
+\vskip5pt\tworules%
+\end{center}%
+\fi%
+\else\fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Allow \maketitle
+% on same page
+% yay
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifwarning\let\oldmaketitle\maketitle\renewcommand{\maketitle}{{\let\newpage\relax\maketitle}}\else\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% print the warning at the start of the document
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\AtBeginDocument{\confwarning} \ No newline at end of file
diff --git a/macros/luatex/latex/luacensor/luacensor.tex b/macros/luatex/latex/luacensor/luacensor.tex
index 9e2f1e14a0..10bcc0d18b 100644
--- a/macros/luatex/latex/luacensor/luacensor.tex
+++ b/macros/luatex/latex/luacensor/luacensor.tex
@@ -14,8 +14,8 @@
\usepackage{luacode}
%\usepackage[firstnumber=last]{fancyvrb}
\usepackage{minted}
-\date{\today}
-\author{Elijah Z Granet\thanks{e-mail: \href{mailto:ezg21@cantab.ac.uk}{ezg21@cantab.ac.uk}}}
+\date{\today\\\smallskip\ttfamily Version \luacensorversionnumber}
+\author{Elijah Z Granet\thanks{e-mail: \href{mailto:ezg21@cantab.ac.uk}{\ttfamily ezg21@cantab.ac.uk}}}
\title{\texttt{LuaCensor}:\\A package for redacting sensitive information}
@@ -27,49 +27,96 @@
This package redacts sensitive information using \texttt{Lua}, and adds accessibility support.
\subsection{Usage}
The package is called with:
-
+\begin{quote}
\begin{minted}{latex}
\usepackage{luacensor}
\end{minted}
+\end{quote}
Sensitive information is enclosed within the command:
-
+\begin{quote}
\begin{minted}{latex}
\cnsr{John Smith}
\end{minted}
+\end{quote}
When the outputted document is intended for authorised readers who are supposed to see sensitive information, no further action is needed. When the outputted document is for general audiences, who are \textit{not} supposed to see sensitive information, add the following line to the preamble:
-
+\begin{quote}
\begin{minted}{latex}
\cnsrtrue
\end{minted}
+\end{quote}
This activates the censoring globally.
+\subsection{The \texttt{\color{red}warning} option}
+For many documents, the presence or absence of redaction in the document will be obvious by black bars in the first page. However, for other documents, particularly long reports or, for example, a court judgment with a title page, it is useful to give an indication. This can be done by calling the package with:
+\begin{quote}
+ \begin{minted}{latex}
+ \usepackage[warning]{luacensor}
+ \end{minted}
+\end{quote}
+ This prints automatically prints a warning at the top of the page indicating either that the text is redacted or unredacted. The default `safe' and `danger' warnings, below, are there mostly as a place holder, because it is anticipated that the precise wording of the warning will vary by jurisdiction.\clearpage
+
+\begin{center}
+\textit{The default danger warning:}\\
+\color{red}\tworules\vskip 5pt\allwarning
+\vskip5pt\tworules%
+\end{center}%
+
+\begin{center}
+ \textit{The default safe warning:}\\
+ \begin{center}
+\color{forestgreen}
+\tworules\vskip5pt
+\normalsize\normalfont\sffamily\bfseries\textsafe
+\vskip5pt\tworules
+\end{center}
+\end{center}
+
+As I noted above, it is unlikely these default options will be suitable for most situations, and for this reason it is easy to change. To alter the text used in the `safe' option, simply use:
+
+\noindent\begin{minted}{latex}
+
+ \renewcommand{\textsafe}{This is the text in safe mode}
+
+\end{minted}
+
+To change the warning heading option for the `danger' text, renew the command \verb+\warnword+ to change the word `warning', renew the command \verb+\dangerblock+ to alter or remove the warning triangles. The other commands for more custom changing of the warning are all in the source code and easily altered for even more custom work.
+
+\noindent\begin{minted}{latex}
+\renewcommand{\textwarn}{This is the text in danger mode}
+\end{minted}
+To alter the warning triangles,
+
+
+
+
+
+
\subsection{Requirements}
-This package will \textbf{only} work in Lua\LaTeX. The package works out of the box with a standard \TeX\ distribution, but ideally, I would strongly suggest installing the free (\textit{libre} \& \textit{gratis}) `Redacted' font from Google Fonts, which gives a quite æsthetically pleasing black bar effect.\footnote{Available at: \url{https://fonts.google.com/specimen/Redacted}.}
-\subsection{\color{red}Warning}
-The package is completely effective at censoring text formatted with normal \LaTeX\ commands, by which I mean that it is impossible for someone to ascertain the original text (or even its precise length) from the outputted \MakeLowercase{\textsc{PDF}} when the \verb|\cnsrtrue| option has been activated.
+This package will \textbf{only} work in Lua\LaTeX. The package works out of the box with a standard \TeX\ distribution, but ideally, I would strongly suggest installing the free (\textit{libre} \& \textit{gratis}) `Redacted' font from Google Fonts, which gives a quite æsthetically pleasing black bar effect.\footnote{Available at: \url{https://fonts.google.com/specimen/Redacted}; a versioin is also available at the GitHub repo of this project: \url{https://github.com/ezgranet/luacensor}}
+\subsection{\color{red}Limitations}
+The package is completely effective at censoring text formatted with normal \LaTeX\ commands, by which I mean that it is impossible for someone to ascertain the original text (or even its precise length) from the outputted \MakeLowercase{\textsc{PDF}} when the \verb|\cnsrtrue| option has been activated.
However, math mode is used, it will censor numbers, but not operators or \TeX\ (as opposed to Unicode) operators. This is probably fine for most instances, but unacceptable where security is of the highest priority, and I would not really recommend using this package to censor highly secret formulæ; the \texttt{censor} package in your \TeX\ distribution will do a better job of that. The package is set to completely disappear the output (as opposed to black bar over) of the \texttt{math}, \texttt{align}, \texttt{equation}, \texttt{tabular}, and a few other environments, as disappearing these environments proved more secure than the piecemeal blacking out I saw. It is probable that there are packages and macros that will break the \texttt{cnsr} macro, and therefore, care should be taken to always examine output before public distribution.
+
+ Users should also be aware that many \TeX\ primitives confuse the package, in particular \verb+\vskip+, \verb+\hskip+ \textit{etc} that take arguments outside curly braces cause difficulties; the best solution is simply to either use the \LaTeX\ alternatives (\textit{eg}, \verb+\hspace+) or enclose the primitives in the \verb+\hddn+ command which simply disappears them.
\subsection{Demonstration}
\begin{quote}
- \begin{minted}[fontsize=\footnotesize,
-,breaklines]{latex}
+ \begin{minted}[fontsize=\footnotesize,breaklines]{latex}
%In the preamble: \usepackage{luacensor}
\begin{quote}
-\cnsrtrue\footnotesize Whereas recognition of the \cnsr{inherent dignity and of the equal and inalienable rights of all members of the human family} is the foundation of freedom, justice and peace in the world,
+\footnotesize \cnsr{Whereas recognition} of the \cnsrtrue\cnsr{inherent dignity and of the equal and inalienable rights of all members of the human family} is the foundation of freedom, justice and peace in the world,
\cnsr{Whereas disregard and contempt for human rights have resulted in barbarous acts which have outraged the conscience of mankind, and the advent of a world in which human beings shall enjoy freedom of speech and belief and freedom from fear and want has been proclaimed as the highest aspiration of the common people,}
+\end{quote}
\end{minted}
\end{quote}
- \begin{quote}
-\cnsrtrue\footnotesize Whereas recognition of the \cnsr{inherent dignity and of the equal and inalienable rights of all members of the human family} is the foundation of freedom, justice and peace in the world,
+\begin{quote}
+\footnotesize \cnsr{Whereas recognition} of the \cnsrtrue\cnsr{inherent dignity and of the equal and inalienable rights of all members of the human family} is the foundation of freedom, justice and peace in the world,
\cnsr{Whereas disregard and contempt for human rights have resulted in barbarous acts which have outraged the conscience of mankind, and the advent of a world in which human beings shall enjoy freedom of speech and belief and freedom from fear and want has been proclaimed as the highest aspiration of the common people,}
-
- \end{quote}
-
- \clearpage
+\end{quote} \clearpage
@@ -94,7 +141,7 @@ To overcome this limitation, the package uses the \texttt{accsup} package to add
All bugs, feature requests, or other technical points should be submitted to the package's official Github page.\footnote{\url{https://github.com/ezgranet/luacensor}}
\subsection{Licensing}
-The software is free and open-sour ce software licensed under the Latex Public Project Licence.\footnote{\url{https://www.latex-project.org/lppl/}}
+The software is free and open-sour ce software licensed under the Latex Public Project Licence, version 1.3\textit{c}.\footnote{\url{https://www.latex-project.org/lppl/}}
\subsection{Some useful advice}
@@ -113,9 +160,14 @@ breaklines,
firstnumber=last
]
{latex}
+%luacensor.sty
+%luacensor.sty
+\def\luacensorversionnumber{1.1.0}
\ProvidesPackage{luacensor}
-[2022/02/17
+[2022/02/22 \luacensorversionnumber\
Redact sensitive information using Lua]
+% !TeX program = lualatex
+% !TeX encoding = utf8
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -127,6 +179,16 @@ firstnumber=last
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Elijah Z Granet
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% option (we'll come back
+% to this later
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifwarning
+\warningfalse
+\DeclareOption{warning}{\warningtrue}
+\ProcessOptions*
\end{minted}
\subsection{Dependencies}
\begin{minted}[
@@ -138,14 +200,16 @@ fontsize=\footnotesize,
linenos,
breaklines,
firstnumber=last
-]{latex}
+]
+{latex}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DEPENDENCIES
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{luacode}
-\RequirePackage{environ}
+\RequirePackage{environ}% http://ctan.org/pkg/environ
+
\RequirePackage{verbatim}
% ^ for the censoring
\RequirePackage{accsupp}
@@ -156,10 +220,13 @@ firstnumber=last
%a lighter version of this
%package with just asterisks
%or `[TEXT-REDACTED]'
-%And perhaps that's better for
+%And perhaps that would be better for
%the environment with printing
+%BUT I MADE MY CHOICE!
+\RequirePackage{xcolor}
+\RequirePackage{graphicx}
\end{minted}
-\subsection{Fonts}
+\subsection{fonts}
\begin{minted}[
frame=lines,
framesep=2mm,
@@ -169,7 +236,8 @@ fontsize=\footnotesize,
linenos,
breaklines,
firstnumber=last
-]{latex}
+]
+{latex}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FONTS
@@ -188,15 +256,16 @@ firstnumber=last
\IfFontExistsTF{Redacted}{%
\newfontface\cnsrfnt[%%%%%%
%the scale is arbitrary, but kind of works
-Scale=1.1,
+%Scale=1.1,
%%the below declarations are to prevent warnings about shapes not being available
-ItalicFont=Redacted,%
-BoldItalicFont=Redacted,%
-BoldFont=Redacted,%
-SmallCapsFont=Redacted]{Redacted}
+%WordSpace=0,
+ItalicFont={Redacted},%
+BoldItalicFont={Redacted},%
+BoldFont={Redacted},%
+SmallCapsFont={Redacted}]{Redacted}
\newcommand{\onething}{\cnsrfnt\ • }
-\newcommand{\twothings}{\cnsrfnt\ • • }
-\newcommand{\donothing}{}
+\newcommand{\twothings}{\cnsrfnt\ • •}
+\newcommand{\donothing}{\cnsrfnt\ }
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%The little spaces let justification happen
@@ -204,7 +273,7 @@ SmallCapsFont=Redacted]{Redacted}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% x chosen as an arbitrary average width
+% • chosen as an arbitrary average width
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
}{
@@ -227,13 +296,10 @@ ItalicFont={Source Sans Pro Black},BoldItalicFont={Source Sans Pro Black},BoldFo
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\onething}{\cnsrfnt â–¬ }
\newcommand{\twothings}{\cnsrfnt â–¬ â–¬ }
-\newcommand{\donothing}{}
+\newcommand{\donothing}{ }
}
\end{minted}
-
-
-
-\subsection{Eliminate pesky environments}
+\subsection{Removing pesky environments}
\begin{minted}[
frame=lines,
framesep=2mm,
@@ -243,9 +309,8 @@ fontsize=\footnotesize,
linenos,
breaklines,
firstnumber=last
-]{latex}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%
+]
+{latex}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% A neat fallback for disappearing things…
@@ -273,8 +338,10 @@ firstnumber=last
}{\end{@empty}}
\voidenvironment{hidden}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{minted}
-\subsection{The \texttt{cnsr} command}
+\subsection{The `\texttt{cnsr}' command}
\begin{minted}[
frame=lines,
framesep=2mm,
@@ -284,10 +351,8 @@ fontsize=\footnotesize,
linenos,
breaklines,
firstnumber=last
-]{latex}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%
+]
+{latex}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -296,16 +361,15 @@ firstnumber=last
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newif\ifcnsr\cnsrfalse
-
\newcommand{\cnsr}[1]{%
- \ifcnsr{%
-\voidenvironment{equation*}
-\voidenvironment{equation}
-\voidenvironment{table}
-\voidenvironment{table*}
-\voidenvironment{tabular}
-\voidenvironment{tabular*}
-\voidenvironment{}
+\ifcnsr{%
+\voidenvironment{equation*}%
+\voidenvironment{equation}%
+\voidenvironment{table}%
+\voidenvironment{table*}%
+\voidenvironment{tabular}%
+\voidenvironment{tabular*}%
+\voidenvironment{}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% I don't know how many
% people use TEX native accent commands
@@ -314,43 +378,29 @@ firstnumber=last
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\renewcommand{\`}[1]{}
-\renewcommand{\'}[1]{}
-\renewcommand{\^}[1]{}
-\renewcommand{\"}[1]{}
-\renewcommand{\H}[1]{}
-\renewcommand{\~}[1]{}
-\renewcommand{\c}[1]{}
-\renewcommand{\k}[1]{}
-\renewcommand{\l}[1]{}
-\renewcommand{\=}[1]{}
-\renewcommand{\b}[1]{}
-\renewcommand{\.}[1]{}
-\renewcommand{\d}[1]{}
-\renewcommand{\r}[1]{}
-\renewcommand{\u}[1]{}
-\renewcommand{\v}[1]{}
-\renewcommand{\t}[1]{}
-\renewcommand{\o}[1]{}
-\renewcommand{\i}[1]{}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%TEX primitives can break the
-%code because they don't have the good manners
-%to put their arguments in brackets
-%No offence, of course, to the
-%honoured Prof Knuth, who had
-%magnificent genius reasons
-%for coding things that way
-%it's just that i'm an idiot
-%and therefore need things simple
+\renewcommand{\`}[1]{}%
+\renewcommand{\'}[1]{}%
+\renewcommand{\^}[1]{}%
+\renewcommand{\"}[1]{}%
+\renewcommand{\H}[1]{}%
+\renewcommand{\~}[1]{}%
+\renewcommand{\c}[1]{}%
+\renewcommand{\k}[1]{}%
+\renewcommand{\l}[1]{}%
+\renewcommand{\=}[1]{}%
+\renewcommand{\b}[1]{}%
+\renewcommand{\.}[1]{}%
+\renewcommand{\d}[1]{}%
+\renewcommand{\r}[1]{}%
+\renewcommand{\u}[1]{}%
+\renewcommand{\v}[1]{}%
+\renewcommand{\t}[1]{}%
+\renewcommand{\o}[1]{}%
+\renewcommand{\i}[1]{}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%d
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\renewcommand{\hskip}[1]{}
-\renewcommand{\vskip}[1]{}
-\renewcommand{\raise}[1]{}
-\renewcommand{\lower}[1]{}
-\renewcommand{\kern}[1]{}
% here we have the accsupp magic
% this operates by replacing the 'x's
% or unicode black squares as the case
@@ -365,10 +415,9 @@ firstnumber=last
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\BeginAccSupp{method=plain,ActualText={TEXT REDACTED}}%
-\rndstring{#1}
-\EndAccSupp{}%
-}
- \else%
+\rndstring{#1}%
+\EndAccSupp{}}%
+\else%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% if the conditional is off
@@ -377,8 +426,10 @@ firstnumber=last
%%%%%%%%%%%%%%%%%%%%%%%%%%%
#1%
\fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{minted}
-\subsection{The Lua Magic}
+\subsection{the Lua magic}
\begin{minted}[
frame=lines,
framesep=2mm,
@@ -388,9 +439,8 @@ fontsize=\footnotesize,
linenos,
breaklines,
firstnumber=last
-]{latex}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%
+]
+{latex}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% The LUA MAGIC PART
@@ -409,14 +459,14 @@ fontsize=\footnotesize,
linenos,
breaklines,
firstnumber=last
-]{lua}
+]
+{lua}
--fulsome thanks to TeX.SE users Henri Menke and David Carlisle, without whom none of this would be possible
local function rndstring()
-
local toks = token.scan_toks(s)
- local on = tfrue
+ local on = true
for n, t in ipairs(toks) do
- if t.csname == "begin" or t.csname == "end" then
+ if t.csname == "begin" or t.csname == "end" then
on = false
-- The below is necessary as TeX primitives can break the code otherwise because they do not use brackets
end
@@ -428,7 +478,7 @@ end
if on and t.csname == "&" then
local letter = token.create'donothing'
toks[n] = letter
-
+
elseif on and t.csname == "%" then
local letter = token.create'donothing'
toks[n] = letter
@@ -461,12 +511,7 @@ elseif on and t.csname == "^" then
local letter = token.create'donothing'
toks[n] = letter
elseif on and t.cmdname == "letter" then
--- The below is the randomness part of this, which I admit is fairly arbitrary,
---but will more often artificially shorten
---strings than lengthen them, as testing
---found if lengthening was too frequent, it
---led to really unsightly long strings.
-
+-- The below is the randomness part of this, which I admit is fairly arbitrary, but will more often artificially shorten strings than lengthen them, as testing found if lengthening was too frequent, it led to really unsightly long strings.
local f = math.random (1,20)
if f == 1 then
local letter = token.create'donothing'
@@ -517,40 +562,41 @@ elseif on and t.cmdname == "letter" then
end
-elseif on and t.cmdname == "other_char" then
+ elseif
+ on and t.cmdname == "other_char" then
local f = math.random (1,20)
-
-if f == 2 then local letter = token.create'donothing'
+ if f == 2 then
+ local letter = token.create'donothing'
toks[n] = letter
+ elseif f == 3 then
+
+ local letter = token.create'donothing' toks[n] = letter
+ elseif f == 4 then
+ local letter = token.create'donothing'
+ toks[n] = letter
+ elseif f == 5 then
+
-elseif f == 3 then
-local letter = token.create'donothing' toks[n] = letter
-
-elseif f == 4 then
- local letter = token.create'donothing'
- toks[n] = letter
-
-elseif f == 5 then
- local letter = token.create'twothings'
- toks[n] = letter
-
+ local letter = token.create'twothings' toks[n] = letter
elseif f == 6 then
-local letter = token.create'donothing' toks[n] = letter
+
-elseif f == 7 then
-local letter = token.create'donothing' toks[n] = letter
+ local letter = token.create'donothing' toks[n] = letter
+ elseif f == 7 then
+ local letter = token.create'donothing' toks[n] = letter
-else local letter = token.create'onething'
+ else
+ local letter = token.create'onething'
toks[n] = letter
- end
- end
- end
+ end
+ end
+ end
--Drop the token in and move on
token.put_next(toks)
- end
- local lft = lua.get_functions_table()
+end
+local lft = lua.get_functions_table()
--make a global command
lft[#lft + 1] = rndstring
token.set_lua("rndstring", #lft, "global")
@@ -562,13 +608,117 @@ baselinestretch=1.2,
bgcolor=LightGray,
fontsize=\footnotesize,
linenos,
-breaklines, firstnumber=last
-]{latex}
+breaklines,
+firstnumber=last
+]
+{latex}
\end{luacode}
\end{minted}
-\clearpage
+\subsection{The `{\ttfamily\color{red}warning}' option}
+\begin{minted}[
+frame=lines,
+framesep=2mm,
+baselinestretch=1.2,
+bgcolor=LightGray,
+fontsize=\footnotesize,
+linenos,
+breaklines,
+firstnumber=last
+]
+{latex}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% WARNING FUN YAY
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Definitely this whole section
+%is there to be user modified, because
+% depending on language, jurisdiction
+%type of document etc, everyone will need
+%a specific warning style. So the important
+% part of the code here is the
+% conditional and global [warning]
+% option, because that's the magic value added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% fonts for the warning:
+%I chose default LaTeX fonts
+% here to be changed as users wish
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newfontface\wrnstncl{QT Military}
+\newcommand{\warnword}{WARNING}
+\newfontface\smbl{Deja Vu Sans Bold}
+\newcommand{\danger}{\smbl ⚠︎\normalfont}
+\newcommand{\warnformat}{\sffamily\bfseries \color{red}}
+\newcommand{\textwarn}{This document is {\underline{NOT}} redacted. It contains private and confidential personal data, and may {\underline{NOT}} be distributed, published, or shown to those without the right to view such information. The publication of the information in this document may constitute a contempt of court, punishable by a term of imprisonment.}
+\newcommand{\textsafe}{This document has been altered to remove sensitive personal data. It is cleared for publication and dissemination.
+}
+\definecolor{darkgreen}{rgb}{0.0, 0.2, 0.13}
+\definecolor{darkspringgreen}{rgb}{0.09, 0.45, 0.27}
+ \definecolor{forestgreen}{rgb}{0.13, 0.55, 0.13}
+\newcommand{\dquad}{\danger\danger\danger\danger}
+\newcommand{\dangersign}[1]{\scalebox{2}{\huge\danger}}
+\newcommand{\dangerblock}{\scalebox{2}{\huge\danger\quad\danger\quad\danger}}
+\newcommand{\warnblock}{{\Large\wrnstncl\warnword\quad\warnword\quad\warnword}}
+\newcommand{\tworules}{\hrule width \hsize height .7pt\vskip2pt\hrule width \hsize height .7pt}
+\newcommand{\allwarning}{\dangerblock\\\warnblock\\\normalfont\smallskip\warnformat\textwarn }
+\newcommand{\confwarning}{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The warning option
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifwarning
+\ifcnsr
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% a note saying document is redacted
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{center}
+\color{forestgreen}
+\tworules\vskip5pt
+\normalsize\normalfont\sffamily\bfseries\textsafe
+\vskip5pt\tworules
+\end{center}
+\else
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The WARNING for un-redacted docs
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{center}\color{red}\tworules\vskip 5pt\allwarning
+\vskip5pt\tworules%
+\end{center}%
+\fi%
+\else\fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Allow \maketitle
+% on same page
+% yay
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifwarning\let\oldmaketitle\maketitle\renewcommand{\maketitle}{{\let\newpage\relax\maketitle}}\else\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% print the warning at the start of the document
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\AtBeginDocument{\confwarning}
+\end{minted}
\section{Version History}
-\subsection{\texttt{1.00}}
+\subsection{\texttt{1.1.0}}
+\ttfamily 22 February 2022: Added the `warning' option and fixed a few errors in the code resulting from \TeX\ primitives causing issues.
+\subsection{\texttt{1.0.0}}
\ttfamily 18 February 2022: Package creation