diff options
Diffstat (limited to 'macros/latex')
638 files changed, 17365 insertions, 8989 deletions
diff --git a/macros/latex/contrib/abraces/README.md b/macros/latex/contrib/abraces/README.md index b26a225d8c..5234134d05 100644 --- a/macros/latex/contrib/abraces/README.md +++ b/macros/latex/contrib/abraces/README.md @@ -1,11 +1,11 @@ -`abraces` 2022/11/06 v2.1 +`abraces` 2024/08/02 v2.2 ---------------------------------------- A package that provides a character key-driven interface to supplement new constructions of the traditional `\overbrace` and `\underbrace` pairs in an asymmetric or arbitrary way. -Copyright (c) 2021 Werner Grundlingh +Copyright (c) 2024 Werner Grundlingh This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 diff --git a/macros/latex/contrib/abraces/abraces-doc.pdf b/macros/latex/contrib/abraces/abraces-doc.pdf Binary files differindex c0becaadde..a2161dafb5 100644 --- a/macros/latex/contrib/abraces/abraces-doc.pdf +++ b/macros/latex/contrib/abraces/abraces-doc.pdf diff --git a/macros/latex/contrib/abraces/abraces-doc.tex b/macros/latex/contrib/abraces/abraces-doc.tex index 970cf74eab..04178c2de7 100644 --- a/macros/latex/contrib/abraces/abraces-doc.tex +++ b/macros/latex/contrib/abraces/abraces-doc.tex @@ -1,4 +1,4 @@ -% $Id: abraces-doc.tex,v 2.1 2022/11/06 00:00:00 wgrundlingh stable $ +% $Id: abraces-doc.tex,v 2.2 2024/08/02 00:00:00 wgrundlingh stable $ \RequirePackage{xcolor}% http://ctan.org/pkg/xcolor (required to "overload" color package) \documentclass[10pt]{ltxdockit}[2011/03/25] @@ -7,7 +7,7 @@ \usepackage{booktabs,shortvrb,amsmath,xfp} \MakeShortVerb{\|} -\rcsid{$Id: abraces.tex,v 2.1 2022/11/06 00:00:00 wgrundlingh stable $} +\rcsid{$Id: abraces.tex,v 2.2 2024/08/02 00:00:00 wgrundlingh stable $} %\setcounter{secnumdepth}{2} %\setcounter{tocdepth}{4} @@ -305,11 +305,18 @@ This material is released under and subject to the \href{https://latex-project.o \section{Acknowledgements} -Thanks to Frank Mittlebach who stepped in and suggested an improvement in the original way \sty{abraces} functioned. Expansions included the use of \LaTeX3 command interface (via the \href{http://ctan.org/pkg/xparse}{\sty{xparse} package}). +Thanks to Frank Mittlebach who stepped in and suggested an improvement in the original way \sty{abraces} functioned. Expansions included the use of \LaTeX3 command interface. \section{Change log} \begin{itemize} + \item v2.2 (2024-08-02) Minor update + + \begin{itemize} + \item + Added \href{http://ctan.org/pkg/xcolor}{\sty{xcolor}} dependency to always have \lstinline|\bracecolor| available. + \end{itemize} + \item v2.1 (2022-11-06) Minor update \begin{itemize} diff --git a/macros/latex/contrib/abraces/abraces.sty b/macros/latex/contrib/abraces/abraces.sty index af146826ce..3b096e7ab7 100644 --- a/macros/latex/contrib/abraces/abraces.sty +++ b/macros/latex/contrib/abraces/abraces.sty @@ -1,5 +1,5 @@ %% abraces.sty -%% Copyright 2021 Werner Grundlingh +%% Copyright 2024 Werner Grundlingh % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -16,9 +16,12 @@ % This work consists of the file abraces.sty. \ProvidesPackage{abraces}% http://ctan.org/pkg/abraces - [2022/11/06 v2.1 Arbitrary and asymmetric braces] + [2024/08/02 v2.2 Arbitrary and asymmetric braces] +% xparse definitions now form part of the LaTeX core. However, keeping this in for those using older versions. \RequirePackage{xparse} +% Since abraces defines \bracecolor, add xcolor as dependency +\RequirePackage{xcolor} \newif\if@overload \DeclareOption{overload}{\@overloadtrue} diff --git a/macros/latex/contrib/asmeconf/README.md b/macros/latex/contrib/asmeconf/README.md index 2c07a04b9b..d01de1897f 100644 --- a/macros/latex/contrib/asmeconf/README.md +++ b/macros/latex/contrib/asmeconf/README.md @@ -1,7 +1,7 @@ #asmeconf: A latex template for ASME conference papers# - Version 1.37 dated 2024/02/06. + Version 1.38 dated 2024/08/01. ####Overview#### This class provides a LaTeX template for ASME Conference papers formatted according to @@ -80,23 +80,37 @@ ####Change log#### + v1.38 (2024/08/01) + - Add dcolumn type ",{x.y}" to center numbers on a comma separator + - Change appendix section titles block format, rather than hanging indentation + - Replace sample French appendix by a German appendix + - Fix bug in \[main=\] option (for babel) + - Define commands \\@title and \\@author + - Code clean-up (compatibility code, bookmark package loading, twocolumn loading,...) + - Various code changes to better support future tagged pdf + - Update documentation for using fontspec with asmeconf + - Rescale Termes, Helvetica, and Inconsolata fontdimens under LuaLaTeX to match pdfTeX + - Add logic to asme-template.tex to test for presence of non-latin fonts under LuaLaTeX + - Change code for Japanese fonts to by-pass bug in luatexja-fontspec + - Correct typo in babel font loading for traditional Chinese + - Remove calls for Harfbuzz renderer since fontspec handles this internally + v1.37 (2024/02/06) - - Under luaLaTeX, fontspec is now loaded by default. The option [nofontspec] will prevent this. - - Eliminate the following long-deprecated options: [oldauthor, lang, lang-second, lang-third] - - newtxtext has removed the superiors font options (Jan 2024). As a result, the option [nodefaultsups] has been removed from asmeconf, along with supporting code + - Under LuaLaTeX, fontspec is now loaded by default. The option \[nofontspec\] will prevent this. + - Eliminate the following long-deprecated options: \[oldauthor, lang, lang-second, lang-third\] + - newtxtext has removed the superiors font options (Jan 2024). As a result, the option \[nodefaultsups\] has been removed from asmeconf, along with supporting code - Streamline code for option handling and compatibility testing; other code clean-up - Switch code handling successive footnotes to expl3, adjust intersecting code - Small code changes to accommodate future tagged pdf - Refresh sample figures, edit sample bib file - Edits to asmeconf.bst: fix punctuation and spacing in journal title macros - - + v1.36 (2023/12/28) - Change option-passing to xcolor package to address recent changes that package's code which lead to an error message. v1.35 (2023/10/19) - Adjust pdf-a code to accommodate recent changes to hyperxmp package. NOTE: \\DocumentMetadata{ ..} is now preferred to using class option [pdf-a]. - - Add option to not use boldface text in captions: [unboldcaption] + - Add option to not use boldface text in captions: \[unboldcaption\] - Add mathversion sans for sans-serif math and set as default in unbolded captions v1.34 (2022/12/30) @@ -131,7 +145,7 @@ v1.27 (2021/12/26): - fix bug in captions that appeared in Jan. 2021 (code not uppercasing caption text) - revise code to switch to grid-style author block through a single package option, \[grid\]; previous macros for grid-style remain active. - - various code modifications to enable older LaTeX distributions to run this class. With pdfLaTeX, TeX Live 2016 or later should be used; with luaLaTeX, TeX Live 2021 or later should be used. + - various code modifications to enable older LaTeX distributions to run this class. With pdfLaTeX, TeX Live 2016 or later should be used; with LuaLaTeX, TeX Live 2021 or later should be used. - eliminate use of \\entry{} with a single argument to produce subheadings in nomenclature; use \\EntryHeading{} instead. (**not backward compatible**) - incorporate recent changes to LaTeX pdf management in relation to pdf-a color profile loading and recently deprecated \\pdfcatalog command - minor edits in relation to url links diff --git a/macros/latex/contrib/asmeconf/asmeconf-sample.bib b/macros/latex/contrib/asmeconf/asmeconf-sample.bib index 158b0f0081..66b2a356cf 100644 --- a/macros/latex/contrib/asmeconf/asmeconf-sample.bib +++ b/macros/latex/contrib/asmeconf/asmeconf-sample.bib @@ -1,6 +1,6 @@ %% Sample bibliography file for asmeconf.bst and asmeconf.cls %% -%% Revised 25 January 2024 +%% Revised 26 July 2024 %% Copyright John H. Lienhard, MIT %% Offered under the MIT license: https://ctan.org/license/mit @@ -212,6 +212,18 @@ urldate = {January 18, 2021}, } +@article{pohlhausen1921, + author = {Pohlhausen, E.}, + title = {Der {W}\"{a}rmeaustausch zwischen festen K\"{o}rpern und {F}l\"{u}ssigkeiten mit kleiner reibung und kleiner {W}\"{a}rmeleitung}, + journal = {Zeitschrift f\"{u}r {A}ngewandte {M}athematik und {Me}chanik}, + volume = {1}, + number = {2}, + pages = {115--121}, + doi = {10.1002/zamm.19210010205}, + year = {1921}, +} +%url = {https://onlinelibrary.wiley.com/doi/abs/10.1002/zamm.19210010205}, + @book{fourier1822, author = {Jean Baptiste Joseph Fourier}, year = {1822}, diff --git a/macros/latex/contrib/asmeconf/asmeconf-template.pdf b/macros/latex/contrib/asmeconf/asmeconf-template.pdf Binary files differindex 0e628963d3..8e3eefb516 100644 --- a/macros/latex/contrib/asmeconf/asmeconf-template.pdf +++ b/macros/latex/contrib/asmeconf/asmeconf-template.pdf diff --git a/macros/latex/contrib/asmeconf/asmeconf-template.tex b/macros/latex/contrib/asmeconf/asmeconf-template.tex index 84eecfb071..a325b89357 100644 --- a/macros/latex/contrib/asmeconf/asmeconf-template.tex +++ b/macros/latex/contrib/asmeconf/asmeconf-template.tex @@ -4,7 +4,7 @@ %% This file is asmeconf-template.tex, a LaTeX template to format ASME Conference papers according to %% the requirements on ASME's conference web pages, and including hypertext support for the pdf. %% -%% This file is version 1.37 dated 2024/02/06 +%% This file is version 1.38 dated 2024/08/01 %% %% As of version 1.11, this template defaults to ASME's newer conference guidelines first posted July 2019. %% Those guidelines changed the requested author block formatting to be inline. @@ -71,8 +71,8 @@ %% * See Appendix B for details. %% * Language support is most extensive when running LuaLaTeX, which automatically loads fontspec, but %% * be aware that you may to install additional fonts on your system to use fontspec. -%% * -%% * To use LuaLaTeX without bothering about extra fonts, use the [nofontspec] option to asmeconf. +%% +%% * Option to use LuaLaTeX **without** bothering about extra fonts, [nofontspec] %% %% The use of commands defined or modified by the asmeconf class is illustrated throughout this file. In particular, %% ASME requires capitalized, sans-serif section headings, and as a result some care is needed when using macros @@ -93,13 +93,13 @@ %% STRONGLY RECOMMENDED new pdf management code follows. %% This addition the LaTeX kernel was made in June 2022 by the LaTeX Project team. %% https://www.latex-project.org/news/latex2e-news/ltnews35.pdf -%% Uncomment the next lines and omit the option [pdf-a] from \documentclass[...]{asemconf} +%% If this doesn't work for you, comment out the next lines and add option [pdf-a] to \documentclass[...]{asmeconf} -%\DocumentMetadata{% -% pdfstandard=A-3b,% A-2b, A-2u, A-3b, or A-3u (don't use u options with LuaLaTeX) -% pdfversion=1.7, -% lang=en-US, -%} +\DocumentMetadata{% + pdfstandard=A-3b,% A-2b, A-2u, A-3b, or A-3u (don't use u options with LuaLaTeX) + pdfversion=1.7, + lang=en-US, +} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -108,7 +108,7 @@ %% Remove the [colorlinks] option before *final* submission to ASME, to get black text for printing, %% but keep that option for other uses. -\documentclass[pdf-a,balance,colorlinks,upint,subscriptcorrection,varvw,mathalfa=cal=boondoxo, spanish,french,vietnamese,russian,greek]{asmeconf} +\documentclass[balance,colorlinks,upint,subscriptcorrection,varvw,mathalfa=cal=boondoxo, german,spanish,vietnamese,russian,greek]{asmeconf} %%%%% pdf metadata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -121,6 +121,7 @@ pdflicenseurl={https://ctan.org/pkg/asmeconf},% may delete } + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} @@ -154,7 +155,7 @@ % \JointFirstAuthor, if applicable, follows the affiliation of the relevant authors, no spaces. \SetAuthors{% - John H.\ Lienhard\affil{1}\JointFirstAuthor\CorrespondingAuthor{}, + John H. Lienhard\affil{1}\JointFirstAuthor\CorrespondingAuthor{}, Luis Hern\'andez\affil{2}\JointFirstAuthor, Maria Silva\affil{3}, Henry Tudor\affil{4}, @@ -183,7 +184,6 @@ %%%%% End of fields to be completed. Now write your paper. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%%%% ABSTRACT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% Abstract should be 200 words or less @@ -314,16 +314,18 @@ Run 12 & 24 & 68.3 \\ %%%%%%%%%%%%%%% begin more complicated table %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% note column set as a 3 cm wide paragraph with 1em hanging indentation. See array package documentation. +% note numbers centered on "." (with d{3.3}) and on "," (with ,{3.3}). See dcolumn package documentation. \begin{table}[t] \caption{Table with more complicated columns}\label{tab:2}% \centering{% -\begin{tabular}{!{\hspace*{0.5cm}} >{\raggedright\hangindent=1em} p{3cm} d{3.3} @{\hspace*{1cm}} d{3.3} !{\hspace*{0.5cm}}} +\begin{tabular}{!{\hspace*{0.5cm}} >{\raggedright\hangindent=1em} p{3cm} d{3.3} @{\hspace*{1cm}} ,{3.3} !{\hspace*{0.5cm}}} \toprule Experiment & \multicolumn{1}{c@{\hspace*{1cm}}}{$u$ [m/s]} & \multicolumn{1}{c!{\hspace*{0.5cm}}}{$T$ [\textdegree C]} \\ \midrule -The first test we ran this morning & 124.3 & 68.3 \\ -The second test we ran this morning & 82.50 & 103.46 \\ -Our competitor's test & 72.321 & 141.384 \\ +The first test we ran this morning & 124.3 & 68,3 \\ +The second test we ran this morning & 82.50 & 103,46 \\ +Our competitor's test & 72.321 & 141,384 \\ \bottomrule \end{tabular} } @@ -444,7 +446,7 @@ Math italics are used for Roman and Greek letters by default. If you want an up \begin{equation}\label{eqn:dw} \vec{F} = m \vec{a} \quad\textrm{or}\quad \vec{\mathrm{F}} = m \vec{\mathrm{a}} \quad\textrm{or}\quad \mathbf{F} = m \mathbf{a} \quad\textrm{or}\quad \vec{\mathsf{F}} = m \vec{\mathsf{a}} \end{equation} -To get additional symbols in bold math, use the \verb|\bm{..}| macro from the \texttt{bm} package (which is loaded by the class) or, for longer passages, use \verb|{\mathversion{bold}|\ldots\texttt{\}}. +To get additional symbols in bold math, use the \verb|\bm{..}| macro from the \texttt{bm} package (which is loaded by the class) or, for longer passages, use \verb|{\mathversion{bold}..|\texttt{\}}. The class file also provides upright sans-serif Greek letters with \verb|\sfalpha| and similar expressions (e.g., $\sfalpha, \sfbeta, \sfgamma, \sfdelta$ \ldots $\bm{\sfalpha, \sfbeta, \sfgamma, \sfdelta \ldots}$), in case they are needed (but note that the \verb|newtxmath| options \verb|frenchmath| and \verb|slantedGreek| also affect how Greek letters are presented). @@ -555,7 +557,9 @@ The \hologo{LuaLaTeX} engine is useful with \texttt{asmeconf} in two situations: \item \textbf{Executing lua code directly in your \LaTeX\ file.} With lua code, complicated functions can be plotted or numerical integration can be executed. An example file in the distribution demonstrates this capability~\cite{lienhard2024}. In this situation, \textit{be sure to use the class option} \texttt{[nofontspec]}, so that you won't need to install additional fonts on your computer. -\item \textbf{Using complex alphabets.} With \hologo{pdfLaTeX}, the \texttt{asmeconf} package supports Latin alphabets, as well as Cyrillic, Greek, and Vietnamese. If you need scripts such as Arabic, Chinese, or Japanese, \hologo{LuaLaTeX} with the \texttt{fontspec} package can use fonts installed in your computer operating system. See the example file in this distribution for more details~\cite{lienhard2021}. +\item \textbf{Using complex alphabets.} With \hologo{pdfLaTeX}, the \texttt{asmeconf} package supports Latin alphabets, as well as Cyrillic, Greek, and Vietnamese. If you need scripts such as Arabic, Chinese, or Japanese, \hologo{LuaLaTeX} with the \texttt{fontspec} package can use fonts installed in your computer operating system.\footnote{For English, you \textit{must} have these fonts installed:\par \parbox{\columnwidth}{\setlength{\parindent}{12pt}TeX Gyre Termes (\hrefurl{https://ctan.org/tex-archive/fonts/newtx/opentype}{ctan.org/tex-archive/fonts/newtx/opentype}),\par TeX~Gyre~Heros (\hrefurl{https://ctan.org/tex-archive/fonts/tex-gyre/opentype}{ctan.org/tex-archive/fonts/tex-gyre/opentype}),\par +Inconsolatazi4 (\hrefurl{https://ctan.org/tex-archive/fonts/inconsolata/opentype}{ctan.org/tex-archive/fonts/inconsolata/opentype}).}} See the example file in this distribution for more details~\cite{lienhard2021}. + \end{description} @@ -572,9 +576,10 @@ abstract in another language. When more than one language option is included in \verb|\documentclass[..]{asmeconf}|, English will be set as the document's main language. (To choose a different main language, set \texttt{[main=..]}). -If no language options are given, the package defaults to English. As examples, a passage in French is -shown in \selectlanguage{french}\appendixname~\ref{app:fourier}\selectlanguage{english}, followed by -\ifpdftex abstracts in Spanish, Greek, Russian, and Vietnamese.\else abstracts in other languages.\fi +If no language options are given, the package defaults to English. As examples, a passage in German is +shown in \selectlanguage{german}\appendixname~\ref{app:pohlhausen}\selectlanguage{german}, +%\selectlanguage{french}\appendixname~\ref{app:fourier}\selectlanguage{english}, +followed by \ifpdftex abstracts in Spanish, Greek, Russian, and Vietnamese.\else abstracts in other languages.\fi The input encoding can be utf-8, as for these glyphs: %% If you have trouble with the next line, your file may not be saved in utf-8 format. You can delete that line to resolve the issue. @@ -588,12 +593,18 @@ The bibliography style, \texttt{asmeconf.bst}, is designed in English and aimed %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{selectlanguage}{french}% -\section{Discours Préliminaire de Fourier}\label{app:fourier} -Les causes primordiales ne nous sont point connues; mais elles sont assujetties à des lois simples et constantes, que l'on peut découvrir par l'observation, et dont l'étude est l'objet de la philosophie naturelle. - -La chale ur pénètre, comme la gravité, toutes les substances de l'univers, ses rayons occupent toutes les parties de l'espace. Le but de notre ouvrage est d'exposer les lois mathématiques que suit cet élément. Cette théorie formera désormais une des branches les plus importantes de la physique générale~\cite{fourier1822}. +\begin{selectlanguage}{german}% +\section{Wärmeaustausch und Reibungswiderstand (\NoCaseChange{von} E. Pohlhausen)}\label{app:pohlhausen} +In einer strömenden Flussigkeit sind Wärmeleitung und Wärmekonvektion Vorgänge, die mit der inneren Reibung (oder Impulsleitung) und mit der Impulskonvektion große Aehnlichkeit besitzen. Mathematisch findet dies seinen Ausdruck in dem gleichartigen Bau der Differentialgleichungen, die einerseits für die Temperatur und anderseits für den Geschwindigkeitsvektor in der Flüssigkeit bestehen. Man kann daraus auf eine Beziehung +zwischen dem Wärmeaustanch und dem Reibungswiderstand schließen, die eine strömende Flüssigkeit an einem festen Körper hervorrufen. Dies ist zuerst von Prandtl ausgesprochen und durchgeführt worden, und zwar für turbulente Vorgänge, unter der vereinfachenden Annahme von Wärmequellen und -senken im Innern der Flüssigkeit~\cite{pohlhausen1921}. \end{selectlanguage}% + +%\begin{selectlanguage}{french}% +%\section{Discours Préliminaire de Fourier}\label{app:fourier} +%Les causes primordiales ne nous sont point connues; mais elles sont assujetties à des lois simples et constantes, que l'on peut découvrir par l'observation, et dont l'étude est l'objet de la philosophie naturelle. +% +%La chale ur pénètre, comme la gravité, toutes les substances de l'univers, ses rayons occupent toutes les parties de l'espace. Le but de notre ouvrage est d'exposer les lois mathématiques que suit cet élément. Cette théorie formera désormais une des branches les plus importantes de la physique générale~\cite{fourier1822}. +%\end{selectlanguage}% \begin{selectlanguage}{spanish}% \begin{abstract*} @@ -625,19 +636,25 @@ Este es el resumen del artículo. Escribimos en español. Se describen el proble \end{selectlanguage}% Checked and edited by Nguyen Le and Thao Nguyen \fi -\iffontspecloaded %%% requires lualatex +\iffontspecloaded %%% These passages require using lualatex AND installing the mentioned fonts as system fonts on your computer. % - \begin{selectlanguage}{greek}% - \begin{abstract*} - Αυτή είναι η περίληψη του άρθρου. Χρησιμοποιούμε την ελληνική γλώσσα. Περιγράφεται το πρόβλημα, οι μέθοδοι και τα αποτελέσματα. Περιλαμβάνονται επίσης αναφορές. - \end{abstract*} - \end{selectlanguage}% Edited by George Barbastathis -% - \begin{selectlanguage}{russian} - \begin{abstract*} - Это резюме статьи. Пишем по русски. Описаны проблема, методы и результаты. Библиография также включена.% - \end{abstract*} - \end{selectlanguage}% edited by Steven Gerasimoff + \IfFontExistsTF{NotoSans}{ + \IfFontExistsTF{NotoSerif}{ + % + \begin{selectlanguage}{greek}% + \begin{abstract*} + Αυτή είναι η περίληψη του άρθρου. Χρησιμοποιούμε την ελληνική γλώσσα. Περιγράφεται το πρόβλημα, οι μέθοδοι και τα αποτελέσματα. Περιλαμβάνονται επίσης αναφορές. + \end{abstract*} + \end{selectlanguage}% Edited by George Barbastathis + % + \begin{selectlanguage}{russian} + \begin{abstract*} + Это резюме статьи. Пишем по русски. Описаны проблема, методы и результаты. Библиография также включена.% + \end{abstract*} + \end{selectlanguage}% edited by Steven Gerasimoff + % + }{\ClassWarning{\ClassName}{I can't find NotoSerif.ttf, which is needed for Greek and Russian language text. Please install that font.}} + }{\ClassWarning{\ClassName}{I can't find NotoSans.ttf, which is needed for Greek and Russian language text. Please install that font.}} % \begin{selectlanguage}{vietnamese} \begin{abstract*} @@ -645,24 +662,41 @@ Este es el resumen del artículo. Escribimos en español. Se describen el proble \end{abstract*} \end{selectlanguage}% Checked and edited by Nguyen Le and Thao Nguyen % -% \begin{selectlanguage}{japanese}% Use class option [japanese] if you uncomment this passage. -% \begin{abstract*} -% % 論文の要約です。日本語で記述します。問題、方法、および結果について説明します。また、参考文献も含めます。 -% この論文の日本語での要約は以下のとおりです。問題、方法、および結果が説明されています。参考資料も添付してあります。 -% \end{abstract*} -% \end{selectlanguage}% Edited by Keiji Yano and Yoshiki Okamoto % - \begin{selectlanguage}{korean} - \begin{abstract*} - 이것은 한국어로 쓰인 논문의 초록입니다. 문제, 방법 및 결과가 설명되어 있습니다. 참조도 포함됩니다. - \end{abstract*} - \end{selectlanguage}% Edited by Hyung Won Chung. +%% Use class option [japanese] if you uncomment this passage. +% \IfFontExistsTF{NotoSerifCJKjp}{% +% \IfFontExistsTF{NotoSansCJKjp}{% +% % +% \begin{selectlanguage}{japanese} +% \begin{abstract*} +% % 論文の要約です。日本語で記述します。問題、方法、および結果について説明します。また、参考文献も含めます。 +% この論文の日本語での要約は以下のとおりです。問題、方法、および結果が説明されています。参考資料も添付してあります。 +% \end{abstract*} +% \end{selectlanguage}% Edited by Keiji Yano and Yoshiki Okamoto +% % +% }{\ClassWarning{\ClassName}{I can't find NotoSerifCJKjp, which is needed for Japanese language text. Please install that font.}} +% }{\ClassWarning{\ClassName}{I can't find NotoSansCJKjp, which is needed for Japanese language text. Please install that font.}} % - \begin{selectlanguage}{chinese-simplified} - \begin{abstract*} - 这是文章的摘要。我们用中文书写,描述了问题,方法和结果,还包括了参考文献。 - \end{abstract*} - \end{selectlanguage}% edited by Zi Hao Foo + \IfFontExistsTF{NotoSansCJKkr}{% + \IfFontExistsTF{NotoSerifCJKkr}{% + % + \begin{selectlanguage}{korean} + \begin{abstract*} + 이것은 한국어로 쓰인 논문의 초록입니다. 문제, 방법 및 결과가 설명되어 있습니다. 참조도 포함됩니다. + \end{abstract*} + \end{selectlanguage}% Edited by Hyung Won Chung. + % + }{\ClassWarning{\ClassName}{I can't find NotoSerifCJKkr.otf, which is needed for Korean language text. Please install that font.}} + % + \IfFontExistsTF{NotoSerifCJKsc}{% + \begin{selectlanguage}{chinese-simplified} + \begin{abstract*} + 这是文章的摘要。我们用中文书写,描述了问题,方法和结果,还包括了参考文献。 + \end{abstract*} + \end{selectlanguage}% edited by Zi Hao Foo + % + }{\ClassWarning{\ClassName}{I can't find NotoSerifCJKsc.otf, which is needed for Korean language text. Please install that font.}} + }{\ClassWarning{\ClassName}{I can't find NotoSansCJK.ttf, which is needed for Korean and simplified Chinese text. Please install that font.}} % \fi diff --git a/macros/latex/contrib/asmeconf/asmeconf.cls b/macros/latex/contrib/asmeconf/asmeconf.cls index 186e5d4941..82ccbc2614 100644 --- a/macros/latex/contrib/asmeconf/asmeconf.cls +++ b/macros/latex/contrib/asmeconf/asmeconf.cls @@ -5,8 +5,8 @@ %% ASME conference requirements as represented on ASME's conference web pages in 2024. %% %% This file's version and date: - \def\versionno{1.37} - \def\versiondate{2024/02/06\space} + \def\versionno{1.38} + \def\versiondate{2024/08/01\space} %% %% Author: John H. Lienhard, V %% Department of Mechanical Engineering @@ -23,7 +23,7 @@ %% 6. Provide line numbers for editing and review %% 7. Support balancing length of columns on last page %% 8. Provide copyright footer for federal employees and contractors -%% 9. Support the archival PDF/A standards 1b, 2b, 2u, 3b, and 3u +%% 9. Support archival PDF/A standards %% 10. Enable various math and text features from the newtxmath and newtxtext packages %% 11. Support inclusion of passages in languages other than English %% @@ -66,74 +66,76 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesClass{asmeconf}[\versiondate ASME Conference Paper LaTeX Template (JHL)] -\LoadClass[twoside,twocolumn,10pt]{article} +\LoadClass[twoside,10pt]{article}% twocolumn is initiated in \MakeTitle % Even/odd page layout is not used in ASME's specs, although the papers are printed in two-sided format. \RequirePackage{iftex}% provides \ifpdftex (many) & \ifluatex (once) \RequirePackage{ifthen}% ifthenelse (many) & \whiledo (once) -\RequirePackage{etoolbox}% using patchcmd in 4 places +\RequirePackage{etoolbox}% using patchcmd in 4 or 5 places +\ExplSyntaxOn + \str_const:Nn \ClassName {asmeconf} +\ExplSyntaxOff + +%%%%%%%%%%%%% Compatibility codes for older distributions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%% Test compatibility of older distributions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}% compare version to date; \If... added to latex 2020/10/01 +\providecommand\IfPackageAtLeastTF{\@ifpackagelater}% compare version to date; \If... added to latex 2020/10/01 +\providecommand\IfPDFManagementActiveTF{\@secondoftwo}% \If... added to latex 2021/07/23 +\providecommand\IfPackageLoadedTF{\@ifpackageloaded}% \If...added to latex 2021/11/15 +\providecommand\ClassNoteNoLine[2]{\typeout{^^JClass Note #1: #2.^^J}}% log & terminal note... added to latex 2021/11/15 -\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}% compare version to date; \If... added to latex 2020/10/01 -\providecommand\IfPackageAtLeastTF{\@ifpackagelater}% compare version to date; \If... added to latex 2020/10/01 -\providecommand\IfPackageLoadedTF{\@ifpackageloaded}% \If...added to latex 2021/11/15 +\IfFormatAtLeastTF{2020/10/01}{\relax}{% + \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. Formats dated 2020/10/01 or later are recommended for the asmejour class. Older formats and packages may generate errors or fail entirely!}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You can try to click past the errors for now.}% +} + +% check whether pdfmanagement (\DocumentMetadata) has been loaded (else fall back to hyperxmp and bookmark packages after loading hyperref) +\newif\ifasme@pdfmanagement +\IfPDFManagementActiveTF{ + \asme@pdfmanagementtrue +}{ + \asme@pdfmanagementfalse + \ClassWarningNoLine{\ClassName}{pdfmanagement is not active. Will load hyperxmp and bookmark packages instead} +} -\IfFormatAtLeastTF{2020/10/01}{% - \ClassInfo{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020/10/01 or later are strongly recommended for best results} - }{% - \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. Formats dated 2020/10/01 or later are recommended for the asmejour class. Older formats and packages may generate errors or fail entirely!}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You can try to click past the errors for now.}% +% Allow pre 2021/11/15 formats to see the graphicx alt key without causing an error +\IfFormatAtLeastTF{2021/11/15}{ + \relax +}{ + \AtBeginDocument{ + \IfPackageLoadedTF{graphicx}{\define@key{Gin}{alt}{}}{\relax} + } } +% Enable pre-2020/10 formats to access essential macros later moved into LaTeX kernel \ifdefined\NewDocumentCommand\else \RequirePackage{xparse}% enable older installations to access features in LaTeX kernel since 2020/10/01; but need at least 2018/04... \fi -\DeclareDocumentCommand\LogNote{m}{% - \IfFormatAtLeastTF{2021/11/15}{% - \ClassNoteNoLine{asmeconf}{#1}% Added to LaTeX in Nov. 2021 - }{% - \ClassWarningNoLine{asmeconf}{#1}% - } +% Provide pre-2020/10 installations with basic unicode character mappings +\IfFormatAtLeastTF{2020/10/01}{\relax}{% +\ifpdftex + \pdfgentounicode=1 %% enable CMaps; was moved into the latex kernel Oct 2020 + \input glyphtounicode.tex %% lists of mappings; was moved into the latex kernel Oct 2020 +\fi } \IfPackageAtLeastTF{iftex}{2019/11/07}{\relax}{% - \ClassError{asemconf}{Package iftex is too old. Go to \string https://ctan.org and download an up-to-date version.}% + \ClassError{\ClassName}{Package iftex is too old. Go to \string https://ctan.org and download an up-to-date version.}{% + Your latex installation does not have an up-to-date version of the package iftex. You can get it at CTAN: \string https://ctan.org.} } -%% Test whether \DocumentMetadata has been loaded (Thank you Ulrike Fischer) -\newif\if@asme@pdfmanagement -% \IfPDFManagementActiveTF{\@asme@pdfmanagementtrue}{\@asme@pdfmanagementfalse}% New 2021/07/23, don't implement yet -\ExplSyntaxOn - \IfFormatAtLeastTF{2020/02/02}{% - \bool_if:nTF - { - \bool_lazy_and_p:nn - {\cs_if_exist_p:N \pdfmanagement_if_active_p:} - { \pdfmanagement_if_active_p: } - } - { - \@asme@pdfmanagementtrue - } - { - \@asme@pdfmanagementfalse - } - }{\@asme@pdfmanagementfalse} -\ExplSyntaxOff - - %%%%%%%%%%%%%% Options for the class %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage{kvoptions} \SetupKeyvalOptions{ - family=asmeconf, + family=\ClassName, prefix=asmeconf@, setkeys=\kvsetkeys, } %%% set key [colorlinks] to have colored hyperlinks, rather than black links (use a key with new pdfmanagement, 2021/12/01) -\define@key{asmeconf}{colorlinks}[colorlinks]{% +\define@key{\ClassName}{colorlinks}[colorlinks]{% \PassOptionsToPackage{#1}{hyperref}% } @@ -182,12 +184,11 @@ \ifthenelse{\equal{#1}{\ac@main}}{\ac@cyrillictrue\def\ac@TtwoA{T2A}}{\relax}% comparing strings } -\define@key{asmeconf}{main}[english]{% +\define@key{\ClassName}{main}{% remove default 2024/07/26, to avoid conflict with subsequent logic \PassOptionsToPackage{main=#1,#1}{babel}% added #1 resolves conflict of russianb.ldf & ukrainianb.ldf under "main=". \ac@mainsettrue \ifthenelse{\equal{#1}{english}}{% - \PassOptionsToPackage{pdflang=en}{hyperref}}{% - \LogNote{Selecting #1 as the primary language}% + \ClassNoteNoLine{\ClassName}{Selecting #1 as the primary language}% \ifthenelse{\equal{#1}{greek}}{% \ac@greektrue \def\ac@LGR{LGR}% @@ -201,7 +202,7 @@ \@FindCyr{russian;belarusian;bulgarian;macedonian;serbianc;ukrainian} }% } -\define@key{asmeconf}{vietnamese}[]{% +\define@key{\ClassName}{vietnamese}[]{% \RequirePackage[vietnamese=nohyphenation]{hyphsubst}% using key, not option, to allow loading package w/o babel warning. \PassOptionsToPackage{vietnamese.noencoding}{babel}% modified.noencoding suppresses unnecessary warning about inputenc \ac@vietnamesetrue @@ -209,21 +210,20 @@ } \DeclareDefaultOption{}% suppress warnings about unused options -\ProcessKeyvalOptions{asmeconf} +\ProcessKeyvalOptions{\ClassName} -%% if main language was not chosen explicitly, default to English +%% if main language was not chosen explicitly, ensure default to English \ifac@mainset\relax\else \PassOptionsToPackage{main=english}{babel}% - \PassOptionsToPackage{pdflang=en}{hyperref} - \ClassInfo{asmeconf}{Selecting English as the primary language, since main= not set}% + \ClassInfo{\ClassName}{Selecting English as the primary language, since main= not set}% \fi %% Turn off these keys now that we're done with them -\def\@KeyFamily{asmeconf} +\def\@KeyFamily{\ClassName} \NewDocumentCommand\ac@DisableOption{m}{% \DisableKeyvalOption[% action=ignore,% - class=asmeconf% + class=\ClassName% ]{#1}{\@KeyFamily}% } \NewDocumentCommand\@DisableKeys{>{\SplitList{;}}m}{\ProcessList{#1}{\ac@DisableOption}} @@ -249,7 +249,7 @@ \ifpdftex \PassOptionsToPackage{largesc=true}{newtxtext}% largesc is a boolean key in newtxtext \else - \ClassWarningNoLine{asmeconf}{largesc option is not available under luaLateX. It will be ignored}% + \ClassWarningNoLine{\ClassName}{largesc option is not available under luaLateX. It will be ignored}% \fi } @@ -261,21 +261,23 @@ %% option to hyphenate the inconsolata typewriter font [hyphenate] and to issue a warning when that's done. \DeclareOption{hyphenate}{% \ifac@fontspec - \ClassWarningNoLine{asmeconf}{hyphenate option is not supported by fontspec, will be ignored}% + \ClassWarningNoLine{\ClassName}{hyphenate option is not supported by fontspec. It will be ignored}% \else \PassOptionsToPackage{hyphenate}{inconsolata}% hyphenate is a key via xkeyval in inconsolata - \LogNote{Allowing hyphenation of typewriter font}% + \ClassNoteNoLine{\ClassName}{Allowing hyphenation of typewriter font}% \fi } %% option for monospacing in inconsolata typewriter font [mono]. +\def\MonoNotMono{WordSpace={1,1,1}}% rescaled tt font to match pdf, 2024/07/28 \DeclareOption{mono}{% \ifac@fontspec - \def\MonoNotMono{}% + \def\MonoNotMono{WordSpace={1,0,0},PunctuationSpace={3}}% NB: these are the default WordSpace values. 20204/07/30 \else \PassOptionsToPackage{mono}{inconsolata}% mono is a key via xkeyval in inconsolata \fi } %% option for unslashed zero in inconsolata typewriter font [var0]. +\def\ssztwo{}% for Inconsolatazi4; default uses slashed zero, +ss02 uses regular zero \DeclareOption{var0}{% \ifac@fontspec \def\ssztwo{+ss02}% stylistic alternate for regular zero @@ -296,7 +298,7 @@ \newif\ifac@setpdfa\ac@setpdfafalse \newif\ifac@pdfaone\ac@pdfaonefalse -\if@asme@pdfmanagement\else +\ifasme@pdfmanagement\else \SetupKeyvalOptions{ family=pdfaopt, @@ -308,7 +310,7 @@ %%% set key [pdfa] to activate pdf/a compliance (default is pdf/A-3u) \define@key{pdfaopt}{pdf-a}[true]{% \IfFormatAtLeastTF{2018/12/01}{\relax}{% - \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. Formats dated 2018/12/01 or later are necessary for the [pdf-a] option. Older formats may generate errors}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Meanwhile, you can remove the [pdf-a] option and try again}% + \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. Formats dated 2018/12/01 or later are necessary for the [pdf-a] option. Older formats may generate errors}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Meanwhile, you can remove the [pdf-a] option and try again}% } \ac@setpdfatrue \PassOptionsToPackage{pdfa}{hyperref} @@ -344,7 +346,7 @@ %%%%%%%%%%%% PDF/A compliance related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\if@asme@pdfmanagement\else +\ifasme@pdfmanagement\else \ifpdftex \ifac@pdfaone \pdfminorversion=4 % for pdf/a-1 need version 4, not 7 @@ -353,7 +355,7 @@ \fi \else \ifluatex - \ifac@setpdfa\ClassWarningNoLine{asmeconf}{pdf-a option requires pdfLaTeX engine. Under LuaLaTeX, use % + \ifac@setpdfa\ClassWarningNoLine{\ClassName}{pdf-a option requires pdfLaTeX engine. Under LuaLaTeX, use % \protect\DocumentMetadata{pdfstandard=A-3b} before \protect\documentclass[..]{asmeconf}}% \fi \directlua{ @@ -367,7 +369,7 @@ end } \else - \ClassError{asmeconf}{Please use either pdfLaTeX or LuaLaTeX}{This class has NOT been configured to support other engines, and the results will be unpredictable. Exit and rerun using either pdfLaTeX or LuaLaTeX.}% + \ClassError{\ClassName}{Please use either pdfLaTeX or LuaLaTeX}{This class has NOT been configured to support other engines, and the results will be unpredictable. Exit and rerun using either pdfLaTeX or LuaLaTeX.}% \fi \fi \fi @@ -381,19 +383,17 @@ \ifpdftex \ifasmeconf@nofontspec - \ClassWarningNoLine{asmeconf}{The [nofontspec] option requires LuaLaTeX. It will be ignored under pdfLaTeX}% + \ClassWarningNoLine{\ClassName}{The [nofontspec] option requires LuaLaTeX. It will be ignored under pdfLaTeX}% \fi \else \ifasmeconf@nofontspec - \ClassWarningNoLine{asmeconf}{The [nofontspec] option has been issued. LuaLaTeX will run without font support}% + \ClassWarningNoLine{\ClassName}{The [nofontspec] option has been issued. LuaLaTeX will run without font support}% \else \IfFormatAtLeastTF{2020/10/01}{% \ac@fontspectrue \fontspecloadedtrue - \def\ssztwo{}% for Inconsolatazi4; default uses slashed zero, +ss02 uses regular zero - \def\MonoNotMono{WordSpace={1,1.33,1.67}}% for Inconsolatazi4; default allows word spacing (is not mono) }{% - \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX installations dated 2020/10/01 or later are needed to run LuaLaTeX with the fontspec package. Fontspec will NOT be loaded. Language support will be minimal}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You may alternatively choose the [nofontspec] option.}% + \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. LaTeX installations dated 2020/10/01 or later are needed to run LuaLaTeX with the fontspec package. Fontspec will NOT be loaded. Language support will be minimal}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You may alternatively choose the [nofontspec] option.}% } \fi \fi @@ -403,7 +403,7 @@ \PassOptionsToPackage{japanese}{babel}% \ac@japanesetrue \else - \ClassWarningNoLine{asmeconf}{[japanese] option is supported only under LuaLaTeX with fontspec. It will be ignored}% + \ClassWarningNoLine{\ClassName}{[japanese] option is supported only under LuaLaTeX with fontspec. It will be ignored}% \fi } @@ -426,23 +426,23 @@ % Several languages do not have .ldf files to load. Babel will call these on demand. % -\DeclareOption{arabic}{\ClassError{asmeconf}{Do not specify "arabic" as a class option}{Instead, give the option [bidi=basic] and specify "arabic" when you call the language within your document.}} +\DeclareOption{arabic}{\ClassError{\ClassName}{Do not specify "arabic" as a class option}{Instead, give the option [bidi=basic] and specify "arabic" when you call the language within your document.}} % -\DeclareOption{bengali}{\ClassError{asmeconf}{Do not specify "bengali" as a class option}{Babel does not have an ldf file for Bengali. Instead, specify "bengali" when you call the language within your document. No class option is needed.}} +\DeclareOption{bengali}{\ClassError{\ClassName}{Do not specify "bengali" as a class option}{Babel does not have an ldf file for Bengali. Instead, specify "bengali" when you call the language within your document. No class option is needed.}} % -\DeclareOption{chinese-simplified}{\ClassError{asmeconf}{Do not specify "chinese-simplified" as class option}{Babel does not have an ldf file for simplified Chinese. Instead, specify "chinese-simplified" when you call the language within your document. No class option is needed.}} +\DeclareOption{chinese-simplified}{\ClassError{\ClassName}{Do not specify "chinese-simplified" as class option}{Babel does not have an ldf file for simplified Chinese. Instead, specify "chinese-simplified" when you call the language within your document. No class option is needed.}} % -\DeclareOption{chinese-traditional}{\ClassError{asmeconf}{Do not specify "chinese-traditional" as class option}{Babel does not have an ldf file for traditional Chinese. Instead, specify "chinese-traditional" when you call the language within your document. No class option is needed.}} +\DeclareOption{chinese-traditional}{\ClassError{\ClassName}{Do not specify "chinese-traditional" as class option}{Babel does not have an ldf file for traditional Chinese. Instead, specify "chinese-traditional" when you call the language within your document. No class option is needed.}} % -\DeclareOption{chinese}{\ClassError{asmeconf}{Do not specify "chinese" as a class option}{Instead, specify either "chinese-simplified" or "chinese-traditional" when you call the language within your document. No class option is needed.}} +\DeclareOption{chinese}{\ClassError{\ClassName}{Do not specify "chinese" as a class option}{Instead, specify either "chinese-simplified" or "chinese-traditional" when you call the language within your document. No class option is needed.}} % -\DeclareOption{hindi}{\ClassError{asmeconf}{Do not specify "hindi" as a class option}{Babel does not have an ldf file for Hindi. Instead, specify "hindi" when you call the language within your document. No class option is needed.}} +\DeclareOption{hindi}{\ClassError{\ClassName}{Do not specify "hindi" as a class option}{Babel does not have an ldf file for Hindi. Instead, specify "hindi" when you call the language within your document. No class option is needed.}} % -\DeclareOption{marathi}{\ClassError{asmeconf}{Do not specify "marathi" as a class option}{Babel does not have an ldf file for Marathi. Instead, specify "marathi" when you call the language within your document. No class option is needed.}} +\DeclareOption{marathi}{\ClassError{\ClassName}{Do not specify "marathi" as a class option}{Babel does not have an ldf file for Marathi. Instead, specify "marathi" when you call the language within your document. No class option is needed.}} % -\DeclareOption{korean}{\ClassError{asmeconf}{Do not specify "korean" as class option}{Babel does not have an ldf file for Korean. Instead, specify "korean"when you call the language within your document. No class option is needed.}} +\DeclareOption{korean}{\ClassError{\ClassName}{Do not specify "korean" as class option}{Babel does not have an ldf file for Korean. Instead, specify "korean"when you call the language within your document. No class option is needed.}} % -\DeclareOption{tamil}{\ClassError{asmeconf}{Do not specify "tamil" as a class option}{Babel does not have an ldf file for Tamil. Instead, specify "tamil" when you call the language within your document. No class option is needed.}} +\DeclareOption{tamil}{\ClassError{\ClassName}{Do not specify "tamil" as a class option}{Babel does not have an ldf file for Tamil. Instead, specify "tamil" when you call the language within your document. No class option is needed.}} %% Suppress warnings about unused global options \DeclareOption*{} @@ -462,23 +462,18 @@ \RequirePackage{graphicx} % removed obsolete options, 2023/11/19 \RequirePackage[dvipsnames,svgnames,x11names]{xcolor} -% Allow pre 2021/11/15 formats to see the graphicx alt key without causing an error, in preparation for tagged pdf -\IfFormatAtLeastTF{2021/11/15}{ - \relax -}{ - \AtBeginDocument{ - \IfPackageLoadedTF{graphicx}{\define@key{Gin}{alt}{}}{\relax} - } -} %%%%%%%%%%%% Table related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage{booktabs} \RequirePackage{array} -\RequirePackage{dcolumn}% alignment on decimal places -\newcolumntype{d}[1]{D{.}{.}{#1}}% NB: This conflicts with babel's Spanish language option which makes "." an active character. - % To use "," separator, put this command in your preamble: \newcolumntype{d}[1]{D{,}{,}{#1}} +\RequirePackage{dcolumn}% alignment on decimal places +% use d{x.y} to center on "." as in "12.234" +\newcolumntype{d}[1]{D{.}{.}{#1}} +% NB: The above conflicts with babel's Spanish language option which makes "." an active character. +% Instead, to use "," as the decimal separator, choose columntype "," (as in "12,234") +\newcolumntype{,}[1]{D{,}{,}{#1}} %%%%%%%%% Caption related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -507,7 +502,7 @@ \captionsetup[table]{labelformat=uppercase,labelfont={sf,bf,small},textfont={sf,bf,small},textformat=boldmath,labelsep=colon,skip=0.5\baselineskip} %name=TABLE, \fi -%% This construction avoids a failure of hyperref in relation to uppercase caption +%% This construction avoids a failure of hyperref in relation to uppercase captions %% Discussion: https://tex.stackexchange.com/questions/375695/maketextuppercase-inside-table-captions \AtBeginDocument{ \let\scaption\caption @@ -542,8 +537,17 @@ \RequirePackage[no-math]{fontspec} \defaultfontfeatures{Ligatures=TeX,} % - \setmainfont{TeXGyreTermesX}[% Presumes these are system fonts! Available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre - WordSpace = {1,1.4,1},%% This stretch matches newtxtext a little better. 1.4 + \def\FontWarning{For luaLaTeX, you MUST have these OpenType fonts installed as system fonts on your computer: TeX Gyre Termes and TeX Gyre Heros (from \string http://www.gust.org.pl/projects/e-foundry/tex-gyre) and Inconsolatazi4 (\string https://ctan.org/tex-archive/fonts/inconsolata/opentype). If you DON'T have these fonts, you will see ERROR messages!} +% + \IfFontExistsTF{TeX Gyre Termes}{}{\ClassWarningNoLine{\ClassName}{\FontWarning} } + \IfFontExistsTF{texgyreheros}{}{ \ClassWarningNoLine{\ClassName}{\FontWarning} } + \IfFontExistsTF{Inconsolatazi4}{}{ \ClassWarningNoLine{\ClassName}{\FontWarning} } +% + % The newtx package includes a modified version of TeXGyreTermes called TexGyreTermesX, which is loaded here. + % Can fall back to TeXGyreTermes if desired, available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre + \setmainfont{TeXGyreTermesX}[ + WordSpace = {1,1.6,1.2},%% This stretch matches newtxtext a little better; rescaled 2024/07/28 + PunctuationSpace = 1.332,%% match fontdimen7 to newtxtext, 2024/07/28 Extension = .otf, UprightFont = *-Regular, ItalicFont = *-Italic, @@ -552,7 +556,7 @@ Numbers = Lining, ] \setsansfont{texgyreheros}[% Presumes these are system fonts! Available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre - WordSpace = {1,1.4,1}, + WordSpace = {1,1,1},% These spacings match newtxtext; rescaled to unity 2024/07/28 Extension = .otf, UprightFont = *-regular, ItalicFont = *-italic, @@ -562,7 +566,6 @@ Scale=0.91,% same as for newtx; former value 0.9 too small 2022/01/15 ] \setmonofont{Inconsolatazi4}[% This otf font ships with the LaTeX Inconsolata package (it's in TeX Live) - \MonoNotMono,% match newtxtext if we enable wordspacing Scale=1.05,% rescaled from 1, 22/03/10 Extension = .otf, UprightFont = *-Regular, @@ -570,20 +573,22 @@ BoldFont = *-Bold, BoldItalicFont = *-Bold,% has no italic face RawFeature = {+ss01,\ssztwo,+ss03}, - ] + \MonoNotMono,% match newtxtext if we enable wordspacing; note wordspace def'd in option above. + ] % % For many languages, using babel commands helps font loading. + % Switched Harbbuzz to OpenType throughout, 2024/07/28 % Noto fonts are available at https://github.com/googlefonts \def\Noto@scale{0.92} \def\Ara@scale{0.91}% For the serif font only \def\NotoBan@scale{0.92}% 1.} should probably stay consistent within the Noto family. \def\NotoDev@scale{0.92}% 1.} should probably stay consistent within the Noto family. \def\NotoTam@scale{0.92} - \def\Noto@color{black} + \def\Noto@color{Color=black}% 2024/07/28. Changed this diagnostic command to by-pass a bug in luatexja-fontspec. % \babelprovide[import, language=Default]{arabic} \babelfont [arabic]{rm}[Scale=\Ara@scale, - Renderer=HarfBuzz, + %Renderer=OpenType, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% don't use italic face, I am told @@ -591,7 +596,7 @@ BoldItalicFont = *-Bold,% don't use italic face, I am told ]{Amiri}% NotoNaskhArabic}% Some readers prefer Amiri font \babelfont [arabic]{sf}[Scale=\Noto@scale, - Renderer=HarfBuzz, + %Renderer=OpenType, Extension =.ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% font has no italic face @@ -599,7 +604,7 @@ BoldItalicFont = *-SemiBold,% font has no italic face ]{NotoSansArabic}%DejaVuSans}%NotoKufiArabic}% .otf,% \babelfont [arabic]{tt}[% - Renderer=HarfBuzz, + %Renderer=OpenType, Extension =.ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -610,9 +615,9 @@ % \babelprovide[import,language=Default,script=Bangla]{bengali} \babelfont [bengali]{rm}[% - Renderer=HarfBuzz, + %Renderer=OpenType, Scale=\NotoBan@scale,% same as Devanagari - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -620,9 +625,9 @@ BoldItalicFont = *-Bold,% has no italic face ]{NotoSerifBengali} \babelfont [bengali]{sf}[% - Renderer=HarfBuzz, + %Renderer=OpenType, Scale=\NotoBan@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -630,9 +635,9 @@ BoldItalicFont = *-Bold,% has no italic face ]{NotoSansBengali} \babelfont [bengali]{tt}[ - Renderer=HarfBuzz, + %Renderer=OpenType, Scale=\NotoBan@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -646,7 +651,7 @@ \babelprovide[import,language=Default,script=Cyrillic]{#1} \babelfont [#1]{rm}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Italic, @@ -655,7 +660,7 @@ ]{NotoSerif} \babelfont [#1]{sf}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Italic, @@ -664,7 +669,7 @@ ]{NotoSans} \babelfont [#1]{tt}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -676,14 +681,14 @@ \setlocalecaption{serbian-cyrillic}{abstract}{Сажетак}% NB: utf-8 % % Devanagari languages - \newfontscript{Devanagari}{deva}% HarfBuzz has some problems in Hindi, see babel manual Sect. 1.13 (main issue is ra) + \newfontscript{Devanagari}{deva}% OpenType has some problems in Hindi, see babel manual Sect. 1.13 (main issue is ra) \NewDocumentCommand\@LoadBabelDev{>{\SplitList{;}}m}{\ProcessList{#1}{\@DevBabel}} \NewDocumentCommand\@DevBabel{m}{% \babelprovide[import,language=Default]{#1} \babelfont [#1]{rm}[% -% Renderer=HarfBuzz,% works for Marathi, throws errors in Hindi... +% %Renderer=OpenType,% Marathi and Hindi may respond differently... Scale=\NotoDev@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -691,9 +696,9 @@ BoldItalicFont = *-Bold,% has no italic face ]{NotoSerifDevanagari} \babelfont [#1]{sf}[% -% Renderer=HarfBuzz,% works for Marathi, throws errors in Hindi... +% %Renderer=OpenType,% % Marathi and Hindi may respond differently... Scale=\NotoDev@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -701,9 +706,9 @@ BoldItalicFont = *-Bold,% has no italic face ]{NotoSansDevanagari} \babelfont [#1]{tt}[ -% Renderer=HarfBuzz,% works for Marathi, throws errors in Hindi... +% %Renderer=OpenType,% % Marathi and Hindi may respond differently... Scale=\NotoDev@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -719,7 +724,7 @@ \babelfont [greek]{rm}[% Scale=\Noto@scale, WordSpace={1.1},% increase word spacing slightly - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Italic, @@ -729,7 +734,7 @@ \babelfont [greek]{sf}[% Scale=\Noto@scale, WordSpace={1.1},% increase word spacing slightly - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Italic, @@ -738,7 +743,7 @@ ]{NotoSans} \babelfont [greek]{tt}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -747,11 +752,14 @@ ]{NotoSansMono} % % Japanese + % luatexja-fontspec seems to want lc "color" now, rather than normal "Color", as before. Commenting out. + % NB: luatexja-fontspec color breakage appears to be global. \ifac@japanese - \RequirePackage[match]{luatexja-fontspec}% japanese typesets *much* better with this loaded + \def\Noto@color{}% by-pass bug in luatexja-fontspec, 2024/07/28. + \RequirePackage[no-math]{luatexja-fontspec}% japanese typesets *much* better with this loaded \setmainjfont{NotoSerifCJKjp}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, % Extension = .otf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -760,7 +768,7 @@ ] \setsansjfont{NotoSansCJKjp}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, % Extension = .ttc, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -769,7 +777,7 @@ ] \setmonojfont{NotoSansMonoCJKjp}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face BoldFont = *-Bold, @@ -780,7 +788,7 @@ % Need at least one of the following to load the Japanese dictionary. \babelfont [japanese]{rm}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .otf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -789,7 +797,7 @@ ]{NotoSerifCJKjp}% Scale estimated \babelfont [japanese]{sf}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, % Extension = .ttc, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -798,7 +806,7 @@ ]{NotoSansCJKjp} \babelfont [japanese]{tt}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, % Extension = .ttc, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -812,7 +820,7 @@ \babelprovide[import,language=Default]{korean} \babelfont [korean]{rm}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .otf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -821,7 +829,7 @@ ]{NotoSerifCJKkr} \babelfont [korean]{sf}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttc, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -830,7 +838,7 @@ ]{NotoSansCJK} \babelfont [korean]{tt}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, % Extension = .ttc, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -843,7 +851,7 @@ \babelprovide[import,language=Default]{chinese-simplified} \babelfont [chinese-simplified]{rm}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .otf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -852,7 +860,7 @@ ]{NotoSerifCJKsc} \babelfont [chinese-simplified]{sf}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttc, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -861,7 +869,7 @@ ]{NotoSansCJK} \babelfont [chinese-simplified]{tt}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, % Extension = .ttc, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -871,9 +879,9 @@ % % Traditional Chinese (includes characters for Cantonese also) \babelprovide[import,language=Default]{chinese-traditional} - \babelfont [chinese-tradiational]{rm}[% + \babelfont [chinese-traditional]{rm}[% fixed 2024/07/28 Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .otf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -882,20 +890,20 @@ ]{NotoSerifCJKtc} \babelfont [chinese-traditional]{sf}[% Scale=\Noto@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttc, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face BoldFont = *-Bold, BoldItalicFont = *-Bold,% has no italic face ]{NotoSansCJK} - \babelfont [chinese-traditional]{tt}[Scale=\Noto@scale,Color=\Noto@color]{NotoSansMonoCJKtc} + \babelfont [chinese-traditional]{tt}[Scale=\Noto@scale,\Noto@color]{NotoSansMonoCJKtc} % \babelprovide[import,language=Default]{tamil} \babelfont [tamil]{rm}[% - Renderer=HarfBuzz, + %Renderer=OpenType, Scale=\NotoTam@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -903,9 +911,9 @@ BoldItalicFont = *-Bold,% has no italic face ]{NotoSerifTamil} \babelfont [tamil]{sf}[% - Renderer=HarfBuzz, + %Renderer=OpenType, Scale=\NotoTam@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -913,9 +921,9 @@ BoldItalicFont = *-Bold,% has no italic face ]{NotoSansTamil} \babelfont [tamil]{tt}[ - Renderer=HarfBuzz, + %Renderer=OpenType, Scale=\NotoTam@scale, - Color=\Noto@color, + \Noto@color, Extension = .ttf, UprightFont = *-Regular, ItalicFont = *-Regular,% has no italic face @@ -949,8 +957,13 @@ \RequirePackage{bm}% load after all math to give further access to bold math -%% Ensure that the current font is used for equation tags, not \normalfont as set by amsmath -\def\maketag@@@#1{\hbox{\m@th#1}} +% To free \eqref from the normal font (e.g., for use in section headings or captions). Revised 2024/07/28 +\renewcommand{\eqref}[1]{\textup{\hbox{\m@th{(\ignorespaces\ref{#1}\unskip\@@italiccorr)}}}} +% +% amsmath def: \newcommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}} +% \def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}} +% \def\maketag@@@#1{\hbox{\m@th\normalfont#1}} + % The article class calls \sloppy in two-column mode (\tolerance 9999, \emergencystretch 3em) % The following adjustments affect line breaking; the values below are intended to produce @@ -1000,11 +1013,11 @@ \SetMathAlphabet{\mathsf}{sans}{\encodingdefault}{\sfdefault}{m}{n}% \mathsf is upright. -% Nice solution from DPC to prevent aux file errors (due to active characters from babel) when switching from pdflatex to lualatex. -\ifx\directlua\undefined - \AtBeginDocument{\immediate\write\@auxout{\detokenize{% - \ifx\directlua\undefined\else\endinput\fi}}} -\fi +%% Nice solution from DPC to prevent aux file errors (due to active characters from babel) when switching from pdflatex to lualatex. Disabled, 2024/07/28 +%\ifx\directlua\undefined +% \AtBeginDocument{\immediate\write\@auxout{\detokenize{% +% \ifx\directlua\undefined\else\endinput\fi}}} +%\fi %%%%%%%% Footers and Footnotes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1034,7 +1047,6 @@ \fancyfoot[CE,CO]{\@SetFont\thepage\\[1ex]\footnotesize The United States Government retains, and by accepting the article for publication, the publisher acknowledges that the United States Government retains, a non-exclusive, paid-up, irrevocable, worldwide license to publish or reproduce the published form of this work, or allow others to do so, for United States Government purposes.} \fi -% was missing from earlier versions...? \ifasmeconf@govtsome \newgeometry{left=0.5in, right=0.5in, top=0.5in, bottom = 1.in, footskip = 0.3in, columnsep = 0.38in} \fancyfoot[RO,RE]{} @@ -1088,39 +1100,36 @@ \titlespacing\subsubsection{\parindent}{6pt plus 3pt minus 2pt}{0pt plus 2pt minus 1pt} % from 12 4 3, 2019/7/7 %% Special handling of the appendices -%% Assumes that appendices are the last content in paper -\RenewDocumentCommand{\appendix}{}{% - \setcounter{section}{0} - \pdfbookmark[0]{\appendicesname}{appendices} - \renewcommand\thesection{\Alph{section}} - \titleformat{\section}{\mathversion{sansbold}\bfseries\sffamily\raggedright}{\MakeTextUppercase{\appendixname}\ \thesection.}{0.5em}{\MakeTextUppercase} -} - -%% This patches titlesec's unprotected re-definition of \footnote. -%% See discussion here: https://github.com/jbezos/titlesec/issues/48 +%% Assumes that appendices are the last content in paper +%% Code revised to better support tagged pdf, 2024/07/26. +\patchcmd{\appendix}{% + \setcounter{subsection}{0}% +}{% + \setcounter{subsection}{0}\pdfbookmark[1]{\appendicesname}{appendices}% +}{}{} +\apptocmd{\appendix}{\titleformat{\section}[block]{\mathversion{sansbold}\bfseries\sffamily\raggedright}{\MakeTextUppercase{\appendixname}\ \thesection.}{0.5em}{\MakeTextUppercase}}{}{} +% Changed to block layout (rather than default hanging) whilst retaining \raggedright, since "Appendix X." is a very wide hanging indent. 2024/07/26 + +%% This patches titlesec's unprotected re-definition of \footnote. See discussion here: https://github.com/jbezos/titlesec/issues/48 %% Without this patch, recent versions of LaTeX will require \protect\footnote in section headings. -%% This issue may be corrected in titlesec, but keeping the patch anyway. +%% This issue may be corrected in titlesec, but keeping the patch for backward compatibility. \patchcmd{\ttl@select}{\def\footnote}{\protected\def\footnote}{\typeout{Asmeconf.sty patched titlesec to have protected def of footnote}}{} %%%%%%%%%% Hyperref, bookmarks, and PDF/A %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% new pdf management in LaTeX, with \DocumentMetaData{..}, is preferred to this *legacy* approach. \ifpdftex - %%% to assist with unicode glyph mapping, following M. Sharpe's recommendation in the newtx documentation. - \IfFormatAtLeastTF{2020/10/01}{\relax}{% - \pdfgentounicode=1 %% enable CMaps; has moved into the latex kernel Oct 2020 - \input glyphtounicode.tex %% lists of mappings; has moved into the latex kernel Oct 2020 - } + %%% to assist with unicode glyph mapping, following M. Sharpe's recommendation in the newtx documentation. + %%% as of 2024/07/28, these are still necessary with \DocumentMetadata{pdfstandard=A-3u}. Note: glyphtounicode-cmex.tex is now in latex-lab. \InputIfFileExists{glyphtounicode-cmr.tex}{}{} %% additional mappings \InputIfFileExists{glyphtounicode-ntx.tex}{}{} %% additional mappings \ifac@setpdfa - %%%% pdfmanagement options, from Ulrike Fischer 2021/06/12 - \if@asme@pdfmanagement - \ClassInfo{asmeconf}{pdfmanagement is defined. Class file will not load a color profile} + %% new pdf management in LaTeX, with \DocumentMetaData{..}, is preferred to this *legacy* approach. + \ifasme@pdfmanagement + \ClassInfo{\ClassName}{pdfmanagement is defined. Class file will not load a color profile} \else - \ClassInfo{asmeconf}{NOTE: pdfmanagement not defined. Class file will load a color profile}% + \ClassInfo{\ClassName}{NOTE: pdfmanagement not defined. Class file will load a color profile}% %%% a fairly generic RGB color profile, aimed at on-screen rendering (not print production) \immediate\pdfobj stream attr{/N 3} file{sRGB.icc} \pdfcatalog{% @@ -1158,20 +1167,20 @@ \urlstyle{same} % don't switch to typewriter font for urls \RequirePackage{doi} % supports the nasty characters in some doi's \renewcommand{\doitext}{DOI } % change to this from default value, {doi:}, per ASME specification -\RequirePackage{bookmark} % improves handling of pdf bookmarks \providecommand*{\toclevel@subfigure}{1}% <== to address unknown bookmark level of subfigure. 2021/12/24 \providecommand\hrefurl[2]{\href{#1}{#2}}% to address certain issues around URL recognition with new pdf management code, 2021/12/02 -\if@asme@pdfmanagement - \ClassInfo{asmejour}{pdfmanagement is defined. Class file will not load hyperxmp} +\ifasme@pdfmanagement + \ClassInfo{asmejour}{pdfmanagement is defined. Class file will not load hyperxmp and bookmark packages} \else + \RequirePackage{bookmark}% improves handling of pdf bookmarks \RequirePackage{hyperxmp}% improve transfer of metadata to pdf % Patch bug in hyperxmp, unless a more recent version is used. \ifdefined\hyxmp@no@bad@parts% \hyxmp@no@bad@parts is not def'd in TeX Live 2019 or older - \@ifpackagelater{hyperxmp}{2022/10/15}{% v5.11 or later + \IfPackageAtLeastTF{hyperxmp}{2022/10/15}{% v5.11 or later \relax }{% \newcount\hypxmp@tempcnt @@ -1180,13 +1189,11 @@ \hyxmp@pdfstringdef\@pdfapart{\the\hypxmp@tempcnt}% } } - \else - \relax \fi \fi -%%% ==> recent and evolving development of \pdfstring removes all robust commands from bookmarks, so -%%% by early 2024, errors are not present; however, these commands serve to still suppress warnings. +%%% ==> recent development of \pdfstring removes all robust commands from bookmarks, so that +%%% by early 2024, errors are not present; these commands serve to still suppress warnings, however. %% Since \bm may be useful in headings, this fix will reduce frequency with which %% alternate pdfstrings must be given in revised section command as \section[pdfstring]{texstring} @@ -1212,7 +1219,7 @@ %% Ensure that tag color does not follow \eqref into bookmarks, 2020/02/28 \pdfstringdefDisableCommands{% - \def\eqref#1{(\ref{#1})}% + \def\eqref#1{(\ref*{#1})}% \ref* is from hyperref } % Let's make sure footnotes in section headings don't break pdf bookmarks. @@ -1222,7 +1229,6 @@ } - %% Let's also add \footnote to the \TextUppercase exception list, so that footnote text won't be capitalized %% if given in section headings. Ditto for \eqref % @@ -1244,13 +1250,12 @@ \renewcommand{\linenumberfont}{\normalfont\footnotesize\color{red}} \AtBeginDocument{\linenumbers} \ifasmeconf@balance - \ClassWarningNoLine{asmeconf}{Package lineno loaded, so final column balancing will be disabled}% + \ClassWarningNoLine{\ClassName}{Package lineno loaded, so final column balancing will be disabled}% \fi %%% Patch to allow line numbering in AMS math environments. %%% This patch is for lineno versions earlier than v5.2 [2023/05/19]. As of mid-2023, the lineno package - %%% has been corrected to account for the AMS math environments. Retaining temporarily for backward compatibility. + %%% has been corrected to account for the AMS math environments. Retaining for backward compatibility. %%% postdisplaypenalty adjusted to avoid extra line number at end, see: https://tex.stackexchange.com/a/461192/ - %%% multline has some additional problem that puts an extra line number above it. \IfPackageAtLeastTF{lineno}{2023/05/19}{\relax}{ \NewDocumentCommand{\ac@losepostpenalty}{}{\patchcmd{\linenomathWithnumbers}{\advance\postdisplaypenalty\linenopenalty}{}{}{}} % @@ -1270,7 +1275,7 @@ \ifasmeconf@balance \RequirePackage{flushend}% flushend package is NOT compatible with lineno \AtEndDocument{\flushcolsend}% - \LogNote{Calling flushend package to balance column height on last page}% + \ClassNoteNoLine{\ClassName}{Calling flushend package to balance column height on last page}% \fi% \fi \providecommand{\@LN@col}[1]{\relax}% Enable dropping lineno option without trashing .aux file @@ -1364,7 +1369,10 @@ \NewDocumentCommand\PaperNo{m}{\gdef\@PaperNo{#1}} \providecommand\@PaperNo{\protect\phantom{NO.}} -\NewDocumentCommand\PaperTitle{m}{\gdef\@PaperTitle{#1}} +\NewDocumentCommand\PaperTitle{m}{% + \gdef\@PaperTitle{#1}% + \gdef\@title{#1}% added 2024/07/28 +} \providecommand\@PaperTitle{\hbox{ }} \NewDocumentCommand\@HeaderTitle{}{% @@ -1419,7 +1427,7 @@ %%%% option to use the traditional grid layout of authors or the inline style \ifasmeconf@grid - \LogNote{Selected option for a grid of author blocks}% + \ClassNoteNoLine{\ClassName}{Selected option for a grid of author blocks}% %%%%%%%%%%%%%%%%%%%% Gridded author layout %%%%%%%%%%%%%%%%%%%%%%%%% @@ -1463,7 +1471,7 @@ \ifblank{#1}{% \expandafter\xdef\csname aut@\theauthorcnt\endcsname{}% \expandafter\xdef\csname autaffil@\theauthorcnt\endcsname{-1} - \ClassWarning{asmeconf}{Missing author name, check for extra comma}% + \ClassWarning{\ClassName}{Missing author name, check for extra comma}% }{\expandafter\xdef\csname aut@\theauthorcnt\endcsname{#1}% }% }% defines \aut@authorcnt as Name #1 @@ -1547,12 +1555,18 @@ \fi \fi \ifnum\value{authorno}>15 - \ClassWarningNoLine{asmeconf}{The class is programmed for up to 15 author blocks. If some of your authors are at the same institution, % + \ClassWarningNoLine{\ClassName}{The class is programmed for up to 15 author blocks. If some of your authors are at the same institution, % you may put more than one name above a single address. If you need more than 15 author blocks, try using the in-line author style % instead of the [grid] option} \fi }% end whiledo } + \ExplSyntaxOn + % next three are for backward compatibility + \cs_if_exist:NF \cs_gset:Npe { \cs_generate_variant:Nn \cs_gset:Npn {Npe} } + \cs_if_exist:NF \tl_set:Ne { \cs_generate_variant:Nn \tl_set:Nn {Ne} } + \cs_if_exist:NF \tl_put_right:Ne { \cs_generate_variant:Nn \tl_put_right:Nn {Ne} } + \NewDocumentCommand\@ConstructAuthorBlock{}{% \ifnum\value{authorno}>3 \JoinCoffins\firstrowauthorblock[hc,b]\secondrowauthorblock[hc,t](0pt, -1.5\baselineskip) @@ -1566,8 +1580,34 @@ \ifnum\value{authorno}>12 \JoinCoffins\firstrowauthorblock[hc,b]\fifthrowauthorblock[hc,t](0pt, -1.5\baselineskip) \fi - \centerline{\TypesetCoffin\firstrowauthorblock}%% in this instance, \centerline is better than \centering + \centerline{\TypesetCoffin\firstrowauthorblock}% in this instance, \centerline is better than \centering + \__asmeconf_concataut: + \cs_gset:Npe \@author { \tl_use:N \g_asmeconf_authors_tl } + %\iow_term:e { \tl_use:N \g_asmeconf_authors_tl }% diagnostic only } + % build comma-separated list of author names + \cs_new_protected:Nn \__asmeconf_concataut: { + \tl_new:N \g_asmeconf_authors_tl + \int_set:Nn \l_tmpa_int {1} + \int_new:N \l__asmeconf_noauts + \int_set:Nn \l__asmeconf_noauts { \value{authorcnt} } + \int_do_until:nNnn { \l_tmpa_int } > { \l__asmeconf_noauts } + { + \tl_set:Ne \l_tmpa_tl {\use:c { aut@ \int_use:N \l_tmpa_int } } + \tl_replace_all:Nnn \l_tmpa_tl {\unhbox \voidb@x \protect \penalty \@M \ } {~} + % If tex unbreakable space character "~" has expanded, replace by a simple space, which is "~" in Expl3 syntax + \tl_remove_all:Nn \l_tmpa_tl { \JointFirstAuthor } + \tl_replace_all:Nnn \l_tmpa_tl { \CorrespondingAuthor } { \use_none:n } + \tl_replace_all:Nnn \l_tmpa_tl { \affil } { \use_none:n } + \tl_replace_all:Nnn \l_tmpa_tl { \xdef } { \use_none:nn } + \tl_put_right:Ne \g_asmeconf_authors_tl \l_tmpa_tl + \int_compare:nNnT { \l_tmpa_int } < { \l__asmeconf_noauts} { + \tl_put_right:Ne \g_asmeconf_authors_tl { ,~ } + } + \int_incr:N \l_tmpa_int + } + } + \ExplSyntaxOff %%% otherwise use the new compact layout of authors \else @@ -1576,13 +1616,35 @@ \NewCoffin{\AffiliationBlock} \NewCoffin{\AffiliationsBlock} \AtBeginDocument{\SetHorizontalCoffin\AffiliationsBlock{}}% corrected 2021/12/01 - + + \ExplSyntaxOn + \cs_if_exist:NF \cs_gset:Npe { \cs_generate_variant:Nn \cs_gset:Npn {Npe} } + \cs_if_exist:NF \tl_gset:Ne { \cs_generate_variant:Nn \tl_gset:Nn {Ne} } + %% NB: \parbox width to \textwidth (full page) not \linewidth (single column) \NewDocumentCommand\SetAuthors{m}{% - \SetHorizontalCoffin\AuthorBlock{% + \SetHorizontalCoffin\AuthorBlock{% ignoring the bug in testphase tagging \parbox{\textwidth}{\centering\sffamily\bfseries\ignorespaces#1\ignorespaces}% + % NB: in vertical mode \parbox needs \noindent ahead of it, _inside_ vertical coffin + % \SetVerticalCoffin\AuthorBlock{\textwidth}{% 2024/07/30, test a vertical coffin alternative + % \centering\sffamily\bfseries\ignorespaces#1\ignorespaces% + \__asmeconf_striptokens:n {#1} + \cs_gset:Npe \@author { \tl_use:N \g_asmeconf_authors_tl }% set \@author = list of authors, 2024/07/31 } } + % strip \affil{..}, \JointFirstAuthor, \CorrespondingAuthor{...} from argument + \cs_new_protected:Nn \__asmeconf_striptokens:n { + \tl_set:Nn \l_tmpa_tl {#1} + \regex_replace_all:nnN { \cA\~ } {\ } \l_tmpa_tl % replace ~ by space in author list + %\tl_replace_all:Nnn \l__asmeconf_authors_tl {\ } {~}% change "\ " to space (but why? for text we would want this) + \tl_remove_all:Nn \l_tmpa_tl { \JointFirstAuthor } + \tl_replace_all:Nnn \l_tmpa_tl { \affil } { \use_none:n } + \tl_replace_all:Nnn \l_tmpa_tl { \CorrespondingAuthor } { \use_none:n } + \tl_new:N \g_asmeconf_authors_tl + \tl_gset:Ne \g_asmeconf_authors_tl \l_tmpa_tl + \iow_term:e { \tl_use:N \g_asmeconf_authors_tl }% diagnostic only + } + \ExplSyntaxOff \def\@makefnmark{\hbox{\@textsuperscript{\sffamily\@thefnmark}}}% @@ -1598,14 +1660,14 @@ %%% Affiliation mark \NewDocumentCommand{\affil}{m}{% \ifblank{#1}{% - \ClassWarning{asmeconf}{Empty affiliation tag}% + \ClassWarning{\ClassName}{Empty affiliation tag}% \@gobble% 9 Dec 2021, addresses modification for commas }{\bfseries\footnotemark[#1]}% } %%% to deal with sequential notes as, e.g., "1,*", or "1,2,*" %%%%%%%%%% \ExplSyntaxOn - \cs_new:Npn \__asmecome_OtherNoteComma:n { + \cs_new:Npn \__asmeconf_OtherNoteComma:n { \peek_meaning:NTF \affil { \textsuperscript{\mdseries,} } { \peek_meaning:NTF \CorrespondingAuthor @@ -1614,11 +1676,11 @@ } } \cs_new_eq:NN \__saveAF \affil - \cs_gset_protected:Npn \affil #1 { \__saveAF{#1} \__asmecome_OtherNoteComma:n } + \cs_gset_protected:Npn \affil #1 { \__saveAF{#1} \__asmeconf_OtherNoteComma:n } \cs_new_eq:NN \__saveCA \CorrespondingAuthor - \cs_gset_protected:Npn \CorrespondingAuthor #1 { \__saveCA{#1} \__asmecome_OtherNoteComma:n } + \cs_gset_protected:Npn \CorrespondingAuthor #1 { \__saveCA{#1} \__asmeconf_OtherNoteComma:n } \cs_new_eq:NN \__saveJA \JointFirstAuthor - \cs_gset_protected:Npn \JointFirstAuthor { \__saveJA \__asmecome_OtherNoteComma:n } + \cs_gset_protected:Npn \JointFirstAuthor { \__saveJA \__asmeconf_OtherNoteComma:n } \ExplSyntaxOff %%% @@ -1633,7 +1695,6 @@ %%%% Make the title and author section \NewDocumentCommand\MakeTitlePage{}{% \twocolumn[ - \begin{@twocolumnfalse} \@HeaderTitle \vspace*{2\baselineskip} \ifasmeconf@grid @@ -1642,7 +1703,6 @@ \@SetAuthorBlock \fi \vspace*{3\baselineskip} - \end{@twocolumnfalse} ] \let\@makefnmark\savemakefnmark% restore footnote mark font \renewcommand*{\thefootnote}{\fnsymbol{footnote}} @@ -1767,12 +1827,12 @@ %%%%%%%%%%%%%%%%%% Times-like fonts for specific languages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifpdftex % Under lualatex, babel has problems with the following approach, which assumes that fontspec has not been loaded. - % Recommend not to choose the [nofontspec] option. + % Recommend not to choose the [nofontspec] option. % Several modifications made in response to newtx v1.71, 2022/03/14 \ifac@vietnamese % \IfFormatAtLeastTF{2020/02/02}{\relax}{% - \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the [vietnamese] option with pdflatex}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option [vietnamese].}% + \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the [vietnamese] option with pdflatex}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option [vietnamese].}% } % \AtBeginDocument{% @@ -1831,7 +1891,7 @@ \ifac@greek % \IfFormatAtLeastTF{2020/02/02}{\relax}{% - \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the [greek] option with pdflatex}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option [greek].}% + \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the [greek] option with pdflatex}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option [greek].}% } % \AtBeginDocument{% @@ -1906,7 +1966,7 @@ \ifac@cyrillic % \IfFormatAtLeastTF{2020/02/02}{\relax}{% - \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the cyrillic language option with pdflatex, e.g., [russian]}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option calling a cyrillic-alphabet language.}% + \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020 are necessary to use the fonts of the cyrillic language option with pdflatex, e.g., [russian]}{Please UPDATE your LaTeX distribution: TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. Alternatively, delete the class option calling a cyrillic-alphabet language.}% } % \AtBeginDocument{% diff --git a/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.pdf b/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.pdf Binary files differindex 05e276803f..d5ef0f0158 100644 --- a/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.pdf +++ b/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.pdf diff --git a/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.tex b/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.tex index b041b0f0ff..406a4dd660 100644 --- a/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.tex +++ b/macros/latex/contrib/asmeconf/examples/asmeconf-fontspec.tex @@ -18,13 +18,36 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\DocumentMetadata{% + pdfstandard=A-3b,% A-2b, A-2u, A-3b, or A-3u (don't use u options with LuaLaTeX) + pdfversion=1.7, + lang=en-US, + debug = {xmp-export}, +} \documentclass[colorlinks,nofoot,spanish,japanese,russian,greek,ukrainian,vietnamese,french,portuguese,turkish,polish,indonesian,italian,german,latin,serbianc,bidi=basic]{asmeconf} % note that not all languages given as examples in this file can be called as options. +% directly add this xmp property. See l3pdfmeta.pdf. This is not automatic with \DocumentMetadata. "True" must be capitalized. +\ExplSyntaxOn + \pdfmeta_xmp_add:n{<xmpRights:Marked>True</xmpRights:Marked>} +\ExplSyntaxOff + \hypersetup{% - pdftitle={Language Support in ASMECONF: Non-Latin Alphabets, Lualatex, and fontspec}, + pdftitle={{Language Support in ASMECONF: Non-Latin Alphabets, Lualatex, and fontspec}}, pdfkeywords={asmeconf, non-Latin alphabets, fontspec, LuaLaTeX, PDFLaTeX}, - pdfauthor={John H. Lienhard, V}, + pdfauthor={John H. Lienhard}, + pdfsubject = {Describes font support in asmeconf LaTeX template}, + pdfurl={https://ctan.org/pkg/asmeconf},% may delete + pdflicenseurl={https://ctan.org/pkg/asmeconf}, + pdfcopyright={Copyright (c) \the\year\ by John H. Lienhard}, + pdfcontactemail={lienhard@mit.edu}, + pdfcaptionwriter={{John H. Lienhard, V}}, + pdfcontactaddress={77 Massachusetts Avenue, Room 3-166}, + pdfcontactcity={Cambridge, MA}, + pdfcontactpostcode={02139}, + pdfcontactcountry={USA}, + pdfcontacturl={https://lienhard.mit.edu}, + pdfauthortitle={Professor of Mechanical Engineering}, } % To avoid typing these over and over, define: @@ -33,13 +56,30 @@ \newcommand*\AC{{\upshape\texttt{asmeconf}}} \newcommand*\PLT{{\upshape\texttt{\hologo{pdfLaTeX}}}} +% define a unicode character by its codepoint +\ExplSyntaxOn + \cs_new:Npn \MySym #1 { \codepoint_generate:nn {#1} { 12 } } +\ExplSyntaxOff + +\renewcommand*{\checkmark}{\MySym{"2713}} % because default checkmark has poor glyph information + +%% It's necessary to force full embedding of the fonts to get valid PDF/A-3b +\usepackage{luacode} +\begin{luacode} +local function embedfull(tfmdata) + tfmdata.embedding = "full" +end +luatexbase.add_to_callback("luaotfload.patch_font", embedfull, "embedfull") +\end{luacode} + + \makeatletter \def\NotoBan@scale{0.98}% vary this if the Bengali is too small/large; the default value 0.92 matches scaling of the other Noto fonts used. \def\NotoDev@scale{0.98}% vary this if the Devanagari is too small/large; the default value 0.92 matches scaling of the other Noto fonts used. %\def\NotoTam@scale{0.92}% vary this if the Tamil is too small/large; the default value 0.92 matches scaling of the other Noto fonts used. \def\NotoAra@scale{0.93}% The serif font only; the default value is 0.91 -% Noto family is not as close to Tex Gyre Termes as I'd like, so for abstract examples in Latin script [only], use Noto Serif Italic for visual consistency +% Noto family is not as close to Tex Gyre Termes as I'd like, so for abstract examples in Latin script [only], I'm using Noto Serif Italic for visual consistency \newfontfamily{\NotoSerif}{NotoSerif}[UprightFont=*-Regular,ItalicFont=*-Italic, BoldItalicFont=*-BoldItalic, BoldFont=*-Bold, Extension=.ttf,Scale=\Noto@scale,WordSpace={1,1.4,1}] \newfontfamily{\NotoSerifItalns}{NotoSerif-Italic.ttf}[ItalicFont=*,Scale=\Noto@scale]% Turkish has trouble with WordSpace \makeatother @@ -107,10 +147,10 @@ \begin{document} \ConfName{Proceedings of the \texttt{asmeconf} \linebreak International Examples Congress and Exposition} -\ConfAcronym{AIECE21} -\ConfDate{January 20, 2021} +\ConfAcronym{AIECE24} +\ConfDate{August 1, 2024} \ConfCity{Cambridge, MA} -\PaperNo{AIECE2021-0002} +\PaperNo{AIECE2024-0002} \title{Language Support in ASMECONF: Non-Latin Alphabets, Lualatex, and fontspec} @@ -119,7 +159,7 @@ \maketitle -\versionfootnote{Version~1.01, \today} +\versionfootnote{Version~1.02, \today} \keywords{asmeconf, language support, non-Latin alphabets, fontspec, \LLT} @@ -183,12 +223,12 @@ The \FS\ package~\cite{robertson2020} allows \LLT\ to access fonts that are inst When processed in \PLT, \AC\ uses the \texttt{newtxtext} and \texttt{inconsolata} fonts, a collection of eight-bit fonts, for Latin script. To use \FS, we must replace those fonts with corresponding unicode fonts (the math fonts, from \texttt{newtxmath}, are unchanged). Specialized fonts are needed for some additional scripts. Thus, the user will need to install several unicode fonts onto their own system in order to use \AC\ with \FS. Fortunately, all these fonts are all free and easily downloaded. -The needed fonts are listed in Table~\ref{tab:2}. +The needed fonts are listed in Table~\ref{tab:2}. \textit{The Latin fonts are required for English when using \FS.} %%%%%%%%%%%%%%% two column table %%%%%%%%%%%%%%%%%% \NewDocumentCommand\R{O{11pt}}{\rule{0pt}{#1}} \begin{table*}[t!] -\caption{System fonts used by \NoCaseChange{\AC} with \NoCaseChange{\FS}. For all fonts, load regular and bold face. For Latin, Cyrillic, and Greek, also load italic and bold italic. For Noto Sans Arabic, install semibold instead of bold.\label{tab:2}}% +\caption{System fonts used by \NoCaseChange{\AC} with \NoCaseChange{\FS}. For all fonts, load regular and bold face. For Latin, Cyrillic, and Greek serif and sans serif fonts, also load italic and bold italic. For Noto Sans Arabic, install semibold instead of bold.\label{tab:2}}% \centering{% \begin{tabular*}{\textwidth}{@{\hspace*{0.5em}}@{\extracolsep{\fill}}>{\raggedright}p{6em}>{\raggedright}p{12em}>{\raggedright}p{10em}p{23em}@{\hspace*{0.5em}}} \toprule @@ -196,7 +236,10 @@ The needed fonts are listed in Table~\ref{tab:2}. \multicolumn{1}{c}{\textbf{Language}} & \multicolumn{1}{c}{\textbf{Fonts}} & \multicolumn{1}{c}{\textbf{Where to get the font}}\\ \midrule -Latin$^*$ & most European languages & Tex Gyre Termes, Tex~Gyre~Heros & \url{http://www.gust.org.pl/projects/e-foundry/tex-gyre}\rule{0pt}{11pt}\\ +Latin$^*$ & most European languages & TeX Gyre Termes, & \url{https://ctan.org/tex-archive/fonts/newtx/opentype}, \rule{0pt}{11pt}\\ +& & TeX~Gyre~Heros, & \url{https://ctan.org/tex-archive/fonts/tex-gyre/opentype}\\ +%\url{http://www.gust.org.pl/projects/e-foundry/tex-gyre} \\ +& & Inconsolatazi4 & \url{https://ctan.org/tex-archive/fonts/inconsolata/opentype} \\ Arabic\R & Arabic, Punjabi, Urdu, others & Amiri,\\ Noto~Sans~Arabic & \url{https://github.com/alif-type/amiri}\hfill\hbox{} \url{https://github.com/googlefonts/noto-fonts} \\ Bengali\R & Assamese, Bengali, others & Noto Serif Bengali,\\ Noto~Sans Bengali& \url{https://github.com/googlefonts/noto-fonts} \\ Cyrillic\R & Belarusian, Bulgarian, Macedonian, Russian, Serbian, Ukrainian, others & Noto Serif,\\ Noto~Sans, Noto~Sans~Mono & \url{https://github.com/googlefonts/noto-fonts} \\ @@ -215,7 +258,9 @@ Traditional\R\ Chinese & Traditional Mandarin, Cantonese & Noto~Serif~CJK~TC, No %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Using fontspec with asmeconf} -When running \LLT, the \texttt{[fontspec]} option should be called, to load the appropriate fonts. With \FS, \texttt{babel} will use \texttt{.ldf} files (if available) and separate initialization files (\texttt{.ini}). If a language option is called for which there is no \texttt{.ldf} file, an error will result. However, such languages may still have an \texttt{.ini} that provides necessary information. For example, Chinese and Korean do not have \texttt{.ldf} files, but they do have \texttt{.ini} files. These languages can be accessed as described in Section~\ref{sec:6}. +%When running \LLT, the \texttt{[fontspec]} option should be called, to load the appropriate fonts. +When running \LLT, \texttt{fontspec} is loaded by default (as of Feb.\ 2024). +With \FS, \texttt{babel} will use \texttt{.ldf} files (if available) and separate initialization files (\texttt{.ini}). If a language option is called for which there is no \texttt{.ldf} file, an error will result. However, such languages may still have an \texttt{.ini} that provides necessary information. For example, Chinese and Korean do not have \texttt{.ldf} files, but they do have \texttt{.ini} files. These languages can be accessed as described in Section~\ref{sec:6}. Japanese typesetting is a little more complicated. When \texttt{[japanese]} is given as an option to the class, \AC\ calls the \texttt{luatexja-fontspec} package~\cite{lua-jp}, which is a specialized module for typesetting Japanese. @@ -225,7 +270,7 @@ What about support for scripts not shown in Table~\ref{tab:2}? Macros from \tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{How to call a language\label{sec:6}} -A language is called by \verb|\begin{selectlanguage}{<lang>}|, where \texttt{<lang>} is the lower-case name of the language. +Call a language with \verb|\begin{selectlanguage}{<lang>}|, where \texttt{<lang>} is the lower-case name of the language. For example, suppose that a Spanish language abstract is desired. The user puts \texttt{[spanish]} as a global option (this language has an \texttt{.ldf} file), and then writes: \begin{quotation} \noindent\hbox{}\verb|\begin{selectlanguage}{spanish}|\\ @@ -419,10 +464,12 @@ The main language of the document is English by default. This means that secti To chose a different main language, give the option \texttt{[main=..]}, e.g., \texttt{[main=french]}. The standard caption and section names will follow \texttt{babel}'s dictionary for the language chosen. Users may additionally change ``Keywords'', ``Nomenclature'', ``Corresponding author'', and ``Joint first authors'' by renewing the commands \verb|\keywordname|, \verb|\nomname|, \verb|\CAwords|, and \verb|\JAwords|. Changes to the page footer are described in the \AC\ documentation~\cite{lienhard2021}. The pdf bookmark for ``Appendices'' may be changed by renewing \verb|\appendicesname|. (See the \texttt{babel} documentation \cite[\S 1.15]{bezos2020} if the dictionary for the main language lacks the correct word for, say, \verb|abstractname|). -Note that some languages make characters active, which can have unexpected effects. For example, Spanish makes ``.'' an active character, which clashes with the default \texttt{dcolumn} decimal separator, \texttt{d\{n.m\}}~\cite{dpc}. \texttt{\textbackslash spanishdeactivate\{.\}} stops this behavior. Alternatively, the decimal separator can be changed to a comma by putting \texttt{\textbackslash newcolumntype\{d\}[1]\{D\{,\}\{,\}\{\#1}\}\} in the preamble. - I have not explored this usage in detail, and I would welcome comments from authors who attempt such conversions. +Note that some languages make characters active, which can have unexpected effects. For example, Spanish makes ``.'' an active character, which clashes with the default decimal separator when using \texttt{dcolumn}'s \texttt{d\{n.m\}}~\cite{dpc}. The command \texttt{\textbackslash spanishdeactivate\{.\}} stops this behavior. As of August 2024, \texttt{asmeconf} defines a \texttt{dcolumn} type \texttt{,\{n.m\}} that uses a comma (not a period) as the decimal separator. +%Alternatively, the decimal separator can be changed to a comma by putting \texttt{\textbackslash newcolumntype\{d\}[1]\{D\{,\}\{,\}\{\#1}\}\} in the preamble. + + %%% CONCLUSIONS %%%%%%%%%%%%%%%%%%%%%%%%%% \section{Conclusion} diff --git a/macros/latex/contrib/asmejour/README.md b/macros/latex/contrib/asmejour/README.md index 69fe1e00fc..612e0b027a 100644 --- a/macros/latex/contrib/asmejour/README.md +++ b/macros/latex/contrib/asmejour/README.md @@ -1,7 +1,7 @@ #asmejour: A template for ASME journal papers# - Version 1.22 dated 2024/02/06. + Version 1.23 dated 2024/07/24. ####Overview#### This class provides a template to format preprints in the style of journal papers published by the American Society of Mechanical Engineers. @@ -67,6 +67,14 @@ ####Change log#### +v1.23 (2024/07/24) + - Add class option for single-column formatting, \[singlecolumn\], as sometimes requested for review (thanks Lennart Hultgren) + - Change language sample from French to German, to avoid active characters (from Fourier to Pohlhausen) + - Reduce size of line number font + - Adjust code for \\appendix to better accommodate tagged pdf + - Correct bug in babel main language selection + - Miscellaneous code clean up and simplification + v1.22 (2024/02/06) - The newtx package has dropped superiors option, so asmejour has dropped the \[superiors\] option and related code. - Dropped legacy options \[lang, lang-second, lang-third\] diff --git a/macros/latex/contrib/asmejour/asmejour-sample.bib b/macros/latex/contrib/asmejour/asmejour-sample.bib index 3b715d3d05..08438fd94d 100644 --- a/macros/latex/contrib/asmejour/asmejour-sample.bib +++ b/macros/latex/contrib/asmejour/asmejour-sample.bib @@ -1,6 +1,6 @@ %% Sample bibliography file for asmejour.bst and asmejour.cls %% -%% Revised: 06 February 2024 +%% Revised: 21 July 2024 %% Copyright John H. Lienhard, MIT %% Offered under the MIT license: https://ctan.org/license/mit @@ -350,9 +350,22 @@ title = {Th\'{e}orie Analytique de la Chaleur}, publisher = {Firmin Didot, P\`{e}re et Fils}, address = {Paris}, - url = {https://archive.org/details/analyticaltheory00fourrich}, + url = {https://archive.org/details/analyticaltheory00fourrich}, } +@article{pohlhausen1921, + author = {Pohlhausen, E.}, + title = {Der {W}\"{a}rmeaustausch zwischen festen K\"{o}rpern und {F}l\"{u}ssigkeiten mit kleiner reibung und kleiner {W}\"{a}rmeleitung}, + journal = {Zeitschrift f\"{u}r {A}ngewandte {M}athematik und {M}echanik}, + volume = {1}, + number = {2}, + pages = {115--121}, + doi = {10.1002/zamm.19210010205}, + year = {1921}, +} +%url = {https://onlinelibrary.wiley.com/doi/abs/10.1002/zamm.19210010205}, + + @techreport{reynolds1958, author = {W. C. Reynolds and W. M. Kays and S. J. Kline}, title = {Heat transfer in the Incompressible Turbulent Boundary Layer. {I}---Constant Wall Temperature}, diff --git a/macros/latex/contrib/asmejour/asmejour-template.pdf b/macros/latex/contrib/asmejour/asmejour-template.pdf Binary files differindex 6fc9631010..c15cc9f797 100644 --- a/macros/latex/contrib/asmejour/asmejour-template.pdf +++ b/macros/latex/contrib/asmejour/asmejour-template.pdf diff --git a/macros/latex/contrib/asmejour/asmejour-template.tex b/macros/latex/contrib/asmejour/asmejour-template.tex index 18ae24c057..7e3f8a2930 100644 --- a/macros/latex/contrib/asmejour/asmejour-template.tex +++ b/macros/latex/contrib/asmejour/asmejour-template.tex @@ -3,7 +3,7 @@ %% %% This file is asmejour-template.tex, a template to format papers in the style of ASME journal papers. %% -%% This file is version 1.22 dated 2024/02/06 +%% This file is version 1.23 dated 2024/07/24 %% %% Author: John H. Lienhard V %% Department of Mechanical Engineering @@ -33,8 +33,10 @@ %% %% * Option to omit all ASME text fields from the footer [nofoot]. %% +%% * Option for single column formatting [singlecolumn]. +%% %% * Options for PDF/A compliance. With pdfTeX, [pdf-a] will produce PDF/A-3u compliance with sRGB OutputIntent. -%% * [pdfapart= 1 or 2 or 3] and [pdfaconformance= b or u] can enable levels 1b, 2b, 2u, and 3b. +%% * [pdfapart= 1 or 2 or 3] and [pdfaconformance= b or u] will select other levels: 1b, 2b, 2u, and 3b. %% * %% * Recently, LaTeX (2021 and later) has integrated support for pdf-a, through the \DocumentMetadata{..} %% * command. This approach works with both pdfTeX and luaLaTeX. The asmeconf class supports this new feature, @@ -59,8 +61,8 @@ %% * [hyphenate] allow hyphenation, with pdfTeX only (normally, the typewriter font is not hyphenated) %% %% * Options for the babel package to support passages in other languages (such as a translated -%% * abstract in an appendix), e.g. [french]. The main language will default to English -%% * unless a different main language is selected, e.g. [main=spanish]. See Appendix C for details. +%% * abstract in an appendix), e.g. [german]. The main language will default to English +%% * unless a different main language is selected, e.g. [main=spanish]. See Appendix B for details. %% %% For details of the newtx and mathalfa packages, refer to their documentation (available at CTAN: http://ctan.org). %% @@ -82,16 +84,16 @@ %% see https://www.latex-project.org/news/latex2e-news/ltnews35.pdf %% Uncomment the next lines and omit the option [pdf-a], if you are using an up-to-date LaTeX platform -%\DocumentMetadata{% -% pdfstandard=A-3b,% A-2b, A-2u, A-3b, or A-3u (don't use u options with LuaLaTeX) -% pdfversion=1.7, -% lang=en-US, -%} +\DocumentMetadata{% + pdfstandard=A-3u,% A-2b, A-2u, A-3b, or A-3u (don't use u options with LuaLaTeX) + pdfversion=1.7, + lang=en-US, +} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Class options are described above. -\documentclass[upint,varvw,barcolor=Goldenrod3,mathalfa=cal=euler,balance,hyphenate,french,pdf-a]{asmejour}% subscriptcorrection, +\documentclass[nocopyright,upint,varvw,barcolor=Goldenrod3,mathalfa=cal=euler,balance,hyphenate,german]{asmejour}% subscriptcorrection,french %%%% pdf metadata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -121,11 +123,14 @@ % Use title case (upper and lower case letters) % Note usage below for corresponding author. -\SetAuthorBlock{Author Name[s]}{Department of Mechanical Engineering,\\ - Institution or Company Name,\\ - Street address,\\ - City, State, Country\\ - email: xxx@yyy.zzz} +\SetAuthorBlock{John H.\ Lienhard\CorrespondingAuthor}{% + Fellow ASME\\ + Rohsenow Kendall Heat Transfer Laboratory,\\ + Department of Mechanical Engineering,\\ + Massachusetts Institute of Technology,\\ + Cambridge, MA 02139 USA\\ + email: lienhard@mit.edu +} % To label one or more corresponding authors put "Name\CorrespondingAuthor". No space after "Name". % An optional argument can be added if email is not in address block as @@ -133,14 +138,12 @@ % Can also include multiple emails and use the command more than once for multiple corresponding authors, % "Name\CorrespondingAuthor{write@to.him, write@to.her}" -\SetAuthorBlock{John H.\ Lienhard V\CorrespondingAuthor}{% -Fellow ASME\\ -Rohsenow Kendall Heat Transfer Laboratory,\\ -Department of Mechanical Engineering,\\ -Massachusetts Institute of Technology,\\ -Cambridge, MA 02139 USA\\ -email: lienhard@mit.edu -} +\SetAuthorBlock{Author Name[s]}{Department of Mechanical Engineering,\\ + Institution or Company Name,\\ + Street address,\\ + City, State, Country\\ + email: xxx@yyy.zzz +} %%% Change to your paper title. Can insert line breaks if you wish (otherwise breaks are selected automatically). \title{Preprint Template for ASME\\ Journal Papers: asmejour.cls} @@ -164,6 +167,7 @@ This paper is an example and {\upshape\LaTeX} template for the {\upshape\texttt{ \maketitle %% This command creates the author/title/abstract block. Essential! + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% End of fields to be completed. Now write! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -227,7 +231,7 @@ Section, subsection, and subsubsection headings should be in title case (first l %% captions go below figures \begin{figure} -\centering\includegraphics[width=\linewidth]{sample-figure-1.pdf} +\centering\includegraphics[width=\linewidth,alt={Linearization errors}]{sample-figure-1.pdf} \caption{Caption with math, eqn.~\eqref{eqn:1}: $\Delta T/T_m$ vs.\ $\Delta T/T_1$~\cite{lienhard2019}\label{fig:1}} \end{figure} @@ -466,8 +470,12 @@ As of June 2022, the \LaTeX 3 team has added native support for PDF/A in the \La \subsection{Typewriter Font Options} This font is the sans-serif, monospaced font \texttt{inconsolata}. By default, the word spacing is variable, but option \texttt{[mono]} ends this behavior. A slashed zero is the default; option \texttt{[var0]} removes the slash. Option \texttt{[hyphenate]} enables hyphenation of the typewriter font when running \hologo{pdfTeX}. +\subsection{Single column layout} The option \texttt{[singlecolumn]} switches from two-column to single-column layout. %%%%%%%%%%%%%%% begin two column table %%%%%%%%%%%%%%%%%% +% +% note: the fourth column could be a dcolumn instead of using \makebox, with d{1.4} replacing c column. +% \begin{table*}[t] \caption{A table spanning two columns}\label{tab:4}% \centering{% @@ -478,7 +486,8 @@ As of June 2022, the \LaTeX 3 team has added native support for PDF/A in the \La \multicolumn{1}{c!{\hspace*{3.em}}}{$\textrm{erfc}(x)$} & \multicolumn{1}{c}{$x$} & \multicolumn{1}{c}{$\textrm{erf}(x)$} & -\multicolumn{1}{c@{\hspace*{1.5em}}}{$\textrm{erfc}(x)$} \\ \midrule +\multicolumn{1}{c@{\hspace*{1.5em}}}{$\textrm{erfc}(x)$} \\ +\midrule 0.00 & 0.00000 & 1.00000 & 1.10 & 0.88021 & 0.11980 \\ 0.05 & 0.05637 & 0.94363 & 1.20 & 0.91031 & 0.08969 \\ 0.10 & 0.11246 & 0.88754 & 1.30 & 0.93401 & 0.06599 \\ @@ -554,7 +563,7 @@ Acknowledge individuals, institutions, or companies that supported the authors i \entry{b}{bulk value} \entry{$\infty$}{free stream value} -\end{nomenclature} +\end{nomenclature} %%%%%%%%%%%%%%% APPENDICES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -571,31 +580,30 @@ Acknowledge individuals, institutions, or companies that supported the authors i This text is just for illustration. The radiation fractional function may be written in terms of the incomplete zeta function for convenience: \begin{align} -f(\lambda T) = {}& \frac{1}{\sigma T^4} \int_0^\lambda\frac{2\pi h c_o^2}{\lambda^5 \left[ \exp (h c_o/k_B T \lambda) - 1\right] } \, d\lambda \\ - = {}& \frac{1}{\sigma T^4}\frac{2\pi k_B^4 T^4}{h^3c_o^2}\int^\infty_{c_2/\lambda T}\frac{t^3}{e^t -1}\, dt\label{eqn:zeta} +f(\lambda T) &= \frac{1}{\sigma T^4} \int_0^\lambda\frac{2\pi h c_o^2}{\lambda^5 \left[ \exp (h c_o/k_B T \lambda) - 1\right] } \, d\lambda \\ + &= \frac{1}{\sigma T^4}\frac{2\pi k_B^4 T^4}{h^3c_o^2}\int^\infty_{c_2/\lambda T}\frac{t^3}{e^t -1}\, dt\label{eqn:zeta} \end{align} When $\lambda T \rightarrow \infty$, $f = 1$ and the last equation yields the well-known result \begin{equation} - {\sigma T^4} =\frac{2\pi k_B^4 T^4}{h^3c_o^2} \underbrace{\int_0^\infty \frac{t^3}{e^t - 1} \, dt}_{\equiv\mspace{2mu} \zetaup(4)\Gamma(4)} +\sigma T^4 =\frac{2\pi k_B^4 T^4}{h^3c_o^2} \underbrace{\int_0^\infty \frac{t^3}{e^t - 1} \, dt}_{\equiv\mspace{2mu} \zetaup(4)\Gamma(4)} \end{equation} where the Gamma function $\Gamma(4) = 3!$ and the Riemann zeta function, $\zetaup(4)$, has the indicated integral representation \cite[\S13.12]{ww1927}. A classical result due to Euler \cite{euler1740} gives $\zetaup(4) = \pi^4/90$ (see also \cite[\S167]{euler1748}), from which we recover the usual definition of the Stefan-Boltzmann constant, $\sigma$. - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Language Support} +\section{Language Support\label{app:language}} ASME publishes in English, but the \texttt{babel} package is loaded for users who may wish to include other languages. For example, an author might wish to include an appendix that provides the abstract in another language. When more than one language option is included in \verb|\documentclass[..]{asmejour}|, English will be assumed to be the main language of the document. (To choose a different main language, set \texttt{[main=..]}). -If no language options are given, the package defaults to English. As an example, a passage in French is -shown in \selectlanguage{french}\appendixname~\ref{app:fourier}\selectlanguage{english}. +If no language options are given, the package defaults to English. As an example, a passage in German is +shown in \selectlanguage{german}\appendixname~\ref{app:pohlhausen}\selectlanguage{english}. The standard caption and section names will follow \texttt{babel}'s dictionary for primary languages other than English. Users may additionally change ``Keywords'', ``Nomenclature'', and ``Corresponding author'' by renewing the commands \verb|\keywordname|, \verb|\nomname|, and \verb|\CAwords|. Changes to the page footer were described in Sec.~\ref{sec:footer}. The pdf bookmark for ``Appendices'' by be changed by renewing \verb|\appendicesname|. The font encoding is set to T1 and utf-8 input is supported: -%% If you have trouble with the next line (or the French text that follows), your file may not be saved in utf-8 format. You can delete these lines to resolve the issue. +%% If you have trouble with the next line, your file may not be saved in utf-8 format. You can delete these lines to resolve the issue. \typeout{If you have trouble with the next line, your file may not be saved in utf-8 format. You can delete that line to resolve the issue.} \ifluatex\typeout{Under LuaLaTeX, some of these accents must be obtained as escaped characters, with \=a, \c{e}, \l, \.o, \oe, \v{z}, \'z, etc.}\fi àáâäæãåā èéęëêēė îïíīįì ôöòóœøōõ ûüùúū çćč ł ñń ßśš ÿ žźż @@ -604,18 +612,13 @@ No effort has been made to support customization of language-specific fonts (som %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\selectlanguage{french} -\section{Discours Préliminaire de Fourier}\label{app:fourier} - -Les causes primordiales ne nous sont point connues; mais elles sont assujetties à des lois simples et constantes, que l'on peut découvrir par l'observation, et dont l'étude est l'objet de la philosophie naturelle. - -La chale ur pénètre, comme la gravité, toutes les substances de l'univers, ses rayons occupent toutes les parties de l'espace. Le but de notre ouvrage est d'exposer les lois mathématiques que suit cet élément. Cette théorie formera désormais une des branches les plus importantes de la physique générale~\cite{fourier1822}. +\selectlanguage{german} +\section{Der Wärmeaustausch zwischen festen Körpern und Flüssigkeiten mit kleiner reibung und kleiner Wärmeleitung (von E. Pohlhausen)\label{app:pohlhausen}} +In einer strömenden Flussigkeit sind Wärmeleitung und Wärmekonvektion Vorgänge, die mit der inneren Reibung (oder Impulsleitung) und mit der Impulskonvektion große Aehnlichkeit besitzen. Mathematisch findet dies seinen Ausdruck in dem gleichartigen Bau der Differentialgleichungen, die einerseits für die Temperatur und anderseits für den Geschwindigkeitsvektor in der Flüssigkeit bestehen. Man kann daraus auf eine Beziehung +zwischen dem Wärmeaustanch und dem Reibungswiderstand schließen, die eine strömende Flüssigkeit an einem festen Körper hervorrufen. Dies ist zuerst von Prandtl ausgesprochen und durchgeführt worden, und zwar für turbulente Vorgänge, unter der vereinfachenden Annahme von Wärmequellen und -senken im Innern der Flüssigkeit~\cite{pohlhausen1921}. \selectlanguage{english} -% When you drop the [french] option, delete your .aux file as well, since [french] sets ":" as an active character. - - %%%%%%%%%%%%% BIBLIOGRAPHY %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \nocite{*} %% <=== Delete this line - unless you wish to typeset the entire contents of your .bib file. diff --git a/macros/latex/contrib/asmejour/asmejour.cls b/macros/latex/contrib/asmejour/asmejour.cls index 095964ffc7..a8cd43eae2 100644 --- a/macros/latex/contrib/asmejour/asmejour.cls +++ b/macros/latex/contrib/asmejour/asmejour.cls @@ -4,10 +4,9 @@ %% %% The asmejour.cls file should be used with the files asmejour.bst (for citations) and asmejour-template.tex. %% -%% %% This file's version and date are: - \def\versionno{1.22} - \def\versiondate{2024/01/30\space} + \def\versionno{1.23} + \def\versiondate{2024/07/24\space} %% %% Author: John H. Lienhard V %% Department of Mechanical Engineering @@ -22,14 +21,14 @@ %% 4. Support citations, footnotes, and bold face math in section headings %% 5. Provide optional line numbers for editing and review %% 6. Support balancing height of columns on the last page -%% 7. Support the archival PDF/A standards 1b, 2b, 2u, 3b, and 3u +%% 7. Support archival PDF/A standards %% 8. Provide copyright notices for government employees and government contractors %% 9. Enable various math and text features from the newtxmath, mathalfa, and newtxtext packages %% 10. Support inclusion of passages in languages other than English %% %% This class is compatible with both pdfLaTeX and LuaLaTeX. All packages required by the class -%% are in standard distributions, such as TeXLive, and are also available at CTAN (https://ctan.org/). -%% The use of an up-to-date (Feb. 2020 or later) and complete LaTeX distribution is strongly recommended. +%% are in standard distributions, such as TeX Live, and are also available at CTAN (https://ctan.org/). +%% The use of an up-to-date (Nov. 2022 or later) and complete LaTeX distribution is strongly recommended. %% %% The title block is set by specific commands that are described in the asmejour-template.tex file. %% @@ -57,72 +56,79 @@ %% 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. %% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e} \ProvidesClass{asmejour}[\versiondate asmejour paper format] -\LoadClass[twoside,9pt,twocolumn]{extarticle} - -\ifdefined\NewDocumentCommand\else - \RequirePackage{xparse}[2020/02/25] -\fi +\LoadClass[twoside,9pt]{extarticle}% twocolumn format initiated in \MakeTitle command 2024/07/20 \RequirePackage{iftex}% provides \ifpdftex, etc. \RequirePackage{ifthen} -%%%%%%%%%%%%% Test compatibility of older distributions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ExplSyntaxOn + \str_const:Nn \ClassName {asmejour} +\ExplSyntaxOff -\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}% compare version to date; \If... added to latex 2020/10/01 -\providecommand\IfPackageAtLeastTF{\@ifpackagelater}% compare version to date; \If... added to latex 2020/10/01 -\providecommand\IfPackageLoadedTF{\@ifpackageloaded}% \If...added to latex 2021/11/15 +%%%%%%%%%%%%% Some compatibility for older distributions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\IfFormatAtLeastTF{2020/02/25}{% - \ClassInfo{asmeconf}{Your LaTeX format is dated \fmtversion. LaTeX distributions 2020/10/01 or later are strongly recommended, for best results} - }{% - \ClassError{asmeconf}{Your LaTeX format is dated \fmtversion. Formats dated 2020/10/01 or later are recommended for the asmejour class. Older formats may generate errors or fail entirely!}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You can try to click past the errors for now, but your abstract will probably not compile properly if you lack the xparse package [2020/02/25], and the code will crash entirely if you lack the iftex package [2019/11/07].}% +\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}% compare version to date; \If... added to latex 2020/10/01 +\providecommand\IfPackageAtLeastTF{\@ifpackagelater}% compare version to date; \If... added to latex 2020/10/01 +\providecommand\IfPDFManagementActiveTF{\@secondoftwo}% \If... added to latex 2021/07/23 +\providecommand\IfPackageLoadedTF{\@ifpackageloaded}% \If...added to latex 2021/11/15 +\providecommand\ClassNoteNoLine[2]{\typeout{^^JClass Note #1: #2.^^J}}% log & terminal note... added to latex 2021/11/15 + +\IfFormatAtLeastTF{2020/10/01}{\relax}{% + \ClassError{\ClassName}{Your LaTeX format is dated \fmtversion. Formats dated 2020/10/01 or later are recommended for the asmejour class. Older formats may generate errors or fail entirely!}{Please UPDATE your LaTeX distribution to obtain best results. TeX Live is available for download at no charge: \string https://www.tug.org/texlive/. You can try to click past any errors for now, but your abstract will not compile properly if you lack the xparse package [2020/02/25], and the code will crash entirely if you lack the iftex package [2019/11/07].}% } - -\DeclareDocumentCommand\LogNote{m}{% - \IfFormatAtLeastTF{2021/11/15}{% - \ClassNoteNoLine{asmejour}{#1}% Added to LaTeX in Nov. 2021 - }{% - \ClassWarningNoLine{asmejour}{#1}% + +% check whether pdfmanagement (\DocumentMetadata) has been loaded (else fall back to hyperxmp and bookmark packages after loading hyperref) +\newif\ifasme@pdfmanagement +\IfPDFManagementActiveTF{ + \asme@pdfmanagementtrue +}{ + \asme@pdfmanagementfalse + \ClassWarningNoLine{\ClassName}{pdfmanagement is not active. Will load hyperxmp and bookmark packages instead} +} + +% Allow pre 2021/11/15 formats to see the graphicx alt key without causing an error +\IfFormatAtLeastTF{2021/11/15}{ + \relax +}{ + \AtBeginDocument{ + \IfPackageLoadedTF{graphicx}{\define@key{Gin}{alt}{}}{\relax} } } -%% Test whether \DocumentMetadata has been loaded (Thank you Ulrike Fischer) -\newif\if@asme@pdfmanagement -\ExplSyntaxOn -\bool_if:nTF - { - \bool_lazy_and_p:nn - {\cs_if_exist_p:N \pdfmanagement_if_active_p:} - { \pdfmanagement_if_active_p: } - } - { - \@asme@pdfmanagementtrue - } - { - \@asme@pdfmanagementfalse - } -\ExplSyntaxOff +% Enable pre-2020/10 formats to access essential macros later moved into LaTeX kernel +\ifdefined\NewDocumentCommand\else + \RequirePackage{xparse}[2020/02/25] +\fi + +% Provide pre-2020/10 installations with basic unicode character mappings +\IfFormatAtLeastTF{2020/10/01}{\relax}{% + \pdfgentounicode=1 %% enable CMaps; was moved into the latex kernel Oct 2020 + \input glyphtounicode.tex %% lists of mappings; was moved into the latex kernel Oct 2020 +} -%%%%%%%%%%%%%% Options for the class %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%% Options for the class %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage{kvoptions}% this package calls kvsetkeys \SetupKeyvalOptions{ - family=asmejour, + family=\ClassName, prefix=asmejour@, setkeys=\kvsetkeys, } %% for mathalfa, so we may pass options in this format: mathalfa=cal=euler, mathalfa=frak=boondox -\define@key{asmejour}{mathalfa}{% +\define@key{\ClassName}{mathalfa}{% \PassOptionsToPackage{#1}{mathalfa}% } +%% Option to obtain line numbers [singlecolumn], 2024/07/20 +\DeclareBoolOption{singlecolumn} + %% Option to obtain line numbers [lineno] \DeclareBoolOption{lineno} @@ -132,6 +138,12 @@ %% Option to omit lists of figures and tables \DeclareBoolOption{nolists} +%% Option to omit ASME copyright notice [nocopyright] +\DeclareBoolOption{nocopyright} + +%% Option to omit ASME footers [nofoot] +\DeclareBoolOption{nofoot} + %% Option for copyright notice if all authors are government employees [govt] \DeclareBoolOption{govt} @@ -141,57 +153,54 @@ %% Option for government contractor copyright notice [contractor] \DeclareBoolOption{contractor} -%% set [barcolor=] to a color name defined by xcolor package +%% set key [barcolor=] to pass a color name defined by xcolor package \DeclareStringOption[black]{barcolor} -%% the key main= passes the choice of main language to babel +%% the key [main= ] to pass the choice of main language to babel \newif\ifaj@mainset\aj@mainsetfalse -\define@key{asmejour}{main}[english]{% +\define@key{\ClassName}{main}{% \PassOptionsToPackage{main=#1,#1}{babel}% added #1 resolves conflicts between certain .ldf files under "main=". \aj@mainsettrue - \ifthenelse{\equal{#1}{english}}{% - \PassOptionsToPackage{pdflang=en}{hyperref}}{% - \LogNote{Selecting #1 as the primary language} - }% + \ClassNoteNoLine{\ClassName}{Selecting #1 as the primary language} } -%% if main language was not chosen explicitly, default to English -\ifaj@mainset\relax\else - \PassOptionsToPackage{main=english}{babel}% - \PassOptionsToPackage{pdflang=en}{hyperref} - \ClassInfo{Selecting English as the primary language, since main= not set}% -\fi - %% Suppress warnings about unused global options, 2021/12/01 -\DeclareDefaultOption{}% suppress warning about unused mathalfa option +\DeclareDefaultOption{} -\ProcessKeyvalOptions{asmejour} +\ProcessKeyvalOptions{\ClassName} %% Turn off these keys now that we're done with them \NewDocumentCommand\aj@DisableOption{m}{% \DisableKeyvalOption[% action=ignore,% - class=asmejour% + class=\ClassName% ]{#1}{\@KeyFamily}% } \NewDocumentCommand\@DisableKeys{>{\SplitList{;}}m}{\ProcessList{#1}{\aj@DisableOption}} -\def\@KeyFamily{asmejour} -\@DisableKeys{mathalfa;barcolor;lineno;balance;nolists;govt;govtsome;contractor;main} +\def\@KeyFamily{\ClassName} +\@DisableKeys{mathalfa;singlecolumn;lineno;balance;nolists;nocopyright;nofoot;govt;govtsome;contractor;barcolor;main} + + +%% if main language was not was chosen explicitly, default to English +\ifaj@mainset\relax\else + \PassOptionsToPackage{main=english}{babel}% + \ClassNoteNoLine{\ClassName}{Selecting English as the primary language, since main= not set}% +\fi -%%%%%%% PDF/A Compliance Keys %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%% PDF/A Compliance Keys %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% new pdf management in LaTeX, with \DocumentMetaData{..}, is preferred to this approach. \newif\ifaj@setpdfa\aj@setpdfafalse \newif\ifaj@pdfaone\aj@pdfaonefalse -\if@asme@pdfmanagement\else +\ifasme@pdfmanagement\else \SetupKeyvalOptions{ family=pdfaopt, - prefix=pdafopt@, + prefix=pdfaopt@, setkeys=\kvsetkeys, } @@ -201,7 +210,7 @@ \define@key{pdfaopt}{pdf-a}[true]{% \aj@setpdfatrue \PassOptionsToPackage{pdfa}{hyperref} - \AtBeginDocument{\hypersetup{pdfapart=3,pdfaconformance=u}}% note: hyperref takes these options if hyperxmp is loaded + \AtBeginDocument{\hypersetup{pdfapart=3,pdfaconformance=u}}% hyperref takes these options if hyperxmp is loaded } %%% to select part 1, 2 or 3 \define@key{pdfaopt}{pdfapart}[3]{% @@ -209,7 +218,7 @@ \AtBeginDocument{\hypersetup{pdfapart=\asmejour@tempa}} \ifthenelse{\equal{#1}{1}}{\aj@pdfaonetrue}{\relax}% } - %% to select conformance b or u. NB: a is not possible with pdfLaTeX, and u is not possible with 1. + %% to select conformance b or u. NB: a is not currently possible with pdfLaTeX; u not possible with 1. \ExplSyntaxOn \define@key{pdfaopt}{pdfaconformance}[u]{% \str_set:Ne \l_tmp_str { \str_uppercase:n {#1} } @@ -236,9 +245,10 @@ \pdfminorversion=7 % this selection is not required \fi \else - \ifaj@setpdfa\ClassWarningNoLine{asmejour}{pdf-a option requires pdfLaTeX engine. Under LuaLaTeX, use % - \protect\DocumentMetadata{pdfstandard=A-3b} before \protect\documentclass[..]{asmeconf}}\fi% - \ifx\directlua\undefined\else + \ifaj@setpdfa\ClassWarningNoLine{\ClassName}{pdf-a option requires pdfLaTeX. Under LuaLaTeX, use % + \protect\DocumentMetadata{pdfstandard=A-3b} before \protect\documentclass[..]{\ClassName}}% + \fi + \ifx\directlua\undefined\else % default under lualatex is 1.4 \directlua{ if pdf.getminorversion() \string~= 7 then if (status.pdf_gone and status.pdf_gone > 0) @@ -248,58 +258,28 @@ pdf.setminorversion(7) end end + } \fi - }% will lose some accented characters this way... better to use fontspec, if the system fonts exist. \fi \fi -%%%%%%%%%% Further class options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% Option to omit ASME footer -\DeclareOption{nofoot}{% - \AtBeginDocument{\pagestyle{plain}% - \fancypagestyle{title}{% - \fancyhf{} - \fancyfoot[CE,CO]{\thepage} - } - } -} - -%% Option to omit ASME copyright -\DeclareOption{nocopyright}{% - \AtBeginDocument{\fancypagestyle{title}{% - \fancyhf{} - \fancyfoot[RO]{\large\sffamily \@PreprintStringR\space\space\bfseries/\space\space\@PaperNumber\thepage} - \fancyfoot[LO]{\large\bfseries\sffamily Journal of \@JourName} - \fancyfoot[CO]{} - } - } -} +%%%%%%%%% Various font-related options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Option for slightly larger small capitals font [largesc], corrected 2021/01/29 \DeclareOption{largesc}{\PassOptionsToPackage{largesc=true}{newtxtext}}% largesc is a boolean key in newtxtext -%% ASME word separation is greater than newtxtext defaults so change these parameters. -\PassOptionsToPackage{spacing=0.3em, stretch=0.18em, shrink=0.10em}{newtxtext}% increased shrink from 0.08, 2021/01/30 - %% Disable newtxtext osf option, which is not appropriate for documents in this class \DeclareOption{osf}{% \PassOptionsToPackage{lining}{newtxtext}% } -%% Option to hyphenate the typewriter font [hyphenate] -\DeclareOption{hyphenate}{% - \PassOptionsToPackage{hyphenate}{inconsolata}% - \LogNote{Allowing hyphenation of typewriter font}% -} - \DeclareOption{hyphenate}{% \ifpdftex \PassOptionsToPackage{hyphenate}{inconsolata}% hyphenate is a key via xkeyval in inconsolata - \LogNote{Allowing hyphenation of typewriter font}% + \ClassNoteNoLine{\ClassName}{Allowing hyphenation of typewriter font}% \else - \ClassWarningNoLine{asmejour}{The [hyphenate] option is only supported with pdftex. It will be ignored}% + \ClassWarningNoLine{\ClassName}{The [hyphenate] option is only supported with pdftex. It will be ignored}% \fi } @@ -329,7 +309,7 @@ \ProcessOptions \relax -%%%%%%%%%%%% Page size, bibliography, graphics, color, etc. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%% Page size, bibliography, graphics, color %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage[paperheight=285.7mm, paperwidth=215.900mm, left=21.100mm, right=21.100mm, top=15.9mm, bottom = 24mm, footskip=8mm]{geometry} \setlength\columnsep{4.5mm} @@ -342,22 +322,8 @@ \renewcommand*{\bibfont}{\footnotesize} \RequirePackage{graphicx} -\RequirePackage[dvipsnames,svgnames,x11names]{xcolor}% remove obsolete options, 2023/10/23 +\RequirePackage[dvipsnames,svgnames,x11names]{xcolor}% removed obsolete options, 2023/10/23 -% Allow pre 2021/11/15 formats to see the graphicx alt key without causing an error, in preparation for tagged pdf -\IfFormatAtLeastTF{2021/11/15}{ - \relax -}{ - \AtBeginDocument{ - \IfPackageLoadedTF{graphicx}{\define@key{Gin}{alt}{}}{\relax} - } -} - -% Nice solution from DPC to prevent aux file errors when switching from pdflatex to lualatex -\ifx\directlua\undefined - \AtBeginDocument{\immediate\write\@auxout{\detokenize{% - \ifx\directlua\undefined\else\endinput\fi}}} -\fi %%%%%%%%%%%%% Table related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -383,7 +349,9 @@ \ifpdftex \RequirePackage[T1]{fontenc} \RequirePackage[utf8]{inputenc}% for backward compatibility with pre-2018 LaTeX distributions - \RequirePackage[helvratio=0.91]{newtxtext}% add this scaling 2022/06/26 + %% ASME word separation is greater than newtxtext defaults so change these parameters. + %% increased shrink from 0.08, 2021/01/30; add this helvetica scaling 2022/06/26 + \RequirePackage[helvratio=0.91, spacing=0.3em, stretch=0.18em, shrink=0.10em]{newtxtext}% default {0.25em,0.2em,0.1em} \RequirePackage[varl,varqu]{inconsolata}% sans typewriter font; restored varl, varqu 2020/08/10 \RequirePackage[]{newtxmath} \else % use lualatex with newtxmath and fontspec for text primary fonts. Revised 2023/10/21. @@ -396,20 +364,20 @@ % \RequirePackage[varqu,varl]{inconsolata} % typewriter font for math \renewcommand\rmdefault{ntxtlf} % roman font for math - \DeclareFontFamily{T1}{\sfdefault}{} % sf for math + \DeclareFontFamily{T1}{\sfdefault}{} % sf for math \DeclareFontShape{T1}{\sfdefault}{m}{n}{<-> s*[0.94] ec-qhvr}{} %% see t1qhv.fd; 0.9-->0.94 2022/01/15 \RequirePackage[]{newtxmath} % newtxmath still handles mathematics \RequirePackage[no-math]{fontspec} \defaultfontfeatures{Ligatures=TeX,} % - \def\FontWarning{For luaLaTeX, you MUST have these OpenType fonts installed as system fonts on your computer: TeX Gyre Termes and TeX Gyre Heros (from \string http://www.gust.org.pl/projects/e-foundry/tex-gyre) and Inconsolatazi4 (\string https://ctan.org/tex-archive/fonts/inconsolata/opentype). If DON'T have these fonts, you will see ERROR messages!} + \def\FontWarning{For luaLaTeX, you MUST have these OpenType fonts installed as system fonts on your computer: TeX Gyre Termes and TeX Gyre Heros (from \string http://www.gust.org.pl/projects/e-foundry/tex-gyre) and Inconsolatazi4 (\string https://ctan.org/tex-archive/fonts/inconsolata/opentype). If you DON'T have these fonts, you will see ERROR messages!} % - \IfFontExistsTF{TeXGyreTermesX}{}{\ClassWarning{asmeconf}{\FontWarning} } - \IfFontExistsTF{texgyreheros}{}{ \ClassWarning{asmeconf}{\FontWarning} } - \IfFontExistsTF{Inconsolatazi4}{}{\ClassWarning{asmeconf}{\FontWarning} } + \IfFontExistsTF{TeX Gyre Termes}{}{\ClassWarningNoLine{\ClassName}{\FontWarning} } + \IfFontExistsTF{texgyreheros}{}{ \ClassWarningNoLine{\ClassName}{\FontWarning} } + \IfFontExistsTF{Inconsolatazi4}{}{\ClassWarningNoLine{\ClassName}{\FontWarning} } % - \setmainfont{TeXGyreTermesX}[% Presumes these are system fonts! Available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre - WordSpace = {1,1.4,1},%% This stretch matches newtxtext a little better. 1.4 + \setmainfont{TeXGyreTermes}[% Presumes these are system fonts! Available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre + WordSpace = {1.20,1.43,1.2},%% This stretch matches newtxtext a little better (reset 2024/07/23) Extension = .otf, UprightFont = *-Regular, ItalicFont = *-Italic, @@ -418,7 +386,8 @@ Numbers = Lining, ] \setsansfont{texgyreheros}[% Presumes these are system fonts! Available at: http://www.gust.org.pl/projects/e-foundry/tex-gyre - WordSpace = {1,1.4,1}, + WordSpace = {1.20,1.43,1.2},%% This stretch matches newtxtext a little better (reset 2024/07/23) +% WordSpace = {1,1.4,1}, Extension = .otf, UprightFont = *-regular, ItalicFont = *-italic, @@ -443,7 +412,7 @@ \RequirePackage{bm}% load after all math for expanded access to bold math -%% In addition to the word spacing options declared in line 235... +%% In addition to the word spacing options declared in line 371... %% Relative to size9.clo: leading reduced to 10 pt; displayskips made greater \renewcommand\normalsize{% \@setfontsize\normalsize\@ixpt{10\p@}% % <== was \@xipt @@ -464,13 +433,12 @@ \newcommand*{\CondSans}{\fontencoding{T1}\fontfamily{qhvc}\selectfont}% remove extra \selectfont, 2023/10/21 \renewcommand\huge{\@setfontsize\huge{14}{14}} %... for author names only \newcommand*{\CondSansBold}{\renewcommand\bfdefault{b}\fontencoding{T1}\fontfamily{qhvc}\selectfont\bfseries} -\renewcommand\Huge{\@setfontsize\Huge{26.5}{26.5}} %... for title font only +\renewcommand\Huge{\@setfontsize\Huge{26.5}{26.5}} %... for title only \RequirePackage{metalogo,hologo}% Access to various LaTeX logos (for use in the documentation) -%% This provides sans serif italic and sans serif bold italic math. -%% It's intended for use in the figure and table captions. -%% Fonts are from newtxsf package. +%% This provides sans serif italic and sans serif bold italic math, against with fonts from newtxsf. +%% For use in the figure and table captions. \DeclareMathVersion{sansbold} \SetSymbolFont{letters}{sansbold}{OML}{ntxsfmi}{b}{it} \SetSymbolFont{lettersA}{sansbold}{U}{ntxsfmia}{b}{it} @@ -480,8 +448,8 @@ \SetSymbolFont{operators}{sansbold}{\encodingdefault}{\sfdefault}{\bfdefault}{n} \SetMathAlphabet{\mathsf}{sansbold}{\encodingdefault}{\sfdefault}{b}{n}% \mathsf is upright -%% These lines are to provide math accents for the sans and sansbold math versions. -%% The accents from ntxsfmi work normally with regular times fonts. Added 2021/01/27 +%% Provide math accents for the sans and sansbold math versions. Accents from ntxsfmi work normally +%% with regular times fonts. 2021/01/27 \DeclareSymbolFont{lettersAB}{U}{ntxsfmia}{m}{it} \SetSymbolFont{lettersAB}{normal}{U}{ntxsfmia}{m}{it} \SetSymbolFont{lettersAB}{bold}{U}{ntxsfmia}{b}{it} @@ -556,8 +524,7 @@ \DeclareMathSymbol{\sfhslash}{\mathalpha}{lettersAB}{52}% this is not upright \DeclareMathSymbol{\sfhbar}{\mathalpha}{lettersAB}{53}% this is not upright -%%% sans math version, potential value with PGFPlots, and provisionally called in subfigure captions. -%%% this is experimental, still needs stress testing. 2021/01/30 +%%% sans math version, potential value with PGFPlots, called in subfigure captions. 2021/01/30 \DeclareMathVersion{sans} \SetSymbolFont{letters}{sans}{OML}{ntxsfmi}{m}{it} \SetSymbolFont{lettersA}{sans}{U}{ntxsfmia}{m}{it} @@ -569,7 +536,7 @@ \SetMathAlphabet{\mathsf}{sans}{\encodingdefault}{\sfdefault}{m}{n} -%%%%%%%%%%%%%%%%% Some adjustments to math layout %%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%% Some adjustments to math layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \setlength{\jot}{10pt}% <== default is 3pt @@ -580,7 +547,7 @@ \allowdisplaybreaks % ASME allows these breaks -%%%%%%%%%%%%%%%%% Equation and Line Numbering %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%% Equation and Line Numbering %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage{etoolbox}% patching amsmath @@ -598,37 +565,36 @@ \ifasmejour@lineno \RequirePackage[switch,mathlines]{lineno}% - \renewcommand{\linenumberfont}{\normalfont\footnotesize\color{red}}% + \renewcommand{\linenumberfont}{\normalfont\scriptsize\color{red}}% \AtBeginDocument{\linenumbers}% \ifasmejour@balance - \ClassWarningNoLine{asmejour}{Package lineno loaded, so final column balancing will be disabled}% + \ClassWarningNoLine{\ClassName}{Package lineno loaded, so final column balancing will be disabled}% \fi %%% Patch to allow line numbering in AMS math environments. %%% This patch is for lineno versions earlier than v5.2 [2023/05/19]. As of mid-2023, the lineno package %%% has been corrected to account for the AMS math environments. Retaining temporarily for backward compatibility. %%% postdisplaypenalty adjusted to avoid extra line number at end, see: https://tex.stackexchange.com/a/461192/ - %%% multline has some additional problem that puts an extra line number above it. \IfPackageAtLeastTF{lineno}{2023/05/19}{\relax}{ - \NewDocumentCommand{\ac@losepostpenalty}{}{\patchcmd{\linenomathWithnumbers}{\advance\postdisplaypenalty\linenopenalty}{}{}{}} + \NewDocumentCommand{\aj@losepostpenalty}{}{\patchcmd{\linenomathWithnumbers}{\advance\postdisplaypenalty\linenopenalty}{}{}{}} % - \NewDocumentCommand{\ac@FixAMSMath}{m}{% - \AtBeginEnvironment{#1}{\ac@losepostpenalty\linenomath}% + \NewDocumentCommand{\aj@FixAMSMath}{m}{% + \AtBeginEnvironment{#1}{\aj@losepostpenalty\linenomath}% \AtEndEnvironment{#1}{\endlinenomath}% - \AtBeginEnvironment{#1*}{\ac@losepostpenalty\linenomath}% + \AtBeginEnvironment{#1*}{\aj@losepostpenalty\linenomath}% \AtEndEnvironment{#1*}{\endlinenomath}% } % - \NewDocumentCommand{\ac@FixAll}{>{\SplitList{;}}m}{\ProcessList{#1}{\ac@FixAMSMath}} + \NewDocumentCommand{\aj@FixAll}{>{\SplitList{;}}m}{\ProcessList{#1}{\aj@FixAMSMath}} % - \ac@FixAll{align;alignat;gather;flalign;multline} + \aj@FixAll{align;alignat;gather;flalign;multline} } % \else \ProvideDocumentEnvironment{linenomath}{}{}{}% - \ifasmejour@balance % balancing through flushend can produce weird errors - \RequirePackage{flushend}% flushend package is NOT compatible with lineno + \ifasmejour@balance % balancing through flushend can produce weird errors. + \RequirePackage{flushend}% flushend package is NOT compatible with lineno. \AtEndDocument{\flushcolsend}% - \LogNote{Calling flushend package to balance column height on last page}% + \ClassNoteNoLine{\ClassName}{Calling flushend package to balance column height on last page}% \fi% \fi @@ -638,9 +604,9 @@ %% ASME page proofs seem to align the number at top of the line, rather than bottom as done here. -%%%%%%%%%%%%%%%%% Footer Set Up %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%% Footer Set Up %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%% footer text names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%% footer text names %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\JourName}[1]{\gdef\@JourName{#1}} \providecommand\@JourName{\hbox{ }} @@ -650,8 +616,8 @@ } \providecommand\@PaperYear{\the\year} -\def\@PreprintStringL{PREPRINT FOR REVIEW} -\def\@PreprintStringR{PREPRINT FOR REVIEW} +\def\@PreprintStringL{PREPRINT}% updated 2024/07/24 +\def\@PreprintStringR{PREPRINT} \NewDocumentCommand{\PreprintString}{m o}{% \IfNoValueTF{#2}{% @@ -668,32 +634,53 @@ %%%%%% Fancyhdr %%%%%%%%%%%%%%%%%%%%%%%%% -\RequirePackage{fancyhdr} +\RequirePackage{fancyhdr}% options revised 2024/07/23 \pagestyle{fancy} \fancyhf{}% clear all header and footer fields \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt} -\fancyfoot[RE]{\large\bfseries\sffamily Transactions of the ASME} -\fancyfoot[LO]{\large\bfseries\sffamily Journal of \@JourName} -\fancyfoot[RO]{\large\sffamily \@PreprintStringR\space\space\bfseries/\space\space\@PaperNumber\thepage} -\fancyfoot[LE]{\large\sffamily {\bfseries \@PaperNumber\thepage\space\space/}\space\space\@PreprintStringL\ } +\ifasmejour@nofoot + \fancyfoot[CE,CO]{\thepage} +\else + \fancyfoot[RE]{\large\bfseries\sffamily Transactions of the ASME} + \fancyfoot[LO]{\large\bfseries\sffamily Journal of \@JourName} + \fancyfoot[RO]{\large\sffamily \@PreprintStringR\space\space\bfseries/\space\space\@PaperNumber\thepage} + \fancyfoot[LE]{\large\sffamily {\bfseries \@PaperNumber\thepage\space\space/}\space\space\@PreprintStringL\ } +\fi -\fancypagestyle{title}{% +\fancypagestyle{title}{% is an odd page \fancyhf{}% clear all header and footer fields \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt} - \fancyfoot[RO]{\large\sffamily \@PreprintStringR\space\space\bfseries/\space\space\@PaperNumber\thepage} - \fancyfoot[LO]{\large\bfseries\sffamily Journal of \@JourName} - \fancyfoot[CO]{\large\bfseries\sffamily Copyright \textcopyright\ \@PaperYear\ by ASME} + \ifasmejour@nofoot + \fancyfoot[CO]{\thepage} + \else + \fancyfoot[RO]{\large\sffamily \@PreprintStringR\space\space\bfseries/\space\space\@PaperNumber\thepage} + \fancyfoot[LO]{\large\bfseries\sffamily Journal of \@JourName} + \ifasmejour@nocopyright + \fancyfoot[CO]{} + \else + \fancyfoot[CO]{\large\bfseries\sffamily Copyright \textcopyright\ \@PaperYear\ by ASME} + \fi + \fi } + %%%%%% Footnotes %%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage{fnpos} \makeFNbottom \makeFNbelow +\RequirePackage{footmisc}% +\IfPackageAtLeastTF{footmisc}{2022/02/05}{ + \PassOptionsToPackage{belowfloats}{footmisc}% + }{ \RequirePackage{fnpos} + \makeFNbottom + \makeFNbelow + }% +\setlength\footnotemargin{4mm}% reduce indentation of footnotes, from footmisc \setlength{\skip\footins}{12pt plus 2pt minus 1pt} \renewcommand{\footnoterule}{% @@ -702,10 +689,6 @@ \kern 2pt } -%% reduce indentation of footnotes -\renewcommand\@makefntext[1]{% - \noindent\makebox[4mm][r]{\@makefnmark}\hyphenpenalty=300\exhyphenpenalty=300 #1}% <== suppress hyphenation - %% Produces an unmarked footnote about the revision date. %% This command is invoked by \date as part of \MakeTitlePage below. %% Text can be anything given as the argument to \date{..}. @@ -717,13 +700,13 @@ %% include a comma for sequential footnotes \ExplSyntaxOn - \cs_new:Npn \__asmejour_NoteComma:n { \peek_meaning:NT \footnote { \textsu{\mdseries,} } } + \cs_new:Npn \__asmejour_NoteComma:n { \peek_meaning:NT \footnote { \textsuperscript{\mdseries,} } } \cs_new_eq:NN \__savefootnote \footnote \cs_gset_protected:Npn \footnote #1 { \__savefootnote{#1}\__asmejour_NoteComma:n } \ExplSyntaxOff -%%%%%%%%% Caption Related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%% Caption Related %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \addto{\captionsenglish}{% \renewcommand{\figurename}{Fig.} @@ -739,7 +722,7 @@ \captionsetup[figure]{labelfont={sf,bf},textfont={sf,bf},textformat=boldmath,labelsep=quad} \captionsetup[table]{labelfont={sf,bf},textfont={sf,bf},textformat=boldmath,labelsep=quad,skip=0.5\baselineskip} -%% 30 January 2021. ASME only labels subfigures with a sans serif, italic (a), (b),... no caption text, no bold face. +%% 2021/01/30: ASME only labels subfigures with a sans serif, italic (a), (b),... no caption text, no bold face. \captionsetup[subfigure]{labelfont={sf},textfont={sf},textformat=sansmath,labelformat=simple}% default: =parens \renewcommand\thesubfigure{(\textit{\alph{subfigure}})} @@ -747,7 +730,7 @@ \renewcommand\thesubtable{(\textit{\alph{subtable}})} -%%%%%%%%%%%% Section Headings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%% Section Headings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage[raggedright,indentafter]{titlesec} @@ -760,28 +743,28 @@ \titlespacing{\subsubsection}{\parindent}{12pt plus 3pt minus 2pt}{0.5em} %% ASME style does not seem to go lower than third level heading, so ... -%% ....putting \paragraph into \subsubsection settings. +%% ...put \paragraph into \subsubsection settings. \titleformat{\paragraph}[runin]{\itshape}{\thesubsubsection}{0.5em}{}[.] \titlespacing{\paragraph}{\parindent}{14pt plus 3pt minus 2pt}{0.5em} %% Special handling of the appendices %% Assumes that appendices are the last technical content in paper -\providecommand{\appendicesname}{Appendices} - -\RenewDocumentCommand{\appendix}{}{% - \pdfbookmark[1]{\appendicesname}{appendices} - \setcounter{section}{0} - \renewcommand\thesection{\Alph{section}} - \setcounter{equation}{0} - \renewcommand\theequation{\Alph{section}\arabic{equation}} - \titleformat{\section}[block]{\mathversion{bold}\bfseries\large\raggedright}{\appendixname\ \thesection:}{0.5em}{}[\setcounter{equation}{0}] -} +\providecommand*{\appendicesname}{Appendices} +\newcounter{appeqn}%% Code revised to better support tagged pdf, 2024/07/24 +\patchcmd{\appendix}{% + \setcounter{subsection}{0}}{% + \setcounter{subsection}{0}% + \pdfbookmark[1]{\appendicesname}{appendices}% + \@addtoreset{equation}{appeqn}\stepcounter{appeqn}% + \gdef\theequation{\@Alph\c@section\@arabic\c@equation}% +}{}{} +\apptocmd{\appendix}{\titleformat{\section}[block]{\mathversion{bold}\bfseries\large\raggedright}{\appendixname\ \thesection:}{0.5em}{}} %% natbib's \bibsection controls section heading for References. -%%%%%%%%%%%%%%%%% List environments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%% List environments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage{enumitem} @@ -789,24 +772,20 @@ %% I have no examples of sublists... -%%%%%%%%%%%%%%%%% Hyperref %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%% Hyperref %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% new pdf management in LaTeX, with \DocumentMetaData{..}, is preferred to this approach. \ifpdftex - %%% to assist with unicode glyph mapping, following M. Sharpe's recommendation in the newtx documentation. - \IfFormatAtLeastTF{2020/10/01}{\relax}{% - \pdfgentounicode=1 %% enable CMaps; has moved into the latex kernel Oct 2020 - \input glyphtounicode.tex %% lists of mappings; has moved into the latex kernel Oct 2020 - } + %%% to assist with unicode glyph mapping in pdf/a, per M. Sharpe's recommendation in newtx documentation \InputIfFileExists{glyphtounicode-cmr.tex}{}{} %% additional mappings \InputIfFileExists{glyphtounicode-ntx.tex}{}{} %% additional mappings + %% new pdf management in LaTeX, with \DocumentMetaData{..}, is preferred to this approach. \ifaj@setpdfa - %%%% the pdfmanagement options are experimental, from Ulrike Fischer 2021/06/12 - \if@asme@pdfmanagement - \ClassInfo{asmejour}{pdfmanagement is defined. Class file will not load a color profile} + %%%% the pdfmanagement options from Ulrike Fischer 2021/06/12 + \ifasme@pdfmanagement + \ClassInfo{\ClassName}{pdfmanagement is defined. Class file will not load a color profile} \else - \ClassInfo{asmejour}{pdfmanagement not defined. Class file will load a color profile}% + \ClassInfo{\ClassName}{pdfmanagement not defined. Class file will load a color profile}% %%% a fairly generic RGB color profile, aimed at on-screen rendering (not print production) \immediate\pdfobj stream attr{/N 3} file{sRGB.icc} \pdfcatalog{% @@ -826,41 +805,41 @@ %%% -\RequirePackage[psdextra]{hyperref} % recent kernel transition suggests providing most hyperref options via \hypersetup, - % but setting psdextra here (for additional math support in bookmarks) 2021/12/23 +\RequirePackage[psdextra]{hyperref} % provide most hyperref options via \hypersetup, but per documentation + % set [psdextra] here (for additional math support in bookmarks) 2021/12/23 \hypersetup{% - pdfborder={0 0 0},% - bookmarksnumbered=true,% - bookmarksopen=true,% - bookmarksopenlevel=1,% - colorlinks=true,% - linkcolor=blue, % - citecolor=blue, % - urlcolor=blue, % - filecolor=red, % added 2021/12/23, to make certain broken links more apparent - pdfnewwindow=true,% - pdfpagelayout=SinglePage, %TwoPageRight,% changed 2020/08/12 - pdfdisplaydoctitle=true% + pdfborder={0 0 0}, + bookmarksnumbered=true, + bookmarksopen=true, + bookmarksopenlevel=1, + colorlinks=true, + linkcolor=blue, + citecolor=blue, + urlcolor=blue, + filecolor=red, % added 2021/12/23, to make certain broken links more apparent + pdfnewwindow=true, + pdfpagelayout=SinglePage, % was TwoPageRight, changed 2020/08/12 + pdfdisplaydoctitle=true, } \urlstyle{same} % don't switch to typewriter font \RequirePackage{doi} % supports nasty characters in some doi's \renewcommand{\doitext}{doi:~} % change the default, {doi:}, to this for ASME specification -\RequirePackage{bookmark} % improves handling of pdf bookmarks \providecommand*{\toclevel@subfigure}{1}% <== to address unknown bookmark level of subfigure. 2021/12/24 \providecommand\hrefurl[2]{\href{#1}{#2}}% to address certain issues around URL recognition with new pdf management code, 2021/12/22 %% This alias is also incorporated into asmejour.bst -\if@asme@pdfmanagement - \ClassInfo{asmejour}{pdfmanagement is defined. Class file will not load hyperxmp} +\ifasme@pdfmanagement + \ClassInfo{\ClassName}{pdfmanagement is defined. Class file will not load hyperxmp} \else + \RequirePackage{bookmark} %% improves handling of pdf bookmarks \RequirePackage{hyperxmp} %% to fix transfer of metadata to Acrobat pdf % Patch bug in hyperxmp, unless a more recent version is used. \@ifpackagelater{hyperxmp}{2022/10/15}{% v5.11 or later \relax - % \ClassInfo{asmeconf}{hyperxmp v5.11 or later is in use} + % \ClassInfo{\ClassName}{hyperxmp v5.11 or later is in use} }{% \ifx\undefined\hyxmp@no@bad@parts\relax\else \newcount\hypxmp@tempcnt @@ -872,10 +851,11 @@ } \fi -%%%%%% Adjustments to accommodate hyperref bookmarks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%% Adjustments to accommodate hyperref bookmarks %%%%%%%%%%%%%%%%%%%%%% -%%% ==> recent and evolving development of \pdfstring removes all robust commands from bookmarks, so -%%% the following interventions may become unnecessary over time (2021/12/23). +%%% Recent development of \pdfstring has removed all robust commands from bookmarks (2021/12/23). +%%% By mid-2024, no errors are thrown except for \bm; however, these commands serve to still suppress warnings. +%%% Math shift by $..$ still creates a warning, but I am leaving that in place. To avoid, use \( .. \) instead. %% Since \bm is useful in headings, this fix will reduce frequency with which %% alternate pdfstrings must be given in section command as \section[pdfstring]{texstring} @@ -896,7 +876,7 @@ %% Ensure that tag color does not follow \eqref into bookmarks, 2020/02/28 \pdfstringdefDisableCommands{% - \def\eqref#1{(\ref{#1})}% + \def\eqref#1{(\ref*{#1})}% } %% Let's make sure footnotes in section headings don't break pdf bookmarks. @@ -906,13 +886,13 @@ } -%%%%%%%%%%%%% Define some section and other names for special environments %%%%%%% +%%%%%%%%%%%%% Define some section and other names for special environments %%%%%%%%%%%%%%%%%%%%%%%% \providecommand{\nomname}{Nomenclature} \providecommand{\keywordname}{Keywords} \providecommand{\CAwords}{Corresponding Author.} -%%%%%%%%%%%%% Nomenclature Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%% Nomenclature Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Nomenclature environment in ASME Journal Style. %% Run twice to get proper label width. @@ -926,7 +906,7 @@ \NewDocumentCommand{\entry}{m m}{% \ifblank{#2}{% - \ClassError{asmejour}{The command \protect\entry should have two arguments. For subheadings, use \protect\EntryHeading}{It appears that you gave only one argument for \protect\entry. You need to include a second argument.} + \ClassError{\ClassName}{The command \protect\entry should have two arguments. For subheadings, use \protect\EntryHeading}{It appears that you gave only one argument for \protect\entry. You need to include a second argument.} }{% \item[\hfill#1${} = {}$]#2% \@itempenalty=-\@lowpenalty% @@ -938,7 +918,7 @@ %% A separate command command for nomenclature subheadings \NewDocumentCommand\EntryHeading{m}{% - \itemsep12\p@ plus 4\p@ minus 4\p@% \bigskip + \itemsep12\p@ plus 4\p@ minus 4\p@ \goodbreak\item[\bfseries#1\hfill]\mbox{}\itemsep3\p@ plus 1\p@ minus 1\p@\@itempenalty=1000% add \mbox for tagged pdf, 2023/10/20 } @@ -966,28 +946,25 @@ }% }{% \setcounter{savedlength}{\widest}% - \end{list}% + \end{list}\ignorespacesafterend } -%%%%%%%%%%%%%%%% List of figures and list of tables %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%% List of figures and list of tables %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% ASME requires these lists for production. \ifasmejour@nolists - \LogNote{Omitting lists of figures and tables}% + \ClassNoteNoLine{\ClassName}{Omitting lists of figures and tables}% \else \AtEndDocument{% - \clearpage \twocolumn[% - \begin{@twocolumnfalse} \listoffigures \listoftables - \end{@twocolumnfalse} ]% }% \fi -%%%%%%%%%%%%%%%% Author/Title/Abstract block %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%% Author/Title/Abstract block %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage{xcoffins} @@ -1028,12 +1005,12 @@ \fi } - \NewDocumentCommand\SetTitle{m}{% \SetVerticalCoffin{\Title}{114mm}{% \vspace*{0.5mm}% <== ASME doesn't align bar and text \noindent\Huge\CondSansBold\raggedright% #1% + %\gdef\@title{#1}% for tagging, etc. 2024/07/24. pdf metadata will probably override. \par } } @@ -1086,7 +1063,7 @@ \addtocounter{footnote}{-1}% in case of more than one CA } -%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newlength{\@AbstractSep}%% <== separation of author/abstract coffin from main two-column text. \setlength{\@AbstractSep}{12.5mm} @@ -1094,12 +1071,15 @@ \NewDocumentCommand{\MakeTitlePage}{}{% \thispagestyle{title}% - \twocolumn[ - \begin{@twocolumnfalse} + \ifasmejour@singlecolumn % 2024/07/20 \@ConstructAuthorBlock \vspace*{\@AbstractSep} - \end{@twocolumnfalse} - ] + \else + \twocolumn[ + \@ConstructAuthorBlock + \vspace*{\@AbstractSep} + ] + \fi \ifaj@CA \addtocounter{footnote}{1} \footnotetext{\CAwords} @@ -1113,7 +1093,7 @@ \fi } -%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Provide compatibility with titling commands from standard LaTeX article class @@ -1143,7 +1123,7 @@ \RenewDocumentCommand{\thanks}{m}{\relax}%% disabling this standard command, as it is inconsistent with this format -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput %% diff --git a/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.pdf b/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.pdf Binary files differindex 5b93ad2cf9..c3b0bc535e 100644 --- a/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.pdf +++ b/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.pdf diff --git a/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.tex b/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.tex index 69b98af0b2..5a506330aa 100644 --- a/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.tex +++ b/macros/latex/contrib/asmejour/asmewide_example/asmejour-wide-equation-examples.tex @@ -1,6 +1,6 @@ %% Examples of a widetext macro for setting wide equations in the asmejour class. %% -%% Copyright (c) 2022 John H. Lienhard. Use under the MIT license: https://ctan.org/license/mit +%% Copyright (c) 2024 John H. Lienhard. Use under the MIT license: https://ctan.org/license/mit %% %% %% USAGE: * \begin{widetext} ...wide material here... \end{widetext} @@ -15,8 +15,8 @@ \documentclass[nocopyright,nolists,pdf-a]{asmejour} %% This file's version and date are: - \def\AJwidetextversion{1.01} - \def\AJverdate{October 22, 2023} + \def\AJwidetextversion{1.02} + \def\AJverdate{July 24, 2024} % \usepackage{asmewide} \usepackage{lipsum}% Latin filler text (lipsum generates a message about 'unused global options' - this can be ignored) @@ -81,6 +81,8 @@ address = {New York}, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} +\PreprintString{PREPRINT} + \SetAuthorBlock{John H.\ Lienhard V}{% Fellow of ASME \\ Rohsenow Kendall Heat Transfer Laboratory, \\ diff --git a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf Binary files differindex 2eb2bb0a71..da0dc2cbdb 100644 --- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf +++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.pdf diff --git a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex index 701df1e896..f3d21083b3 100644 --- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex +++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex @@ -120,7 +120,7 @@ \title{Mode d’emploi du module \ext{babel-french}} \author{\href{mailto:daniel.flipo@free.fr}{Daniel \textsc{Flipo}}} -\newcommand*{\latestversion}{3.6b} +\newcommand*{\latestversion}{3.6c} \date{Version {\latestversion} -- \today} \begin{document} diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.dtx b/macros/latex/contrib/babel-contrib/french/frenchb.dtx index 1ec34d6f5b..b52e5c67e7 100644 --- a/macros/latex/contrib/babel-contrib/french/frenchb.dtx +++ b/macros/latex/contrib/babel-contrib/french/frenchb.dtx @@ -75,7 +75,7 @@ Please report errors to: <daniel (dot) flipo (at) free (dot) fr> %<frenchb>\ProvidesLanguage{frenchb} %<lua>--[[ %<lua> File `frenchb.lua’ generated from frenchb.dtx - [2024-06-26 v3.6b French support from the babel system] + [2024-07-25 v3.6c French support from the babel system] %<lua> Copyright © 2014-2024 Daniel Flipo %<lua> <daniel (dot) flipo (at) free (dot) fr> %<lua> License LPPL: see french.ldf. @@ -2782,7 +2782,7 @@ return french_punctuation % \changes{v3.2c}{2016/05/14}{New definition based on % \cs{FB@spacing@off} common to all engines.} % -% \changes{v3.6b}{2024/06/25}{\cs{NoAutoSpacing} must be inhibited +% \changes{v3.6b}{2024/06/26}{\cs{NoAutoSpacing} must be inhibited % in bookmarks.} % % \begin{macrocode} @@ -4582,6 +4582,10 @@ return french_punctuation \@onlypreamble\frenchbsetup % \end{macrocode} % +% \changes{v3.6c}{2024/07/25}{Removed spurious @ in +% \cs{FBCompactItemize@setup} and \cs{FBListOldLayout@setup} +% commands’ names.} +% % The following commands, defined with property |.code| in % |DeclareKeys{}|, execute some post-treatment required to % immediately take the flags value into account. @@ -4623,14 +4627,14 @@ return french_punctuation Reported}% \fi } -\newcommand*{\FB@ListOldLayout@setup}[1]% +\newcommand*{\FBListOldLayout@setup}[1]% {\csname FBListOldLayout#1\endcsname \ifFBListOldLayout \FBStandardEnumerateEnvtrue \renewcommand*{\FrenchLabelItem}{\textendash}% \fi } -\newcommand*{\FB@CompactItemize@setup}[1]% +\newcommand*{\FBCompactItemize@setup}[1]% {\csname FBCompactItemize#1\endcsname \ifFBCompactItemize \FBStandardItemizeEnvfalse diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.pdf b/macros/latex/contrib/babel-contrib/french/frenchb.pdf Binary files differindex 44cf3388f2..7e4ce7735b 100644 --- a/macros/latex/contrib/babel-contrib/french/frenchb.pdf +++ b/macros/latex/contrib/babel-contrib/french/frenchb.pdf diff --git a/macros/latex/contrib/bib2qr/README.md b/macros/latex/contrib/bib2qr/README.md new file mode 100644 index 0000000000..9f7bb900a1 --- /dev/null +++ b/macros/latex/contrib/bib2qr/README.md @@ -0,0 +1,88 @@ +# bib2qr + +[![License](https://img.shields.io/ctan/l/bib2qr?color=blue)](https://www.latex-project.org/lppl/lppl-1-3c.txt) +[![Latest release](https://img.shields.io/gitea/v/release/Cs137/bib2qr?gitea_url=https%3A%2F%2Fcodeberg.org%2F)](https://codeberg.org/Cs137/bib2qr/releases/latest) +[![CTAN](https://img.shields.io/ctan/v/bib2qr.svg)](https://ctan.org/pkg/bib2qr) + +A LaTeX package for citing BibTeX entries with QR codes. + +The `bib2qr` package provides functionality to cite BibTeX entries with QR codes +for easy sharing and referencing. The target of the QR code is the entry's DOI, +or URL if no DOI exists. A citation generated via `\qrfullcite`, which is part +of `bib2qr`, might look as follows: + +[![Example output generated with `\qrfullcite`](https://codeberg.org/Cs137/bib2qr/media/branch/main/example/qrfullcite_example.png "Example output generated with qrfullcite")](https://codeberg.org/Cs137/bib2qr/media/branch/main/example/qrfullcite_example.png) + + +## Installation + +Skip this section, if `bib2qr` is already provided in your TeX distribution. +You should be able to install it [from the CTAN](https://www.ctan.org/pkg/bib2qr) +via your distribution's utility (e.g. the TeX Live Utility). + +### Manual installation + +You can get the package's source code from the +[project repository on Codeberg](https://codeberg.org/Cs137/bib2qr). +The repository contains a build script, which allows you to build the required +files for the `bib2qr` package and copy them into your _TeX Directory Structure_ +(TDS) using `l3build`. Ensure that `l3build` is installed on your system and run +it from the repository's root directory as follows: + +```bash +l3build install --full +``` + +The `--full` option ensures that all necessary files are built and installed. + +If you do not want to install the package into your TDS, but use it in a +particular LaTeX project, follow the steps listed below. + +1. unpack `bib2qr.sty` from the `bib2qr.dtx` file + - using `l3build` and the `build.lua` script: `l3build unpack`, __or__ + - directly via the installer file: `pdflatex bib2qr.ins` +2. copy the extracted `bib2qr.sty` file into the same directory as your LaTeX sources. + + +## Usage + +Please consult the [package documentation](http://mirrors.ctan.org/macros/latex/contrib/bib2qr/bib2qr.pdf) +for detailed usage information. + +If you have any questions or need assistance, feel free to +[open an issue on the repository](https://codeberg.org/Cs137/bib2qr/issues). + + +## Changes + +All notable changes to this project are documented in the file +[`CHANGELOG.md`](https://codeberg.org/Cs137/bib2qr/src/branch/main/CHANGELOG.md). + + +## Contributing + +Contributions to the `bib2qr` package are very welcomed. Feel free to submit a +pull request, if you would like to contribute to the project. In case you are +unfamiliar with the process, consult the +[forgejo documentation](https://forgejo.org/docs/latest/user/pull-requests-and-git-flow/) +and follow the steps using this repository instead of the `example` repository. + +Create your [pull request (PR)](https://codeberg.org/Cs137/bib2qr/pulls) to +inform that you start working on a contribution. Provide a clear description +of your envisaged changes and the motivation behind them, prefix the PR's title +with ``WIP: `` until your changes are finalised. + +All kind of contributions are appreciated, whether they are +bug fixes, new features, or improvements to the documentation. + + +### Contributors + +- [Christian Schreinemachers](https://codeberg.org/Cs137) +- [Markus Kohm](https://codeberg.org/komascript) + + +--- + +This package was created and is maintained by Christian Schreinemachers, (C) 2024. + diff --git a/macros/latex/contrib/bib2qr/bib2qr.dtx b/macros/latex/contrib/bib2qr/bib2qr.dtx new file mode 100644 index 0000000000..980c2002c2 --- /dev/null +++ b/macros/latex/contrib/bib2qr/bib2qr.dtx @@ -0,0 +1,594 @@ +% \iffalse meta-comment +% +% Copyright (C) 2024 Christian Schreinemachers +% +% 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 of all distributions of LaTeX +% version 2008-05-04 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The current maintainer of this work is Christian Schreinemachers. +% +% This work consists of the files +% README.md +% bib2qr.dtx +% bib2qr.ins +% and the derived files +% bib2qr.sty +% bib2qr.pdf +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \fi +% \iffalse +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{bib2qr} +%<package> [2024-07-31 v0.2 Cite BibTeX entries with QR codes] +% +%<*driver> +\documentclass[a4paper]{ltxdoc} +\usepackage[T1]{fontenc} +\usepackage[toc]{multitoc} +\usepackage{geometry} +\usepackage{fancyvrb} +% Declare example reference entries +\begin{filecontents}[overwrite]{example-references.bib} + @software{bib2qr, + author = {Schreinemachers, Christian}, + title = {bib2qr - A LaTeX package for citing BibTeX entries with QR codes}, + url = {https://codeberg.org/Cs137/bib2qr/releases/tag/v0.2}, + version = {v0.2}, + date = {2024-07-31} + } + @article{Doe2024, + author = {Doe, Jane}, + title = {A comprehensive study on example generation}, + journal = {Journal of Examples}, + year = {2024}, + volume = {42}, + pages = {1982--2024}, + doi = {10.1234/example.2024.001} + } + @article{Mustermann2023, + author = {Mustermann, Erika}, + title = {Limitations in including electronic references in articles}, + journal = {Journal of Examples}, + year = {2023}, + volume = {23}, + pages = {624--666} + } +\end{filecontents} +\usepackage[style=authoryear,sorting=none]{biblatex} +\addbibresource{example-references.bib} +\usepackage[% + pdfusetitle,% + hyperindex=false,% + pdfsubject={LaTeX package documentation},% + pdfkeywords={bib2qr, biblatex, latex, qrcode, documentation}% +]{hyperref} +\usepackage{scrextend} +\usepackage{cleveref} +\usepackage[qrwidth=1.25cm]{bib2qr} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\DoNotIndex{\begin,\DeclareBibliographyDriver,\DeclareCiteCommand,\DeclareFieldFormat, + \DeclareKeys,\dimexpr,\edef,\end,\equal,\fullcite,\hspace,\IfBeginWith, + \ifboolexpr,\iffieldundef,\ifthenelse,\linewidth,\multicitedelim, + \NewDocumentCommand,\newcommand,\noindent,\par,\parindent,\printfield, + \ProcessKeyOptions,\qrcode,\RequirePackage,\relax,\SetKeys,\space, + \thefield,\usebibmacro,\usedriver} +\setcounter{IndexColumns}{2} +\setlength{\IndexMin}{40ex} +\setlength{\columnseprule}{.4pt} +\addtolength{\oddsidemargin}{2cm} +\addtolength{\textwidth}{-2cm} +\begin{document} + \DocInput{bib2qr.dtx} +\end{document} +%</driver> +% \fi +% +% \pagestyle{headings} +% +% \newcommand*{\package}[1]{\textsf{#1}} +% \newcommand*{\ctanpkg}[1]{\href{https://ctan.org/pkg/#1}{\package{#1}}} +% \newcommand*{\opt}[1]{\texttt{#1}} +% \newcommand*{\default}[1]{(default: \opt{#1})} +% +% +% ^^A ----------------------------- +% +% \changes{v0.2}{2024-07-31}{% +% Initial release, +% convert into dtx, +% add documentation, +% rename internal macros, +% add \opt{qrdelimiter} option +% } +% \changes{v0.1}{2024/06/16}{Initial version} +% +% \GetFileInfo{bib2qr.sty} +% +% +% ^^A ----------------------------- +% +% \title{The \package{bib2qr} package} +% \author{Christian Schreinemachers} +% \date{% +% Released \filedate\thanks{% +% \package{bib2qr}~\fileversion +% ~(\href{https://codeberg.org/Cs137/bib2qr/releases/tag/\fileversion}{source code})}% +% } +% \maketitle +% +% +% ^^A ----------------------------- +% +% \begingroup +% \hypersetup{ +% linkcolor=., +% citecolor=., +% urlcolor=., +% } +% \begin{abstract} +% The \package{bib2qr} package provides functionality to cite BibTeX entries +% with QR codes for easy sharing and referencing. The target of the QR code +% is the entry's digital object identifier (DOI), or URL if no DOI exists. +% It is realised in the \cs{qrcite} macro, via the \LaTeX{} packages +% \package{biblatex} and \package{qrcode}. In addition to the \cs{qrcite} +% command, the package contains the \cs{qrfullcite} macro, which requires +% only a BibTeX key as argument and allows to generate output that might +% look as follows:\\ +% \textcolor{red}{\qrfullcite[noindent]{bib2qr}} +% \end{abstract} +% \endgroup +% +% +% ^^A ----------------------------- +% +% \tableofcontents +% +% +% ^^A ----------------------------- +% +% \section{Introduction} +% ^^A +% I like to include \href{https://en.wikipedia.org/wiki/QR_code}{quick-response (QR) codes} +% of references on slides created with \LaTeX{} \ctanpkg{beamer}. Previously, +% I did this by using the \ctanpkg{qrcode} package and manually declaring the +% URL of the reference's digital object identifier (DOI). Occasionally, I also +% add human-readable information generated via \cs{fullcite} from the +% \ctanpkg{biblatex} package. +% +% To avoid manually declaring the URL and calling two separate commands for QR +% codes and human-readable citations, I developed this \LaTeX{} package. It +% automates the inclusion of QR codes by a \package{biblatex} bibliography +% driver\footnote{% +% \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=166} +% {\package{biblatex} documentation p.\,166 (v3.20)}% +% }, +% which uses field formats to display QR codes for the entry's \opt{doi} +% and \opt{url} fields with the \package{qrcode} package. You can cite any +% reference from your bibliography with this driver by declaring its \meta{key} +% to the \cs{qrcite} command. The latter is a cite command\footnote{% +% \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=186}% +% {\package{biblatex} documentation p.\,186 (v3.20)}% +% \label{biblatexCiteCommand}% +% }, +% which ensures that any referenced QR code is also listed in the reference list. +% +% For the inclusion of both, QR codes and human-readable citation information +% in a single step, I introduced the \cs{qrfullcite} command. It applies the +% \cs{qrcite} command and the \cs{fullcite} command from the \package{biblatex} +% package, ensuring clarity and ease of reference not only on \package{beamer} +% slides, but in any \LaTeX{} document. +% +% +% ^^A ----------------------------- +% +% \section{Usage} +% ^^A +% Load the package in your document's preamble and specify any of the +% options described in the next subsection as follows: +% +% \begin{quote} +% \cs{usepackage}\oarg{option(s)}\{bib2qr\} +% \end{quote} +% +% +% ^^A ----------------------------- +% +% \subsection{Options} +% ^^A +% In order to change the default behaviour of this package, declare one +% or more of the options described in this subsection with your desired +% value. +% +% \begin{description} +% +% \item[\opt{doiurlbase=\meta{string}}] \default{https://doi.org/} +% specifies the prefix to convert a DOI string into its URL. If the DOI +% string starts with \meta{doiurlbase}, it is used as is to generate a +% QR code. Otherwise, the DOI string is appended to \meta{doiurlbase} to +% form the DOI's URL, which is then used to generate the QR code. +% In normal use cases this option does not require any adjustment. +% +% \item[\opt{qrdelimiter=\meta{sepcode}}] \default{\cs{space}} +% specifies the delimiter of QR codes generated by \cs{qrcite} in multicite +% mode. It is shown between the individual QR codes of multiple references +% created by \cs{qrcite}\marg{key1,key2,\dots keyN} and \emph{``\dots is +% arbitrary code to be executed after each iteration...''}\,\footref{biblatexCiteCommand}. +% The examples shown in this document were generated considering the +% default \opt{qrdelimiter}. +% +% \item[\opt{qrversion=\meta{version specification}}] \default{0} +% sets the version of the QR code. Consult the \package{qrcode} documentation +% for details about the \meta{version specification}\footnote{% +% \href{http://mirrors.ctan.org/macros/latex/contrib/qrcode/qrcode.pdf\#page=3} +% {\package{qrcode} documentation p.\,3 (v1.51)}% +% }. +% The examples shown in this document were generated considering the +% default \opt{qrversion}. +% +% \item[\opt{qrwidth=\meta{dimen}}] \default{2cm} +% sets the width of the QR code. The value is used to determine the +% width for the output of the \cs{fullcite} macro and is passed to +% \package{qrcode} as \opt{height} option. The default value is quite +% suitable for usage in \LaTeX{} \package{beamer} slides, but in such +% documents as this one, a smaller width might be desired. The examples +% shown in this document were generated using \opt{qrwidth=1.25cm}. +% +% \end{description} +% +% +% ^^A ----------------------------- +% +% \subsection{Macros} +% ^^A +% \subsubsection*{\cs{qrcite}\marg{key(s)}} +% +% \DescribeMacro{\qrcite} +% QR code(s) with a link to the reference's DOI or URL can be generated +% using the \cs{qrcite} command. The target of the QR code is the entry's +% DOI converted into a URL, or the URL iteself. In case the BibTeX entry has +% no DOI and no URL, it does nothing besides raising a warning. +% ^^A +% The output for some example entries is shown underneath. If you +% would like to replicate the examples, you can find the entries +% sources as \cref{ssec:example_bib}. The colours are defined in the +% examples, as this functionality is out of scope of the package +% \package{bib2qr}. Moreover, \package{hyperlink} is configured in such +% a way that the links in the following examples consider the font colour, +% usually links would be presented in the colour defined as \opt{linkcolor}. +% +% The example displayed in blue was created via \textcolor{blue}{% +% \cs{qrcite\{bib2qr\}}}. The QR code in red next to it was generated +% via \textcolor{red}{\cs{qrcite\{Doe2024\}}}. The entry of the latter has a +% DOI, while the entry of the blue example represents a BibTeX entry without +% a DOI, but there is a value assigned to its URL field. +% ^^A +% The macro \cs{qrcite} is a cite command, thus it can be used to cite multiple +% references, as shown in black (\cs{qrcite\{bib2qr,Doe2024\}}), and entries +% cited via \cs{qrcite} are included in the document's bibliography +% (cf. \cref{ssec:example_ref}). +% +% \begingroup +% \hypersetup{ +% linkcolor=., +% citecolor=., +% urlcolor=., +% } +% +% \par\smallskip% +% \noindent% +% \textcolor{blue}{\qrcite{bib2qr}} +% \textcolor{red}{\qrcite{Doe2024}} +% \qrcite{bib2qr,Doe2024} +% \par\medskip% +% +% \subsubsection*{\cs{qrfullcite}\marg{key}} +% +% \DescribeMacro{\qrfullcite} +% This command displays the QR code of a BibTeX entry's DOI link or URL and +% a full citation. The QR code is generated by \cs{qrcite} and the full +% citation by \cs{fullcite}, provided by the package \package{biblatex}. +% Each output is presented in individual minipages which are placed next to +% each other, as shown in the examples underneath +% (\textcolor{blue}{\cs{qrfullcite\{bib2qr\}}}, +% \textcolor{red}{\cs{qrfullcite[noindent]\{Doe2024\}}}). +% +% Please note that \cs{qrfullcite} does \textbf{not} support group +% citations and accepts only a single \meta{key} as argument. +% +% \textcolor{blue}{\qrfullcite{bib2qr}}% +% \medskip% +% \textcolor{red}{\qrfullcite[noindent]{Doe2024}}% +% \medskip% +% \endgroup +% +% The output of \cs{qrfullcite} is considered as its own paragraph, thus it +% may be indented, like in this document (see blue example). You can prevent +% the latter by providing the \opt{noindent} option when calling the macro, +% as done in the red example. +% +% The first minipage has the width of the package option \opt{qrwidth} +% and displays the output of \cs{qrcite}\marg{key}. The second minipage +% occupies the remaining width of \cs{linewidth} considering a gap of +% \opt{0.5em} and \cs{parindent}, if the latter is not deactivated via the +% \opt{noindent} option. It shows the output of \cs{fullcite}\marg{key}. +% +% +% ^^A ----------------------------- +% +% \subsection{Hints} +% ^^A +% If the \package{hyperref} package is loaded, not only the DOI/URL strings, +% but also the QR codes are presented as links. It was modified in this +% document to allow you to distinguish the output of the individual macro calls +% in a better way. The previous example without any modifications of the +% document settings and without deactivating the indentation looks as follows:\\ +% +% \qrfullcite{Doe2024}% +% +% +% ^^A ----------------------------- +% +% \subsection{Known limitations} +% ^^A +% In case no QR code can be generated by \cs{qrcite} called via \cs{qrfullcite}, +% the output of \cs{fullcite} is nevertheless indented by the width assigned to +% the \opt{qrwidth} package option and the length of the gap of \opt{0.5em}), +% as shown in orange below (\textcolor{orange}{\cs{qrcite\{Mustermann2023\}}}). +% +% \textcolor{orange}{\qrfullcite{Mustermann2023}}% +% +% +% ^^A ----------------------------- +% +% \MaybeStop{ +% +% \IndexPrologue{% +% \section{Index} +% Numbers written in italic refer to the page where the corresponding entry +% is described; numbers underlined refer to the code line of the definition; +% numbers in roman refer to the code lines where the entry is used. +% } +% \PrintIndex +% +% \GlossaryPrologue{% +% \section{Change History} +% The changes listed in this section aim to provide a brief overview of the +% changes introduced into the package \package{bib2qr}. The +% \href{https://codeberg.org/Cs137/bib2qr/}{package repository on Codeberg} +% contains a +% \href{https://codeberg.org/Cs137/bib2qr/src/branch/main/CHANGELOG.md}{changelog file}, +% consult it to read a detailed description of the changes introduced into +% this package. +% } +% \PrintChanges +% +% ^^A ----------------------------- +% +% \newpage +% \appendix +% +% \section{Appendix} +% +% The examples presented in this document are based on the +% BibTeX entries listed in \ref{ssec:example_bib} and result +% in the bibliography shown as \ref{ssec:example_ref} (\package{biblatex} +% options: \opt{style=authoryear}, \opt{sorting=none}). +% +% \subsection{Example BibTeX entries} +% \label{ssec:example_bib} +% \small{% +% \VerbatimInput[firstline=5]{example-references.bib} +% } +% +% \subsection{Example bibliography} +% \label{ssec:example_ref} +% \printbibliography[heading=none] +% +% } +% +% +% ^^A ----------------------------- +% +% \section{Implementation} +% ^^A +% +% \subsection{Dependencies} +% ^^A +% In order to use \package{bib2qr}, the \LaTeX{} packages +% \ctanpkg{biblatex}, +% \ctanpkg{ifthen}, +% \ctanpkg{qrcode}, and +% \ctanpkg{xstring} +% are required as package dependencies. +% \iffalse +%<*package> +% \fi +% \begin{macrocode} +\RequirePackage{biblatex} +\RequirePackage{ifthen} +\RequirePackage{qrcode} +\RequirePackage{xstring} +% \end{macrocode} +% +% +% \subsection{Options} +% ^^A +% The package options are internally available as \cs{@bibiiqr@}\meta{option}. +% \begin{macrocode} +\DeclareKeys[@bibiiqr]{ + doiurlbase.store = \@bibiiqr@doiurlbase, + doiurlbase.usage = load, + qrdelimiter.store = \@bibiiqr@qrdelimiter, + qrdelimiter.usage = load, + qrversion.store = \@bibiiqr@qrversion, + qrversion.usage = load, + qrwidth.store = \@bibiiqr@qrwidth, + qrwidth.usage = load, +}% +% \end{macrocode} +% +% \subsubsection*{Assignement of default values} +% \begin{macrocode} +\SetKeys[@bibiiqr]{ + doiurlbase=https://doi.org/, + qrdelimiter=\space, + qrversion=0, + qrwidth=2cm, +}% +% \end{macrocode} +% +% \subsubsection*{Processing of package options} +% \begin{macrocode} +\ProcessKeyOptions[@bibiiqr]\relax +% \end{macrocode} +% +% \subsection{Macros} +% +% \begin{macro}{\@bibiiqr@showqr} +% \marg{string}\\ +% Display a string as QR code considering the package options \opt{qrversion} +% and \opt{qrwidth}. +% \begin{macrocode} +\newcommand\@bibiiqr@showqr[1]{% + \qrcode[height=\@bibiiqr@qrwidth,version=\@bibiiqr@qrversion]{#1}% +}% +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Field formats} +% +% Custom field formats are defined to display a QR code of an entry's +% \texttt{doi} and \texttt{url}. +% +% \begin{macro}{@bibiiqr@fldFmtDoi} +% Field format to display a DOI field's value (converted into an URL +% considering the option \opt{@bibiiqr@doiurlbase}) as QR code using +% macro \cs{@bibiiqr@showqr}. +% \begin{macrocode} +\DeclareFieldFormat{@bibiiqr@fldFmtDoi}{% + \IfBeginWith{#1}{\@bibiiqr@doiurlbase}% + {\@bibiiqr@showqr{#1}}% + {\@bibiiqr@showqr{\@bibiiqr@doiurlbase#1}}% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{@bibiiqr@fldFmtUrl} +% Field format to display an URL field's value as QR code using \cs{@bibiiqr@showqr}. +% \begin{macrocode} +\DeclareFieldFormat{@bibiiqr@fldFmtUrl}{\@bibiiqr@showqr{#1}} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Bibliography driver} +% +% \begin{macro}{@bibiiqr@bibDrvQR} +% This bibliography driver +% allows to display the QR code of an entry's DOI-, or URL field. +% It applies the \cs{printfield}\oarg{format}\marg{field} macro, which is +% provided by the \package{biblatex} package to displpay a QR code using the +% \texttt{@bibiiqr@fldFmtDoi} or \texttt{@bibiiqr@fldFmtUrl} field format and +% the corresponding field, respectively. +% +% The DOI is preferred and the URL is only used if no value is assigned to +% the DOI field. If neither the DOI, nor the URL field contains a value, a +% package warning is raised. +% +% \begin{macrocode} +\DeclareBibliographyDriver{@bibiiqr@bibDrvQR}{% + \usebibmacro{begentry}% + \ifboolexpr{test{\iffieldundef{doi}}} + {% + \ifboolexpr{test{\iffieldundef{url}}}% +% \end{macrocode} +% The entry has no DOI and no URL: Raise a warning. +% \begin{macrocode} + {% + \PackageWarning{bib2qr}% + {BibTeX entry without DOI or URL: \thefield{entrykey}}{}% + }% +% \end{macrocode} +% The entry has no DOI but an URL: Display the \texttt{url} field's +% value using the \texttt{@bibiiqr@fldFmtUrl} field format. +% \begin{macrocode} + {\printfield[@bibiiqr@fldFmtUrl]{url}}% + }% +% \end{macrocode} +% The entry has a DOI: Display the \texttt{doi} field's value using +% the \texttt{@bibiiqr@fldFmtDoi} field format. +% \begin{macrocode} + {\printfield[@bibiiqr@fldFmtDoi]{doi}}% + \usebibmacro{finentry}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Author commands} +% +% \begin{macro}{\qrcite} +% \marg{key(s)}\\ +% Display the QR code of a BibTeX entry's DOI link or URL by introducing the +% cite command \cs{qrcite}\marg{key}, which makes use of the previously +% defined bibliography driver \texttt{@bibiiqr@bibDrvQR}. It requires at least +% one BibTeX \marg{key} as argument. +% \begin{macrocode} +\DeclareCiteCommand{\qrcite} + {\usebibmacro{prenote}}% + {\usedriver{}{@bibiiqr@bibDrvQR}}% + {\@bibiiqr@qrdelimiter}% + {\usebibmacro{postnote}}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\qrfullcite} +% \changes{v0.2}{2024-07-31}{Add \opt{noindent} option} +% \oarg{option(s)}\marg{key}\\ +% Display the QR code of a singe BibTeX entry's DOI link or URL and a full +% citation of it. Specify \opt{noindent} as option, if the output should not +% be indented. +% \begin{macrocode} +\NewDocumentCommand{\qrfullcite}{O{}m}{% + \par% + \ifthenelse{\equal{#1}{noindent}}{% + \noindent% + \edef\@bibiiqr@mpiiwidth{\dimexpr\linewidth-\@bibiiqr@qrwidth-0.5em}% + }{% + \edef\@bibiiqr@mpiiwidth{% + \dimexpr\linewidth-\parindent-\@bibiiqr@qrwidth-0.5em}% + }% + \begin{minipage}[t]{\@bibiiqr@qrwidth} + \qrcite{#2}% + \end{minipage} + \hspace{0.5em}% + \begin{minipage}{\@bibiiqr@mpiiwidth} + \fullcite{#2}% + \end{minipage} + \par% +}% +% \end{macrocode} +% \end{macro} +% +% \iffalse +%</package> +% \fi +% +% +% ^^A ----------------------------- +% +% \Finale + diff --git a/macros/latex/contrib/bib2qr/bib2qr.ins b/macros/latex/contrib/bib2qr/bib2qr.ins new file mode 100644 index 0000000000..7894fdb8e3 --- /dev/null +++ b/macros/latex/contrib/bib2qr/bib2qr.ins @@ -0,0 +1,85 @@ +%% +%% Copyright (C) 2024 Christian Schreinemachers +%% +%% 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 of all distributions of +%% LaTeX version 2008-05-04 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The current maintainer of this work is Christian Schreinemachers. +%% +%% This work consists of the files +%% README.md +%% bib2qr.dtx +%% bib2qr.ins +%% and the derived files +%% bib2qr.sty +%% bib2qr.pdf +%% +This work has the LPPL maintenance status `maintained'. + +The current maintainer of this work is Christian Schreinemachers. + +This work consists of the files + README.md + bib2qr.dtx + bib2qr.ins +and the derived files + bib2qr.sty + bib2qr.pdf +\input docstrip.tex +\keepsilent + +\preamble + +Copyright (C) 2024 Christian Schreinemachers + +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 of all distributions of LaTeX +version 2008-05-04 or later. + +This work has the LPPL maintenance status `maintained'. + +The current maintainer of this work is + Christian Schreinemachers. + +This work consists of the files + bib2qr.dtx + bib2qr.ins +and the derived files + bib2qr.sty + bib2qr.pdf + +\endpreamble +\askforoverwritefalse +\generate{\file{bib2qr.sty}{\from{bib2qr.dtx}{package}}} + +\obeyspaces +\Msg{****************************************************} +\Msg{* To finish the installation you have to move the *} +\Msg{* following file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* bib2qr.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file *} +\Msg{* bib2qr.dtx through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{****************************************************} +\endbatchfile +%% +%% End of file `bib2qr.ins'. + diff --git a/macros/latex/contrib/bib2qr/bib2qr.pdf b/macros/latex/contrib/bib2qr/bib2qr.pdf Binary files differnew file mode 100644 index 0000000000..fb3800eadf --- /dev/null +++ b/macros/latex/contrib/bib2qr/bib2qr.pdf diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.pdf Binary files differindex a833b32d26..43c1b53163 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.pdf +++ b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.pdf diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.tex b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.tex index 142cfe3d76..a089f090f7 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.tex +++ b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee-alphabetic.tex @@ -2,7 +2,7 @@ %% biblatex-ieee --- A biblatex implementation of the IEEE %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- @@ -21,11 +21,11 @@ \addbibresource{biblatex-ieee.bib} \author{Joseph Wright\thanks{E-mail: - \href{mailto:joseph.wright@morningstar2.co.uk} - {\texttt{joseph.wright@morningstar2.co.uk}}}} + \href{mailto:joseph@texdev.net} + {\texttt{joseph@texdev.net}}}} \title{The \pkg{ieee-alphabetic} bibliography style for \pkg{biblatex}% - \footnote{This file describes v1.3f, last revised 2021/12/06.}} -\date{Released 2021/12/06} + \footnote{This file describes v1.3g, last revised 2024/08/14.}} +\date{Released 2024/08/14} \providecommand*{\pkg}[1]{\textsf{#1}} @@ -55,8 +55,8 @@ of example citations. \end{document} %% -%% Copyright (C) 2011-2013,2015-2021 by -%% Joseph Wright <joseph.wright@morningstar2.co.uk> +%% Copyright (C) 2011-2013,2015-2021,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.bib b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.bib index 733dac91e1..c002a48e2c 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.bib +++ b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.bib @@ -2,7 +2,7 @@ %% biblatex-ieee --- A biblatex implementation of the IEEE %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright at morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- @@ -168,7 +168,7 @@ title = "Modified {TCP} Congestion Avoidance Algorithm", howpublished = "end2end-interest mailing list", url = "ftp://ftp.isi.edu/end2end/end2end-interest-1990.mail", - year = "1990-04" + urldate = "1990-04" } @@ -249,7 +249,7 @@ institution = "Dept. Elect. Eng., Technion", location = "Haifa, Israel", url = "ftp://ftp.technion.ac.il/pub/supported/ee/Network/lor.mopq98.ps", - year = "1998-07" + urldate = "1998-07" } @book{IEEEexample:book, @@ -350,7 +350,7 @@ title = "Cache Array Routing Protocol v1.1", howpublished = "Internet draft", url = "http://ds1.internic.net/internet-drafts/draft-vinod-carp-v1-03.txt", - year = "1998" + urldate = "1998" } @inproceedings{IEEEexample:confwithpaper, @@ -386,8 +386,8 @@ } %% -%% Copyright (C) 2011-2013,2015-2020 by -%% Joseph Wright <joseph.wright at morningstar2.co.uk> +%% Copyright (C) 2011-2013,2015-2020,2024 by +%% Joseph Wright <joseph@texev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.pdf Binary files differindex c5f85504c6..a16e292683 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.pdf +++ b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.pdf diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.tex b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.tex index 734250debf..0a6ec934e4 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.tex +++ b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/biblatex-ieee.tex @@ -2,7 +2,7 @@ %% biblatex-ieee --- A biblatex implementation of the IEEE %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- @@ -21,11 +21,11 @@ \addbibresource{biblatex-ieee.bib} \author{Joseph Wright\thanks{E-mail: - \href{mailto:joseph.wright@morningstar2.co.uk} - {\texttt{joseph.wright@morningstar2.co.uk}}}} + \href{mailto:joseph@texdev.net} + {\texttt{joseph@texdev.net}}}} \title{The \pkg{ieee} bibliography style for \pkg{biblatex}% - \footnote{This file describes v1.3f, last revised 2021/12/06.}} -\date{Released 2021/12/06} + \footnote{This file describes v1.3g, last revised 2024/08/14.}} +\date{Released 2024/08/14} \providecommand*{\opt}[1]{\texttt{#1}} \providecommand*{\pkg}[1]{\textsf{#1}} @@ -61,6 +61,19 @@ The style adds the \opt{dashed} option to those recognised: as-standard, this is activated. The option works in the same way as that from the core \pkg{biblatex} style \pkg{author-year}. +As-standard, citations are compressed. If you do no wish to have compressed +citations, add +\begin{verbatim} +\DeclareCiteCommand{\cite} + {\bibopenbracket\usebibmacro{prenote}} + {\usebibmacro{citeindex}% + \usebibmacro{cite}} + {\multicitedelim} + {\usebibmacro{postnote}\bibclosebracket} +\renewcommand*\multicitedelim{\bibclosebracket\addcomma \space\bibopenbracket} +\end{verbatim} +after loading \pkg{biblatex}. + The appearance of URLs in the bibliography is set by the mechanism of the \textsf{url} package. Thus to print URLs in the current roman font, place the instruction @@ -73,7 +86,9 @@ immediately before \end{verbatim} Control of the exact information in dates is best achieved by using the -\cs{AtEveryCite} command with appropriate data manipulation. +\cs{AtEveryCite} command with appropriate data manipulation. In particular, +if your database includes full dates, you will likely want to drop these +for most periodicals using \cs{clearfield} Also include in the bundle is a style using alphabetic labels, but otherwise following the guidelines of the \textsc{ieee}. This style should be loaded @@ -88,8 +103,8 @@ Suggestions for improvement and bug reports can be logged in the package issue database, found at \url{https://github.com/josephwright/biblatex-ieee/issues/}, or can be sent by e-mail to -\href{mailto:joseph.wright@morningstar2.co.uk} - {\texttt{joseph.wright@morningstar2.co.uk}}. +\href{mailto:joseph@texdev.net} + {\texttt{joseph@texdev.net}}. \nocite{*} \printbibliography @@ -149,14 +164,16 @@ be sent by e-mail to \changes{v1.3f}{2021/03/30}{Use \texttt{false} as the default for \texttt{dashed} setting} \changes{v1.3f}{2021/04/12}{Fix brackets in \cs{supercite}} \changes{v1.3f}{2021/12/01}{Adjust printing of series for books} +\changes{v1.3g}{2024/08/14}{Print separator between journal title and subtitle} +\changes{v1.3g}{2024/08/14}{Correct formatting of URL for online entries} \PrintChanges \end{document} %% -%% Copyright (C) 2011-2013,2015-2021 by -%% Joseph Wright <joseph.wright@morningstar2.co.uk> +%% Copyright (C) 2011-2013,2015-2021,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.bbx index ff82f97f55..8f4e1bea05 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.bbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.bbx @@ -2,13 +2,13 @@ %% biblatex-ieee --- A biblatex implementation of the IEEE %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- %% -\ProvidesFile{ieee-alphabetic.bbx}[2021/12/06 v1.3f biblatex bibliography style] +\ProvidesFile{ieee-alphabetic.bbx}[2024/08/14 v1.3g biblatex bibliography style] \RequireBibliographyStyle{ieee} @@ -53,8 +53,8 @@ {\item} %% -%% Copyright (C) 2011-2013,2015-2021 by -%% Joseph Wright <joseph.wright@morningstar2.co.uk> +%% Copyright (C) 2011-2013,2015-2021,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.cbx index 302517b02e..d28449741b 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.cbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee-alphabetic.cbx @@ -2,13 +2,13 @@ %% biblatex-ieee --- A biblatex implementation of the IEEE %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- %% -\ProvidesFile{ieee-alphabetic.cbx}[2021/12/06 v1.3f biblatex citation style] +\ProvidesFile{ieee-alphabetic.cbx}[2024/08/14 v1.3g biblatex citation style] \RequireCitationStyle{alphabetic} @@ -45,8 +45,8 @@ } %% -%% Copyright (C) 2011-2013,2015-2021 by -%% Joseph Wright <joseph.wright@morningstar2.co.uk> +%% Copyright (C) 2011-2013,2015-2021,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.bbx index 77a8b6794d..088064d1f3 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.bbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.bbx @@ -2,13 +2,13 @@ %% biblatex-ieee --- A biblatex implementation of the IEEE %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- %% -\ProvidesFile{ieee.bbx}[2021/12/06 v1.3f biblatex bibliography style] +\ProvidesFile{ieee.bbx}[2024/08/14 v1.3g biblatex bibliography style] % Load the standard style to avoid copy-pasting unnecessary material \RequireBibliographyStyle{numeric-comp} @@ -30,6 +30,7 @@ maxbibnames = 6, sorting = none, dashed = false, + urldate = long, } \uspunctuation @@ -50,6 +51,7 @@ {\bibstring{jourser}\addnbspace#1} \DeclareFieldFormat[online,report]{title}{\mkbibquote{#1\isdot}} \DeclareFieldFormat{url}{\bibstring{url}\addcolon\space\url{#1}} +\DeclareFieldFormat{urldate}{\bibstring{urlseen}\space#1} \DeclareFieldFormat*{volume} {\bibstring{volume}\addnbspace#1} \DeclareFieldFormat[article,periodical]{volume} @@ -76,6 +78,7 @@ presentedat = presented at the\addspace , techreport = Tech\adddot\addspace Rep\adddot , url = [Online]\adddot\addspace Available , + urlseen = Accessed\addcolon } \DefineBibliographyStrings{english}{ @@ -210,6 +213,7 @@ {% \printtext[journaltitle]{% \printfield[titlecase]{journaltitle}% + \setunit{\subtitlepunct}% \printfield[titlecase]{journalsubtitle}% }% }% @@ -331,6 +335,17 @@ \printfield{titleaddon}% } +\renewbibmacro*{url+urldate}{% + \usebibmacro{urldate}% + \setunit{\adddot\space}% + \usebibmacro{url}% +} + +\renewbibmacro*{urldate}{% + \printurldate + \newunit + } + \renewbibmacro*{volume+number+eid}{% \printfield{volume}% \newunit @@ -713,7 +728,6 @@ {\usebibmacro{eprint}} {}% \setunit{\adddot\addspace}% - \printtext[parens]{\usebibmacro{date}}% \newunit\newblock \usebibmacro{url+urldate}% \setunit{\adddot\addspace}% @@ -802,8 +816,8 @@ \usebibmacro{finentry}} %% -%% Copyright (C) 2011-2013,2015-2021 by -%% Joseph Wright <joseph.wright@morningstar2.co.uk> +%% Copyright (C) 2011-2013,2015-2021,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.cbx index 877d645053..4b1886683f 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.cbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/ieee.cbx @@ -2,19 +2,19 @@ %% biblatex-ieee --- A biblatex implementation of the IEEE %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- %% -\ProvidesFile{ieee.cbx}[2021/12/06 v1.3f biblatex citation style] +\ProvidesFile{ieee.cbx}[2024/08/14 v1.3g biblatex citation style] \RequireCitationStyle{numeric-comp} \ExecuteBibliographyOptions{ - maxcitenames = 3, - minnames = 3, + maxcitenames = 2, + minnames = 1, sorting = none } @@ -122,8 +122,8 @@ {}}} %% -%% Copyright (C) 2011-2013,2015-2021 by -%% Joseph Wright <joseph.wright@morningstar2.co.uk> +%% Copyright (C) 2011-2013,2015-2021,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/magyar-ieee.lbx b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/magyar-ieee.lbx index 79ffd21ce9..33e88122fd 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-ieee/magyar-ieee.lbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-ieee/magyar-ieee.lbx @@ -2,7 +2,7 @@ %% biblatex-ieee --- A biblatex implementation of the IEEE %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright at morningstar2.co.uk +%% E-mail: jsoeph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- @@ -34,8 +34,8 @@ } %% -%% Copyright (C) 2011-2013,2015-2020 by -%% Joseph Wright <joseph.wright at morningstar2.co.uk> +%% Copyright (C) 2011-2013,2015-2020,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.bib b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.bib index 3f6af13bdd..6f0f9b5281 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.bib +++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.bib @@ -71,20 +71,20 @@ issue = {25}, pages = {254504}, year = {2008}, - month = {Jun}, + month = jun, publisher = {American Physical Society}, doi = {10.1103/PhysRevLett.100.254504}, } @Book{Augustine1995, hyphenation = {american}, - author = {Augustine, Robert L.}, + author = {Augustine, Robert L.}, title = {Heterogeneous Catalysis for the Synthetic Chemist}, shorttitle = {Heterogeneous catalysis}, publisher = {Marcel Dekker}, location = {New York}, - date = {1995}, + date = {1995}, } @Article{Booth1962, diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.pdf Binary files differindex 16758e75a7..e7e9e05d58 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.pdf +++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.pdf diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.tex b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.tex index 89550aed25..7224b722af 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.tex +++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/biblatex-phys.tex @@ -2,7 +2,7 @@ %% biblatex-phys --- A biblatex implementation of the AIP and APS %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- @@ -21,12 +21,12 @@ \addbibresource{biblatex-phys.bib} \author{Joseph Wright\thanks{E-mail: - \href{mailto:joseph.wright@morningstar2.co.uk} - {\texttt{joseph.wright@morningstar2.co.uk}}}} + \href{mailto:joseph@texdev.net} + {\texttt{joseph@texdev.net}}}} \title{\pkg{biblatex-phys} -- A \pkg{biblatex} implementation of the \textsc{aip} and \textsc{aps} bibliography style% - \footnote{This file describes v1.1b, last revised 2019/12/03.}} -\date{Released 2019/12/03} + \footnote{This file describes v1.1c, last revised 2024/07/26.}} +\date{Released 2024/07/26} \providecommand*{\opt}[1]{\texttt{#1}} \providecommand*{\pkg}[1]{\textsf{#1}} @@ -49,12 +49,12 @@ in the usual way \end{verbatim} Load-time options are provided to deal with the small number of variations between the \textsc{aip} and \textsc{aps} styles. -The References section of this document demonstrates the format +The References section of this document demonstrates the format generated by the package using the \texttt{biblatex-phys.bib} database of example citations. The styles use the standard \pkg{biblatex} database requirements. This means -that a database designed for traditional \pkg{biblatex} use may need some +that a database designed for traditional \BibTeX{} use may need some editing for optimal output. The accompanying example database \texttt{biblatex-phys.bib} shows examples of all of the supported entry types with common fields filled in. @@ -69,13 +69,13 @@ seen between the \textsc{aip} and \textsc{aps} styles. \DescribeOption{eprint} \DescribeOption{isbn} \DescribeOption{url} -The standard style options \opt{doi}, \opt{eprint} \opt{isbn} and -\opt{eprint}, as described in the \pkg{biblatex} manual. However, these +The standard style options \opt{doi}, \opt{eprint}, \opt{isbn} and +\opt{url}, as described in the \pkg{biblatex} manual. However, these options are turned off as standard by the \pkg{phys} style. This reflects the fact that these entries may be present in reference databases but are not generally included in published bibliographies. Note that \textsc{doi} values -are printed for journal articles with no pages given, even if the \opt{doi} -option is \opt{false}. +are printed for journal articles with no pages or eid given, even if the +\opt{doi} option is \opt{false}. \DescribeOption{subentry} In common with the standard \pkg{biblatex} numeric styles, all of the styles @@ -93,7 +93,7 @@ patents, which are treated in the same way.) \DescribeOption{biblabel} The format of the numbers used in the bibliography (the \enquote{bibliography -label}) varies. he \opt{biblabel} option allows the user to easily set the +label}) varies. The \opt{biblabel} option allows the user to easily set the format used. This option takes a values \opt{superscript} (the standard setting) and \opt{brackets}. @@ -146,7 +146,7 @@ command may be used to alter this, either for the whole document or only for the bibliography, for example by using \begin{verbatim} \AtBeginBibliography{% - \urlstyle{rm}% + \urlstyle{same}% } \end{verbatim} @@ -164,8 +164,8 @@ Suggestions for improvement and bug reports can be logged in the package issue database, found at \url{https://github.com/josephwright/biblatex-phys/issues}, or can be sent by e-mail to -\href{mailto:joseph.wright@morningstar2.co.uk} - {\texttt{joseph.wright@morningstar2.co.uk}}. +\href{mailto:joseph@texdev.net} + {\texttt{joseph@texdev.net}}. \nocite{*} @@ -208,8 +208,8 @@ be sent by e-mail to \end{document} %% -%% Copyright (C) 2012-2014,2016,2018,2019 by -%% Joseph Wright <joseph.wright@morningstar2.co.uk> +%% Copyright (C) 2012-2014,2016,2018-2020,2022,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.bbx index 442f4feae5..336f90e547 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.bbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.bbx @@ -2,13 +2,13 @@ %% biblatex-phys --- A biblatex implementation of the AIP and APS %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- %% -\ProvidesFile{phys.bbx}[2019/12/03 v1.1b biblatex bibliography style] +\ProvidesFile{phys.bbx}[2024/07/26 v1.1c biblatex bibliography style] % Load the standard style to avoid copy-pasting unnecessary material \RequireBibliographyStyle{numeric-comp} @@ -464,14 +464,15 @@ \printfield{pages}% \iffieldundef{pages} {% - \printfield{doi}% - \clearfield{doi}% - }% - {% - \iftoggle{bbx:doi} - {} - {\clearfield{doi}}% - }% + \iffieldundef{eid} + {% + \iftoggle{bbx:doi} + {} + {\printfield{doi}}% + } + {}% + } + {}% } \newbibmacro*{related:translatedas}[1]{% @@ -495,8 +496,8 @@ %% -%% Copyright (C) 2012-2014,2016,2018,2019 by -%% Joseph Wright <joseph.wright@morningstar2.co.uk> +%% Copyright (C) 2012-2014,2016,2018-2020,2023,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.cbx b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.cbx index 7758bc0a2b..4452bd7113 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.cbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.cbx @@ -2,13 +2,13 @@ %% biblatex-phys --- A biblatex implementation of the AIP and APS %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- %% -\ProvidesFile{phys.cbx}[2019/12/03 v1.1b biblatex citation style] +\ProvidesFile{phys.cbx}[2024/07/26 v1.1c biblatex citation style] \RequireCitationStyle{numeric-comp} @@ -20,8 +20,8 @@ } %% -%% Copyright (C) 2012-2014,2016,2018,2019 by -%% Joseph Wright <joseph.wright@morningstar2.co.uk> +%% Copyright (C) 2012-2014,2016,2018,2019,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.dbx b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.dbx index c47ca1e2d9..388e7ee435 100644 --- a/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.dbx +++ b/macros/latex/contrib/biblatex-contrib/biblatex-phys/phys.dbx @@ -2,19 +2,19 @@ %% biblatex-phys --- A biblatex implementation of the AIP and APS %% bibliography style %% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk +%% E-mail: joseph@texdev.net %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% --------------------------------------------------------------- %% -\ProvidesFile{phys.dbx}[2019/12/03 v1.1b biblatex database model extension] +\ProvidesFile{phys.dbx}[2024/07/26 v1.1c biblatex database model extension] \DeclareDatamodelFields[type=field, datatype=literal]{collaboration} %% -%% Copyright (C) 2012-2014,2016,2018,2019 by -%% Joseph Wright <joseph.wright@morningstar2.co.uk> +%% Copyright (C) 2012-2014,2016,2018,2019,2024 by +%% Joseph Wright <joseph@texdev.net> %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/macros/latex/contrib/bxpdfver/LICENSE b/macros/latex/contrib/bxpdfver/LICENSE index b6b8b92330..f6ebffefca 100644 --- a/macros/latex/contrib/bxpdfver/LICENSE +++ b/macros/latex/contrib/bxpdfver/LICENSE @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2014-2022 Takayuki YATO (aka. "ZR") +Copyright (c) 2014-2024 Takayuki YATO (aka. "ZR") Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/macros/latex/contrib/bxpdfver/README-ja.md b/macros/latex/contrib/bxpdfver/README-ja.md index 0f0955d378..ea1a7e4ee1 100644 --- a/macros/latex/contrib/bxpdfver/README-ja.md +++ b/macros/latex/contrib/bxpdfver/README-ja.md @@ -43,16 +43,20 @@ bxpdfver パッケージ * `objcompress`(既定): オブジェクトストリームの使用を抑止しない。 * ドライバオプション: 以下の通り。なお、後述の「ドライバ指定」の 節も参照されたい。 - + PDF 出力のエンジンの場合は、既定で適切なドライバが選択される + + LaTeX の新 PDF マネジメントが有効化されている場合は、自動的に + “latex-pdf”モードに切り替わる。ドライバオプションは不要である。 + + PDF 出力のエンジンの場合は、自動的に適切なドライバが選択される のでドライバオプションは不要である。 + `dvipdfmx`: dvipdfmx 用のドライバを指定する。 + `nodvidriver`/`disabled`: 全ての機能を無効化する。 ※この場合 `lenient+` が既定になる。 + + `ignorepdfmanagement`: “latex-pdf”モードへの切替を抑止する。 * `lenient`: サポートしない機能に対するエラーを警告に格下げする。 * `lenient+`: サポートしない機能に対するエラーを完全に抑止する。 * `nolenient`(既定): `lenient(+)` の否定。 * `new-dvipdfmx`: dvipdfmx に対するバージョン検査を省略し、常に最新の - バージョンであると仮定する。 + バージョンであると仮定する。 + ※ドライバオプションが `dvipdfmx` に変更される。 `compress`、`objcompress` はこのパッケージによる抑止を行わないという意味 であり、既に抑止されている場合にそれを再び有効化するものではない。 @@ -72,41 +76,61 @@ bxpdfver パッケージ * `\preservepdfdestinations`: PDF 目的地(PDF destination)の名前の 短縮を抑止し、TeX 文書で指定された名前を用いる。異なる PDF 文書間で のリンクを正常に機能させるために必要である。 + * `\setpdfpkresolution{<解像度>}`: PDF に埋め込まれる PK フォントの + 解像度(dpi 値)を指定する。 ### ドライバ指定に関する補足 \ Drivers (engines) pdfTeX dvipdfmx - Features / LuaTeX / XeTeX others - --------------------------- --------- --------- ------ - \setpdfversion Yes Yes No - \suppresspdfcompression Yes Maybe(*2) No - \suppresspdfobjcompression Yes Maybe(*2) No + Features / LuaTeX / XeTeX latex-pdf + --------------------------- --------- --------- --------- + \setpdfversion Yes Yes Yes + \suppresspdfcompression Yes Maybe(*2) Yes(*4) + \suppresspdfobjcompression Yes Maybe(*2) Yes(*4) \setpdfdecimaldigits Yes Maybe(*2) No \preservepdfdestinations No-op(*1) Maybe(*2) No + \setpdfpkresolution Yes Maybe(*3) No 1. pdfTeX/LuaTeX では PDF 目的地の名前が短縮されるることはない。つまり `\preservepdfdestinations` は常に有効になっていると見なせる。 - 2. これらの機能を使用するためには、(x)dvipdfmx のバージョンが 20160307 - 以上である必要がある。 - - バージョン判定のために kpsewhich と extractbb の起動を利用する - ため、少なくともこれらのプログラムについて、シェルエスケープが - 許可されている必要がある。 - - dvipdfmx のバージョン情報は補助ファイル(.aux)中にキャッシュ - される。このため、何か状況が変わった場合は、一旦補助ファイルを - 削除する必要が生じる。 + 2. (x)dvipdfmx のバージョンが 20160307 以上である必要がある。 + 3. (x)dvipdfmx のバージョンが 20211016 以上である必要がある。 + 4. `\suppresspdfcompression` と `\suppresspdfobjcompression` については + 一方を実行すると他方も自動的に有効になる。l3pdf モジュールで片方のみ + を有効化することはサポートされないからである。 + +dvipdfmx のバージョン判定について: + + - 必要が生じた場合にのみバージョン判定が実行される。 + - `new-dvipdfmx` オプションを指定した場合は、バージョン判定を全て + 省略した上で、最新の dvipdfmx を使用していると見なす。 + - バージョン判定のために kpsewhich と extractbb の起動を利用するため、 + 少なくともこれらのプログラムについて、シェル実行が許可されている + 必要がある。 + - バージョン判定は少し時間がかかるため、dvipdfmx のバージョン情報は + 補助ファイル(.aux)中にキャッシュされる。このため、何か状況が変化 + した場合は、一旦補助ファイルを削除する必要が生じる。 以下のことにも注意されたい。 - * 使用不可能な機能を使おうと試みるとエラーが発生する。 + * 使用不可能な機能を使おうと試みるとエラーが発生する。 + ※`lenient` オプションが指定された場合はエラーが警告に変更され、 + また `lenient+` が指定された場合はエラーも警告も抑止される。 * `dvips` 等の“全く対応していない”若干のドライバオプションを認識 する。この場合、全ての機能の呼出でエラーが発生する。 - * `nodvidriver` は特殊で、これを指定した場合は、どの機能の呼出でも - エラーは発生しないが、全く何の動作も行わない。 + * `nodvidriver` オプションは既定で `lenient+` を指定する。つまり、 + どの機能の呼出でもエラーは発生しないが、全く何の動作も行わない。 更新履歴 -------- + * Version 0.8 ‹2024/08/03› + - カーネルの新 PDF マネジメントが有効な場合にも一部の機能が使える + ようにする(“latex-pdf”モード)。 + * Version 0.7 ‹2024/07/24› + - `\setpdfpkresolution` を(正式に)サポート。(dvipdfmx/XeTeX + でも使用可能になった。) * Version 0.6 ‹2022/04/28› - `lenient+`/`nolenient` オプションを追加。 - 非サポートのドライバでも読込自体はエラーにしない。 diff --git a/macros/latex/contrib/bxpdfver/README.md b/macros/latex/contrib/bxpdfver/README.md index 332b6215f1..1b78b5da1c 100644 --- a/macros/latex/contrib/bxpdfver/README.md +++ b/macros/latex/contrib/bxpdfver/README.md @@ -44,11 +44,16 @@ The available options are: * `noobjcompress`: Suppresses use of object streams. * `objcompress` (default): Does not suppress use of object streams. * Driver options: As below: + + When the new PDF management of LaTeX is activated, the package + will automatically switch to “latex-pdf” mode. You need not + give driver options. + When using a PDF-output engine, you need not give driver options since the appropriate one is auto-detected. + `dvipdfmx`: Uses dvipdfmx driver. + `nodvidriver`/`disabled`: Disables all functions of the package. NB. This option sets `lenient+` by default. + * `ignorepdfmanagement`: Avoids switching to “latex-pdf” mode, even + when the new PDF management of LaTeX is activated. * `lenient`: Turns the errors for unsupported features into warnings. * `lenient+`: Suppreseses the errors for unsupported features. * `nolenient`: Negation of `lenient(+)`. @@ -72,40 +77,61 @@ when it is already suppressed by other means. * `\preservepdfdestinations`: Stops shortening the PDF destination names and uses the original names given in the LaTeX documents. This is necessary for cross-document links to work correctly. + * `\setpdfpkresolution{<resolution>}`: Sets the resolution (in dpi) + of the PK fonts embedded in the PDF file. ### NOTE ON DRIVERS \ Drivers (engines) pdfTeX dvipdfmx - Features / LuaTeX / XeTeX others - --------------------------- --------- --------- ------ - \setpdfversion Yes Yes No - \suppresspdfcompression Yes Maybe(*2) No - \suppresspdfobjcompression Yes Maybe(*2) No + Features / LuaTeX / XeTeX latex-pdf + --------------------------- --------- --------- --------- + \setpdfversion Yes Yes Yes + \suppresspdfcompression Yes Maybe(*2) Yes(*4) + \suppresspdfobjcompression Yes Maybe(*2) Yes(*4) \setpdfdecimaldigits Yes Maybe(*2) No \preservepdfdestinations No-op(*1) Maybe(*2) No + \setpdfpkresolution Yes Maybe(*3) No 1. In pdfTeX and LuaTeX, PDF destination names are never shortened; that is, it can be thought as if `\preservepdfdestinations` were always in effect. 2. These features are available only when the version of (x)dvipdfmx - is 20160307 or later. Also shell escape must be accepted (with or - without restriction) so that `kpsewhich` and `extractbb` will be - allowed to run, because those programs are used in order to detect - the dvipdfmx version. + is 20160307 or later. + 3. These features are available only when the version of (x)dvipdfmx + is 20211016 or later. + 4. As for '\suppresspdfcompression' and '\suppresspdfobjcompression', + when one of them is executed, the other will be activated. It is + because l3pdf module does not support activating only one of them. + +On the detection of dvipdfmx version: + + * Shell escape must be accepted (with or without restriction) so that + `kpsewhich` and `extractbb` will be allowed to run, because those + programs are used in order to detect the dvipdfmx version. + * The detection process is slow, so the result is cached in the + auxiliary file (`.aux`). When the environment is changed, you need + to delete the auxiliary file. More notices: - * If you try to use unavailable features, an error will occur. + * If you try to use unavailable features, an error will occur. + NB. Option `lenient` turns the errors into warnings, and `lenient+` + completely suppresses the errors. * The package recognizes some “unsupported” driver options such as `dvips`; when such drivers are used, use of any feature will cause an error. - * The use of `nodvidriver` sets `lenient*` by default; use of any + * The use of `nodvidriver` sets `lenient+` by default; use of any feature will do nothing (nor issue an error). REVISION HISTORY ---------------- + * Version 0.8 ‹2024/08/03› + - Support some features even when the new PDF management of the + LaTeX kernel is activated (“latex-pdf” mode). + * Version 0.7 ‹2024/07/24› + - Support (officialy) `\setpdfpkresolution`. * Version 0.6 ‹2022/04/28› - Added the `lenient+` and `nolenient` options. * Version 0.5a ‹2021/02/14› diff --git a/macros/latex/contrib/bxpdfver/bxpdfver.sty b/macros/latex/contrib/bxpdfver/bxpdfver.sty index ccc9825f6f..296774068c 100644 --- a/macros/latex/contrib/bxpdfver/bxpdfver.sty +++ b/macros/latex/contrib/bxpdfver/bxpdfver.sty @@ -1,7 +1,7 @@ %% %% This is file 'bxpdfver.sty'. %% -%% Copyright (c) 2014-2022 Takayuki YATO (aka. "ZR") +%% Copyright (c) 2014-2024 Takayuki YATO (aka. "ZR") %% GitHub: https://github.com/zr-tex8r %% Twitter: @zr_tex8r %% @@ -10,12 +10,8 @@ %% package declaration \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{bxpdfver}[2022/04/28 v0.6] +\ProvidesPackage{bxpdfver}[2024/08/03 v0.8] \def\bxpv@pkgname{bxpdfver} - -%% preparations -\RequirePackage{ifthen}[]% for \newboolean -\newif\ifbxpv@ok \providecommand\bxDebug[1]{} %--------------------------------------- package options @@ -124,13 +120,23 @@ \fi \fi -%--------------------------------------- helpers +%--------------------------------------- general + +%% packages +\RequirePackage{ifthen}[]% for \newboolean + +%% variables +\newif\ifbxpv@ok %% unique tokens \def\bxpv@end{\bxpv@end@} \def\bxpv@mt{\bxpv@mt@} \let\bxpv@mk\noindent +%% \ifbxpv@read@file@ok +% Whether or not the last \bxpv@read@file succeeded. +\newif\ifbxpv@read@file@ok + %% \bxpv@csletcs \def\bxpv@csletcs#1#2{% \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname @@ -144,6 +150,13 @@ \def#3{#2}% } +%% \bxpv@info{<message>} +% Issues an info message. +\@onlypreamble\bxpv@info +\def\bxpv@info#1{% + \PackageInfo\bxpv@pkgname{#1\@gobble}% +} + %% \bxpv@warn{<message>} % Issues a warning. \@onlypreamble\bxpv@warn @@ -175,17 +188,61 @@ } %% \ifbxpv@defined -\let\ifbxpv@defined\ifdefined -\ifx\ifbxpv@defined\@undefined \expandafter\@firstofone -\else \expandafter\@gobble -\fi{\let\ifbxpv@defined\iffalse} +% Identical to \ifdefined, and is used only in e-TeX-aware code. +% On non-e-TeX engines it is made \iffalse to keep \if-balancedness. +\bxpv@csletcs{ifbxpv@defined}{% + if\ifx\ifdefined\@undefined false\else defined\fi} + +%% \bxpv@begin@document@hook +% The begin-document hook. +\@onlypreamble\bxpv@begin@document@hook +\let\bxpv@begin@document@hook\@empty +\AtBeginDocument{\bxpv@begin@document@hook} + +%--------------------------------------- environment check %% \ifbxpv@old@hook@system \newif\ifbxpv@old@hook@system \@ifl@t@r\fmtversion{2020/10/01}{}{\bxpv@old@hook@systemtrue} +%% \ifbxpv@pdfmanagement@ok +% Whether this package is supporting the LaTeX PDF management +% of the current kernel. +% (If the PDF management is active but this switch is off, +% then this package will switch to no-op mode.) +\newif\ifbxpv@pdfmanagement@ok + +%% check for new PDF management +\if t\bxpv@ignore@pdfmanagement\else + \ifx\IfPDFManagementActiveTF\@undefined\else + \IfPDFManagementActiveTF{% + \let\bxpv@drv@type=m% + \def\bxpv@drv@name{latex-pdf}% + \@ifl@t@r\fmtversion{2022/06/01}{% + \bxpv@pdfmanagement@oktrue + }{} + }{} + \fi +\fi +\ifx m\bxpv@drv@type + \ifbxpv@pdfmanagement@ok + \bxpv@warn + {New PDF management is active.\MessageBreak + The driver is set to '\bxpv@drv@name'}% + % Here \ExplSyntaxOn should be available. + \else + \bxpv@warn + {New PDF management is active, but\MessageBreak + the kernel is too old (before 2022/06/01).\MessageBreak + Thus this package will not work}% + \fi +\fi + %--------------------------------------- internal dispatchers +% Initially all dispatchers are "unavailable". +% They are later redefined according to the driver type. + %% \bxpv@suppress@compress \@onlypreamble\bxpv@suppress@compress \def\bxpv@suppress@compress{% @@ -224,25 +281,11 @@ \@onlypreamble\bxpv@cancel@obj@compress \let\bxpv@cancel@obj@compress\relax -%% \bxpv@begin@document@hook -% The begin-document hook. -\@onlypreamble\bxpv@begin@document@hook -\let\bxpv@begin@document@hook\@empty -\AtBeginDocument{\bxpv@begin@document@hook} \g@addto@macro\bxpv@begin@document@hook{% \bxpv@check@hyperref % must come first } -%% check for new PDF management -\if t\bxpv@ignore@pdfmanagement\else - \ifx\IfPDFManagementActiveTF\@undefined\else - \IfPDFManagementActiveTF{% - \global\let\bxpv@drv@type=m% - }{} - \fi -\fi - -%% adjust internal dispatchers +%% Redefine internal dispatchers. \ifx 0\bxpv@drv@type\else %-------- \begingroup @@ -264,9 +307,31 @@ %% switch \if m\bxpv@drv@type - %% when in new PDF management - \bxpv@warn - {New PDF management is active}% + \ifbxpv@pdfmanagement@ok + % Here all l3pdf function is assumed to be available. + \gdef\bxpv@check@version{\bxpv@oktrue} + \ExplSyntaxOn %!!!!!! + \tl_new:N \g__bxpv_org_version + \exp_args:NNe \tl_gset:Nn \g__bxpv_org_version { \pdf_version: } + \cs_gset:Npn \bxpv@set@version + { + \token_if_eq_meaning:NNTF \bxpdfverMinorVersion \relax + { \pdf_version_gset:n { \g__bxpv_org_version } } + { + \pdf_version_gset:n + { + \int_use:N \bxpdfverMajorVersion + . \int_use:N \bxpdfverMinorVersion + } + } + } + % \pdf_uncompress: does both. + \cs_gset:Npn \bxpv@suppress@compress + { \pdf_uncompress: } + \cs_gset:Npn \bxpv@suppress@obj@compress + { \pdf_uncompress: } + \ExplSyntaxOff %!!!!!! + \fi \else\ifnum\bxpv@pdfoutput>\z@ %% when in PDF mode \global\let\bxpv@drv@type=p @@ -386,12 +451,14 @@ \bxpv@warn {Unsupported engine}% \else\if d\bxpv@drv@type % 'dvipdfmx' + % All the real settings are done in the begin-document hook, + % so the dispatchers themselves will do nothing (if available). \global\let\bxpv@suppress@compress\relax \global\let\bxpv@suppress@obj@compress\relax \global\let\bxpv@check@version\relax \global\let\bxpv@set@version\relax \global\let\bxpv@set@decimaldigits\relax - %\global\let\bxpv@set@pkresolution\relax + \global\let\bxpv@set@pkresolution\relax \global\let\bxpv@preserve@destinations\relax \g@addto@macro\bxpv@begin@document@hook{% \bxpv@begin@document@dvipdfmx @@ -671,6 +738,7 @@ \fi %% variables +\let\bxpv@dvipdfmx@known@min\relax % minimum known dviodfmx version \let\bxpv@C@value\relax %% \bxpv@C@bits @@ -689,6 +757,7 @@ %% \bxpv@begin@document@dvipdfmx \@onlypreamble\bxpv@begin@document@dvipdfmx \def\bxpv@begin@document@dvipdfmx{% + \bxpv@get@dvipdfmx@known@min % PDF version \ifx\bxpdfverMajorVersion\tw@ \bxpv@check@dvipdfmx@version{20180217}% @@ -701,8 +770,8 @@ \bxpv@put@special{pdf:minorversion \the\bxpdfverMinorVersion}% \fi \ifx\bxpdfverMinorVersion\relax\else - \bxpv@cache@fetch{dvipdfmxver}% - \ifnum\bxpv@cache@@dvipdfmxver<20180217 \else + \bxpv@at@least@dvipdfmx@version{20180217}% + \ifbxpv@ok \bxpv@put@special{pdf:majorversion \the\bxpdfverMajorVersion}% \fi \fi @@ -734,7 +803,9 @@ \fi % PK resolution \ifx\bxpdfverPkResolution\relax\else - \iffalse % This will never work.... + \bxpv@check@dvipdfmx@version{20211016}% + {Cannot set PK resolution}% + \ifbxpv@ok \bxpv@put@special{dvipdfmx:config r \the\bxpdfverPkResolution}% \fi \fi @@ -748,10 +819,9 @@ \fi % C option value \ifx\bxpv@C@bits\@empty\else - \bxpv@cache@fetch{dvipdfmxcfg}% - \def\bxpv@next##1##2\bxpv@mk{\def\bxpv@C@value{##1}}% - \expandafter\bxpv@next\bxpv@cache@@dvipdfmxcfg{0}\bxpv@mk - \bxpv@rc@bitset{\bxpv@C@value}{64}% + % When C option is used, its value is automatically OR'ed with + % the current value, so we need not read the config for that. + \def\bxpv@C@value{0}% \def\do##1{% \bxpv@rc@bitset{\bxpv@C@value}{##1}% \let\bxpv@C@value\bxpv@rc@num}% @@ -776,25 +846,67 @@ \fi } +%% \bxpv@get@dvipdfmx@known@min +% Gathers the information and sets \bxpv@dvipdfmx@known@min, +% without actually spawning extractbb. +% (Called in the begin-document hook.) +\@onlypreamble\bxpv@get@dvipdfmx@known@min +\def\bxpv@get@dvipdfmx@known@min{% + % initially no information + \def\bxpv@dvipdfmx@known@min{0}% + % l3backend-dvipdfmx of revision 2022-04-10 or later requires + % dvipdfmx of version 20201111 or later. + \def\bxpv@tmpa{def}% + \let\bxpv@tmpb\@gobbletwo + \@ifl@aded\bxpv@tmpa{l3backend-dvipdfmx}{% + \def\bxpv@tmpb{\@ifl@ter\bxpv@tmpa{l3backend-dvipdfmx}}% + }{}% + % Just in case.... + \@ifl@aded\bxpv@tmpa{l3backend-dvips}{% + \def\bxpv@tmpb{\@ifl@ter\bxpv@tmpa{l3backend-dvips}}% + }{}% + \bxpv@tmpb{2022/04/10}{% + % Now the version is known to be 20201111 or later. + % This information can save much need for spawning extractbb. + \def\bxpv@dvipdfmx@known@min{20201111}% + }{}% + \bxDebug{dvipdfmx-known-min:\bxpv@dvipdfmx@known@min}% +} + +%% \bxpv@at@least@dvipdfmx@version{<version>} +% Checks if dvipdfmx >= <version> and sets bxpv@ok. +\@onlypreamble\bxpv@at@least@dvipdfmx@version +\def\bxpv@at@least@dvipdfmx@version#1{% + % first check using known-min + \ifnum\bxpv@dvipdfmx@known@min<#1 + % get real version + \bxpv@cache@fetch{dvipdfmxver}% + \bxpv@info + {dvipdfmx version is \bxpv@cache@@dvipdfmxver}% + \bxpv@oktrue + \ifnum\bxpv@cache@@dvipdfmxver<#1 + \bxpv@okfalse + \fi + \else % new enough + \bxpv@oktrue + \fi +} + %% \bxpv@check@dvipdfmx@version \@onlypreamble\bxpv@check@dvipdfmx@version \def\bxpv@check@dvipdfmx@version#1#2{% - \bxpv@cache@fetch{dvipdfmxver}% - \bxpv@okfalse - \ifnum\bxpv@cache@@dvipdfmxver=\z@ + \bxpv@at@least@dvipdfmx@version{#1}% + \ifbxpv@ok % no-op + \else\ifnum\bxpv@cache@@dvipdfmxver=\z@ \bxpv@fail {#2, because the\MessageBreak version of dvipdfmx in use is unknown \MessageBreak (v.#1 or later is required)}% - \else\ifnum\bxpv@cache@@dvipdfmxver<#1 + \else \bxpv@fail {#2, because the\MessageBreak version of dvipdfmx in use (v.\bxpv@cache@@dvipdfmxver) is too old \MessageBreak (v.#1 or later is required)}% - \else - \PackageInfo\bxpv@pkgname - {dvipdfmx version is \bxpv@cache@@dvipdfmxver\@gobble}% - \bxpv@oktrue \fi\fi } @@ -950,10 +1062,6 @@ \let\bxpv@rf@line\relax % line content \let\bxpv@rf@cont\relax % continue to read? -%% \ifbxpv@read@file@ok -% Whether or not the last \bxpv@read@file succeeded. -\newboolean{bxpv@read@file@ok} - %% \bxpv@read@file{<file-name>}{<line-parser-code>} % Reads from a text file. The line parser takes as #1 the % content of each line. diff --git a/macros/latex/contrib/changebar/CATALOG b/macros/latex/contrib/changebar/CATALOG index 50cd35da78..5483fa9c13 100644 --- a/macros/latex/contrib/changebar/CATALOG +++ b/macros/latex/contrib/changebar/CATALOG @@ -1,7 +1,7 @@ Name: ChangeBar Problems-To: johannes.braams(at)texniek.nl Author: J.L. Braams -Version: 3.7d +Version: 3.7e Description: diff --git a/macros/latex/contrib/changebar/README b/macros/latex/contrib/changebar/README index 2a9c69bad7..bcd9ab0bbb 100644 --- a/macros/latex/contrib/changebar/README +++ b/macros/latex/contrib/changebar/README @@ -1,6 +1,6 @@ changebar bundle - January 9, 2024 + July 19, 2024 This bundle contains a package that I maintain to add changebars to a LaTeX document. diff --git a/macros/latex/contrib/changebar/changebar.bug b/macros/latex/contrib/changebar/changebar.bug index d661332150..aa476a2224 100644 --- a/macros/latex/contrib/changebar/changebar.bug +++ b/macros/latex/contrib/changebar/changebar.bug @@ -219,6 +219,10 @@ % v3.7d JLB: Arash Esbati reported a simlar phenomenon when \nochangebars % is used. Similar solution was needed. % +% v3.7e JLB: Daniel Flipo and Bruno Winckler reported that changebar no longer +% works when \usepackage[french]{babel} is used. This was caused by the +% solution implemented in v3.7b. This time use "/" is chosen as separator. +% % Known problems % - changebars for marginal paragraphs collide with changebars % for the main body of text diff --git a/macros/latex/contrib/changebar/changebar.dtx b/macros/latex/contrib/changebar/changebar.dtx index 406ccf5290..58df74102c 100644 --- a/macros/latex/contrib/changebar/changebar.dtx +++ b/macros/latex/contrib/changebar/changebar.dtx @@ -24,7 +24,7 @@ % and covered by LPPL is defined by the unpacking scripts (with % extension .ins) which are part of the distribution. % \fi -% \CheckSum{2954} +% \CheckSum{2948} % %\iffalse % This file is built for \LaTeXe, so we make sure an error is @@ -39,7 +39,7 @@ \ProvidesFile{changebar.dtx} %</dtx> %<+package>\ProvidesPackage{changebar} - [2024/01/09 v3.7d Indicate changes with marginal bars] + [2024/07/17 v3.7e Indicate changes with marginal bars] % \end{macrocode} % % \section{A driver for this document} @@ -137,7 +137,10 @@ % \changes{v3.6e}{2023/08/13}{Added supprt for luaTeX} % \changes{v3.7b}{2023/12/28}{Added a few lines that were inadvertantly removed} % \changes{v3.7b}{2023/12/30}{the cb2-file use delimiting chars may -% change meaning when they end up in the wrong situation} +% change meaning when they end up in the wrong situation} +% \changes{v3.7e}{2024/07/17}{The us of the character `;´ as a string +% separator clashes with it's active variant when babel/french has +% been loaded} % % \title{The Changebar package % \thanks{This file has version number \fileversion, @@ -229,9 +232,7 @@ % \changes{v3.6a}{2011/04/30}{XeTeX added} % \item Xe\TeX % \changes{3.6e}{2023/08/13}{luaTeX added} -% \begin{changebar} % \item lua\TeX -% \end{changebar} % \end{itemize} % The drivers are represented in the normal typewriter method of % typing these names, or by the same entirely in lower case. @@ -752,7 +753,7 @@ % \item V\TeX % \item PDF\TeX % \item Xe\TeX -% \cbstart\item luaTeX\cbend +% \item luaTeX % \end{itemize} % % The intent is that the driver names should be case-insensitive, @@ -799,10 +800,17 @@ % \end{macrocode} % Redefine the |\cb@pdfxy| macro to write point coordinates to the % \file{.cb2} file. -% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter} +% \changes{v3.7b}{2023/12/30}{use ";" instead of "," as delimiter} +% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter} % \begin{macrocode} \gdef\cb@pdfxy##1##2##3##4##5{% - \immediate\write\cb@writexy{##1.##2p##3;##4;##5}% +% \end{macrocode} +% \begin{changebar} +% \begin{macrocode} + \immediate\write\cb@writexy{##1.##2p##3/##4/##5}% +% \end{macrocode} +% \end{changebar} +% \begin{macrocode} \expandafter\gdef\csname cb@##1.##2\endcsname{##3,##4,##5}} \else\cb@pdftexerror\fi\fi\fi} % \end{macrocode} @@ -837,10 +845,17 @@ % \end{macrocode} % Redefine the |\cb@pdfxy| macro to write point coordinates to the % \file{.cb2} file. -% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter} +% \changes{v3.7b}{2023/12/30}{use ";" instead of "," as delimiter} +% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter} % \begin{macrocode} \gdef\cb@pdfxy##1##2##3##4##5{% - \immediate\write\cb@writexy{##1.##2p##3;##4;##5}% +% \end{macrocode} +% \begin{changebar} +% \begin{macrocode} + \immediate\write\cb@writexy{##1.##2p##3/##4/##5}% +% \end{macrocode} +% \end{changebar} +% \begin{macrocode} \expandafter\gdef\csname cb@##1.##2\endcsname{##3,##4,##5}} \gdef\sec@nd@ftw@##1 ##2{##2} \fi} @@ -854,7 +869,6 @@ {You are not using XeLaTeX}} % \end{macrocode} % -% \begin{changebar} % \begin{macrocode} \DeclareOption{luaTeX}{\cb@luatexcheck} \DeclareOption{luatex}{\cb@luatexcheck} @@ -877,10 +891,17 @@ % \end{macrocode} % Redefine the |\cb@pdfxy| macro to write point coordinates to the % \file{.cb2} file. -% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter} +% \changes{v3.7b}{2023/12/30}{use ";" instead of ",¨ as delimiter} +% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter} % \begin{macrocode} \gdef\cb@pdfxy##1##2##3##4##5{% - \immediate\write\cb@writexy{##1.##2p##3;##4;##5}% +% \end{macrocode} +% \begin{changebar} +% \begin{macrocode} + \immediate\write\cb@writexy{##1.##2p##3/##4/##5}% +% \end{macrocode} +% \end{changebar} +% \begin{macrocode} \expandafter\gdef\csname cb@##1.##2\endcsname{##3,##4,##5}} \fi} % \end{macrocode} @@ -892,7 +913,6 @@ {luaTeX option cannot be used}% {You are not using luaLaTeX}} % \end{macrocode} -% \end{changebar} % % The new features of \LaTeXe\ make it possible to implement the % \Lopt{outerbars} option. @@ -1120,6 +1140,8 @@ % compatibility mode} % \changes{v3.3e}{1998/02/24}{Added \cs{Textures}} % \changes{v3.5a}{2005/05/23}{Added 'PDFtex' option} +% \changes{v3.6a}{2011/04/30}{Added 'XeTeX' option} +% \changes{v3.6e}{2023/08/13}{Added 'luaTeX' option} % \begin{macrocode} \if@compatibility \def\driver#1{% @@ -1132,17 +1154,9 @@ \def\Textures{TEXTURES}% \def\VTeX{VTEX}% \def\pdfTeX{PDFTEX}% -% \end{macrocode} -% \changes{v3.6a}{2011/04/30}{Added 'XeTeX' option} -% \begin{macrocode} \def\xeTeX{XETEX} -% \end{macrocode} -% \changes{v3.6e}{2023/08/13}{Added 'luaTeX' option} -% \begin{changebar} -% \begin{macrocode} \def\luaTeX{LUATEX} % \end{macrocode} -% \end{changebar} % % The choice has to be communicated to the macro % \verb=\cb@setup@specials= that will be called from within @@ -1150,6 +1164,7 @@ % \verb=\cb@driver@setup= is used. It receives a numeric value % using \verb=\chardef=. % \changes{v3.6a}{2011/04/30}{Added 'XeTeX' option} +% \changes{v3.6e}{2023/08/13}{Added 'luaTeX' option} % \begin{macrocode} \global\chardef\cb@driver@setup=0\relax \ifx\tempa\LN \global\chardef\cb@driver@setup=0\fi @@ -1160,14 +1175,7 @@ \ifx\tempa\VTeX \global\chardef\cb@driver@setup=5\fi \ifx\tempa\pdfTeX \cb@pdftexcheck\fi \ifx\tempa\xeTeX \cb@xetexcheck\fi -% \end{macrocode} -% \changes{v3.6e}{2023/08/13}{Added 'luaTeX' option} -% \begin{changebar} -% \begin{macrocode} \ifx\tempa\luaTeX \cb@luatexcheck\fi -% \end{macrocode} -% \end{changebar} -% \begin{macrocode} \egroup} % \end{macrocode} % We add \verb+\driver+ to \verb+\@preamblecmds+, which is a @@ -1464,11 +1472,22 @@ % When the point is found it is removed from |\cb@pdfpoints|. \#9 % contains the cumulative head of the list to construct the new list % with the entry removed. \#3--\#8 are for pattern matching. -% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter} +% \changes{v3.7b}{2023/12/30}{use ";" instead of "," as delimiter} +% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter} +% \begin{changebar} +% \begin{macrocode} + \def\cb@pdffind##1##2##3.##4p##5/##6/##7pt##8\relax##9{% +% \end{macrocode} +% \end{changebar} % \begin{macrocode} - \def\cb@pdffind##1##2##3.##4p##5;##6;##7pt##8\relax##9{% \def\cb@next{% - \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5;##6;##7pt}}% +% \end{macrocode} +% \begin{changebar} +% \begin{macrocode} + \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5/##6/##7pt}}% +% \end{macrocode} +% \end{changebar} +% \begin{macrocode} \ifnum ##1=##3 \ifnum ##2=##4 \def\cb@pdfx{##5sp}% @@ -1519,8 +1538,13 @@ % \begin{macro}{\cb@pdfparsexy} % The |\cb@pdfparsexy| macro extracts the pagecount from an entry read in % from the \file{.cb2} file. +% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter} +% \begin{changebar} +% \begin{macrocode} + \def\cb@pdfparsexy##1.##2p##3/##4/##5pt{% +% \end{macrocode} +% \end{changebar} % \begin{macrocode} - \def\cb@pdfparsexy##1.##2p##3;##4;##5pt{% \def\cb@pdfpg{##2}}% % \end{macrocode} % \end{macro} @@ -1565,7 +1589,7 @@ % In order to get things in the right spot we need a little scaling % factor. We define it here. % \begin{macrocode} -\def\cb@pdf@scale{0.996264009963} + \def\cb@pdf@scale{0.996264009963} % \end{macrocode} % \end{macro} % @@ -1636,14 +1660,12 @@ % \begin{macrocode} \gdef\cb@checkPdfxy##1##2##3##4##5{% \cb@@findpdfpoint{##1}{##2}% -% \end{macrocdode} -% \begin{changebar} -% \begin{macrocode +% \end{macrocode} +% \begin{macrocode} \ifdim##3sp=\cb@pdfx\relax \ifdim##4sp=\cb@pdfy\relax -% \end{macrocdode} -% \end{changebar} -% \begin{macrocode +% \end{macrocode} +% \begin{macrocode} \ifdim##5=\cb@pdfz\relax \else \cb@error @@ -1741,11 +1763,22 @@ % When the point is found it is removed from |\cb@pdfpoints|. \#9 % contains the cumulative head of the list to construct the new list % with the entry removed. \#3--\#8 are for pattern matching. -% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter} +% \changes{v3.7b}{2023/12/30}{use ";" instead of "," as delimiter} +% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter} +% \begin{changebar} +% \begin{macrocode} + \def\cb@pdffind##1##2##3.##4p##5/##6/##7pt##8\relax##9{% +% \end{macrocode} +% \end{changebar} % \begin{macrocode} - \def\cb@pdffind##1##2##3.##4p##5;##6;##7pt##8\relax##9{% \def\cb@next{% - \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5;##6;##7pt}}% +% \end{macrocode} +% \begin{changebar} +% \begin{macrocode} + \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5/##6/##7pt}}% +% \end{macrocode} +% \end{changebar} +% \begin{macrocode} \ifnum ##1=##3 \ifnum ##2=##4 \def\cb@pdfx{##5sp}% @@ -1796,8 +1829,13 @@ % \begin{macro}{\cb@pdfparsexy} % The |\cb@pdfparsexy| macro extracts the pagecount from an entry read in % from the \file{.cb2} file. +% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter} +% \begin{changebar} +% \begin{macrocode} + \def\cb@pdfparsexy##1.##2p##3/##4/##5pt{% +% \end{macrocode} +% \end{changebar} % \begin{macrocode} - \def\cb@pdfparsexy##1.##2p##3;##4;##5pt{% \def\cb@pdfpg{##2}}% % \end{macrocode} % \end{macro} @@ -1842,7 +1880,7 @@ % In order to get things in the right spot we need a little scaling % factor. We define it here. % \begin{macrocode} -\def\cb@pdf@scale{0.996264009963} + \def\cb@pdf@scale{0.996264009963} % \end{macrocode} % \end{macro} % @@ -1934,7 +1972,6 @@ \let\cb@resetpoints\relax % \end{macrocode} % -% \begin{changebar} % \changes{v3.6e}{2023/08/13}{lua\TeX{} support added} % The code for lua\TeX{}, like for pdf\TeX\ and Xe\TeX, % is more elaborate as the calculations have to @@ -2012,11 +2049,22 @@ % When the point is found it is removed from |\cb@pdfpoints|. \#9 % contains the cumulative head of the list to construct the new list % with the entry removed. \#3--\#8 are for pattern matching. -% \changes{v3.7b}{2023/12/30}{use ¨;¨ instead of ¨,¨ as delimiter} +% \changes{v3.7b}{2023/12/30}{use ";" instead of "," as delimiter} +% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter} +% \begin{changebar} +% \begin{macrocode} + \def\cb@pdffind##1##2##3.##4p##5/##6/##7pt##8\relax##9{% +% \end{macrocode} +% \end{changebar} % \begin{macrocode} - \def\cb@pdffind##1##2##3.##4p##5;##6;##7pt##8\relax##9{% \def\cb@next{% - \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5;##6;##7pt}}% +% \end{macrocode} +% \begin{changebar} +% \begin{macrocode} + \cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5/##6/##7pt}}% +% \end{macrocode} +% \end{changebar} +% \begin{macrocode} \ifnum ##1=##3 \ifnum ##2=##4 \def\cb@pdfx{##5sp}% @@ -2067,8 +2115,13 @@ % \begin{macro}{\cb@pdfparsexy} % The |\cb@pdfparsexy| macro extracts the pagecount from an entry read in % from the \file{.cb2} file. +% \changes{v3.7e}{2024/07/17}{Use "/" instead of ";" as delimiter} +% \begin{changebar} +% \begin{macrocode} + \def\cb@pdfparsexy##1.##2p##3/##4/##5pt{% +% \end{macrocode} +% \end{changebar} % \begin{macrocode} - \def\cb@pdfparsexy##1.##2p##3;##4;##5pt{% \def\cb@pdfpg{##2}}% % \end{macrocode} % \end{macro} @@ -2113,7 +2166,7 @@ % In order to get things in the right spot we need a little scaling % factor. We define it here. % \begin{macrocode} -\def\cb@pdf@scale{0.996264009963} + \def\cb@pdf@scale{0.996264009963} % \end{macrocode} % \end{macro} % @@ -2203,7 +2256,6 @@ \def\cb@maxpoint{9999999} \let\cb@resetpoints\relax % \end{macrocode} -%\end{changebar} % % When code for other drivers should be added it can be inserted % here. When someone makes a mistake and somehow selects an @@ -2296,7 +2348,7 @@ \newcommand*{\nochangebars}{% \def\cb@start[##1]{\ignorespaces}% \def\cb@delete[##1]{}% - \def\cb@end{\ignorespacesafterend} + \def\cb@end{\ignorespacesafterend}% } % \end{macrocode} % \end{macro} diff --git a/macros/latex/contrib/changebar/changebar.pdf b/macros/latex/contrib/changebar/changebar.pdf Binary files differindex b313fe1c53..9025ebb624 100644 --- a/macros/latex/contrib/changebar/changebar.pdf +++ b/macros/latex/contrib/changebar/changebar.pdf diff --git a/macros/latex/contrib/cjs-rcs-article/README.md b/macros/latex/contrib/cjs-rcs-article/README.md index e28620a02d..aa152dd5fd 100644 --- a/macros/latex/contrib/cjs-rcs-article/README.md +++ b/macros/latex/contrib/cjs-rcs-article/README.md @@ -21,7 +21,7 @@ International. ## Version - +1.1a (2024-07-30) ## Author @@ -133,7 +133,7 @@ licence CC BY-SA 4.0 International. ## Version - +1.1a (2024-07-30) ## Auteur diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article-fr.pdf b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article-fr.pdf Binary files differindex c64b7fa0a2..fd93cf709b 100644 --- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article-fr.pdf +++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article-fr.pdf diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.dtx b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.dtx index cab40dfb50..a750c136f5 100644 --- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.dtx +++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.dtx @@ -28,7 +28,7 @@ %<class>\NeedsTeXFormat{LaTeX2e}[2021/06/01] %<class>\ProvidesClass{cjs-rcs-article}% %<*class> -[2024/07/14 v1.1 Article class for The Canadian Journal of +[2024/07/30 v1.1a Article class for The Canadian Journal of Statistics | La revue canadienne de statistique] %</class> %<*driver> @@ -296,6 +296,10 @@ % contents of the PDF.} % \changes{1.1}{2024-07-13}{Add the command \cs{matit} to typeset bold % italic in math in a portable way.} +% \changes{1.1a}{2024-07-25}{Fix the command \cs{proglang} that would +% disable hyphenation for the rest of the document. With thanks to +% Enrico Gregorio (egreg) for the heads up in person at TUG 2024.} +% \changes{1.1a}{2024-07-25}{Make the command \cs{proglang} robust.} % % \ifenglish% % \title[Guide to the class {\CJSclass}]{% @@ -3867,12 +3871,12 @@ % The decorative element is created using plain {\TeX} rules. Its % height and depth are identical to the journal information. % \begin{macrocode} -\setbox\z@=\vbox{\sffamily\hbox{\CJS@journalname}\hbox{\bfseries V,}} \newsavebox\CJS@journalornament \setbox\CJS@journalornament=\vbox{% + \setbox\z@=\vbox{\sffamily\hbox{\CJS@journalname}\hbox{\bfseries V,}} \setbox\tw@\hbox{\vrule \@width4pt\@height\ht\z@\@depth\dp\z@} - \hbox{\textcolor{CJSpink}{\copy\tw@}\kern2pt% - \textcolor{CJSred}{\copy\tw@}\kern2pt% + \hbox{\textcolor{CJSpink}{\copy\tw@}\kern2pt + \textcolor{CJSred}{\copy\tw@}\kern2pt \textcolor{CJSyellow}{\copy\tw@}\kern6pt}} % \end{macrocode} % @@ -4735,7 +4739,7 @@ \setbox\CJS@licencebox=\vbox{% \CJS@setlicencefont \ifCJS@specialack\CJS@specialackstatement\fi - \ifdefempty{\CJS@licence}{\CJS@licencesample}{\CJS@licence}} + \ifdefempty{\CJS@licence}{\CJS@licencesample}{\CJS@licence}}% \setlength\CJS@licenceht{\dimexpr\ht\CJS@licencebox+\dp\CJS@licencebox}} % \end{macrocode} % \end{macro} @@ -4759,14 +4763,17 @@ % Inspired by the package \pkg{ccicons} (not used by the class since % \pkg{fontawesome5} contains all the Creative Commons icons). % +% \changes{1.1a}{2024-07-25}{Implementation: fix the generation of +% spacing in the \cs{ccby*} commands.} % \begin{macro}{\ccby,\ccby*} % The command \cmd{\ccby} typesets the icons for the Attribution % licence: {\ccby}. % \begin{macrocode} \newcommand*\ccby{\ccby@\@ifstar{~\faCopyright[regular]}\relax} +\def\CJS@fakern{\kern0.1em} \def\ccby@{\mbox{% - \faCreativeCommons\kern0.1em% - \faCreativeCommonsBy\kern0.1em}} + \faCreativeCommons\CJS@fakern + \faCreativeCommonsBy\CJS@fakern}} % \end{macrocode} % \end{macro} % @@ -4776,8 +4783,8 @@ % \begin{macrocode} \newcommand*\ccbysa{\ccbysa@\@ifstar{~\faCopyright[regular]}\relax} \def\ccbysa@{\mbox{% - \faCreativeCommons\kern0.1em% - \faCreativeCommonsBy\kern0.1em% + \faCreativeCommons\CJS@fakern + \faCreativeCommonsBy\CJS@fakern \faCreativeCommonsSa}} % \end{macrocode} % \end{macro} @@ -4788,8 +4795,8 @@ % \begin{macrocode} \newcommand*\ccbync{\ccbync@\@ifstar{~\faCopyright[regular]}\relax} \def\ccbync@{\mbox{% - \faCreativeCommons\kern0.1em% - \faCreativeCommonsBy\kern0.1em% + \faCreativeCommons\CJS@fakern + \faCreativeCommonsBy\CJS@fakern \faCreativeCommonsNc}} % \end{macrocode} % \end{macro} @@ -4801,9 +4808,9 @@ % \begin{macrocode} \newcommand*\ccbyncsa{\ccbyncsa@\@ifstar{~\faCopyright[regular]}\relax} \def\ccbyncsa@{\mbox{% - \faCreativeCommons\kern0.1em% - \faCreativeCommonsBy\kern0.1em% - \faCreativeCommonsNc\kern0.1em% + \faCreativeCommons\CJS@fakern + \faCreativeCommonsBy\CJS@fakern + \faCreativeCommonsNc\CJS@fakern \faCreativeCommonsSa}} % \end{macrocode} % \end{macro} @@ -4814,8 +4821,8 @@ % \begin{macrocode} \newcommand*\ccbynd{\ccbynd@\@ifstar{~\faCopyright[regular]}\relax} \def\ccbynd@{\mbox{% - \faCreativeCommons\kern0.1em% - \faCreativeCommonsBy\kern0.1em% + \faCreativeCommons\CJS@fakern + \faCreativeCommonsBy\CJS@fakern \faCreativeCommonsNd}} % \end{macrocode} % \end{macro} @@ -4826,9 +4833,9 @@ % \begin{macrocode} \newcommand*\ccbyncnd{\ccbyncnd@\@ifstar{~\faCopyright[regular]}\relax} \def\ccbyncnd@{\mbox{% - \faCreativeCommons\kern0.1em% - \faCreativeCommonsBy\kern0.1em% - \faCreativeCommonsNc\kern0.1em% + \faCreativeCommons\CJS@fakern + \faCreativeCommonsBy\CJS@fakern + \faCreativeCommonsNc\CJS@fakern \faCreativeCommonsNd}} % \end{macrocode} % \end{macro} @@ -4950,6 +4957,8 @@ % \subsection{Computer code and software} % \label{sec:implementation:software} % +% \changes{1.1a}{2024-07-25}{Implementation: prevent hyphenation in +% \cs{proglang} using a simple \cs{mbox}.} % \begin{macro}{\proglang} % The command \cmd{\proglang} provides a means to uniformly typeset % the name of a software or programming language. The command also @@ -4957,7 +4966,7 @@ % shortcuts to the most common languages. Notice that the % \cmd{\Cpplang} case is specially crafted. % \begin{macrocode} -\newcommand*\proglang[1]{{\hyphenchar\font=-1 #1}} +\newrobustcmd*\proglang[1]{\mbox{#1}} \newcommand*\Rlang{\proglang{R}} \newcommand*\SASlang{\proglang{SAS}} \newcommand*\SPSSlang{\proglang{SPSS}} @@ -5178,18 +5187,20 @@ % \end{macrocode} % \end{macro} % +% \changes{1.1a}{2024-07-25}{Implementation: replace box registers +% \cs{@ne} and \cs{thr@@} by \cs{z@} and \cs{tw@}.} % We also define a decorative element similar to the one used on the % title page, only adapted for a single line content. To create a % balanced element, we use the height of a letter with an ascender and % the depth of the old-style number 4. % \begin{macrocode} -\setbox\@ne=\vbox{\hbox{\firaoldstyle\small l4}} \newsavebox\CJS@historyornament \setbox\CJS@historyornament=\vbox{% - \setbox\thr@@\hbox{\vrule \@width1.5pt\@height\ht\@ne\@depth\dp\@ne} - \hbox{\textcolor{CJSpink}{\copy\thr@@}\kern.75pt% - \textcolor{CJSred}{\copy\thr@@}\kern.75pt% - \textcolor{CJSyellow}{\copy\thr@@}\kern3pt}} + \setbox\z@=\vbox{\hbox{\firaoldstyle\small l4}} + \setbox\tw@\hbox{\vrule \@width1.5pt\@height\ht\z@\@depth\dp\z@} + \hbox{\textcolor{CJSpink}{\copy\tw@}\kern.75pt + \textcolor{CJSred}{\copy\tw@}\kern.75pt + \textcolor{CJSyellow}{\copy\tw@}\kern3pt}} % \end{macrocode} % % Finally, the history information, when present, is printed at the diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.pdf b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.pdf Binary files differindex 4d9c8ae4f8..bf7f73c7c4 100644 --- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.pdf +++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-article.pdf diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-english.mbs b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-english.mbs index b23be11c43..18f0ccbd78 100644 --- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-english.mbs +++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-english.mbs @@ -31,7 +31,7 @@ %------------------------------------------------------------------- % Begin module: %\fi - % \ProvidesFile{cjs-rcs-english.mbs}[2024/07/14 v1.1 (VG, PWD)] + % \ProvidesFile{cjs-rcs-english.mbs}[2024/07/30 v1.1a (VG, PWD)] %\iffalse %<*a&!a> % The following ensures that the driver part is not seen by makebst @@ -87,7 +87,7 @@ %% Configuration of the glossary \addto\extrasenglish{% - \def\glossaryname{Version history}} + \def\glossaryname{History of changes}} \GlossaryPrologue{\section*{\glossaryname}% \addcontentsline{toc}{section}{\glossaryname}} \setlength{\GlossaryMin}{5cm} @@ -125,8 +125,6 @@ % the main file.} % \changes{1.0}{2023-11-29}{First official release distributed through % CTAN.} -% \changes{1.1}{2024-07-14}{No changes to the English language -% definition file.} % % \title[English language definition file \filename]{% % English language definition file \\ diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-french.mbs b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-french.mbs index 748d449383..4d3a76021c 100644 --- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-french.mbs +++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-french.mbs @@ -31,7 +31,7 @@ %------------------------------------------------------------------- % Begin module: %\fi - % \ProvidesFile{cjs-rcs-french.mbs}[2024/07/14 v1.1 (VG, PWD)] + % \ProvidesFile{cjs-rcs-french.mbs}[2024/07/30 v1.1a (VG, PWD)] %\iffalse %<*a&!a> % The following ensures that the driver part is not seen by makebst @@ -87,7 +87,7 @@ %% Configuration of the glossary \addto\extrasenglish{% - \def\glossaryname{Version history}} + \def\glossaryname{History of changes}} \GlossaryPrologue{\section*{\glossaryname}% \addcontentsline{toc}{section}{\glossaryname}} \setlength{\GlossaryMin}{5cm} @@ -125,8 +125,6 @@ % the main file.} % \changes{1.0}{2023-11-29}{First official release distributed through % CTAN.} -% \changes{1.1}{2024-07-14}{No changes to the French language -% definition file.} % % \title[French language definition file \filename]{% % French language definition file \\ diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.mbs b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.mbs index 75ca76a256..cf79365ffd 100644 --- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.mbs +++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.mbs @@ -32,7 +32,7 @@ % ------------------------------------------------------------------- % Name and version information of the main mbs file: %\fi - % \ProvidesFile{cjs-rcs-merlin.mbs}[2023/11/29 v1.0 (VG, PWD, AO, DPC)] + % \ProvidesFile{cjs-rcs-merlin.mbs}[2024/07/30 v1.1a (VG, PWD, AO, DPC)] %\iffalse %</!tail> %<*a&!a> @@ -92,7 +92,7 @@ %% Configuration of the glossary \addto\extrasenglish{% - \def\glossaryname{Version history}} + \def\glossaryname{History of changes}} \GlossaryPrologue{\section*{\glossaryname}% \addcontentsline{toc}{section}{\glossaryname}} \setlength{\GlossaryMin}{5cm} @@ -133,7 +133,6 @@ % the main file.} % \changes{1.0}{2023-11-29}{First official release distributed through % CTAN.} -% \changes{1.1}{2024-07-14}{No changes to the master bibliographic style.} % % \title[Master bibliographic style file \filename]{% % Master bibliographic style file \\ diff --git a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.pdf b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.pdf Binary files differindex 1cc15b18c7..79fddb7248 100644 --- a/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.pdf +++ b/macros/latex/contrib/cjs-rcs-article/cjs-rcs-merlin.pdf diff --git a/macros/latex/contrib/dashrulex/README.md b/macros/latex/contrib/dashrulex/README.md index 2987c253ce..3e81605ffc 100644 --- a/macros/latex/contrib/dashrulex/README.md +++ b/macros/latex/contrib/dashrulex/README.md @@ -1,5 +1,5 @@ # The `dashrulex` package -Draw dashed rules (v1.01) +Draw dashed rules (v1.01a) ## Abstract The `dashrulex` package provides a flexible solution for drawing dashed rules in the body, and currently provides two commands `\hdashrule` and `\hanyrule`. It's written in LaTeX3 and can be used as an alternative to the `dashrule` package. diff --git a/macros/latex/contrib/dashrulex/dashrulex.pdf b/macros/latex/contrib/dashrulex/dashrulex.pdf Binary files differindex 901372004e..f97a5ef302 100644 --- a/macros/latex/contrib/dashrulex/dashrulex.pdf +++ b/macros/latex/contrib/dashrulex/dashrulex.pdf diff --git a/macros/latex/contrib/dashrulex/dashrulex.sty b/macros/latex/contrib/dashrulex/dashrulex.sty index 5e44914218..090cfe2931 100644 --- a/macros/latex/contrib/dashrulex/dashrulex.sty +++ b/macros/latex/contrib/dashrulex/dashrulex.sty @@ -1,91 +1,91 @@ -%
-% ***************** THE DASHRULEX PACKAGE *****************
-%
-% Copyright (C) 2024 by Qu Yi <toquyi@163.com>
-%
-% This work may be distributed and/or modified under the
-% conditions of the CC-BY 4.0 License.
-% The latest version of this license is in
-% https://creativecommons.org/licenses/by/4.0/legalcode
-\NeedsTeXFormat{LaTeX2e}[2012/02/12]
-\RequirePackage{xparse}
-\ProvidesExplPackage{dashrulex}{2024/07/16}{1.01}
- {Draw dashed rules}
-\DeclareDocumentCommand{\hdashrule}{O{0pt}O{x}mmm}
- {
- \tl_if_blank:nTF {#5}
- { \rule[#1]{#3}{#4} }
- {
- \mbox{}
- \use:c { #2leaders }
- \hbox:n
- {
- \clist_map_inline:nn {#5}
- { \drx@parse@dash{#1}{#4}{##1} }
- }
- \skip_horizontal:n {#3}
- \mbox{}
- }
- }
-\NewDocumentCommand{\drx@parse@dash}
- {mm>{\SplitArgument{1}{|}}m}
- {\drx@parse@dash@inner{#1}{#2}#3}
-\cs_set_protected:Npn \drx@parse@dash@inner #1#2#3#4
- {
- \IfNoValueTF{#4}
- {\vrulemod[#1]{#3}{#2}\skip_horizontal:n {#3}}
- {\vrulemod[#1]{#3}{#2}\skip_horizontal:n {#4}}
- }
-\NewDocumentCommand{\hanyrule}{O{x}mm}
- {
- \mbox{}
- \use:c { #1leaders }
- \hbox:n { \clist_map_inline:nn {#3} {##1} }
- \skip_horizontal:n {#2}
- \mbox{}
- }
-
-\int_new:N \l__drx_vrule_counter_int
-\int_set:Nn \l__drx_vrule_counter_int { 1 }
-\dim_new:N \l__drx_vrule_height_dim
-\tl_new:N \l__drx_tmpa_tl
-\cs_new_protected:Npn \drx@step@counter@height #1
- {
- \int_incr:N \l__drx_vrule_counter_int
- \dim_add:Nn \l__drx_vrule_height_dim {#1}
- }
-\NewDocumentCommand{\vrulemod}{O{0pt}oomm}
- {
- \group_begin:
- \IfValueT{#2}
- {
- \tl_set:Nn \l__drx_tmpa_tl { [#2] }
- \IfValueT{#3}{\tl_put_right:Nn \l__drx_tmpa_tl { [#3] }}
- }
- \exp_last_unbraced:Nnf
- \raisebox{#1}{\l__drx_tmpa_tl}
- {
- \clist_map_inline:nn {#5}
- {
- \int_compare:nNnTF { \l__drx_vrule_counter_int } > { 1 }
- {
- \int_if_even:nTF { \l__drx_vrule_counter_int }
- { \drx@step@counter@height{##1} }
- {
- \tex_kern:D -#4
- \exp_args:NV
- \raisebox\l__drx_vrule_height_dim{\rule{#4}{##1}}
- \drx@step@counter@height{##1}
- }
- }
- {
- \rule{#4}{##1}
- \drx@step@counter@height{##1}
- }
- }
- }
- \group_end:
- }
-\endinput
-%
+% +% ***************** THE DASHRULEX PACKAGE ***************** +% +% Copyright (C) 2024 by Qu Yi <toquyi@163.com> +% +% This work may be distributed and/or modified under the +% conditions of the CC-BY 4.0 License. +% The latest version of this license is in +% https://creativecommons.org/licenses/by/4.0/legalcode +\NeedsTeXFormat{LaTeX2e}[2012/02/12] +\RequirePackage{xparse} +\ProvidesExplPackage{dashrulex}{2024/07/18}{1.01a} + {Draw dashed rules} +\DeclareDocumentCommand{\hdashrule}{O{0pt}O{x}mmm} + { + \tl_if_blank:nTF {#5} + { \rule[#1]{#3}{#4} } + { + \mbox{} + \use:c { #2leaders } + \hbox:n + { + \clist_map_inline:nn {#5} + { \drx@parse@dash{#1}{#4}{##1} } + } + \skip_horizontal:n {#3} + \mbox{} + } + } +\NewDocumentCommand{\drx@parse@dash} + {mm>{\SplitArgument{1}{|}}m} + {\drx@parse@dash@inner{#1}{#2}#3} +\cs_set_protected:Npn \drx@parse@dash@inner #1#2#3#4 + { + \IfNoValueTF{#4} + {\vrulemod[#1]{#3}{#2}\skip_horizontal:n {#3}} + {\vrulemod[#1]{#3}{#2}\skip_horizontal:n {#4}} + } +\NewDocumentCommand{\hanyrule}{O{x}mm} + { + \mbox{} + \use:c { #1leaders } + \hbox:n { \clist_map_inline:nn {#3} {##1} } + \skip_horizontal:n {#2} + \mbox{} + } + +\int_new:N \l__drx_vrule_counter_int +\int_set:Nn \l__drx_vrule_counter_int { 1 } +\dim_new:N \l__drx_vrule_height_dim +\tl_new:N \l__drx_tmpa_tl +\cs_new_protected:Npn \drx@step@counter@height #1 + { + \int_incr:N \l__drx_vrule_counter_int + \dim_add:Nn \l__drx_vrule_height_dim {#1} + } +\NewDocumentCommand{\vrulemod}{O{0pt}oomm} + { + \group_begin: + \IfValueT{#2} + { + \tl_set:Nn \l__drx_tmpa_tl { [#2] } + \IfValueT{#3}{\tl_put_right:Nn \l__drx_tmpa_tl { [#3] }} + } + \exp_last_unbraced:Nnf + \raisebox{#1}{\l__drx_tmpa_tl} + { + \clist_map_inline:nn {#5} + { + \int_compare:nNnTF { \l__drx_vrule_counter_int } > { 1 } + { + \int_if_even:nTF { \l__drx_vrule_counter_int } + { \drx@step@counter@height{##1} } + { + \tex_kern:D -#4 + \exp_args:NV + \raisebox\l__drx_vrule_height_dim{\rule{#4}{##1}} + \drx@step@counter@height{##1} + } + } + { + \rule{#4}{##1} + \drx@step@counter@height{##1} + } + } + } + \group_end: + } +\endinput +% % End of file `dashrulex.sty'.
\ No newline at end of file diff --git a/macros/latex/contrib/dashrulex/dashrulex.tex b/macros/latex/contrib/dashrulex/dashrulex.tex index d9858c099e..5469fc0c37 100644 --- a/macros/latex/contrib/dashrulex/dashrulex.tex +++ b/macros/latex/contrib/dashrulex/dashrulex.tex @@ -1,100 +1,99 @@ -\documentclass[load-preamble+]{cnltx-doc}
-
-\usepackage{setspace,hologo,enumitem,dashrulex,tikz}
-\usepackage[noto]{newtxmath}
-\setcnltx
- {
- package = dashrulex,
- title = dashrulex,
- version = v1.01,
- date = 2024/07/16,
- authors = Qu Yi,
- info = Draw dashed rules,
- email = toquyi@163.com,
- url = https://github.com/texno3/dashrulex,
- abstract =
- {
- The \pkg*{dashrulex} package provides a flexible solution for drawing dashed rules in the body, and currently provides two commands \cs{hdashrule} and \cs{hanyrule}. It's written in \hologo{LaTeX3} and can be used as an alternative to the \pkg*{dashrule} package.
- },
- color-scheme = blue,
- title-format = \huge\bfseries\scshape,
- listings-options = {numbers = none,gobble = 2,lineskip = 1pt},
- pre-output = {\parindent = 0em\setstretch{1.3}},
- before-skip = \smallskipamount,
- after-skip = \smallskipamount
- }
-\makeatletter
-\newcommand{\splitmeta}[3][\code{,}]{\meta{#2}#1\meta{#3}}
-\newcommand{\newsplitarg}[4][\splitmeta]
- {
- \newcommand{#2}[2]
- {\code{\textcolor{argument}{#3\textnormal{#1{##1}{##2}}#4}}}
- }
-\newcommand{\kvsplit}[3]
- {
- \item\code{\option{#1}\cnltx@isvalue\splitmarg{#2}{#3}}
- \cnltx@checkdefault{\hfill\newline}
- }
-\newsplitarg{\splitoarg}{[}{]}
-\newsplitarg{\splitmarg}{\{}{\}}
-\newsplitarg{\splitdarg}{(}{)}
-\newnote{\newtag}[1]{\textcolor{red}{#1}}
-\renewcommand{\emph}[1]{\textcolor{red}{#1}}
-\renewcommand{\cnltx@write@lastname}{}
-\setlist{nosep,topsep = \smallskipamount}
-\setlist[description,1]{leftmargin = \parindent}
-\setlist[itemize,1]{leftmargin = *}
-\makeatother
-
-\begin{document}
-\section{Preface}
-Sometimes it is necessary to draw dashed rules when writing documents, such as guides in the table of contents and indexes, horizontal lines in headers and footers, and even adding horizontal lines after headings. Macro packages such as \pkg*{dashrule} and \pkg*{nccrules} are available to accomplish this. Considering that \pkg*{dashrule} has not been updated for a long time, \pkg*{dashrulex} rewrites it using \hologo{LaTeX3} syntax and enhances it a bit.
-
-\section{User commands}
-\begin{commands}
- \command{hdashrule}[\oarg{raise}\oarg{leader}\marg{width}\marg{thickness list}\marg{dash rules}]
- The command to draw horizontal dashed rules, based on the \cs{rule} command, and the same as the \cs{rule} command when the \meta{dash rules} are empty. \meta{raise} is the vertical offset of the rule. \meta{leader} is the alignment of the dashed line fill, which can be empty, \code{c}, or \code{x} (the \textcolor{red}{default}), corresponding to the \cs{leaders}, \cs{cleaders}, and \cs{xleaders} commands, respectively. \meta{width} is the length of the dashed line, which can be set to \cs{fill} when used to fill the remaining part of the current text line. \meta{thickness list} is a rule for the height of \textcolor{red}{vertical} lines, separated by \textcolor{red}{commas} and written as \splitmeta{height 1}{height a}\code{,...}, where \meta{height 1} denotes the height of a solid line and \meta{height a} denotes the height of a blank space. \meta{dash rules} stands for \textcolor{red}{horizontal} dashed line rules, which expressed as \splitmeta[\code{|}]{length 1}{length a}\code{,}\splitmeta[\code{|}]{length 2}{length b}\code{,...}, where \meta{length 1} represents the length of the solid line and \meta{length a} represents the length of the blank space, such as \code{5pt|2pt,3pt}, if the blank space is empty, then it is equal to the solid line length.
- \begin{example}
- 1X\rule{2cm}{1pt}x \\
- 2X\hdashrule{2cm}{1pt}{}x \\
- 3X\hdashrule{2cm}{1pt}{1pt}x \\
- 4X\hdashrule{4cm}{1pt}{1pt}x \\
- 5X\hdashrule[0.5ex]{4cm}{1pt}{1pt}x \\
- 6X\hdashrule[0.5ex]{4cm}{1pt}{3mm}x \\
- 7X\hdashrule[0.5ex]{4cm}{1mm}{3mm}x \\
- 8X\hdashrule[0.5ex]{4cm-3mm}{1mm}{3mm}\vrulemod[0.5ex]{3mm}{1mm}x \\
- 9X\hdashrule[0.5ex]{4cm}{1mm}{3mm|3pt}x \\
- 10X\hdashrule[0.5ex]{4cm}{1mm}{3mm|3pt,1mm|2pt}x \\
- 11X\hdashrule[0.5ex]{4cm}{2pt,1pt,1pt}{3mm|3pt,1mm|2pt}x
- \end{example}
- \command{vrulemod}[\oarg{raise}\oarg{height}\oarg{depth}\marg{width}\marg{thickness list}]
- The vertical model used to fill the dashed line. \meta{thickness list} is consistent with the \cs{hdashrule} command, \meta{width} represents the length of the component, and the three optional parameters are consistent with those of the \cs{raisebox} command.
- \command{hanyrule}[\oarg{leader}\marg{width}\marg{symbol list}]
- This command sets the length of the dotted rule and fills it with arbitrary symbols. \meta{symbol list} can be more than one symbol and they are separated by \textcolor{red}{commas}. Symbols are best packed in boxes of a certain length, as spacing between symbols is not provided.
- \begin{example}
- \newcommand{\dblblock}
- {%
- \tikz[color=teal]
- {
- \draw[line width=0.8mm](0mm,1.1mm)--(3mm,1.1mm);
- \draw[line width=0.3mm](0mm,0mm)--(3mm,0mm);
- }%
- }
- 1X\hanyrule[]{5cm}{\makebox[8pt]{$\cdot$}}x \\
- 2X\hanyrule[c]{5cm}{\makebox[8pt]{$\cdot$}}x \\
- 3X\hanyrule[x]{5cm}{\makebox[8pt]{$\cdot$}}x \\
- 4X\hanyrule[x]{5cm}{\makebox[8pt][l]{$\cdot$}}x \\
- 5X\hanyrule[x]{5cm}{\makebox[8pt][r]{$\cdot$}}x \\
- 6X\hanyrule[x]{5cm}{\makebox[8pt]{$\cdot$},\makebox[8pt]{$\circ$}}x \\
- 7X\hanyrule[x]{5cm}{\makebox[5mm]{\vrulemod{3mm}{2pt,1pt,1pt}}}x \\
- 8X\hanyrule[x]{5cm}{\makebox[5mm]{\dblblock}}x
- \end{example}
-\end{commands}
-
-\section{Known issues}
-Currently only horizontal dashed line drawing is supported, with future plans to support vertical dashed lines, and even box dashed borders and so on.
-
-\appendix
-\nocite{*}
-
+\documentclass[load-preamble+]{cnltx-doc} + +\usepackage{setspace,hologo,enumitem,dashrulex,tikz} +\usepackage[noto]{newtxmath} +\setcnltx + { + package = dashrulex, + title = dashrulex, + version = v1.01a, + date = 2024/07/18, + authors = Qu Yi, + info = Draw dashed rules, + email = toquyi@163.com, + url = https://github.com/texno3/dashrulex, + abstract = + { + The \pkg*{dashrulex} package provides a flexible solution for drawing dashed rules in the body, and currently provides two commands \cs{hdashrule} and \cs{hanyrule}. It's written in \hologo{LaTeX3} and can be used as an alternative to the \pkg*{dashrule} package. + }, + color-scheme = blue, + listings-options = {numbers = none,gobble = 2,lineskip = 1pt}, + pre-output = {\parindent = 0em\setstretch{1.3}}, + before-skip = \smallskipamount, + after-skip = \smallskipamount + } +\makeatletter +\newcommand{\splitmeta}[3][\code{,}]{\meta{#2}#1\meta{#3}} +\newcommand{\newsplitarg}[4][\splitmeta] + { + \newcommand{#2}[2] + {\code{\textcolor{argument}{#3\textnormal{#1{##1}{##2}}#4}}} + } +\newcommand{\kvsplit}[3] + { + \item\code{\option{#1}\cnltx@isvalue\splitmarg{#2}{#3}} + \cnltx@checkdefault{\hfill\newline} + } +\newsplitarg{\splitoarg}{[}{]} +\newsplitarg{\splitmarg}{\{}{\}} +\newsplitarg{\splitdarg}{(}{)} +\newnote{\newtag}[1]{\textcolor{red}{#1}} +\renewcommand{\emph}[1]{\textcolor{red}{#1}} +\renewcommand{\cnltx@write@lastname}{} +\setlist{nosep,topsep = \smallskipamount} +\setlist[description,1]{leftmargin = \parindent} +\setlist[itemize,1]{leftmargin = *} +\makeatother + +\begin{document} +\section{Preface} +Sometimes it is necessary to draw dashed rules when writing documents, such as guides in the table of contents and indexes, horizontal lines in headers and footers, and even adding horizontal lines after headings. Macro packages such as \pkg*{dashrule} and \pkg*{nccrules} are available to accomplish this. Considering that \pkg*{dashrule} has not been updated for a long time, \pkg*{dashrulex} rewrites it using \hologo{LaTeX3} syntax and enhances it a bit. + +\section{User commands} +\begin{commands} + \command{hdashrule}[\oarg{raise}\oarg{leader}\marg{width}\marg{thickness list}\marg{dash rules}] + The command to draw horizontal dashed rules, based on the \cs{rule} command, and the same as the \cs{rule} command when the \meta{dash rules} are empty. \meta{raise} is the vertical offset of the rule. \meta{leader} is the alignment of the dashed line fill, which can be empty, \code{c}, or \code{x} (the \textcolor{red}{default}), corresponding to the \cs{leaders}, \cs{cleaders}, and \cs{xleaders} commands, respectively. \meta{width} is the length of the dashed line, which can be set to \cs{fill} when used to fill the remaining part of the current text line. \meta{thickness list} is a rule for the height of \textcolor{red}{vertical} lines, separated by \textcolor{red}{commas} and written as \splitmeta{height 1}{height a}\code{,...}, where \meta{height 1} denotes the height of a solid line and \meta{height a} denotes the height of a blank space. \meta{dash rules} stands for \textcolor{red}{horizontal} dashed line rules, which expressed as \splitmeta[\code{|}]{length 1}{length a}\code{,}\splitmeta[\code{|}]{length 2}{length b}\code{,...}, where \meta{length 1} represents the length of the solid line and \meta{length a} represents the length of the blank space, such as \code{5pt|2pt,3pt}, if the blank space is empty, then it is equal to the solid line length. + \begin{example} + 1X\rule{2cm}{1pt}x \\ + 2X\hdashrule{2cm}{1pt}{}x \\ + 3X\hdashrule{2cm}{1pt}{1pt}x \\ + 4X\hdashrule{4cm}{1pt}{1pt}x \\ + 5X\hdashrule[0.5ex]{4cm}{1pt}{1pt}x \\ + 6X\hdashrule[0.5ex]{4cm}{1pt}{3mm}x \\ + 7X\hdashrule[0.5ex]{4cm}{1mm}{3mm}x \\ + 8X\hdashrule[0.5ex]{4cm-3mm}{1mm}{3mm}\vrulemod[0.5ex]{3mm}{1mm}x \\ + 9X\hdashrule[0.5ex]{4cm}{1mm}{3mm|3pt}x \\ + 10X\hdashrule[0.5ex]{4cm}{1mm}{3mm|3pt,1mm|2pt}x \\ + 11X\hdashrule[0.5ex]{4cm}{2pt,1pt,1pt}{3mm|3pt,1mm|2pt}x + \end{example} + \command{vrulemod}[\oarg{raise}\oarg{height}\oarg{depth}\marg{width}\marg{thickness list}] + The vertical model used to fill the dashed line. \meta{thickness list} is consistent with the \cs{hdashrule} command, \meta{width} represents the length of the component, and the three optional parameters are consistent with those of the \cs{raisebox} command. + \command{hanyrule}[\oarg{leader}\marg{width}\marg{symbol list}] + This command sets the length of the dotted rule and fills it with arbitrary symbols. \meta{symbol list} can be more than one symbol and they are separated by \textcolor{red}{commas}. Symbols are best packed in boxes of a certain length, as spacing between symbols is not provided. + \begin{example} + \newcommand{\dblblock} + {% + \tikz[color=teal] + { + \draw[line width=0.8mm](0mm,1.1mm)--(3mm,1.1mm); + \draw[line width=0.3mm](0mm,0mm)--(3mm,0mm); + }% + } + 1X\hanyrule[]{5cm}{\makebox[8pt]{$\cdot$}}x \\ + 2X\hanyrule[c]{5cm}{\makebox[8pt]{$\cdot$}}x \\ + 3X\hanyrule[x]{5cm}{\makebox[8pt]{$\cdot$}}x \\ + 4X\hanyrule[x]{5cm}{\makebox[8pt][l]{$\cdot$}}x \\ + 5X\hanyrule[x]{5cm}{\makebox[8pt][r]{$\cdot$}}x \\ + 6X\hanyrule[x]{5cm}{\makebox[8pt]{$\cdot$},\makebox[8pt]{$\circ$}}x \\ + 7X\hanyrule[x]{5cm}{\makebox[5mm]{\vrulemod{3mm}{2pt,1pt,1pt}}}x \\ + 8X\hanyrule[x]{5cm}{\makebox[5mm]{\dblblock}}x + \end{example} +\end{commands} + +\section{Known issues} +Currently only horizontal dashed line drawing is supported, with future plans to support vertical dashed lines, and even box dashed borders and so on. + +\appendix +\nocite{*} + \end{document}
\ No newline at end of file diff --git a/macros/latex/contrib/delimset/README.txt b/macros/latex/contrib/delimset/README.txt index 729b73fbbf..9094d59624 100644 --- a/macros/latex/contrib/delimset/README.txt +++ b/macros/latex/contrib/delimset/README.txt @@ -1,5 +1,5 @@ -delimset v1.1 -Copyright 2016-2018 Niklas Beisert +delimset v2.0 +Copyright 2016-2024 Niklas Beisert delimset is a LaTeX2e package to typeset and declare sets of delimiters in math mode whose size can be adjusted conveniently. diff --git a/macros/latex/contrib/delimset/delimset.dtx b/macros/latex/contrib/delimset/delimset.dtx index 9bd070b5ea..337f1a4271 100644 --- a/macros/latex/contrib/delimset/delimset.dtx +++ b/macros/latex/contrib/delimset/delimset.dtx @@ -1,6 +1,6 @@ % \iffalse % -% delimset.dtx Copyright (C) 2016-2018 Niklas Beisert +% delimset.dtx Copyright (C) 2016-2024 Niklas Beisert % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -18,15 +18,15 @@ % and the derived files delimset.sty and dlmssamp.tex % %<package|sample>\NeedsTeXFormat{LaTeX2e}[1996/12/01] -%<package>\ProvidesPackage{delimset}[2018/12/30 v1.1 convenient size control for delimiter sets] -%<sample>\ProvidesFile{dlmssamp.tex}[2018/12/30 v1.1 sample for delimset] +%<package>\ProvidesPackage{delimset}[2024/07/17 v2.0 convenient size control for delimiter sets] +%<sample>\ProvidesFile{dlmssamp.tex}[2024/07/17 v2.0 sample for delimset] %<*driver> -%\ProvidesFile{delimset.drv}[2018/12/30 v1.1 delimset Reference Manual file] +%\ProvidesFile{delimset.drv}[2024/07/17 v2.0 delimset Reference Manual file] \PassOptionsToClass{10pt,a4paper}{article} \documentclass{ltxdoc} \usepackage[margin=35mm]{geometry} -\usepackage{hyperref} +\usepackage[hyperindex=false]{hyperref} \usepackage{hyperxmp} \usepackage[usenames]{color} \usepackage{amsmath,amsfonts} @@ -36,7 +36,7 @@ \hypersetup{pdfpagemode=UseNone} \hypersetup{pdfsource={}} \hypersetup{pdflang={en-UK}} -\hypersetup{pdfcopyright={Copyright 2016-2018 Niklas Beisert. +\hypersetup{pdfcopyright={Copyright 2016-2024 Niklas Beisert. 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.}} @@ -50,6 +50,8 @@ \newcommand{\secref}[1]{\hyperref[#1]{section \ref*{#1}}} +\def\textvert{\texttt{\char"7C}} + \parskip1ex \parindent0pt \let\olditemize\itemize @@ -67,7 +69,7 @@ {\texttt{nbeisert@itp.phys.ethz.ch}}} \hypersetup{pdfauthor={Niklas Beisert}} \hypersetup{pdfsubject={Manual for the LaTeX2e Package delimset}} -\date{30 December 2018, \textsf{v1.1}} +\date{17 July 2024, \textsf{v2.0}} \maketitle \begin{abstract}\noindent @@ -99,9 +101,10 @@ For example: \\ |(v,w)| &\to (v,w) \\ -|\langle\psi\vert M\vert\psi\rangle| &\to \langle\psi\vert M\vert\psi\rangle +|\langle\psi|\textvert|M|\textvert|\psi\rangle| +&\to \langle\psi\vert M\vert\psi\rangle \\ -|(x^2+px+q)\vert_{-p/2}| &\to (x^2+px+q)\vert_{-p/2} +|(x^2+px+q)|\textvert|_{-p/2}| &\to (x^2+px+q)\vert_{-p/2} \\&\ldots \end{aligned} \] @@ -109,8 +112,9 @@ For example: In order to adjust the size of delimiters, the modifiers |\big|, |\Big|, |\bigg|, |\Bigg| are used. More importantly the construct -{|\left*| \ldots [|\middle*|] \ldots |\right*|} +{|\left*| \ldots [|\middle*|] \ldots |\right*|} adjusts the size of delimiters to the contents: +% \[ \Bigg[\bigg[\Big[\big[[*]\big]\Big]\bigg]\Bigg], \qquad @@ -150,16 +154,17 @@ the size |\big(...\big)|: \] The package \textsf{delimset} provides mechanisms to declare sets of delimiters -whose size can be adjusted conveniently by simple optional parameters. +whose size can be adjusted conveniently by adding simple flag parameters. For example, it provides a general purpose bracket |\brk| which can be used as follows: +% \[ \begin{aligned} |\brk{A\hat{X}+B}|&\to(A\hat{X}+B) \\ |\brk*{A\hat{X}+B}|&\to\mathopen{}\mathclose{\left(A\hat{X}+B\right)} \\ -|\brk2{A\hat{X}+B}|&\to\Bigl(A\hat{X}+B\Bigr) +|\brk^2{A\hat{X}+B}|&\to\Bigl(A\hat{X}+B\Bigr) \\ |\brk!{A\hat{X}+B}|&\to\bigl(A\hat{X}+B\bigr) \end{aligned} @@ -198,16 +203,18 @@ the more difficult it will be to adjust them to obtain a visually acceptable result. The main functionality of the package is based on a -versatile mechanism to specify sets of delimiters, e.g.: +versatile mechanism to specify sets of delimiters, +e.g.: +% \[ \begin{aligned} |\delim<>{ax+b}| &\to\langle ax+b\rangle \\ -|\delimpair{[}{[.],}{[}!{a}{b}| +|\delimpair[{*,}[!{a}{b}| &\to \bigl[a, b\bigr[ \\ -|\delimtriple<\vert\vert>*{\psi}{A^\dagger}{\psi}| +|\delimtriple<|\textvert\textvert|>*{\psi}{A^\dagger}{\psi}| &\to\left\langle\psi\middle\vert A^\dagger\middle\vert \psi\right\rangle \end{aligned} \] @@ -216,14 +223,14 @@ The command |\delim| can be used on the fly, but also in definitions of custom delimiter sets such as: % \[ -|\newcommand{\comm}{\delimpair{[}{[.],}{]}}| +|\newcommand{\comm}{\delimpair{[}{*,}{]}}| \] % Note that the definition of |\comm| does not specify any arguments. They are nevertheless read by the incomplete definition of |\delimpair| -from the what follows |\comm|. +from what follows |\comm|. In particular, this incomplete definition -enables the correct parsing of the optional size specifier, +enables the correct parsing of the optional size specifier flag, e.g.: % \[ @@ -238,7 +245,7 @@ The above definition could be written as follows: \begin{aligned} &|\DeclareMathDelimiterSet{\comm}[2]| \\ -&\qquad |{\selectdelim[l]{[}{#1},{#2}\selectdelim[r]{]}}| +&\qquad |{\selectdeliml{[}{#1},{#2}\selectdelimr{]}}| \end{aligned} \] @@ -260,9 +267,9 @@ of the currently selected math font Unfortunately, it does not account for the currently selected math style. Therefore, the size of delimiters in sub/superscripts -cannot be adjusted appropriately, -\unskip\footnote{Arguably, it is bad typesetting practice -to have too complicated expressions in sub/superscripts.} +cannot be adjusted appropriately +(an arguably better typesetting practice is +to avoid complicated expressions in sub/superscripts in the first place), they come out way too big: % \[ @@ -272,7 +279,7 @@ they come out way too big: This package modifies the definitions of the size modifiers (of \textsf{amsmath}) to automatically adjust to sub/superscripts -(subject to availability): +(subject to availability in the font): % \[ \makeatletter @@ -282,6 +289,7 @@ to automatically adjust to sub/superscripts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Spacing and Math Classes} +\label{sec:spacing} Another shortcoming of the variable-size delimiters is that the spacing is noticeably different from their fixed-size counterparts: @@ -291,12 +299,12 @@ the spacing is noticeably different from their fixed-size counterparts: |\square(ax+b)\square| &\to \square(ax+b)\square \\ -|\square\left(ax+b\right)\square| -&\to \square\left(ax+b\right)\square -\\ |\square\bigl(ax+b\bigr)\square| &\to \square\bigl(ax+b\bigr)\square \\ +|\square\left(ax+b\right)\square| +&\to \square\left(ax+b\right)\square +\\ |\square\left(ax+\big.b\right)\square| &\to \square\left(ax+\big.b\right)\square \end{aligned} @@ -328,8 +336,9 @@ For practical purposes, consistent spacing can only be achieved by a more convenient mechanism. On a related note, it is important to correctly specify -the math class (|\mathopen|\hspace{0pt}/\hspace{0pt}|\mathclose|) +the math class (such as |\mathopen| or |\mathclose|) for the delimiters, for example: +% \[ \begin{aligned} |\big(-1\big)| &\to \big(-1\big) @@ -340,19 +349,23 @@ for the delimiters, for example: % The math class can also make a major difference for intermediate delimiters, e.g.: +% \[ \begin{aligned} -|\bigl\langle\psi\big\vert\psi\bigr\rangle| -&\to \bigl\langle\psi\big\vert\psi\bigr\rangle +|\bigl<\psi\big|\textvert|\psi\bigr>| +&\to \bigl<\psi\big\vert\psi\bigr> \\ -|\bigl\langle\psi\bigm\vert\psi\bigr\rangle| -&\to \bigl\langle\psi\bigm\vert\psi\bigr\rangle +|\bigl<\psi\mathpunct\big|\textvert|\psi\bigr>| +&\to \bigl\langle\psi\mathpunct\big\vert\psi\bigr> \\ -|\bigl\langle\psi\mathbin\big\vert\psi\bigr\rangle| -&\to \bigl\langle\psi\mathbin\big\vert\psi\bigr\rangle +|\bigl<\psi\mathinner\big|\textvert|\psi\bigr>| +&\to \bigl\langle\psi\mathinner\big\vert\psi\bigr> \\ -|\bigl\langle\psi\mathpunct\big\vert\psi\bigr\rangle| -&\to \bigl\langle\psi\mathpunct\big\vert\psi\bigr\rangle +|\bigl<\psi\mathbin\big|\textvert|\psi\bigr>| +&\to \bigl\langle\psi\mathbin\big\vert\psi\bigr> +\\ +|\bigl<\psi\bigm|\textvert|\psi\bigr>| +&\to \bigl\langle\psi\bigm\vert\psi\bigr> \end{aligned} \] % @@ -364,6 +377,67 @@ of the left and right delimiters. It also offers several choices for intermediate delimiters to take the context into account. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Compounds and Broken Lines} + +The mechanism provided by the package requires the delimited expression +to appear as an uninterrupted compound. In particular, the expression cannot +span several lines in a multi-line equation or several columns in a matrix. +The same restriction applies to the elementary |\left| and |\right| construct. +In cases where delimited expressions are torn apart across several blocks, +the delimiters have to be typeset individually. +The package offers a mechanism to display individual delimiters +of a given delimiter set. It also assists in maintaining +the same type and size across blocks. +Being able to display individual delimiters of defined delimiter sets +offers a broad range of (ab)use. + +Individual delimiters of a set can be selected and displayed +by specifying appropriate flags, +for example: +% +\[ +|\brk(|\to{(},\qquad +|\brk)|\to{)} +\] +% +These flags can be combined with the size specifier +or other bracket modifiers, +e.g.: +% +\[ +|\brk^3(|\to{\biggl(},\qquad +|\brk[s]^2)|\to{\Bigr]} +\] +% +This enables to conveniently split delimited expressions over blocks of code, +e.g.: +% +\[ +|\brk[s]^3(\frac{A}{B}|\ldots\Big/\mkern-9mu\Big/\ldots|\frac{C}{D}\brk[s]^3)| +\to +\biggl[\frac{A}{B}\cdots\bigg/\mkern-12mu\bigg/\cdots\frac{C}{D}\biggr] +\] +% +Here, the type and modifiers specifying the delimiter set +are repeated for all individual delimiters. +To simplify such expressions and their maintenance, +the package provides global registers which store +the type and size of delimiters. +With those, the above expression can be abbreviated as: +% +\[ +|\brk[s]^3[|\ldots\big/\mkern-6mu\big/\ldots|\usedelim]| +\quad\text{or}\quad +|\brk[s]^3[|\ldots\big/\mkern-6mu\big/\ldots|\brk]| +\] +% +Here, |\usedelim]|, alternatively |\brk]|, +closes the delimiter set with +the type and options previously specified by |\brk...[|. +For nesting purposes, there also exists a more elaborate +solution using registers, see below. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Philosophy} Semantic typesetting is one of the philosophies behind \LaTeX{}: @@ -435,17 +509,17 @@ Modifier letters can be prepended and appended to adjust their size. % A functionality of the present package not offered by any of the above packages is -to typeset delimiters on the fly, e.g.: +to typeset delimiters on the fly, +e.g.: % \[ -|\delim<\vert>!{\psi}{\psi}| -\to\bigl\langle\psi\big\vert\psi\bigr\rangle +|\delim<|\textvert|>!{\psi}{\psi}| +\to\bigl<\psi\big\vert\psi\bigr> \] % The mechanism to specify the size is leaner in the sense that it uses only a single character and a single command. - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Usage} @@ -457,139 +531,377 @@ If not yet present, the package \textsf{amsmath} will be loaded automatically. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\subsection{Inline Usage} -\label{sec:delimcommands} +\subsection{Delimiter Sets and Presentation Flags} +\label{sec:flags} + +The package provides commands to represent various delimiter sets, +see \secref{sec:inline} and \secref{sec:declare} below. +Their display can be modified systematically by specifying flags. +A delimiter set |\|\emph{name}, e.g.\ |\brk|, is typically invoked by +a sequence like: +% +\[ +|\|\emph{name}\ \emph{flags}\ |{|\emph{expr1}|}||{|\emph{expr2}|}|\ldots +\] +% +where \emph{expr(n)} are the terms to be enclosed by the delimiters +and the optional \emph{flags} adjust the presentation of delimiters. +The \emph{flags} are described as follows: + +First, a size modifier flag controls the size of the delimiters +to be displayed. It can take one of the following values: +% +\[ +\begin{aligned} +|0|&\qquad \text{default size} +\text{ (0.96 times default line height)} +\\ +|!|, |+|, |^1|&\qquad \text{size }|\big| +\text{ (1.2 times default line height)} +\\ +|^2|&\qquad \text{size }|\Big| +\text{ (1.8 times default line height)} +\\ +|^3|&\qquad \text{size }|\bigg| +\text{ (2.4 times default line height)} +\\ +|^4|&\qquad \text{size }|\Bigg| +\text{ (3.0 times default line height)} +\\ +|^|\emph{n}, |^{|\emph{x}|}|&\qquad \text{flexible size adjustment +(\emph{n}=|0|\ldots|9|; \emph{x}: decimal number)} +\\ +|_{|\emph{h}|}|&\qquad \text{adjustment to absolute height \emph{h} (centred)} +\\ +|*|&\qquad \text{variable size }|\left...\right| +\end{aligned} +\] +% +The intended delimiter size is stored as the dimension register: +% +\[ +|\delimsize| +\] +% +It may be used to adjust spacing within the delimiter set +proportional to the size of the delimiters. +Note that the actual size of delimiters may deviate +depending on availability within the given font. +Note further that the size cannot be determined for variable-size delimiters +(`|*|') and thus size |\Big| is assumed for this case. +Note finally that the sub/superscript styles are not taken into +account and |\delimsize| applies to the default case |\textstyle|. +The package also supplies a macro to add horizontal glue +proportional to the intended delimiter size: +% +\[ +|\kerndelim{|\emph{width}|}| +\] +% +Here, \emph{width} is the amount of horizontal glue +in units of mu scaled by the ratio of |\delimsize| +and the current math font height. +The macro does adjust for the selected script style. + +Second, a delimiter selection flag is used to pick out +and display just one individual delimiter within the set. +It can take one of the following values: +% +\[ +\begin{aligned} +|(|&\qquad \text{left delimiter} +\\ +\textvert, |,|&\qquad \text{first intermediate delimiter} +\\ +|)|&\qquad \text{right delimiter} +\\ +|?|\emph{n}&\qquad \text{\emph{n}-th delimiter (starting with |0|: left)} +\end{aligned} +\] + +Third, register flags store are retrieve delimiter +for splitting the across blocks or lines: +% +\[ +\begin{aligned} +|[|&\qquad \text{store delimiter type to register `|.|', +display left delimiter (same as `|>.(|')} +\\ +|]|&\qquad \text{display right delimiter stored in default register `|.|' +(same as `|<.)|')} +\\ +|>|\emph{r}, |>{|\emph{reg}|}|&\qquad \text{store delimiter type +in register \emph{r} or \emph{reg}} +\\ +|<|\emph{r}, |<{|\emph{reg}|}|&\qquad \text{retrieve delimiter type +from register \emph{r} or \emph{reg}} +\end{aligned} +\] +% +A register stores the type of delimiter set (|\|\emph{name}), +the desired size (except for variable size `|*|') +as well as the math class of the compound (`|'|' vs. `|"|', see below). +A stored register can be retrieved and displayed by the macro: +% +\[ +|\usedelim|\,\emph{r}\ \emph{sel} +\quad\text{or}\quad +|\usedelim|\{\emph{reg}\}\emph{sel} +\] +% +Here, \emph{sel} is a flag to select an individual delimiter, see above. + +In addition, there are some general purpose flags: +% +\[ +\begin{aligned} +|.|&\qquad \text{terminates flag processing} +\\ +|:|&\qquad \text{enclose delimiter set in block +(for using total box dimensions)} +\\ +|'|&\qquad \text{render delimiter set as }|\mathopen|\text{ and }|\mathclose| +\\ +|"|&\qquad \text{render delimiter set as }|\mathinner| +\\ +|-|&\qquad \text{display phantom delimiters (for individual delimiters)} +\end{aligned} +\] + +Please note the following: +% +\begin{itemize} +\item +A delimiter selector (including the combined flags `|[|' and `|]|') +terminates flag processing, +therefore all relevant flags must be specified before it. +\item +Parsing also stops with the opening of the first term argument +by means of the opening brace `|{|'. +\item +Parsing can also be terminated manually by specifying the flag `|.|' +(in case the opening brace `|{|' for arguments is missing for whatever reason). +\item +Any other letter or token at the location of \emph{flags} +is interpreted as an unrecognised flag and triggers a compiler error. +For instance, |\brk{x}| must not be abbreviated as |\brk x| +because `|x|' would be interpreted as a flag +(it might be abbreviated as |\brk.x|). +\item +The legacy size modifier flags `|1|' \ldots `|4|' +provided for backward compatibility have the same effect as `|^1|'\ldots`|^4|'. +\item +The phantom delimiter flag `|-|' does not work for variable size. +It is intended for reserving space for individual delimiters +when they are composed manually into sets (e.g.\ across lines). +\item +Technically, individual delimiters can be produced in the variable size version +(even though it may defeat the purpose of the delimiter selection mechanism). +One has to pay attention when using +only the opening or only the closing delimiters from the package +and counterbalancing it by direct code for the opposite side. +This is because `|*(|' and `|*)|' do not directly translate to +|\left|\emph{delim} and |\right|\emph{delim} +due to proper spacing, see \secref{sec:spacing}. +Instead, they translate to: +% +\[ +\begin{aligned} +|*(|&\to|\mathopen{}\mathclose\bgroup\left|\emph{delim} +\\ +|*)|&\to|\right|\emph{delim}|\egroup| +\end{aligned} +\] +% +One should use analogous code to complete the manual variable size block. + +Note that similar restrictions apply to using the flag `|:|' +for block enclosure which uses |\bgroup| and |\egroup| as well. + +As it does not make much sense to use variable-size (`|*|') +and block (`|:|') compounds for individual delimiter selection, +the state of these flags is not stored in the global registers. +\end{itemize} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Inline Declarations} +\label{sec:inline} The package provides three general purpose commands to compose delimiter sets with one, two or three encapsulated expressions: % \[ \begin{aligned} -&|\delim{|\emph{l}|}{|\emph{r}|}|\emph{size}|{|\emph{expr}|}| +&|\delim{|\emph{l}|}{|\emph{r}|}|\emph{flags}|{|\emph{expr}|}| \\ &|\delimpair{|\emph{l}|}{|\emph{m}|}{|\emph{r}|}| -\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| +\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| \\ -&|\delimtriple{|\emph{l}|}{|\emph{m1}|}{|\emph{m2}|}{|\emph{r}|}| -\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}{|\emph{expr3}|}| +&|\delimtriple{|\emph{l}|}{|\emph{m}|}{|\emph{n}|}{|\emph{r}|}| +\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}{|\emph{expr3}|}| \end{aligned} \] % The expression(s) \emph{expr(n)} will be surrounded by the delimiters \emph{l} and \emph{r} and, in the case of more than one expression, -they will be separated by the delimiters \emph{m(n)}: +they will be separated by the delimiters \emph{m}, \emph{n}: +% \[ \emph{l}\ \emph{expr}\ \emph{r}, \qquad \emph{l}\ \emph{expr1}\ \emph{m}\ \emph{expr2}\ \emph{r}, \qquad -\emph{l}\ \emph{expr1}\ \emph{m1}\ \emph{expr2}\ -\emph{m2}\ \emph{expr3}\ \emph{r} +\emph{l}\ \emph{expr1}\ \emph{m}\ \emph{expr2}\ +\emph{n}\ \emph{expr3}\ \emph{r} \] -Here, \emph{l} and \emph{r} have to be -math delimiters (symbols which can be used for |\left| and |\right|) or -the dot `.' for the null delimiter. -The separators \emph{m(n)} can be plain math delimiters as well, but they can -also be compound expression of the form |[|\emph{class}|]|\emph{delim} -where \emph{class} specifies -the intended math class of the delimiter \emph{delim}: +Here, \emph{l}, \emph{r}, \emph{m}, \emph{n} +should be math delimiters \emph{delim} +(elementary symbols which can be used for |\left| and |\right|) +or the dot `|.|' for the null delimiter. +The delimiter set expression can be adjusted in two ways: + +First, size adjustment +for the delimiters \emph{l}, \emph{r}, \emph{m}, \emph{n} +can be suppressed by a starred variant: +% +\[ +|{*|\emph{token}|}| +\qquad\text{or}\qquad +|{*{|\emph{expr}|}}| +\] +% +This allows to use an arbitrary \emph{token} +or a compound expression \emph{expr} in place of a delimiter \emph{delim}. +This is useful when a delimiter character should not adjust in size +(e.g.\ commas), or if a flexible-size version of the character +is not available. One might also use a compound expression +to create a null delimiter with non-zero width +(the width may be specified by |\kerndelim| +to make it proportional to the delimiter size). + +Second, the intended math class +of the intermediate delimiters \emph{m}, \emph{n} +may be adjusted in order to achieve a more appropriate automatic spacing +by using |{[|\emph{class}|]|\emph{delim}|}|. +Here, \emph{class} specifies +the intended math class of the delimiter \emph{delim} +according to: % \[ -\begin{aligned}{} +\begin{aligned} \left.\begin{array}{r} -\emph{delim}\\|{|\emph{delim}|}|\\|{[]|\emph{delim}|}| +\emph{delim}\\|{|\emph{delim}|}| \end{array}\right\} -&\qquad\text{class }|\mathord|\text{ (similar to }|\big|) -\\ -|{[l]|\emph{delim}|}|&\qquad -\text{class }|\mathopen|\text{ (similar to }|\bigl| -\text{, not for use in }|\delim...|) -\\ -|{[r]|\emph{delim}|}|&\qquad -\text{class }|\mathclose|\text{ (similar to }|\bigr| -\text{, not for use in }|\delim...|) +&\qquad +\left\{\begin{array}{l} +\text{no glue for size-adjusted delimiters (same as }|[o]|\text{)} \\ -|{[o]|\emph{delim}|}|&\qquad -\text{class }|\mathopen|\text{ (similar to }|\bigl|) +\text{determined by expression for unadjusted size (}|*|\text{ variant)} +\end{array}\right. \\ -|{[c]|\emph{delim}|}|&\qquad -\text{class }|\mathclose|\text{ (similar to }|\bigr|) -\\ -|{[m]|\emph{delim}|}|&\qquad -\text{class }|\mathrel|\text{ (similar to }|\bigm|) +|{[o]|\emph{delim}|}| +&\qquad +\text{no glue, similar to }|\big|, |\mathord|, |\mathopen|, |\mathclose| \\ |{[p]|\emph{delim}|}|&\qquad -\text{class }|\mathpunct|\text{ (similar to }|\bigp|) +\text{followed by }|\thinmuskip|\text{, similar to }|\bigp|, |\mathpunct| +\\ +|{[i]|\emph{delim}|}|&\qquad +\text{surrounded by }|\thinmuskip|\text{, similar to }|\bigi|, |\mathinner| \\ |{[b]|\emph{delim}|}|&\qquad -\text{class }|\mathbin|\text{ (similar to }|\bigb|) +\text{surrounded by }|\medmuskip|\text{, similar to }|\bigb|, |\mathbin| \\ -|{[.]|\emph{expr}|}|&\qquad -\text{no size adjustment, \emph{expr} can be any expression} +|{[m]|\emph{delim}|}|&\qquad +\text{surrounded by }|\thickmuskip|\text{, similar to }|\bigm|, |\mathrel| \end{aligned} \] -% -Note that the left and right delimiters \emph{l} and \emph{r} effectively -have |[l]| and |[r]| prepended, respectively, -and therefore they must be a plain math delimiter. -Conversely, the immediate delimiters \emph{m(n)} must not -have the |[l]| and |[r]| classes -because the latter must appear precisely once -and they are already taken by \emph{l} and \emph{r}; -use classes |[o]| and |[c]| instead. -The optional size modifier \emph{size} should take one of the following values: +Please note the following: +% +\begin{itemize} +\item +The left and right delimiters \emph{l} and \emph{r} +are assigned to special classes: +They leave no initial and final glue on the enclosed expressions +(same as |\mathopen| and |\mathclose|). +From the outside, the delimiter set appears +either as a combination of |\mathopen|+|\mathclose| (flag `|'|') +or as |\mathinner| (flag `|"|'). +\item +The legacy class |[.]| provided for backward compatibility +specifies delimiters with unadjusted size: +the compound |{[.]|\emph{expr}|}| has the same effect as |{*{|\emph{expr}|}}|. +\item +The legacy class |[c]| provided for backward compatibility +has the same effect as |[o]|. +\item +Unadjusted-size delimiters can be combined with math classes as: +% \[ -\begin{aligned}{} -\emph{empty}, \emph{anything else}, |0|&\qquad \text{default size} -\\ -|!|, |+|, |1|&\qquad \text{size }|\big|\text{ (|!| is preferred)} -\\ -|2|&\qquad \text{size }|\Big| -\\ -|3|&\qquad \text{size }|\bigg| -\\ -|4|&\qquad \text{size }|\Bigg| -\\ -|*|&\qquad \text{variable size }|\left...\right| -\end{aligned} +|{[|\emph{class}|]*|\emph{token}|}| +\qquad\text{or}\qquad +|{[|\emph{class}|]*{|\emph{expr}|}}| \] +% +\item +The opening square bracket `|[|' +takes the dual role of indicating the optional |[|\emph{class}|]| argument. +To avoid conflicts on intermediate delimiters, +opening square bracket delimiters should be encoded as +`|{{[}}|' (for |\delim...|) or `|{[}|' (for |\selectdelim|) +rather than `|[|'. +\end{itemize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Declarations} +\label{sec:declare} The above constructs can be used to define new delimiter commands via: % \[ -|\newcommand{\|\emph{name}|}{\delim...{|\emph{l}|}...{|\emph{r}|}}| +\begin{aligned} +&|\newcommand{\|\emph{name}|}{\delim{|\emph{l}|}{|\emph{r}|}| +\emph{flags}|}| +\\ +&|\newcommand{\|\emph{name}|}{\delimpair{|\emph{l}|}{|\emph{m}|}{|\emph{r}|}| +\emph{flags}|}| +\\ +&|\newcommand{\|\emph{name}|}{\delimtriple{|\emph{l}|}{|\emph{m}|}| +|{|\emph{n}|}{|\emph{r}|}|\emph{flags}|}| +\end{aligned} \] % -Here it makes sense to drop all arguments starting -with the size modifier \emph{size} from the definition. +Here it makes sense to drop all arguments +starting at the optional \emph{flags} argument from the definition. The \TeX{} parsing mechanism will then automatically use the tokens following |\|\emph{name} including the optional size modifier. -If the encapsulated expression(s) are to be passed as explicit arguments -to |\|\emph{name}, one will have to find an alternative way to pass the -optional size argument. +If any of the encapsulated expression(s) are to be passed as +explicit arguments to |\|\emph{name}, +one will have to find an alternative way to pass \emph{flags}. +However, it is possible to predefine \emph{flags} +which can be overridden by further \emph{flags} specified by the user. The above declarations via |\delim...| -should be sufficient for almost all situations. +should be sufficient for most situations. However, there is an even more flexible way to declare delimiter sets: +% \[ -|\DeclareMathDelimiterSet{\|\emph{name}|}[|\emph{narg}|]{|\emph{expr}|}| +|\DeclareMathDelimiterSet{\|\emph{name}|}[|\emph{narg}|]{|\emph{compositor}|}| \] % The syntax of this command is equivalent to the one of |\newcommand|. The difference is that the command |\|\emph{name} first looks -for the optional size modifier \emph{size} as -described above in \secref{sec:delimcommands}. -It remembers the desired size for evaluating the macro \emph{expr}. +for the \emph{flags} argument as +described above in \secref{sec:inline}. +It remembers the desired size for evaluating +the macro expression \emph{compositor}. Then it parses the arguments as if the command was declared by |\newcommand|. -As usual, the macro \emph{expr} contains the command arguments +As usual, the macro expression \emph{compositor} contains the command arguments specified by |#1|, |#2|, \ldots. Note that these should be encapsulated in groups |{#1}|, |{#2}|, \ldots, in order to prevent them from overwriting definitions @@ -598,16 +910,108 @@ It should also contain the desired math delimiters specified by: % \[ -|\selectdelim[|\emph{class}|]{|\emph{delim}|}| +\begin{aligned} +&|\selectdeliml|[|*|]|{|\emph{delim}|}| +\\ +&|\selectdelim[|\emph{class}|]|[|*|]|{|\emph{delim}|}| +\\ +&|\selectdelimr|[|*|]|{|\emph{delim}|}| +\end{aligned} \] % +The three commands must be in proper sequence +starting with |\selectdeliml| followed by arbitrarily many +|\selectdelim| and terminated by |\selectdelimr|. +The math classes \emph{class} and starred variants +are defined analogously to \secref{sec:inline}. Here, the sizes are adjusted automatically -according to the previously specified modifier \emph{size}. -The math classes must be in proper sequence, -i.e.\ the first and last ones must be |l| and |r|, respectively, -while the intermediate ones can be anything by |l| and |r|, -see \secref{sec:delimcommands}. +according to the previously specified modifier. + +Picking out individual delimiters from a set +declared by |\DeclareMathDelimiterSet| +cannot be achieved automatically. +Instead, a selector method may be specified manually (where needed) by: +% +\[ +\begin{aligned} +&|\DeclareMathDelimiterSel{\|\emph{name}|}| +\\ +&| {\selectdeliml{|\emph{l}|}|[|\||or\selectdelim{|\emph{m}|}|\ldots]|}| +\\ +&| {\selectdelimr{|\emph{r}|}}| +\end{aligned} +\] +% +As many intermediate delimiters as needed can be specified +at the end of the first argument; each one must start with `|\||or|'. + +\makeatletter +For example, one might declare a set of double square brackets +$[\kern-0.06\big@size[*]\kern-0.06\big@size]$ using: +\makeatother +% +\[ +\begin{aligned} +&|\DeclareMathDelimiterSet{\dsb}[1]| +\\ +&| {\selectdeliml{[}\kerndelim{-1.75}\selectdelim[o]{[}{#1}| +\\ +&| \selectdelim[o]{]}\kerndelim{-1.75}\selectdelimr{]}}| +\end{aligned} +\] +% +Here, the command |\kerndelim{-1.75}| reduces the spacing +between the two square brackets by approximately 1.75\,mu in default size. +This could be used for: +% +\[ +\makeatletter +|\dsb^4{\dsb^3{\dsb^2{\dsb^1{\dsb{*}}}}}| +\to +\Biggl[\kern-0.20\big@size\Biggl[ +\biggl[\kern-0.16\big@size\biggl[ +\Bigl[\kern-0.12\big@size\Bigl[ +\bigl[\kern-0.08\big@size\bigl[ +[\kern-0.06\big@size[* +]\kern-0.06\big@size] +\bigr]\kern-0.08\big@size\bigr] +\Bigr]\kern-0.12\big@size\Bigr] +\biggr]\kern-0.16\big@size\biggr] +\Biggr]\kern-0.20\big@size\Biggr], +\quad +|\dsb*|\ldots\to +\left[\kern-0.12\big@size\middle[\frac{x}{y} +\middle]\kern-0.12\big@size\right] +\makeatother +\] +% +An appropriate selector method for displaying individual +delimiters reads: +% +\[ +\begin{aligned} +&|\DeclareMathDelimiterSel{\dsb}| +\\ +&| {\selectdeliml{[}\kerndelim{-1.75}\selectdelim[o]{[}}| +\\ +&| {\selectdelim[o]]\kerndelim{-1.75}\selectdelimr{]}}| +\end{aligned} +\] +Finally, towards a very flexible manual composition +of delimiter sets, there is the macro: +% +\[ +|\parsedelimflags{|\emph{compositor}|}{|\emph{selector}|}|\emph{flags} +\] +% +It parses the modifier flags as described in \secref{sec:flags}. +The argument \emph{compositor} is code that displays the +composited delimiter set whereas \emph{selector} is a macro +that displays the delimiter number |\selecteddelim| of the set. +The \emph{flags} follow immediately and should be terminated by +an opening brace `|{|', the terminating flag `|.|' +or a delimiter selection flag. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Default Declarations} @@ -617,30 +1021,34 @@ The package predefines four commonly used sets of delimiters: % \begin{itemize} \item -|\brk[|\emph{type}|]|\emph{size}|{|\emph{expr}|}| represents +|\brk[|\emph{type}|]|\emph{flags}|{|\emph{expr}|}| represents a standard bracket around a single expression \emph{expr}. The type of bracket can be specified by the optional argument \emph{type}: +% \[ \text{\emph{empty} or |[r]|: round }(x),\quad \text{|[s]|: square }[x],\quad \text{|[c]|: curly }\{x\},\quad \text{|[a]|: angle }\langle x\rangle \] +% \item -|\eval[|\emph{type}|]|\emph{size}|{|\emph{expr}|}| represents +|\eval[|\emph{type}|]|\emph{flags}|{|\emph{expr}|}| represents evaluation of a functional expression \emph{expr}. The type of bracket can be specified by the optional argument \emph{type}: +% \[ \text{\emph{empty} or |[v]|: }f(x)\vert_{a},\qquad \text{|[s]|: }[f(x)]_{a}^{b} \] +% \item -|\abs|\emph{size}|{|\emph{expr}|}| represents +|\abs|\emph{flags}|{|\emph{expr}|}| represents the absolute value $\lvert\emph{expr}\rvert$. \item -|\norm|\emph{size}|{|\emph{expr}|}| represents +|\norm|\emph{flags}|{|\emph{expr}|}| represents the norm $\lVert\emph{expr}\rVert$. \end{itemize} % @@ -651,19 +1059,20 @@ The package also defines some extended sets of delimiters as follows: % \begin{itemize} \item -|\pair|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents +|\pair|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| represents a pair(ing) $(\emph{expr1},\emph{expr2})$. \item -|\set|\emph{size}|{|\emph{expr}|}| represents +|\set|\emph{flags}|{|\emph{expr}|}| represents the set $\{\emph{expr}\}$. \item -|\setcond|\emph{size}|{|\emph{expr}|}{|\emph{cond}|}| represents +|\setcond|\emph{flags}|{|\emph{expr}|}{|\emph{cond}|}| represents a set with condition $\{\emph{expr}\vert\emph{cond}\}$. \item -|\intv[|\emph{type}|]|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents +|\intv[|\emph{type}|]|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| represents an interval from \emph{expr1} to \emph{expr2}. The in/\hspace{0pt}exclusion of the bounds can be specified by the optional argument \emph{type}: +% \[ \text{\emph{empty} or |[c]|: closed }[a,b],\qquad \text{|[o]|: open }]a,b[,\qquad @@ -673,28 +1082,35 @@ argument \emph{type}: \text{|[r]|: right-open }[a,b[ \end{array} \] +% \item -|\avg|\emph{size}|{|\emph{expr}|}| represents +|\avg|\emph{flags}|{|\emph{expr}|}| represents some average $\langle\emph{expr}\rangle$. \item -|\corr|\emph{size}|{|\emph{expr}|}| represents +|\corr|\emph{flags}|{|\emph{expr}|}| represents some correlator $\langle\emph{expr}\rangle$. \item -|\comm|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents +|\comm|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| represents the commutator $[\emph{expr1},\emph{expr2}]$. \item -|\acomm|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents +|\acomm|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| represents the anti-commutator $\{\emph{expr1},\emph{expr2}\}$. \item -|\bra|\emph{size}|{|\emph{expr}|}| represents +|\bra|\emph{flags}|{|\emph{expr}|}| represents a bra-vector $\langle\emph{expr}\rvert$ in quantum mechanics. \item -|\ket|\emph{size}|{|\emph{expr}|}| represents +|\ket|\emph{flags}|{|\emph{expr}|}| represents a ket-vector $\lvert\emph{expr}\rangle$ in quantum mechanics. \item -|\setcond|\emph{size}|{|\emph{expr1}|}{|\emph{expr2}|}| represents +|\braket|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| represents a bra-ket contraction $\langle\emph{expr1}\vert\emph{expr2}\rangle$. +\item +|\lfrac[|\emph{type}|]|\emph{flags}|{|\emph{expr1}|}{|\emph{expr2}|}| describes +the linear representation $\emph{expr1}/\emph{expr2}$ of a fraction. +An optional argument \emph{type} taking values |[r]|, |[s]|, |[c]|, |[a]| encloses the +fraction in round, square, curly or angle brackets as for |\brk|. \end{itemize} +% The extended definitions need to be activated by the package option |extdef|, see \secref{sec:packageoptions}. @@ -707,10 +1123,10 @@ or taste of the user, they can be redefined with |\renewcommand|. In addition to the |\bigl|, |\bigr| and |\bigm| commands (as well as their |\Big.|, |\bigg.| and |\Bigg.| counterparts), -the package defines two additional sets |\bigp| and |\bigb| +the package defines three additional sets |\bigp|, |\bigb| and |\bigi| (and counterparts). -Here |\bigp| implies the math class |\mathpunct| -and |\bigb| the class |\mathbin|. +Here |\bigp| implies the math class |\mathpunct|, +|\bigb| the class |\mathbin| and |\bigi| the class |\mathinner|. Furthermore, the package overloads the size calculation in the |\big...| commands to properly account for the math styles in sub/superscripts @@ -722,7 +1138,8 @@ the package option |scriptstyle|, see \secref{sec:packageoptions}. \subsection{Package Options} \label{sec:packageoptions} -Options can be passed to the package by +Options can be passed to the package by: +% \[ |\usepackage[|\emph{opts}|]{delimset}| \qquad @@ -735,17 +1152,17 @@ Here \emph{opts} is a comma-separated list of the available options: % \begin{itemize} \item -|stddef|[|=true|$\vert$|false|] +|stddef|[|=true|\textbar|false|] controls the activation of standard delimiter definitions specified in \secref{sec:defaultcommands}. If no value is given |true| is assumed; initially set to |true|. \item -|extdef|[|=true|$\vert$|false|] +|extdef|[|=true|\textbar|false|] controls the activation of extended delimiter definitions specified in \secref{sec:defaultcommands}. If no value is given |true| is assumed; initially set to |false|. \item -|scriptstyle|[|=true|$\vert$|false|] +|scriptstyle|[|=true|\textbar|false|] controls the overwriting of size modifiers explained in \secref{sec:auxcommands}. If no value is given |true| is assumed; initially set to |true|. @@ -758,7 +1175,7 @@ If no value is given |true| is assumed; initially set to |true|. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Copyright} -Copyright \copyright{} 2016--2018 Niklas Beisert +Copyright \copyright{} 2016--2024 Niklas Beisert This work may be distributed and/or modified under the conditions of the \LaTeX{} Project Public License, either version 1.3 @@ -808,7 +1225,7 @@ distribution, e.g.\ \textit{texmf-root}|/tex/latex/delimset|. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Interaction with CTAN Packages} -The package relies on other packages: +The package is related to other packages available at CTAN: \begin{itemize} \item This package relies on some functionality of the package \textsf{amsmath} @@ -820,24 +1237,63 @@ This package uses the package \textsf{keyval} from the \textsf{graphics} bundle to process optional arguments to the package options. Compatibility with the \textsf{keyval} package has been tested with v1.15 (2014/10/28). +\item +The package \textsf{icomma} modifies the spacing behaviour +of the comma character in math mode +which leads to inadequate spacing when it is used as a middle delimiter. +To achieve proper spacing in sample code, +use |{[p]*,}| rather than |{*,}|. +The extended commands |\intv|, |\comm|, |\acomm| and |\pair| +are compatible with the \textsf{icomma} package +has been tested with v2.0 (2002/03/10). \end{itemize} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\subsection{Feature Suggestions} -% specify width of null delimiter? -% automatic nesting of bracket types? % make optional arguments work for DeclareMathDelimiterSet? -% add pfrac for fraction a/b in text mode +% (must go before parsing, but how to process and react?) +% make unadjusted size have right height +% automatic nesting of bracket types? -> depth stack? % handle cramped style properly (perhaps impossible) -% outer decorations for delimiters e.g. _y<a,b>_x -% freestyle delimiter with size adjustment replacement \size{\rangle}_x %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Revision History} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\paragraph{v2.0:} 2024/07/17 + +\begin{itemize} +\item +option to display individual delimiters +and to store them in global registers across blocks +(columns, lines, etc.) +\item +more general handling of unadjusted-size delimiters +\item +more general size adjustments +\item +added inner math class for intermediate delimiters +\item +added flag to enclose by open/close and inner math class +\item +added flag to display phantom delimiters +\item +selected size accessible by |\delimsize| +and add proportional kerning by |\kerndelim|. +\item +added extended definition |\lfrac| for plain inline fractions +\item +null delimiter now properly has zero width for variable size +\item +internal mechanisms revised +\item +compatibility with \textsf{icomma} package +(thanks to Olivier Godin for pointing out the issue) +\end{itemize} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \paragraph{v1.1:} 2018/12/30 \begin{itemize} @@ -914,11 +1370,11 @@ standard definitions sizes for default brackets: % \begin{macrocode} \[ -\brk0{x},\quad -\brk1{x},\quad -\brk2{x},\quad -\brk3{x},\quad -\brk4{x} +\brk^0{x},\quad +\brk^1{x},\quad +\brk^2{x},\quad +\brk^3{x},\quad +\brk^4{x} \] % \end{macrocode} @@ -935,7 +1391,7 @@ styles for default brackets: nested brackets: % \begin{macrocode} \[ -\brk[c]2{\brk[s]!{\brk{ax+b}x+c}x+d} +\brk[c]^2{\brk[s]!{\brk{ax+b}x+c}x+d} \] % \end{macrocode} @@ -952,7 +1408,7 @@ default absolute value, norm and default evaluations: outer delimiter spacing: % \begin{macrocode} \begin{align*} -&\square\brk0{x}\square,&&\square\brk1{A^k}\square, +&\square\brk^0{x}\square,&&\square\brk^1{A^k}\square, \\ &\square\brk*{x}\square,&&\square\brk*{A^k}\square \end{align*} @@ -969,7 +1425,7 @@ e^{\brk!{ax+b}} delimiter declaration: % \begin{macrocode} \DeclareMathDelimiterSet{\braket}[2] - {\selectdelim[l]<#1\selectdelim|#2\selectdelim[r]>} + {\selectdeliml<#1\selectdelim|#2\selectdelimr>} \[ \braket!{\psi}{\psi}, \quad @@ -988,32 +1444,36 @@ conditional set, alternative layouts: % \begin{macrocode} \[ \delimpair\{{[m]|}\}!{2n}{n\in\mathbb{Z}}, -\qquad +\quad \delimpair\{{[b]|}\}!{2n}{n\in\mathbb{Z}}, -\qquad +\quad +\delimpair\{{[i]|}\}!{2n}{n\in\mathbb{Z}}, +\quad \delimpair\{{[p]|}\}!{2n}{n\in\mathbb{Z}}, -\qquad +\quad \delimpair\{|\}!{2n}{n\in\mathbb{Z}}, -\qquad -\delimpair\{{[.];}\}!{2n}{n\in\mathbb{Z}} +\quad +\delimpair\{{*;}\}!{2n}{n\in\mathbb{Z}} \] conditional set, alternative layouts with variable size: \[ \delimpair\{{[m]|}\}*{2n}{n\in\mathbb{Z}\big.}, -\qquad +\quad \delimpair\{{[b]|}\}*{2n}{n\in\mathbb{Z}\big.}, -\qquad +\quad +\delimpair\{{[i]|}\}*{2n}{n\in\mathbb{Z}\big.}, +\quad \delimpair\{{[p]|}\}*{2n}{n\in\mathbb{Z}\big.}, -\qquad +\quad \delimpair\{|\}*{2n}{n\in\mathbb{Z}\big.}, -\qquad -\delimpair\{{[.];}\}*{2n}{n\in\mathbb{Z}\big.} +\quad +\delimpair\{{*;}\}*{2n}{n\in\mathbb{Z}\big.} \] % \end{macrocode} delimiter definition: % \begin{macrocode} -\newcommand{\comm}{\delimpair[{[.],}]} +\newcommand{\comm}{\delimpair[{*,}]} \[ \comm!{\comm{A}{B}}{C} +\comm!{\comm{B}{C}}{A} @@ -1024,7 +1484,7 @@ delimiter definition: alternative representation: % \begin{macrocode} -\renewcommand{\comm}{\delimpair[{[.];}]} +\renewcommand{\comm}{\delimpair[{*;}]} \[ \comm!{\comm{A}{B}}{C} +\comm!{\comm{B}{C}}{A} @@ -1033,6 +1493,31 @@ alternative representation: \] % \end{macrocode} +display individual delimiters of a set: +% \begin{macrocode} +\renewcommand{\braket}{\delimpair<|>} +\[ +\braket{A}{B} +\to \braket( A \braket| B \braket), +\quad +\braket*( A\big. \braket*| B_{} \braket*), +\quad +\braket^1( A \braket^3| B \braket^2) +\] +% \end{macrocode} + +placing indices before a bracket +(does not work in variable-size mode because +the final size is not available for the enclosed expressions): +% \begin{macrocode} +\DeclareMathDelimiterSet{\quadindex}[5] + {\selectdeliml.^{#2}_{#3}\mathord{}\selectdelim[o][ + {#1}\selectdelim[o]]^{#4}_{#5}\selectdelimr.} +\[ +\quadindex^2{\frac{x}{y}}{1}{2}{3}{4} +\] +% \end{macrocode} + % end of document body: % \begin{macrocode} \end{document} @@ -1057,6 +1542,7 @@ alternative representation: % if not yet present. % \textsf{amsmath} is used for basic delimiter size functionality. % \textsf{keyval} is used for extended options processing. +% % \begin{macrocode} \RequirePackage{amsmath} \RequirePackage{keyval} @@ -1067,6 +1553,7 @@ alternative representation: % % The package has some boolean \textsf{keyval} options % which can be set to |true| or |false|. +% % \begin{macrocode} \newif\ifdlm@std\dlm@stdtrue \newif\ifdlm@ext\dlm@extfalse @@ -1083,7 +1570,7 @@ alternative representation: % \end{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \paragraph{Internal Definitions.} +% \paragraph{Improved Size Adjustments.} % % Overwrite the \textsf{amsmath} command |\bBigg@| % to select the size according to the present math style @@ -1105,102 +1592,269 @@ alternative representation: \fi % \end{macrocode} -% Define punctuation marks (|\bigp|, etc.) -% and binary operators (|\bigb|, etc.). +% Define punctuation marks (|\bigp|, etc.), +% binary operators (|\bigb|, etc.) +% and inner class (|\bigi|, etc.). % % \begin{macrocode} -\newcommand{\bigp}{\mathpunct\big} -\newcommand{\Bigp}{\mathpunct\Big} -\newcommand{\biggp}{\mathpunct\bigg} -\newcommand{\Biggp}{\mathpunct\Bigg} -\newcommand{\bigb}{\mathbin\big} -\newcommand{\Bigb}{\mathbin\Big} -\newcommand{\biggb}{\mathbin\bigg} -\newcommand{\Biggb}{\mathbin\Bigg} +\providecommand{\bigp}{\mathpunct\big} +\providecommand{\Bigp}{\mathpunct\Big} +\providecommand{\biggp}{\mathpunct\bigg} +\providecommand{\Biggp}{\mathpunct\Bigg} +\providecommand{\bigb}{\mathbin\big} +\providecommand{\Bigb}{\mathbin\Big} +\providecommand{\biggb}{\mathbin\bigg} +\providecommand{\Biggb}{\mathbin\Bigg} +\providecommand{\bigi}{\mathinner\big} +\providecommand{\Bigi}{\mathinner\Big} +\providecommand{\biggi}{\mathinner\bigg} +\providecommand{\Biggi}{\mathinner\Bigg} % \end{macrocode} -% Define size selectors for standard size (|dlm@norm|), -% variable size (|dlm@var|). +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \paragraph{Size Adjustment Definitions.} +% +% The macro |\dlm@setvar| enables variable size, +% the macro |\dlm@setsize| sets a fixed size. +% Delimiter sizes are implented by |\dlm@big@|. +% The macro |\kerndelim| adds some kerning proportional +% to the chosen fixed size of the delimiters +% (the spacing is merely an approximation, +% and it does not actually scale for flexible size). +% +% \begin{macrocode} +\newlength\delimsize +\newcommand{\dlm@setvar}{\let\dlm@ifvar\@firstoftwo\delimsize1.5\big@size} +\newcommand{\dlm@setsize}[1]{\let\dlm@ifvar\@secondoftwo% + \delimsize#1\big@size\advance\delimsize by\big@size\delimsize0.5\delimsize} +\newcommand{\dlm@setabssize}[1]{\let\dlm@ifvar\@secondoftwo\delimsize#1\relax} +\newcommand{\dlm@big@}[1]{{\mathchoice% + {\dlm@big@choice{\displaystyle}{1}{#1}}% + {\dlm@big@choice{\textstyle}{1}{#1}}% + {\dlm@big@choice{\scriptstyle}{0.7}{#1}}% + {\dlm@big@choice{\scriptscriptstyle}{0.5}{#1}}}} +\newcommand{\dlm@big@choice}[3]{\@mathmeasure\z@{\nulldelimiterspace\z@}% + {#1\left#3\vcenter to#2\delimsize{}\right.}\box\z@} +\newcommand{\kerndelim}[1]{{\delimsize#1\delimsize% + \mkern\muexpr1.2mu*\delimsize/\big@size\relax}} +% \end{macrocode} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \paragraph{Math Classes Processing.} +% +% Define class selectors for fixed and unadjusted sizes. % % \begin{macrocode} +\newcommand{\dlm@big}[2]{\dlm@plain{#1}{\dlm@big@#2}} +\newcommand{\dlm@plain}[2]{\dlm@class{#1}{\dlm@phantom{#2}}} \newcommand{\dlm@class}[1]{\csname dlm@class@#1\endcsname} -\newcommand{\dlm@class@}{} -\newcommand{\dlm@class@l}{\mathopen} -\newcommand{\dlm@class@r}{\mathclose} -\newcommand{\dlm@class@o}{\mathopen} -\newcommand{\dlm@class@c}{\mathclose} -\newcommand{\dlm@class@m}{\mathrel} -\newcommand{\dlm@class@p}{\mathpunct} -\newcommand{\dlm@class@b}{\mathbin} -\newcommand{\dlm@norm}[1]{\dlm@class{#1}\bBigg@{0.0}} -\newcommand{\dlm@big}[1]{\dlm@class{#1}\big} -\newcommand{\dlm@Big}[1]{\dlm@class{#1}\Big} -\newcommand{\dlm@bigg}[1]{\dlm@class{#1}\bigg} -\newcommand{\dlm@Bigg}[1]{\dlm@class{#1}\Bigg} +\let\dlm@class@\@firstofone +\let\dlm@class@o\mathord +\let\dlm@class@c\mathord +\let\dlm@class@p\mathpunct +\let\dlm@class@i\mathinner +\let\dlm@class@b\mathbin +\let\dlm@class@m\mathrel +% \end{macrocode} + +% Define class selector for variable size. +% The macro |\dlm@var@null| removes the extra space from +% variable-size null delimiters +% (|\left.|, |\middle.| and |\right.| apply the value +% of |\nulldelimiterspace| only at the end of math processing, +% even across blocks). +% The macro |\dlm@var@kern| applies kerning unless in the script styles. +% +% \begin{macrocode} +\newcommand{\dlm@var@null}[1]{\if.#1\kern-\nulldelimiterspace\fi} +\newcommand{\dlm@var@kern}[1]{\nonscript\mkern#1} \newcommand{\dlm@var}[1]{\csname dlm@var@#1\endcsname} -\newcommand{\dlm@var@}[1]{\middle#1} -\newcommand{\dlm@var@l}[1]{\mathopen{}\mathclose\bgroup\left#1} -\newcommand{\dlm@var@r}[1]{\right#1\egroup} -\newcommand{\dlm@var@o}[1]{\mathopen{}\middle#1\mathopen{}} -\newcommand{\dlm@var@c}[1]{\mathclose{}\middle#1\mathclose{}} -\newcommand{\dlm@var@m}[1]{\mathrel{}\middle#1\mathrel{}} -\newcommand{\dlm@var@p}[1]{\middle#1\mathpunct{}} -\newcommand{\dlm@var@b}[1]{\mathbin{}{}\mkern-\medmuskip% - \middle#1\mkern-\medmuskip{}\mathbin{}} +\newcommand{\dlm@var@}[1]{\dlm@var@null#1\middle#1} +\let\dlm@var@o\dlm@var@ +\let\dlm@var@c\dlm@var@ +\newcommand{\dlm@var@p}[1]{\dlm@var@#1\dlm@var@kern\thinmuskip} +\newcommand{\dlm@var@i}[1]{\dlm@var@kern\thinmuskip% + \dlm@var@#1\dlm@var@kern\thinmuskip} +\newcommand{\dlm@var@b}[1]{\dlm@var@kern\medmuskip% + \dlm@var@#1\dlm@var@kern\medmuskip} +\newcommand{\dlm@var@m}[1]{\dlm@var@kern\thickmuskip% + \dlm@var@#1\dlm@var@kern\thickmuskip} +% \end{macrocode} + +% Definitions for selecting outer math class +% |\mathopen|+|\mathclose| vs. |\mathinner|. +% +% \begin{macrocode} +\newcommand{\dlm@open@i}{\mathinner{}\mathclose{}\mathopen} +\newcommand{\dlm@close@i}{\mathclose{}\mathopen{}\mathinner} +\newcommand{\dlm@inner@oc}{\mathopen{}\mathclose} +\newcommand{\dlm@enclose@openclose}{% + \let\dlm@open\mathopen\let\dlm@close\mathclose\let\dlm@inner\dlm@inner@oc} +\newcommand{\dlm@enclose@inner}{% + \let\dlm@open\dlm@open@i\let\dlm@close\dlm@close@i\let\dlm@inner\mathinner} +% \end{macrocode} + +% Definitions for selecting inline vs. block insertion. +% +% \begin{macrocode} +\newcommand{\dlm@inline@l}[1]{\dlm@open{#1}} +\newcommand{\dlm@inline@r}[1]{\dlm@close{#1}} +\newcommand{\dlm@block@l}[1]{\dlm@inner\bgroup\mathopen{#1}} +\newcommand{\dlm@block@r}[1]{\mathclose{#1}\egroup} +\newcommand{\dlm@enclose@inline}{% + \let\dlm@class@l\dlm@inline@l\let\dlm@class@r\dlm@inline@r} +\newcommand{\dlm@enclose@block}{% + \let\dlm@class@l\dlm@block@l\let\dlm@class@r\dlm@block@r} +% \end{macrocode} + +% Opening and closing definitions. +% +% \begin{macrocode} +\newcommand{\dlm@plain@l}[1]{\dlm@class@l{\dlm@phantom{#1}}} +\newcommand{\dlm@plain@r}[1]{\dlm@class@r{\dlm@phantom{#1}}} +\newcommand{\dlm@big@l}[1]{\dlm@plain@l{\dlm@big@#1}} +\newcommand{\dlm@big@r}[1]{\dlm@plain@r{\dlm@big@#1}} +\newcommand{\dlm@var@l}[1]{\dlm@inner\bgroup\dlm@var@null#1\left#1} +\newcommand{\dlm@var@r}[1]{\right#1\dlm@var@null#1\egroup} +\newcommand{\dlm@var@pl}[1]{\dlm@var@l.\mathopen{#1}} +\newcommand{\dlm@var@pr}[1]{\mathclose{#1}\dlm@var@r.} +% \end{macrocode} + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \paragraph{Delimiter Storage.} +% +% Macros for storing and retrieving delimiter types using global registers. +% +% \begin{macrocode} +\newcommand{\dlm@reg@save@init}[1]{% + \xdef#1{\delimsize\the\delimsize}\ifx\dlm@inner\mathinner% + \expandafter\gdef\expandafter#1\expandafter{#1\dlm@enclose@inner}\fi} +\newcommand{\dlm@reg@save}[2]{% + \expandafter\dlm@reg@save@init\csname dlm@reg@init@#1\endcsname% + \expandafter\gdef\csname dlm@reg@sel@#1\endcsname{#2}} +\newcommand{\dlm@reg@init}[1]{\csname dlm@reg@init@#1\endcsname} +\newcommand{\dlm@reg@sel}[1]{\csname dlm@reg@sel@#1\endcsname} % \end{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \paragraph{Optional Size Argument Processing.} +% \paragraph{Flags Processing.} % -% Parse the optional argument following |\delim|\ldots\ -% commands to specify the size of delimiters. -% If the next character in line begins a group (`|{|') it is assumed that -% there is no optional argument. -% Otherwise the selected size is written to |\dlm@arg|. -% Unspecified or unknown sizes default to normal size. -% Finally, execute the code passed as an explicit argument to |\dlm@parsesize|. +% The macro |\parsedelimflags| parses the optional argument(s) +% following |\delim|\ldots\ commands to adjust the presentation. +% Parsing is terminated if the next character in line begins a group (`|{|') +% and the delimiter set is composed by executing argument |#1|. +% A size flag is stored and parsing continues. +% A delimiter selector flag immediately displays the desired delimiter +% by executing argument |#2|. +% Unknown flags produce an error message. % % \begin{macrocode} -\newcommand{\dlm@parsesize}[1]{\@ifnextchar\bgroup% - {\dlm@parsesize@{#1}{0}}{\dlm@parsesize@{#1}}} -\newcommand{\dlm@parsesize@}[2]{\let\dlm@arg\dlm@norm% - \if0#2\let\dlm@arg\dlm@norm\fi% - \if1#2\let\dlm@arg\dlm@big\fi% - \if+#2\let\dlm@arg\dlm@big\fi% - \if!#2\let\dlm@arg\dlm@big\fi% - \if2#2\let\dlm@arg\dlm@Big\fi% - \if3#2\let\dlm@arg\dlm@bigg\fi% - \if4#2\let\dlm@arg\dlm@Bigg\fi% - \if*#2\let\dlm@arg\dlm@var\fi% - #1} +\newcommand{\parsedelimflags}{\dlm@setsize{0.6}\let\dlm@phantom\@firstofone% + \dlm@enclose@openclose\dlm@enclose@inline\dlm@parseflags} +\newcommand{\dlm@parseflags}[2]{% + \@ifnextchar\bgroup{#1}{\dlm@parseflag{#1}{#2}}} +\newcommand{\dlm@parseflag}[3]{\begingroup% + \ifcsname dlm@parseflag@\string#3\endcsname% + \def\dlm@do{\csname dlm@parseflag@\string#3\endcsname{#1}{#2}}\else% + \def\dlm@do{\PackageError{delimset}% + {unknown delimiter set flag `\string#3'}{}#1}% + \fi\expandafter\endgroup\dlm@do} +\newcommand{\dlm@parsedef}[3]{% + \expandafter\def\csname dlm@parseflag@\string#1\endcsname ##1##2#2{#3}} % \end{macrocode} +% % Note that the delimited expression should be contained within a group % such that nested delimiters will not overwrite the outer size definition. +% Flags to adjust size. +% Note that sizes 0 and 1 amount to 0.96 and 1.2 times +% the current empty math box height. +% +% \begin{macrocode} +\dlm@parsedef{!}{}{\dlm@setsize{1}\dlm@parseflags{#1}{#2}} +\dlm@parsedef{+}{}{\dlm@setsize{1}\dlm@parseflags{#1}{#2}} +\dlm@parsedef{0}{}{\dlm@setsize{0.6}\dlm@parseflags{#1}{#2}} +\dlm@parsedef{1}{}{\dlm@setsize{1}\dlm@parseflags{#1}{#2}} +\dlm@parsedef{2}{}{\dlm@setsize{2}\dlm@parseflags{#1}{#2}} +\dlm@parsedef{3}{}{\dlm@setsize{3}\dlm@parseflags{#1}{#2}} +\dlm@parsedef{4}{}{\dlm@setsize{4}\dlm@parseflags{#1}{#2}} +\dlm@parsedef{^}{#3}{\dlm@setsize{#3}\dlm@parseflags{#1}{#2}} +\dlm@parsedef{_}{#3}{\dlm@setabssize{#3}\dlm@parseflags{#1}{#2}} +\dlm@parsedef{*}{}{\dlm@setvar\dlm@parseflags{#1}{#2}} +% \end{macrocode} + +% Flags to select individual delimiters. +% +% \begin{macrocode} +\dlm@parsedef{(}{}{\def\selecteddelim{0}#2} +\dlm@parsedef{|}{}{\def\selecteddelim{1}#2} +\dlm@parsedef{,}{}{\def\selecteddelim{1}#2} +\dlm@parsedef{)}{}{\def\selecteddelim{9}#2} +\dlm@parsedef{?}{#3}{\def\selecteddelim{#3}#2} +% \end{macrocode} + +% Flags to access registers. +% +% \begin{macrocode} +\dlm@parsedef{[}{}{\dlm@reg@save{.}{#2}\def\selecteddelim{0}#2} +\dlm@parsedef{]}{}{\dlm@reg@init{.}\def\selecteddelim{9}\dlm@reg@sel{.}} +\dlm@parsedef{>}{#3}{\dlm@reg@save{#3}{#2}} +\dlm@parsedef{<}{#3}{\dlm@reg@init{#3}\dlm@parseflags% + {\PackageError{delimset}{must select delimiter}{}}{\dlm@reg@sel{#3}}} +% \end{macrocode} + +% Further flags. +% +% \begin{macrocode} +\dlm@parsedef{.}{}{#1} +\dlm@parsedef{:}{}{\dlm@enclose@block\dlm@parseflags{#1}{#2}} +\dlm@parsedef{'}{}{\dlm@enclose@openclose\dlm@parseflags{#1}{#2}} +\dlm@parsedef{"}{}{\dlm@enclose@inner\dlm@parseflags{#1}{#2}} +\dlm@parsedef{-}{}{\let\dlm@phantom\phantom\dlm@parseflags{#1}{#2}} +% \end{macrocode} + % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \paragraph{Size Selection.} +% \paragraph{Delimiter Display.} % -% The command |\selectdelim| reproduces the delimiter in the second argument -% using the math class given in the first argument -% using the previously selected size stored in |\dlm@arg|. -% It appends the class identifier to the command stored in |\dlm@arg| -% and calls the latter with the delimiter as the argument. +% The command |\selectdelim| reproduces the delimiter in argument |#2| +% using the math class given in argument |#1| and the previously stored size. % If the class identifier is `|.|', just return the delimiter argument as is. +% The commands |\selectdeliml| and |\selectdelimr| +% implement the left and right delimiter classes, respectively. +% % \begin{macrocode} -\newcommand{\selectdelim}[2][]{\if.#1#2\else\dlm@arg{#1}#2\fi} +\newcommand{\selectdelim}[1][]{\begingroup\def\dlm@do{\@ifstar{\dlm@plain{#1}}% + {\dlm@ifvar{\dlm@var{#1}}{\dlm@big{#1}}}}% + \if.#1\let\dlm@do\@empty\fi\expandafter\endgroup\dlm@do} +\newcommand{\selectdeliml}{\@ifstar% + {\dlm@ifvar\dlm@var@pl\dlm@plain@l}{\dlm@ifvar\dlm@var@l\dlm@big@l}} +\newcommand{\selectdelimr}{\@ifstar% + {\dlm@ifvar\dlm@var@pr\dlm@plain@r}{\dlm@ifvar\dlm@var@r\dlm@big@r}} % \end{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \paragraph{Declaration of New Delimiter Commands.} % -% Declares a new set of delimiters as the macro `|\|\emph{name}'. -% This macro checks for an optional size argument and stores it in |\dlm@arg|. +% The macro |\DeclareMathDelimiterSet| declares a new set of delimiters +% as the macro `|\|\emph{name}'. +% This macro checks for optional flags and stores the desired size. % It then passes on to a second macro `|\dlm@dcl@|\emph{name}', % which takes the actual code. +% If the flags select an individual delimiter, +% the macro `|\dlm@sel@|\emph{name}' is called instead. +% The latter macro should be defined via |\DeclareMathDelimiterSel| +% such that it produces the desired delimiter number |\selecteddelim|. +% % \begin{macrocode} \newcommand{\DeclareMathDelimiterSet}[1]{\expandafter\dlm@declare% \csname dlm@dcl@\expandafter\@gobble\string#1\endcsname{#1}} -\def\dlm@declare#1#2{\newcommand{#2}{\dlm@parsesize{#1}}\newcommand{#1}} +\def\dlm@declare#1#2{\expandafter\dlm@declare@% + \csname dlm@sel@\expandafter\@gobble\string#2\endcsname{#1}{#2}} +\def\dlm@declare@#1#2#3{\newcommand{#3}{\parsedelimflags{#2}{#1}}% + \providecommand{#1}{}\newcommand{#2}} +\newcommand{\DeclareMathDelimiterSel}[3]{\expandafter\def% + \csname dlm@sel@\expandafter\@gobble\string#1\endcsname% + {\ifcase\selecteddelim#2\else#3\fi}} % \end{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1212,29 +1866,51 @@ alternative representation: % are processed \emph{before} the optional size modifier. % % |\delim| is used for a single delimited expression. +% % \begin{macrocode} -\newcommand{\delim}[2] - {\dlm@parsesize{\dlm@dcl@delim{#1}{#2}}} -\newcommand{\dlm@dcl@delim}[3] - {\selectdelim[l]#1{#3}\selectdelim[r]#2} +\newcommand{\delim}[2]{% + \parsedelimflags{\dlm@dcl@delim{#1}{#2}}{\dlm@sel@delim{#1}{#2}}} +\newcommand{\dlm@dcl@delim}[3]{% + \selectdeliml#1{#3}\selectdelimr#2} +\newcommand{\dlm@sel@delim}[2]{\ifcase\selecteddelim\selectdeliml#1% + \else\selectdelimr#2\fi} % \end{macrocode} % |\delimpair| is used for two delimited expressions separated % by an intermediate delimiter. +% % \begin{macrocode} -\newcommand{\delimpair}[3] - {\dlm@parsesize{\dlm@dcl@delimpair{#1}{#2}{#3}}} -\newcommand{\dlm@dcl@delimpair}[5] - {\selectdelim[l]#1{#4}\selectdelim#2{#5}\selectdelim[r]#3} +\newcommand{\delimpair}[3]{% + \parsedelimflags{\dlm@dcl@delimpair{#1}{#2}{#3}}% + {\dlm@sel@delimpair{#1}{#2}{#3}}} +\newcommand{\dlm@dcl@delimpair}[5]{% + \selectdeliml#1{#4}\selectdelim#2{#5}\selectdelimr#3} +\newcommand{\dlm@sel@delimpair}[3]{\ifcase\selecteddelim\selectdeliml#1% + \or\selectdelim#2\else\selectdelimr#3\fi} % \end{macrocode} % |\delimtriple| is used for three delimited expressions separated % by two intermediate delimiters. +% % \begin{macrocode} -\newcommand{\delimtriple}[4] - {\dlm@parsesize{\dlm@dcl@delimtriple{#1}{#2}{#3}{#4}}} -\newcommand{\dlm@dcl@delimtriple}[7] - {\selectdelim[l]#1{#5}\selectdelim#2{#6}\selectdelim#3{#7}\selectdelim[r]#4} +\newcommand{\delimtriple}[4]{% + \parsedelimflags{\dlm@dcl@delimtriple{#1}{#2}{#3}{#4}}% + {\dlm@sel@delimtriple{#1}{#2}{#3}{#4}}} +\newcommand{\dlm@dcl@delimtriple}[7]{% + \selectdeliml#1{#5}\selectdelim#2{#6}\selectdelim#3{#7}\selectdelimr#4} +\newcommand{\dlm@sel@delimtriple}[4]{\ifcase\selecteddelim\selectdeliml#1% + \or\selectdelim#2\or\selectdelim#3\else\selectdelimr#4\fi} +% \end{macrocode} + +% |\usedelim| retrieves a stored delimiter type. +% The argument `|]|' immediately closes the delimiter set +% using the default register. +% Otherwise the desired register must be followed +% by the delimiter selection flag. +% +% \begin{macrocode} +\newcommand{\usedelim}{\@ifnextchar]{\parsedelimflags{}{}}{\parsedelimflags% + {\PackageError{delimset}{must select delimiter}{}}{}<}} % \end{macrocode} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1243,17 +1919,18 @@ alternative representation: % Define some common delimiters (by |providecommand| so as not to % overwrite previously existing commands). % This code is activated only if the package option |stddef| is set to |true|. +% % \begin{macrocode} \ifdlm@std \providecommand{\brk}[1][r]{\begingroup\def\dlm@use{\delim()}% - \if r#1 \def\dlm@use{\delim()}\fi% - \if s#1 \def\dlm@use{\delim[]}\fi% - \if c#1 \def\dlm@use{\delim\{\}}\fi% - \if a#1 \def\dlm@use{\delim<>}\fi% + \if r#1\def\dlm@use{\delim()}\fi% + \if s#1\def\dlm@use{\delim[]}\fi% + \if c#1\def\dlm@use{\delim\{\}}\fi% + \if a#1\def\dlm@use{\delim<>}\fi% \expandafter\endgroup\dlm@use} \providecommand{\eval}[1][v]{\begingroup\def\dlm@use{\delim.\rvert}% - \if v#1 \def\dlm@use{\delim.\rvert}\fi% - \if s#1 \def\dlm@use{\delim[]}\fi% + \if v#1\def\dlm@use{\delim.\rvert}\fi% + \if s#1\def\dlm@use{\delim[]}\fi% \expandafter\endgroup\dlm@use} \providecommand{\abs}{\delim\lvert\rvert} \providecommand{\norm}{\delim\lVert\rVert} @@ -1265,24 +1942,33 @@ alternative representation: % % Define some extended delimiters. % This code is activated only if the package option |extdef| is set to |true|. +% % \begin{macrocode} \ifdlm@ext -\providecommand{\pair}{\delimpair({[.],})} +\providecommand{\pair}{\delimpair({[p]*,})} \providecommand{\set}{\delim\{\}} \providecommand{\setcond}{\delimpair\{|\}} -\providecommand{\intv}[1][c]{\begingroup\def\dlm@use{\delimpair[{[.],}]}% - \if c#1 \def\dlm@use{\delimpair[{[.],}]}\fi% - \if l#1 \def\dlm@use{\delimpair]{[.],}]}\fi% - \if r#1 \def\dlm@use{\delimpair[{[.],}[}\fi% - \if o#1 \def\dlm@use{\delimpair]{[.],}[}\fi% +\providecommand{\intv}[1][c]{\begingroup% + \def\dlm@use{\delimpair[{[p]*,}]}% + \if c#1\def\dlm@use{\delimpair[{[p]*,}]}\fi% + \if l#1\def\dlm@use{\delimpair]{[p]*,}]}\fi% + \if r#1\def\dlm@use{\delimpair[{[p]*,}[}\fi% + \if o#1\def\dlm@use{\delimpair]{[p]*,}[}\fi% \expandafter\endgroup\dlm@use} \providecommand{\avg}{\delim<>} \providecommand{\corr}{\delim<>} -\providecommand{\comm}{\delimpair[{[.],}]} -\providecommand{\acomm}{\delimpair\{{[.],}\}} +\providecommand{\comm}{\delimpair[{[p]*,}]} +\providecommand{\acomm}{\delimpair\{{[p]*,}\}} \providecommand{\bra}{\delim<|} \providecommand{\ket}{\delim|>} \providecommand{\braket}{\delimpair<|>} +\providecommand{\lfrac}[1][]{\begingroup% + \def\dlm@use{\delimpair./.}% + \if r#1\def\dlm@use{\delimpair(/)}\fi% + \if s#1\def\dlm@use{\delimpair[/]}\fi% + \if c#1\def\dlm@use{\delimpair\{/\}}\fi% + \if a#1\def\dlm@use{\delimpair</>}\fi% + \expandafter\endgroup\dlm@use} \fi % \end{macrocode} diff --git a/macros/latex/contrib/delimset/delimset.ins b/macros/latex/contrib/delimset/delimset.ins index daf870b5ff..68e41a7242 100644 --- a/macros/latex/contrib/delimset/delimset.ins +++ b/macros/latex/contrib/delimset/delimset.ins @@ -2,7 +2,7 @@ \input docstrip.tex \keepsilent -% delimset.ins Copyright (C) 2016-2018 Niklas Beisert +% delimset.ins Copyright (C) 2016-2024 Niklas Beisert % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -14,7 +14,7 @@ \preamble -Copyright (C) 2016-2018 Niklas Beisert +Copyright (C) 2016-2024 Niklas Beisert This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 diff --git a/macros/latex/contrib/delimset/delimset.pdf b/macros/latex/contrib/delimset/delimset.pdf Binary files differindex b964bea59d..734ebf01db 100644 --- a/macros/latex/contrib/delimset/delimset.pdf +++ b/macros/latex/contrib/delimset/delimset.pdf diff --git a/macros/latex/contrib/doibanner/README.md b/macros/latex/contrib/doibanner/README.md new file mode 100644 index 0000000000..a28fd46abd --- /dev/null +++ b/macros/latex/contrib/doibanner/README.md @@ -0,0 +1,91 @@ +# doibanner + +A LaTeX package to generate DOI banners and links. + +The `doibanner` package allows to generate a banner for a declared [digital +object identifier](https://www.doi.org/the-identifier/what-is-a-doi/) (DOI). +It provides the `\doibanner` macro, which draws the banner using +[`TikZ`](https://www.ctan.org/pkg/tikz) and adds a link via +[`hyperref`](https://www.ctan.org/pkg/hyperref), if desired. Its output can +be scaled by [`adjustbox`](https://www.ctan.org/pkg/adjustbox) and it might +look as follows: + +![_DOI banner generated with `\doibanner`_](./example/doibanner_example.png "Example generated with doibanner") + +Latest release: 2024-07-28 v0.3 + + +## Installation + +Skip this section, if `doibanner` is already provided in your TeX distribution. +You should be able to install it [from the CTAN](https://www.ctan.org/pkg/doibanner) +via your distribution's utility (e.g. the TeX Live Utility). + +### Manual installation + +You can get the package's source code from the +[project repository on Codeberg](https://codeberg.org/Cs137/doibanner). +The repository contains a build script, which allows you to build the required +files for the `doibanner` package and copy them into your _TeX Directory Structure_ +(TDS) using `l3build`. Ensure that `l3build` is installed on your system and run +it from the repository's root directory as follows: + +```bash +l3build install --full +``` + +The `--full` option ensures that all necessary files are built and installed. + +If you do not want to install the package into your TDS, but use it in a +particular LaTeX project, follow the steps listed below. + +1. unpack `doibanner.sty` from the `doibanner.dtx` file + - using `l3build` and the `build.lua` script: `l3build unpack`, __or__ + - directly via the installer file: `pdflatex doibanner.ins` +2. copy the extracted `doibanner.sty` file into the same directory as your LaTeX sources. + + +## Usage + +Please consult the [package documentation](http://mirrors.ctan.org/macros/latex/contrib/doibanner/doibanner.pdf) +for detailed usage information. + +If you have any questions or need assistance, feel free to +[open an issue on the repository](https://codeberg.org/Cs137/doibanner/issues). + + +## Contributing + +Contributions to the `doibanner` package are very welcomed. Feel free to submit +a [pull request (PR)](https://codeberg.org/Cs137/doibanner/pulls), if you would +like to contribute to the project. In case you are unfamiliar with the process, +consult the [forgejo documentation](https://forgejo.org/docs/latest/user/pull-requests-and-git-flow/) +and follow the steps using this repository instead of the `example` repository. + +Create your [pull request (PR)](https://codeberg.org/Cs137/doibanner/pulls) to +inform that you started working on a contribution. Provide a clear description +of your envisaged changes and the motivation behind them, prefix the PR's title +with ``WIP: `` until your changes are finalised. + +All kind of contributions are appreciated, whether they are +bug fixes, new features, or improvements to the documentation. + + +### Contributors + +- [Christian Schreinemachers](https://codeberg.org/Cs137) +- [Marei Peischl](https://chaos.social/@TeXhackse) + + +## Changes + +All notable changes to this project are documented in the file +[`CHANGELOG.md`](https://codeberg.org/Cs137/doibanner/src/branch/main/CHANGELOG.md). + + +## Credits + +This package was created and is maintained by Christian Schreinemachers, (C) 2024. +The source code is hosted on [Codeberg](https://codeberg.org/Cs137/doibanner). +It is subject to the [LaTeX Project Public License 1.3c](https://www.ctan.org/license/lppl1.3). + diff --git a/macros/latex/contrib/doibanner/doibanner.dtx b/macros/latex/contrib/doibanner/doibanner.dtx new file mode 100644 index 0000000000..e004b53e31 --- /dev/null +++ b/macros/latex/contrib/doibanner/doibanner.dtx @@ -0,0 +1,412 @@ +% \iffalse meta-comment +% +% Copyright (C) 2024 Christian Schreinemachers +% +% 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 of all distributions of LaTeX +% version 2008-05-04 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The current maintainer of this work is Christian Schreinemachers. +% +% This work consists of the files +% doibanner.dtx +% doibanner.ins +% README.md +% and the derived files +% doibanner.sty +% doibanner.pdf +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \fi +% \iffalse +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{doibanner} +%<package> [2024-07-28 v0.3 Generate DOI banners and links] +% +%<*driver> +\documentclass[a4paper]{ltxdoc} +\usepackage[% + pdfusetitle,% + hyperindex=false,% + pdfsubject={LaTeX package documentation},% + pdfkeywords={doibanner, latex, documentation}% +]{hyperref} +\usepackage{doibanner} +\usepackage[toc]{multitoc} +\usepackage{geometry} +\usepackage{fancyvrb} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\DoNotIndex{\adjustbox,\begin,\bfseries,\DeclareKeys,\definecolor,\end,\fill, + \fontfamily,\href,\IfBooleanTF,\Large,\NewDocumentCommand,\node, + \ProcessKeyOptions,\RequirePackage,\relax,\selectfont,\SetKeys, + \sfdefault,\tikzstyle} +\setcounter{IndexColumns}{2} +\setlength{\IndexMin}{40ex} +\setlength{\columnseprule}{.4pt} +\addtolength{\oddsidemargin}{2cm} +\addtolength{\textwidth}{-2cm} +\begin{document} + \DocInput{doibanner.dtx} +\end{document} +%</driver> +% \fi +% +% \pagestyle{headings} +% +% \newcommand*{\package}[1]{\textsf{#1}} +% \newcommand*{\opt}[1]{\texttt{#1}} +% \newcommand*{\default}[1]{(default: \opt{#1})} +% +% +% ^^A ----------------------------- +% +% \changes{v0.3}{2024-07-28}{% +% Add package options \opt{width} and \opt{label}, +% fix mistakes, +% improve documentation, +% remove unnecessary dependencies} +% \changes{v0.2}{2024-07-23}{% +% Initial release, +% convert into dtx, +% add documentation, +% add \opt{urlbase} package option} +% \changes{v0.1}{2021/05/09}{Initial version} +% +% \GetFileInfo{doibanner.sty} +% +% +% ^^A ----------------------------- +% +% \title{The \package{doibanner} package} +% \author{Christian Schreinemachers} +% \date{% +% Released \filedate\thanks{% +% \package{doibanner}~\fileversion +% ~(\href{https://codeberg.org/Cs137/doibanner/releases/tag/\fileversion}{source code})}% +% } +% \maketitle +% +% +% ^^A ----------------------------- +% +% \begin{abstract} +% The \package{doibanner} package allows to generate a banner for a declared +% \href{https://www.doi.org/the-identifier/what-is-a-doi/}{digital object identifier} +% (DOI). It provides the \cs{doibanner} macro, which draws the banner using +% \package{TikZ} and adds a link via \package{hyperref}, if desired. Its +% output can be scaled by \package{adjustbox} and it might look as follows: +% \par\medskip\centering{\doibanner*[width=5cm]{xx.xxxx/yyyyyy.zzzzzzzz}} +% \end{abstract} +% +% +% ^^A ----------------------------- +% +% \tableofcontents +% +% +% ^^A ----------------------------- +% +% \section{Introduction} +% ^^A +% I published several documents on \href{https://zenodo.org/}{\emph{Zenodo}}, +% a general-purpose open repository. They offer to register a +% \href{https://www.doi.org/the-identifier/what-is-a-doi/}{digital object identifier} +% (DOI) for an entry and download a banner of it. The latter can be added to +% contents foreseen for the entry, or e.g. when referring to the entry in a +% slide deck. +% +% Since I frequently use such banners in \LaTeX{} documents, I decided to +% create a package that generates a similar banner and includes a link to the +% corresponding URL. Additionally, this package eliminates the need to +% manually download the banner and manage a file that might be used across +% multiple documents. +% +% Due to the motivation, the resulting banner is heavily inspired by the +% design applied in the banner offered by \emph{Zenodo}. It is drawn using +% the \package{tikz} package, a link to its URL can be included with +% \package{hyperref}, and it can be scaled using \package{adjustbox}. +% +% The application of this package is not limited to \emph{Zenodo} +% depositions, it can be used to create a banner for a DOI that can +% be included in any \LaTeX{} document. +% +% +% ^^A ----------------------------- +% +% \section{Usage} +% ^^A +% Load the package in your document's preamble and specify any of the +% options described in the next subsection as follows: +% +% \begin{quote} +% \cs{usepackage}\oarg{option(s)}\{doibanner\} +% \end{quote} +% +% +% ^^A ----------------------------- +% +% \subsection{Options} +% ^^A +% In order to change the default behaviour of this package, declare one +% or more of the options described in this subsection with your desired +% value. +% +% \DescribeMacro{label=\meta{string}} +% \default{DOI} specifies the label (left part) of the DOI banner generated +% by \cs{doibanner}. The widths of the left and right part of the banner +% are fixed and do currently not take the length of the text displayed on +% top into account. Consequently, only a short expression should be declared +% as value for the option \opt{label}. +% +% \DescribeMacro{urlbase=\meta{string}} +% \default{https://doi.org/} specifies the base URL to convert a DOI string +% into its URL, for normal use cases this does not require any adjustment. +% +% \DescribeMacro{width=\meta{dimen}} +% \default{3.6cm} specifies the total width of the DOI banner generated by +% \cs{doibanner}. The widths of the individual parts of the banner are +% fixed and can currently not be changed. +% +% +% ^^A ----------------------------- +% +% \subsection{Macros} +% ^^A +% \subsubsection*{\cs{doibanner}\oarg{dimen}\marg{string}} +% +% A DOI banner can be created using the command \cs{doibanner}, which requires +% a DOI string as argument. Moreover, a \oarg{dimen} option can be defined. +% The latter specifies the banner's width. If it is not declared, the value +% of the \opt{width} package option is taken into account \default{3.6cm}. +% +% \DescribeMacro{\doibanner} +% An execution of \cs{doibanner\{xx.xxxx/yyyyyy.zzzzzzzz\}} results in this +% banner: \doibanner{xx.xxxx/yyyyyy.zzzzzzzz} If a banner with a width of +% let's say 3\,cm is desired, it can be achieved by specifying the macro option +% \opt{width} accordingly (\cs{doibanner}\opt{[width=3cm]\{xx.xxxx/yyyyyy.zzzzzzzz\}}): +% \doibanner[width=3cm]{xx.xxxx/yyyyyy.zzzzzzzz} +% +% \DescribeMacro{\doibanner*} +% The starred version of the command leads to the same banner, but it does +% not contain a link to the DOI's URL: +% \doibanner*{xx.xxxx/yyyyyy.zzzzzzzz} +% +% \subsubsection*{\cs{doiurl}\marg{string}} +% ^^A +% \DescribeMacro{\doiurl} +% An URL is generated by appending the provided \emph{string} to the string +% defined as the package option \opt{urlbase}. The resulting link is labelled +% with the DOI string. +% A call of \cs{doiurl\{xx.xxxx/yyyyyy.zzzzzzzz\}} results in +% \doiurl{xx.xxxx/yyyyyy.zzzzzzzz}. +% +% \DescribeMacro{\doiurl*} +% The command is also available as starred version, which prints the full +% URL instead of the DOI string and does not include a link. Its output for +% the aforementioned example is as follows: +% \doiurl*{xx.xxxx/yyyyyy.zzzzzzzz}. +% +% +% ^^A ----------------------------- +% +% ^^A \section{Known limitations} +% ^^A ^^A +% ^^A \begin{itemize} +% ^^A \item +% ^^A \end{itemize} +% +% +% ^^A ----------------------------- +% +% \MaybeStop{ +% +% \IndexPrologue{% +% \section{Index} +% Numbers written in italic refer to the page where the corresponding entry +% is described; numbers underlined refer to the code line of the definition; +% numbers in roman refer to the code lines where the entry is used. +% } +% \PrintIndex +% +% \GlossaryPrologue{% +% \section{Change History} +% The changes listed in this section aim to provide a brief overview of the +% changes introduced into the package \package{doibanner}. The +% \href{https://codeberg.org/Cs137/doibanner/}{package repository on Codeberg} +% contains a +% \href{https://codeberg.org/Cs137/doibanner/src/branch/main/CHANGELOG.md}{changelog file}, +% consult it to read a detailed description of the changes introduced into +% this package. +% } +% \PrintChanges +% +% } +% +% +% ^^A ----------------------------- +% +% \section{Implementation} +% +% \subsection{Dependencies} +% ^^A +% In order to use \package{doibanner}, the packages +% \href{https://www.ctan.org/pkg/adjustbox}{\package{adjustbox}}, +% \href{https://www.ctan.org/pkg/hyperref}{\package{hyperref}}, and +% \href{https://www.ctan.org/pkg/tikz}{\package{tkiz}} +% are required as package dependencies. +% +% \iffalse +%<*package> +% \fi +% \begin{macrocode} +\RequirePackage{adjustbox} +\RequirePackage{hyperref} +\RequirePackage{tikz} +% \end{macrocode} +% +% +% ^^A ----------------------------- +% +% \subsection{Constants} +% ^^A +% Definition of colours for the banner areas and labels, custom colour +% definitions are currently not supported. +% \begin{macrocode} +\definecolor{leftcolor}{RGB}{82,82,82} +\definecolor{rightcolor}{RGB}{6,119,183} +% +\definecolor{toptextcolor}{RGB}{235,235,235} +\definecolor{bottomtextcolor}{RGB}{59,59,59} +% \end{macrocode} +% ^^A +% Definition of font and colour for the banner's top and bottom text layers. +% \begin{macrocode} +\tikzstyle{toptextstyle} = [ + font=\fontfamily{\sfdefault}\selectfont\bfseries\Large,toptextcolor] +\tikzstyle{bottomtextstyle} = [ + font=\fontfamily{\sfdefault}\selectfont\bfseries\Large,bottomtextcolor] +% \end{macrocode} +% +% +% ^^A ----------------------------- +% +% \subsection{Options} +% ^^A +% The package options are internally available as \cs{@doibanner@}\meta{option}. +% \begin{macrocode} +\DeclareKeys[@doibanner]{ + label.store = \@doibanner@label, + label.usage = load, + urlbase.store = \@doibanner@urlbase, + urlbase.usage = load, + width.store = \@doibanner@width, + width.usage = load, +} +% \end{macrocode} +% +% \subsubsection*{Assignement of default values} +% \begin{macrocode} +\SetKeys[@doibanner]{ + label=DOI, + urlbase=https://doi.org/, + width=3.6cm, +} +% \end{macrocode} +% +% \subsubsection*{Processing of package options} +% \begin{macrocode} +\ProcessKeyOptions[@doibanner]\relax +% \end{macrocode} +% +% +% ^^A ----------------------------- +% +% \subsection{Macros} +% +% \changes{v0.2}{2024-07-23}{Remove \cs{doi} macro} +% +% \begin{macro}{\doiurl} +% \changes{v0.2}{2024-07-23}{Remove trailing space} +% \oarg{dimen}\\ +% The \meta{string} is appended to the package option \opt{urlbase} to +% generate the URL. +% \begin{macrocode} +\NewDocumentCommand\doiurl{s m}{% + \IfBooleanTF#1 + {\@doibanner@urlbase#2}% + {\href{\@doibanner@urlbase#2}{#2}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@doibanner@draw} +% \changes{v0.3}{2024-07-28}{Rename macro, remove top part} +% \oarg{dimen}\marg{string}\\ +% Draw the DOI banner including its \opt{label} and \meta{string}, provide +% \opt{width=\meta{dimen}} to define the banners width as well. +% \begin{macrocode} +\NewDocumentCommand\@doibanner@draw{o m}{% + \adjustbox{#1}{% + \begin{tikzpicture} +% left part + \fill [leftcolor,draw] + (1.5,0) -- + ++(0,.8) {[rounded corners=5] -- + ++(-1.5,0) -- + ++(0,-.8)} -- + cycle + {}; + \node[bottomtextstyle] at (.75,.35) {\@doibanner@label}; + \node[toptextstyle] at (.75,.4) {\@doibanner@label}; +% right part + \fill [rightcolor,draw] + (1.5,0) {[rounded corners=5] -- + ++(6.5,0) -- + ++(0,.8)} -- + ++(-6.5,0) -- + cycle + {}; + \node[bottomtextstyle] at (4.75,.35) {#2}; + \node[toptextstyle] at (4.75,.4) {#2}; + \end{tikzpicture}% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doibanner} +% \changes{v0.3}{2024-07-28}{Add \opt{width} option} +% \changes{v0.2}{2024-07-23}{Remove trailing space} +% \oarg{dimen}\marg{string}\\ +% Display the DOI banner with or without (*) a link to its URL. Specify a +% \oarg{dimen}, if you want a banner width deviating from the one defined +% as \opt{width} package option. +% \begin{macrocode} +\NewDocumentCommand\doibanner{s O{width=\@doibanner@width} m}{% + \IfBooleanTF#1 + {\@doibanner@draw[#2]{#3}}% + {\href{\@doibanner@urlbase#3}{\@doibanner@draw[#2]{#3}}}% +} +% \end{macrocode} +% \end{macro} +% +% \iffalse +%</package> +% \fi +% +% \Finale +\endinput +%% +%% End of file `doibanner.dtx'. + diff --git a/macros/latex/contrib/doibanner/doibanner.ins b/macros/latex/contrib/doibanner/doibanner.ins new file mode 100644 index 0000000000..97cfbb3fbb --- /dev/null +++ b/macros/latex/contrib/doibanner/doibanner.ins @@ -0,0 +1,85 @@ +%% +%% Copyright (C) 2024 Christian Schreinemachers +%% +%% 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 of all distributions of +%% LaTeX version 2008-05-04 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The current maintainer of this work is Christian Schreinemachers. +%% +%% This work consists of the files +%% doibanner.dtx +%% doibanner.ins +%% README.md +%% and the derived files +%% doibanner.sty +%% doibanner.pdf +%% +This work has the LPPL maintenance status `maintained'. + +The current maintainer of this work is Christian Schreinemachers. + +This work consists of the files + doibanner.dtx + doibanner.ins + README.md +and the derived files + doibanner.sty + doibanner.pdf +\input docstrip.tex +\keepsilent + +\preamble + +Copyright (C) 2024 Christian Schreinemachers + +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 of all distributions of LaTeX +version 2008-05-04 or later. + +This work has the LPPL maintenance status `maintained'. + +The current maintainer of this work is + Christian Schreinemachers. + +This work consists of the files + doibanner.dtx + doibanner.ins +and the derived files + doibanner.sty + doibanner.pdf + +\endpreamble +\askforoverwritefalse +\generate{\file{doibanner.sty}{\from{doibanner.dtx}{package}}} + +\obeyspaces +\Msg{****************************************************} +\Msg{* To finish the installation you have to move the *} +\Msg{* following file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* doibanner.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file *} +\Msg{* bib2qr.dtx through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{****************************************************} +\endbatchfile +%% +%% End of file `doibanner.ins'. + diff --git a/macros/latex/contrib/doibanner/doibanner.pdf b/macros/latex/contrib/doibanner/doibanner.pdf Binary files differnew file mode 100644 index 0000000000..546b0c9de1 --- /dev/null +++ b/macros/latex/contrib/doibanner/doibanner.pdf diff --git a/macros/latex/contrib/easybook/README.md b/macros/latex/contrib/easybook/README.md index 72378fef17..a04be06f54 100644 --- a/macros/latex/contrib/easybook/README.md +++ b/macros/latex/contrib/easybook/README.md @@ -1,5 +1,5 @@ # The `easybook` document class -Easily typesetting Chinese theses or books (v2024cs) +Easily typesetting Chinese theses or books (v2024dj) ## Abstract `easybook` is a pure academic template created based on the `ctexbook` book document class. It also has the functions of `book` and `article` document class. Combined with the general framework design of the theses of many universities in China, providing multiple commands and interfaces allows users to easily customize the theses templates. Its basic macro package `easybase` can also be used with `ctex` and standard document classes. diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx index 803ccc09af..30f7860795 100644 --- a/macros/latex/contrib/easybook/easybook.dtx +++ b/macros/latex/contrib/easybook/easybook.dtx @@ -14,7 +14,7 @@ % This work has the LPPL maintenance status `maintained'. %<class|package>\NeedsTeXFormat{LaTeX2e}[2021/11/15] %<*class> -\ProvidesExplClass{easybook}{2024/07/15}{2024cs} +\ProvidesExplClass{easybook}{2024/08/14}{2024dj} {Easily typesetting Chinese theses or books} \bool_new:N \l__eb_compile_draft_bool @@ -301,7 +301,7 @@ %</class> %<*package> \RequirePackage{etoolbox} -\ProvidesExplPackage{easybase}{2024/07/15}{2024cs} +\ProvidesExplPackage{easybase}{2024/08/14}{2024dj} {Easily typesetting Chinese theses or books} \cs_generate_variant:Nn \dim_set:Nn { NV } @@ -313,7 +313,7 @@ \cs_generate_variant:Nn \seq_set_from_clist:Nn { No } \cs_generate_variant:Nn \ctex_define:nn { nx } \cs_generate_variant:Nn \eb_set_hyperref:n { x } -\cs_generate_variant:Nn \eb_at_begin_environment:nn { on } +\cs_generate_variant:Nn \eb_at_begin_environment:nn { o } \cs_generate_variant:Nn \tl_if_novalue:nF { V } \cs_set_protected:Npn \ctex_define:nn #1 @@ -332,7 +332,7 @@ \clist_map_inline:nn {#1} { \AtBeginEnvironment{##1}{#2} } } -\cs_new_protected:Npn \eb_at_end_preamble:n +\cs_set_protected:Npn \ctex_before_end_preamble:n { \BeforeBeginEnvironment{document} } \cs_new_protected:Npn \eb_if_package_loaded:nnF #1#2#3 { @@ -452,9 +452,9 @@ \seq_set_from_clist:Nn \l__eb_module_paths_seq { - tools,font,space, - bib,thmt,toc, - hdr,float,ref,geo + tools,font,space,bib, + thmt,toc,hdr,float, + ref,geo,cap } \seq_map_inline:Nn \l__eb_module_paths_seq { @@ -509,7 +509,6 @@ \ebloadpackage { [text]{spbmark}, - [normalem]{ulem}, [{shortlabels,inline}]{enumitem}, chemformula,siunitx,pifont, geometry,marginnote, @@ -878,7 +877,7 @@ \str_case:nnF {#1} { { bottom } - { \bool_set_true:N \l__eb_fnpara_bottom_bool } + { \PushFntBottom } { flush } { \tl_set:Nn \l__eb_footnote_value_tl { plain } @@ -911,7 +910,6 @@ } } -\bool_new:N \l__eb_fnpara_bottom_bool \tl_new:N \l__eb_fnmarktext_format_tl \tl_new:N \l__eb_fncustom_format_tl \clist_new:N \l__eb_footnote_value_clist @@ -959,7 +957,7 @@ unknown .code:n = \eb_msg_deprecated_option:n { hdr } } -\eb_at_end_preamble:n +\ctex_before_end_preamble:n { \bool_if:NT \l__eb_chap_counter_withpart_bool { \counterwithin*{chapter}{part} } @@ -969,58 +967,91 @@ { page } { \counterwithin*{footnote}{page} } } { \counterwithout*{footnote}{chapter} } - \eb_fnpara_if_pos_bottom: } -\cs_new_protected:Npn \setspread #1 { \linespread{#1}\selectfont } -\cs_new:Npn \eb@ifvoid #1#2#3 { \ifvoid #1#2\else #3\fi } -\cs_new_protected:Npn \eb_fnpara_if_pos_bottom: + +\def\@if@footnotes@TF #1#2 {\ifvoid\footins #2\else #1\fi} +\def\@outputbox@removebskip { - \bool_if:NT \l__eb_fnpara_bottom_bool + \ifx\@textbottom\relax\else + \@outputbox@append + { + \@tempskipa\lastskip + \ifnum\gluestretchorder\@tempskipa>\z@ + \vskip -\@tempskipa + \xdef\@outputbox@reinsertbskip + {\noexpand\@outputbox@append{\vskip\the\@tempskipa}} + \else + \global\let\@outputbox@reinsertbskip\relax + \fi + } + \fi + } +\let\@outputbox@reinsertbskip\relax +\def\@outputbox@append #1 + { + \setbox\@outputbox\vbox { - \IfPackageLoadedTF{footmisc} - {\msg_warning:nn { easybase } { bottom-not-compatible }} + \boxmaxdepth\@maxdepth + \dimen@\dp\@outputbox + \unvbox\@outputbox + #1 + } + } +\def\@outputbox@attachfloats{\@combinefloats} +\NewHook{makecol/footins/before} +\NewHook{makecol/footins/begin} +\def\@outputbox@appendfootnotes + { + \@if@footnotes@TF + { + \UseHook{makecol/footins/before} + \@outputbox@append { - \cs_set:Npn \@makecol - { - \setbox\@outputbox\box\@cclv - \let\@elt\relax - \xdef\@freelist{\@freelist\@midlist} - \global\let\@midlist\@empty - \@combinefloats - \eb@ifvoid\footins{} - { - \setbox\@outputbox\vbox - { - \boxmaxdepth\@maxdepth - \unvbox\@outputbox - \vfill\relax - \vskip\skip\footins - \color@begingroup - \normalcolor\footnoterule - \unvbox\footins - \color@endgroup - } - } - \eb@ifvoid\@kludgeins - {\@makespecialcolbox} - { - \setbox\@outputbox\vbox to\@colht - { - \@texttop\dimen@\dp\@outputbox - \unvbox\@outputbox - \vskip -\dimen@\@textbottom - } - } - \global\maxdepth\@maxdepth - } + \vskip\skip\footins + \UseHook{makecol/footins/begin} + \color@begingroup + \normalcolor + \footnoterule + \@nameuse{pdfcolfoot@current} + \unvbox\footins + \color@endgroup } + }{} + } +\def\@makenormalcolbox + { + \setbox\@outputbox\vbox to\@colht + { + \@texttop + \dimen@\dp\@outputbox + \unvbox\@outputbox + \vskip -\dimen@ + \@textbottom } } -\msg_new:nnn { easybase } { bottom-not-compatible } +\cs_new_protected:Npn \PushFntBottom { - Not~compatible~with~the~'footmisc'~package. \\ - Please~use~the~'bottom'~option~of~'footmisc'~package. + \cs_set:Npn \@makecol + { + \setbox\@outputbox\box\@cclv + \@outputbox@removebskip + \let\@elt\relax + \xdef\@freelist{\@freelist\@midlist} + \global\let\@midlist\@empty + \@outputbox@attachfloats + \@if@footnotes@TF + {\@outputbox@append{\vfill}} + {\@outputbox@reinsertbskip} + \@outputbox@appendfootnotes + \ifvbox\@kludgeins + \@makespecialcolbox + \else + \@makenormalcolbox + \fi + \global\maxdepth\@maxdepth + } } +\@onlypreamble\PushFntBottom \cs_new_protected:Npn \eb_footnote_direct_hang: { @@ -1076,6 +1107,7 @@ \l__eb_fnpara_format_tl{#1} \tl_if_eq:NnT \l__eb_footnote_value_tl { hang } { \par } } +\cs_new_protected:Npn \setspread #1 { \linespread{#1}\selectfont } \clist_map_inline:nn { \@footnotetext,\@mpfootnotetext } { \eb_patch_cmd:Nnn #1 @@ -1091,12 +1123,12 @@ \ctex_at_end_package:nn { footmisc } { \eb_package_date_check:nn { footmisc } { 2022/02/10 } - \boolfalse{FN@setspace} - \ifbool{FN@para}{} + \ifboolexpr{not (bool {FN@para} or bool {FN@sidefn})} { + \boolfalse{FN@setspace} \cs_set_eq:NN \@makefntext \eb@@makefntext \cs_set_eq:NN \@footnotetext \eb@@footnotetext - } + }{} \ifboolexpr { bool {FN@hangfoot} or @@ -1410,29 +1442,32 @@ \ctex_define:nn { tools } { - hyphen-figure .tl_set:N = \l__eb_hyphen_figure_tl, - hyphen-table .tl_set:N = \l__eb_hyphen_table_tl, - hyphen-listing .tl_set:N = \l__eb_hyphen_listing_tl, - hyphen-equation .tl_set:N = \l__eb_hyphen_equation_tl, - hyphen-every .meta:n = + hyphen-figure .tl_set:N = \l__eb_hyphen_figure_tl, + hyphen-table .tl_set:N = \l__eb_hyphen_table_tl, + hyphen-lstlisting .tl_set:N = \l__eb_hyphen_lstlisting_tl, + hyphen-equation .tl_set:N = \l__eb_hyphen_equation_tl, + hyphen-every .meta:n = { - hyphen-figure = {#1},hyphen-table = {#1}, - hyphen-listing = {#1},hyphen-equation = {#1} + hyphen-figure = {#1},hyphen-table = {#1}, + hyphen-lstlisting = {#1},hyphen-equation = {#1} }, - hyphen-every .initial:n = ., - unknown .code:n = \eb_msg_deprecated_option:n { tools } + hyphen-every .initial:n = ., + unknown .code:n = \eb_msg_deprecated_option:n { tools } } -\clist_map_inline:nn - { figure,table,listing,equation } +\AtBeginDocument { - \cs_set:cpn { the#1 } + \clist_map_inline:nn + { figure,table,lstlisting,equation } { - \int_compare:nNnT { \c@chapter } > { 0 } + \cs_set:cpn { the#1 } { - \thechapter - \tl_use:c { l__eb_hyphen_#1_tl } + \int_compare:nNnT { \c@chapter } > { 0 } + { + \thechapter + \tl_use:c { l__eb_hyphen_#1_tl } + } + \int_to_arabic:v { c@#1 } } - \int_to_arabic:v { c@#1 } } } @@ -1471,7 +1506,7 @@ \tl_set:Nn \eb@toc@title@level {#1} \eb_toc_extract_level: }, - level .initial:e = + level .initial:x = { \bool_if:NTF \l__eb_class_mode_book_bool { \exp_not:N \bichapter* } @@ -1614,8 +1649,9 @@ { \protect\numberline{#3}{#4} } } } -\cs_new_protected:Npn \AllotCaptionExt #1#2 +\cs_new_protected:Npn \AssignCaptionExt #1#2 { \tl_set:cn { ext@#1 } {#2} } +\cs_set_eq:NN \AllotCaptionExt \AssignCaptionExt \ctex_define:n { bicontentsname .tl_set:N = \bicontentsname, @@ -1813,6 +1849,8 @@ hang .initial:n = true, pagenumwd .code:n = \contentsmargin{#1}, pagenumwd .initial:n = 1.55em, + fileopen .tl_set:N = \l__eb_fileopen_type_tl, + fileopen .initial:n = once, unknown .code:n = \eb_msg_deprecated_option:n { toc } } @@ -1841,10 +1879,14 @@ } \AddToHook{enddocument/afterlastpage} { - \IfHookEmptyTF{starttoc/after}{} - {\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }} + \tl_if_eq:NnTF \l__eb_fileopen_type_tl { once } + { \iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[*] } } + { + \IfHookEmptyTF{starttoc/after}{} + {\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }} + } } -\cs_set_protected:Npn \AllotPartialExt #1#2 +\cs_set_protected:Npn \AssignPartialExt #1#2 { \tl_if_exist:cTF { ttl@partial#1 } { \msg_warning:nnnn { easybase } { repeated-ptoc } {#1} {#2} } @@ -1854,12 +1896,13 @@ {\ttl@topartial{#1}{##1}{##2}} } } +\cs_set_eq:NN \AllotPartialExt \AssignPartialExt \msg_new:nnn { easybase } { repeated-ptoc } { Local~directory~file~'#2'~of~directory~type~'#1'~is \\ repeatedly~allocated. } -\AllotPartialExt{lol}{pll} +\AssignPartialExt{lol}{pll} \cs_new_protected:Npn \RegisterTitleIfname #1 { @@ -1925,12 +1968,12 @@ } }, subsection = - { tocindent = \bool_if:NTF \l__eb_class_mode_book_bool { 3.8em } { 1.4em } } + { tocindent = \bool_if:NTF \l__eb_class_mode_book_bool { 3.8em } { 1.5em } } } \ctex_at_end_package:nn { imakeidx } { - \RenewDocumentCommand{\printindex}{st+od()} + \RenewDocumentCommand{\printindex}{st++o} { \group_begin: \tl_set_eq:NN \eb@toc@title \indexname @@ -1988,19 +2031,19 @@ \ctex_define:nn { font } { - caption-table .tl_set:N = \l__eb_font_caption_table_tl, - caption-figure .tl_set:N = \l__eb_font_caption_figure_tl, - caption-listing .tl_set:N = \l__eb_font_caption_listing_tl, - caption-every .meta:n = + caption-table .tl_set:N = \l__eb_font_caption_table_tl, + caption-figure .tl_set:N = \l__eb_font_caption_figure_tl, + caption-lstlisting .tl_set:N = \l__eb_font_caption_lstlisting_tl, + caption-every .meta:n = { - caption-table = {#1},caption-figure = {#1}, - caption-listing = {#1} + caption-table = {#1},caption-figure = {#1}, + caption-lstlisting = {#1} }, - caption-every .initial:n = \sffamily\small, - footnote .tl_set:N = \eb@font@footnote, - marginpar .tl_set:N = \marginfont, - marginpar .initial:n = \footnotesize, - unknown .code:n = \eb_msg_deprecated_option:n { font } + caption-every .initial:n = \sffamily\small, + footnote .tl_set:N = \eb@font@footnote, + marginpar .tl_set:N = \marginfont, + marginpar .initial:n = \footnotesize, + unknown .code:n = \eb_msg_deprecated_option:n { font } } \cs_new_protected:Npn \ebaddtofont #1#2 { @@ -2010,13 +2053,13 @@ { \tl_put_right:Nn \l__eb_font_caption_table_tl {#2} } { figure } { \tl_put_right:Nn \l__eb_font_caption_figure_tl {#2} } - { listing } - { \tl_put_right:Nn \l__eb_font_caption_listing_tl {#2} } + { lstlisting } + { \tl_put_right:Nn \l__eb_font_caption_lstlisting_tl {#2} } { every } { \tl_put_right:Nn \l__eb_font_caption_table_tl {#2} \tl_put_right:Nn \l__eb_font_caption_figure_tl {#2} - \tl_put_right:Nn \l__eb_font_caption_listing_tl {#2} + \tl_put_right:Nn \l__eb_font_caption_lstlisting_tl {#2} } { footnote } { \tl_put_right:Nn \eb@font@footnote {#2} } @@ -2045,7 +2088,7 @@ fntspread .initial:n = 1.2, captab-spread .fp_set:N = \l__eb_spread_caption_table_fp, capfig-spread .fp_set:N = \l__eb_spread_caption_figure_fp, - caplst-spread .fp_set:N = \l__eb_spread_caption_listing_fp, + caplst-spread .fp_set:N = \l__eb_spread_caption_lstlisting_fp, caption-spread .meta:n = { captab-spread = {#1},capfig-spread = {#1}, @@ -2085,8 +2128,30 @@ } \AfterPreamble{\skip_set:Nn \abovedisplayshortskip { 0ex plus .1ex }} +\cs_new_protected:Npn \eb@register@cap@options #1 + { + \ctex_define:nn { cap } + { + #1/unknown .code:n = + { + \use:x + { + \exp_not:N \captionsetup[#1] + { \eb_unknown_kv_handle: } + } + }, + #1/unknown .default:V = \c_novalue_tl, + #1 .meta:nn = { ctex/cap/#1 } {##1} + } + } +\cs_new_protected:Npn \RegisterCapOptions #1 + { + \clist_map_function:nN {#1} + \eb@register@cap@options + } +\RegisterCapOptions{table,figure,lstlisting} \clist_map_inline:nn - { table,figure,listing } + { table,figure,lstlisting } { \DeclareCaptionFont{eb@#1@font} { @@ -2104,7 +2169,7 @@ } \captionsetup[table]{font = eb@table@font} \captionsetup[figure]{font = eb@figure@font} -\captionsetup[lstlisting]{font = eb@listing@font} +\captionsetup[lstlisting]{font = eb@lstlisting@font} \ctex_at_end_package:nn { bicaption } { \captionsetup[figure][bi-second]{name = Figure} @@ -2278,6 +2343,9 @@ \listnumberline{#2} \thmtname\thmtifnote{~(\thmtnote)}{} } + \cs_gset:cpn { thmt@contentsline@#2 } + { \thmt@contentslineIfNamed } + \exp_args:Nc \providecommand { p@#2 }[1]{##1} } \ctex_define:nn { thmt } { @@ -2298,7 +2366,7 @@ \theoremstyle{default} \cs_undefine:N \proof \DeclareFloatList{theorem}{loe} - \AllotPartialExt{loe}{ple} + \AssignPartialExt{loe}{ple} \eb_preto_cmd:nn { listoftheorems } { \group_begin: @@ -2409,7 +2477,7 @@ { \exp_args:NV \bibliographystyle \l__eb_bib_both_style_tl } \tl_if_blank:VF \l__eb_bib_cite_style_tl { \exp_args:NV \setcitestyle \l__eb_bib_cite_style_tl } - \NewDocumentCommand{\printbibliography}{st+o} + \NewDocumentCommand{\printbibliography}{st++o} { \group_begin: \tl_set_eq:NN \eb@toc@title \bibname @@ -2457,7 +2525,7 @@ \setcounter{biburllcpenalty}{1} \setcounter{biburlnumpenalty}{1} } -\eb_at_end_preamble:n +\ctex_before_end_preamble:n { \providecommand{\bibname}{\refname} \clist_if_empty:NF \l__eb_bib_datafile_clist @@ -2682,9 +2750,100 @@ lstlistingname = Code } } + +\cs_if_exist:NF \DeclareObjectType + { \RequirePackage{xtemplate} } +\DeclareObjectType{easybook}{0} +\DeclareTemplateInterface{easybook}{cover}{0} + { + content : tokenlist = \c_empty_tl, + beforecode : tokenlist = \c_empty_tl, + aftercode : tokenlist = \c_empty_tl, + align : choice {l,r,c,n} = c + } +\DeclareTemplateCode{easybook}{cover}{0} + { + content = \l__eb_cover_content_tl, + beforecode = \l__eb_cover_before_code_tl, + aftercode = \l__eb_cover_after_code_tl, + align = + { + l = \cs_set_eq:NN \eb_cover_align: \raggedright, + r = \cs_set_eq:NN \eb_cover_align: \raggedleft, + c = \cs_set_eq:NN \eb_cover_align: \centering, + n = \cs_set:Npn \eb_cover_align: { } + } + } + { + \AssignTemplateKeys + \tl_use:N \l__eb_cover_before_code_tl + \group_begin: + \eb_cover_align: + \tl_use:N \l__eb_cover_content_tl + \tex_par:D + \group_end: + \tl_use:N \l__eb_cover_after_code_tl + } +\DeclareInstance{easybook}{top}{cover}{} +\DeclareInstance{easybook}{bottom}{cover}{} +\DeclareInstance{easybook}{middle}{cover} + { + content = + { + \notbool{@titlepage} + { + \renewcommand{\theupfootnote}{\@fnsymbol\c@footnote} + \renewcommand{\thefootnote}{\@fnsymbol\c@footnote} + } + {} + \LARGE\@title\par\vskip 3em + \large + \begin{tabular}[t]{c} + \@author + \end{tabular}\par\vskip 1.5em + \@date + \notbool{@titlepage}{\par\vskip 1.5em}{} + \@thanks + }, + beforecode = + { + \ifbool{@titlepage} + { + \begin{titlepage} + \let\footnotesize\small + \let\footnoterule\relax + \let\footnote\thanks + \null\vfil\vskip 60\p@ + } + {\null\vskip 20\p@} + }, + aftercode = + { + \ifbool{@titlepage} + { + \vfil\null + \end{titlepage} + } + {\thispagestyle{plain}} + \setcounter{footnote}{0} + } + } +\keys_define:nn { eb/cover } + { + title .tl_set:N = \@title, + author .tl_set:N = \@author, + date .tl_set:N = \@date + } +\RenewDocumentCommand{\maketitle}{+O{}} + { + \keys_set:nn { eb/cover } {#1} + \UseInstance{easybook}{top} + \UseInstance{easybook}{middle} + \UseInstance{easybook}{bottom} + } %</package> %<*tcolorbox> -\ProvidesExplFile{eb-tcolorbox.cfg}{2024/07/15}{2024cs} +\ProvidesExplFile{eb-tcolorbox.cfg}{2024/08/14}{2024dj} {Customization of tcolorbox for easybook} \cs_set_protected:Npn \addtotcbstyle #1#2 diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf Binary files differindex d336c3af6d..54a5f7024c 100644 --- a/macros/latex/contrib/easybook/easybook.pdf +++ b/macros/latex/contrib/easybook/easybook.pdf diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex index 2d98d89437..02adc43f5f 100644 --- a/macros/latex/contrib/easybook/easybook.tex +++ b/macros/latex/contrib/easybook/easybook.tex @@ -23,8 +23,8 @@ name = easybook, color-scheme = blue, title = EASYBOOK使用手册, - version = v2024cs, - date = 2024/07/15, + version = v2024dj, + date = 2024/08/14, authors = 瞿毅, info = 简便地排版中文学位论文或书籍, email = toquyi@163.com, @@ -249,8 +249,8 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she cells = {cmd = \pkg*}, cell{1}{3,4} = PaleTurquoise, cell{2}{5} = PaleTurquoise, - cell{3}{2} = PaleTurquoise, cell{4}{5} = PaleTurquoise, + cell{5}{2} = PaleTurquoise, cell{5}{1} = GreenYellow, cell{1}{2} = GreenYellow, cell{3}{1,4} = GreenYellow @@ -259,7 +259,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she enumitem & etoolbox & fancyhdr & geometry & hyperref \\ imakeidx & listings & marginnote & mathtools & multicol \\ pifont & pdfpages & siunitx & spbmark & thmtools \\ - tcolorbox & titletoc & tabularray & ulem & + tcolorbox & titletoc & tabularray & & \end{longtblr} \section{全局选项} @@ -298,6 +298,12 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \setCJKmonofont{FangSong} \newCJKfontfamily[song]\songti{SimSun} \end{ctexexam} + + 如果用 \textsf{Overleaf} 或 \textsf{TeXPage} 等在线平台编译文档,则只有 \code{fandol} 字体可用。使用其它字体可将字体文件上传至项目文件夹,例如上传至 \code{font} 文件夹设置正文和无衬线字体: + \begin{ctexexam} + \setCJKmainfont{simsun.ttc}[Path = ./font/] + \setCJKsansfont{simhei.ttf}[Path = ./font/] + \end{ctexexam} \keychoice{font}{noto,times,times*,ebgaramond,libertine,palatino,\fbox{auto}}\dtag 预置的英文字体相关配置方案如\ref{table:english font} 所示。这些字体已经包含在了 \hologo{TeXLive} 发行版中,所以通常不需要再专门安装。如果您想使用默认的Latin Modern或其它英文字体,可以使用 \code{auto} 选项配合 \pkg*{fontspec} 宏包的相关命令进行设置。 \begin{longtblr} @@ -338,7 +344,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \label{sec:interface options} \begin{cnltxlist} \command{ctexset}[\oarg{模块名}\marg{键值列表}] - \easybook{} 扩展了 \CTeX 宏集 \hologo{LaTeX3} 风格键值的通用控制命令 \cs{ctexset},模块选项同样可用它设置,原有的 \meta{键值列表} 仍然可用。本文档类目前有9个模块用于实现常规的排版功能,如\ref{table:module List} 所示。 + \easybook{} 扩展了 \CTeX 宏集 \hologo{LaTeX3} 风格键值的通用控制命令 \cs{ctexset},模块选项同样可用它设置,原有的 \meta{键值列表} 仍然可用。本文档类目前有10个模块用于实现常规的排版功能,如\ref{table:module List} 所示。 \begin{longtblr} [caption = 模块功能和名称清单,label = table:module List] { @@ -348,8 +354,8 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she } \hyperref[subsec:tools]{工具} & \hyperref[subsec:font]{部件字体} & \hyperref[subsec:space]{间距} & \hyperref[subsec:hyperlinks]{超链接} & \hyperref[subsec:reference]{参考文献} \\ tools & font & space & ref & bib \\ - \hyperref[subsec:theorem]{定理} & \hyperref[subsec:page margins]{页面尺寸} & \hyperref[subsec:header and footer]{页眉页脚} & \hyperref[subsec:catalog]{目录} & \\ - thmt & geo & hdr & toc & + \hyperref[subsec:theorem]{定理} & \hyperref[subsec:page margins]{页面尺寸} & \hyperref[subsec:header and footer]{页眉页脚} & \hyperref[subsec:contents]{目录} & \hyperref[subsec:caption]{图表题注} \\ + thmt & geo & hdr & toc & cap \end{longtblr} \ref{exam:kv setting} 使用\ref{subsec:tools} 介绍的工具模块 \module*{tools} 举例三种键值列表设置方式:1. 各 \meta{模块名} 是统一接口 \cs{ctexset} 的键路径。2. 不同模块还具有单独的接口命令 \cs*{eb}\meta{模块名}\code{\textcolor{cs}{set}}。3. \meta{模块名} 也可以使用 \cs{ctexset} 命令的可选参数设置。路径名与所属下级选项之间可以 \code{/} 或 \code{=} 号分开,斜线 \code{/} 后不能有空格或者换行。 @@ -404,12 +410,14 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \ctexset{tools/figurepath = path1} \ctexset{tools/figurepath = {path2}{path3}} \end{ctexexam} + + 以下几个选项用于设置题注编号的连字符,\code{chapter} 计数器的值大于0时连字符才有意义。若需更改题注编号的输出格式可在正文中重新定义 \cs*{the}\meta{计数器} 命令。 \keyval{hyphen-figure}{图片连字符}\Default{\Marg{.}} 设置图片题注编号的连字符。 \keyval{hyphen-table}{表格连字符}\Default{\Marg{.}} 设置表格题注编号的连字符。 - \keyval{hyphen-listing}{代码连字符}\Default{\Marg{.}} - 设置代码题注编号的连字符。 + \keyval{hyphen-lstlisting}{代码连字符}\Default{\Marg{.}} + 设置代码题注编号的连字符。\pkg*{listings} 宏包的 \option{numberbychapter} 选项失效。 \keyval{hyphen-equation}{公式连字符}\Default{\Marg{.}} 设置公式题注编号的连字符。 \keyval{hyphen-every}{连字符}\Default{\Marg{.}} @@ -472,7 +480,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she 设置表格题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。 \keyval{caption-figure}{字体命令}\Default{\cs*{sffamily}\cs*{small}} 设置图片题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。 - \keyval{caption-listing}{字体命令}\Default{\cs*{sffamily}\cs*{small}} + \keyval{caption-lstlisting}{字体命令}\Default{\cs*{sffamily}\cs*{small}} 设置代码题注的字体,包括字体族、字体系列、字体尺寸和字体形状命令。 \keyval{caption-every}{字体命令}\Default{\cs*{sffamily}\cs*{small}} 同时设置图片、表格和代码题注的字体命令。 @@ -492,7 +500,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \label{subsec:reference} \begin{cnltxlist} \keychoice{backend}{\fbox{bibtex},biblatex} - 参考文献处理后端。选择 \code{bibtex} 时使用传统的 \hologo{BibTeX} 引擎处理参考文献,加载 \pkg*{natbib} 宏包。选择 \code{biblatex} 时使用 \hologo{biber} 引擎,加载 \pkg*{biblatex} 宏包。 + 参考文献处理后端。选择 \code{bibtex} 时使用传统的 \hologo{BibTeX} 引擎处理参考文献,加载 \pkg*{natbib} 宏包。选择 \code{biblatex} 时使用 \hologo{biber} 引擎,加载 \pkg*{biblatex} 宏包。若自动载入参考文献宏包则位于导言区末尾,但在 \pkg*{hyperref} 宏包之前。 \keychoice{bibstyle}{\fbox{numerical},authoryear,\optpath*{other sty}} 参考文献格式使用中国参考文献推荐标准GB/T 7714-2015,对应顺序编码制和著者—出版年制两种风格。若使用其它格式,使用 \hologo{BibTeX} 处理时需确保正确的 \code{bst} 文件,使用 \hologo{biber} 处理可使用 \pkg*{biblatex} 宏包支持的参考文献风格名称。 \keyval{citestyle}{标注风格} @@ -544,11 +552,11 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \keyval{style}{定理样式}\Default{default} 选项的值为使用 \cs{declaretheoremstyle} 命令新定义的定理样式。 - 使用 \cs{declaretheorem} 命令以\ref{exam:new theorem sty} 中的定理样式 \code{fancy} 新建一个定理环境猜想,然后用一个基于 \pkg*{tcolorbox} 宏包的预置彩色盒子 \env{easyboxi} 增加背景: + 使用 \cs{declaretheorem} 命令以\ref{exam:new theorem sty} 中的定理样式 \code{fancy} 新建一个定理环境 \env*{lemma},然后用一个基于 \pkg*{tcolorbox} 宏包的预置彩色盒子 \env{easyboxi} 增加背景: \begin{ctexexam}[labelref = exam:new theorem env] - \declaretheorem[style = fancy,name = 猜想]{caixiang} + \declaretheorem[style = fancy,name = 引理]{lemma} \addtotcbstyle{tc-easyboxi}{colback = GreenYellow} - \tcolorboxenvironment{caixiang}{tc-easyboxi} + \tcolorboxenvironment{lemma}{tc-easyboxi} \end{ctexexam} \command{declaretheoremstyle}[\oarg{键值列表1}\marg{定理样式}\oarg{键值列表2}] 定理样式声明命令,键值列表支持自身以及定理声明命令 \cs{declaretheorem} 的所有选项。可选参数的 \meta{键值列表1} 与 \meta{键值列表2} 等效,其中支持的选项如下: @@ -591,21 +599,21 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \command{listoftheorems}[\sarg\oarg{键值列表}]\default{} \item\key{listoftheorems}{定理目录标题名} \command{settheoremtocline}[\sarg\marg{环境名}\marg{标题定义}]\newtagv{2024bb}% - 对 \pkg*{thmtools} 宏包的定理环境目录命令 \cs{listoftheorems} 进行了适配调整,\ref{subsec:directory command} 和\ref{subsec:catalog} 中的选项机制均可用,但标题定义选项 \option{tocline} 较为特殊,需用 \cs{settheoremtocline} 命令单独设置。在 \meta{标题定义} 中有三个命令 \cs{thmtname}、\cs{thmtenvname} 和 \cs{thmtnote} 分别代表定理名、定理环境名和题注用于排版目录条目。 + 对 \pkg*{thmtools} 宏包的定理环境目录命令 \cs{listoftheorems} 进行了适配调整,\ref{subsec:directory command} 和\ref{subsec:contents} 中的选项机制均可用,但标题定义选项 \option{tocline} 较为特殊,需用 \cs{settheoremtocline} 命令单独设置。在 \meta{标题定义} 中有三个命令 \cs{thmtname}、\cs{thmtenvname} 和 \cs{thmtnote} 分别代表定理名、定理环境名和题注用于排版目录条目。 \end{cnltxlist} \optpath{thmt/}\key{loeskip}{弹性长度}\Default{10pt} 定理目录中每章第一个条目上方增加的垂直距离。与 \CTeX 的表格和图片目录中每章间的条目距离选项 \option*{lotskip} 和 \option*{lofskip} 类似,在 \cls*{article} 模式中此选项失效。 \command{thmtifnote}[\marg{存在题注代码}\marg{不存在题注代码}] - 如果标题没题注即定理环境不用可选参数,则标题不加入定理目录,这是默认且合理的行为。若需要将无题注的标题加入目录可将 \meta{环境名} 加入目录风格的 \option{show} 选项或使用 \cs*{settheoremtocline}\code{*} 命令。是否存在题注需要在 \meta{标题定义} 中使用 \cs{thmtifnote} 命令判定,从而输出不同的内容。 + 如果标题没题注即定理环境不用可选参数,则标题不加入定理目录,这是默认且合理的行为。若需要将无题注的标题加入目录可将 \meta{环境名} 传给目录风格的 \option{show} 选项或使用 \cs*{settheoremtocline}\code{*} 命令。是否存在题注需要在 \meta{标题定义} 中使用 \cs{thmtifnote} 命令判定,从而输出不同的内容。 \command{thmtifname}[\marg{存在编号代码}\marg{不存在编号代码}] 在 \meta{标题定义} 中测试当前定理是否有编号从而输出不同的内容,定理风格选项 \keyis{numbered}{no} 设置当前定理环境没有编号。 \begin{ctexexam} - \contentsuse{caixiang}{loe} - \RegisterTocName{caixiang} - \setlisttheoremstyle{ignoreall,show = caixiang} - \settheoremtocline{caixiang} + \contentsuse{lemma}{loe} + \RegisterTocName{lemma} + \setlisttheoremstyle{ignoreall,show = lemma} + \settheoremtocline{lemma} { - \listnumberline{caixiang} + \listnumberline{lemma} \thmtname\thmtifnote{[\thmtnote]}{} } \end{ctexexam} @@ -632,6 +640,32 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \end{ctexexam} \end{cnltxlist} +\subsection[图表题注]{图表题注\smodule{cap}} +\label{subsec:caption} +模块 \module*{cap} 用于设置图表等浮动体的题注格式。题注主要由三部分组成:标题标签即图表名与题注编号的组合,标题文本本身通常是内容的简短描述,以及将文本与标签分开的题注分隔符。可以在导言区设置整体格式,也可以在正文使用局部更改格式。模块 \module*{cap} 由 \pkg*{caption} 宏包提供支持,接口选项与 \pkg*{caption} 宏包完全一致,但写法为 \meta{条目名}\code{/}\meta{选项}。\pkg*{caption} 宏包提供了多种方法来定制浮动环境(例如 \env{figure} 和 \env{table})中的题注,并可与许多其它宏包配合使用。功能包括旋转题注、侧向题注和连续题注等。下面列举几个题注选项的用法,\ref{exam:caption set} 中两种设置题注的方法是等效的,更多选项和创建方法可查看宏包文档: +\begin{cnltxlist}[itemsep = 0ex] + \keyval{table/labelsep}{标签分隔符}\default{} + \keyval{figure/format}{题注格式}\default{} + \keyval{lstlisting/font}{题注字体}\default{} + \begin{ctexexam}[labelref = exam:caption set] + \ctexset[cap] + { + table/labelsep = space, + figure/format = plain + } + \captionsetup[table]{labelsep = space} + \captionsetup[figure]{format = plain} + \end{ctexexam} + \begin{cnltxlist} + \command{RegisterCapOptions}[\marg{条目名列表}] + 给模块 \module*{cap} 注册题注类型为 \meta{条目名} 的 \pkg*{caption} 接口选项。已预注册 \module*{figure}、\module*{table} 和 \module*{lstlisting} 三种类型的题注选项。可以搭配 \pkg*{newfloat} 宏包创建更多类型的浮动环境并设置相应题注。 + \end{cnltxlist} + \command{caption}[\sarg\oarg{目录标题}\marg{标题}]\default{} + \command{captionof}[\sarg\marg{条目名}\oarg{目录标题}\marg{标题}]\default{} + \command{bicaption}[\sarg\oarg{目录中文标题}\marg{中文标题}\oarg{目录英文标题}\marg{英文标题}] + 题注命令 \cs{caption} 用于在图表上下方插入题注,需要在浮动环境 \env*{figure} 和 \env*{table} 中使用。在浮动环境外可以使用 \cs{captionof} 命令,第一个参数指定条目名。\cs{bicaption} 命令可以实现中英文双语题注,需要在导言区载入 \pkg*{bicaption} 宏包,具体用法见宏包文档。 +\end{cnltxlist} + \subsection[页眉页脚]{页眉页脚\smodule{hdr}} \label{subsec:header and footer} 模块 \module*{hdr} 设置的命令由 \pkg*{fancyhdr} 宏包提供支持。标题标记由标签和标题组成,选项中参数 \code{\#1} 代表当前章、节或小节的标题。在 \cls*{book} 模式时使用标题标记选项 \option{chapter-mark} 和 \option{section-mark},在 \cls*{article} 模式时使用 \option{section-mark} 和 \option{subsection-mark} 选项,这与标准文档类的行为一致。重新设置标题标记选项时标记大小写选项 \option{uppercase} 会失效。 @@ -708,6 +742,8 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \ebhdrset{footnotetype = plain,footnotetype = bottom} \ebhdrset{footnotetype = {hang,bottom}} \end{ctexexam} + \command{PushFntBottom}\newtagv{2024cx}% + 默认情况下当具有 \code{b} 参数的底部浮动体与脚注同时存在时,脚注将位于浮动体上部。此命令可使脚注始终位于页面底部,与 \keyis{footnotetype}{bottom} 作用相同,只能在导言区全局使用。 \keyval{fnfirstindent}{刚性长度}\Default{1em} 每个脚注首段的首行缩进(悬挂缩进 \code{hang} 为整段缩进),等于长度 \cs{fnfirstindent} 的值。 \keyval{fnafterindent}{刚性长度}\Default{2em} @@ -803,7 +839,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \end{cnltxlist} \subsection[目录]{目录\smodule{toc}} -\label{subsec:catalog} +\label{subsec:contents} 模块 \module*{toc} 将使用 \pkg*{titletoc} 宏包处理目录样式。默认包括 \module*{part}$\longrightarrow$\module*{subparagraph}、\module*{figure}、\module*{table} 和 \module*{lstlisting} 条目名的键路径。选项前带有\hface 符号表示支持所有相应\textbf{条目名}的路径,其它选项则处于 \module*{toc} 键路径下。目录选项均支持标题编号判定命令 \cs{CTEXifname}\footnote{此功能需要\textbf{2023/06/01}以后的 \hologo{LaTeX} 内核支持。}。目前支持多数学术论文目录样式,更复杂的样式可以查看 \pkg*{titletoc} 的相关用法。 \begin{cnltxlist} \keyval{tocformat}{条目格式}\dtag @@ -867,16 +903,16 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \DeclareFloatList{algorithm}{loa} \listofalgorithms[multoc] % 在正文中输出双栏算法目录 \end{ctexexam} - \command{AllotCaptionExt}[\marg{条目名}\marg{扩展名}] + \command{AssignCaptionExt}[\marg{条目名}\marg{扩展名}] 给条目类型名称为 \meta{条目名} 的标题分配目录文件 \meta{扩展名},注意 \meta{扩展名} 需要被定义在 \cs*{ext@}\meta{条目名} 命令中才有效(\pkg*{caption} 宏包的默认定义形式)。可以使不同的 \meta{条目名} 共享一个目录: \begin{ctexexam} - \AllotCaptionExt{table}{lof} + \AssignCaptionExt{table}{lof} \newcommand{\listoffiguretables}{\listoffigures} % 同时输出图表目录的命令 \end{ctexexam} - \command{AllotPartialExt}[\marg{扩展名1}\marg{扩展名2}]\newtagv{2024bk} + \command{AssignPartialExt}[\marg{扩展名1}\marg{扩展名2}]\newtagv{2024bk} 给目录文件扩展名为 \meta{扩展名1} 的目录分配扩展名为 \meta{扩展名2} 的局部目录\footnote{此功能需要\textbf{2023/06/01}以后的 \hologo{LaTeX} 内核支持。},预注册的条目均无需再分配。用于搭配题注标题 \cs{caption} 命令和 \pkg*{titletoc} 宏包的局部题注目录命令。 \begin{ctexexam} - \AllotPartialExt{loa}{pla} + \AssignPartialExt{loa}{pla} \startlist[fancy]{loa} \captionof{algorithm}{算法标题} \stoplist[fancy]{loa} @@ -913,6 +949,8 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she 将目录页码装进一个右对齐的水平盒子里。这样可以使目录引导线右端对齐并与页码保持一定间距,否则会与页码相连。 \keyval{pagenumwd}{刚性长度}\Default{1.55em} 设置开启 \option{dotalign} 选项时页码水平盒子的宽度。 + \keychoice{fileopen}{\fbox{once},odd} + 编译文档时打开目录文件进行写入操作的方式,这个选项影响重复使用目录命令时的输出行为。默认只在第一次编译时打开文件,选择 \code{odd} 将仅在奇数次编译时打开文件。 \keyval{tocafter-every}{距离命令}\Default{\cs*{hspace}\Marg{1em}} 统一设置所有类型条目编号与标题间的代码。 \keyval{tocindent-every}{刚性长度} @@ -925,8 +963,47 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \section{环境和命令} -\subsection{文区命令} +\subsection{封面和文区} \begin{cnltxlist} + \command{maketitle}[\oarg{键值列表}]\newtagv{2024dh}% + 重新改写了默认的封面标题命令,在保证原生风格的前提下使用 \pkg*{xtemplate} 宏包将封面抽象为由实例组成的模板。并为命令增加了可选参数,选项的含义与标准文档类一致: + \keyval{title}{文档标题} + 设置文档的标题,可以包含格式命令。如果没有设置标题而输出封面会报错。 + \keyval{author}{文档作者} + 设置文档的作者,可以包含格式命令。多位作者之间可以用 \cs*{and} 命令分隔,每个作者后可用 \cs*{thanks} 命令添加致谢脚注。 + \keyval{date}{文档日期}\Default{\cs*{today}} + 设置文档的日期,可以包含格式命令。默认的文档日期为当前日期 \cs*{today}。 + \command{DeclareInstance}[\Marg{easybook}\marg{位置}\Marg{cover}\marg{键值列表}] + 封面模板可用 \pkg*{xtemplate} 提供的实例声明命令进行自由定制,\ref{exam:cover instance} 举例说明了定制页面中部的内容。模板由页面上、中和下三个位置的实例组成,它们的 \meta{位置} 名字分别为 \code{top}、\code{middle} 和 \code{bottom}。每个实例的属性可用 \meta{键值列表} 修改,包含的选项如下: + \keyval{content}{实例内容} + 设置实例内容,可以包含任何记号列表。通常为格式和排版内容的命令,在局部生效。 + \keyval{beforecode}{实例前代码} + 设置实例内容前的代码,可以包含任何记号列表。通常为换页和垂直距离的命令。 + \keyval{aftercode}{实例后代码} + 与 \option{before} 选项类似,设置实例内容后的代码。 + \keychoice{align}{l,\fbox{c},r,n} + 设置实例内容的对齐方式,分别为左、中、右和自然对齐,自然对齐即正常的段落文本。 + \begin{ctexexam}[labelref = exam:cover instance] + \DeclareInstance{easybook}{middle}{cover} + { + content = + { + \thispagestyle{empty} + \begin{tblr} + { + columns = c, + hline{2-4} = {2}{0.5pt,solid}, + column{1} = {rightsep = 0pt} + } + 标题:& 一个文档标题 \\ + 作者:& 张三 \\ + 日期:& \today + \end{tblr} + }, + beforecode = \null\vspace{3cm}, + aftercode = \clearpage + } + \end{ctexexam} \command{frontmatter}[\sarg\oarg{编号格式}]\Default{Roman} 前言区命令。使部分和章标题不编号,带有星号的变体命令不使用 \cs{cleardoublepage} 命令。页码 \meta{编号格式} 可设置为 \code{arabic}、\code{Alph}、\code{alph}、\code{Roman}、\code{roman} 和 \code{chinese} 形式。 \command{mainmatter}[\sarg] @@ -941,7 +1018,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \subsection{目录命令} \label{subsec:directory command} -\easybook{} 改进了标准文档类中定制性较低的章节标题和图表标题目录命令。现在目录命令带有可选参数用于设置标题格式和栏数等,并且与标准文档类不同的是目录命令可在正文中\textbf{重复}使用\footnote{此功能需要\textbf{2023/06/01}以后的 \hologo{LaTeX} 内核支持。}。更多目录命令的创建和样式设置可参考\ref{subsec:catalog}。 +\easybook{} 改进了标准文档类中定制性较低的章节标题和图表标题目录命令。现在目录命令带有可选参数用于设置标题格式和栏数等,并且与标准文档类不同的是目录命令可在正文中\textbf{重复}使用\footnote{此功能需要\textbf{2023/06/01}以后的 \hologo{LaTeX} 内核支持。}。更多目录命令的创建和样式设置可参考\ref{subsec:contents}。 \begin{cnltxlist} \command{tableofcontents}[\sarg\oarg{键值列表}\darg{代码钩子}] 章节标题目录命令,支持中英文双语标题目录输出。带有星号参数不输出目录条目上方的标题。\meta{代码钩子} 是当输出方案 \keyis{plan}{both} 时中文与英文目录之间执行的代码,可以插入设置目录样式和换页等命令。 @@ -1300,30 +1377,16 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \end{ctexexam} \end{cnltxlist} -\subsection{图表题注} -\pkg*{caption} 宏包提供了多种方法来定制浮动环境(例如 \env{figure} 和 \env{table})中的标题,并可与许多其它宏包配合使用。功能包括旋转题注、侧向题注和连续题注等。 -\begin{cnltxlist} - \command{captionsetup}[\oarg{条目名}\marg{键值列表}] - 这是 \pkg*{caption} 宏包的接口命令,\meta{键值列表} 提供多个选项更改图表题注的格式。题注主要由三部分组成:标题标签即图表名与题注编号的组合,标题文本本身通常是内容的简短描述,以及将文本与标签分开的题注分隔符。可以在导言区设置整体格式,也可以在正文使用局部更改格式。 -\end{cnltxlist} - -\begin{cnltxlist}[itemsep = 0ex] - \command{caption}[\sarg\oarg{目录标题}\marg{标题}]\default{} - \command{captionof}[\sarg\marg{条目名}\oarg{目录标题}\marg{标题}]\default{} - \command{bicaption}[\sarg\oarg{目录中文标题}\marg{中文标题}\oarg{目录英文标题}\marg{英文标题}] - 题注命令 \cs{caption} 用于在图表上下方插入题注,需要在浮动环境 \env*{figure} 和 \env*{table} 中使用。在浮动环境外可以使用 \cs{captionof} 命令,第一个参数指定条目名。可以搭配 \pkg*{newfloat} 宏包创建更多类型的浮动环境并设置相应题注。\cs{bicaption} 命令可以实现中英文双语题注,需要在导言区载入 \pkg*{bicaption} 宏包,具体用法见说明文档。 -\end{cnltxlist} - \subsection{索引} \begin{cnltxlist} \command{indexsetup}[\marg{键值列表}] - \pkg*{imakeidx} 宏包增强了索引的功能,可使用户在制作和排版文档的同时制作一个或多个索引。这是 \pkg*{imakeidx} 宏包的接口命令,用于设置索引表的整体格式。 + \pkg*{imakeidx} 宏包增强了索引的功能,可使用户在制作和排版文档的同时制作一个或多个索引。这是 \pkg*{imakeidx} 宏包的接口命令,用于设置索引表的整体格式,它的 \option{level} 和 \option{headers} 选项失效。 \command{index}[\oarg{索引名}\marg{标签}] 索引标签命令的可选参数可以用不同的 \meta{索引名} 给多个索引表设置标签。 \command{makeindex}[\oarg{键值列表}] 用于导言区开启索引收集的命令。这个命令可以重复使用收集多个索引表,以不同的 \meta{索引名} 作为区分,如果仅打印一个索引表没必要重复使用。 \command{printindex}[\sarg\oarg{键值列表}] - 打印不同索引表的命令。这个命令被重新定义,\meta{键值列表} 中的选项与\ref{subsec:directory command} 其它目录命令相同,但是接口命令 \cs{indexsetup} 的部分选项失效。 + 打印不同索引表的命令。这个命令被重新定义,\meta{键值列表} 中的选项与\ref{subsec:directory command} 其它目录命令相同,并多出 \option{name} 选项用于指定打印索引的名字。 \keyval{name}{索引名} 指定输出名为 \meta{索引名} 的索引表,如果只使用一个索引表则默认为项目文件名不需要指定。 \end{cnltxlist} @@ -1379,14 +1442,6 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she 该命令由文档宏包 \pkg*{pdfpages} 提供。可以将其它 \code{pdf} 文档插入当前文档,比如插入其它软件制作的封面。可选参数可以指定插入页数、逻辑页和横向页面等,详情查看宏包文档。 \end{cnltxlist} -\subsection{下划线} -\begin{cnltxlist}[itemsep = 0ex] - \command{uline}[\marg{下划直线}]\default{} - \command{uuline}[\marg{下划双直线}]\default{} - \command{uwave}[\marg{下划波浪线}] - \pkg*{ulem} 宏包提供了多种下划线命令,可以重新定义 \cs{ULthickness} 命令控制下划线的粗细。下划线的深度由 \cs{ULdepth} 控制,默认值 \cs*{maxdimen} 是一个允许深度根据当前字体变化的特殊标志,当然也可以使用 \cs*{setlength} 设定为指定深度。 -\end{cnltxlist} - \appendix \setlist[1]{} \begin{changelog}[title = 更新日志] @@ -1429,7 +1484,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \item 新增脚注段落文本格式定义命令 \cs{deffntpara} 和脚注间距离选项 \option{footnotesep}。 \item 新增悬挂缩进命令 \cs{hangfrom}。 \item 新增行间公式与正文上下间距选项 \option{abovedisplayskip} 和 \option{belowdisplayskip}。 - \item 新增目录文件扩展名分配命令 \cs{AllotCaptionExt}。 + \item 新增目录文件扩展名分配命令 \cs{AssignCaptionExt}。 \end{version} \shortversion{v = 2024aq,date = 2024/03/31,changes = 修复命令 \cs{ebifbitoc} 用于条目缩进选项 \option{tocindent} 失效的问题。} \begin{version}[v = 2024as,date = 2024/04/19] @@ -1441,7 +1496,7 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \end{version} \shortversion{v = 2024aw,date = 2024/04/22,changes = 新增新建章节标题命令 \cs{NewTitleCommand} 和 \cs{NewTitleEntryCommand}。} \shortversion{v = 2024bb,date = 2024/04/26,changes = 增加对 \pkg*{thmtools} 宏包定理环境目录 \cs{listoftheorems} 的支持。} - \shortversion{v = 2024bk,date = 2024/05/07,changes = 新增局部题注目录分配命令 \cs{AllotPartialExt}。} + \shortversion{v = 2024bk,date = 2024/05/07,changes = 新增局部题注目录分配命令 \cs{AssignPartialExt}。} \begin{version}[v = 2024bn,date = 2024/05/10] \fixed \item 修复 \module*{toc} 模块中带有 \option*{every} 后缀的选项不对所有已注册条目有效的问题。 @@ -1458,6 +1513,15 @@ $\blacktriangleright$需要注意正确\textbf{编译索引}要增加 \code{-she \shortversion{v = 2024ci,date = 2024/06/22,changes = 修复使用 \code{flush} 类型脚注报错。} \shortversion{v = 2024co,date = 2024/07/06,changes = 目录命令的可选参数支持 \CTeX 键值列表所有路径的章节标题样式选项。} \shortversion{v = 2024cq,date = 2024/07/12,changes = 新增章节标题格式复制命令 \cs{CopyTitleFormat}。} + \shortversion{v = 2024cu,date = 2024/07/20,changes = 修复无编号的定理环境标签命令 \cs*{p@}\meta{定理名} 缺失导致报错的问题。} + \shortversion{v = 2024cx,date = 2024/07/28,changes = 新增将脚注置于页面底部的命令 \cs{PushFntBottom}。} + \begin{version}[v = 2024dh,date = 2024/08/06] + \changed + \item 取消默认载入 \pkg*{ulem} 下划线宏包。 + \added + \item 使用 \pkg*{xtemplate} 宏包将封面标题命令 \cs{maketitle} 抽象为由实例组成的模板。 + \item 新增图表题注模块 \module*{cap}。 + \end{version} \end{changelog} \nocite{*} % \AddToHook{cmd/printindex/before}{\clearpage} diff --git a/macros/latex/contrib/fancyhdr/README b/macros/latex/contrib/fancyhdr/README index 4a7d219fdc..3131149015 100644 --- a/macros/latex/contrib/fancyhdr/README +++ b/macros/latex/contrib/fancyhdr/README @@ -27,7 +27,7 @@ In order to latex the documentation you need to have a copy of boxedminipage.sty (CTAN:/macros/latex/contrib/boxedminipage) and refcount.sty (CTAN:/macros/latex/contrib/oberdiek/) installed. -This is version 4.2 of fancyhdr.sty and extramarks.sty. They are +This is version 4.3.1 of fancyhdr.sty and extramarks.sty. They are described in the third edition of The LaTeX Companion. Extramarks.sty has not been changed, except for the version and copyright information. diff --git a/macros/latex/contrib/fancyhdr/fancyhdr.dtx b/macros/latex/contrib/fancyhdr/fancyhdr.dtx index 43c6631bba..c20c966b8b 100644 --- a/macros/latex/contrib/fancyhdr/fancyhdr.dtx +++ b/macros/latex/contrib/fancyhdr/fancyhdr.dtx @@ -26,7 +26,7 @@ %<fancyhdr>\ProvidesPackage{fancyhdr}% %<fancyheadings>\ProvidesPackage{fancyheadings} %<extramarks>\ProvidesPackage{extramarks} -%<fancyhdr|extramarks> [2024/04/23 v4.2 +%<fancyhdr|extramarks> [2024/07/23 v4.3.1 %<fancyhdr> Extensive control of page headers and footers]% %<fancyheadings> [2022/11/09 v4.1 %<fancyheadings> Legacy package to call fancyhdr] @@ -59,8 +59,6 @@ \def\pAmS{{\the\textfont2 A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}} \def\amslatex/{\ams/-\latex/} -\newcommand{\PSNFSS}{{\sf - PSNFSS}} \newcommand{\bs}{\symbol{'134}} \newcommand{\env}[1]{\texttt{#1}} \newcommand{\Package}[1]{\textsf{#1}} @@ -206,7 +204,7 @@ % \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ } % \DoNotIndex{\@ne} % \DoNotIndex{\advance,\begingroup,\catcode,\closein} -% \DoNotIndex{\closeout,\day,\def,\edef,\else,\empty,\endgroup} +% \DoNotIndex{\closeout,\day,\def,\edef,\else,\empty,\@empty,\endgroup} % % \title{The \Package{fancyhdr} and \Package{extramarks} % packages\\{\normalsize version \fileversion.}} @@ -228,7 +226,7 @@ % % This documentation describes version 4.0 or later of the % \Package{fancyhdr} and \Package{extramarks} packages. The user -% documentation is valid for the versions 3.8 or later of the +% documentation is valid for the versions 4.0 or later of the % \Package{fancyhdr} package (except for the changes mentioned in % section~\ref{sec:version-4}), and version 2.1 or later of the % \Package{extramarks} package. @@ -253,11 +251,11 @@ % % Part IV contains the annotated implementation. % -% This document describes version 4 of \Package{fancyhdr}. This version -% is also described in the forthcoming edition 3 of \textit{The \latex/ Companion}, -% whereas the previous editions describe version 3 of \Package{fancyhdr}. -% There are some significant differences between these versions. These -% are summarized in section~\ref{sec:version-4} on page~\pageref{sec:version-4}. +% This document describes version 4 of \Package{fancyhdr}, which is described in +% the \emph{The \LaTeX{} Companion, Third Edition}. +% The differences between this version and previous versions +% are summarized in section~\ref{sec:version-4} on +% page~\pageref{sec:version-4}. % Throughout this documentation it is mentioned when a specific feature % is only available in version 4, or when there are differences between % version 3 and 4. @@ -304,16 +302,14 @@ % \OPTindex{twoside} % \OPTindex{headings} % \OPTindex{myheadings} -% \DescribeMacro{\fancyhead} -% \DescribeMacro{\fancyfoot} -% \DescribeMacro{\fancyhf} -% \begin{verbatim} -% \fancyhead[places]{field} -% \fancyfoot[places]{field} -% \fancyhf[places]{field} -% \end{verbatim} -% Here \texttt{places} is a comma-separated list of places where -% \texttt{field} will be placed. There are 12 places defined: Left, +% +% \begin{flushleft} +% \DescribeMacro{\fancyhead}\cmd{\fancyhead}\oarg{places}\marg{field} \\ +% \DescribeMacro{\fancyfoot}\cmd{\fancyfoot}\oarg{places}\marg{field} \\ +% \DescribeMacro{\fancyhf}\cmd{\fancyhf}\oarg{places}\marg{field} +% \end{flushleft} +% Here \meta{places} is a comma-separated list of places where +% \meta{field} will be placed. There are 12 places defined: Left, % Center and Right Headers and Footers, and both can be on Even or Odd % pages. Each place therefore has 3 coordinates which are the inital % letters of the above description: (1) \texttt{E} or \texttt{O}, (2) \texttt{L}, \texttt{C} or @@ -321,14 +317,12 @@ % letters, like \texttt{EOH}. A missing coordinate means: all % possibilities, except for \cs{fancyhead} where \texttt{H} is implied % and \cs{fancyfoot} where \texttt{F} is implied. -% \DescribeMacro{\fancyheadoffset} -% \DescribeMacro{\fancyfootoffset} -% \DescribeMacro{\fancyhfoffset} -% \begin{verbatim} -% \fancyheadoffset[places]{field} -% \fancyfootoffset[places]{field} -% \fancyhfoffset[places]{field} -% \end{verbatim} +% +% \begin{flushleft} +% \DescribeMacro{\fancyheadoffset}\cmd{\fancyheadoffset}\oarg{places}\marg{length} \\ +% \DescribeMacro{\fancyfootoffset}\cmd{\fancyfootoffset}\oarg{places}\marg{length} \\ +% \DescribeMacro{\fancyhfoffset}\cmd{\fancyhfoffset}\oarg{places}\marg{length} +% \end{flushleft} % These define offsets to let the headers stick into the margin (or to % the inside if negative). Places cannot contain the \texttt{C} % specifier. See section~\ref{sec:book-examples} for more details. @@ -340,7 +334,6 @@ % \DescribeMacro{\headrule} % \DescribeMacro{\footrule} % \DescribeMacro{\headwidth} -% % \cs{headrulewidth} and \cs{footrulewidth} are macros to define the % thickness of a line under the header and above the footer. % \cs{headruleskip} and \cs{footruleskip} are macros that define the @@ -353,7 +346,6 @@ % \DescribeMacro{\fancyheadinit} % \DescribeMacro{\fancyfootinit} % \DescribeMacro{\fancyhfinit} -% % \cs{fancyheadinit} and \cs{fancyfootinit} can be used to define % initialisation code for the header and footer, respectively, and % \cs{fancyhfinit} defines both of these. These commands are only @@ -367,7 +359,6 @@ % \DescribeMacro{\ifbotfloat} % \DescribeMacro{\iffloatpage} % \DescribeMacro{\iffootnote} -% % The macros \cs{iftopfloat}, \cs{ifbotfloat}, \cs{iffloatpage} and % \cs{iffootnote} are used to detect if there is a float on the top or % the bottom of the page, or the page is a float page, or if there is @@ -375,10 +366,10 @@ % different headers and/or footers if these conditions are met. See % section~\ref{sec:float} for more details. % -% \begin{quote} -% \DescribeMacro{\fancypagestyle} -% \verb|\fancypagestyle|\marg{style-name}\oarg{base-style}\marg{definitions} -% \end{quote} +% \begin{flushleft} +% \DescribeMacro{\fancypagestyle} +% \cmd{\fancypagestyle}\marg{style-name}\oarg{base-style}\marg{definitions} +% \end{flushleft} % This command lets you (re)define page styles for use in special % situations. See section~\ref{sec:fancypagestyle} for more details. % @@ -393,13 +384,6 @@ % \DescribeMacro{\lastrightmark} % \DescribeMacro{\firstrightmark} % \DescribeMacro{\lastleftmark} -% \begin{verbatim} -% \firstleftmark -% \lastrightmark -% \firstrightmark -% \lastleftmark -% \end{verbatim} -% % Standard \latex/ has two marks: a left and a right one. The standard % command \cs{leftmark} gives you the last left mark on a page, and % \cs{rightmark} gives you the first right one. These macros give you @@ -486,7 +470,7 @@ % % The page headers and footers in \LaTeX{} are defined by the % \cs{pagestyle} and \cs{pagenumbering} commands. \cs{pagestyle} -% defines the general contents of the headers and footers (e.g. where the +% defines the general contents of the headers and footers (e.g.\ where the % page number will be printed), while % \cs{pagenumbering} defines the format of the page number. % \LaTeX{} has four standard page styles: @@ -527,7 +511,7 @@ % % These are not user commands, but rather ``variables'' that are used by % \latex/'s output routine. -% As the command names contain the character '\texttt{@}', they should +% As the command names contain the character `\texttt{@}', they should % be defined in a package file, or otherwise be sandwiched between the commands % \cs{makeatletter} and \cs{makeatother}. % @@ -605,6 +589,12 @@ % We define each of the six ``fields'' and the two decorative lines % separately. % +% \begin{fblock} +% \textbf{NOTE:} In \Package{fancyhdr} version 4.3 and later, paragraph +% hooks will not work inside \Package{fancyhdr} headers and footers to +% avoid unwanted interactions with the main text. +% \end{fblock} +% % \section{A simple example} % \label{sec:simple} % @@ -784,7 +774,7 @@ % for which pages and/or parts of the header/footer they apply. The first % \cs{fancyhead} command above omits this parameter, and thus applies to all % header fields. In general this is only useful to get rid of the defaults or -% a previous definition, as is done here. Similar the \cs{fancyfoot} command +% a previous definition, as is done here. Similarly the \cs{fancyfoot} command % without square brackets clears all footer fields. In this particular % example it could be omitted as all footer fields have a value specified. % The selectors that can be used @@ -846,7 +836,7 @@ % \cs{ps@plain} command, but \Package{fancyhdr} gives you an easier way % with the \cs{fancypagestyle} command. This command can be used to % redefine existing page styles (like \texttt{plain}) or to define new ones, -% e.g. if part of your document needs a different page style. This command +% e.g.\ if part of your document needs a different page style. This command % has two mandatory parameters: the first one is the name of the page style to be defined, the % second consists of commands that change the headers and/or footers, i.e., % \verb|\fancyhead| etc. Also allowed are changes to \cs{headrulewidth} and @@ -1105,8 +1095,8 @@ % section and subsection information (section only for one-sided % printing). \latex/ uses a marker mechanism to remember the chapter and % section (section and subsection) information for a page; this is -% discussed in detail in \textit{The \latex/ Companion}, Section 4.3.1, or -% \textit{The \latex/ Companion, Second Edition}, Section 4.3.4. +% discussed in detail in \emph{The \LaTeX{} Companion, Third Edition}, +% section 5.3.4 (Part I). % % There are two ways you can use and change the higher- and lower-level % sectioning information available to you. The macros: @@ -1263,7 +1253,7 @@ % % As an example let's take a page layout where the leftmarks are generated by % the sections and the rightmarks by the subsections (as is default in the -% \texttt{article} class). Take a page with some short sections, e.g. +% \texttt{article} class). Take a page with some short sections, e.g., % % \begin{samepage} % \noindent Section 1.\\ @@ -1294,7 +1284,7 @@ % \end{verbatim} % % Another problem with the marks in the standard \latex/ classes is that the -% higher level sectioning commands (e.g. \cs{chapter}) call +% higher level sectioning commands (e.g.\ \cs{chapter}) call % \cs{markboth} with an empty right argument. This means that on the first % page of a chapter (or a section in article style) the \cs{rightmark} % will be empty. The underlying problem is that the \tex/ machinery has @@ -1310,7 +1300,7 @@ % \cs{chapter} etc.\ commands do \emph{not} call the mark commands. So if % you want your preface to set the header info but not be numbered nor be put in % the table of contents, you must issue the \cs{markboth} command -% yourself, e.g. +% yourself, e.g., % % \begin{verbatim} % \chapter*{Preface} @@ -1378,7 +1368,8 @@ % \footnote{If you use \texttt{11pt} or \texttt{12pt} you will probably also % have to do this, because \LaTeX's defaults are quite small}. See the % warning below. -% See also Section 4.1 of the \latex/ \emph{Companion} for detail. +% See also section 5.1 and 5.2 of the \LaTeX{} \emph{Companion, Third Edition}, (Part I) +% for detail. % % For instance, the following code will place the section title and the % subsection title of an article in two lines in the upper right hand @@ -1626,7 +1617,7 @@ % in the neighborhood of your header/footer definitions, unless you % already use such an \texttt{\ldots offset} command, of course. % \vspace{\baselineskip} -% +% % For the second example, we take the \amslatex/ book\footnote{George Gratzer, % \textit{Math into LaTeX, An Introduction to \LaTeX{} and \amslatex/}, Birkhauser, Boston.}. % @@ -1661,18 +1652,19 @@ % \renewcommand{\footrulewidth}{0pt} % \end{verbatim} % -% The font used in the headers is 9 pt bold Helvetica. The \PSNFSS\ system -% by Sebastian Rahtz uses the short (Karl Berry) name \verb|phv| for -% Helvetica, so this font is selected with the commands: +% The font used in the headers is 9 pt bold Helvetica. The \textsf{PSNFSS} system +% (originally by the late Sebastian Rahtz) uses the short (Karl Berry) name \texttt{phv} for +% Helvetica. The more modern \LaTeX{} solution is to use the \TeX{} Gyre font +% Heros, which uses the short name \texttt{qhv} so this font is selected with the commands^^A +% \footnote{See \emph{The \LaTeX{} Companion, Third Edition}, Part I, section +% 9.5.2, and Part II, section 10.8.16.}: % \begin{verbatim} -% \fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont +% \fontfamily{qhv}\fontseries{b}\fontsize{9}{11}\selectfont % \end{verbatim} -% (See Sections 7.6.1 and 11.9.1 of the \latex/ \emph{Companion} or -% Sections 7.6 and 7.9.1 of \emph{The \latex/ Companion, Second Edition}.) % Let us define a shorthand for this: % \begin{verbatim} % \newcommand{\helv}{% -% \fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont} +% \fontfamily{qhv}\fontseries{b}\fontsize{9}{11}\selectfont} % \end{verbatim} % % Now we are ready for the page layout: @@ -1688,7 +1680,7 @@ % \renewcommand{\headrulewidth}{0.5pt} % \renewcommand{\footrulewidth}{0pt} % \newcommand{\helv}{% -% \fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont} +% \fontfamily{qhv}\fontseries{b}\fontsize{9}{11}\selectfont} % \fancyhf{} % \fancyhead[LE,RO]{\helv \thepage} % \fancyhead[LO]{\helv \rightmark} @@ -1719,6 +1711,21 @@ % \renewcommand{\headrulewidth}{\iffloatpage{0pt}{0.4pt}} % \end{verbatim} % +% \textbf{NOTE:} There is also a package \TTindex{floatpag}% +% \Package{floatpag}\footnote{\url{https://www.ctan.org/pkg/floatpag}} by Vytas +% Statulevičius and Sigitas Tolušis that has a command +% \cs{floatpagestyle}\marg{pagestyle}, that applies \meta{pagestyle} to +% all float pages, where \meta{pagestyle} can be defined with +% \cs{fancypagestyle} (or by any other means). +% +% \textbf{NOTE:} There is also a package \TTindex{floatpag}% +% \Package{floatpag}\footnote{\url{https://www.ctan.org/pkg/floatpag}} by Vytas +% Statulevičius and Sigitas Tolušis that has a command +% \cs{floatpagestyle}\marg{pagestyle}, that applies \meta{pagestyle} to +% all float pages, where \meta{pagestyle} can be defined with +% \cs{fancypagestyle} (or by any other means). In some cases this might +% be simpler than putting \cs{iffloatpage} in various headers or footers. +% % Sometimes you may want to change the layout also for pages that contain a % float on the top of the page, a float on the bottom of the page or a footnote on the bottom of the page. % @@ -1848,12 +1855,16 @@ % \CmdIndex{pagenumbering} % % \begin{verbatim} +% \clearpage % \pagenumbering[\thesection]{bychapter} % \end{verbatim} % % What the package also does is reset the page number to 1 at the beginning % of each chapter. % +% In general it is advisable to give a \cs{clearpage} or +% \cs{cleardoublepage} before changing the page numbering. +% % In the frontmatter of your document (for example the Table of % Contents) there will be no chapter numbers. Therefore a simple page % number will be used there. This may be confusing, so you might prefer to use roman pagenumbers @@ -2601,7 +2612,7 @@ % \end{enumerate} % % In the first two cases you must first check if you have given the correct -% ``placement'' parameter to you float, e.g. \Cmd{begin\{figure\}[htp]} +% ``placement'' parameter to you float, e.g.\ \Cmd{begin\{figure\}[htp]} % specifies that your figure may be placed either: Here (i.e., in the text % position where the command is given), on the Top of a page (which may be % the page where you put the command), or on a separate Page of floats. You @@ -2660,7 +2671,7 @@ % than 50\% of the page height it will have to wait until some more floats % are given before a float page can be filled to satisfy the % \cs{floatpagefraction} parameter. If you have this kind of behaviour you -% can easily adapt the parameters, e.g. with: +% can easily adapt the parameters, e.g.\ with: % \begin{verbatim} % \renewcommand{\textfraction}{0.05} % \renewcommand{\topfraction}{0.95} @@ -2673,7 +2684,7 @@ % % You can force \latex/ to ignore most of the parameters for one specific float % occurrence by -% including an exclamation mark (!) in the placement parameters, e.g. +% including an exclamation mark (!) in the placement parameters, e.g., % \begin{verbatim} % \begin{figure}[!htb] % \end{verbatim} @@ -2811,7 +2822,7 @@ % normal text rather than a \cs{caption}, so that it will not be entered in % the list of figures. It may also be desirable to issue a \cs{clearpage} % first, just like we did for the \texttt{longtable}, and to encapsulate this -% in the \cs{afterpage} command. E.g. +% in the \cs{afterpage} command. E.g., % \begin{verbatim} % \afterpage{\clearpage\input{myfigure}} % \end{verbatim} @@ -2832,7 +2843,7 @@ % % You have to make sure that the last part is big enough, otherwise \LaTeX{} % could decide to postpone it until it has collected some more floats. This -% can be done either by making the figure big enough (e.g. by adding some +% can be done either by making the figure big enough (e.g.\ by adding some % \cs{vspace}), or by tweaking the \cs{floatpagefraction} % \CmdIndex{floatpagefraction} parameter. % @@ -3054,9 +3065,27 @@ % \cs{input} in headers/footers when \texttt{verbatim} is active. % (Issue \# 8 \url{https://github.com/pietvo/fancyhdr/issues/8}.) % \end{itemize} +% \item Version 4.3, July 17, 2024 +% \begin{itemize} +% \item Changed \cs{f@nch@everypar}. If the LaTeX kernel has +% \texttt{expl3}, use \cs{tex\_everypar:D}, and reset \cs{par}, +% \cs{@@par} and \cs{endgraf} to their original \TeX{} definitions, so that +% no paragraph hooks will intrude in \Package{fancyhdr} code\footnote +% {See \url{https://tex.stackexchange.com/q/691262/113546}}. +% Therefore paragraph hooks will not work inside \Package{fancyhdr} headers and +% footers to avoid unwanted interactions with the main text. +% \end{itemize} +% \item % Version 4.3.1, July 23, 2024 +% \begin{itemize} +% \item Also reset \cs{everypar} to its original \TeX{} value +% \cs{tex\_everypar:D} in \cs{f@nch@resetpar}, otherwise environments +% based on \cs{trivlist} will not work properly in \Package{fancyhdr} +% headers and footers. +% \end{itemize} % \end{itemize} % % +% % \StopEventually{% % \PrintChanges % \PrintIndex} @@ -3648,26 +3677,8 @@ \ProcessOptions* % \end{macrocode} % -% \begin{macro}{\f@nch@errmsg} -% This macro generates an error message. -% \changes{fancyhdr v3.10}{2019/01/25}{Use \cs{f@nch@ifundefined} instead of \cs{ifx}.} -% \changes{fancyhdr v3.10}{2019/01/25}{Use \cs{newcommand} instead of \cs{def}.} -% \begin{macrocode} -\newcommand\f@nch@errmsg[1]{% - \f@nch@ifundefined{PackageError}{\errmessage{#1}}{\PackageError{fancyhdr}{#1}{}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\f@nch@warning} -% This macro generates a warning. -% \changes{fancyhdr v3.10}{2019/01/25}{Use \cs{f@nch@ifundefined} instead of \cs{ifx}.} -% \changes{fancyhdr v3.10}{2019/01/25}{Use \cs{newcommand} instead of \cs{def}.} -% \begin{macrocode} -\newcommand\f@nch@warning[1]{% - \f@nch@ifundefined{PackageWarning}{\errmessage{#1}}{\PackageWarning{fancyhdr}{#1}{}}} -% \end{macrocode} -% \end{macro} -% +% \changes{fancyhdr v4.3}{2024/05/08}{Removed \cs{f@nch@errmsg} and +% \cs{f@nch@warning} and used \cs{PackageError} and \cs{PackageWarning} directly.} % \begin{macro}{\f@nch@forc} % Usage: \cs{f@nch@forc} \cs{var} \texttt{\{charstring\}\{body\}}.\\ % Execute the body for each character in \texttt{charstring} bound @@ -3766,7 +3777,7 @@ \if@twoside\else \iff@nch@twoside\else \if\f@nch@@eo e% - \f@nch@warning {\string#1's `E' option without twoside option is useless.\MessageBreak + \PackageWarning{fancyhdr} {\string#1's `E' option without twoside option is useless.\MessageBreak Please consider using the `twoside' option}% \fi\fi\fi } @@ -3791,8 +3802,8 @@ \f@nch@forc\tmpf@ra{#3}% {\expandafter\f@nch@ifin\tmpf@ra{eolcrhf,EOLCRHF}% {}{\edef\temp@c{\temp@c\tmpf@ra}}}% - \ifx\@empty\temp@c\else \f@nch@errmsg{Illegal char `\temp@c' in - \string#1 argument: [#3]}% + \ifx\@empty\temp@c\else \PackageError{fancyhdr}{Illegal char `\temp@c' in + \string#1 argument: [#3]}{}% \fi \f@nch@for\temp@c{#3}% {\f@nch@default\f@nch@@eo{eo}\temp@c \f@nch@fancyhf@Echeck{#1}% @@ -3827,8 +3838,8 @@ \f@nch@forc\tmpf@ra{#3}% {\expandafter\f@nch@ifin\tmpf@ra{eolrhf,EOLRHF}% {}{\edef\temp@c{\temp@c\tmpf@ra}}}% - \ifx\@empty\temp@c\else \f@nch@errmsg{Illegal char `\temp@c' in - \string#1 argument: [#3]}% + \ifx\@empty\temp@c\else \PackageError{fancyhdr}{Illegal char `\temp@c' in + \string#1 argument: [#3]}{}% \fi \f@nch@for\temp@c{#3}% {\f@nch@default\f@nch@@eo{eo}\temp@c \f@nch@fancyhf@Echeck{#1}% @@ -4000,6 +4011,14 @@ % \begin{macro}{\f@nch@raggedright} % \begin{macro}{\f@nch@centering} % \begin{macro}{\f@nch@everypar} +% \changes{fancyhdr v4.3}{2024/07/17}{Changed \cs{f@nch@everypar}. If the +% LaTeX kernel has expl3, use \cs{tex\_everypar:D}, and reset \cs{par}, +% \cs{@@par} and \cs{endgraf} to their original \TeX{} definitions, so that +% no paragraph hooks will intrude in \Package{fancyhdr} code.} +% \changes{fancyhdr v4.3.1}{2024/07/23}{Also reset \cs{everypar} to its +% original \TeX{} value \cs{tex\_everypar:D} in \cs{f@nch@resetpar}, +% otherwise environments based on \cs{trivlist} +% will not work properly in \Package{fancyhdr} headers and footers.} % Save the standard definitions of \cs{raggedleft}, \cs{raggedright}, % \cs{centering} and \cs{everypar} so that we can reset them when we are % typesetting the headers and footers. Some packages change these to @@ -4008,7 +4027,23 @@ \let\f@nch@raggedleft\raggedleft \let\f@nch@raggedright\raggedright \let\f@nch@centering\centering -\let\f@nch@everypar\everypar +\ifdefined\ExplSyntaxOn + \ExplSyntaxOn + \let\f@nch@everypar\tex_everypar:D + \newcommand\f@nch@resetpar{% + \f@nch@everypar{}% + \cs_set_eq:NN \everypar\tex_everypar:D + \cs_set_eq:NN \par \tex_par:D + \cs_set_eq:NN \@@par \tex_par:D + \cs_set_eq:NN \endgraf \tex_par:D + } + \ExplSyntaxOff +\else + \let\f@nch@everypar\everypar + \newcommand\f@nch@resetpar{% + \f@nch@everypar{}% + } +\fi % \end{macrocode} % \end{macro} % \end{macro} @@ -4044,8 +4079,10 @@ % \changes{fancyhdr v4.2}{2024/04/19}{Reset catcodes to their default % values in order to facilitate \cs{input} in headers/footers when \texttt{verbatim} % is active. (Issue \# 8 \url{https://github.com/pietvo/fancyhdr/issues/8}.)} +% \changes{fancyhdr v4.3}{2024/05/08}{Remove pre-NFSS stuff} +% \changes{fancyhdr v4.3}{2024/07/17}{Replace \cs{f@nch@everypar} by \cs{f@nch@resetpar}.} % \begin{macrocode} -\def\f@nch@reset{\f@nch@everypar{}\restorecr\endlinechar=13 +\def\f@nch@reset{\f@nch@resetpar\restorecr\endlinechar=13 \catcode`\\=0\catcode`\{=1\catcode`\}=2\catcode`\$=3\catcode`\&=4 \catcode`\#=6\catcode`\^=7\catcode`\_=8\catcode`\ =10\catcode`\@=11 \catcode`\:=11\catcode`\~=13\catcode`\%=14 @@ -4061,10 +4098,8 @@ \expandafter\def\csname MakeUppercase\space\space\space\endcsname [####1]####2{####2}% ##1}}% - \f@nch@ifundefined{@newbaseline} % NFSS not present; 2.09 or 2e - {\f@nch@ifundefined{@normalsize} {\normalsize} % for ucthesis.cls - {\@normalsize}}% - {\@newbaseline}% NFSS (2.09) present + \f@nch@ifundefined{@normalsize} {\normalsize} % for ucthesis.cls + {\@normalsize}% } % \end{macrocode} % \end{macro} @@ -4213,7 +4248,7 @@ % \begin{macrocode} \iff@nch@check \dimen0=#1\advance\dimen0-\ht0 - \f@nch@warning{% + \PackageWarning{fancyhdr}{% \string#1 is too small (\the#1): \MessageBreak Make it at least \the\ht0, for example:\MessageBreak \string\setlength{\string#1}{\the\ht0}% @@ -4309,7 +4344,7 @@ % \cs{color} command. The \cs{ignorespaces} skips initial spaces in % the parameter, as is usual in a \cs{parbox}, for backwards compatibility.} % We put the \cs{footrule} in a \cs{vbox} to accommodate for flexible -% footrules (e.g. using \cs{hrulefill}), so that the \cs{headwidth} will +% footrules (e.g.\ using \cs{hrulefill}), so that the \cs{headwidth} will % be used as the line width. But to preserve the vertical spacing we % then \cs{unvbox} this box. % @@ -4348,7 +4383,7 @@ % \end{macro} % % \begin{macro}{\@chapapp} -% Define \cs{@chapapp} for classes that don't have it, e.g. amsbook +% Define \cs{@chapapp} for classes that don't have it, e.g.\ amsbook % \begin{macrocode} \f@nch@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}% % \end{macrocode} @@ -4660,9 +4695,10 @@ % \begin{macro}{\iffootnote} % These can be used in a header/footer field to make them conditional on % the presence of floats and/or footnotes. +% \changes{fancyhdr v4.3}{2024/05/08}{Replace \cs{empty} with \cs{@empty}} % \begin{macrocode} -\newcommand\iftopfloat[2]{\ifx\topfloat\empty #2\else #1\fi}% -\newcommand\ifbotfloat[2]{\ifx\botfloat\empty #2\else #1\fi}% +\newcommand\iftopfloat[2]{\ifx\topfloat\@empty #2\else #1\fi}% +\newcommand\ifbotfloat[2]{\ifx\botfloat\@empty #2\else #1\fi}% \newcommand\iffloatpage[2]{\if@fcolmade #1\else #2\fi}% \newcommand\iffootnote[2]{\iff@nch@footnote #1\else #2\fi}% % \end{macrocode} @@ -4688,10 +4724,10 @@ % \begin{macrocode} \long\def\f@nch@pagestyle#1[#2]#3{% \f@nch@ifundefined{ps@#2}{% - \f@nch@errmsg{\string\fancypagestyle: Unknown base page style `#2'}% + \PackageError{fancyhdr}{\string\fancypagestyle: Unknown base page style `#2'}{}% }{% \f@nch@ifundefined{f@nch@ps@#2-is-fancyhdr}{% - \f@nch@errmsg{\string\fancypagestyle: Base page style `#2' is not fancyhdr-based}% + \PackageError{fancyhdr}{\string\fancypagestyle: Base page style `#2' is not fancyhdr-based}{}% }% {% \@namedef{ps@#1}{\let\f@nch@gbl\relax\@nameuse{ps@#2}#3\relax}% diff --git a/macros/latex/contrib/fancyhdr/fancyhdr.pdf b/macros/latex/contrib/fancyhdr/fancyhdr.pdf Binary files differindex 9f781dad3b..35cc4524ff 100644 --- a/macros/latex/contrib/fancyhdr/fancyhdr.pdf +++ b/macros/latex/contrib/fancyhdr/fancyhdr.pdf diff --git a/macros/latex/contrib/fillwith/MANIFEST.md b/macros/latex/contrib/fillwith/MANIFEST.md new file mode 100644 index 0000000000..4cfe517238 --- /dev/null +++ b/macros/latex/contrib/fillwith/MANIFEST.md @@ -0,0 +1,54 @@ +# Manifest for fillwith + +Copyright (C) Fri Aug 9 12:12:59 2024 Clea F. Rees + +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 + https://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX version +2008-05-04 or later. + +This work has the LPPL maintenance status `maintained'. + +The Current Maintainer of this work is Clea F. Rees. + +This work consists of all files listed in manifest.txt. + +This file was automatically generated by `l3build manifest`. + +## Source files + + +### Package files + + +* README.md +* MANIFEST.md +* fillwith.dtx +* fillwith.ins + +### Development files + + +* build.lua +* manifest.lua +* tag.lua +* fillwith-test.lvt +* fillwith-test.luatex.tlg +* fillwith-test.tlg +* fillwith-test.xetex.tlg + + +## Derived files + + +### Package files + +* fillwith.sty +* fillwith-example.tex + +### Typeset documentation + +* fillwith.pdf +* fillwith-example.pdf diff --git a/macros/latex/contrib/fillwith/README.md b/macros/latex/contrib/fillwith/README.md new file mode 100644 index 0000000000..f7f1922b89 --- /dev/null +++ b/macros/latex/contrib/fillwith/README.md @@ -0,0 +1,32 @@ +$Id: README.md 10215 2024-08-09 11:12:21Z cfrees $ + +# fillwith + +A LaTeX package for filling vertical space with something rather than nothing. + +Currently supported somethings are solid rules and dotted lines, with or +without numbers. The package uses a mixture of plain-ish macros, LaTeX 2e and +expl3 methods, but a key-value approach to configuration should make the +document-level interface relatively sane, even if nothing else is. + +For details, please see fillwith.pdf. The implementation is minimally +documented because I have no idea of how to document code. + +## Code Repositories + +Code is hosted at + https://codeberg.org/cfr/fillwith +For convenience, the repository is mirrored at + https://github.com/cfr42/fillwith + +## Contact Details + +Bug reports, feature requests etc. should be filed at + https://codeberg.org/cfr/fillwith/issues + + +Clea F. Rees +Version 0.3 +2024-08-09 + +vim: et:tw=80: diff --git a/macros/latex/contrib/fillwith/fillwith-example.pdf b/macros/latex/contrib/fillwith/fillwith-example.pdf Binary files differnew file mode 100644 index 0000000000..5af411b5e0 --- /dev/null +++ b/macros/latex/contrib/fillwith/fillwith-example.pdf diff --git a/macros/latex/contrib/fillwith/fillwith.dtx b/macros/latex/contrib/fillwith/fillwith.dtx new file mode 100644 index 0000000000..c066ac9dad --- /dev/null +++ b/macros/latex/contrib/fillwith/fillwith.dtx @@ -0,0 +1,747 @@ +% \iffalse meta-comment +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% fillwith.dtx +% Additions and changes Copyright (C) 2024 Clea F. Rees. +% Code from skeleton.dtx Copyright (C) 2015-2024 Scott Pakin (see below). +% +% 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 +% https://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008-05-04 or later. +% +% This work has the LPPL maintenance status \muaintained'. +% +% The Current Maintainer of this work is Clea F. Rees. +% +% This work consists of all files listed in manifest.txt. +% +% The file fillwith.dtx is a derived work under the terms of the +% LPPL. It is based on version 2.4 of skeleton.dtx which is part of +% dtxtut by Scott Pakin. A copy of dtxtut, including the +% unmodified version of skeleton.dtx is available from +% https://www.ctan.org/pkg/dtxtut and released under the LPPL. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \fi +% +% \iffalse +%<*driver> +\RequirePackage{svn-prov} +\ProvidesFileSVN{$Id: fillwith.dtx 10202 2024-08-08 15:33:47Z cfrees $}[v0.3 \revinfo][\filename: \filebase] +\DefineFileInfoSVN[fillwith] +\GetFileInfoSVN* +% ref. ateb Max Chernoff: https://tex.stackexchange.com/a/723294/ +\def\MakePrivateLetters{\makeatletter\ExplSyntaxOn\endlinechar13} +\documentclass[british,a4paper]{ltxdoc} +\usepackage{babel} +\usepackage[tt={monowidth,lining,tabular},sf={lining,proportional},rm={lining,proportional}]{cfr-lm} +\usepackage{fillwith} +\usepackage{parskip} +\usepackage{verbatim} +\usepackage{graphicx} +\usepackage{xurl} +% sicrhau hyperindex=false: llwytho CYN bookmark +\usepackage{hypdoc}% ateb Ulrike Fischer: https://tex.stackexchange.com/a/695555/ +\usepackage{bookmark} +\usepackage{cleveref} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +%^^A \OnlyDescription +%^^A \ExplSyntaxOn +%^^A \makeatletter +\DoNotIndex{\verb,\ProvidesPackageSVN,\NeedsTeXFormat,\ProcessKeyOptions,\ExplSyntaxOn,\ExplSyntaxOff,\RequirePackage,\NeedsTeXFormat,\DefineFileInfoSVN,\GetInfoSVN,\@ifundefined,\@ifl@t@r\ExplLoaderFileDate,\endinput,\PackageError,\PackageWarning,\PackageInfo,\keys_define:nn,\keys_set:nn,\ProcessKeysOptionns,\author,\title,\maketitle,\date,\revinfo,\ProcessKeysOptions,\MessageBreak,\fmtversion,\documentclass,\ExplLoaderFileDate,\filebase,\fileversion,\fileinfo,\filebase:,\filedate,\documentclass,\@ifl@t@r,\begin,\end,\item,\IfFormatAtLeastTF} +%^^A \makeatother +%^^A \ExplSyntaxOff +\definecolor{strawberry}{rgb}{1.000,0.000,0.502} +\definecolor{blueberry}{rgb}{0.000,0.000,1.000} +\definecolor{moss}{rgb}{0.000,0.502,0.251} +\hypersetup{% + colorlinks=true, + citecolor={moss}, + extension=pdf, + linkcolor={strawberry}, + linktocpage=true, + pdfcreator={TeX}, + pdfproducer={pdfeTeX}, + urlcolor={blueberry}% +} +\NewDocElement[% + idxtype=opt., + idxgroup=options, + printtype=\textit{opt.}, +]{Opt}{option} +\NewDocumentCommand \val { m } +{% + {\ttfamily =\,\meta{#1}}% +} +\ExplSyntaxOn +\NewDocumentCommand \vals { m } +{ + { + \ttfamily = \, + \clist_use:nn { #1 } { \textbar } + } +} +\ExplSyntaxOff +\setcounter{IndexColumns}{2} +\makeatletter +\def\@xobeysp{\leavevmode\penalty100\ } +\makeatother +\begin{document} + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% \title{\filebase{} \filerev} +% \author{Clea F. Rees} +% \date{\filedate} +% \maketitle +% \begin{abstract} +% A small package originally based on \href{https://tex.stackexchange.com/a/241139/}{Harish Kumar's answer} to a question I asked on \TeX{} SE\footnote{% +% See \href{https://tex.stackexchange.com/a/241139/}{tex.stackexchange.com/a/241139/}.% +% }. +% The intended purpose was the creation of worksheets for students where I would like \LaTeX{} to use the available vertical space to provide lined areas for answers. +% Since then, the code has been (partially) rewritten in \pkg{expl3} and extended in response to both my own needs and others' questions on \TeX{} SE. +% The package aims to do one thing: to fill a vertical space in the same way as, say, \verb|\vfill|, but with some kind of ‘filler’ rather than empty space. +% Currently, the package supports solid rules or dotted lines. +% The remainder of the current line may optionally be filled in the same way and the ‘filler’ may be coloured if desired. +% +% Lines may optionally be numbered, though the numbered versions should not be used to fill long stretches as they are extremely inefficient. +% \textbf{Numbered fills are highly experimental and not recommended for use in ‘real’ documents.} +% That is, it seems to work, but I recommend using an alternative package or solution if you need a reliable numbering mechanism. +% \end{abstract} +% +% \section{Load}\label{sec:pkg} +% To use the package simply load it in your preamble in the usual way. +% +% \iffalse +%<*verb> +% \fi +\begin{verbatim} + \usepackage[<options>]{fillwith} +\end{verbatim} +% \iffalse +%</verb> +% \fi +% +% A small number of options may be specified when loading the package. +% See \cref{sec:config}. +% +% We start with an example in \cref{sec:ee}. +% \Cref{sec:use} describes the basic commands illustrated in this example. +% \Cref{sec:config} explains the options used by these commands, together with other customisation features of \pkg{fillwith}. +% +% \section{Example}\label{sec:ee} +% +% The code below illustrates most package features. +% +% \Cref{fig:ee1} demonstrates filling with rules. +% Note the effect of altering \texttt{fillwith ht} on line-spacing. +% \begin{figure} +% \centering +% \fbox{\includegraphics{fillwith-example.pdf}} +% \caption{Filling with rules.}\label{fig:ee1} +% \end{figure} +% +% \Cref{fig:ee2} shows dotted fillings. +% Note the use of \cmd{\fillwithset} to alter the colour. +% \begin{figure} +% \centering +% \fbox{\includegraphics[page=2]{fillwith-example.pdf}} +% \caption{Filling with dotted lines.}\label{fig:ee2} +% \end{figure} +% +% \Cref{fig:ee3} shows numbered fillings. +% Note the use of \texttt{goal ht} to divide the available vertical space more-or-less equally. +% \begin{figure} +% \centering +% \fbox{\includegraphics[page=3]{fillwith-example.pdf}} +% \caption{Filling with numbered lines.}\label{fig:ee3} +% \end{figure} +% +% \verbatiminput{fillwith-example.tex} +% +% \section{Usage}\label{sec:use} +% +% \DescribeMacro{\fillwith}\oarg{options} +% \DescribeMacro{\fillwith*} +% +% Fill vertically with current settings, optionally modified by \meta{options}. +% See \cref{sec:config} for \meta{options}. +% If used in the middle of a line, the starred form fills to the end of the line first, whereas the unstarred form does not. +% +% \DescribeMacro{\fillwithrules}\oarg{line-spacing} +% \DescribeMacro{\fillwithrules*} +% +% Convenience wrappers which just set \texttt{style = rules} and set the line-spacing to \meta{line-spacing}. +% These macros do nothing which cannot be done using \cmd{\fillwith} and \cmd{\fillwith*}. +% +% \DescribeMacro{\fillwithdottedlines}\oarg{line-spacing} +% \DescribeMacro{\fillwithdottedlines*} +% +% Convenience wrappers which just set \texttt{style = dots} and set the line-spacing to \meta{line-spacing}. +% These macros do nothing which cannot be done using \cmd{\fillwith} and \cmd{\fillwith*}. +% +% \DescribeMacro{\fillwithnolines}\oarg{options} +% \DescribeMacro{\fillwithnolines*} +% +% Fill vertically with current settings, numbering each complete line, after optionally setting \meta{options}. +% Numbering \textbf{requires} use of these commands, as opposed to the generic \cmd{\fillwith}/\cmd{\fillwith*}. +% +% \section{Customisation}\label{sec:config} +% +% Options can be set per use, locally or globally. +% A small number of options are implemented as package options (\cref{sec:pkg}). +% +% \DescribeMacro{\fillwithset}\marg{options} +% Set local or global defaults. +% +% \DescribeOpt{colour}\val{colour name} +% \DescribeOpt{color} +% \DescribeOpt{lliw} +% +% Colour to be used for (solid) rules. +% +% Initially \texttt{gray}. +% Available as a package option. +% +% \DescribeOpt{dotted color}\val{colour name} +% \DescribeOpt{dotted colour} +% +% Colour to be used for dotted lines. +% +% Initially \texttt{black}. +% Available as a package option. +% +% \DescribeOpt{cont}\vals{true,false} +% +% Whether to fill the remainder of any current line. +% Generally, users will probably prefer to use the starred command forms for local usage, but this option permits modification of the package default on a local or global basis. +% +% Initially \texttt{false}. +% Default is \texttt{true}. +% +% \DescribeOpt{fillwith~ht}\val{real positive number expressed as decimal} +% +% Multiplication factor for line-spacing. +% Typically, hand-written content requires greater spacing than typewritten content. +% This option scales the standard line-spacing. +% +% Initially \texttt{2}, which is also the default value. +% Decimal values such as \texttt{1.5} are permitted. +% +% \DescribeOpt{goal ~ ht}\val{dimension} +% +% Used only by \cmd{\fillwithnolines} and \cmd{\fillwithnolines*}. +% Sets the target dimension to fill with numbered lines. +% If unspecified, the code tries to fill the remaining vertical space on the current page. +% If more than one use of a \pkg{fillwith} macro is used on a single page, this option \textbf{must} be used for numbered fills to prevent a single instance taking (almost) all available space. +% In contrast, multiple unnumbered fills can coexist on the same page without issue --- the available space will simply be divided equally between them. +% +% Initially unset. +% No default. +% +% \DescribeOpt{no ~ font}\val{font switches} +% +% Font switches to apply when typesetting numbers for numbered fills. +% +% Initially \cmd{\normalfont}\cmd{\normalsize}, which is also the default value. +% Note the commands used here should be switches rather than text commands -- for example, use \cmd{\bfseries} rather than \cmd{\textbf} --- since the commands should not expect an argument. +% +% \DescribeOpt{style}\vals{rule,dots,line,lines,rules} +% +% Style of fill. +% \texttt{rule}, \texttt{line}, \texttt{rules} and \texttt{lines} are synonyms which all denote solid rules or lines. +% \texttt{dots} uses dotted lines rather than solid rules. +% The dots are slightly more densely packed than the standard used for dotted fills by the standard classes, as these seem a bit too widely spaced to provide ideal guidelines. +% +% Initially \texttt{dots}, which is also the default value. +% +% If an unknown value is used, the code will attempt to use two macros derived from that value. +% The first is constructed simply by preceding \meta{value} with a backslash and the second by also appending \texttt{part}. +% For example, if \texttt{style}\val{mystyle} is used, the code will try to use \cs{mystyle} and \cs{mystylepart} for complete and partial lines. +% In theory, this supports filling with somewhat arbitrary content, but the implementation is untested and \textbf{should not be used in real documents}. +% +% +% \changes{v0.0}{???}{First public release.} +% \changes{\fileversion}{\filedate}{} +% +% +% \MaybeStop{% +% \PrintChanges +% \PrintIndex +% } +% +% \section{Implementation} +% +% You do not need to read the remainder of this document in order to install or use the package. +% +% \iffalse +%<@@=fillwith> +%<*sty> +% \fi +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[2021-11-15] +\RequirePackage{svn-prov} +\ProvidesPackageSVN[\filebase.sty]{$Id: fillwith.dtx 10202 2024-08-08 15:33:47Z cfrees $}[v0.0 \revinfo][\filebase: fill vertically with non-space] +% this is needed only because l3doc overwrites \fileversion and \filedate +% neither ltxdoc nor doc does this +\DefineFileInfoSVN +% \end{macrocode} +% \iffalse +% ^^A Paid â defnyddio \GetFileInfoSVN*/\GetFileInfoSVN{} yn y fan hon!! +% \fi +% \begin{macrocode} +\RequirePackage{xcolor} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% copied verbatim, excepting format from Joseph Wright's' siunitx.sty under LPPL +\@ifundefined{ExplLoaderFileDate}{% + \RequirePackage{expl3}% +}{} +% almost verbatim from siunitx.sty +\@ifl@t@r\ExplLoaderFileDate{2022-02-24}{% +}{% + \PackageError{fillwith}{Support package expl3 too old} + {% + You need to update your installation of the bundles 'l3kernel' and + 'l3packages'.\MessageBreak + Loading~fillwith~will~abort!% + }% + \endinput +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ExplSyntaxOn +\prop_gput:Nnn \g_msg_module_name_prop { fillwith } { fillwith } + +% BEGIN Expl pkg option setup + +\keys_define:nn { fillwith } +{ + color .meta:n = { + colour = #1, + }, + colour .code:n = { + \colorlet{fillwithcolour}{#1} + }, + dotted ~ color .meta:n = { + dotted colour = #1, + }, + dotted color .meta:n = { + dotted colour = #1, + }, + dotted ~ colour .meta:n = { + dotted colour = #1, + }, + dotted colour .code:n = { + \colorlet{fillwithdottedcolour}{#1} + }, + lliw .meta:n = { + colour = #1, + }, + colour .initial:n = gray, + dotted colour .initial:n = black, +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Joseph Wright: from siunitx.sty ; https://chat.stackexchange.com/transcript/message/64327823#64327823 +\providecommand \IfFormatAtLeastTF { \@ifl@t@r \fmtversion } +\IfFormatAtLeastTF { 2022-06-01 } +{ + \ProcessKeyOptions [ fillwith ] +}{ + \RequirePackage { l3keys2e } + \ProcessKeysOptions { fillwith } +} +\IfFormatAtLeastTF { 2020-10-01 }{ +}{ + \RequirePackage { xparse } + \providecommand \ExpandArgs [1] + { \cs_if_exist_use:c { exp_args:N #1 } } +} +% END Expl pkg option setup +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% BEGIN vars +\box_new:N \l__fillwith_adj_rule_box +\box_new:N \l__fillwith_part_rule_box +\box_new:N \l__fillwith_tmpa_box +\box_new:N \l__fillwith_tmpb_box +% BEGIN coffins +\coffin_new:N \l__fillwith_line_coffin +\coffin_new:N \l__fillwith_lines_coffin +\coffin_new:N \l__fillwith_part_coffin +\coffin_new:N \l__fillwith_tmpa_coffin +% END coffins +% BEGIN dims +\dim_new:N \l__fillwith_ht_dim +\dim_new:N \l__fillwith_dp_dim +\dim_new:N \l__fillwith_rem_dim +\dim_new:N \l__fillwith_line_ht_dim +\dim_new:N \l__fillwith_line_adj_hsize_dim +\dim_set:Nn \l__fillwith_line_ht_dim { 0.4pt } +\dim_new:N \l__fillwith_line_madj_dim +\dim_new:N \l__fillwith_line_vadj_dim +\dim_set_eq:NN \l__fillwith_line_vadj_dim \c_zero_dim +\dim_new:N \l__fillwith_goal_dim +\dim_new:N \l__fillwith_tmpa_dim +% END dims +\int_new:N \g__fillwith_cnt_int +% END vars +% BEGIN fns +\cs_new_protected_nopar:Nn \__fillwith_style: {} +\cs_new_protected_nopar:Nn \__fillwith_coffin_tht:N +{ + \dim_eval:n { \coffin_ht:N #1 + \coffin_dp:N #1 } +} +% BEGIN \__fillwith_hrulefill: +\cs_new_protected_nopar:Npn \__fillwith_hrulefill_part: +{ + \vrule height \c_zero_dim depth \l__fillwith_line_ht_dim width 0.1pt +} +\cs_new_protected_nopar:Npn \__fillwith_hrulefill: +{ + \vrule height \c_zero_dim depth \l__fillwith_line_ht_dim width \l__fillwith_line_adj_hsize_dim +} +% END \__fillwith_hrulefill: +% BEGIN \__fillwith_dottedfill: +\cs_new_protected_nopar:Npn \__fillwith_dottedfill_part: +{ + \hbox to 0.33em {\hss .\hss} +} +\cs_new_protected_nopar:Npn \__fillwith_dottedfill: +{ + \leaders \hbox to 0.33em {\hss .\hss} \hfill \kern \c_zero_dim +} +% END \__fillwith_dottedfill: +% END fns +% \end{macrocode} +% \begin{macro}{\fillwithset} +% Wrapper command for configuration. +% Most global or local customisation will use this as most keys are not valid package options. +% \begin{macrocode} +\NewDocumentCommand\fillwithset { +m }{ + \keys_set:nn { fillwith } { #1 } +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +% BEGIN keys (+) +\keys_define:nn { fillwith } +{ + cont .bool_set:N = \l__fillwith_cont_bool, + cont .default:n = true, + cont .initial:n = false, + fillwith~ht .tl_set:N = \l__fillwith_ht_tl, + fillwith~ht .initial:n = 2, + fillwith~ht .default:n = 2, + goal ~ ht .dim_set:N = \l__fillwith_goal_dim, + line nos .bool_set:N = \l__fillwith_nos_bool, + line ~ nos .bool_set:N = \l__fillwith_nos_bool, + line ~ nos .default:n = true, + line ~ nos .initial:n = false, + no ~ font .tl_set:N = \l__fillwith_no_font_tl, + no ~ font .initial:n = { \normalfont\normalsize }, + no ~ font .default:n = { \normalfont\normalsize }, + style .choices:nn = + { + rule, dots , line , lines , rules , unknown + }{ + \if_case:w \l_keys_choice_int + \or: \cs_set_eq:NN \__fillwith_style: \__fillwith_hrulefill: + \or: \cs_set_eq:NN \__fillwith_style: \__fillwith_dottedfill: + \or: \cs_set_eq:NN \__fillwith_style: \__fillwith_hrulefill: + \or: \cs_set_eq:NN \__fillwith_style: \__fillwith_hrulefill: + \or: \cs_set_eq:NN \__fillwith_style: \__fillwith_hrulefill: + \else: \cs_set_protected_nopar:Nn \__fillwith_style: { \use:c { \l_keys_choice_tl } } + \fi: + \if_case:w \l_keys_choice_int + \or: \cs_set_eq:NN \__fillwith_style_part: \__fillwith_hrulefill_part: + \or: \cs_set_eq:NN \__fillwith_style_part: \__fillwith_dottedfill_part: + \or: \cs_set_eq:NN \__fillwith_style_part: \__fillwith_hrulefill_part: + \or: \cs_set_eq:NN \__fillwith_style_part: \__fillwith_hrulefill_part: + \or: \cs_set_eq:NN \__fillwith_style_part: \__fillwith_hrulefill_part: + \else: \cs_set_protected_nopar:Nn \__fillwith_style_part: { \use:c { \l_keys_choice_tl part } } + \fi: + }, + style .default:n = dots, + style .initial:n = dots, +} +% END keys (+) +% +% BEGIN \__fillwith_fill: +% ref: https://tex.stackexchange.com/a/241139/ Harish Kumar +\cs_new_protected_nopar:Nn \__fillwith_fill: +{ + \__fillwith_measures: + \dim_set:Nn \l__fillwith_line_adj_hsize_dim { \hsize - \@totalleftmargin } + \vbox_set:Nn \l__fillwith_adj_rule_box + { + \parindent=0pt + \vrule height \l__fillwith_ht_dim depth \l__fillwith_dp_dim width \c_zero_dim + \skip_horizontal:n { \@totalleftmargin } + \__fillwith_style: + } + \if_mode_horizontal: + \bool_if:NT \l__fillwith_cont_bool + { + \leaders \box_use:N \l__fillwith_part_rule_box \hfill \kern \c_zero_dim + }{ + \vrule height \l__fillwith_ht_dim depth \l__fillwith_dp_dim width \c_zero_dim + } + %^^A gweithio ond erbyn y rheolau + %^^A byddai'n achosi draferth, siwr o fod + % \tex_par:D + %^^A yn lle hynny, ceisio hyn - oes perygl hefyd? + \para_raw_end: + \else: + \unskip + \skip_vertical:n { \l__fillwith_dp_dim } + \fi: + \xleaders \box_use:N \l__fillwith_adj_rule_box \vfill + \para_end: + \normalcolor +} +% END \__fillwith_fill: +% BEGIN \__fillwith_measures: +\cs_new_protected_nopar:Nn \__fillwith_measures: +{ + \color{fillwithcolour} + \offinterlineskip + \hbox_set:Nn \l__fillwith_part_rule_box + { + \strut + \__fillwith_style_part: + \kern \c_zero_dim + } + \dim_set:Nn \l__fillwith_tmpa_dim { \box_ht:N \l__fillwith_part_rule_box } + \dim_set:Nn \l__fillwith_ht_dim { \l__fillwith_ht_tl \l__fillwith_tmpa_dim } + \box_set_ht:Nn \l__fillwith_part_rule_box { \l__fillwith_ht_dim } + \dim_set:Nn \l__fillwith_tmpa_dim { \box_dp:N \l__fillwith_part_rule_box } + % neu \fp_to_dim:n { \l__fillwith_ht_tl * \l__fillwith_tmpa_dim } ?? + \dim_set:Nn \l__fillwith_dp_dim { \l__fillwith_ht_tl \l__fillwith_tmpa_dim } + \box_set_dp:Nn \l__fillwith_part_rule_box { \l__fillwith_dp_dim } +} +% END \__fillwith_measures: +% BEGIN fillwith +% \end{macrocode} +% \begin{macro}{\fillwith} +% The package is basically this macro. +% \begin{macrocode} +\NewDocumentCommand \fillwith { s o } +{ + \group_begin: + \IfValueT { #2 } + { + \keys_set:nn { fillwith } { #2 } + } + \IfBooleanTF { #1 } + { + \bool_set_true:N \l__fillwith_cont_bool + }{ + \bool_set_false:N \l__fillwith_cont_bool + } + \__fillwith_fill: + \group_end: +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +% END fillwith +% BEGIN fillwithrules +% \end{macrocode} +% \begin{macro}{\fillwithrules} +% Simple convenience wrapper with simplified syntax for (solid) rules. +% \begin{macrocode} +\NewDocumentCommand \fillwithrules { s O { 2 } } +{ + \group_begin: + \IfBooleanTF { #1 } + { + \bool_set_true:N \l__fillwith_cont_bool + }{ + \bool_set_false:N \l__fillwith_cont_bool + } + \keys_set:nn { fillwith } { style = rules, fillwith~ht=#2 } + \__fillwith_fill: + \group_end: +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +% END fillwithrules +% BEGIN fillwithdottedlines +% \end{macrocode} +% \begin{macro}{\fillwithdottedlines} +% Simple convenience wrapper with simplified syntax for dotted lines. +% \begin{macrocode} +\NewDocumentCommand \fillwithdottedlines { s O { 2 } } +{ + \group_begin: + \IfBooleanTF { #1 } + { + \bool_set_true:N \l__fillwith_cont_bool + }{ + \bool_set_false:N \l__fillwith_cont_bool + } + \colorlet{fillwithcolour}{fillwithdottedcolour} + \keys_set:nn { fillwith } { style = dots, fillwith~ht=#2 } + \__fillwith_fill: + \group_end: +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +% END fillwithdottedlines +% BEGIN fillwithnolines +\cs_new_protected:Nn \__fillwith_nos: % rhybudd: ARAF ! SLOW! +{ + \parindent=0pt + \__fillwith_measures: + \dim_set_eq:NN \l__fillwith_line_adj_hsize_dim \linewidth + \vcoffin_set:Nnn \l__fillwith_line_coffin { \l__fillwith_line_adj_hsize_dim } + { + \parindent=0pt + \vrule height \l__fillwith_ht_dim depth \l__fillwith_dp_dim width \c_zero_dim + \skip_horizontal:n \c_zero_skip + \__fillwith_style: + } + \coffin_set_eq:NN \l__fillwith_lines_coffin \l__fillwith_line_coffin + \if_mode_horizontal: + \bool_if:NTF \l__fillwith_cont_bool + { + \leaders \box_use:N \l__fillwith_part_rule_box \hfill \kern \c_zero_dim + \int_gincr:N \g__fillwith_cnt_int + % \vcoffin_set:Nnn \l__fillwith_tmpa_coffin { 1.5em} + % { + % \l__fillwith_no_font_tl \int_to_arabic:n { \g__fillwith_cnt_int } + % } + % \coffin_mark_handle:Nnnn \l__fillwith_tmpa_coffin {B} {l} { red } + % \coffin_mark_handle:Nnnn \l__fillwith_tmpa_coffin {b} {l} { green } + % \coffin_attach:NnnNnnnn \l__fillwith_lines_coffin {B} {r} \l__fillwith_tmpa_coffin {B} {l} {2.5pt} { \l__fillwith_ht_dim + \l__fillwith_dp_dim } + % \coffin_mark_handle:Nnnn \l__fillwith_lines_coffin {T} {r} { blue } + % \coffin_mark_handle:Nnnn \l__fillwith_lines_coffin {t} {r} { magenta } + \dim_set:Nn \l__fillwith_line_vadj_dim { \l__fillwith_dp_dim } + }{ + \vrule height \l__fillwith_ht_dim depth \l__fillwith_dp_dim width \c_zero_dim + } + \dim_set:Nn \l__fillwith_line_madj_dim { \@totalleftmargin } + \para_raw_end: + \else: + \dim_set_eq:NN \l__fillwith_line_madj_dim \c_zero_dim + \unskip + \skip_vertical:n { \l__fillwith_dp_dim } + \fi: + \int_gincr:N \g__fillwith_cnt_int + \vcoffin_set:Nnn \l__fillwith_tmpa_coffin { 1.5em} + { + \l__fillwith_no_font_tl \int_to_arabic:n { \g__fillwith_cnt_int } + } + \coffin_attach:NnnNnnnn \l__fillwith_lines_coffin {B} {r} \l__fillwith_tmpa_coffin {B} {l} {2.5pt} {\c_zero_dim} + \dim_set:Nn \l__fillwith_rem_dim + { + \l__fillwith_goal_dim -\footskip - \pagetotal + } + \dim_until_do:nNnn { \__fillwith_coffin_tht:N \l__fillwith_lines_coffin } > { \l__fillwith_rem_dim - \l__fillwith_ht_dim - \l__fillwith_dp_dim } + { + \coffin_join:NnnNnnnn \l__fillwith_lines_coffin { b } { l } \l__fillwith_line_coffin { t } { l } { \c_zero_dim } { \c_zero_dim } + \int_gincr:N \g__fillwith_cnt_int + \vcoffin_set:Nnn \l__fillwith_tmpa_coffin {1.5em} + { + \l__fillwith_no_font_tl \int_to_arabic:n { \g__fillwith_cnt_int } + } + \coffin_attach:NnnNnnnn \l__fillwith_lines_coffin {B} {r} \l__fillwith_tmpa_coffin {B} {l} {2.5pt} {\c_zero_dim} + } + \coffin_typeset:Nnnnn \l__fillwith_lines_coffin { B } { l } { \l__fillwith_line_madj_dim } { \l__fillwith_line_vadj_dim } + \para_end: + \normalcolor +} +% \end{macrocode} +% \begin{macro}{\fillwithnolines} +% Provisional experimental macro for numbered fill. +% \begin{macrocode} +\NewDocumentCommand \fillwithnolines { s O { } } +{ + \group_begin: + \IfBooleanTF { #1 } + { + \bool_set_true:N \l__fillwith_cont_bool + }{ + \bool_set_false:N \l__fillwith_cont_bool + } + \keys_set:nn { fillwith } { goal ~ ht = \pagegoal, #2 } + \__fillwith_nos: + \group_end: +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +% END fillwithnolines +\ExplSyntaxOff +% \end{macrocode} +% \iffalse +%</sty> +% \fi +% +% \subsection{Demonstration} +% +% Simple example to demonstrate usage. +% +% \iffalse +%<*ee> +% \fi +% \begin{macrocode} +\listfiles +\documentclass[british,a6paper]{article} +\usepackage{babel} +\usepackage[scale=.85,marginparwidth=0pt,marginparsep=0pt]{geometry} +\usepackage{fillwith} +\usepackage{cfr-lm} +\begin{document} +\author{A. N. Author} +\title{\texttt{fillwith} Demo} +\maketitle +\begin{enumerate} + \item What is the answer to the question? + \fillwithrules + \item How did you answer the previous question? + \fillwith*[style=line] + \item Why answer? + + \fillwith*[style=rule,fillwith ht=1.25,colour=blue!40!cyan] + \clearpage + \item Evaluate your responses so far. + \fillwithdottedlines + \item Evaluate your responses so far. + + {% + \fillwithset{dotted colour=magenta}% + \fillwithdottedlines[1.5] + } + \item Criticise your evaluation. + \fillwithdottedlines* + \clearpage + \item Assess your answers. + \fillwithnolines[goal ht = .33\textheight] + \item Assess your answers. + + \fillwithnolines[style=rules,no font=\bfseries\tiny,colour=green!50!gray,goal ht = .67\textheight] + \item Summarise your analysis. + \fillwithnolines* +\end{enumerate} + +\end{document} +% \end{macrocode} +% \iffalse +%</ee> +% \fi +% \subsection{Other} +% \iffalse +%<*other> +% \fi +% \begin{macrocode} +% \end{macrocode} +% \iffalse +%</other> +% \fi +%\Finale diff --git a/macros/latex/contrib/fillwith/fillwith.ins b/macros/latex/contrib/fillwith/fillwith.ins new file mode 100644 index 0000000000..2f7f4c576c --- /dev/null +++ b/macros/latex/contrib/fillwith/fillwith.ins @@ -0,0 +1,68 @@ +%% $Id: fillwith.ins 10202 2024-08-08 15:33:47Z cfrees $ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% fillwith.ins +%% Additions and changes Copyright (C) 2024 Clea F. Rees. +%% Code from skeleton.ins Copyright (C) 2015-2024 Scott Pakin (see below). +%% +%% 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 +%% https://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2008-05-04 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Clea F. Rees. +%% +%% This work consists of all files listed in manifest.txt. +%% +%% The file fillwith.ins is a derived work under the terms of the +%% LPPL. It is based on version 2.4 of skeleton.ins which is part of +%% dtxtut by Scott Pakin. A copy of dtxtut, including the +%% unmodified version of skeleton.ins is available from +%% https://www.ctan.org/pkg/dtxtut and released under the LPPL. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\input docstrip.tex +\keepsilent + +%% ??? +\usedir{tex/latex/fillwith} + +\declarepreamble\safonol +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +Copyright (C) 2024 Clea F. Rees. + +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 + https://www.latex-project.org/lppl.txt +and version 1.3c or later is part of all distributions of LaTeX +version 2008-05-04 or later. + +This work has the LPPL maintenance status `maintained'. + +The Current Maintainer of this work is Clea F. Rees. + +This file may only be distributed together with a copy of the package +fillwith. You may however distribute the package fillwith without +such generated files. + +This work consists of all files listed in manifest.txt. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\endpreamble + +% \askonceonly +\askforoverwritefalse + +\usepreamble\safonol + +\generate{\file{fillwith.sty}{\from{fillwith.dtx}{sty}} + \file{fillwith-example.tex}{\from{fillwith.dtx}{ee}} +} + + +\endbatchfile diff --git a/macros/latex/contrib/fillwith/fillwith.pdf b/macros/latex/contrib/fillwith/fillwith.pdf Binary files differnew file mode 100644 index 0000000000..77fa2ccc00 --- /dev/null +++ b/macros/latex/contrib/fillwith/fillwith.pdf diff --git a/macros/latex/contrib/fontscale/CHANGELOG.md b/macros/latex/contrib/fontscale/CHANGELOG.md index 9706fbbe09..46a32e8fc9 100644 --- a/macros/latex/contrib/fontscale/CHANGELOG.md +++ b/macros/latex/contrib/fontscale/CHANGELOG.md @@ -7,6 +7,58 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to ## [Unreleased] +## [v2.1.0] - 2024-08-12 + +### Changed +- Documentation improvements. + +### Added +- `\CurrentFontSizeCommand` + +## [v2.0.0] - 2024-08-02 + +### Changed +- This update includes many changes that are backwards incompatible. +- The documentation has been completely rewritten. +- Package description changed from "A user interface for setting document font + sizes" to "A flexible interface for setting font sizes". +- The code no longer uses `\@setfontsize`. +- The font size commands provided by this package now do nothing, except issue + a warning, if used in math mode. +- The base font size of the musical typographic scale is now set by the new key + `musical/base`. +- `\PrintFontParameters` renamed to `\PrintFontSizeParameters`. +- `\PrintAllFontParameters` renamed to `\PrintAllFontSizeParameters`. +- `\PrintSampleText` uses a `+m`- instead of an `O`-type argument. +- `\PrintFontSizeCommand` prints `\undefined` instead of `UNDEFINED`. +- `\fontscalesetup` is now removed in `\text_purify:n`. + +### Removed +- Keys `typographic-scale=modular` and `modular`. +- Key `ignore-order` (no support for using `\tiny` to `\Huge` in the wrong + order). +- Key `reset` (very rarely used). +- Public `prop` variables for each font size command from `\tiny` to `\Huge`. + (They are redundant with the other public variables and programmers will very + likely prefer using their own `prop` variables.) + +### Added +- `\fontscalesetup` now has an optional starred argument which first resets the + keys to their initial values. +- Key `musical/base` (explained earlier). +- The package commands now issue a user-friendly error message if the font size + is a zero or negative length. +- The package commands now issue an error if the font baselineskip is less than + the font size. +- The package commands that would produce a low-level error if used in math + mode now issue a user-friendly error message instead. + +### Fixed +- Now correctly checks that the package requires `LaTeX2e` version 2023-11-01 + or newer. +- The keys `<font size command>` no longer incorrectly treat a `/` within a + brace group as the delimiter. + ## [v1.3.0] - 2024-05-17 ### Added @@ -18,7 +70,7 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to ### Changed - The code now regularly uses `V`- and `v`-type arguments to get the value of a variable. -- The code now uses private `expl3` wrappers around the LaTeX2e commands +- The code now uses private `expl3` wrappers around the `LaTeX2e` commands `\@setfontsize`, `\fontsize`, and `\selectfont`. ## [v1.2.2] - 2024-04-29 diff --git a/macros/latex/contrib/fontscale/README.txt b/macros/latex/contrib/fontscale/README.txt index 292cfada9b..d6c9224ee0 100644 --- a/macros/latex/contrib/fontscale/README.txt +++ b/macros/latex/contrib/fontscale/README.txt @@ -1,4 +1,4 @@ -Package: fontscale -- A user interface for setting document font sizes +Package: fontscale -- A flexible interface for setting font sizes Copyright: 2024 (c) Oliver Beery <beeryoliver@gmail.com> CTAN: https://ctan.org/pkg/fontscale Repository: https://github.com/beeryoliver/fontscale diff --git a/macros/latex/contrib/fontscale/beery.cls b/macros/latex/contrib/fontscale/beery.cls index 4777c06a8e..f2fd7fd2c5 100644 --- a/macros/latex/contrib/fontscale/beery.cls +++ b/macros/latex/contrib/fontscale/beery.cls @@ -1,71 +1,84 @@ -% Note: This documentclass is designed ONLY for the document 'fontscale-manual'. Compiled using LuaLaTeX. +% Note: This class is designed ONLY for 'fontscale.tex'. Compiled with LuaTeX. -% The 2023-06-01 LaTeX kernel update added the 'shipout' hook. -\NeedsTeXFormat{LaTeX2e}[2023-06-01] +% LaTeX2e version 2023-11-01 added \IfExplAtLeastTF. +\NeedsTeXFormat{LaTeX2e}[2023-11-01] \ProvidesExplClass {beery} - {2024-04-21} + {2024-08-12} {} {} -\RequirePackage { fix-cm } \LoadClass { article } + +\box_new:N \l__beery_tmp_box + \RequirePackage { fontscale } \fontscalesetup { musical } -\RequirePackage [ list-final-separator = { ,~ and~ } ] { siunitx } +\RequirePackage { siunitx } +\sisetup { list-final-separator = { ,~ and~ } , mode = match } \RequirePackage { mathtools } \RequirePackage [ shortcuts , allowbreakbefore ] { extdash } \RequirePackage { csquotes } +\RequirePackage { lmodern } % CUSTOM MACROS +\tl_const:Nn \c_beery_alphabet_tl { abcdefghijklmnopqrstuvwxyz } +\NewExpandableDocumentCommand \alphabet { } { \c_beery_alphabet_tl } \NewDocumentCommand \Key { m o o } { + \mode_leave_vertical: \group_begin: \ttfamily - \bool_case:nF + \IfNoValueTF {#3} { - { - \bool_lazy_and_p:nn - { \tl_if_novalue_p:n {#2} } - { \tl_if_novalue_p:n {#3} } - } - {#1} - { - \bool_lazy_and_p:nn - { ! \tl_if_novalue_p:n {#2} } - { \tl_if_novalue_p:n {#3} } - } - { #1~ =~ #2 } - { - \bool_lazy_and_p:nn - { ! \tl_if_novalue_p:n {#2} } - { ! \tl_if_novalue_p:n {#3} } - } - { #1~ =~ #2 \hspace* { \fill } \makebox { initial~ =~ #3 } } + \IfNoValueTF {#2} + {#1} + { #1 $\,=\,$ \allowbreak #2 } } - { \errmessage { invalid } } + { #1 $\,=\,$ #2 \hspace* { \fill } \hbox:n { initial $\,=\,$ #3 } } \group_end: } +\NewDocumentCommand \Value { m } { \texttt {#1} } \NewDocumentCommand \cmd { m } { \texttt { \token_to_str:N #1 } \@ } \NewDocumentCommand \cs { m } { \texttt { \token_to_str:c {#1} } \@ } \NewDocumentCommand \marg { m } - { \allowbreak \texttt { \c_left_brace_str #1 \c_right_brace_str } } -\NewDocumentCommand \oarg { m } { \allowbreak \texttt { [ #1 ] } } -\NewDocumentCommand \meta { m } { \texttt { \textlangle #1 \textrangle } } + { + \allowbreak + \texttt { \c_left_brace_str } + $\langle$ + { \normalfont \itshape #1 } + $\rangle$ + \texttt { \c_right_brace_str } + } +\NewDocumentCommand \oarg { m } + { + \allowbreak + \texttt { [ } + $\langle$ + { \normalfont \itshape #1 } + $\rangle$ + \texttt { ] } + } +\NewDocumentCommand \sarg { } { $\langle$ \texttt {*} $\rangle$ } +\NewDocumentCommand \meta { m } + { + $\langle$ + { \normalfont \itshape #1 } + $\rangle$ + } \NewDocumentCommand \cls { m } { \textsf {#1} } \NewDocumentCommand \env { m } { \texttt {#1} } \NewDocumentCommand \pkg { m } { \textsf {#1} } -\NewDocumentCommand \filex { m } { \texttt {#1} \@ } \NewDocumentCommand \latin { m } { \textit {#1} } % PAGE STYLE -\hbox_set:Nn \l_tmpa_box { abcdefghijklmnopqrstuvwxyz } -\dim_const:Nn \c_beery_alphabet_dim { \box_wd:N \l_tmpa_box } +\hbox_set:Nn \l__beery_tmp_box { \c_beery_alphabet_tl } +\dim_const:Nn \c_beery_alphabet_dim { \box_wd:N \l__beery_tmp_box } +\dim_log:N \c_beery_alphabet_dim -\dim_const:Nn \c_beery_big_dim - { \fp_to_dim:n { \l_fontscale_normalsize_size_dim * 10 / 7 } } +\dim_const:Nn \c_beery_big_dim { \l_fontscale_normalsize_baselineskip_skip } \dim_const:Nn \c_beery_medium_dim { \c_beery_big_dim / 2 } \dim_const:Nn \c_beery_small_dim { \c_beery_big_dim / 4 } \skip_const:Nn \c_beery_big_skip @@ -85,12 +98,15 @@ \skip_set:Nn \topskip { \l_fontscale_normalsize_size_dim } \skip_set_eq:NN \splittopskip \topskip -\RequirePackage - [ - letterpaper - , textwidth = \dim_eval:n { \fp_use:N \c_e_fp \c_beery_alphabet_dim } +\RequirePackage { geometry } +\geometry + { + a4paper + , textwidth = + \dim_eval:n { \fp_to_dim:n { \c_e_fp * \c_beery_alphabet_dim } } , textheight = - \dim_eval:n { \fp_eval:n { \c_e_fp * 1.6180 } \c_beery_alphabet_dim } + \dim_eval:n + { \fp_to_dim:n { 1.6180 * \c_e_fp * \c_beery_alphabet_dim } } , heightrounded , centering , headheight = \l_fontscale_footnotesize_baselineskip_skip @@ -98,8 +114,7 @@ , footskip = \dim_eval:n { \c_beery_big_dim + \l_fontscale_footnotesize_baselineskip_skip } - ] - { geometry } + } \RequirePackage { fancyhdr } \pagestyle { fancy } @@ -111,14 +126,22 @@ % PARAGRAPH STYLE \nonfrenchspacing -\linespread { \fp_eval:n { 25 / 21 } } -\RequirePackage [ skip = \c_beery_medium_skip ] { parskip } +\linespread { 1 } +\skip_set_eq:NN \parskip \c_beery_medium_skip +\dim_zero:N \parindent \RequirePackage [ raggedrightboxes ] { ragged2e } \skip_set:Nn \RaggedRightRightskip { 0pt plus 0.5 \linewidth } +\dim_zero:N \RaggedRightParindent +\dim_set_eq:NN \JustifyingParindent \RaggedRightParindent \RaggedRight +\int_set:Nn \pretolerance { -1 } +\int_set:Nn \tolerance { 200 } +\dim_zero:N \emergencystretch \int_set:Nn \widowpenalty { 10000 } \int_set_eq:NN \clubpenalty \widowpenalty \int_set_eq:NN \displaywidowpenalty \widowpenalty +\int_set:Nn \hyphenpenalty { 99 } +\int_set_eq:NN \exhyphenpenalty \hyphenpenalty % HEADINGS, TABLE OF CONTENTS @@ -129,32 +152,34 @@ \titlespacing* \section % section { 0pt } % indent { - \fp_eval:n { 4 / 3 } \c_beery_medium_dim - plus \fp_eval:n { 1 / 2 * 4 } \c_beery_medium_dim - minus \fp_eval:n { 1 / 3 / 4 } \c_beery_medium_dim + - \parskip + + \c_beery_big_dim + plus \fp_eval:n { 1 / 2 * 4 } \c_beery_big_dim + minus \fp_eval:n { 1 / 3 / 4 } \c_beery_big_dim } % before - { \c_beery_medium_skip } % after + { - \parskip + \c_beery_medium_skip } % after \titlespacing* \subsection { 0pt } { - \fp_eval:n { 4 / 3 } \c_beery_medium_dim + - \parskip + + \fp_eval:n { 4 / 3 } \c_beery_medium_dim plus \fp_eval:n { 1 / 2 * 4 } \c_beery_medium_dim minus \fp_eval:n { 1 / 3 / 4 } \c_beery_medium_dim } - { \c_beery_medium_skip } + { - \parskip + \c_beery_medium_skip } \titleformat \section % section [ block ] % shape { \raggedright \large \bfseries } % format - { \thesection . } % label - { 0.5em } % the horizontal separation between label and title body + { \thesection } % label + { 1em } % the horizontal separation between label and title body { } % before code { } % after code \titleformat \subsection [ block ] { \raggedright \normalsize \bfseries } - { \thesubsection . } - { 0.5em } + { \thesubsection } + { 1em } { } { } @@ -181,7 +206,10 @@ { \par \IfBooleanTF #1 - { \int_compare:nNnT { \prevgraf } = { 1 } { \nobreak \@afterheading } } + { + \int_compare:nNnT { \prevgraf } = { 1 } + { \nobreak \@afterheading } + } { \nobreak \@afterheading } } \NewDocumentCommand \listheading { m } @@ -189,7 +217,8 @@ \par #1 \par - \int_compare:nNnT { \prevgraf } = { 1 } { \nobreak \@afterheading } + \int_compare:nNnT { \prevgraf } = { 1 } + { \nobreak \@afterheading } \vspace { \skip_eval:n { \c_beery_small_skip - \parskip } } } @@ -215,7 +244,10 @@ \coffin_new:N \l__beery_footnote_coffin % 1.2 = baselineskip-size-ratio \dim_const:Nn \c_beery_footnote_baselineheight_dim - { \fp_eval:n { 1.2 * \f@linespread - 1 } \l_fontscale_footnotesize_size_dim } + { + \fp_to_dim:n + { ( 1.2 * \f@linespread - 1 ) * \l_fontscale_footnotesize_size_dim } + } \RenewDocumentCommand \@makefntext { +m } { \vcoffin_set:Nnn \l__beery_footnote_coffin { \textwidth } @@ -224,8 +256,10 @@ { \dim_set:Nn \leftmargin { - \fp_eval:n { ( 1 - \l_fontscale_footnotesize_scale_fp ) / 2 } - \textwidth + \fp_to_dim:n + { + ( 1 - \l_fontscale_footnotesize_scale_fp ) / 2 * \textwidth + } } \dim_set_eq:NN \rightmargin \leftmargin \dim_set:Nn \labelsep { 0.5em } @@ -242,4 +276,5 @@ \AddToHook { shipout / lastpage } { \label { LastPage } } \RequirePackage { xurl } -\RequirePackage [ bookmarksnumbered , hidelinks , linktoc = page ] { hyperref }
\ No newline at end of file +\RequirePackage { hyperref } +\hypersetup { bookmarksnumbered , hidelinks , linktoc = page }
\ No newline at end of file diff --git a/macros/latex/contrib/fontscale/fontscale-manual-table-classic.tex b/macros/latex/contrib/fontscale/fontscale-manual-table-classic.tex deleted file mode 100644 index 029d304d82..0000000000 --- a/macros/latex/contrib/fontscale/fontscale-manual-table-classic.tex +++ /dev/null @@ -1,39 +0,0 @@ -\ProvidesFile - {fontscale-manual-table-classic.tex} - [2024-04-15] - -\begin{table} - \centering - \caption - {% - The size of each font size command in \unit{pt} when using a classic typographic scale.% - \label{table:classicscales}% - } - \bigskip - \begin{tblr} - { - colspec= - { - l - Q[si={table-format=3.2},c] - Q[si={table-format=3.2},c] - Q[si={table-format=3.2},c] - } - , cell{1}{2-Z}={guard} - } - \toprule - Command & \Key{classic-10pt} & \Key{classic-11pt} & \Key{classic-12pt} \\ - \midrule - \cs{tiny} & 6 & 7 & 8 \\ - \cs{scriptsize} & 7 & 8 & 9 \\ - \cs{footnotesize} & 8 & 9 & 10 \\ - \cs{small} & 9 & 10 & 11 \\ - \cs{normalsize} & 10 & 11 & 12 \\ - \cs{large} & 11 & 12 & 14 \\ - \cs{Large} & 12 & 14 & 16 \\ - \cs{LARGE} & 14 & 16 & 18 \\ - \cs{huge} & 16 & 18 & 21 \\ - \cs{Huge} & 18 & 21 & 24 \\ - \bottomrule - \end{tblr} -\end{table}
\ No newline at end of file diff --git a/macros/latex/contrib/fontscale/fontscale-manual-table-font-steps.tex b/macros/latex/contrib/fontscale/fontscale-manual-table-font-steps.tex deleted file mode 100644 index 8c5cc8c141..0000000000 --- a/macros/latex/contrib/fontscale/fontscale-manual-table-font-steps.tex +++ /dev/null @@ -1,38 +0,0 @@ -\ProvidesFile - {fontscale-manual-table-font-steps.tex} - [2024-04-15] - -\begin{table} - \centering - \caption - {% - The step of each font size command. - These are constants and cannot be changed.% - \label{table:fontsteps}% - } - \bigskip - \begin{tblr} - { - colspec= - { - l - Q[si={table-format=3.2},c] - } - , cell{1}{2}={guard} - } - \toprule - Command & Step \\ - \midrule - \cs{tiny} & -4 \\ - \cs{scriptsize} & -3 \\ - \cs{footnotesize} & -2 \\ - \cs{small} & -1 \\ - \cs{normalsize} & 0 \\ - \cs{large} & 1 \\ - \cs{Large} & 2 \\ - \cs{LARGE} & 3 \\ - \cs{huge} & 4 \\ - \cs{Huge} & 5 \\ - \bottomrule - \end{tblr} -\end{table}
\ No newline at end of file diff --git a/macros/latex/contrib/fontscale/fontscale-manual-table-modular-musical.tex b/macros/latex/contrib/fontscale/fontscale-manual-table-modular-musical.tex deleted file mode 100644 index 306578ec35..0000000000 --- a/macros/latex/contrib/fontscale/fontscale-manual-table-modular-musical.tex +++ /dev/null @@ -1,38 +0,0 @@ -\ProvidesFile - {fontscale-manual-table-modular-musical.tex} - [2024-04-15] - -\begin{table} - \centering - \caption - {% - The size of each font size command when using a modular or musical typographic scale with the initial settings. - The font sizes are in \unit{pt} and rounded to two decimal places.% - } - \bigskip - \begin{tblr} - { - colspec= - { - l - Q[si={table-format=3.2},c] - Q[si={table-format=3.2},c] - } - , cell{1}{2-3}={guard} - } - \toprule - Command & \Key{modular} & \Key{musical} \\ - \midrule - \cs{tiny} & 6.24 & 5.74 \\ - \cs{scriptsize} & 7.02 & 6.60 \\ - \cs{footnotesize} & 7.90 & 7.58 \\ - \cs{small} & 8.89 & 8.71 \\ - \cs{normalsize} & 10 & 10 \\ - \cs{large} & 11.25 & 11.49 \\ - \cs{Large} & 12.66 & 13.20 \\ - \cs{LARGE} & 14.24 & 15.16 \\ - \cs{huge} & 16.02 & 17.41 \\ - \cs{Huge} & 18.02 & 20 \\ - \bottomrule - \end{tblr} -\end{table}
\ No newline at end of file diff --git a/macros/latex/contrib/fontscale/fontscale-manual.pdf b/macros/latex/contrib/fontscale/fontscale-manual.pdf Binary files differdeleted file mode 100644 index 2637ef9c1f..0000000000 --- a/macros/latex/contrib/fontscale/fontscale-manual.pdf +++ /dev/null diff --git a/macros/latex/contrib/fontscale/fontscale-manual.tex b/macros/latex/contrib/fontscale/fontscale-manual.tex deleted file mode 100644 index 9917636a04..0000000000 --- a/macros/latex/contrib/fontscale/fontscale-manual.tex +++ /dev/null @@ -1,390 +0,0 @@ -\documentclass{beery} - -\begin{document} - - -\section* - {% - \SetFontStep*{1}% - The \pkg{fontscale} package% - } - -A user interface for setting document font sizes - -Oliver Beery - -Version 1.3.0\quad{}17 May 2024 - - -\section{Introduction} -\label{sec:intro} - -\subsection{About} -\label{subsec:about} - -\listheading{The \pkg{fontscale} package provides the following functionalities:} -\begin{itemize} - \item - Set font sizes via a classic, modular, or musical typographic scale. - \item - Set arbitrary sizes and baselineskips for the standard font size commands \cs{tiny}, \cs{scriptsize}, \cs{footnotesize}, \cs{small}, \cs{normalsize}, \cs{large}, \cs{Large}, \cs{LARGE}, \cs{huge}, and \cs{Huge}. - \item - Set the font size settings mid\-/document or within a local group. - \item - Set the font size by setting the font step, scale, or size. - \item - Set the font size relative to the current font size. - \item - Use the current font step, scale, size, and baselineskip directly, for example, for printing or within calculations. - \item - Print sample text to test different font sizes. - \item - For advanced users, store the step, scale, size, and baselineskip of each font size command in \pkg{expl3} variables. -\end{itemize} - -\subsection{Loading the package} -\label{subsec:loading} - -This package requires the 10 October 2023 \pkg{l3kernel} update. -You may need to ensure that your \LaTeX{} installation is up\-/to\-/date before using this package. - -This package lets the user set arbitrary font sizes. -This works with most fonts produced today, but, for historical reasons, the default Computer Modern font is available only in a number of fixed sizes. -If you get a warning that Computer Modern is not available in the requested size, you may need to add the code \cs{RequirePackage{fix-cm}} before \cs{documentclass} to make Computer Modern available at arbitrary font sizes. - -\cs{usepackage}\marg{fontscale} -\nopagebreak\newline -\cs{fontscalesetup}\marg{\meta{keyval list}} - -Load the \pkg{fontscale} package via the usual command in the document preamble. -This package has no package options. -Instead, the package keys are set up via the command \cs{fontscalesetup}\marg{\meta{keyval list}}. -\meta{keyval list} must receive a comma\-/separated list of keys and their associated values. -The package keys are documented in \S\ref{sec:choosing} and \S\ref{sec:overwriting}. - -Many \LaTeX{} document classes have a font size option (\Key{10pt}, \Key{11pt}, \Key{12pt}, etc.\@) which not only changes the set of document font sizes, but also modifies additional settings such as the page layout and vertical spacing which were specifically designed to work with those font sizes. -For this reason, you may want to set the document class font size option close to the value of \cs{normalsize} set by this package. - -Internally, this package sets up each font size command from \cs{tiny} to \cs{Huge} using the kernel command \cs{@setfontsize}\---they have no additional functionality beyond that of \cs{@setfontsize}. -Unlike the standard document classes, the font size commands set up by this package do not change the vertical spacing for displayed math and list structures. -If the user would like to add this functionality or perhaps other features to the font size commands, they can do so via hooks, which are documented in the \LaTeX{} kernel. - -\subsection{Terminology} -\label{subsec:terminology} - -When using the \pkg{fontscale} package, each font size, including the standard font size commands from \cs{tiny} to \cs{Huge}, has a step, scale, size, and baselineskip. -The latter two parameters are the familiar first and second arguments to the low\-/level font command \cs{fontsize}\marg{\meta{dimen}}\marg{\meta{skip}}. -The font scale is the relative font size; the ratio of the font size to \cs{normalsize}. -The font step is the number of font size gradations from \cs{normalsize}, which has a step of \num{0}. -Table~\ref{table:fontsteps} lists the font step of each font size command. - -\input{./fontscale-manual-table-font-steps.tex} - -This package defines many keys and commands that take as a value or argument a \meta{dim expr}, \meta{skip expr}, \meta{fp expr}, or \meta{int expr}. -This syntax is short for a dimen, skip, floating point, or integer expression, respectively. -See \pkg{usrguide} \S5 for more information.% -\footnote{\url{https://ctan.org/pkg/usrguide}} - - -\section{Choosing the typographic scale} -\label{sec:choosing} - -\Key{typographic-scale} - [classic-10pt, classic-11pt, classic-12pt, modular, musical] - [classic-10pt] -\newline -\Key{modular/ratio}[\meta{fp expr}][1.125] -\newline -\Key{musical/ratio}[\meta{fp expr}][2]% -\nopagebreak\newline -\Key{musical/notes}[\meta{int expr}][5] - -The key \Key{typographic\-/scale} sets the font sizes using a classic, modular, or musical typographic scale. -These are common methods of choosing a set of document font sizes. -The choice of typographic scale initializes to \Key{classic\-/10pt}. - -The key \Key{typographic\-/scale} can also be set in a condensed format via the keys \Key{classic\-/10pt}, \Key{classic\-/11pt}, \Key{classic\-/12pt}, \Key{modular}, or \Key{musical}, which set the key \Key{typographic\-/scale} to the corresponding value. - -The classic typographic scale consists of the traditional font sizes -\numlist{6;7;8;9;10;11;12;14;16;18;21;24;36;48;60;72}.% -\footnote{See \S{}3.1 of \textit{The Elements of Typographic Style} by Robert Bringhurst.} -They have been used since the sixteenth century and are the default font sizes on most computer software. -The keys \Key{classic-10pt, classic-11pt, classic-12pt} set the size of each font size command to values based on their position in the classic typographic scale. -The size of \cs{normalsize} is the named point size. -The sizes of the other font size commands are the adjacent font sizes in the scale. -Table~\ref{table:classicscales} lists the size of each font size command when using a classic typographic scale. - -\input{./fontscale-manual-table-classic.tex} - -The key \Key{modular} sets the font sizes from \cs{tiny} to \cs{Huge} using a modular typographic scale. -In a modular scale, each font size is a fixed ratio from the adjacent font sizes.% -\footnote{\url{https://alistapart.com/article/more-meaningful-typography/}} -Here, the base font size is the size of \cs{normalsize}, which can be set via the key \Key{normalsize/size}[\meta{dim expr}], more documented in \S\ref{sec:overwriting}. -If not set, \cs{normalsize} initializes to \qty{10}{pt}. -The modular ratio can be set via the key \Key{modular\slash{}ratio}. -The initial modular ratio is \num{1.125}. - -\input{./fontscale-manual-table-modular-musical.tex} - -The key \Key{musical} sets the font sizes according to their position in a musical typographic scale. -The font size is calculated using the formula:% -\footnote - {% - I have referenced this article by Spencer Mortensen: - \newline - \url{https://spencermortensen.com/articles/typographic-scale/}% - } -\[ f_i = f_0 \times r ^ { i / n } \] -$f_0$ is the base font size, the size of \cs{normalsize}. -$f_i$ is the font size with font step~$i$. -$n$ is the number of notes in the musical scale\---the number of font size gradations or steps above \cs{normalsize}. -$r$ is the ratio of the musical scale, the ratio of the highest to the lowest note $ f_n / f_0 $. -(The modular typographic scale is actually a special case of the musical typographic scale where $n=1$.) - -The musical ratio~$r$ and the number of notes~$n$ can be set via the keys \Key{musical\slash{}ratio} and \Key{musical\slash{}notes}. -The initial musical ratio\---\num{2}\---and the initial number of notes\---\num{5}\---are the same as that of the classic typographic scale.% -\footnote{Ibid.} -Conveniently, \cs{Huge} is \num{5} steps above \cs{normalsize}. -The font size of \cs{normalsize}~$f_0$ can be set using the key \Key{normalsize/size}[\meta{dim expr}], more documented in \S\ref{sec:overwriting}. -When using a musical typographic scale, \cs{normalsize} initializes to \qty{10}{pt}.% -\footnote {I have set the initial value to \qty{10}{pt} instead of the \qty{12}{pt} recommended by the Spencer Mortensen article because this matches the default settings of the standard \LaTeXe{} document classes.} - -\Key{baselineskip-size-ratio}[\meta{fp expr}][1.2] -\KeepNextPar* - -The key \Key{baselineskip\-/size\-/ratio} sets the ratio of the font baselineskip to the font size. -By default, the font baselineskip of each font size command equals its font size times \meta{fp expr}. -Users should not set this key unless they really know what they are doing. -When using increased line spacing, users should prefer the low\-/level font command \cs{linespread} or the \pkg{setspace} package. - - -\section{Overwriting the typographic scale} -\label{sec:overwriting} - -In some situations, users may need to explicitly set the scale, size, or baselineskip of a font size command, overwriting the value set by the keys in \S\ref{sec:choosing}. -Note that the font steps and the scale of \cs{normalsize} are constants and cannot be changed. - -\Key{\meta{font size command}/scale}[\meta{fp expr}] -\KeepNextPar* - -The keys \Key{\meta{font size command}\slash{}scale} set the scale of \meta{font size command} to \meta{fp expr}, ignoring the value set by the key \Key{typographic\-/scale}. -The key \Key{normalsize\slash{}scale} is not defined. - -\Key{\meta{font size command}/size}[\meta{dim expr}] -\KeepNextPar* - -The keys \Key{\meta{font size command}\slash{}size} set the size of \meta{font size command} to \meta{dim expr}, ignoring the values set by the keys \Key{typographic\-/scale} and \Key{\meta{font size command}\slash{}scale}. -\meta{dim expr} supplies a default unit of \unit{pt}. - -The package will issue a warning if the user sets the keys \Key{\meta{font size command}\slash{}size} and \Key{\meta{font size command}\slash{}scale} for the same \meta{font size command} since the latter key will be ignored. - -\Key{\meta{font size command}/baselineskip}[\meta{skip expr}] -\KeepNextPar* - -The keys \Key{\meta{font size command}\slash{}baselineskip} set the font baselineskip of \meta{font size command} to \meta{skip expr} instead of calculating it from the size of \meta{font size command} and \Key{baselineskip\-/size\-/ratio}. -\meta{skip expr} supplies a default unit of \unit{pt}. - -\Key{\meta{font size command}}[\meta{dim expr}] -\nopagebreak\newline -\Key{\meta{font size command}}[\meta{dim expr}/\meta{skip expr}] - -The keys \Key{\meta{font size command}} set the keys \Key{\meta{font size command}\slash{}size} or \Key{\meta{font size command}\slash{}baselineskip} in a condensed format. -The latter format resembles traditional typographic notation where the size and leading of a text can be expressed as, for example, $10/12$ or $11/13$. -The number before/after the slash is the size/leading in \unit{pts}. - -\Key{ignore-order}[true, false][false] -\KeepNextPar* - -The user should take care to ensure that the font sizes and font baselineskips remain in the correct order when directly setting the scales, sizes, or baselineskips of the different font size commands. -The magnitudes of the font sizes and font baselineskips should be ordered from \cs{tiny} to \cs{normalsize} to \cs{Huge}. -This is important for typographic and syntactic consistency. -This package will issue a warning if they are not in the correct order. -The user can disable this warning via the key \Key{ignore\-/order}[true] or just \Key{ignore\-/order}. - - -\section{User commands} -\label{sec:usercommands} - -\subsection{Expandable font parameters} -\label{subsec:fontparameters} - -\cs{CurrentFontStep} -\nopagebreak\newline -\cs{CurrentFontScale} -\newline -\cs{CurrentFontSize} -\nopagebreak\newline -\cs{CurrentFontBaselineskip} - -These are fully expandable commands that expand to the current font step, scale, size, or baselineskip. -They can be used for printing or within calculations. -Caution: \cs{CurrentFontStep} will expand to nothing if the current font step is undefined. - -Internally, \cs{CurrentFontStep}, \cs{CurrentFontScale}, and \cs{CurrentFontSize} use the kernel command \cs{f@size}. -\cs{CurrentFontSize} expands to \texttt{f@size pt}. -\cs{CurrentFontBaselineskip} expands to the kernel command \cs{f@baselineskip}. -Note that the low\-/level font command \cs{fontsize}\marg{\meta{dimen}}\marg{\meta{skip}} sets \cs{f@size} to the new font size before expanding its second argument. -This means that \cs{CurrentFontStep}, \cs{CurrentFontScale}, and \cs{CurrentFontSize} may need to be first expanded if used in \meta{skip}. -This package provides the command \cs{SetFontSizeBaselineskip} as an alternative to \cs{fontsize} + \cs{selectfont} that avoids this issue (\S\ref{subsec:fontsize}). - -\subsection{More font sizing commands} -\label{subsec:fontsize} - -The \pkg{fontscale} package provides the commands \cs{SetFontStep}, \cs{SetFontScale}, \cs{SetFontSize}, \cs{ScaleFont}, and \cs{SetFontSizeBaselineskip} which set the font size in different ways. -The first three commands have a starred version which sets the font size relative to the current font size. -Internally, these commands all use the low\-/level font commands \cs{fontsize} and \cs{selectfont}. -These commands should be used only in special cases. -Generally, users should prefer the font size commands from \cs{tiny} to \cs{Huge} for typographic and syntactic consistency, although \cs{SetFontStep*}\marg{\meta{integer}} can use a font size command directly. - -\cs{SetFontStep}\marg{\meta{fp expr}} -\nopagebreak\newline -\cs{SetFontStep*}\marg{\meta{fp expr}} - -\cs{SetFontStep} sets the font size by setting the font step to \meta{fp expr}. -The starred version \cs{SetFontStep*} adds \meta{fp expr} to the current font step. -If the choice of typographic scale is not modular or musical, then the only valid values for \meta{fp expr} are the integers from \num{-4} to \num{5}, corresponding to the font size commands from \cs{tiny} to \cs{Huge}. -\cs{SetFontStep} will issue an error if the calculated font step is invalid. -The starred version \cs{SetFontStep*} will also issue an error if the current font step is invalid. -\cs{SetFontStep} sets the font baselineskip to the calculated font size \texttimes{} \Key{baselineskip\-/size\-/ratio}. -If the calculated font step matches the step of any font size command, then that font size command will be used directly. - -\listheading{Examples:} -\begin{itemize} - \item - For example, \cs{SetFontStep}\marg{-2} and \cs{SetFontStep}\marg{2} use \cs{footnotesize} and \cs{Large}. - Note that it is typically better to use the equivalent font size command in place of \cs{SetFontStep}\marg{\meta{integer}}. - \item - If the current font size is \cs{normalsize}, \cs{SetFontStep*}\marg{1} and \cs{SetFontStep*}\marg{-1} use \cs{large} and \cs{small}. - This is useful for moving up or down a note on the typographic scale. - \item - If the choice of typographic scale is modular or musical, \cs{SetFontStep*}\marg{-0.5} sets the font size and font baselineskip to values between that of \cs{normalsize} and \cs{small}. - Otherwise, it produces an error. -\end{itemize} - -\cs{SetFontScale}\marg{\meta{fp expr}} -\nopagebreak\newline -\cs{SetFontScale*}\marg{\meta{fp expr}} - -\cs{SetFontScale} sets the font size by setting the font scale to \meta{fp expr}. -The font baselineskip is set to the calculated font size \texttimes{} \Key{baselineskip\-/size\-/ratio}. -The starred version \cs{SetFontScale*} adds \meta{fp expr} to the current font scale. -For example, \cs{SetFontScale}\marg{1.25} makes the font size 25\% larger than \cs{normalsize}. -If the current font size is \cs{normalsize}, \cs{SetFontScale*}\marg{0.2} is equivalent to \cs{SetFontScale}\marg{1.2}. - -\cs{SetFontSize}\marg{\meta{dim expr}} -\nopagebreak\newline -\cs{SetFontSize*}\marg{\meta{dim expr}} - -\cs{SetFontSize} sets the font size to \meta{dim expr}. -\meta{dim expr} supplies a default unit of \unit{pt}. -The font baselineskip is set to the calculated font size \texttimes{} \Key{baselineskip\-/size\-/ratio}. -The starred version \cs{SetFontSize*} adds \meta{dim expr} to the current font size. -For example, \cs{SetFontSize*}\marg{1} and \cs{SetFontSize*}\marg{-1pt} increase and decrease the current font size by a \unit{pt}. - -\cs{ScaleFont}\marg{\meta{fp expr}} -\KeepNextPar* - -Scales the current font size and the current font baselineskip by a factor of \meta{fp expr}. -For example, if the current font size and font baselineskip are \qty{10}{pt} and \qty{12}{pt}, using \cs{ScaleFont}\marg{0.8} will reduce them proportionally to \qty{8}{pt} and \qty{9.6}{pt}. - -\cs{SetFontSizeBaselineskip}\marg{\meta{dim expr}}\marg{\meta{skip expr}} -\KeepNextPar* - -Sets the font size to \meta{dim expr} and the font baselineskip to \meta{skip expr}. -Both arguments supply a default unit of \unit{pt}. -\cs{SetFontSizeBaselineskip} can be used as an alternative to \cs{fontsize} + \cs{selectfont} as it avoids the issue with \cs{f@size} discussed in \S\ref{subsec:fontparameters}. - -\subsection{Testing and debugging} -\label{subsec:debug} - -The commands documented here are intended primarily for testing and debugging. -I have used them often when developing this package so I think users will find them helpful. - -\cs{PrintFontParameters} -\nopagebreak\newline -\cs{PrintAllFontParameters} - -\cs{PrintFontParameters} prints the current font step, scale, size, and baselineskip in this order in a comma\-/separated list of key = value pairs. -If the current font step is undefined (as explained for \cs{SetFontStep} in \S\ref{subsec:fontsize}), it will be left blank. -\cs{PrintAllFontParameters} prints the step, scale, size, and baselineskip of each font size command. - -\cs{PrintSampleText}\oarg{\meta{text}} -\nopagebreak\newline -\cs{PrintSampleText*}\oarg{\meta{text}} - -\cs{PrintSampleText} prints \meta{text} in each font size ordered from \cs{tiny} to \cs{Huge} each followed by a paragraph break. -The starred version \cs{PrintSampleText*} reverses the sizing order. -The \meta{text} can be changed via the optional argument, but cannot contain \cs{par} tokens. -The default \meta{text} is \enquote{The \texttt{fontscale} package: A user interface for setting document font sizes}. -One useful way of printing example text is by using -\cs{PrintSampleText}\oarg{\cs{PrintFontSizeCommand}:\textvisiblespace{}\cs{PrintFontParameters}}. - -\cs{PrintFontSizeCommand} -\KeepNextPar* - -\cs{PrintFontSizeCommand} tests whether the current font size and the current font baselineskip match the font size and font baselineskip of any font size command from \cs{tiny} to \cs{Huge}. -If so, it prints the name of that font size command, including the backslash character. -If not, it instead prints \enquote{UNDEFINED\@}. -\vfill\pagebreak%manual - -\subsection - {% - \texorpdfstring - {More on \cs{fontscalesetup}} - {More on \textbackslash{}fontscalesetup}% - } -\label{subsec:fontscalesetup} - -\cs{fontscalesetup}\marg{\meta{keyval list}} -\KeepNextPar* - -Sets and processes the \pkg{fontscale} package keys and then uses \cs{normalsize}. -\cs{fontscalesetup} can be applied mid\-/document or locally within the current \TeX{} group. - -\Key{reset}[initial, preamble] -\KeepNextPar* - -The key \Key{reset} is also available. -Its value must be either \texttt{initial} or \texttt{preamble}. -The key \Key{reset}[initial] or just \Key{reset} sets all the keys to their initial values. -The key \Key{reset}[preamble] sets all the keys to their values at the end of the preamble (or does nothing if used before the end of the preamble). - - -\section{Programming} -\label{sec:programming} - -This section is relevant to \LaTeX3 programmers. - -The document commands \cs{SetFontStep}, \cs{SetFontScale}, \cs{SetFontSize}, \cs{ScaleFont}, and \cs{SetFontSizeBaselineskip} are set up to work with \cs{text_purify:n}. -\cs{text_purify:n} will correctly remove these commands and their arguments. -This includes the starred versions \cs{SetFontStep*}, \cs{SetFontScale*}, and \cs{SetFontSize*}. - -This package does not provide any public \pkg{expl3} functions. - -This package provides some public \pkg{expl3} variables. -The package stores in public variables the step, scale, size, and baselineskip of each font size command. -These variables should not be modified directly. -Instead, they should be modified only indirectly via the command \cs{fontscalesetup}. - -Each takes the form: - -\begingroup - \ttfamily - \textbackslash{}c\_fontscale\_\meta{font size command}\_step\_fp - \nopagebreak\newline - \textbackslash{}l\_fontscale\_\meta{font size command}\_scale\_fp - \newline - \textbackslash{}l\_fontscale\_\meta{font size command}\_size\_dim - \nopagebreak\newline - \textbackslash{}l\_fontscale\_\meta{font size command}\_baselineskip\_skip -\endgroup - -Exception: -\cs{l_fontscale_normalsize_scale_fp} is not defined. -The scale of \cs{normalsize} is instead stored as the constant \cs{c_fontscale_normalsize_scale_fp}, which always equals \num{1}. - -The step, scale, size, and baselineskip of each font size command are also stored in property lists, one for each font size command: - -\texttt{\textbackslash{}l\_fontscale\_\meta{font size command}\_prop} - -\end{document}
\ No newline at end of file diff --git a/macros/latex/contrib/fontscale/fontscale-table-classic.tex b/macros/latex/contrib/fontscale/fontscale-table-classic.tex new file mode 100644 index 0000000000..50ff413e36 --- /dev/null +++ b/macros/latex/contrib/fontscale/fontscale-table-classic.tex @@ -0,0 +1,41 @@ +\ProvidesFile + {fontscale-table-classic.tex} + [2024-08-12] + +\begin{table} + \centering + \caption + {% + The font size of each font size command from \cs{tiny} to \cs{Huge} in units of \unit{pt} when using a classic typographic scale.% + \label{table:classic}% + } + \bigskip + \begin{tblr} + { + colspec= + { + l + Q[si={table-format=3.2},c] + Q[si={table-format=3.2},c] + Q[si={table-format=3.2},c] + } + , cell{1}{2-Z}={guard} + , cell{2-Z}{1}={cmd=\cs} + , cell{1}{2-Z}={cmd=\Key} + } + \toprule + font size command & classic-10pt & classic-11pt & classic-12pt \\ + \midrule + tiny & 6 & 7 & 8 \\ + scriptsize & 7 & 8 & 9 \\ + footnotesize & 8 & 9 & 10 \\ + small & 9 & 10 & 11 \\ + normalsize & 10 & 11 & 12 \\ + large & 11 & 12 & 14 \\ + Large & 12 & 14 & 16 \\ + LARGE & 14 & 16 & 18 \\ + huge & 16 & 18 & 21 \\ + Huge & 18 & 21 & 24 \\ + \bottomrule + \end{tblr} +\end{table}
\ No newline at end of file diff --git a/macros/latex/contrib/fontscale/fontscale-table-font-steps.tex b/macros/latex/contrib/fontscale/fontscale-table-font-steps.tex new file mode 100644 index 0000000000..5b20f18681 --- /dev/null +++ b/macros/latex/contrib/fontscale/fontscale-table-font-steps.tex @@ -0,0 +1,39 @@ +\ProvidesFile + {fontscale-table-font-steps.tex} + [2024-08-12] + +\begin{table} + \centering + \caption + {% + The font step of each font size command from \cs{tiny} to \cs{Huge}. + These are constants and cannot be changed.% + \label{table:fontsteps}% + } + \bigskip + \begin{tblr} + { + colspec= + { + l + Q[si={table-format=3.2},c] + } + , cell{1}{2}={guard} + , cell{2-Z}{1}={cmd=\cs} + } + \toprule + font size command & font step \\ + \midrule + tiny & -4 \\ + scriptsize & -3 \\ + footnotesize & -2 \\ + small & -1 \\ + normalsize & 0 \\ + large & 1 \\ + Large & 2 \\ + LARGE & 3 \\ + huge & 4 \\ + Huge & 5 \\ + \bottomrule + \end{tblr} +\end{table}
\ No newline at end of file diff --git a/macros/latex/contrib/fontscale/fontscale-table-musical.tex b/macros/latex/contrib/fontscale/fontscale-table-musical.tex new file mode 100644 index 0000000000..e6a6ca5ce0 --- /dev/null +++ b/macros/latex/contrib/fontscale/fontscale-table-musical.tex @@ -0,0 +1,39 @@ +\ProvidesFile + {fontscale-table-musical.tex} + [2024-08-12] + +\begin{table} + \centering + \caption + {% + The font size of each font size command from \cs{tiny} to \cs{Huge} when using a musical typographic scale with the initial values. + The font sizes are in units of \unit{pt} and rounded to two decimal places.% + \label{table:musical}% + } + \bigskip + \begin{tblr} + { + colspec= + { + l + Q[si={table-format=3.2},c] + } + , cell{1}{2}={guard} + , cell{2-Z}{1}={cmd=\cs} + } + \toprule + font size command & \Key{musical} \\ + \midrule + tiny & 5.74 \\ + scriptsize & 6.60 \\ + footnotesize & 7.58 \\ + small & 8.71 \\ + normalsize & 10 \\ + large & 11.49 \\ + Large & 13.20 \\ + LARGE & 15.16 \\ + huge & 17.41 \\ + Huge & 20 \\ + \bottomrule + \end{tblr} +\end{table}
\ No newline at end of file diff --git a/macros/latex/contrib/fontscale/fontscale.pdf b/macros/latex/contrib/fontscale/fontscale.pdf Binary files differnew file mode 100644 index 0000000000..adcd809134 --- /dev/null +++ b/macros/latex/contrib/fontscale/fontscale.pdf diff --git a/macros/latex/contrib/fontscale/fontscale.sty b/macros/latex/contrib/fontscale/fontscale.sty index d032e49860..70bfae6026 100644 --- a/macros/latex/contrib/fontscale/fontscale.sty +++ b/macros/latex/contrib/fontscale/fontscale.sty @@ -1,33 +1,32 @@ -% Package : fontscale -- A user interface for setting document font sizes +% Package : fontscale -- A flexible interface for setting font sizes % Copyright : 2024 (c) Oliver Beery <beeryoliver@gmail.com> % CTAN : https://ctan.org/pkg/fontscale % Repository: https://github.com/beeryoliver/fontscale % License : The LaTeX Project Public License 1.3c -% The 2022-06-01 LaTeX kernel update added \ProcessKeyOptions. -\NeedsTeXFormat{LaTeX2e}[2022-06-01] +% LaTeX2e version 2023-11-01 added \IfExplAtLeastTF. +\NeedsTeXFormat{LaTeX2e}[2023-11-01] \ProvidesExplPackage {fontscale} - {2024-05-17} - {1.3.0} - {A user interface for setting document font sizes} + {2024-08-12} + {2.1.0} + {A flexible interface for setting font sizes} -% The 2023-10-10 l3kernel update added many 'e'-variants. -\IfExplAtLeastTF { 2023-10-10 } - { } +% l3kernel version 2023-10-10 added many 'e'-variants. +\IfExplAtLeastTF { 2023-10-10 } { } { \msg_new:nnn { fontscale } { expl3-out-of-date } { - The~ package~ could~ not~ load.~ - The~ fontscale~ package~ requires~ - L3~ programming~ layer~ version~ 2023-10-10~ or~ later. + The~ fontscale~ package~ could~ not~ load.~ + This~ package~ requires~ + L3~ programming~ layer~ version~ 2023-10-10~ or~ newer. } \msg_critical:nn { fontscale } { expl3-out-of-date } } % This package does not require any other packages! -% DECLARE FONT PARAMETER VARIABLES +% DECLARE FONT SIZE PARAMETER VARIABLES \fp_const:Nn \c_fontscale_tiny_step_fp { -4 } \fp_const:Nn \c_fontscale_scriptsize_step_fp { -3 } @@ -74,31 +73,7 @@ \skip_new:N \l_fontscale_huge_baselineskip_skip \skip_new:N \l_fontscale_Huge_baselineskip_skip -\prop_new:N \l_fontscale_tiny_prop -\prop_new:N \l_fontscale_scriptsize_prop -\prop_new:N \l_fontscale_footnotesize_prop -\prop_new:N \l_fontscale_small_prop -\prop_new:N \l_fontscale_normalsize_prop -\prop_new:N \l_fontscale_large_prop -\prop_new:N \l_fontscale_Large_prop -\prop_new:N \l_fontscale_LARGE_prop -\prop_new:N \l_fontscale_huge_prop -\prop_new:N \l_fontscale_Huge_prop - -\prop_put:Nnn \l_fontscale_tiny_prop { step } { -4 } -\prop_put:Nnn \l_fontscale_scriptsize_prop { step } { -3 } -\prop_put:Nnn \l_fontscale_footnotesize_prop { step } { -2 } -\prop_put:Nnn \l_fontscale_small_prop { step } { -1 } -\prop_put:Nnn \l_fontscale_normalsize_prop { step } { 0 } -\prop_put:Nnn \l_fontscale_large_prop { step } { 1 } -\prop_put:Nnn \l_fontscale_Large_prop { step } { 2 } -\prop_put:Nnn \l_fontscale_LARGE_prop { step } { 3 } -\prop_put:Nnn \l_fontscale_huge_prop { step } { 4 } -\prop_put:Nnn \l_fontscale_Huge_prop { step } { 5 } - -\prop_put:Nnn \l_fontscale_normalsize_prop { scale } { 1 } - -% INITIALIZE FONT PARAMETER VARIABLES +% INITIALIZE FONT SIZE PARAMETER VARIABLES \fp_set:Nn \l_fontscale_tiny_scale_fp { 0.6 } \fp_set:Nn \l_fontscale_scriptsize_scale_fp { 0.7 } @@ -132,177 +107,221 @@ \skip_set:Nn \l_fontscale_huge_baselineskip_skip { 19.2pt } \skip_set:Nn \l_fontscale_Huge_baselineskip_skip { 21.6pt } -\prop_put:Nnn \l_fontscale_tiny_prop { scale } { 0.6 } -\prop_put:Nnn \l_fontscale_scriptsize_prop { scale } { 0.7 } -\prop_put:Nnn \l_fontscale_footnotesize_prop { scale } { 0.8 } -\prop_put:Nnn \l_fontscale_small_prop { scale } { 0.9 } -\prop_put:Nnn \l_fontscale_large_prop { scale } { 1.1 } -\prop_put:Nnn \l_fontscale_Large_prop { scale } { 1.2 } -\prop_put:Nnn \l_fontscale_LARGE_prop { scale } { 1.4 } -\prop_put:Nnn \l_fontscale_huge_prop { scale } { 1.6 } -\prop_put:Nnn \l_fontscale_Huge_prop { scale } { 1.8 } - -\prop_put:Nnn \l_fontscale_tiny_prop { size } { 6pt } -\prop_put:Nnn \l_fontscale_scriptsize_prop { size } { 7pt } -\prop_put:Nnn \l_fontscale_footnotesize_prop { size } { 8pt } -\prop_put:Nnn \l_fontscale_small_prop { size } { 9pt } -\prop_put:Nnn \l_fontscale_normalsize_prop { size } { 10pt } -\prop_put:Nnn \l_fontscale_large_prop { size } { 11pt } -\prop_put:Nnn \l_fontscale_Large_prop { size } { 12pt } -\prop_put:Nnn \l_fontscale_LARGE_prop { size } { 14pt } -\prop_put:Nnn \l_fontscale_huge_prop { size } { 16pt } -\prop_put:Nnn \l_fontscale_Huge_prop { size } { 18pt } - -\prop_put:Nnn \l_fontscale_tiny_prop { baselineskip } { 7.2pt } -\prop_put:Nnn \l_fontscale_scriptsize_prop { baselineskip } { 8.4pt } -\prop_put:Nnn \l_fontscale_footnotesize_prop { baselineskip } { 9.6pt } -\prop_put:Nnn \l_fontscale_small_prop { baselineskip } { 10.8pt } -\prop_put:Nnn \l_fontscale_normalsize_prop { baselineskip } { 12 pt } -\prop_put:Nnn \l_fontscale_large_prop { baselineskip } { 13.2pt } -\prop_put:Nnn \l_fontscale_Large_prop { baselineskip } { 14.4pt } -\prop_put:Nnn \l_fontscale_LARGE_prop { baselineskip } { 16.8pt } -\prop_put:Nnn \l_fontscale_huge_prop { baselineskip } { 19.2pt } -\prop_put:Nnn \l_fontscale_Huge_prop { baselineskip } { 21.6pt } - % SOME VARIABLES -% Used for mapping. -\tl_const:Nn \c__fontscale_names_tl - { - {tiny} {scriptsize} {footnotesize} {small} {normalsize} - {large} {Large} {LARGE} {huge} {Huge} - } -\tl_const:Nn \c__fontscale_names_other_tl - { - {tiny} {scriptsize} {footnotesize} {small} - {large} {Large} {LARGE} {huge} {Huge} - } - % Used to speed up floating point calculations. \fp_new:N \l__fontscale_normalsize_size_fp \fp_set:Nn \l__fontscale_normalsize_size_fp { 10 } +\fp_new:N \l__fontscale_musical_base_fp \fp_new:N \l__fontscale_musical_notes_fp -% Temporary variables -\tl_new:N \l__fontscale_step_tl -\tl_new:N \l__fontscale_scale_tl -\dim_new:N \l__fontscale_size_dim +% Scratch variables +\tl_new:N \l__fontscale_tmp_tl +\str_new:N \l__fontscale_tmp_str +\dim_new:N \l__fontscale_tmp_dim +\fp_new:N \l__fontscale_tmp_fp % SOME HELPER FUNCTIONS -% Sets a dimen/skip variable from a dimen/skip expression, supplying a default +% Sets a dimen/skip variable from a dimen/skip expression, appending a default % unit of pt. -\cs_new_protected:Npn \__fontscale_dim_set_with_default_pt:Nn #1#2 +\cs_new_protected:Npn \__fontscale_dim_set_default_pt:Nn #1#2 { \@defaultunits #1 = \dimexpr #2 pt \relax \relax \@nnil } -\cs_generate_variant:Nn \__fontscale_dim_set_with_default_pt:Nn { c } -\cs_new_protected:Npn \__fontscale_skip_set_with_default_pt:Nn #1#2 +\cs_generate_variant:Nn \__fontscale_dim_set_default_pt:Nn { c } +\cs_new_protected:Npn \__fontscale_skip_set_default_pt:Nn #1#2 { \@defaultunits #1 = \glueexpr #2 pt \relax \@nnil } -\cs_generate_variant:Nn \__fontscale_skip_set_with_default_pt:Nn { c } -% Used to define \tiny to \Huge. Need \dim_use:N for compatibility with the -% microtype package. Otherwise the following would do: -% \cs_new_protected:Npn \__fontscale_fontsize:NNN { \@setfontsize } -\cs_new_protected:Npn \__fontscale_fontsize:NNN #1#2 - { \@setfontsize #1 { \dim_use:N #2 } } -% Similar to \fontsize + \selectfont, except that it takes dimen and skip -% expressions as arguments and avoids the issue where \f@size is set to the new -% font size before the second argument is expanded. +\cs_generate_variant:Nn \__fontscale_skip_set_default_pt:Nn { c } +% Similar to \@setfontsize. Used to define \tiny to \Huge. Need \dim_use:N for +% compatibility with the microtype package. +\cs_new_protected:Npn \__fontscale_fontsize:NNN #1#2#3 + { + \mode_if_math:TF + { + \msg_warning:nne { fontscale } { math-mode-warning } + { \token_to_str:N #1 } + } + { + \cs_set_eq:NN \@currsize #1 + \fontsize { \dim_use:N #2 } #3 \selectfont + } + } +% Similar to \fontsize + \selectfont, except that it: +% (1) Takes dimen and skip expressions as arguments. +% (2) Avoids the issue where \f@size is set to the new font size before the +% second argument is expanded. +% (3) Provides error checking for the font size and font baselineskip. +\dim_new:N \l__fontscale_fontsize_dim \skip_new:N \l__fontscale_fontsize_skip \cs_new_protected:Npn \__fontscale_fontsize:nn #1#2 { - \__fontscale_skip_set_with_default_pt:Nn \l__fontscale_fontsize_skip {#2} - \fontsize { = \dimexpr #1 pt \relax \relax } \l__fontscale_fontsize_skip - \selectfont + \__fontscale_dim_set_default_pt:Nn \l__fontscale_fontsize_dim {#1} + \__fontscale_skip_set_default_pt:Nn \l__fontscale_fontsize_skip {#2} + \dim_compare:nNnTF \l__fontscale_fontsize_dim > \c_zero_dim + { + \dim_compare:nNnTF \l__fontscale_fontsize_skip < + \l__fontscale_fontsize_dim + { \msg_error:nn { fontscale } { font-baselineskip-out-of-bounds } } + { + \fontsize \l__fontscale_fontsize_dim \l__fontscale_fontsize_skip + \selectfont + } + } + { \msg_error:nn { fontscale } { font-size-out-of-bounds } } } % Similar to the above function, except that it sets the font baselineskip % equal to the new font size times the baselineskip-size-ratio. \cs_new_protected:Npn \__fontscale_fontsize:n #1 { - \fontsize { = \dimexpr #1 pt \relax \relax } - { \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } } - \selectfont + \__fontscale_dim_set_default_pt:Nn \l__fontscale_fontsize_dim {#1} + \dim_compare:nNnTF \l__fontscale_fontsize_dim > \c_zero_dim + { + \fontsize \l__fontscale_fontsize_dim + { + \fp_to_dim:n + { + \l__fontscale_fontsize_dim + * \l__fontscale_baselineskip_size_ratio_fp + } + } + \selectfont + } + { \msg_error:nn { fontscale } { font-size-out-of-bounds } } } % MESSAGES -\msg_new:nnn { fontscale } { modular-ratio-out-of-bounds } +\msg_new:nnn { fontscale } { key-baselineskip-size-ratio-out-of-bounds } { - The~ value~ for~ the~ key~ 'modular / ratio'~ + The~ value~ of~ the~ key~ 'baselineskip-size-ratio'~ \msg_line_context: \c_space_tl - must~ be~ greater~ than~ 1. + must~ be~ at~ least~ 1. } -\msg_new:nnn { fontscale } { musical-ratio-out-of-bounds } +\msg_new:nnn { fontscale } { key-musical-base-out-of-bounds } { - The~ value~ for~ the~ key~ 'musical / ratio'~ + The~ value~ of~ the~ key~ 'musical / base'~ + \msg_line_context: \c_space_tl + must~ be~ a~ positive~ length. + } +\msg_new:nnn { fontscale } { key-musical-ratio-out-of-bounds } + { + The~ value~ of~ the~ key~ 'musical / ratio'~ \msg_line_context: \c_space_tl must~ be~ greater~ than~ 1. } -\msg_new:nnn { fontscale } { musical-notes-out-of-bounds } +\msg_new:nnn { fontscale } { key-musical-notes-out-of-bounds } { - The~ value~ for~ the~ key~ 'musical / notes'~ + The~ value~ of~ the~ key~ 'musical / notes'~ \msg_line_context: \c_space_tl must~ be~ a~ positive~ integer. } -\msg_new:nnn { fontscale } { key-font-scale-ignored } +\msg_new:nnn { fontscale } { key-font-scale-out-of-bounds } { - Key~ '#1 / scale'~ + The~ value~ of~ the~ key~ '#1 / scale'~ \msg_line_context: \c_space_tl - ignored.~ - Setting~ the~ scale~ and~ size~ keys~ for~ the~ same~ - font~ size~ command~ ignores~ the~ scale~ key. + must~ be~ positive. + } +\msg_new:nnn { fontscale } { key-font-size-out-of-bounds } + { + The~ value~ of~ the~ key~ '#1 / size'~ + \msg_line_context: \c_space_tl + must~ be~ a~ positive~ length. + } +\msg_new:nnn { fontscale } { key-font-scale-overwritten } + { + The~ font~ size~ set~ by~ the~ key~ '#1 / scale'~ + has~ been~ overwritten~ by~ the~ key~ '#1 / size'~ + \msg_line_context:. + } +\msg_new:nnn { fontscale } { key-font-baselineskip-out-of-bounds } + { + The~ value~ of~ the~ key~ '#1 / baselineskip'~ + \msg_line_context: \c_space_tl + must~ be~ greater~ than~ or~ equal~ to~ + the~ font~ size~ of~ '\iow_char:N \\#1'. } \msg_new:nnn { fontscale } { font-sizes-out-of-order } { The~ font~ sizes~ \msg_line_context: \c_space_tl are~ not~ in~ the~ correct~ order.~ - The~ magnitude~ of~ the~ font~ sizes~ should~ be~ ordered~ from~ - '\iow_char:N \\tiny'~ to~ '\iow_char:N \\normalsize'~ to~ - '\iow_char:N \\Huge'. + The~ lengths~ of~ the~ font~ sizes~ should~ be~ ordered~ from~ + '\iow_char:N \\tiny'~ to~ '\iow_char:N \\Huge'. } \msg_new:nnn { fontscale } { font-baselineskips-out-of-order } { The~ font~ baselineskips~ \msg_line_context: \c_space_tl are~ not~ in~ the~ correct~ order.~ - The~ magnitude~ of~ the~ font~ baselineskips~ should~ be~ ordered~ from~ - '\iow_char:N \\tiny'~ to~ '\iow_char:N \\normalsize'~ to~ - '\iow_char:N \\Huge'. + The~ lengths~ of~ the~ font~ baselineskips~ should~ be~ ordered~ from~ + '\iow_char:N \\tiny'~ to~ '\iow_char:N \\Huge'. + } + +\msg_new:nnn { fontscale } { math-mode-warning } + { + '#1'~ + \msg_line_context: \c_space_tl + does~ nothing~ if~ used~ in~ math~ mode. + } +\msg_new:nnn { fontscale } { math-mode-error } + { + '#1'~ + \msg_line_context: \c_space_tl + cannot~ be~ used~ in~ math~ mode. + } +\msg_new:nnn { fontscale } { font-size-out-of-bounds } + { + The~ font~ size~ + \msg_line_context: \c_space_tl + must~ be~ a~ positive~ length. + } +\msg_new:nnn { fontscale } { font-baselineskip-out-of-bounds } + { + The~ font~ baselineskip~ + \msg_line_context: \c_space_tl + must~ be~ greater~ than~ or~ equal~ to~ the~ font~ size. } \msg_new:nnn { fontscale } { font-step-out-of-bounds } { The~ font~ step~ \msg_line_context: \c_space_tl - must~ be~ an~ integer~ from~ -4~ to~ 5,~ - unless~ the~ value~ for~ the~ choice~ key~ 'typographic-scale'~ - is~ 'modular'~ or~ 'musical'. + must~ equal~ an~ integer~ from~ -4~ to~ 5,~ + unless~ the~ value~ of~ the~ key~ 'typographic-scale'~ is~ 'musical'.~ + \msg_see_documentation_text:n { fontscale } } \msg_new:nnn { fontscale } { current-font-step-out-of-bounds } { '\iow_char:N \\SetFontStep*'~ \msg_line_context: \c_space_tl could~ not~ calculate~ the~ new~ font~ step~ because~ - the~ current~ font~ step~ is~ undefined. + the~ current~ font~ step~ is~ undefined.~ + \msg_see_documentation_text:n { fontscale } } % DEFINE KEYS \str_new:N \l__fontscale_typographic_scale_str +\dim_new:N \l__fontscale_musical_base_dim -\keys_define:nn { fontscale } +\cs_new_protected:Npn \__fontscale_keys_name:n #1 { - reset .choices:nn = { initial , preamble } - { \use:c { __fontscale_keys_precompile_#1: } } - , reset .default:n = initial - - , ignore-order .bool_set:N = \l__fontscale_ignore_order_bool - , ignore-order .default:n = true + \tl_if_in:nnTF {#1} { / } + { \__fontscale_keys_name_split:ww #1 \q_stop } + { \tl_set:cn { l__fontscale_ \l_keys_key_str _size_tl } {#1} } + } +\cs_new_protected:Npn \__fontscale_keys_name_split:ww #1 / #2 \q_stop + { + \tl_set:cn { l__fontscale_ \l_keys_key_str _size_tl } {#1} + \tl_set:cn { l__fontscale_ \l_keys_key_str _baselineskip_tl } {#2} + } - , baselineskip-size-ratio .fp_set:N = +\keys_define:nn { fontscale } + { + baselineskip-size-ratio .fp_set:N = \l__fontscale_baselineskip_size_ratio_fp , baselineskip-size-ratio .value_required:n = true , typographic-scale .choices:nn = - { classic-10pt , classic-11pt , classic-12pt , modular , musical } + { classic-10pt , classic-11pt , classic-12pt , musical } { \str_set:Nn \l__fontscale_typographic_scale_str {#1} } , typographic-scale .value_required:n = true @@ -315,18 +334,16 @@ , classic-12pt .meta:n = { typographic-scale = classic-12pt } , classic-12pt .value_forbidden:n = true - , modular .meta:n = { typographic-scale = modular } - , modular .value_forbidden:n = true - , musical .meta:n = { typographic-scale = musical } , musical .value_forbidden:n = true - - , modular / ratio .fp_set:N = \l__fontscale_modular_ratio_fp - , modular / ratio .value_required:n = true } \keys_define:nn { fontscale / musical } { - ratio .fp_set:N = \l__fontscale_musical_ratio_fp + base .code:n = + \__fontscale_dim_set_default_pt:Nn \l__fontscale_musical_base_dim {#1} + , base .value_required:n = true + + , ratio .fp_set:N = \l__fontscale_musical_ratio_fp , ratio .value_required:n = true , notes .int_set:N = \l__fontscale_musical_notes_int @@ -441,58 +458,46 @@ } \keys_define:nn { fontscale } { - tiny .code:n = \__fontscale_keys_name_code:n {#1} + tiny .code:n = \__fontscale_keys_name:n {#1} , tiny .value_required:n = true - , scriptsize .code:n = \__fontscale_keys_name_code:n {#1} + , scriptsize .code:n = \__fontscale_keys_name:n {#1} , scriptsize .value_required:n = true - , footnotesize .code:n = \__fontscale_keys_name_code:n {#1} + , footnotesize .code:n = \__fontscale_keys_name:n {#1} , footnotesize .value_required:n = true - , small .code:n = \__fontscale_keys_name_code:n {#1} + , small .code:n = \__fontscale_keys_name:n {#1} , small .value_required:n = true - , normalsize .code:n = \__fontscale_keys_name_code:n {#1} + , normalsize .code:n = \__fontscale_keys_name:n {#1} , normalsize .value_required:n = true - , large .code:n = \__fontscale_keys_name_code:n {#1} + , large .code:n = \__fontscale_keys_name:n {#1} , large .value_required:n = true - , Large .code:n = \__fontscale_keys_name_code:n {#1} + , Large .code:n = \__fontscale_keys_name:n {#1} , Large .value_required:n = true - , LARGE .code:n = \__fontscale_keys_name_code:n {#1} + , LARGE .code:n = \__fontscale_keys_name:n {#1} , LARGE .value_required:n = true - , huge .code:n = \__fontscale_keys_name_code:n {#1} + , huge .code:n = \__fontscale_keys_name:n {#1} , huge .value_required:n = true - , Huge .code:n = \__fontscale_keys_name_code:n {#1} + , Huge .code:n = \__fontscale_keys_name:n {#1} , Huge .value_required:n = true } -\cs_new_protected:Npn \__fontscale_keys_name_code:n #1 - { - \str_if_in:nnTF {#1} { / } - { \__fontscale_keys_name_code_split:ww #1 \q_stop } - { \tl_set:cn { l__fontscale_ \l_keys_key_str _size_tl } {#1} } - } -\cs_new_protected:Npn \__fontscale_keys_name_code_split:ww #1 / #2 \q_stop - { - \tl_set:cn { l__fontscale_ \l_keys_key_str _size_tl } {#1} - \tl_set:cn { l__fontscale_ \l_keys_key_str _baselineskip_tl } {#2} - } -% PRE-COMPILE KEYS +% INITIALIZE AND PRE-COMPILE KEYS % Pre-compiles the keys with their initial values and then sets the keys to % their initial values. This is done by hand for speed. -\cs_new_protected:Npn \__fontscale_keys_precompile_initial: +\cs_new_protected:Npn \__fontscale_keys_set_initial: { - \bool_set_false:N \l__fontscale_ignore_order_bool \fp_set:Nn \l__fontscale_baselineskip_size_ratio_fp { 1.2 } \str_set:Nn \l__fontscale_typographic_scale_str { classic-10pt } - \fp_set:Nn \l__fontscale_modular_ratio_fp { 1.125 } + \dim_set:Nn \l__fontscale_musical_base_dim { 10pt } \fp_set:Nn \l__fontscale_musical_ratio_fp { 2 } \int_set:Nn \l__fontscale_musical_notes_int { 5 } @@ -528,98 +533,23 @@ \tl_set:Nn \l__fontscale_huge_baselineskip_tl { \q_no_value } \tl_set:Nn \l__fontscale_Huge_baselineskip_tl { \q_no_value } } -\__fontscale_keys_precompile_initial: +\__fontscale_keys_set_initial: -% Pre-compiles the keys with their values at the end of the preamble. The keys -% are pre-compiled by hand for speed. -\cs_new_eq:NN \__fontscale_keys_precompile_preamble: \prg_do_nothing: -% \AddToHook is passed only a single token for speed. -\AddToHook { begindocument / before } - { \__fontscale_keys_precompile_preamble_set: } -\cs_new_protected:Npn \__fontscale_keys_precompile_preamble_set: +% SET AND PROCESS KEYS + +\NewDocumentCommand \fontscalesetup { s m } { - \cs_set_protected:Npe \__fontscale_keys_precompile_preamble: + \mode_if_math:TF { - \bool_if:NTF \l__fontscale_ignore_order_bool - { \bool_set_true:N } { \bool_set_false:N } - \exp_not:N \l__fontscale_ignore_order_bool - \fp_set:Nn \exp_not:N \l__fontscale_baselineskip_size_ratio_fp - { \exp_not:V \l__fontscale_baselineskip_size_ratio_fp } - \str_set:Nn \exp_not:N \l__fontscale_typographic_scale_str - { \l__fontscale_typographic_scale_str } - \fp_set:Nn \exp_not:N \l__fontscale_modular_ratio_fp - { \exp_not:V \l__fontscale_modular_ratio_fp } - \fp_set:Nn \exp_not:N \l__fontscale_musical_ratio_fp - { \exp_not:V \l__fontscale_musical_ratio_fp } - \int_set:Nn \exp_not:N \l__fontscale_musical_notes_int - { \int_use:N \l__fontscale_musical_notes_int } - - \tl_set:Nn \exp_not:N \l__fontscale_tiny_scale_tl - { \exp_not:V \l__fontscale_tiny_scale_tl } - \tl_set:Nn \exp_not:N \l__fontscale_scriptsize_scale_tl - { \exp_not:V \l__fontscale_scriptsize_scale_tl } - \tl_set:Nn \exp_not:N \l__fontscale_footnotesize_scale_tl - { \exp_not:V \l__fontscale_footnotesize_scale_tl } - \tl_set:Nn \exp_not:N \l__fontscale_small_scale_tl - { \exp_not:V \l__fontscale_small_scale_tl } - \tl_set:Nn \exp_not:N \l__fontscale_large_scale_tl - { \exp_not:V \l__fontscale_large_scale_tl } - \tl_set:Nn \exp_not:N \l__fontscale_Large_scale_tl - { \exp_not:V \l__fontscale_Large_scale_tl } - \tl_set:Nn \exp_not:N \l__fontscale_LARGE_scale_tl - { \exp_not:V \l__fontscale_LARGE_scale_tl } - \tl_set:Nn \exp_not:N \l__fontscale_huge_scale_tl - { \exp_not:V \l__fontscale_huge_scale_tl } - \tl_set:Nn \exp_not:N \l__fontscale_Huge_scale_tl - { \exp_not:V \l__fontscale_Huge_scale_tl } - - \tl_set:Nn \exp_not:N \l__fontscale_tiny_size_tl - { \exp_not:V \l__fontscale_tiny_size_tl } - \tl_set:Nn \exp_not:N \l__fontscale_scriptsize_size_tl - { \exp_not:V \l__fontscale_scriptsize_size_tl } - \tl_set:Nn \exp_not:N \l__fontscale_footnotesize_size_tl - { \exp_not:V \l__fontscale_footnotesize_size_tl } - \tl_set:Nn \exp_not:N \l__fontscale_small_size_tl - { \exp_not:V \l__fontscale_small_size_tl } - \tl_set:Nn \exp_not:N \l__fontscale_normalsize_size_tl - { \exp_not:V \l__fontscale_normalsize_size_tl } - \tl_set:Nn \exp_not:N \l__fontscale_large_size_tl - { \exp_not:V \l__fontscale_large_size_tl } - \tl_set:Nn \exp_not:N \l__fontscale_Large_size_tl - { \exp_not:V \l__fontscale_Large_size_tl } - \tl_set:Nn \exp_not:N \l__fontscale_LARGE_size_tl - { \exp_not:V \l__fontscale_LARGE_size_tl } - \tl_set:Nn \exp_not:N \l__fontscale_huge_size_tl - { \exp_not:V \l__fontscale_huge_size_tl } - \tl_set:Nn \exp_not:N \l__fontscale_Huge_size_tl - { \exp_not:V \l__fontscale_Huge_size_tl } - - \tl_set:Nn \exp_not:N \l__fontscale_tiny_baselineskip_tl - { \exp_not:V \l__fontscale_tiny_baselineskip_tl } - \tl_set:Nn \exp_not:N \l__fontscale_scriptsize_baselineskip_tl - { \exp_not:V \l__fontscale_scriptsize_baselineskip_tl } - \tl_set:Nn \exp_not:N \l__fontscale_footnotesize_baselineskip_tl - { \exp_not:V \l__fontscale_footnotesize_baselineskip_tl } - \tl_set:Nn \exp_not:N \l__fontscale_small_baselineskip_tl - { \exp_not:V \l__fontscale_small_baselineskip_tl } - \tl_set:Nn \exp_not:N \l__fontscale_normalsize_baselineskip_tl - { \exp_not:V \l__fontscale_normalsize_baselineskip_tl } - \tl_set:Nn \exp_not:N \l__fontscale_large_baselineskip_tl - { \exp_not:V \l__fontscale_large_baselineskip_tl } - \tl_set:Nn \exp_not:N \l__fontscale_Large_baselineskip_tl - { \exp_not:V \l__fontscale_Large_baselineskip_tl } - \tl_set:Nn \exp_not:N \l__fontscale_LARGE_baselineskip_tl - { \exp_not:V \l__fontscale_LARGE_baselineskip_tl } - \tl_set:Nn \exp_not:N \l__fontscale_huge_baselineskip_tl - { \exp_not:V \l__fontscale_huge_baselineskip_tl } - \tl_set:Nn \exp_not:N \l__fontscale_Huge_baselineskip_tl - { \exp_not:V \l__fontscale_Huge_baselineskip_tl } + \msg_warning:nne { fontscale } { math-mode-warning } + { \token_to_str:N \fontscalesetup } + } + { + \IfBooleanTF #1 + { \__fontscale_keys_reset:n {#2} } + { \__fontscale_keys_set:n {#2} } } } - -% PROCESS KEYS - -\NewDocumentCommand \fontscalesetup { m } { \__fontscale_keys_set:n {#1} } \cs_new_protected:Npn \__fontscale_keys_set:n #1 { \keys_set:nn { fontscale } {#1} @@ -628,55 +558,65 @@ \prg_break: \prg_break_point: } +\cs_new_protected:Npn \__fontscale_keys_reset:n + { \__fontscale_keys_set_initial: \__fontscale_keys_set:n } \cs_new_protected:Npn \__fontscale_keys_process: { - \__fontscale_keys_process_check_modular_musical: + \__fontscale_keys_process_start: \__fontscale_keys_process_normalsize: \__fontscale_keys_process_other: \__fontscale_keys_process_check_order: } -% Issues an error if the key 'modular/ratio', 'musical/ratio', or -% 'musical/notes' is set to an impossible value. -\cs_new_protected:Npn \__fontscale_keys_process_check_modular_musical: +\cs_new_protected:Npn \__fontscale_keys_process_start: { - \fp_compare:nNnF \l__fontscale_modular_ratio_fp > \c_one_fp + \fp_compare:nNnT \l__fontscale_baselineskip_size_ratio_fp < \c_one_fp { - \msg_error:nn { fontscale } { modular-ratio-out-of-bounds } + \msg_error:nn { fontscale } + { key-baselineskip-size-ratio-out-of-bounds } + \prg_break: + } + \dim_compare:nNnF \l__fontscale_musical_base_dim > \c_zero_dim + { + \msg_error:nn { fontscale } { key-musical-base-out-of-bounds } \prg_break: } \fp_compare:nNnF \l__fontscale_musical_ratio_fp > \c_one_fp { - \msg_error:nn { fontscale } { musical-ratio-out-of-bounds } + \msg_error:nn { fontscale } { key-musical-ratio-out-of-bounds } \prg_break: } \int_compare:nNnF \l__fontscale_musical_notes_int > 0 { - \msg_error:nn { fontscale } { musical-notes-out-of-bounds } + \msg_error:nn { fontscale } { key-musical-notes-out-of-bounds } \prg_break: } } -% Sets the size and baselineskip of \normalsize and updates their property list -% entries. +% Sets the font size and font baselineskip of \normalsize. \cs_new_protected:Npn \__fontscale_keys_process_normalsize: { \quark_if_no_value:NTF \l__fontscale_normalsize_size_tl { \dim_set:Nn \l_fontscale_normalsize_size_dim { - \str_case:VnF \l__fontscale_typographic_scale_str + \str_case:Vn \l__fontscale_typographic_scale_str { + { classic-10pt } { 10pt } { classic-11pt } { 11pt } { classic-12pt } { 12pt } + { musical } { \l__fontscale_musical_base_dim } } - { 10pt } } } { - \__fontscale_dim_set_with_default_pt:Nn - \l_fontscale_normalsize_size_dim { \l__fontscale_normalsize_size_tl } + \__fontscale_dim_set_default_pt:Nn \l_fontscale_normalsize_size_dim + { \l__fontscale_normalsize_size_tl } + \dim_compare:nNnF \l_fontscale_normalsize_size_dim > \c_zero_dim + { + \msg_error:nnn { fontscale } { key-font-size-out-of-bounds } + { normalsize } + \prg_break: + } } - \prop_put:NnV \l_fontscale_normalsize_prop { size } - \l_fontscale_normalsize_size_dim \fp_set:Nn \l__fontscale_normalsize_size_fp { \l_fontscale_normalsize_size_dim } \quark_if_no_value:NTF \l__fontscale_normalsize_baselineskip_tl @@ -691,12 +631,17 @@ } } { - \__fontscale_skip_set_with_default_pt:Nn + \__fontscale_skip_set_default_pt:Nn \l_fontscale_normalsize_baselineskip_skip { \l__fontscale_normalsize_baselineskip_tl } + \dim_compare:nNnT \l_fontscale_normalsize_baselineskip_skip < + \l_fontscale_normalsize_size_dim + { + \msg_error:nnn { fontscale } + { key-font-baselineskip-out-of-bounds } { normalsize } + \prg_break: + } } - \prop_put:NnV \l_fontscale_normalsize_prop { baselineskip } - \l_fontscale_normalsize_baselineskip_skip } % Auxiliary functions that expand to the font size depending on the name of the % font size command. @@ -745,57 +690,55 @@ { Huge } { 24pt } } } -\cs_new:Npn \__fontscale_keys_process_other_modular:n #1 - { - \fp_to_dim:n - { - \l__fontscale_normalsize_size_fp * \l__fontscale_modular_ratio_fp - ^ \use:c { c_fontscale_#1_step_fp } - } - } \cs_new:Npn \__fontscale_keys_process_other_musical:n #1 { \fp_to_dim:n { - \l__fontscale_normalsize_size_fp * \l__fontscale_musical_ratio_fp + \l__fontscale_musical_base_fp * \l__fontscale_musical_ratio_fp ^ ( \use:c { c_fontscale_#1_step_fp } / \l__fontscale_musical_notes_fp ) } } -% Sets the size, scale, and baselineskip of the other font size commands and -% updates their property list entries. Issues a warning if the user sets both -% the scale and size keys for the same font size command. +% Sets the font size, font scale, and font baselineskip of the other font size +% commands. \cs_new_protected:Npn \__fontscale_keys_process_other: { - \cs_set_eq:Nc \__fontscale_keys_process_other_typographic_scale:n + \str_case:Vn \l__fontscale_typographic_scale_str { - \str_case:Vn \l__fontscale_typographic_scale_str - { - { classic-10pt } { __fontscale_keys_process_other_classic_xpt:n } - { classic-11pt } { __fontscale_keys_process_other_classic_xipt:n } - { classic-12pt } { __fontscale_keys_process_other_classic_xiipt:n } - { modular } { __fontscale_keys_process_other_modular:n } - { musical } { __fontscale_keys_process_other_musical:n } - } + { classic-10pt } + { + \cs_set_eq:NN \__fontscale_keys_process_other_fn_aux:n + \__fontscale_keys_process_other_classic_xpt:n + } + { classic-11pt } + { + \cs_set_eq:NN \__fontscale_keys_process_other_fn_aux:n + \__fontscale_keys_process_other_classic_xipt:n + } + { classic-12pt } + { + \cs_set_eq:NN \__fontscale_keys_process_other_fn_aux:n + \__fontscale_keys_process_other_classic_xiipt:n + } + { musical } + { + \cs_set_eq:NN \__fontscale_keys_process_other_fn_aux:n + \__fontscale_keys_process_other_musical:n + \fp_set:Nn \l__fontscale_musical_base_fp + { \l__fontscale_musical_base_dim } + \fp_set:Nn \l__fontscale_musical_notes_fp + { \l__fontscale_musical_notes_int } + } } - \str_if_eq:VnT \l__fontscale_typographic_scale_str { musical } + \tl_map_function:nN { - \fp_set:Nn \l__fontscale_musical_notes_fp - { \l__fontscale_musical_notes_int } + {tiny} {scriptsize} {footnotesize} {small} + {large} {Large} {LARGE} {huge} {Huge} } - \tl_map_function:NN \c__fontscale_names_other_tl - \__fontscale_keys_process_other_aux:n + \__fontscale_keys_process_other_fn:n } -\cs_new_protected:Npn \__fontscale_keys_process_other_aux:n #1 +\cs_new_protected:Npn \__fontscale_keys_process_other_fn:n #1 { - \quark_if_no_value:cF { l__fontscale_#1_size_tl } - { - \__fontscale_dim_set_with_default_pt:cn { l_fontscale_#1_size_dim } - { \use:c { l__fontscale_#1_size_tl } } - \quark_if_no_value:cF { l__fontscale_#1_scale_tl } - { \msg_warning:nnn { fontscale } { key-font-scale-ignored } {#1} } - \prg_break: - } \quark_if_no_value:cF { l__fontscale_#1_scale_tl } { \dim_set:cn { l_fontscale_#1_size_dim } @@ -806,17 +749,42 @@ * ( \use:c { l__fontscale_#1_scale_tl } ) } } + \dim_compare:nNnF { \use:c { l_fontscale_#1_size_dim } } > \c_zero_dim + { + \tl_map_break:n + { + \msg_error:nnn { fontscale } { key-font-scale-out-of-bounds } + {#1} + \prg_break: + } + } + \quark_if_no_value:cT { l__fontscale_#1_size_tl } { \prg_break: } + } + \quark_if_no_value:cF { l__fontscale_#1_size_tl } + { + \__fontscale_dim_set_default_pt:cn { l_fontscale_#1_size_dim } + { \use:c { l__fontscale_#1_size_tl } } + \dim_compare:nNnF { \use:c { l_fontscale_#1_size_dim } } > \c_zero_dim + { + \tl_map_break:n + { + \msg_error:nnn { fontscale } { key-font-size-out-of-bounds } + {#1} + \prg_break: + } + } + \quark_if_no_value:cF { l__fontscale_#1_scale_tl } + { + \msg_warning:nnn { fontscale } { key-font-scale-overwritten } {#1} + } \prg_break: } \dim_set:cn { l_fontscale_#1_size_dim } - { \__fontscale_keys_process_other_typographic_scale:n {#1} } + { \__fontscale_keys_process_other_fn_aux:n {#1} } \prg_break: \prg_break_point: \fp_set:cn { l_fontscale_#1_scale_fp } { \use:c { l_fontscale_#1_size_dim } / \l__fontscale_normalsize_size_fp } - \prop_put:cne { l_fontscale_#1_prop } { scale } - { \fp_use:c { l_fontscale_#1_scale_fp } } - \prop_put:cnv { l_fontscale_#1_prop } { size } { l_fontscale_#1_size_dim } \quark_if_no_value:cTF { l__fontscale_#1_baselineskip_tl } { \skip_set:cn { l_fontscale_#1_baselineskip_skip } @@ -829,122 +797,113 @@ } } { - \__fontscale_skip_set_with_default_pt:cn + \__fontscale_skip_set_default_pt:cn { l_fontscale_#1_baselineskip_skip } { \use:c { l__fontscale_#1_baselineskip_tl } } + \dim_compare:nNnT { \use:c { l_fontscale_#1_baselineskip_skip } } < + { \use:c { l_fontscale_#1_size_dim } } + { + \tl_map_break:n + { + \msg_error:nnn { fontscale } + { key-font-baselineskip-out-of-bounds } {#1} + \prg_break: + } + } } - \prop_put:cnv { l_fontscale_#1_prop } { baselineskip } - { l_fontscale_#1_baselineskip_skip } } % Issues a warning if the font sizes or font baselineskips (ignoring the -% stretch and shrink components) are not in the correct order unless the value -% for the key 'ignore-order' is 'true'. +% stretch and shrink components) are not in the correct order. \cs_new_protected:Npn \__fontscale_keys_process_check_order: { - \bool_if:NF \l__fontscale_ignore_order_bool + \dim_compare:nF { - \dim_compare:nF - { - \l_fontscale_tiny_size_dim - < \l_fontscale_scriptsize_size_dim - < \l_fontscale_footnotesize_size_dim - < \l_fontscale_small_size_dim - < \l_fontscale_normalsize_size_dim - < \l_fontscale_large_size_dim - < \l_fontscale_Large_size_dim - < \l_fontscale_LARGE_size_dim - < \l_fontscale_huge_size_dim - < \l_fontscale_Huge_size_dim - } - { \msg_warning:nn { fontscale } { font-sizes-out-of-order } } - \dim_compare:nF - { - \l_fontscale_tiny_baselineskip_skip - < \l_fontscale_scriptsize_baselineskip_skip - < \l_fontscale_footnotesize_baselineskip_skip - < \l_fontscale_small_baselineskip_skip - < \l_fontscale_normalsize_baselineskip_skip - < \l_fontscale_large_baselineskip_skip - < \l_fontscale_Large_baselineskip_skip - < \l_fontscale_LARGE_baselineskip_skip - < \l_fontscale_huge_baselineskip_skip - < \l_fontscale_Huge_baselineskip_skip - } - { \msg_warning:nn { fontscale } { font-baselineskips-out-of-order } } + \l_fontscale_tiny_size_dim + < \l_fontscale_scriptsize_size_dim + < \l_fontscale_footnotesize_size_dim + < \l_fontscale_small_size_dim + < \l_fontscale_normalsize_size_dim + < \l_fontscale_large_size_dim + < \l_fontscale_Large_size_dim + < \l_fontscale_LARGE_size_dim + < \l_fontscale_huge_size_dim + < \l_fontscale_Huge_size_dim } + { \msg_warning:nn { fontscale } { font-sizes-out-of-order } } + \dim_compare:nF + { + \l_fontscale_tiny_baselineskip_skip + < \l_fontscale_scriptsize_baselineskip_skip + < \l_fontscale_footnotesize_baselineskip_skip + < \l_fontscale_small_baselineskip_skip + < \l_fontscale_normalsize_baselineskip_skip + < \l_fontscale_large_baselineskip_skip + < \l_fontscale_Large_baselineskip_skip + < \l_fontscale_LARGE_baselineskip_skip + < \l_fontscale_huge_baselineskip_skip + < \l_fontscale_Huge_baselineskip_skip + } + { \msg_warning:nn { fontscale } { font-baselineskips-out-of-order } } } % DOCUMENT COMMANDS -% The internal functions of each font size command are not used elsewhere in -% the code for compatibility with user-defined hooks -% (e.g. \AddToHook{cmd/normalsize/after}{<user-defined-function>}). -\DeclareDocumentCommand \tiny { } { \__fontscale_tiny: } -\cs_new_protected:Npn \__fontscale_tiny: +% Defines the standard LaTeX font size commands from \tiny to \Huge and +% initializes to \normalsize. +\DeclareDocumentCommand \tiny { } { \__fontscale_fontsize:NNN \tiny \l_fontscale_tiny_size_dim \l_fontscale_tiny_baselineskip_skip } -\DeclareDocumentCommand \scriptsize { } { \__fontscale_scriptsize: } -\cs_new_protected:Npn \__fontscale_scriptsize: +\DeclareDocumentCommand \scriptsize { } { \__fontscale_fontsize:NNN \scriptsize \l_fontscale_scriptsize_size_dim \l_fontscale_scriptsize_baselineskip_skip } -\DeclareDocumentCommand \footnotesize { } { \__fontscale_footnotesize: } -\cs_new_protected:Npn \__fontscale_footnotesize: +\DeclareDocumentCommand \footnotesize { } { \__fontscale_fontsize:NNN \footnotesize \l_fontscale_footnotesize_size_dim \l_fontscale_footnotesize_baselineskip_skip } -\DeclareDocumentCommand \small { } { \__fontscale_small: } -\cs_new_protected:Npn \__fontscale_small: +\DeclareDocumentCommand \small { } { \__fontscale_fontsize:NNN \small \l_fontscale_small_size_dim \l_fontscale_small_baselineskip_skip } -\DeclareDocumentCommand \normalsize { } { \__fontscale_normalsize: } -\cs_new_protected:Npn \__fontscale_normalsize: +\DeclareDocumentCommand \normalsize { } { \__fontscale_fontsize:NNN \normalsize \l_fontscale_normalsize_size_dim \l_fontscale_normalsize_baselineskip_skip } -\DeclareDocumentCommand \large { } { \__fontscale_large: } -\cs_new_protected:Npn \__fontscale_large: +\DeclareDocumentCommand \large { } { \__fontscale_fontsize:NNN \large \l_fontscale_large_size_dim \l_fontscale_large_baselineskip_skip } -\DeclareDocumentCommand \Large { } { \__fontscale_Large: } -\cs_new_protected:Npn \__fontscale_Large: +\DeclareDocumentCommand \Large { } { \__fontscale_fontsize:NNN \Large \l_fontscale_Large_size_dim \l_fontscale_Large_baselineskip_skip } -\DeclareDocumentCommand \LARGE { } { \__fontscale_LARGE: } -\cs_new_protected:Npn \__fontscale_LARGE: +\DeclareDocumentCommand \LARGE { } { \__fontscale_fontsize:NNN \LARGE \l_fontscale_LARGE_size_dim \l_fontscale_LARGE_baselineskip_skip } -\DeclareDocumentCommand \huge { } { \__fontscale_huge: } -\cs_new_protected:Npn \__fontscale_huge: +\DeclareDocumentCommand \huge { } { \__fontscale_fontsize:NNN \huge \l_fontscale_huge_size_dim \l_fontscale_huge_baselineskip_skip } -\DeclareDocumentCommand \Huge { } { \__fontscale_Huge: } -\cs_new_protected:Npn \__fontscale_Huge: +\DeclareDocumentCommand \Huge { } { \__fontscale_fontsize:NNN \Huge \l_fontscale_Huge_size_dim \l_fontscale_Huge_baselineskip_skip } -% Initializes to \normalsize. \normalsize -\NewExpandableDocumentCommand \CurrentFontStep { } - { \__fontscale_current_font_step: } -\cs_new:Npn \__fontscale_current_font_step: +\NewExpandableDocumentCommand \CurrentFontStep { } { \__fontscale_step: } +\cs_new:Npn \__fontscale_step: { \dim_case:nnF { \f@size pt } { @@ -960,47 +919,100 @@ { \l_fontscale_Huge_size_dim } { 5 } } { - \str_case:Vn \l__fontscale_typographic_scale_str + \str_if_eq:VnT \l__fontscale_typographic_scale_str { musical } { - { modular } - { - \fp_eval:n - { - ln ( \f@size / \l__fontscale_normalsize_size_fp ) - / ln ( \l__fontscale_modular_ratio_fp ) - } - } - { musical } - { - \fp_eval:n - { - \l__fontscale_musical_notes_fp - * ln ( \f@size / \l__fontscale_normalsize_size_fp ) - / ln ( \l__fontscale_musical_ratio_fp ) - } - } + \fp_eval:n + { + \l__fontscale_musical_notes_fp + * ln ( \f@size / \l__fontscale_musical_base_fp ) + / ln ( \l__fontscale_musical_ratio_fp ) + } } } } -\NewExpandableDocumentCommand \CurrentFontScale { } - { \__fontscale_current_font_scale: } -\cs_new:Npn \__fontscale_current_font_scale: +\NewExpandableDocumentCommand \CurrentFontScale { } { \__fontscale_scale: } +\cs_new:Npn \__fontscale_scale: { \fp_eval:n { \f@size / \l__fontscale_normalsize_size_fp } } -\NewExpandableDocumentCommand \CurrentFontSize { } - { \__fontscale_current_font_size: } -\cs_new:Npn \__fontscale_current_font_size: { \f@size pt } +\NewExpandableDocumentCommand \CurrentFontSize { } { \__fontscale_size: } +\cs_new:Npn \__fontscale_size: { \f@size pt } \NewExpandableDocumentCommand \CurrentFontBaselineskip { } - { \__fontscale_current_font_baselineskip: } -\cs_new:Npn \__fontscale_current_font_baselineskip: { \f@baselineskip } + { \__fontscale_baselineskip: } +\cs_new:Npn \__fontscale_baselineskip: { \f@baselineskip } + +\NewExpandableDocumentCommand \CurrentFontSizeCommand { } + { \__fontscale_name: } +\cs_new:Npn \__fontscale_name: + { + \dim_case:nn { \f@size pt } + { + { \l_fontscale_tiny_size_dim } + { + \skip_if_eq:nnT { \l_fontscale_tiny_baselineskip_skip } + { \f@baselineskip } { tiny } + } + { \l_fontscale_scriptsize_size_dim } + { + \skip_if_eq:nnT { \l_fontscale_scriptsize_baselineskip_skip } + { \f@baselineskip } { scriptsize } + } + { \l_fontscale_footnotesize_size_dim } + { + \skip_if_eq:nnT { \l_fontscale_footnotesize_baselineskip_skip } + { \f@baselineskip } { footnotesize } + } + { \l_fontscale_small_size_dim } + { + \skip_if_eq:nnT { \l_fontscale_small_baselineskip_skip } + { \f@baselineskip } { small } + } + { \l_fontscale_normalsize_size_dim } + { + \skip_if_eq:nnT { \l_fontscale_normalsize_baselineskip_skip } + { \f@baselineskip } { normalsize } + } + { \l_fontscale_large_size_dim } + { + \skip_if_eq:nnT { \l_fontscale_large_baselineskip_skip } + { \f@baselineskip } { large } + } + { \l_fontscale_Large_size_dim } + { + \skip_if_eq:nnT { \l_fontscale_Large_baselineskip_skip } + { \f@baselineskip } { Large } + } + { \l_fontscale_LARGE_size_dim } + { + \skip_if_eq:nnT { \l_fontscale_LARGE_baselineskip_skip } + { \f@baselineskip } { LARGE } + } + { \l_fontscale_huge_size_dim } + { + \skip_if_eq:nnT { \l_fontscale_huge_baselineskip_skip } + { \f@baselineskip } { huge } + } + { \l_fontscale_Huge_size_dim } + { + \skip_if_eq:nnT { \l_fontscale_Huge_baselineskip_skip } + { \f@baselineskip } { Huge } + } + } + } \NewDocumentCommand \SetFontStep { s m } { - \IfBooleanTF #1 - { \__fontscale_add_font_step:n {#2} } - { \__fontscale_set_font_step:n {#2} } + \mode_if_math:TF + { + \msg_warning:nne { fontscale } { math-mode-warning } + { \token_to_str:N \SetFontStep } + } + { + \IfBooleanTF #1 + { \__fontscale_add_font_step:n {#2} } + { \__fontscale_set_font_step:n {#2} } + } } % Using \str_case: here is significantly faster (and easier to write) than % repeatedly testing \fp_compare:. @@ -1020,49 +1032,42 @@ { 5 } { \Huge } } { - \str_case:VnF \l__fontscale_typographic_scale_str + \str_if_eq:VnTF \l__fontscale_typographic_scale_str { musical } { - { modular } - { - \__fontscale_fontsize:n - { - \fp_to_dim:n - { - \l__fontscale_normalsize_size_fp - * \l__fontscale_modular_ratio_fp ^ (#1) - } - } - } - { musical } - { - \__fontscale_fontsize:n - { - \fp_to_dim:n - { - \l__fontscale_normalsize_size_fp - * \l__fontscale_musical_ratio_fp - ^ ( (#1) / \l__fontscale_musical_notes_fp ) - } - } - } + \__fontscale_fontsize:n + { + \fp_to_dim:n + { + \l__fontscale_musical_base_fp + * \l__fontscale_musical_ratio_fp + ^ ( (#1) / \l__fontscale_musical_notes_fp ) + } + } } { \msg_error:nn { fontscale } { font-step-out-of-bounds } } } } \cs_new_protected:Npn \__fontscale_add_font_step:n #1 { - \tl_set:Ne \l__fontscale_step_tl { \__fontscale_current_font_step: } - \tl_if_empty:NTF \l__fontscale_step_tl + \tl_set:Ne \l__fontscale_tmp_tl { \__fontscale_step: } + \tl_if_empty:NTF \l__fontscale_tmp_tl { \msg_error:nn { fontscale } { current-font-step-out-of-bounds } } - { \__fontscale_add_font_step_aux:n { (#1) + \l__fontscale_step_tl } } + { \__fontscale_add_font_step_aux:n { (#1) + \l__fontscale_tmp_tl } } } \cs_new_eq:NN \__fontscale_add_font_step_aux:n \__fontscale_set_font_step:n \NewDocumentCommand \SetFontScale { s m } { - \IfBooleanTF #1 - { \__fontscale_add_font_scale:n {#2} } - { \__fontscale_set_font_scale:n {#2} } + \mode_if_math:TF + { + \msg_warning:nne { fontscale } { math-mode-warning } + { \token_to_str:N \SetFontScale } + } + { + \IfBooleanTF #1 + { \__fontscale_add_font_scale:n {#2} } + { \__fontscale_set_font_scale:n {#2} } + } } \cs_new_protected:Npn \__fontscale_set_font_scale:n #1 { @@ -1077,70 +1082,150 @@ \NewDocumentCommand \SetFontSize { s m } { - \IfBooleanTF #1 - { \__fontscale_add_font_size:n {#2} } - { \__fontscale_set_font_size:n {#2} } + \mode_if_math:TF + { + \msg_warning:nne { fontscale } { math-mode-warning } + { \token_to_str:N \SetFontSize } + } + { + \IfBooleanTF #1 + { \__fontscale_add_font_size:n {#2} } + { \__fontscale_set_font_size:n {#2} } + } } \cs_new_eq:NN \__fontscale_set_font_size:n \__fontscale_fontsize:n \cs_new_protected:Npn \__fontscale_add_font_size:n #1 { - \__fontscale_dim_set_with_default_pt:Nn \l__fontscale_size_dim {#1} - \dim_add:Nn \l__fontscale_size_dim { \f@size pt } - \__fontscale_fontsize:n { \l__fontscale_size_dim } + \__fontscale_dim_set_default_pt:Nn \l__fontscale_tmp_dim {#1} + \__fontscale_fontsize:n { \l__fontscale_tmp_dim + \f@size pt } } \NewDocumentCommand \ScaleFont { m } - { \__fontscale_scale_font_size_baselineskip:n {#1} } -\cs_new_protected:Npn \__fontscale_scale_font_size_baselineskip:n #1 { + \mode_if_math:TF + { + \msg_warning:nne { fontscale } { math-mode-warning } + { \token_to_str:N \ScaleFont } + } + { \__fontscale_scale_font:n {#1} } + } +\cs_new_protected:Npn \__fontscale_scale_font:n #1 + { + \fp_set:Nn \l__fontscale_tmp_fp {#1} \__fontscale_fontsize:nn - { \fp_to_dim:n { \f@size * (#1) } } - { \fp_to_dim:n { \dim_to_fp:n { \f@baselineskip } * (#1) } } + { \fp_to_dim:n { \f@size * \l__fontscale_tmp_fp } } + { + \fp_to_dim:n + { \dim_to_fp:n { \f@baselineskip } * \l__fontscale_tmp_fp } + } } \NewDocumentCommand \SetFontSizeBaselineskip { m m } - { \__fontscale_set_font_size_baselineskip:nn {#1} {#2} } + { + \mode_if_math:TF + { + \msg_warning:nne { fontscale } { math-mode-warning } + { \token_to_str:N \SetFontSizeBaselineskip } + } + { \__fontscale_set_font_size_baselineskip:nn {#1} {#2} } + } \cs_new_eq:NN \__fontscale_set_font_size_baselineskip:nn \__fontscale_fontsize:nn -\NewDocumentCommand \PrintFontParameters { } - { \__fontscale_print_font_parameters: } -\cs_new_protected:Npn \__fontscale_print_font_parameters: +\NewDocumentCommand \PrintFontSizeParameters { } + { \__fontscale_print_font_size_parameters: } +\cs_new_protected:Npn \__fontscale_print_font_size_parameters: { - step ~=~ \__fontscale_current_font_step: ,~ - scale ~=~ \__fontscale_current_font_scale: ,~ - size ~=~ \__fontscale_current_font_size: ,~ - baselineskip ~=~ \__fontscale_current_font_baselineskip: + step ~=~ \__fontscale_step: ,~ + scale ~=~ \__fontscale_scale: ,~ + size ~=~ \__fontscale_size: ,~ + baselineskip ~=~ \__fontscale_baselineskip: } -\NewDocumentCommand \PrintAllFontParameters { } - { \__fontscale_print_all_font_parameters: } -\cs_new_protected:Npn \__fontscale_print_all_font_parameters: +\NewDocumentCommand \PrintAllFontSizeParameters { } { - \tl_map_inline:Nn \c__fontscale_names_tl + \mode_if_math:TF { - \prop_get:cnN { l_fontscale_##1_prop } { step } \l__fontscale_step_tl - \prop_get:cnN { l_fontscale_##1_prop } { scale } \l__fontscale_scale_tl - \token_to_str:c {##1} \@ \c_colon_str \c_space_tl - step ~=~ \l__fontscale_step_tl ,~ - scale ~=~ \l__fontscale_scale_tl ,~ - size ~=~ \dim_use:c { l_fontscale_##1_size_dim } ,~ - baselineskip ~=~ \skip_use:c { l_fontscale_##1_baselineskip_skip } - \str_if_eq:nnF {##1} { Huge } { \newline } + \msg_error:nne { fontscale } { math-mode-error } + { \token_to_str:N \PrintAllFontSizeParameters } + } + { \__fontscale_print_all_font_size_parameters: } + } +\cs_new_protected:Npn \__fontscale_print_all_font_size_parameters: + { + \token_to_str:N \tiny \c_colon_str \c_space_tl + step ~=~ -4 ,~ + scale ~=~ \fp_use:N \l_fontscale_tiny_scale_fp ,~ + size ~=~ \dim_use:N \l_fontscale_tiny_size_dim ,~ + baselineskip ~=~ \skip_use:N \l_fontscale_tiny_baselineskip_skip + \newline + \token_to_str:N \scriptsize \c_colon_str \c_space_tl + step ~=~ -3 ,~ + scale ~=~ \fp_use:N \l_fontscale_scriptsize_scale_fp ,~ + size ~=~ \dim_use:N \l_fontscale_scriptsize_size_dim ,~ + baselineskip ~=~ \skip_use:N \l_fontscale_scriptsize_baselineskip_skip + \newline + \token_to_str:N \footnotesize \c_colon_str \c_space_tl + step ~=~ -2 ,~ + scale ~=~ \fp_use:N \l_fontscale_footnotesize_scale_fp ,~ + size ~=~ \dim_use:N \l_fontscale_footnotesize_size_dim ,~ + baselineskip ~=~ \skip_use:N \l_fontscale_footnotesize_baselineskip_skip + \newline + \token_to_str:N \small \c_colon_str \c_space_tl + step ~=~ -1 ,~ + scale ~=~ \fp_use:N \l_fontscale_small_scale_fp ,~ + size ~=~ \dim_use:N \l_fontscale_small_size_dim ,~ + baselineskip ~=~ \skip_use:N \l_fontscale_small_baselineskip_skip + \newline + \token_to_str:N \normalsize \c_colon_str \c_space_tl + step ~=~ 0 ,~ + scale ~=~ 1 ,~ + size ~=~ \dim_use:N \l_fontscale_normalsize_size_dim ,~ + baselineskip ~=~ \skip_use:N \l_fontscale_normalsize_baselineskip_skip + \newline + \token_to_str:N \large \c_colon_str \c_space_tl + step ~=~ 1 ,~ + scale ~=~ \fp_use:N \l_fontscale_large_scale_fp ,~ + size ~=~ \dim_use:N \l_fontscale_large_size_dim ,~ + baselineskip ~=~ \skip_use:N \l_fontscale_large_baselineskip_skip + \newline + \token_to_str:N \Large \c_colon_str \c_space_tl + step ~=~ 2 ,~ + scale ~=~ \fp_use:N \l_fontscale_Large_scale_fp ,~ + size ~=~ \dim_use:N \l_fontscale_Large_size_dim ,~ + baselineskip ~=~ \skip_use:N \l_fontscale_Large_baselineskip_skip + \newline + \token_to_str:N \LARGE \@ \c_colon_str \c_space_tl + step ~=~ 3 ,~ + scale ~=~ \fp_use:N \l_fontscale_LARGE_scale_fp ,~ + size ~=~ \dim_use:N \l_fontscale_LARGE_size_dim ,~ + baselineskip ~=~ \skip_use:N \l_fontscale_LARGE_baselineskip_skip + \newline + \token_to_str:N \huge \c_colon_str \c_space_tl + step ~=~ 4 ,~ + scale ~=~ \fp_use:N \l_fontscale_huge_scale_fp ,~ + size ~=~ \dim_use:N \l_fontscale_huge_size_dim ,~ + baselineskip ~=~ \skip_use:N \l_fontscale_huge_baselineskip_skip + \newline + \token_to_str:N \Huge \c_colon_str \c_space_tl + step ~=~ 5 ,~ + scale ~=~ \fp_use:N \l_fontscale_Huge_scale_fp ,~ + size ~=~ \dim_use:N \l_fontscale_Huge_size_dim ,~ + baselineskip ~=~ \skip_use:N \l_fontscale_Huge_baselineskip_skip + } + +\NewDocumentCommand \PrintSampleText { s +m } + { + \mode_if_math:TF + { + \msg_error:nne { fontscale } { math-mode-error } + { \token_to_str:N \PrintSampleText } + } + { + \IfBooleanTF #1 + { \__fontscale_print_sample_text_descending_order:n {#2} } + { \__fontscale_print_sample_text_ascending_order:n {#2} } } - } - -\NewDocumentCommand \PrintSampleText - { s O - { - The~ \texttt { fontscale }~ package \c_colon_str \c_space_tl - A~ user~ interface~ for~ setting~ document~ font~ sizes - } - } - { - \IfBooleanTF #1 - { \__fontscale_print_sample_text_descending_order:n {#2} } - { \__fontscale_print_sample_text_ascending_order:n {#2} } } \cs_new_protected:Npn \__fontscale_print_sample_text_ascending_order:n #1 { @@ -1169,80 +1254,26 @@ { \tiny #1 \par } } -\NewDocumentCommand \PrintFontSizeCommand { } { \__fontscale_print_name: } -\cs_new_protected:Npn \__fontscale_print_name: +\NewDocumentCommand \PrintFontSizeCommand { } { - \dim_case:nn { \f@size pt } + \mode_if_math:TF { - { \l_fontscale_tiny_size_dim } - { - \skip_if_eq:nnT { \f@baselineskip } - { \l_fontscale_tiny_baselineskip_skip } - { \token_to_str:N \tiny \prg_break: } - } - { \l_fontscale_scriptsize_size_dim } - { - \skip_if_eq:nnT { \f@baselineskip } - { \l_fontscale_scriptsize_baselineskip_skip } - { \token_to_str:N \scriptsize \prg_break: } - } - { \l_fontscale_footnotesize_size_dim } - { - \skip_if_eq:nnT { \f@baselineskip } - { \l_fontscale_footnotesize_baselineskip_skip } - { \token_to_str:N \footnotesize \prg_break: } - } - { \l_fontscale_small_size_dim } - { - \skip_if_eq:nnT { \f@baselineskip } - { \l_fontscale_small_baselineskip_skip } - { \token_to_str:N \small \prg_break: } - } - { \l_fontscale_normalsize_size_dim } - { - \skip_if_eq:nnT { \f@baselineskip } - { \l_fontscale_normalsize_baselineskip_skip } - { \token_to_str:N \normalsize \prg_break: } - } - { \l_fontscale_large_size_dim } - { - \skip_if_eq:nnT { \f@baselineskip } - { \l_fontscale_large_baselineskip_skip } - { \token_to_str:N \large \prg_break: } - } - { \l_fontscale_Large_size_dim } - { - \skip_if_eq:nnT { \f@baselineskip } - { \l_fontscale_Large_baselineskip_skip } - { \token_to_str:N \Large \prg_break: } - } - { \l_fontscale_LARGE_size_dim } - { - \skip_if_eq:nnT { \f@baselineskip } - { \l_fontscale_LARGE_baselineskip_skip } - { \token_to_str:N \LARGE \@ \prg_break: } - } - { \l_fontscale_huge_size_dim } - { - \skip_if_eq:nnT { \f@baselineskip } - { \l_fontscale_huge_baselineskip_skip } - { \token_to_str:N \huge \prg_break: } - } - { \l_fontscale_Huge_size_dim } - { - \skip_if_eq:nnT { \f@baselineskip } - { \l_fontscale_Huge_baselineskip_skip } - { \token_to_str:N \Huge \prg_break: } - } + \msg_error:nne { fontscale } { math-mode-error } + { \token_to_str:N \PrintFontSizeCommand } } - UNDEFINED \@ - \prg_break: - \prg_break_point: + { \__fontscale_print_name: } + } +\cs_new_protected:Npn \__fontscale_print_name: + { + \str_set:Ne \l__fontscale_tmp_str { \__fontscale_name: } + \str_if_empty:NTF \l__fontscale_tmp_str + { \token_to_str:N \undefined } + { \c_backslash_str \l__fontscale_tmp_str \@ } } % TEXT PURIFY -\cs_new:Npn \__fontscale_text_purify_equivalent:n #1 +\cs_new:Npn \__fontscale_remove_arg_spec_sm:n #1 { \bool_lazy_all:nT { @@ -1252,11 +1283,13 @@ } { \use_none:n } } +\text_declare_purify_equivalent:Nn \fontscalesetup + { \__fontscale_remove_arg_spec_sm:n } \text_declare_purify_equivalent:Nn \SetFontStep - { \__fontscale_text_purify_equivalent:n } + { \__fontscale_remove_arg_spec_sm:n } \text_declare_purify_equivalent:Nn \SetFontScale - { \__fontscale_text_purify_equivalent:n } + { \__fontscale_remove_arg_spec_sm:n } \text_declare_purify_equivalent:Nn \SetFontSize - { \__fontscale_text_purify_equivalent:n } + { \__fontscale_remove_arg_spec_sm:n } \text_declare_purify_equivalent:Nn \ScaleFont { \use_none:n } \text_declare_purify_equivalent:Nn \SetFontSizeBaselineskip { \use_none:nn }
\ No newline at end of file diff --git a/macros/latex/contrib/fontscale/fontscale.tex b/macros/latex/contrib/fontscale/fontscale.tex new file mode 100644 index 0000000000..3737afe5b6 --- /dev/null +++ b/macros/latex/contrib/fontscale/fontscale.tex @@ -0,0 +1,409 @@ +\documentclass{beery} + + +\begin{document} + + +\section* + {% + \SetFontStep*{1}% + The \pkg{fontscale} package% + } + +A flexible interface for setting font sizes + +Oliver Beery + +Version 2.1.0\quad{}12 August 2024 + + +\section{Introduction} +\label{sec:intro} + +\subsection{About} +\label{subsec:about} + +\listheading{The \pkg{fontscale} package provides the following functionalities:} +\begin{itemize} + \item + Set font sizes using a classic or musical typographic scale (\S\ref{subsec:typographicscale}). + \item + Set arbitrary font sizes and font baselineskips for the standard \LaTeX{} font size commands \cs{tiny}, \cs{scriptsize}, \cs{footnotesize}, \cs{small}, \cs{normalsize}, \cs{large}, \cs{Large}, \cs{LARGE}, \cs{huge}, and \cs{Huge} (\S\ref{subsec:overwriting}). + \item + Set the font sizes and font baselineskips of the standard \LaTeX{} font size commands mid\-/document or within a local group (\S\ref{subsec:fontscalesetup}). + \item + Provides expandable commands that expand to the current font step, font scale, font size, font baselineskip, or font size command (\S\ref{subsec:expandable}). + \item + Provides additional font size commands, including setting the font size by setting the font step or font scale and setting the font size relative to the current font size using more powerful tools than the \pkg{scalefnt} and \pkg{relsize} packages (\S\ref{subsec:fontsize}). + \item + For \LaTeX3 programmers, this package defines public \pkg{expl3} variables that store the font step, font scale, font size, and font baselineskip of each font size command from \cs{tiny} to \cs{Huge} (\S\ref{sec:programming}). +\end{itemize} + +\subsection{Loading the package} +\label{subsec:loading} + +\listheading{Requirements:} +\begin{itemize} + \item \LaTeXe{} version 2023-11-01 or newer + \item \pkg{l3kernel} version 2023-10-10 or newer +\end{itemize} + +You may need to ensure that your \LaTeX{} installation is up\-/to\-/date before using this package. + +This package lets the user set arbitrary font sizes. +This works with most fonts produced today, but, for historical reasons, the default Computer Modern font is available only in a number of discrete font sizes. +If you get a warning that Computer Modern is not available in the requested font size, you may need to add the code \cs{RequirePackage}\allowbreak\verb|{fix-cm}| before \cs{documentclass} to make Computer Modern available at arbitrary font sizes. +Alternatively, you can use the Latin Modern font by loading the \pkg{lmodern} package. + +The \pkg{fontscale} package has no package options. +Instead, this package provides the command \cs{fontscalesetup}\marg{key\-/value list} (\S\ref{subsec:fontscalesetup}) which sets the package keys (\S\ref{sec:keys}). + +When loaded, this package uses \cs{normalsize} after defining and initializing the font size commands from \cs{tiny} to \cs{Huge}. + +Many \LaTeX{} document classes have a font size option (e.g.\@ \Key{10pt}, \Key{11pt}, \Key{12pt}) which not only changes the set of document font sizes, but also modifies additional settings such as the page layout and vertical spacing which were specifically designed to work with those font sizes. +For this reason, you may want to set the document class font size option close to the font size of \cs{normalsize} set by this package. + +\listheading{Internally, this package defines each font size command from \cs{tiny} to \cs{Huge} using the low\-/level font commands \cs{fontsize} and \cs{selectfont}\---they have no additional functionality beyond that of \cs{fontsize} and \cs{selectfont}, except that they:} +\begin{itemize} + \item + Set the kernel command \cs{@currsize} equal to the font size command. + This is needed only for compatibility. + \item + Do nothing, except issue a warning, if used in math mode. +\end{itemize} + +Unlike the standard \LaTeX{} document classes, the font size commands from \cs{tiny} to \cs{Huge} defined by this package do not change the vertical spacing for displayed math and list structures. +If the user would like to add this functionality or perhaps other features to the font size commands, they can use hooks, which are documented in the \LaTeXe{} kernel. + +\subsection{The font size parameters} +\label{subsec:fontsizeparameters} + +When using the \pkg{fontscale} package, each font size, including the standard \LaTeX{} font size commands from \cs{tiny} to \cs{Huge}, has a font step, font scale, font size, and font baselineskip. +The latter two parameters are the familiar first and second arguments to the low\-/level font command \cs{fontsize}\marg{dimen}\marg{skip}. +(The font baselineskip, stored in the kernel command \cs{f@baselineskip}, should not be confused with the paragraph baselineskip \cs{baselineskip}.) +The font scale and font step are different ways of describing the font size. +The font scale is the relative font size; the ratio of the font size to \cs{normalsize}, which has a font scale of \num{1}. +The font step is the number of font size gradations from \cs{normalsize}, which has a font step of \num{0}. +Table~\ref{table:fontsteps} displays the font step of each font size command. + +\input{./fontscale-table-font-steps.tex} + +\subsection{Syntax} +\label{subsec:syntax} + +This package defines some keys and commands that take as a value or argument a \meta{floating point expression}, \meta{integer expression}, \meta{dimen expression}, or \meta{skip expression}. +This syntax has the same representation as the arguments to \cs{fpeval}, \cs{inteval}, \cs{dimeval}, and \cs{skipeval}, documented in \pkg{usrguide}.% +\footnote{\url{https://ctan.org/pkg/usrguide}} + + +\section{Keys} +\label{sec:keys} + +This section documents the keys provided by the \pkg{fontscale} package. +This package has no package options. +Set the package keys using \cs{fontscalesetup}\marg{key-value list} (\S\ref{subsec:fontscalesetup}). + +\subsection{The typographic scale} +\label{subsec:typographicscale} + +The font sizes of the font size commands from \cs{tiny} to \cs{Huge} are initially set by the key \Key{typographic\-/scale}. + +\Key{typographic-scale} + [% + classic-10pt$\,\vert\,$\allowbreak + classic-11pt$\,\vert\,$\allowbreak + classic-12pt$\,\vert\,$\allowbreak\hspace*{1.5em}% + musical% + ] + [classic-10pt] +\newline +\Key{classic-10pt} +\newline +\Key{classic-11pt} +\newline +\Key{classic-12pt} +\nopagebreak\newline +\Key{musical} + +The value of the key \Key{typographic\-/scale} must be \Value{classic\-/10pt}, \Value{classic\-/11pt}, \Value{classic\-/12pt}, or \Value{musical}. +The initial value is \Value{classic\-/10pt}. +Sets the font size of each font size command from \cs{tiny} to \cs{Huge} using a classic or musical typographic scale. +These are common methods of choosing a set of document font sizes. +The keys \Key{classic\-/10pt}, \Key{classic\-/11pt}, \Key{classic\-/12pt}, and \Key{musical} set the key \Key{typographic\-/scale} to the corresponding value. + +\input{./fontscale-table-classic.tex} + +The classic typographic scale consists of the traditional font sizes +\numlist{6;7;8;9;10;11;12;14;16;18;21;24;36;48;60;72}.% +\footnote{See \S3.1 of \textit{The Elements of Typographic Style} by Robert Bringhurst.} +They have been used since the sixteenth century and are the default font sizes on most computer software. +Setting the value of the key \Key{typographic\-/scale} to \Key{classic\-/10pt}, \Key{classic\-/11pt}, or \Key{classic\-/12pt} sets the font size of each font size command from \cs{tiny} to \cs{Huge} to values based on their position in the classic typographic scale. +The named point size\---\qtylist[list-final-separator={, or }]{10;11;12}{pt}\---is the font size of \cs{normalsize}. +The font sizes of the other font size commands are the adjacent font sizes in the classic typographic scale. +Table~\ref{table:classic} displays the font size of each font size command when using a classic typographic scale. + +\Key{musical/base}[\meta{dimen expression}][10pt]% +\nopagebreak\newline +\Key{musical/ratio}[\meta{floating point expression}][2]% +\nopagebreak\newline +\Key{musical/notes}[\meta{integer expression}][5] + +The key \Key{typographic\-/scale}[musical] sets the font size of each font size command from \cs{tiny} to \cs{Huge} using a musical typographic scale. +The font sizes are calculated using the formula:% +\footnote + {% + I have referenced this article by Spencer Mortensen: + \newline + \url{https://spencermortensen.com/articles/typographic-scale/}% + } +\begin{equation}\label{eq:musical} + f_i = f_0 \times r ^ { i / n } +\end{equation} +$f_i$ is the font size with font step~$i$. +$f_0$ is the base font size. +$n$ is the number of musical notes\---the number of font size gradations or steps above $f_0$. +$r$ is the musical ratio, the ratio of the highest to the lowest note $ f_n / f_0 $. + +The key \Key{musical\slash{}base} sets the base font size to the value of \meta{dimen expression}, appending a default unit of \unit{pt}. +The base font size is the font size of \cs{normalsize}. +The key \Key{musical\slash{}ratio} sets the musical ratio to the result of computing the \meta{floating point expression}. +The key \Key{musical\slash{}notes} sets the number of musical notes to the value of \meta{integer expression}. +Table~\ref{table:musical} displays the font size of each font size command when using a musical typographic scale with the initial values. + +\input{./fontscale-table-musical.tex} + +\subsection{The baselineskip-size-ratio} +\label{subsec:baselineskipsizeratio} + +The font baselineskips of the font size commands from \cs{tiny} to \cs{Huge} are initially set by the key \Key{baselineskip\-/size\-/ratio}. + +\Key{baselineskip-size-ratio}[\meta{floating point expression}][1.2] +\KeepNextPar* + +Sets the font baselineskip of each font size command from \cs{tiny} to \cs{Huge} equal to its font size \texttimes{} the result of computing the \meta{floating point expression}. +Sets the font baselineskip set by \cs{SetFontStep}, \cs{SetFontScale}, and \cs{SetFontSize} (\S\ref{subsec:fontsize}) equal to the new font size \texttimes{} the result of computing the \meta{floating point expression}. +The font baselineskip must be greater than or equal to the font size. + + +\subsection{Overwriting the previous keys} +\label{subsec:overwriting} + +This subsection documents keys for directly setting the font scales, font sizes, and font baselineskips of the font size commands from \cs{tiny} to \cs{Huge}. +When doing so, the user should take care to ensure that the lengths of the font sizes and font baselineskips remain correctly ordered from \cs{tiny} to \cs{Huge}. +This is important for typographic and syntactic consistency. +If the font size commands are in the wrong order, this package will issue a warning and some package features may not work correctly. + +\Key{\meta{font size command}/scale}[\meta{floating point expression}][\meta{not set}] +\KeepNextPar* + +Sets the font size of \meta{font size command} by setting its font scale to the result of computing the \meta{floating point expression}. +Overwrites the font size set by the key \Key{typographic\-/scale}. +The key \Key{normalsize\slash{}scale} is not defined. + +\Key{\meta{font size command}/size}[\meta{dimen expression}][\meta{not set}] +\KeepNextPar* + +Sets the font size of \meta{font size command} to the value of \meta{dimen expression}, appending a default unit of \unit{pt}. +Overwrites the font size set by the keys \Key{typographic\-/scale} and \Key{\meta{font size command}\slash{}scale}. + +\Key{\meta{font size command}/baselineskip}[\meta{skip expression}][\meta{not set}] +\KeepNextPar* + +Sets the font baselineskip of \meta{font size command} to the value of \meta{skip expression}, appending a default unit of \unit{pt}. +The font baselineskip must be greater than or equal to the font size. +Overwrites the font baselineskip set by the key \Key{baselineskip\-/size\-/ratio}. + +\Key{\meta{font size command}}[\meta{dimen expression}] +\nopagebreak\newline +\Key{\meta{font size command}}[\meta{dimen expression}/\meta{skip expression}] + +Sets the keys \Key{\meta{font size command}\slash{}size}[\meta{dimen expression}] or \Key{\meta{font size command}\slash{}baselineskip}[\meta{skip expression}] in a condensed format. +The latter format resembles traditional typographic notation where the size and leading of a text can be expressed as, for example, \num{10}/\num{12} or \num{11}/\num{13}. +The number before\slash{}after the slash is the size\slash{}leading in units of \unit{pt}. + + +\section{Commands} +\label{sec:commands} + +This section documents the commands provided by the \pkg{fontscale} package. + +\subsection{Setting the keys} +\label{subsec:fontscalesetup} + +\cs{fontscalesetup} \sarg{} \marg{key-value list} +\KeepNextPar* + +Sets and processes the \pkg{fontscale} package keys (\S\ref{sec:keys}) in \meta{key\-/value list} and then uses \cs{normalsize}. +Adding the optional star first resets all the \pkg{fontscale} package keys to their initial values. +The order of the keys in \meta{key\-/value list} does not matter. +Can be used mid\-/document. +The effect is local to the current group. +Does nothing, except issue a warning, if used in math mode. +\cs{fontscalesetup} should typically be used only once in the preamble or omitted if the user is satisfied with the initial font sizes and font baselineskips. + +\subsection{Expandable commands} +\label{subsec:expandable} + +\cs{CurrentFontStep} +\nopagebreak\newline +\cs{CurrentFontScale} +\newline +\cs{CurrentFontSize} +\nopagebreak\newline +\cs{CurrentFontBaselineskip} + +This package provides expandable commands that expand to the current font step, font scale, font size, or font baselineskip. +They can be used for printing or within calculations. + +For clarity, \cs{CurrentFontStep} will be explained in detail. +\cs{CurrentFontStep} initially tests if the current font size equals the font size of any font size command from \cs{tiny} to \cs{Huge}. +If so, it expands to the font step of that font size command (Table~\ref{table:fontsteps}). +If not and if the value of the key \Key{typographic\-/scale} is \Value{musical}, \cs{CurrentFontStep} expands to the current font step calculated from the musical typographic scale (Equation~\ref{eq:musical}). +Otherwise, the current font step is undefined and \cs{CurrentFontStep} expands to nothing. + +Internally, \cs{CurrentFontStep}, \cs{CurrentFontScale}, and \cs{CurrentFontSize} rely on the kernel command \cs{f@size}. +(\cs{f@size} stores the current font size in units of \unit{pt}, omitting the unit.) +The low\-/level font command \cs{fontsize}\marg{dimen}\marg{skip} sets \cs{f@size} to the new font size before expanding its second argument. +This means that, if used in \meta{skip}, \cs{CurrentFontStep}, \cs{CurrentFontScale}, and \cs{CurrentFontSize} will expand to the new value\---unless they are first expanded. +This package provides \cs{SetFontSizeBaselineskip} as an alternative to \cs{fontsize} + \cs{selectfont} that avoids this issue (\S\ref{subsec:fontsize}). + +\cs{CurrentFontSizeCommand} +\KeepNextPar* + +Tests if the current font size and current font baselineskip equal the font size and font baselineskip, respectively, of any font size command from \cs{tiny} to \cs{Huge}. +If so, expands to the name of that font size command. +This omits the backslash character and leaves only letters with catcode \num{11}. +If not, expands to nothing. +This package also provides a similar command \cs{PrintFontSizeCommand} (\S\ref{subsec:debug}), which is not expandable and includes the backslash character. + +\subsection{More font size commands} +\label{subsec:fontsize} + +This package provides additional font size commands for use only in special cases. +Users should prefer the standard \LaTeX{} font size commands from \cs{tiny} to \cs{Huge} for typographic and syntactic consistency. + +\cs{SetFontStep} \sarg{} \marg{floating point expression} +\KeepNextPar* + +Sets the font size by setting the font step to the result of computing the \meta{floating point expression}. +Adding the optional star instead increases the current font step by the result of computing the \meta{floating point expression} or issues an error if the current font step is undefined (as explained for \cs{CurrentFontStep} in \S\ref{subsec:expandable}). +Sets the font baselineskip equal to the new font size \texttimes{} the value of the key \Key{baselineskip\-/size\-/ratio}. + +\listheading{Three exceptions:} +\begin{itemize} + \item + The font step must equal the font step of any font size command from \cs{tiny} to \cs{Huge} (Table~\ref{table:fontsteps}) unless the value of the key \Key{typographic\-/scale} is \Value{musical}. + \cs{SetFontStep} will issue an error if the font step is undefined (as explained for \cs{CurrentFontStep} in \S\ref{subsec:expandable}). + \item + If the font step equals the font step of any font size command from \cs{tiny} to \cs{Huge}, then that font size command will be used directly. + \item + Does nothing, except issue a warning, if used in math mode. +\end{itemize} + +\cs{SetFontScale} \sarg{} \marg{floating point expression} +\KeepNextPar* + +Sets the font size by setting the font scale to the result of computing the \meta{floating point expression}. +Adding the optional star instead increases the current font scale by the result of computing the \meta{floating point expression}. +Sets the font baselineskip equal to the new font size \texttimes{} the value of the key \Key{baselineskip\-/size\-/ratio}. +Does nothing, except issue a warning, if used in math mode. + +\cs{SetFontSize} \sarg{} \marg{dimen expression} +\KeepNextPar* + +Sets the font size to the value of \meta{dimen expression}, appending a default unit of \unit{pt}. +Adding the optional star instead increases the current font size by the result of \meta{dimen expression}, appending a default unit of \unit{pt}. +Sets the font baselineskip equal to the new font size \texttimes{} the value of the key \Key{baselineskip\-/size\-/ratio}. +Does nothing, except issue a warning, if used in math mode. + +\cs{ScaleFont} \marg{floating point expression} +\KeepNextPar* + +Sets the font size equal to the current font size \texttimes{} the result of computing the \meta{floating point expression}. +Sets the font baselineskip equal to the current font baselineskip \texttimes{} the result of computing the \meta{floating point expression}. +Does nothing, except issue a warning, if used in math mode. + +\cs{SetFontSizeBaselineskip} \marg{dimen expression} \marg{skip expression} +\KeepNextPar* + +Sets the font size to the value of \meta{dimen expression}, appending a default unit of \unit{pt}. +Sets the font baselineskip to the value of \meta{skip expression}, appending a default unit of \unit{pt}. +The font baselineskip must be greater than or equal to the font size. +Does nothing, except issue a warning, if used in math mode. +Can be used as an alternative to \cs{fontsize} + \cs{selectfont} as discussed in \S\ref{subsec:expandable}. + +\subsection{Testing and debugging} +\label{subsec:debug} + +The commands documented here are intended primarily for testing and debugging. +I have used them often when developing this package so I think users will find them helpful. + +\cs{PrintFontSizeParameters} +\KeepNextPar* + +Prints the current font size parameters\---the font step, font scale, font size, and font baselineskip. +The current font step will be left blank if it is undefined (as explained for \cs{CurrentFontStep} in \S\ref{subsec:expandable}). + +\cs{PrintAllFontSizeParameters} +\KeepNextPar* + +Prints the font step, font scale, font size, and font baselineskip of each font size command from \cs{tiny} to \cs{Huge}. + +\cs{PrintSampleText} \sarg{} \marg{text} +\KeepNextPar* + +Prints \meta{text} in each font size ordered from \cs{tiny} to \cs{Huge} each followed by a paragraph break. +\meta{text} can contain \cs{par} tokens. +Adding the optional star reverses the order of the font sizes. +One useful way of printing example text is \cs{PrintSampleText}\allowbreak\texttt{\{\cs{PrintFontSizeCommand}:\allowbreak\textvisiblespace\allowbreak\cs{PrintFontSizeParameters}\}}. + +\cs{PrintFontSizeCommand} +\KeepNextPar* + +Tests if the current font size and current font baselineskip equal the font size and font baselineskip, respectively, of any font size command from \cs{tiny} to \cs{Huge}. +If so, prints the name of that font size command, including the backslash character. +If not, prints \enquote{\string\undefined}. +This package also provides a similar command \cs{CurrentFontSizeCommand} (\S\ref{subsec:expandable}), which is expandable and omits the backslash character. + + +\section{Programming} +\label{sec:programming} + +This section documents the \pkg{expl3} programming support provided by the \pkg{fontscale} package. + +\subsection + {% + Compatibility with + \texorpdfstring + {\cs{text_purify:n}} + {\textbackslash{}text\_purify:n}% + } +\label{subsec:textpurify} + +\cs{text_purify:n} will correctly remove the formatting commands defined by this package, including \cs{fontscalesetup} and the commands documented in \S\ref{subsec:fontsize}. + +\subsection{Public functions and variables} +\label{subsec:publicexpl3} + +This package does not define any public \pkg{expl3} functions. + +This package defines public \pkg{expl3} variables that store the font step, font scale, font size, and font baselineskip of each font size command from \cs{tiny} to \cs{Huge}. +These variables should never be modified directly. +Their values should be changed only by \cs{fontscalesetup}. + +Each takes the form: + +\verb|\c_fontscale_|\meta{font size command}\verb|_step_fp| +\nopagebreak\newline +\verb|\l_fontscale_|\meta{font size command}\verb|_scale_fp| +\newline +\verb|\l_fontscale_|\meta{font size command}\verb|_size_dim| +\nopagebreak\newline +\verb|\l_fontscale_|\meta{font size command}\verb|_baselineskip_skip| + +Exception: +\cs{l_fontscale_normalsize_scale_fp} is not defined. +The font scale of \cs{normalsize} is stored in \cs{c_fontscale_normalsize_scale_fp}. + + +\end{document}
\ No newline at end of file diff --git a/macros/latex/contrib/harmony/README b/macros/latex/contrib/harmony/README index da777f5964..39f72b35f7 100644 --- a/macros/latex/contrib/harmony/README +++ b/macros/latex/contrib/harmony/README @@ -1,43 +1,26 @@ -harmony.sty 2007/05/04 +harmony 2024/08/01 -Copyright 2005 - 2007 +Copyright 2005 - 2024 Dagny Wegner <dagny.wegner@t-online.de> -Arnim Wegner <arnim.wegner@t-online.de> +Arnim Wegner <arnim.e.wegner@t-online.de> 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. -The latest version of this license is in -http://www.latex-project.org/lppl.txt -and version 1.3 or later is part of all distributions -of LaTeX version 2005/12/01 or later. - -This work has the LPPL maintenance status `maintained'. - -The Current Maintainers of this work are -Dagny Wegner and Arnim Wegner. This work consists of the files harmony.sty, harmony.tex, harmony.pdf, and Readme. -------------------------------------------------------- - -harmony.sty uses the packages ifthen and amssymb -and the fonts lcirclew10, musix11, and musix13. - -------------------------------------------------------- +harmony.sty uses the packages ifthen, mathtools and amssymb +and the fonts lcircle10, musix11 and musix13. harmony.sty is a LaTeX2e package for typesetting harmony symbols etc. in musicological texts; usage: cf. harmony.pdf. -Many commands in this package are only suitable -for size 12pt ! harmony.sty ist ein LaTeX2e-Package zum Setzen von Harmoniesymbolen etc. in musikwissenschaftlichen Texten; Benutzung: vgl. harmony.pdf. -Viele Befehle in diesem Package sind -nur fr die Schriftgre 12pt geeignet! diff --git a/macros/latex/contrib/harmony/harmony.pdf b/macros/latex/contrib/harmony/harmony.pdf Binary files differindex 4b523de911..b792390663 100644 --- a/macros/latex/contrib/harmony/harmony.pdf +++ b/macros/latex/contrib/harmony/harmony.pdf diff --git a/macros/latex/contrib/harmony/harmony.sty b/macros/latex/contrib/harmony/harmony.sty index ce528cf085..1145113c4d 100644 --- a/macros/latex/contrib/harmony/harmony.sty +++ b/macros/latex/contrib/harmony/harmony.sty @@ -1,29 +1,30 @@ -%% harmony.sty 2007/05/04 -%% Copyright 2005 - 2007 +%% harmony.sty 2024/08/01 +%% Copyright 2005 - 2024 %% Dagny Wegner <dagny.wegner@t-online.de> -%% Arnim Wegner <arnim.wegner@t-online.de> +%% Arnim Wegner <arnim.e.wegner@t-online.de> % % 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. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions -% of LaTeX version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainers of this work are -% Dagny Wegner and Arnim Wegner. % % This work consists of the files harmony.sty, % harmony.tex, harmony.pdf, and Readme. % ================================================================================== +\ProvidesPackage{harmony}[2024/08/01] \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{harmony}[2007/05/04] \RequirePackage{ifthen} \RequirePackage{amssymb} +\RequirePackage{mathtools} % contains \overbracket +% +\newcounter{notekorr} +\DeclareOption{8pt}{\setcounter{notekorr}{800}} +\DeclareOption{9pt}{\setcounter{notekorr}{900}} +\DeclareOption{10pt}{\setcounter{notekorr}{1000}} +\DeclareOption{11pt}{\setcounter{notekorr}{1100}} +\DeclareOption{12pt}{\setcounter{notekorr}{1200}} +\DeclareOption{13pt}{\setcounter{notekorr}{1300}} +\DeclareOption{14pt}{\setcounter{notekorr}{1400}} \DeclareOption{sf}{\def\FAM{\sffamily}} \DeclareOption{rm}{\def\FAM{\rmfamily}} \ExecuteOptions{sf} @@ -43,14 +44,31 @@ \newbox\nbxg \newbox\nbxh \newbox\nbxi -\newfont{\KREIS}{lcirclew10} -\newfont{\NOTEN}{musix13} -\newfont{\noten}{musix11}% 2007/05/03 +\newcounter{notescl} +\newcounter{fontscl} % -\newcommand{\Ohne}[2][0em]{% +\ifthenelse{\value{notekorr}=0}% +{\ifthenelse{\@ptsize<-2}{\setcounter{notescl}{800}}{} +\ifthenelse{\equal{\@ptsize}{-2}}{\setcounter{notescl}{800}}{} +\ifthenelse{\equal{\@ptsize}{-1}}{\setcounter{notescl}{900}}{} +\ifthenelse{\equal{\@ptsize}{0}}{\setcounter{notescl}{1000}}{} +\ifthenelse{\equal{\@ptsize}{1}}{\setcounter{notescl}{1100}}{} +\ifthenelse{\equal{\@ptsize}{2}}{\setcounter{notescl}{1200}}{} +\ifthenelse{\equal{\@ptsize}{3}}{\setcounter{notescl}{1300}}{} +\ifthenelse{\equal{\@ptsize}{4}}{\setcounter{notescl}{1400}}{} +\ifthenelse{\@ptsize>4}{\setcounter{notescl}{1400}}{}} +{\setcounter{notescl}{\value{notekorr}}} +% +\newfont{\NOTEN}{musix13 scaled \value{notescl}} +\newfont{\noten}{musix11 scaled \value{notescl}} +\setcounter{fontscl}{\value{notescl}} +\addtocounter{fontscl}{1000} +\newfont{\KREIS}{lcircle10 scaled \value{fontscl}} +% +\newcommand{\Ohne}[2][0.17em]{% \setbox\nbxi=\hbox{% \FAM% -\setbox\nbxa=\hbox{\sl\large /}% +\setbox\nbxa=\hbox{\textsl\large\raisebox{0.2ex}{/}}% #2% \kern-0.8em% \kern#1% @@ -60,8 +78,14 @@ }% \unhbox\nbxi% } +\let\Sans\Ohne % \newcommand{\Dohne}{\Ohne{D}} +\let\Dsans\Dohne +\newcommand{\DohneR}{\framebox{\Dohne}} +\let\DsansR\DohneR +\newcommand{\Dohner}{\frame{\Dohne}} +\let\Dsansr\Dohner % \newcommand{\DD}{% \setbox\nbxi=\hbox{% @@ -73,6 +97,9 @@ \unhbox\nbxi% } % +\newcommand{\DDR}{\framebox{\DD}} +\newcommand{\DDr}{\frame{\DD}} +% \newcommand{\DS}{% \setbox\nbxi=\hbox{% \FAM% @@ -96,7 +123,7 @@ \newcommand{\DDohne}{% \setbox\nbxi=\hbox{% \FAM% -\setbox\nbxa=\hbox{\sl\large /}% +\setbox\nbxa=\hbox{\textsl\large\raisebox{0.25ex}{/}}% \raise0.2ex\hbox{D}% \kern-0.5em% \lower0.2ex\hbox{D}% @@ -107,17 +134,23 @@ }% \box\nbxi% } +\let\DDsans\DDohne +% +\newcommand{\DDohneR}{\framebox{\DDohne}} +\let\DDsansR\DDohneR +\newcommand{\DDohner}{\frame{\DDohne}} +\let\DDsansr\DDohner % \newcommand{\VM}{% \setbox\nbxg=\hbox{>}% \setbox\nbxh=\hbox to \wd\nbxg{% -\raise0.24ex\hbox{{\boldmath$\scriptscriptstyle{>}$\unboldmath}\hss}}% 2005/05/10 +\raise0.24ex\hbox{{\boldmath$\scriptscriptstyle{>}$\unboldmath}\hss}}% \box\nbxh} % \newcommand{\UB}{% \setbox\nbxg=\hbox{<}% \setbox\nbxh=\hbox to \wd\nbxg{% -\raise0.24ex\hbox{\boldmath$\scriptscriptstyle{<}$\unboldmath\hss}}% 2005/05/10 +\raise0.24ex\hbox{\boldmath$\scriptscriptstyle{<}$\unboldmath\hss}}% \box\nbxh} % \newcommand{\HAa}[3]{% @@ -243,6 +276,9 @@ {\HAc{#1}{#2}{#3}{#4}{#5}}% } % +\def\HHR.#1.#2.#3.#4.#5.{\framebox{\HH.#1.#2.#3.#4.#5.}}% +\def\HHr.#1.#2.#3.#4.#5.{\frame{\HH.#1.#2.#3.#4.#5.\hspace{0.17em}}}% +% \newcommand{\FERM}[2][0.1pt]{% \setbox\nbxi=\hbox{% \FAM% @@ -287,15 +323,13 @@ \kern-\tmpdima\box\nbxb% }} % -\newcommand{\Kr}[1]{% -\ifthenelse{\equal{\@ptsize}{2}}{\@tempcnta=110}% -{\ifthenelse{\equal{\@ptsize}{1}}{\@tempcnta=109}% -{\@tempcnta=108}}% +\newcommand{\Kr}[2][102]{% +\ifthenelse{#1>110}{\@tempcnta=110}% +{\ifthenelse{#1<100}{\@tempcnta=100}{\@tempcnta=#1}} \setbox\nbxi=\hbox{% -\FAM\small% \setbox\nbxa=\hbox{#1}% \setbox\nbxb=\hbox{\KREIS\char\@tempcnta}% -\setbox\nbxc=\hbox to \wd\nbxb{\hss #1\hss}% +\setbox\nbxc=\hbox to \wd\nbxb{\hss #2\hss}% \tmpdima=0.5\ht\nbxa% \advance\tmpdima by -0.4\dp\nbxa\relax% \copy\nbxc% @@ -332,8 +366,8 @@ {\raisebox{0.58ex}[8pt][2pt]{\kern-1pt\NOTEN\symbol{82}\kern0.3em}}}% {\kern0.05em\ueber{#1}{#2}\kern0.05em% }}} -% -\newcommand{\Ganz}{{\NOTEN\kern0.05em\raisebox{0.5ex}{\symbol{9}}\kern1.35em}} +% Noten +\newcommand{\Ganz}{{\NOTEN\kern0.05em\raisebox{0.5ex}{\symbol{9}}\kern1.5em}} \newcommand{\Halb}{{\NOTEN\kern0.05em\raisebox{0.5ex}{\symbol{8}\kern0.936em% \raisebox{0.55ex}{\symbol{16}}}\kern0.2em}} \newcommand{\Vier}{{\NOTEN\kern0.05em\raisebox{0.5ex}{\symbol{7}\kern0.955em% @@ -343,7 +377,7 @@ \newcommand{\Sech}{{\NOTEN\kern0.05em\raisebox{0.5ex}{\symbol{7}\kern0.955em% \raisebox{0.55ex}{\symbol{16}}}\symbol{41}\kern0.9em}} \newcommand{\Zwdr}{{\NOTEN\kern0.05em\raisebox{0.5ex}{\symbol{7}\kern0.955em% -\raisebox{0.55ex}{\symbol{16}}}\symbol{42}\kern0.9em}} +\raisebox{0.55ex}{\symbol{16}}\raisebox{1.3ex}{\symbol{16}}}\symbol{42}\kern0.9em}} \newcommand{\GaPa}{{\NOTEN\kern0.055em\raisebox{0.25ex}{\symbol{60}}\kern0.05em}} \newcommand{\HaPa}{{\NOTEN\kern0.055em\raisebox{0.25ex}{\symbol{60}}\kern0.05em}} \newcommand{\ViPa}{{\NOTEN\kern0.05em\raisebox{-0.8ex}{\symbol{62}}\kern0.955em}} @@ -351,28 +385,76 @@ \newcommand{\SePa}{{\NOTEN\kern0.15em\raisebox{-0.4ex}{\symbol{64}}\kern1.3em}} \newcommand{\ZwPa}{{\NOTEN\kern0.25em\raisebox{-0.8ex}{\symbol{65}}\kern1.4em}} \newcommand{\Pu}{{\NOTEN\kern-0.2em\raisebox{-0.5ex}{\symbol{24}}\kern1em}} -\newcommand{\AAcht}{\Vier\kern0.1em\Vier{\NOTEN\kern-1.72em\raisebox{3.1ex}% +\newcommand{\AAcht}{{\NOTEN\Vier\kern0.3em\Vier\kern-1.72em\raisebox{3.1ex}% {\symbol{61}\kern-0.87em\symbol{61}}}} -\newcommand{\AchtBL}% 2007/05/03 -{\kern0.135em\Vier% -{\NOTEN\kern-1.82em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}\kern0.09em}} -\newcommand{\SechBL}% 2007/05/03 -{\kern0.135em\Vier% -{\NOTEN\kern-1.82em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}% +\newcommand{\AchtBL}{{\NOTEN\Vier\kern-1.82em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}}} +\newcommand{\AchtBR}{{\NOTEN\Vier\kern-0.1em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}}} +\newcommand{\SechBL}{{\NOTEN\Vier\kern-1.82em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}% \kern-1.63em\raisebox{2.3ex}{\symbol{61}\kern-0.87em\symbol{61}}\kern0.09em}} -\newcommand{\SechBl}% 2007/05/03 -{\kern0.135em\Vier% -{\NOTEN\kern-1.82em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}% +\newcommand{\SechBl}{{\NOTEN\Vier\kern-1.82em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}% \kern-1.63em\raisebox{2.3ex}{{\noten\kern0.9em\symbol{61}}}\kern0.09em}} -\newcommand{\AchtBR}% 2007/05/03 -{\kern0.135em\Vier% -{\NOTEN\kern-0.1em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}\kern-1em}} -\newcommand{\SechBR}% 2007/05/03 -{\kern0.135em\Vier% -{\NOTEN\kern-0.1em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}% -\kern-1.63em\raisebox{2.3ex}{\symbol{61}\kern-0.87em\symbol{61}}\kern-1.01em}} -\newcommand{\SechBr}% 2007/05/03 -{\kern0.135em\Vier% -{\NOTEN\kern-0.1em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}% -\kern-1.63em\raisebox{2.3ex}{{\noten\kern-0.12em\symbol{61}}}\kern-0.3em}} -% etc. ... ! Define your own commands!
\ No newline at end of file +\newcommand{\SechBR}{{\NOTEN\Vier\kern-0.1em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}% +\kern-1.63em\raisebox{2.3ex}{\symbol{61}\kern-0.87em\symbol{61}}}} +\newcommand{\SechBr}{{\NOTEN\Vier\kern-0.1em\raisebox{3.05ex}{\symbol{61}\kern-0.87em\symbol{61}}% +\kern-1.63em\raisebox{2.3ex}{{\noten\kern-0.12em\symbol{61}}}\kern0.87em}} +% +\newcommand{\Blkn}[2]{\raisebox{#2}{{\NOTEN\kern#1\symbol{61}}}}% +% +\newcommand{\Overset}[3][0pt]{\ensuremath{\overset{\raisebox{#1}{\scriptsize\ensuremath{#2}}}{#3}}} +% +\newcommand\achteltriole{% + \ensuremath{\NOTEN% + \Overset[-1ex]% + {\text{\itshape\tiny\kern0.7em 3}}% + {\AchtBR\kern-1.1em\Vier\kern0.4em\AchtBL}% + }% +} +% +\newcommand\vierteltrioleA{% + \ensuremath{\NOTEN% + \Overset[-1ex]% + {\text{\itshape\tiny 3}}% + {\overbracket[0.45pt]{% + \rule{0pt}{2.4ex}\Vier\kern0.5em\Vier\kern0.5em\Vier\kern0.25em}% + }% + }% +} +% +\newcommand\vierteltrioleB{% + \ensuremath{\NOTEN% + \Overset% + {\raisebox{1ex}{% + \rule{0.45pt}{1ex}% + \kern0.25em\raisebox{0.88ex}{\kern-0.3em\rule{1.15em}{0.45pt}}% + \raisebox{0.53ex}{\text{\itshape\tiny 3}}% + \raisebox{0.88ex}{\rule{1.15em}{0.45pt}}% + \kern-0.05em\rule{0.45pt}{1ex}% + }}% + {\Vier\kern0.5em\Vier\kern0.5em\Vier\kern0.3em}% + }% +} +% +\newcommand\halbetrioleA{% + \ensuremath{\NOTEN% + \Overset[-1ex]% + {\text{\itshape\tiny 3}}% + {\overbracket[0.45pt]{% + \rule{0pt}{2.4ex}\Halb\kern0.5em\Halb\kern0.5em\Halb\kern0.25em}% + }% + }% +} +% +\newcommand\halbetrioleB{% + \ensuremath{\NOTEN% + \Overset% + {\raisebox{1ex}{% + \rule{0.45pt}{1ex}% + \kern0.25em\raisebox{0.88ex}{\kern-0.3em\rule{1.15em}{0.45pt}}% + \raisebox{0.53ex}{\text{\itshape\tiny 3}}% + \raisebox{0.88ex}{\rule{1.15em}{0.45pt}}% + \kern-0.05em\rule{0.45pt}{1ex}% + }}% + {\Halb\kern0.5em\Halb\kern0.5em\Halb\kern0.3em}% + }% +} +% ==================================================================================
\ No newline at end of file diff --git a/macros/latex/contrib/harmony/harmony.tex b/macros/latex/contrib/harmony/harmony.tex index 326aff42c3..7b163dc7ab 100644 --- a/macros/latex/contrib/harmony/harmony.tex +++ b/macros/latex/contrib/harmony/harmony.tex @@ -1,38 +1,29 @@ -%% harmony.sty 2007/05/04 -%% Copyright 2005 - 2007 +%% harmony.sty 2024/08/01 +%% Copyright 2005 - 2024 %% Dagny Wegner <dagny.wegner@t-online.de> -%% Arnim Wegner <arnim.wegner@t-online.de> +%% Arnim Wegner <arnim.e.wegner@t-online.de> % % 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. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions -% of LaTeX version 2005/12/01 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainers of this work are -% Dagny Wegner and Arnim Wegner. % % This work consists of the files harmony.sty, % harmony.tex, harmony.pdf, and Readme. -%==================================================================================== -\documentclass[12pt,origlongtable,pdftex]{scrartcl} +% ================================================================================== +\documentclass[paper=a4,fontsize=12pt,origlongtable]{scrartcl} % \usepackage[ngerman]{babel} \usepackage[T1]{fontenc} \usepackage{mathpazo} -\usepackage[ansinew]{inputenc} \usepackage{array} \usepackage{longtable} -\usepackage[pdftex,a4paper]{hyperref} +\usepackage[pdftex]{hyperref} % -\usepackage{harmony} +\usepackage[12pt]{harmony} % options: 8pt 9pt 10pt 11pt 12pt 13pt 14pt % -\setlength{\textheight}{240mm} +\setlength{\voffset}{-10mm} +\setlength{\textheight}{255mm} \setlength{\overfullrule}{0pt} \setlength{\extrarowheight}{2ex} \setlength{\parindent}{0pt} @@ -49,45 +40,37 @@ pdfstartview = {Fit}, %------------------------------------------------------------------------------------- \begin{document} % -\title{harmony.sty} -\author{Dagny Wegner \and Arnim Wegner} -\date{2007/05/04} +\title{harmony} +\author{Dagny Wegner \and Arnim Wegner} +\date{2024/08/01} \maketitle % \vfill % \begin{center} -Copyright 2005 - 2007\\ +Copyright 2005 - 2024\\ Dagny Wegner <dagny.wegner@t-online.de>\\ -Arnim Wegner <arnim.wegner@t-online.de> +Arnim Wegner <arnim.e.wegner@t-online.de> \end{center} This work may be distributed and/or modified under the -conditions of the LaTeX Project Public License, either +conditions of the \LaTeX\ Project Public License, either version 1.3 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.3 or later is part of all distributions -of LaTeX version 2005/12/01 or later. -This work has the LPPL maintenance status `maintained'. -The Current Maintainers of this work are -Dagny Wegner and Arnim Wegner. This work consists of the files harmony.sty, harmony.tex, harmony.pdf, and Readme. % \newpage % \begin{center} -This work was developed for the doctoral dissertation in musicology of\\ +The package harmony was first developed for the doctoral dissertation in\\ musicology of Dagny Wegner; cf. this dissertation for further examples.\\ -(Look at http://www.sub.uni-hamburg.de/opus/volltexte/2006/3047/ or -http://www.chmtl.indiana.edu/ddm/DNclassical.html)\\[2ex] -\textbf{Many commands in this package therefore are only suitable for size 12pt !} +(Look at https://ediss.sub.uni-hamburg.de/handle/ediss/1483)\\[1ex] +This package accepts the optional parameters 8pt, \dots ,14pt for the size\\ of the notes + independent of the fontsize of the document. \end{center} % -\vspace{2ex} -% -\begin{longtable}{|l|l|} +\vspace*{-5mm} +\begin{longtable}{|l|c|} % \caption*{\textbf{Usage and Examples}} \endfirsthead @@ -95,9 +78,11 @@ http://www.chmtl.indiana.edu/ddm/DNclassical.html)\\[2ex] \endhead % \hline -input & output\\ +Input & Output\\ \hline\hline \verb|\HH.X.u.v.w.z.|&\HH.X.u.v.w.z.\\ +\verb|\HHR.X.u.v.w.z.|&\HHR.X.u.v.w.z.\\ +\verb|\HHr.X.u.v.w.z.|&\HHr.X.u.v.w.z.\\ \verb|\HH.D.....|&\HH.D.....\\ \verb|\HH.D..7...|&\HH.D..7...\\ \verb|\HH.D.3....|&\HH.D.3....\\ @@ -105,19 +90,26 @@ input & output\\ \verb|\HH.D.3.9.7..|&\HH.D.3.9.7..\\ \verb|\HH.D.3.9.7.5.|&\HH.D.3.9.7.5.\\ \hline -\verb|\Dohne|&\Dohne\\ +\verb|\Dohne, \Dsans|&\Dohne\\ +\verb|\DohneR, \DsansR|&\DohneR\\ +\verb|\Dohner, \Dsansr|&\Dohner\\ \verb|\DD|&\DD\\ -\verb|\DDohne|&\DDohne\\ +\verb|\DDR|&\DDR\\ +\verb|\DDr|&\DDr\\ +\verb|\DDohne, \DDsans|&\DDohne\\ +\verb|\DDohneR, \DDsansR|&\DDohneR\\ +\verb|\DDohner. \DDsansr|&\DDohner\\ \verb|\DS|&\DS\\ \verb|\Ds|&\Ds\\ \verb|\UB|&\UB\\ \verb|\VM|&\VM\\ -\verb|\Ohne{D}|&\Ohne{D}\\ -\verb|\Ohne[3pt]{D}|&\Ohne[3pt]{D}\\ -\verb|\Ohne[-3pt]{D}|&\Ohne[-3pt]{D}\\ \hline \newpage \hline +\verb|\Ohne{D}, \Sans{D}|&\Ohne{D}\\ +\verb|\Ohne[3pt]{D}, \Sans[3pt]{D}|&\Ohne[3pt]{D}\\ +\verb|\Ohne[-3pt]{D}, \Sans[-3pt]{D}|&\Ohne[-3pt]{D}\\ +\hline \verb|\Fermi{X}|&\Fermi{X}\\ \verb|\Ferli{X}|&\Ferli{X}\\ \verb|\Ferli[5pt]{T}|&\Ferli[5pt]{T}\\ @@ -125,10 +117,9 @@ input & output\\ \hline \verb|\Umd{D}|&\Umd{D}\\ \verb|\Umd[5pt]{D}|&\Umd[5pt]{D}\\ -\hline \verb|\Kr{a:}|&\Kr{a:}\\ \verb|\Kr{f:} \Kr{g:}|&\Kr{f:} \Kr{g:}\\ -\verb|\Kr{\small fis:}|&\Kr{\small fis:}\\ +\verb|\Kr[105]{fis:} (#1: 100 - 110)|&\Kr[105]{fis:}\\[1ex] \hline \verb|\Takt{u}{v}|&\Takt{u}{v}\\ \verb|\Takt{3}{4}|&\Takt{3}{4}\\ @@ -142,12 +133,12 @@ input & output\\ \verb|\Umd{\HH.D.3.9.7.5.}|&\Umd{\HH.D.3.9.7.5.}\\ \verb|\Umd[5pt]{\HH.D.3.9.7.5.}|&\Umd[5pt]{\HH.D.3.9.7.5.}\\ \verb|\HH.\DDohne.5\VM.9\VM.7..|&\HH.\DDohne.5\VM.9\VM.7..\\ -\verb|\HH.\Ohne[0,1em]{Es}.5-3.7...|&\HH.\Ohne[0,1em]{Es}.5-3.7...\\ +\verb|\HH.\Ohne[0.1em]{Es}.5-3.7...|&\HH.\Ohne[0,1em]{Es}.5-3.7...\\ \verb|\Ferli[-1pt]{\HH.\DDohne.5\VM.9\VM.7..}|&\Ferli[-1pt]{\HH.\DDohne.5\VM.9\VM.7..}\\ \hline \newpage \hline -\verb|\Ganz|&\Ganz\\ +\verb|\Ganz|&\kern-0.1em\Ganz\\ \verb|\Halb|&\Halb\\ \verb|\Vier|&\Vier\\ \verb|\Acht|&\Acht\\ @@ -167,18 +158,28 @@ input & output\\ \verb|\SechBr|&\SechBr\\ \hline \verb|\Vier\AchtBL|&\Vier\AchtBL\\ +\verb|\Vier\kern0.2em\AchtBL|&\Vier\kern0.2em\AchtBL\\ \verb|\Vier\SechBL|&\Vier\SechBL\\ +\verb|\Vier\kern0.2em\SechBL|&\Vier\kern0.2em\SechBL\\ \verb|\Vier\SechBl|&\Vier\SechBl\\ +\verb|\Vier\kern0.2em\SechBl|&\Vier\kern0.2em\SechBl\\ \verb|\AchtBR\Vier|&\AchtBR\Vier\\ \verb|\SechBR\Vier|&\SechBR\Vier\\ \verb|\SechBr\Vier|&\SechBr\Vier\\ -\verb|\SechBr\Vier\SechBl|&\SechBr\Vier\SechBl\\ +\verb|\SechBr\Vier\kern0.2em\SechBl|&\SechBr\Vier\kern0.2em\SechBl\\ \verb|\AchtBR\AchtBR\AchtBL|&\AchtBR\AchtBR\AchtBL\\ -\verb|\AchtBR\kern-0.15em\AchtBR\kern-0.15em\AchtBL|% -&\AchtBR\kern-0.15em\AchtBR\kern-0.15em\AchtBL\\ \hline \newpage \hline +\verb|\Blkn{0em}{0ex}|&\Blkn{0ex}{0em}\\ +\verb|\AchtBR\Blkn{0.04em}{2.07ex}|&\AchtBR\Blkn{0.04em}{2.07ex}\\ +\hline +\verb|\achteltriole|&\kern-0.6em\achteltriole\\ +\verb|\vierteltrioleA|&\vierteltrioleA\\ +\verb|\vierteltrioleB|&\vierteltrioleB\\ +\verb|\halbetrioleA|&\halbetrioleA\\ +\verb|\halbetrioleB|&\halbetrioleB\\ +\hline \verb|\GaPa|&\GaPa\\ \verb|\HaPa|&\HaPa\\ \verb|\ViPa|&\ViPa\\ @@ -217,13 +218,13 @@ rm&rmfamily\\ \newcommand{\Str}[2][0.5]{\raise#1ex\hbox to #2em{\hrulefill}} \newcommand{\ST}{\h0.03h\Str[0.65]{0.27}\h0.03h} % -\h9h\Kr{g:}% +\h9h\Kr[103]{g:}% \h1h\HH.\DDohne.5\VM.9\VM.7..% \h0,5h\HH.D..6.4..% \h0,5h\HH.\DDohne.3.9\VM.7..% \h0,5h\HH.\Dohne.7.9\VM...% \h0,5h\HH.T.3....\\[1ex] -\h17h\Kr{d:}% +\h17h\Kr[102]{d:}% \h0,5h\Umd[1ex]{\HH.S.3....}% \h0,5h\HH.\DD.5\VM.7...% \h0,5h\HH.D..8\Str[0,65]{1,2}7\ST6\ST5.8\ST6\ST4\Str[0,65]{2}3.6\ST5\ST8% @@ -237,13 +238,13 @@ rm&rmfamily\\ \newcommand{\Str}[2][0.5]{\raise#1ex\hbox to #2em{\hrulefill}} \newcommand{\ST}{\h0.03h\Str[0.65]{0.27}\h0.03h} % -\h9h\Kr{g:}% +\h9h\Kr[103]{g:}% \h1h\HH.\DDohne.5\VM.9\VM.7..% \h0,5h\HH.D..6.4..% \h0,5h\HH.\DDohne.3.9\VM.7..% \h0,5h\HH.\Dohne.7.9\VM...% \h0,5h\HH.T.3....\\[1ex] -\h17h\Kr{d:}% +\h17h\Kr[102]{d:}% \h0,5h\Umd[1ex]{\HH.S.3....}% \h0,5h\HH.\DD.5\VM.7...% \h0,5h\HH.D..8\Str[0,65]{1,2}7\ST6\ST5.8\ST6\ST4\Str[0,65]{2}3.6\ST5\ST8% diff --git a/macros/latex/contrib/hebdomon/README.md b/macros/latex/contrib/hebdomon/README.md new file mode 100644 index 0000000000..cb581a6ab0 --- /dev/null +++ b/macros/latex/contrib/hebdomon/README.md @@ -0,0 +1,18 @@ +# Hebdomon - A Documentclass for Assignment Preparation + +## Description + +Hebdomon is a latex documentclass for streamlining document creation in latex. This +package does not ovewrite any TeX or LaTeX commands so the user could use their own +macros or other commands as they wish. + +A manual is written which can be seen in HebdomonGuide which showcases some commands written for the class. + +## Author + +This package is maintained by D. T. McGuiness: dtm@mci4me.at + +## Licence + +Released under the LaTeX Project Public License v1.3c or later. +See https://www.latex-project.org/lppl.txt diff --git a/macros/latex/contrib/hebdomon/doc/HebdomonGuide.pdf b/macros/latex/contrib/hebdomon/doc/HebdomonGuide.pdf Binary files differnew file mode 100644 index 0000000000..f458c73d8e --- /dev/null +++ b/macros/latex/contrib/hebdomon/doc/HebdomonGuide.pdf diff --git a/macros/latex/contrib/hebdomon/doc/HebdomonGuide.tex b/macros/latex/contrib/hebdomon/doc/HebdomonGuide.tex new file mode 100644 index 0000000000..714857cf40 --- /dev/null +++ b/macros/latex/contrib/hebdomon/doc/HebdomonGuide.tex @@ -0,0 +1,461 @@ +% Load the base class +\documentclass[minted, draw]{../tex/hebdomon} + +\begin{document} + +\title{Hebdomon \\ Report and Documentation Standard} +\author{v0.1 - Angry Avocado} +\StudentName{D. T. McGuiness} +\date{dtm@mci4me.at} + +\publishers{ + \begin{tabular}[!b]{rl} + \textbf{Student Name} & xxxxx \\[3pt] + \textbf{Student Number} & xxxxx \\[3pt] + \textbf{Module Name} & xxxxx + \end{tabular}\\[20pt] + } + +\maketitle +\dominitoc +\tableofcontents +\newpage + +\Chapter{The Hebdomon Template} +\Section{Introduction} + +This document is designed to abstract a significant portion of the +commands and MACROs to hide away the programming aspect and ease into +LaTeX programming. While some commands are have been changed \hlight{NO} +command has been overwritten so feel free to use the original ones +if you wish. + +\begin{warning} + As to the best of the authors knowledge, the original commands should work + but the aesthetics may be compromised. +\end{warning} + +\Section{Title Formatting} + +To begin a new content, always start the content with a chapter heading. To +insert the chapter with an additional \lstinline[columns=fixed]{minitoc} +use \lstinline[columns=fixed]{\Chapter}, which produces an heading as +you see at the beginning of this page, to have a heading without +a \lstinline[columns=fixed]{minitoc} use the standard +\lstinline[columns=fixed]{\chapter}. + +The document relies on the user to use the \hlight{correct} title commands to +keep the formatting consistent. The commands that starting with a +capital letter are the overloaded commands of the standard ones. +The following are the current ones: +% +\begin{code}{python} +\Chapter{...} +\Section{...} +\Subsection{...} +\Subsubsection{...} +\end{code} +% +\begin{warning} + Unless there is a specific reason, it is suggested to use the aforementioned + commands. However, original LaTeX command should work as well if you want to use. +\end{warning} + +\Subsection{Page Geometry} + +The page geometry is set to the following settings. This is done using the +standard package \pcode{\usepackage{geometry}} which is defined in the +\pcode{Hebdomon.cls}. +% +\begin{itemize}[leftmargin=!,labelindent=-29.2pt] + \item[\textbf{top}] 2.5cm, + \item[\textbf{right}] 2.0cm, + \item[\textbf{bottom}] 2.5cm, + \item[\textbf{left}] 3.0cm. +\end{itemize} +% +\Section{Image Positioning} +% +The image positioning could be done with the following code snippet: +% +\begin{code}{latex} +\begin{figure}[ht] + \centering + \includegraphics[options]{figures/path.pdf} + \caption{\label{fig:label} } +\end{figure} +\end{code} +% +Here there are a few options worth mentioning: +% +\begin{hgitemize} + \item[\pcode{figures/path}] The place where the image is kept. If the + image is in the same folder where the main.tex file resides, it is as + simple as writing the files name. If the file is in a folder called + image, just write \pcode{image/innsbruck.jpg}. Finally if the image is + in a higher directory (i.e., image is in folderA/innsbruck.jpg and the + main tex is in folderA/document/main.tex then the path becomes \pcode{../innsbruck.jpg} + \item[\pcode{\caption{..}}] Where you write the caption of the image. + For consistency make sure every image has a caption as if the image does not + need a caption, maybe it not be present to begin with. + \item[\pcode{label{}}] This is an identifier for you to use when you need + to cite this Figure in a place somewhere. For example if you were to have + and image with the following: +\end{hgitemize} +% +\begin{code}{latex} +\begin{figure}[ht] + \centering + \includegraphics[width=\textwidth]{figures/path.pdf} + \caption{A photo I found on the web.}\label{fig:innsbruck} +\end{figure} +\end{code} +% +\begin{hgitemize} + \item[] Now this image is referenced as \pcode{fig:innsbruck}, which + means if we write the following: +\end{hgitemize} +% +\begin{code}{text} +To see the image, have a look at Figure \ref{fig:innsbruck} +\end{code} +% +This line of command will be presented as +% +\begin{excerpt} + To see the image, have a look at Figure 1.1. +\end{excerpt} +% +Finally you can see the image here as well. +% +\begin{figure}[ht] + \centering + \includegraphics[width=\linewidth]{figures/innsbruck.jpg} + \caption{The famous Innsbruck houses near the river Inn. This image is + placed with a width value of \pcode{width=\linewidth}. This is also + a good opportunity to showcase the hanging behaviour of the figure + caption.} +\end{figure} +% +\Section{Defined Environments} +% +\begin{hgitemize} + \item[\pcode{excerpt}] The template relies on the excellent \lstinline[columns=fixed]{tcolorbox} + package for formatting the boxes within the document and for that end different styles were created. + \item[] Sometimes one needs to quote either a proverb or to create drama, for this use + the \lstinline[columns=fixed]{excerpt} environment with the following notation and effect. +\end{hgitemize} +% +\begin{code}{latex} +\begin{excerpt} + To be, or not to be... +\end{excerpt} +\end{code} +% +\begin{hgitemize} + \item[] Compiling this code snippet would show as in the document +\end{hgitemize} +% +\begin{excerpt} + To be, or not to be... +\end{excerpt} +% +\begin{itemize}[leftmargin=!,labelindent=-29.2pt] + \item[\pcode{code}] During the preparation of your document, it is useful to showcase + some code either in the shape of all the document or a snippet of it. + There are two (\hlight{2}) ways of doing this where the first one will be discussed here. + \item[] For example to print out a hello world in python, please use the following environment +\end{itemize} +% +\begin{verbatim} +\begin{code}{python} +print("Hello, World!") +\end{code} +\end{verbatim} +% +Producing the following: +% +\begin{code}{python} +print("Hello, World!") +\end{code} +% +The class also come with some predefined environments to modify the behaviour/aesthetics of the document. +% +Highlighting text is \hlight{very easy}, here is an example on how to write one. + +\begin{code}{latex} +Highlighting text is \hlight{very easy}, here is an example: +\end{code} + +\begin{itemize}[leftmargin=!,labelindent=-29.2pt] + \item[\pcode{example}] Sometimes you need to showcase an example or + need to highlight a certain idea. + For these things the environment Example could be useful. + \item[] For example to show as simple example or give a slight attention to a topic you can do the following. +\end{itemize} + +\begin{example} + This is an example. This could be anything which you would like to have a certain amount of + attention but not too much as to distract from the flow of the document. +\end{example} + +\begin{itemize}[leftmargin=!,labelindent=-29.2pt] + \item[\pcode{highlight}] Or sometimes you need to give a clear break to the flow of the + document and ask the reader to look at your banner. For that use highlight. +\end{itemize} + +\begin{highlight} + Hey! Pay attention as this is a highlight box. +\end{highlight} + +\Subsection{Writing Equations} +% +One of the strong suits of LaTeX compared to other editors and programs is +it simplicity and ease of use methods of writing equations. Consider the +following equation: +% +\begin{equation*} + f(x) = x^2 + 2x + 1 +\end{equation*} +% +In code form this would be written as: +% +\begin{code}{latex} + \begin{equation*} + f(x) = x^2 + 2x + 1 + \end{equation*} +\end{code} +% +All equations that has their newline and centre staged are mostly written +in an environment where it has a \pcode{begin} and an \pcode{end}. You may +have noticed the asterisks sign just after the equation. This implies the +environment is \hlight{not numbered}, meaning you won't be able to +reference it. This is used to limit the numbering of equations to just the +essential parts in the document and not reach 3 digits by the time you are +in page 8. For a numbered equation like the following +% +\begin{equation} + f(x) = x^2 + 2x + 1 +\end{equation} +% +You only need to do: +% +\begin{code}{latex} + \begin{equation}\label{eq:quad} + f(x) = x^2 + 2x + 1 + \end{equation} +\end{code} +% +where \pcode{\label{eq:quad}} is the equation reference label. +% +You could also make matrices as well as \pcode{amsmath} is preloaded into this template. +% +\Subsection{Designing a Table} +% +Finally, no template is done without someone telling you how a table should be designed. +% +Below is a standard table +% +\begin{table}[!ht] + \begin{NiceTabular}{rX}[rules/color=[gray]{0.9},rules/width=1pt] + \CodeBefore + \rowcolors{1}{black!5}{} + \rowcolors{3}{blue!5}{} + \Body + \toprule + \textbf{Section} & \textbf{Scientific Method Step} \\ + \midrule + \textbf{Introduction} & states your hypothesis \\ + \textbf{Methods} & details how you tested your hypothesis \\ + \textbf{Results} & provides raw (i.e., uninterpreted) data collected \\ + \textbf{Discussion} & considers whether the data you obtained support the hypothesis \\ + \bottomrule + \end{NiceTabular} + \caption{A Detailed look into the scientific method.} +\end{table} +% +And the code used to generate it: +% +\begin{code}{latex} +\begin{table}[!ht] + \begin{NiceTabular}{rX}[rules/color=[gray]{0.9},rules/width=1pt] + \CodeBefore + \rowcolors{1}{black!5}{} + \rowcolors{3}{blue!5}{} + \Body + \toprule + \textbf{Section} & \textbf{Scientific Method Step} \\ + \midrule + \textbf{Introduction} & states hypothesis \\ + \textbf{Methods} & how you tested hypothesis \\ + \textbf{Results} & provides raw data collected \\ + \textbf{Discussion} & whether it support the hypothesis \\ + \bottomrule + \end{NiceTabular} + \caption{A Detailed look into the scientific method.} +\end{table} +\end{code} + +\Chapter{Plotting your data using PGF/TikZ} + +\Section{Introduction} + +PGFplots and Tikz are powerful scripting languages allowing you to draw high-quality diagrams +using only a programming language. PGFplots are generally used for plotting data from a wide +variety of representations from simple 2D plots to complex 3D geometries. +\\ +But wikipedia description put it best: + +\begin{excerpt} + PGF/TikZ is a pair of languages for producing vector graphics + (e.g., technical illustrations and drawings) from a geometric/algebraic description, with + standard features including the drawing of points, lines, arrows, paths, circles, + ellipses and polygons. PGF is a lower-level language, while TikZ is a set of higher-level + macros that use PGF. The top-level PGF and TikZ commands are invoked as TeX macros, + but in contrast with PSTricks, the PGF/TikZ graphics themselves are described in a + language that resembles MetaPost. +\end{excerpt} + +For more info please look at the documentation \href{https://tikz.dev/pgfplots/}{here}. +It is of course up to the user to select which graphical software to produce the necessary +visual components but unless it requires complex functions/processing, it would be be easier +to have it in PGF/TikZ format for easy editing/maintenance. + +For this manual we will be looking at the three (\hlight{3}) plot types you may +encounter in your studies. +% +\Subsection{A Simple 2D Plot} +% +2D plots are simple yet powerful to show the relation of a single parameters +and its related function. +Below is an example of a simple comparison of two (\hlight{2}) functions. +% +\begin{figure}[!ht] + \centering + \begin{tikzpicture} + \begin{axis}[hebdomon, xlabel = \(x\), ylabel = {\(f(x)\)}] + % + \addplot [domain=-10:10, samples=100,red]{x^3 - 7*x - 1}; + \addlegendentry{\(x^2 - 2x - 1\)} + % + \addplot [domain=-10:10, samples=100, blue]{x^2 + 6*x + 8}; + % + \addlegendentry{\(x^2 + 2x + 1\)} + % + \end{axis} + \end{tikzpicture} + \caption{This is an example of a 2D PGF plot comparing + two functions where these functions are calculated using + PGF itself rather than entering/reading from data.} +\end{figure} +% +The image above is generated using the following code: + +\begin{code}{latex} +\begin{figure}[!ht] + \centering + \begin{tikzpicture} + \begin{axis}[hebdomon, xlabel = \(x\), ylabel = {\(f(x)\)}] + % + \addplot [domain=-10:10, samples=100,red]{x^3 - 7*x - 1}; + \addlegendentry{\(x^2 - 2x - 1\)} + % + \addplot [domain=-10:10, samples=100, blue]{x^2 + 6*x + 8}; + % + \addlegendentry{\(x^2 + 2x + 1\)} + % + \end{axis} + \end{tikzpicture} + \caption{This is an example of a 2D PGF plot comparing + two functions where these functions are calculated using + PGF itself rather than entering/reading from data.} +\end{figure} +\end{code} + +As can be seen it is relatively standard to create plots. Some aspect +which need mentioning. + +\begin{hgitemize} + \item[\pcode{\addplot}] You invoke this command when you want to + create a plot. In the square brackets (i.e., []) you insert your + \hlight{configuration} of your plot. The most important ones are + \begin{itemize} + \item[\pcode{domain}] the range in which the function will be + calculated + \item[\pcode{sample}] the number of calculations will be done + within the defined domain. + \end{itemize} +\end{hgitemize} + +\Subsection{Plotting 3D plots} + +Plotting data with PGFplots is also quite possible and will generate +great plot (as long as it is not massively complicated). For more +information on the precautions on designing 3D plots, please have a look +at \href{https://tikz.dev/pgfplots/reference-3dplots}{here}. + +Below is the prototypical plot to showcase the 3D capabilities of PGF: + +\begin{figure}[!ht] + \centering + \begin{tikzpicture} + \begin{axis}[view={25}{30},mark layer=like plot] + \addplot3 [ + surf, + shader=faceted, + fill opacity=0.75, + samples=25, + domain=-4:4, + y domain=-4:4, + on layer=main, + ] {x^2-y^2}; + \end{axis} + \end{tikzpicture} + \caption{An example 3D plot done wit PGFplots.} +\end{figure} + +And, of course the code for generating the plot is given as follows: + +\begin{code}{latex} +\begin{figure}[!ht] + \centering + \begin{tikzpicture} + \begin{axis}[view={25}{30},mark layer=like plot] + \addplot3 [ + surf, + shader=faceted, + fill opacity=0.75, + samples=25, + domain=-4:4, + y domain=-4:4, + on layer=main, + ] {x^2-y^2}; + \end{axis} + \end{tikzpicture} + \caption{An example 3D plot done wit PGFplots.} +\end{figure} +\end{code} + +Some options worth mentioning are as follows: + +\begin{hgitemize} + \item[\pcode{surf}] Generates a \hlight{surface} based on the 2D + data it was given (in this case these are $x$ and $y$. + \item[\pcode{shader}] Describes, basically how each segment should be + filled. + \item[\pcode{samples}] Similar to 2D plots, tells how many data points will + be measured. However, make a note that 3D is significantly more taxing + on the TeX memory than 2D and making this sampling high may result in + exceeding the memory limit. +\end{hgitemize} + +\end{document} + +%%% Local Variables: +%%% coding: utf-8 +%%% mode: latex +%%% TeX-command-extra-options: "-shell-escape" +%%% TeX-master: t +%%% TeX-engine: luatex +%%% End: + diff --git a/macros/latex/contrib/hebdomon/doc/figures/innsbruck.jpg b/macros/latex/contrib/hebdomon/doc/figures/innsbruck.jpg Binary files differnew file mode 100644 index 0000000000..c42a2a0580 --- /dev/null +++ b/macros/latex/contrib/hebdomon/doc/figures/innsbruck.jpg diff --git a/macros/latex/contrib/hebdomon/tex/hebdomon.cls b/macros/latex/contrib/hebdomon/tex/hebdomon.cls new file mode 100644 index 0000000000..33277f76c3 --- /dev/null +++ b/macros/latex/contrib/hebdomon/tex/hebdomon.cls @@ -0,0 +1,412 @@ +% Hebdomon document class for use in report and assessment writing +% Written by D. T. McGuiness: dtm@mci4me.at + +% v0.1 - Angry Avocado [WS2024] + +\NeedsTeXFormat{LaTeX2e}[1994/06/01] +\ProvidesClass{hebdomon}[2024/08/08 v0.1 Report and Documentation standard] + +% This document is based on the excellent KOMA Script scrreprt class +% The following options are declared beforehand. + +\RequirePackage{ifthen} % require an if-else loop to +% choose depending on the field + +% Allows students to choose which package for code printing. + +\newboolean{mnt} % set bool operator for minted +\newboolean{lst} % set bool operator for lstlisting +\newboolean{drw} % set bool operator for PGF/TikZ + +%-OPTION: set option to choose minted code printing package +\DeclareOption{minted}{ + \setboolean{mnt}{true} +} + +%-OPTION: set option to choose lstlisting code printing package +\DeclareOption{lstlisting}{ + \setboolean{lst}{true} +} + +%-OPTION: set option to choose PGF/TikZ plotting packages +\DeclareOption{draw}{ + \setboolean{drw}{true} +} + +\DeclareOption*{ + \PassOptionsToClass{\CurrentOption}{scrreprt} +} +\ExecuteOptions{} +\ProcessOptions \relax + +% Load the base class to create the custom template +\LoadClass[ + bibliography = totoc, + headings = big, + captions = tableheading, + chapterprefix = true, +]{scrreprt} + +% Page Geometry ----------------------------------------------------------- +% Define the default page geometry +\RequirePackage[ + left = 3.0cm, + right = 2.0cm, + top = 2.5cm, + bottom = 2.5cm]{geometry} + +% Required Packages ------------------------------------------------------- +\RequirePackage{nicematrix} % For modern table design +\RequirePackage{booktabs} % To access \midrule \toprule \bottomrule + +% For use in referencing purposes +\RequirePackage[ + backend=bibtex]{biblatex} + +\RequirePackage{graphicx} % To enable image insertion +\RequirePackage{environ} % To allow new environments with Environ + + +\RequirePackage{lmodern} +\RequirePackage[sfdefault]{FiraSans} + +\RequirePackage{minitoc} +\RequirePackage{setspace} + +\RequirePackage{hyperref} % Allow the use of hyperlink within document + +\RequirePackage{enumitem} + +\RequirePackage{amsmath} + +\usepackage[labelfont=bf]{caption} % Set the caption style to bold + +\RequirePackage{titlesec} + +% %%%%% ----- Colour Definitions ------ %%%%% +\RequirePackage{xcolor} + +% Define the MCI colours. +\definecolor{mciRed}{HTML}{821131} +\definecolor{mciBlue}{HTML}{004983} +\definecolor{mciOrange}{HTML}{fe640b} +\definecolor{quoteColour}{HTML}{CBA6F7} +\definecolor{nord7}{HTML}{81a1c1} +\definecolor{norda}{HTML}{bf616a} +\definecolor{nord9}{HTML}{5e81ac} +\definecolor{nord13}{HTML}{ebcb8b} +\definecolor{nord14}{HTML}{a3be8c} + +% %%%%% ----- Code Presentation ----- %%%%% +% To make this class more compatible and avoid questions about pygments, +% the author has decided to use listings for code presentation, instead of +% minted. +\RequirePackage{listings} + +\lstset{ + aboveskip={1.3\baselineskip}, + basicstyle=\small\ttfamily\linespread{4}, + breaklines=false, + backgroundcolor = \color[HTML]{eff1f5}, + columns=flexible, + commentstyle=\color[HTML]{6c6f85}\ttfamily, + escapechar=@, + extendedchars=true, + identifierstyle=\color{black}, + inputencoding=latin1, + keywordstyle=\color[HTML]{fe640b}, + language=Python, + ndkeywordstyle=\color[HTML]{228B22}, + numbers=left, + numberstyle=\tiny, + prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}, + showstringspaces=false, + stringstyle=\color[HTML]{40a02b}\ttfamily, + upquote=true, + emph={None}, + emphstyle={\color[HTML]{FE640B}}, + % keywordstyle=[1]{\color[HTML]{8839ef}}, + % morekeywords={(,)}, + keywordstyle=[2]\color[HTML]{D20F39}, + keywordstyle={[3]\color[HTML]{8839ef}}, + keywords=[3]{x}, +} + +% \lstset{style=mystyle} + +% New Environment Definitions --------------------------------------------- +% To create environments tcolorbox package is required to make them +% aesthetically pleasing. +\RequirePackage{tcolorbox} +\tcbuselibrary{breakable, minted, skins,theorems, hooks, most} + +% %%%%% ----- tcolorbox Templates ----- %%%%% + +% Define the excerpt environment style. +\tcbset{% + quoteTemplate/.style={% + enhanced, + breakable, + arc=0pt, + outer arc=0pt, + toprule=0pt, + rightrule=0pt, + bottomrule=0pt, + leftrule=1mm, + colback=white, + colframe=mciRed, + detach title + }% +}% + +\tcbset{% + blockTemplate/.style={% + enhanced, + breakable, + arc=0pt, + outer arc=0pt, + toprule=0pt, + rightrule=0pt, + bottomrule=0pt, + leftrule=1mm, + colback=#1!25, + colframe=#1, + coltitle=black, + detach title + }% +}% + +% %%%%% --------------------------------%%%%% + +% Environment used to insert quotations. +\NewEnviron{excerpt}[1][]{% + \begin{tcolorbox}[blockTemplate=nord7] + \BODY + \end{tcolorbox} +}% + +\NewEnviron{example}[1][]{% + \begin{tcolorbox}[blockTemplate=nord14] + \BODY + \end{tcolorbox} +}% + +\NewEnviron{highlight}[1][]{% + \begin{tcolorbox}[blockTemplate=nord13] + \BODY + \end{tcolorbox} +}% + +\NewEnviron{theory}[1][]{% + \begin{tcolorbox}[blockTemplate=black] + \BODY + \end{tcolorbox} +}% + +\NewEnviron{warning}[1][]{% + \begin{tcolorbox}[blockTemplate=norda] + \BODY + \end{tcolorbox} +}% + +\NewEnviron{hgitemize}[1][]{% + \begin{itemize}[leftmargin=!,labelindent=-29.2pt] + \BODY + \end{itemize} +}% + + + + + +% KOMA-Script Configuration ----------------------------------------------- + +\addtokomafont{chapterprefix}{\raggedleft} +\addtokomafont{chapter}{\fontsize{30}{38}\selectfont} +\addtokomafont{section}{\huge} +\addtokomafont{subsection}{\Large} +\addtokomafont{subsubsection}{\large} + +% Set the fontstyle of minitoc to that of the document +\renewcommand{\mtifont}{\large\sffamily} +\renewcommand{\mtcfont}{\small\sffamily} +\renewcommand{\mtcSfont}{\small\sffamily} +\renewcommand{\mtcSSfont}{\small\sffamily} +\renewcommand{\mtcSSSfont}{\small\sffamily} + +\newcommand{\StudentName}[1]{\author{#1}} + +% Set the depth of TOC +\setcounter{secnumdepth}{3} % number subsubsections +\setcounter{tocdepth}{3} % list subsubsections + +% Configure the document titles +\newcommand{\Chapter}[1]{\chapter{\textcolor{mciBlue}{#1}}\minitoc} +\newcommand{\Section}[1]{\section{\textcolor{mciBlue}{#1}}} +\newcommand{\Subsection}[1]{\subsection{\textcolor{mciBlue}{#1}}} +\newcommand{\Subsubsection}[1]{\subsubsection{\textcolor{mciBlue}{#1}}} + +\newcommand{\hlight}[1]{\textcolor{mciOrange}{#1}} + + +% Configure the baseline of the document +\renewcommand{\baselinestretch}{1.2} + +\renewcommand*{\chapterformat}{% + \mbox{\scalebox{1.5}{\chapappifchapterprefix{\nobreakspace}}% + \scalebox{4}{\color{mciRed}\thechapter\autodot}\enskip}} + +\newcommand{\heading}[1]{\subsubsection*{$\blacksquare$ #1}} +\newcommand{\marginsecnumber}[1]{% + \makebox[0pt][r]{#1\hspace{6pt}}% +} + +\titleformat{\section} {\normalfont\Large\bfseries} +{\marginsecnumber\thesection} {0pt} {} +\titleformat{\subsection} {\normalfont\large\bfseries} +{\marginsecnumber\thesubsection} {0pt} {} +\titleformat{\subsubsection} +{\normalfont\normalsize\bfseries} +{\marginsecnumber\thesubsubsection} +{0pt} {} +\titleformat{\paragraph}[runin] +{\normalfont\normalsize\bfseries} +{\marginsecnumber\theparagraph} +{0pt} {} +\titleformat{\subparagraph}[runin] +{\normalfont\normalsize\bfseries} +{\marginsecnumber\thesubparagraph} +{0pt} +{} + +\titlespacing*{\subsection}{0pt}{*3.25}{*1.5}% + +\setlength\parindent{0pt} % set no indent for the entire file + +\ifthenelse{\boolean{mnt}}{% + \RequirePackage{minted} + + \newcommand{\pcode}[1]{% + {% + \colorbox{gray!10}{% + \mintinline[fontsize=\small]{text}{#1}% + }% + }% + }% + + %\usemintedstyle{catppuccin-latte} + + \definecolor{catback}{HTML}{585b70} + \definecolor{catground}{HTML}{eff1f5} + + % Set box and font rules for inputminted command for paper + \newtcbinputlisting{\codeinputpaper}[4][]{% + listing file={#3}, + minted language=#2, + minted options={ + fontsize=\small, + tabsize=4, + xleftmargin=-2.25mm, + numbersep=5mm, + breaklines=true, + highlightcolor=orange!50, + %formatcom=orange!50 + },% <-- put other minted options inside the brackets + overlay unbroken and first={% + \begin{tcbclipinterior} + \fill[catback] (frame.south west) rectangle + ([xshift=1mm]frame.north west); + \fill[catback] (frame.north east) rectangle + ([xshift=-4mm, yshift=-10mm]frame.north east); + \fill[catback] + ([xshift=-4mm, yshift=-10mm]frame.north east) -- + ([xshift=0mm, yshift=-10mm]frame.north east) -- + ([xshift=0mm, yshift=-12mm]frame.north east); + \end{tcbclipinterior} + \node[rotate=-90, minimum width=1cm, anchor=north, + font=\bfseries] at ([xshift=0mm, yshift=-4mm]frame.north + east) {\tiny \textcolor{white}{#2}}; }, + sharp corners, + leftrule=1mm, + toprule=0pt, + rightrule=0pt, + bottomrule=0pt, + colback=catground, + colframe=black, + breakable, + enhanced,% <-- put other tcolorbox options here + arc=0mm, + boxrule=0pt, + frame hidden, + listing only, + minted options app={#1}} + + \RequirePackage{xpatch} + + \newenvironment{code}[1] + {% + \VerbatimEnvironment + \begin{minted}{#1}% +} +{% + \end{minted}% + } + % + \xpatchcmd{\mintinline}{\begingroup}{\begingroup\let\itshape\relax}{}{} + \xpatchcmd{\minted}{\VerbatimEnvironment}{\VerbatimEnvironment\let\itshape\relax}{}{} + \xpatchcmd{\inputminted}{\begingroup}{\begingroup\let\itshape\relax}{}{} +}{} + +\ifthenelse{\boolean{lst}}{% + \RequirePackage{listings}% + \RequirePackage{xparse} + + \NewDocumentCommand{\pcode}{v}{% + #1% + } + + \newenvironment{code}[1] + {% + \VerbatimEnvironment + \begin{lstlisting}{language=#1}% +} +{% + \end{lstlisting}% + } +}{} + + +\ifthenelse{\boolean{drw}}{% + \RequirePackage{pgfplots} % Enable to draw plots in the documents + \usepackage{tikz} % Enable Tikz and its libraries + \pgfplotsset{compat=1.18} % Set the pgf compatibility. + % + \usepgfplotslibrary{polar} % To access polarplot + % + \pgfplotsset{ + hebdomon/.style={ + minor grid style={dotted, gray!50}, + major grid style={dotted, gray!50}, + % + grid = both, + minor tick num=2, + ytick align=outside, + xtick align=outside, + axis line style={draw=none}, + axis lines = left, + % + line width=2pt, + % + legend style = { + line width=0.5pt + }, + % + every non boxed x axis/.append style={x axis line style=-}, + every non boxed y axis/.append style={y axis line style=-}, + % + }, + } +}{} + + +\endinput diff --git a/macros/latex/contrib/heria/heria-proposal.pdf b/macros/latex/contrib/heria/heria-proposal.pdf Binary files differindex 60d99c6dab..79892c24d2 100644 --- a/macros/latex/contrib/heria/heria-proposal.pdf +++ b/macros/latex/contrib/heria/heria-proposal.pdf diff --git a/macros/latex/contrib/heria/heria.dtx b/macros/latex/contrib/heria/heria.dtx index 60cc0162f1..7da06a879d 100644 --- a/macros/latex/contrib/heria/heria.dtx +++ b/macros/latex/contrib/heria/heria.dtx @@ -33,7 +33,7 @@ %<class>\NeedsTeXFormat{LaTeX2e} %<class>\ProvidesClass{heria} %<*class> -[2024-07-14 v3.4.1.0 Class for Horizon Europe (R)IA proposals] +[2024-08-14 v3.4.1.1 Class for Horizon Europe (R)IA proposals] %</class> % %<*driver> @@ -109,6 +109,23 @@ % either Version~3.2 (2022-11-15), 3.3 (2023-09-27), or 3.4 % (2024-04-04) of the official Part~B template. % +% \bigskip +% +% \noindent Besides this technical manual, there is a journal article +% that describes the motivation for and development of \textsf{heria}: +% +% \begin{quote} +% Tristan +% Miller. \href{https://dx.doi.org/10.47397/tb/45-1/tb139miller-horizon}{Preparing +% Horizon Europe proposals in \LaTeX\ with +% \textsf{heria}}. \emph{TUGboat: The Communications of the \TeX\ +% Users Group}, 45(1):\allowbreak 59–64, 2024. ISSN 0896-3207. DOI: +% \href{https://dx.doi.org/10.47397/tb/45-1/tb139miller-horizon}{10.47397/tb/45-1/tb139miller-horizon}. +% \end{quote} +% +% \noindent Please cite this journal article if you want to refer to +% \textsf{heria} in a publication. +% % \section{Usage} % % The EC's official template is structured in such a way that form and @@ -509,6 +526,8 @@ % \subsection{Version history} % % \begin{description} +% \item[v3.4.1.1 (2024-08-14)] Update documentation with a reference +% to the \emph{TUGboat} paper on \textsf{heria}. % \item[v3.4.1.0 (2024-07-14)] Add support for version 3.4 of the % official Part~B template and the \cs{templateversion} macro for % backward compatibility with earlier versions. diff --git a/macros/latex/contrib/heria/heria.pdf b/macros/latex/contrib/heria/heria.pdf Binary files differindex 71b47d5ed5..3295f000a9 100644 --- a/macros/latex/contrib/heria/heria.pdf +++ b/macros/latex/contrib/heria/heria.pdf diff --git a/macros/latex/contrib/hypcap/README.md b/macros/latex/contrib/hypcap/README.md new file mode 100644 index 0000000000..07580bcb3f --- /dev/null +++ b/macros/latex/contrib/hypcap/README.md @@ -0,0 +1,20 @@ +# hypcap package for LaTeX + +* adjusting anchors of captions; + +Version: 2024-07-26 v1.13 + +This package tries a solution of the problem with +hyperref, that links to floats points below the +caption and not at the beginning of the float. +Therefore this package divides the task into two +part, the link setting with `\capstart` or +automatically at the beginning of a float and +the rest in the `\caption` command. + +## Copyright (C) +* 1999-2001, 2006-2008, 2011 Heiko Oberdiek +* 2016-2024 Oberdiek Package Support Group + +## License +LATEX Project Public License, version 1.3c or later. diff --git a/macros/latex/contrib/oberdiek/hypcap.dtx b/macros/latex/contrib/hypcap/hypcap.dtx index a9bb106fe3..ef7538e91e 100644 --- a/macros/latex/contrib/oberdiek/hypcap.dtx +++ b/macros/latex/contrib/hypcap/hypcap.dtx @@ -1,13 +1,13 @@ % \iffalse meta-comment % % File: hypcap.dtx -% Version: 2016/05/16 v1.12 +% Version: 2024-07-26 v1.13 % Info: Adjusting the anchors of captions % % Copyright (C) % 1999-2001, 2006-2008, 2011 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues +% 2016-2024 Oberdiek Package Support Group +% https://github.com/ho-tex/hypcap/issues % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either @@ -23,15 +23,15 @@ % % The Current Maintainers of this work are % Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues +% https://github.com/ho-tex/hypcap/issues % % This work consists of the main source file hypcap.dtx % and the derived files % hypcap.sty, hypcap.pdf, hypcap.ins, hypcap.drv. % % Distribution: -% CTAN:macros/latex/contrib/oberdiek/hypcap.dtx -% CTAN:macros/latex/contrib/oberdiek/hypcap.pdf +% CTAN:macros/latex/contrib/hypcap/hypcap.dtx +% CTAN:macros/latex/contrib/hypcap/hypcap.pdf % % Unpacking: % (a) If hypcap.ins is present: @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex hypcap.dtx % makeindex -s gind.ist hypcap.idx % pdflatex hypcap.dtx @@ -60,9 +60,9 @@ % pdflatex hypcap.dtx % % Installation: -% TDS:tex/latex/oberdiek/hypcap.sty -% TDS:doc/latex/oberdiek/hypcap.pdf -% TDS:source/latex/oberdiek/hypcap.dtx +% TDS:tex/latex/hypcap/hypcap.sty +% TDS:doc/latex/hypcap/hypcap.pdf +% TDS:source/latex/hypcap/hypcap.dtx % %<*ignore> \begingroup @@ -79,7 +79,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: hypcap 2016/05/16 v1.12 Adjusting the anchors of captions (HO)} +\Msg{* Package: hypcap 2024-07-26 v1.13 Adjusting the anchors of captions (HO)} \Msg{************************************************************************} \keepsilent @@ -91,11 +91,11 @@ This is a generated file. Project: hypcap -Version: 2016/05/16 v1.12 +Version: 2024-07-26 v1.13 Copyright (C) 1999-2001, 2006-2008, 2011 Heiko Oberdiek - 2016-2019 Oberdiek Package Support Group + 2016-2024 Oberdiek Package Support Group This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either @@ -111,7 +111,7 @@ This work has the LPPL maintenance status "maintained". The Current Maintainers of this work are Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues +https://github.com/ho-tex/hypcap/issues This work consists of the main source file hypcap.dtx @@ -124,7 +124,7 @@ and the derived files \generate{% \file{hypcap.ins}{\from{hypcap.dtx}{install}}% \file{hypcap.drv}{\from{hypcap.dtx}{driver}}% - \usedir{tex/latex/oberdiek}% + \usedir{tex/latex/hypcap}% \file{hypcap.sty}{\from{hypcap.dtx}{package}}% } @@ -152,7 +152,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{hypcap.drv}% - [2016/05/16 v1.12 Adjusting the anchors of captions (HO)]% + [2024-07-26 v1.13 Adjusting the anchors of captions (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2011/11/22] \begin{document} @@ -166,9 +166,9 @@ and the derived files % \GetFileInfo{hypcap.drv} % % \title{The \xpackage{hypcap} package} -% \date{2016/05/16 v1.12} +% \date{2024-07-26 v1.13} % \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} +% {Please report any issues at \url{https://github.com/ho-tex/hypcap/issues}}} % % \maketitle % @@ -301,7 +301,7 @@ and the derived files % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{hypcap}% - [2016/05/16 v1.12 Adjusting the anchors of captions (HO)] + [2024-07-26 v1.13 Adjusting the anchors of captions (HO)] % \end{macrocode} % % For unique command names this package uses |hc@| as prefix @@ -461,7 +461,7 @@ and the derived files \capstart }{% \if@capstart - \PackageError{hypcap}{You have forgotten to use \string\caption}% + \PackageWarning{hypcap}{You have forgotten to use \string\caption}% \global\@capstartfalse \else \fi @@ -497,31 +497,11 @@ and the derived files % \paragraph{Package.} This package is available on % CTAN\footnote{\CTANpkg{hypcap}}: % \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/hypcap.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/hypcap.pdf}] Documentation. +% \item[\CTAN{macros/latex/contrib/hypcap/hypcap.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/hypcap/hypcap.pdf}] Documentation. % \end{description} % % -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% % \subsection{Package installation} % % \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting @@ -537,9 +517,9 @@ and the derived files % \begin{quote} % \def\t{^^A % \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% hypcap.sty & tex/latex/oberdiek/hypcap.sty\\ -% hypcap.pdf & doc/latex/oberdiek/hypcap.pdf\\ -% hypcap.dtx & source/latex/oberdiek/hypcap.dtx\\ +% hypcap.sty & tex/latex/hypcap/hypcap.sty\\ +% hypcap.pdf & doc/latex/hypcap/hypcap.pdf\\ +% hypcap.dtx & source/latex/hypcap/hypcap.dtx\\ % \end{tabular}^^A % }^^A % \sbox0{\t}^^A @@ -718,6 +698,9 @@ and the derived files % \item % Documentation updates. % \end{Version} +% \begin{Version}{2024-07-26 v1.13} +% \item Change error into warning, issue \#1 +% \end{Version} % \end{History} % % \PrintIndex diff --git a/macros/latex/contrib/oberdiek/hypcap.pdf b/macros/latex/contrib/hypcap/hypcap.pdf Binary files differindex 46df7e8951..bea211492f 100644 --- a/macros/latex/contrib/oberdiek/hypcap.pdf +++ b/macros/latex/contrib/hypcap/hypcap.pdf diff --git a/macros/latex/contrib/hypdestopt/README.md b/macros/latex/contrib/hypdestopt/README.md index 0610b53e58..71e1c7066e 100644 --- a/macros/latex/contrib/hypdestopt/README.md +++ b/macros/latex/contrib/hypdestopt/README.md @@ -1,6 +1,6 @@ # hypdestopt package for LaTeX -Version: 2020-09-02 v2.7 +Version: 2024-08-07 v2.8 Hyperref destination optimizer @@ -11,7 +11,7 @@ to get smaller PDF files. ## Copyright (C) * 2007, 2009-2011 Heiko Oberdiek -* 2016-2020 Oberdiek Package Support Group +* 2016-2024 Oberdiek Package Support Group ## License LATEX Project Public License, version 1.3c or later. diff --git a/macros/latex/contrib/hypdestopt/hypdestopt.dtx b/macros/latex/contrib/hypdestopt/hypdestopt.dtx index 03006db27b..f9c6af1e6d 100644 --- a/macros/latex/contrib/hypdestopt/hypdestopt.dtx +++ b/macros/latex/contrib/hypdestopt/hypdestopt.dtx @@ -1,12 +1,12 @@ % \iffalse meta-comment % % File: hypdestopt.dtx -% Version: 2020-09-02 v2.7 +% Version: 2024-08-07 v2.8 % Info: Hyperref destination optimizer % % Copyright (C) % 2006-2008, 2011 Heiko Oberdiek -% 2016-2020 Oberdiek Package Support Group +% 2016-2024 Oberdiek Package Support Group % https://github.com/ho-tex/hypdestopt/issues % % This work may be distributed and/or modified under the @@ -79,7 +79,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: hypdestopt 2020-09-02 v2.7 Hyperref destination optimizer (HO)} +\Msg{* Package: hypdestopt 2024-08-07 v2.8 Hyperref destination optimizer (HO)} \Msg{************************************************************************} \keepsilent @@ -91,11 +91,11 @@ This is a generated file. Project: hypdestopt -Version: 2020-09-02 v2.7 +Version: 2024-08-07 v2.8 Copyright (C) 2006-2008, 2011 Heiko Oberdiek - 2016-2020 Oberdiek Package Support Group + 2016-2024 Oberdiek Package Support Group This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either @@ -152,7 +152,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{hypdestopt.drv}% - [2020-09-02 v2.7 Hyperref destination optimizer (HO)]% + [2024-08-07 v2.8 Hyperref destination optimizer (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2011/11/22] \begin{document} @@ -166,7 +166,7 @@ and the derived files % \GetFileInfo{hypdestopt.drv} % % \title{The \xpackage{hypdestopt} package} -% \date{2020-09-02 v2.7} +% \date{2024-08-07 v2.8} % \author{Heiko Oberdiek\thanks % {Please report any issues at \url{https://github.com/ho-tex/hypdestopt/issues}}} % @@ -177,6 +177,9 @@ and the derived files % \xoption{pdftex} and \xoption{luatex} driver. It removes unnecessary destinations % and shortens the destination names or uses numbered destinations % to get smaller PDF files. +% +% The package is not compatible with the \LaTeX{} PDFmanagement loaded with +% \cs{DocumentMetadata} and will do nothing if it detects it. % \end{abstract} % % \tableofcontents @@ -289,9 +292,24 @@ and the derived files %<*package> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{hypdestopt}% - [2020-09-02 v2.7 Hyperref destination optimizer (HO)]% + [2024-08-07 v2.8 Hyperref destination optimizer (HO)]% % \end{macrocode} % +% \subsection{Check for PDF management} +% \begin{macrocode} +\IfDocumentMetadataTF + { + \PackageWarning{hypdestopt} + { + \string\DocumentMetadata detected. \MessageBreak + The package will do nothing. + }{} + }{} +\IfDocumentMetadataTF + { + \endinput + }{} +% \end{macrocode} % \subsection{Options} % % \subsubsection{Option \xoption{verbose}} @@ -752,26 +770,6 @@ and the derived files % \end{description} % % -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% % \subsection{Package installation} % % \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting @@ -956,6 +954,9 @@ and the derived files % \begin{Version}{2020-09-02 v2.7} % \item Adapted to the new hook management of LaTeX (github issue 1) % \end{Version} +% \begin{Version}{2024-08-07 v2.8} +% \item Disable the package if \cs{DocumentMetadata} is detected (github issue 2) +% \end{Version} % \end{History} % % \PrintIndex diff --git a/macros/latex/contrib/hypdestopt/hypdestopt.pdf b/macros/latex/contrib/hypdestopt/hypdestopt.pdf Binary files differindex 1835545dc8..1ca7cc4c29 100644 --- a/macros/latex/contrib/hypdestopt/hypdestopt.pdf +++ b/macros/latex/contrib/hypdestopt/hypdestopt.pdf diff --git a/macros/latex/contrib/iwonamath/Makefile b/macros/latex/contrib/iwonamath/Makefile index 5b8322bf33..fcac414a15 100644 --- a/macros/latex/contrib/iwonamath/Makefile +++ b/macros/latex/contrib/iwonamath/Makefile @@ -48,6 +48,7 @@ all: ${PDF} $(PACKAGE).sty $(FD) pdflatex $< - bibtex $* pdflatex $< + pdflatex $< while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \ do pdflatex $<; done @@ -64,7 +65,8 @@ clean: *.ilg *.ind *.out *.lof \ *.lot *.bbl *.blg *.gls \ *.dvi *.ps *.thm *.tgz *.zip *.rpi \ - *.hd sample-blx.bib + *.hd sample-blx.bib \ + omsiwonamathcmsy.fd *.sty distclean: clean @@ -75,7 +77,7 @@ distclean: clean # archive: all clean COPYFILE_DISABLE=1 \ - tar -C .. -czvf ../$(PACKAGE).tgz --exclude '*~' \ + tar -C .. -czvf ../$(PACKAGE).tgz --exclude '*~' --exclude LICENSE \ --exclude '*.tgz' --exclude '*.zip' --exclude .git $(PACKAGE) mv ../$(PACKAGE).tgz . diff --git a/macros/latex/contrib/iwonamath/README b/macros/latex/contrib/iwonamath/README index 72fe9e3508..8bf59e86c3 100644 --- a/macros/latex/contrib/iwonamath/README +++ b/macros/latex/contrib/iwonamath/README @@ -2,4 +2,9 @@ This package provides an interface to Iwona math fonts by Janusz Marian Nowacki. It allows to use Iwona as math complement for sans serif fonts without native math. The package allows font scaling, the choice of light and condensed versions and the creation of multiple -math versions.
\ No newline at end of file +math versions. + +Author: Boris Veytsman, borisv@lk.net, boris@varphi.com +License: LPPL 1.3c, https://www.latex-project.org/lppl/lppl-1-3c/ + +Version 1.1: Improved delimitershack as suggested by Enrico Gregorio.
\ No newline at end of file diff --git a/macros/latex/contrib/iwonamath/iwonamath.dtx b/macros/latex/contrib/iwonamath/iwonamath.dtx index 020c8d6ad0..38aebd666a 100644 --- a/macros/latex/contrib/iwonamath/iwonamath.dtx +++ b/macros/latex/contrib/iwonamath/iwonamath.dtx @@ -141,7 +141,7 @@ %<oms>{oms_FAMILY_.fd} %<omx>{omx_FAMILY_.fd} %<cmsy>{omsiwonamathcmsy.fd} -%<package|fd>{2023-08-31} {1.0} +%<package|fd>{2024-07-19} {1.1} %<package|fd>{Scaled Iwona math fonts} %<*package> % \end{macrocode} @@ -233,7 +233,8 @@ % % We add delimiters from |cmsy|, as discussed in % \citep[\S~12.5.5]{TLC3}). We predefine the symbols for the standard -% versions just in case. +% versions just in case. The last line is suggested by Enrico +% Gregorio. % \begin{macrocode} \bool_if:NTF \l_@@_delimitershack_bool { @@ -241,6 +242,7 @@ \SetSymbolFont{symbols2} {bold}{OMS}{cmsy}{b}{n} \DeclareMathDelimiter{\lVert}{\mathopen} {symbols2}{"6B}{largesymbols}{"0D} \DeclareMathDelimiter{\rVert}{\mathclose}{symbols2}{"6B}{largesymbols}{"0D} + \DeclareMathDelimiter{\|}{\mathclose}{symbols2}{"6B}{largesymbols}{"0D} } {} % \end{macrocode} diff --git a/macros/latex/contrib/iwonamath/iwonamath.pdf b/macros/latex/contrib/iwonamath/iwonamath.pdf Binary files differindex fc0b5e6e2c..e80a3e33d0 100644 --- a/macros/latex/contrib/iwonamath/iwonamath.pdf +++ b/macros/latex/contrib/iwonamath/iwonamath.pdf diff --git a/macros/latex/contrib/iwonamath/omliwonamath.fd b/macros/latex/contrib/iwonamath/omliwonamath.fd index eca19657e2..869b63021f 100644 --- a/macros/latex/contrib/iwonamath/omliwonamath.fd +++ b/macros/latex/contrib/iwonamath/omliwonamath.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omliwonamath.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omliwonamathc.fd b/macros/latex/contrib/iwonamath/omliwonamathc.fd index 452341075f..567abb4d8c 100644 --- a/macros/latex/contrib/iwonamath/omliwonamathc.fd +++ b/macros/latex/contrib/iwonamath/omliwonamathc.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omliwonamathc.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omliwonamathl.fd b/macros/latex/contrib/iwonamath/omliwonamathl.fd index a0dba2a829..c52bb24dcf 100644 --- a/macros/latex/contrib/iwonamath/omliwonamathl.fd +++ b/macros/latex/contrib/iwonamath/omliwonamathl.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omliwonamathl.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omliwonamathlc.fd b/macros/latex/contrib/iwonamath/omliwonamathlc.fd index 90d147d1ee..ebfaea2b69 100644 --- a/macros/latex/contrib/iwonamath/omliwonamathlc.fd +++ b/macros/latex/contrib/iwonamath/omliwonamathlc.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omliwonamathlc.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omsiwonamath.fd b/macros/latex/contrib/iwonamath/omsiwonamath.fd index 958053cd49..7a0c889c7d 100644 --- a/macros/latex/contrib/iwonamath/omsiwonamath.fd +++ b/macros/latex/contrib/iwonamath/omsiwonamath.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omsiwonamath.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omsiwonamathc.fd b/macros/latex/contrib/iwonamath/omsiwonamathc.fd index 02b892ffc5..22c1755011 100644 --- a/macros/latex/contrib/iwonamath/omsiwonamathc.fd +++ b/macros/latex/contrib/iwonamath/omsiwonamathc.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omsiwonamathc.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omsiwonamathl.fd b/macros/latex/contrib/iwonamath/omsiwonamathl.fd index d291ba7eb0..3e0815ef80 100644 --- a/macros/latex/contrib/iwonamath/omsiwonamathl.fd +++ b/macros/latex/contrib/iwonamath/omsiwonamathl.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omsiwonamathl.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omsiwonamathlc.fd b/macros/latex/contrib/iwonamath/omsiwonamathlc.fd index 55a040e93e..8cdb0f6503 100644 --- a/macros/latex/contrib/iwonamath/omsiwonamathlc.fd +++ b/macros/latex/contrib/iwonamath/omsiwonamathlc.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omsiwonamathlc.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omxiwonamath.fd b/macros/latex/contrib/iwonamath/omxiwonamath.fd index 662121a6be..8b33fd85b9 100644 --- a/macros/latex/contrib/iwonamath/omxiwonamath.fd +++ b/macros/latex/contrib/iwonamath/omxiwonamath.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omxiwonamath.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omxiwonamathc.fd b/macros/latex/contrib/iwonamath/omxiwonamathc.fd index fce676f1e8..9738a6961d 100644 --- a/macros/latex/contrib/iwonamath/omxiwonamathc.fd +++ b/macros/latex/contrib/iwonamath/omxiwonamathc.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omxiwonamathc.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omxiwonamathl.fd b/macros/latex/contrib/iwonamath/omxiwonamathl.fd index 895f359e35..759ecad381 100644 --- a/macros/latex/contrib/iwonamath/omxiwonamathl.fd +++ b/macros/latex/contrib/iwonamath/omxiwonamathl.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omxiwonamathl.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/omxiwonamathlc.fd b/macros/latex/contrib/iwonamath/omxiwonamathlc.fd index 85f60415e3..fbe5cdc48c 100644 --- a/macros/latex/contrib/iwonamath/omxiwonamathlc.fd +++ b/macros/latex/contrib/iwonamath/omxiwonamathlc.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {omxiwonamathlc.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/ot1iwonamath.fd b/macros/latex/contrib/iwonamath/ot1iwonamath.fd index 20be53c3af..789656bfa7 100644 --- a/macros/latex/contrib/iwonamath/ot1iwonamath.fd +++ b/macros/latex/contrib/iwonamath/ot1iwonamath.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {ot1iwonamath.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathc.fd b/macros/latex/contrib/iwonamath/ot1iwonamathc.fd index a0b92a2b37..182d34be2f 100644 --- a/macros/latex/contrib/iwonamath/ot1iwonamathc.fd +++ b/macros/latex/contrib/iwonamath/ot1iwonamathc.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {ot1iwonamathc.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd index a5e69e07ad..4f49f9befb 100644 --- a/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd +++ b/macros/latex/contrib/iwonamath/ot1iwonamathcm.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {ot1iwonamathcm.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathl.fd b/macros/latex/contrib/iwonamath/ot1iwonamathl.fd index 82060b21d1..504e9c87ad 100644 --- a/macros/latex/contrib/iwonamath/ot1iwonamathl.fd +++ b/macros/latex/contrib/iwonamath/ot1iwonamathl.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {ot1iwonamathl.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd b/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd index c5b2f0024b..5ad18477c7 100644 --- a/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd +++ b/macros/latex/contrib/iwonamath/ot1iwonamathlc.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {ot1iwonamathlc.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd index 130c63822e..c1b3f9bb44 100644 --- a/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd +++ b/macros/latex/contrib/iwonamath/ot1iwonamathlcm.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {ot1iwonamathlcm.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd index ab72419cd8..f15d880adc 100644 --- a/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd +++ b/macros/latex/contrib/iwonamath/ot1iwonamathlm.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {ot1iwonamathlm.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/ot1iwonamathm.fd b/macros/latex/contrib/iwonamath/ot1iwonamathm.fd index 7a103a029b..9f82d65734 100644 --- a/macros/latex/contrib/iwonamath/ot1iwonamathm.fd +++ b/macros/latex/contrib/iwonamath/ot1iwonamathm.fd @@ -22,7 +22,7 @@ %% in the same archive or directory.) \ProvidesExplFile {ot1iwonamathm.fd} -{2023-08-31} {1.0} +{2024-07-19} {1.1} {Scaled Iwona math fonts} \tl_if_exist:NTF \l__iwonamath_scale_tl {} diff --git a/macros/latex/contrib/iwonamath/sample.pdf b/macros/latex/contrib/iwonamath/sample.pdf Binary files differindex c64d5e078d..342ba53f87 100644 --- a/macros/latex/contrib/iwonamath/sample.pdf +++ b/macros/latex/contrib/iwonamath/sample.pdf diff --git a/macros/latex/contrib/jsonparse/README.md b/macros/latex/contrib/jsonparse/README.md index 69258570db..c4df9ad419 100644 --- a/macros/latex/contrib/jsonparse/README.md +++ b/macros/latex/contrib/jsonparse/README.md @@ -1,6 +1,6 @@ -![Version 0.8.3](https://img.shields.io/badge/version-0.8.3-blue) +![Version 0.8.7](https://img.shields.io/badge/version-0.8.7-blue) -![Jason, the JSON parsing horse](https://github.com/jasperhabicht/jsonparse/assets/6378801/d6abde3a-fa12-4b63-a213-ad8332e32199) +![Jason, the JSON parsing horse](https://github.com/jasperhabicht/jsonparse/assets/6378801/ddfddc70-bf5f-4121-ba45-4b9128875d85) # The `jsonparse` package @@ -46,5 +46,5 @@ We can store it in the token variable `\myJSONdata` using the command `\JSONPars This package including all files is subject to the LPPL 1.3c license. Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de). -Jason, the JSON parseing horse: Copyright 2024 Hannah Klöber. +Jason, the JSON parsing horse: Copyright 2024 Hannah Klöber. diff --git a/macros/latex/contrib/jsonparse/jason/jason.pdf b/macros/latex/contrib/jsonparse/jason/jason.pdf Binary files differindex 324458e684..44ff3db133 100644 --- a/macros/latex/contrib/jsonparse/jason/jason.pdf +++ b/macros/latex/contrib/jsonparse/jason/jason.pdf diff --git a/macros/latex/contrib/jsonparse/jason/jason.svg b/macros/latex/contrib/jsonparse/jason/jason.svg index fe8793dfa8..aff567e175 100644 --- a/macros/latex/contrib/jsonparse/jason/jason.svg +++ b/macros/latex/contrib/jsonparse/jason/jason.svg @@ -1,67 +1,25 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - width="250px" height="250px" viewBox="0 0 450 450" enable-background="new 0 0 449.5 435" xml:space="preserve"> -<circle fill="#3FA9F5" cx="239" cy="226" r="206.166"/> -<g> - <defs> - <circle id="SVGID_1_" cx="239" cy="226" r="206.166"/> - </defs> - <clipPath id="SVGID_2_"> - <use xlink:href="#SVGID_1_" overflow="visible"/> - </clipPath> - <path clip-path="url(#SVGID_2_)" fill="#C69C6D" d="M418.334,389.667c0,0-10.334-12.333-36-86.667S344,189.333,333.667,163 - c-5.552-14.149-12.545-22.326-17.83-26.869c7.769-5.957,15.778-13.185,19.83-20.131c6.902-11.834,11.667-24.5,15.667-38.5 - C353.731,69.108,361,63.333,361,63.333s-55-13-78.666,29.5c-1.534,2.754-3.036,5.383-4.538,7.892l-125.587,25.33 - C141.705,137.165,130.648,151.436,126,166c-4.127,12.93-11.333,16-26.333,28s-47.398,43.774-47.398,43.774l12.106,48.851 - l56.113,69.247c13.436-9.009,28.206-20.065,46.512-27.122c13.874-5.348,33.133-8.479,51.113-12.082 - c2.555,6.323,8.828,23.014,11.387,40.332c3.25,22,4.5,91.5,4.5,91.5L418.334,389.667z"/> - <path clip-path="url(#SVGID_2_)" fill="#F7931E" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M465.5,307.334 - c0,0-9.667-14.833-21.667-21c-11.409-5.863-24.5-7.167-24.5-7.167s2.853-11.646,11.167-22.833C439.667,244,456,233.667,456,233.667 - l-51.499-17.5c0,0,17.166-6.5,25.166-13.833c9.095-8.336,13.333-30,13.333-30s-47.621,2.806-54.333-15.167 - C383.501,143.333,402.001,114,402.001,114s-27.334-6.333-41.167-6.167c-7.572,0.091-15.827,0.876-22.104,2.556 - c-0.978,1.889-1.986,3.764-3.063,5.611c-4.052,6.946-12.062,14.174-19.83,20.131c5.285,4.543,12.278,12.72,17.83,26.869 - c10.333,26.333,23.001,65.666,48.667,140s36,86.667,36,86.667l32.5-36.5c-15.167-3-22.334-20.5-22.334-20.5L465.5,307.334z"/> - <path clip-path="url(#SVGID_2_)" fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M234,448.5 - c0,0-1.25-69.5-4.5-91.5c-2.559-17.318-8.832-34.009-11.387-40.332c-0.185,0.037-0.369,0.074-0.554,0.111"/> +<?xml version='1.0' encoding='UTF-8'?> +<!-- This file was generated by dvisvgm 3.2.2 --> +<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width="250px" height="250px" viewBox='-70.503905 -70.50391 452.105105 441.67801'> +<defs> +<clipPath id='clip'> +<path d='M361.3402 148.0117C361.3402 261.4457 269.3832 353.4067 155.9452 353.4067C42.5082 353.4067-49.4531 261.4457-49.4531 148.0117C-49.4531 34.5747 42.5082-57.3867 155.9452-57.3867C269.3832-57.3867 361.3402 34.5747 361.3402 148.0117Z'/> +</clipPath> +</defs> +<g id='page1'> +<path d='M361.3402 148.0117C361.3402 261.4457 269.3832 353.4067 155.9452 353.4067C42.5082 353.4067-49.4531 261.4457-49.4531 148.0117C-49.4531 34.5747 42.5082-57.3867 155.9452-57.3867C269.3832-57.3867 361.3402 34.5747 361.3402 148.0117Z' fill='#5ba3de'/> +<path d='M334.6092 311.0627C334.6092 311.0627 324.3162 298.7777 298.7422 224.7227C273.1762 150.6637 260.5542 111.4807 250.2582 85.2457C244.7262 71.1487 237.7622 62.9997 232.4962 58.4767C240.2342 52.5387 248.2152 45.3397 252.2502 38.4217C259.1252 26.6289 263.8752 14.0117 267.8592 .0664C270.2462-8.2969 277.4922-14.0508 277.4922-14.0508S222.6952-27 199.1172 15.3398C197.5862 18.0859 196.0942 20.7031 194.5942 23.2031L69.4762 48.4377C59.0122 59.5077 48.0002 73.7227 43.3672 88.2347C39.2542 101.1167 32.0742 104.1757 17.1289 116.1287C2.1875 128.0857-30.0898 159.7387-30.0898 159.7387L-18.0273 208.4097L37.8752 277.3987C51.2622 268.4177 65.9722 257.4067 84.2152 250.3787C98.0352 245.0467 117.2222 241.9297 135.1372 238.3397C137.6832 244.6367 143.9332 261.2657 146.4802 278.5237C149.7192 300.4377 150.9652 369.6797 150.9652 369.6797Z' fill='#ba8d5d' clip-path='url(#clip)'/> +<path d='M381.6012 229.0387C381.6012 229.0387 371.9692 214.2617 360.0122 208.1167C348.6442 202.2777 335.6052 200.9767 335.6052 200.9767S338.4452 189.3747 346.7302 178.2307C355.8592 165.9457 372.1372 155.6447 372.1372 155.6447L320.8282 138.2107C320.8282 138.2107 337.9292 131.7347 345.8982 124.4297C354.9612 116.1247 359.1832 94.5427 359.1832 94.5427S311.7422 97.3397 305.0512 79.4337C299.9062 65.6527 318.3362 36.4297 318.3362 36.4297S291.1012 30.1167 277.3242 30.2847C269.7812 30.3747 261.5542 31.1567 255.3042 32.8277C254.3282 34.7107 253.3242 36.5817 252.2502 38.4217C248.2152 45.3397 240.2342 52.5387 232.4962 58.4767C237.7622 62.9997 244.7262 71.1487 250.2582 85.2457C260.5542 111.4807 273.1762 150.6637 298.7422 224.7227C324.3162 298.7777 334.6092 311.0627 334.6092 311.0627L366.9882 274.6997C351.8752 271.7107 344.7382 254.2777 344.7382 254.2777Z' fill='#f68623' stroke='#512c15' stroke-width='2.9888' stroke-miterlimit='10' clip-path='url(#clip)'/> +<path d='M37.8712 277.3987C51.2622 268.4177 65.9722 257.4067 84.2152 250.3787C108.1682 241.1407 148.2502 238.5427 169.8632 228.6327C191.4762 218.7307 194.1792 185.4067 194.1792 185.4067M150.9652 369.6797C150.9652 369.6797 149.7192 300.4377 146.4802 278.5237C143.9332 261.2657 137.6832 244.6367 135.1332 238.3397C134.9492 238.3747 134.7692 238.4097 134.5862 238.4497M212.7342 71.7967C212.7342 71.7967 242.9532 54.3637 252.2502 38.4217C259.1252 26.6289 263.8752 14.0117 267.8592 .0664C270.2462-8.2969 277.4922-14.0508 277.4922-14.0508S222.6952-27 199.1172 15.3398C197.5862 18.0859 196.0942 20.7031 194.5942 23.2031M69.4762 48.4377C59.0122 59.5077 47.9962 73.7227 43.3672 88.2347C39.2542 101.1167 32.0742 104.1757 17.1289 116.1287C2.1875 128.0857-30.0898 159.7387-30.0898 159.7387' stroke='#512c15' fill='none' stroke-width='2.9888' stroke-miterlimit='10' clip-path='url(#clip)'/> +<path d='M106.4652 1.2266C106.4652 1.2266 105.9652-3.918 96.3322-13.8828C94.6292-15.6484 92.7692-17.0078 90.8672-18.0586C91.1792-11.9961 91.7852-6.9063 92.1642-4.1016C98.3012-4.2969 103.4262-2.5938 106.4652 1.2266Z' fill='#ba8d5d' stroke='#512c15' stroke-width='2.9888' stroke-miterlimit='10'/> +<path d='M96.1722-32.6484C106.4652-33.4766 119.5822-30.9844 125.7222-21.6875C128.7112-24.8398 128.7112-39.9531 128.7112-39.9531S136.2112-20.1836 148.1132-14.75C143.5472-30.8398 127.1132-45.75 120.3282-51.2422C113.3552-56.8906 103.7652-70.50391 103.7652-70.50391S94.8202-59.2109 91.8322-41.6133C91.2892-38.4297 90.9722-35.0938 90.8042-31.7695C92.5002-32.1836 94.2892-32.4961 96.1722-32.6484Z' fill='#ba8d5d' stroke='#512c15' stroke-width='2.9888' stroke-miterlimit='10'/> +<path d='M184.1722-2.2617C173.5472-11.8906 162.4222-13.0547 153.6172-13.3828C138.5702-13.9531 128.7112-39.9531 128.7112-39.9531S128.7112-24.8398 125.7222-21.6875C119.5822-30.9844 106.4652-33.4766 96.1722-32.6484C81.6252-31.4727 72.2622-21.0234 72.2622-21.0234S86.7072-23.8438 96.3322-13.8828C105.9652-3.918 106.4652 1.2266 106.4652 1.2266C99.3242-7.7422 80.7262-5.082 64.4532 6.543C48.1832 18.1602 52.9962 49.3787 52.9962 49.3787S56.6522 36.5937 73.5862 28.7887C80.1332 25.7734 97.4962 25.1367 97.4962 25.1367S72.7582 25.9687 67.9412 54.8597C65.0472 72.2457 71.5942 87.0707 71.5942 87.0707S73.0902 71.6287 87.8672 62.4957C98.1402 56.1487 109.6212 53.1997 109.6212 53.1997C104.4722 57.0157 106.4652 67.9767 106.4652 67.9767S115.4292 52.8667 139.1722 54.3637C169.5392 56.2737 182.0352 44.1877 194.5942 23.2031C194.0432 17.1289 191.9692 4.8008 184.1722-2.2617Z' fill='#f68623' stroke='#512c15' stroke-width='2.9888' stroke-miterlimit='10'/> +<path d='M37.8712 277.3987C46.1912 267.0387 57.7072 251.8637 60.5542 243.9027C68.0272 222.9807 59.3082 213.2657 54.5782 206.0427C49.8442 198.8207 57.8122 194.5857 44.6132 181.8827S-8.9336 190.1017-14.4141 187.6137C-19.8945 185.1207-19.3945 181.8827-20.8906 170.9257C-22.3867 159.9647-28.0469 158.7847-37.3281 159.9647C-49.9297 161.5627-55.7617 184.3747-58.9961 200.0667C-62.23437 215.7577-70.503905 215.5117-68.71094 228.9567C-67.86328 235.3317-64.28125 241.8907-52.8711 244.2927C-53.5937 250.0317-53.8047 257.0317-52.5898 264.6597C-49.4414 284.4727-17.918 294.3787 5.5 292.1247C16.2148 291.0977 26.5742 284.9727 37.8712 277.3987Z' fill='#976d46' stroke='#512c15' stroke-width='2.9888' stroke-miterlimit='10'/> +<path d='M159.6012 113.0977C159.6012 122.6597 150.8982 130.4097 140.1722 130.4097C129.4412 130.4097 120.7462 122.6597 120.7462 113.0977C120.7462 103.5347 129.4412 95.7887 140.1722 95.7887C150.8982 95.7887 159.6012 103.5347 159.6012 113.0977Z' fill='#fff' stroke='#512c15' stroke-width='2.9888' stroke-miterlimit='10'/> +<path d='M146.6482 115.1327C146.6482 118.9847 143.1172 122.1097 138.7622 122.1097C134.4062 122.1097 130.8712 118.9847 130.8712 115.1327C130.8712 111.2817 134.4062 108.1597 138.7622 108.1597C143.1172 108.1597 146.6482 111.2817 146.6482 115.1327Z' fill='#341a13'/> +<path d='M-1.9453 215.2187C-1.9453 215.2187 .4883 211.0157 4.1406 206.1677C8.5508 200.3047 16.4766 195.1837 20.4531 194.8357C27.5508 194.2107 32.6052 195.9337 29.7152 201.4997C26.8281 207.0707 17.3984 212.9567 10.4922 213.8907C3.5781 214.8167-1.9453 215.2187-1.9453 215.2187Z' fill='#341a13'/> +<path d='M-43.0742 245.1407C-43.793 249.6797-44.1641 256.3747-41.0664 260.0897C-36.082 266.0667-26.6211 275.0347-5.1992 262.0817C12.7813 251.2107 35.8402 229.8127 42.7892 223.2227C38.7772 226.3637 28.1367 232.1247 4.0156 231.9457C-22.5469 231.7417-28.8125 244.2577-43.0742 245.1407Z' fill='#fff' stroke='#512c15' stroke-width='2.9888' stroke-miterlimit='10'/> +<path d='M-52.8711 244.2927C-50.918 244.7027-48.7383 244.9997-46.2969 245.1487C-45.1719 245.2107-44.1055 245.2067-43.0742 245.1407' stroke='#512c15' fill='none' stroke-width='2.9888' stroke-miterlimit='10'/> +<path d='M25.7773 230.1017C9.6211 238.6997-18.1562 252.9177-25.7695 253.2777C-33.0273 253.6167-39.2852 248.5467-42.6719 245.1057C-42.8047 245.1167-42.9375 245.1287-43.0742 245.1407' stroke='#512c15' fill='none' stroke-width='2.9888' stroke-miterlimit='10'/> </g> -<path fill="#F7931E" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M267.334,75.167 - C256.668,65.5,245.5,64.333,236.667,64c-15.107-0.57-25-26.667-25-26.667s0,15.167-3,18.333c-6.167-9.333-19.333-11.833-29.667-11 - c-14.596,1.177-24,11.667-24,11.667s14.5-2.833,24.167,7.167c9.667,10,10.167,15.167,10.167,15.167 - c-7.167-9-25.834-6.334-42.167,5.333s-11.5,43-11.5,43s3.667-12.833,20.667-20.667c6.572-3.028,24-3.667,24-3.667 - S155.5,103.5,150.667,132.5c-2.909,17.455,3.667,32.333,3.667,32.333s1.5-15.5,16.333-24.667c10.31-6.371,21.833-9.333,21.833-9.333 - c-5.167,3.833-3.166,14.833-3.166,14.833s9-15.167,32.833-13.667c30.479,1.918,43.022-10.208,55.629-31.275 - C277.24,94.63,275.157,82.257,267.334,75.167z"/> -<path fill="#A67C52" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M120.487,355.872 - c8.348-10.395,19.908-25.626,22.763-33.622c7.5-21-1.25-30.75-6-38s3.25-11.5-10-24.25S73.5,268.25,68,265.75S63,260,61.5,249 - s-7.183-12.182-16.5-11c-12.646,1.604-18.5,24.5-21.75,40.25s-11.549,15.507-9.75,29c0.854,6.402,4.447,12.983,15.898,15.396 - c-0.721,5.758-0.935,12.787,0.283,20.442c3.164,19.888,34.804,29.832,58.308,27.572C98.749,369.626,109.143,363.479,120.487,355.872 - z"/> -<path fill="#C69C6D" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M189.334,78.667c0,0-0.5-5.167-10.167-15.167 - c-1.713-1.772-3.58-3.135-5.489-4.188c0.317,6.082,0.921,11.189,1.303,14.006C181.138,73.124,186.281,74.833,189.334,78.667z"/> -<path fill="#C69C6D" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M179,44.667c10.334-0.833,23.5,1.667,29.667,11 - c3-3.167,3-18.333,3-18.333s7.525,19.843,19.471,25.298c-4.58-16.15-21.08-31.12-27.888-36.632 - c-7-5.667-16.625-19.333-16.625-19.333s-8.979,11.333-11.979,29c-0.542,3.195-0.864,6.542-1.031,9.882 - C175.318,45.129,177.115,44.819,179,44.667z"/> -<ellipse fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" cx="223.167" cy="190.959" rx="19.5" ry="17.375"/> -<ellipse fill="#42210B" cx="221.751" cy="193" rx="7.917" ry="7"/> -<path fill="#603813" d="M80.519,293.464c0,0,2.443-4.219,6.106-9.089C91.052,278.49,99.007,273.351,103,273 - c7.125-0.625,12.198,1.105,9.299,6.695S99.936,291.193,93,292.125S80.519,293.464,80.519,293.464z"/> -<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M296,149.5c0,0,30.334-17.5,39.667-33.5 - c6.902-11.834,11.667-24.5,15.667-38.5C353.731,69.108,361,63.333,361,63.333s-55-13-78.666,29.5 - c-1.534,2.754-3.036,5.383-4.538,7.892"/> -<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M120.488,355.872 - c13.437-9.009,28.207-20.065,46.512-27.122c24.045-9.269,64.273-11.878,85.969-21.821s24.408-43.392,24.408-43.392"/> -<path fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M127.5,299.5c0,0-0.749,0.729-2.083,1.995 - C126.919,300.316,127.5,299.5,127.5,299.5z"/> -<path fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M39.236,323.495 - c-0.724,4.556-1.093,11.276,2.014,15.005c5,6,14.5,15,36,2c18.048-10.912,41.196-32.388,48.167-39.005 - c-4.023,3.157-14.707,8.937-38.917,8.755C59.839,310.05,53.549,322.611,39.236,323.495z"/> -<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M29.398,322.646c1.963,0.413,4.15,0.708,6.602,0.854 - c1.129,0.067,2.202,0.06,3.236-0.005"/> -<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M108.345,308.401 - c-16.22,8.63-44.097,22.899-51.74,23.26c-7.288,0.344-13.568-4.744-16.966-8.201c-0.135,0.01-0.266,0.026-0.403,0.035"/> -<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M152.209,126.056 - C141.705,137.165,130.648,151.436,126,166c-4.126,12.93-11.333,16-26.333,28s-47.398,43.774-47.398,43.774"/> </svg> diff --git a/macros/latex/contrib/jsonparse/jason/jason.tex b/macros/latex/contrib/jsonparse/jason/jason.tex new file mode 100644 index 0000000000..28e9eb1b0c --- /dev/null +++ b/macros/latex/contrib/jsonparse/jason/jason.tex @@ -0,0 +1,289 @@ +% File: jason/jason.tex +% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de). +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License version 1.3c, +% available at http://www.latex-project.org/lppl/. +% +% This file is part of the `jsonparse' package (The Work in LPPL) +% and all files in that bundle must be distributed together. +% +% This work has the LPPL maintenance status `maintained'. +% +\documentclass{standalone} +\usepackage{l3draw} + +\begin{document} +\ExplSyntaxOn + +\color_set:nnn { color_i } { rgb } { 0.356863 , 0.639216 , 0.870588 } +\color_set:nnn { color_ii } { rgb } { 0.729412 , 0.552941 , 0.364706 } +\color_set:nnn { color_iii } { rgb } { 0.964706 , 0.52549 , 0.137255 } +\color_set:nnn { color_iv } { rgb } { 0.592157 , 0.427451 , 0.27451 } +\color_set:nnn { color_v } { rgb } { 0.317647 , 0.172549 , 0.0823529 } +\color_set:nnn { color_vi } { rgb } { 0.203922 , 0.101961 , 0.0745098 } +\color_set:nnn { color_vii } { rgb } { 1 , 1 , 1 } + +\draw_begin: + +\cs_new:Npn \__jsonparse_jason_path_i: { + \draw_path_moveto:n { 433.418 , 221.836 } + \draw_path_curveto:nnn { 433.418 , 335.695 } { 341.117 , 428 } { 227.254 , 428 } + \draw_path_curveto:nnn { 113.391 , 428 } { 21.086 , 335.695 } { 21.086 , 221.836 } + \draw_path_curveto:nnn { 21.086 , 107.973 } { 113.391 , 15.668 } { 227.254 , 15.668 } + \draw_path_curveto:nnn { 341.117 , 15.668 } { 433.418 , 107.973 } { 433.418 , 221.836 } + \draw_path_close: +} + +\cs_new:Npn \__jsonparse_jason_path_ii: { + \draw_path_moveto:n { 406.586 , 385.5 } + \draw_path_curveto:nnn { 406.586 , 385.5 } { 396.254 , 373.168 } { 370.586 , 298.836 } + \draw_path_curveto:nnn { 344.922 , 224.5 } { 332.254 , 185.168 } { 321.918 , 158.836 } + \draw_path_curveto:nnn { 316.367 , 144.684 } { 309.375 , 136.508 } { 304.09 , 131.965 } + \draw_path_curveto:nnn { 311.859 , 126.008 } { 319.867 , 118.781 } { 323.918 , 111.836 } + \draw_path_curveto:nnn { 330.82 , 100 } { 335.586 , 87.336 } { 339.586 , 73.336 } + \draw_path_curveto:nnn { 341.984 , 64.941 } { 349.254 , 59.168 } { 349.254 , 59.168 } + \draw_path_curveto:nnn { 349.254 , 59.168 } { 294.254 , 46.168 } { 270.586 , 88.668 } + \draw_path_curveto:nnn { 269.051 , 91.422 } { 267.551 , 94.051 } { 266.047 , 96.559 } + \draw_path_lineto:n { 140.461 , 121.891 } + \draw_path_curveto:nnn { 129.957 , 133 } { 118.902 , 147.27 } { 114.254 , 161.836 } + \draw_path_curveto:nnn { 110.125 , 174.766 } { 102.918 , 177.836 } { 87.918 , 189.836 } + \draw_path_curveto:nnn { 72.918 , 201.836 } { 40.52 , 233.609 } { 40.52 , 233.609 } + \draw_path_lineto:n { 52.629 , 282.461 } + \draw_path_lineto:n { 108.742 , 351.707 } + \draw_path_curveto:nnn { 122.176 , 342.695 } { 136.945 , 331.641 } { 155.254 , 324.586 } + \draw_path_curveto:nnn { 169.125 , 319.234 } { 188.387 , 316.105 } { 206.367 , 312.504 } + \draw_path_curveto:nnn { 208.922 , 318.824 } { 215.195 , 335.516 } { 217.754 , 352.836 } + \draw_path_curveto:nnn { 221.004 , 374.836 } { 222.254 , 444.336 } { 222.254 , 444.336 } + \draw_path_close: +} + +\cs_new:Npn \__jsonparse_jason_path_iii: { + \draw_path_moveto:n { 453.754 , 303.168 } + \draw_path_curveto:nnn { 453.754 , 303.168 } { 444.086 , 288.336 } { 432.086 , 282.168 } + \draw_path_curveto:nnn { 420.676 , 276.305 } { 407.586 , 275 } { 407.586 , 275 } + \draw_path_curveto:nnn { 407.586 , 275 } { 410.438 , 263.355 } { 418.754 , 252.168 } + \draw_path_curveto:nnn { 427.918 , 239.836 } { 444.254 , 229.5 } { 444.254 , 229.5 } + \draw_path_lineto:n { 392.754 , 212 } + \draw_path_curveto:nnn { 392.754 , 212 } { 409.918 , 205.5 } { 417.918 , 198.168 } + \draw_path_curveto:nnn { 427.016 , 189.832 } { 431.254 , 168.168 } { 431.254 , 168.168 } + \draw_path_curveto:nnn { 431.254 , 168.168 } { 383.633 , 170.973 } { 376.918 , 153 } + \draw_path_curveto:nnn { 371.754 , 139.168 } { 390.254 , 109.836 } { 390.254 , 109.836 } + \draw_path_curveto:nnn { 390.254 , 109.836 } { 362.918 , 103.5 } { 349.086 , 103.668 } + \draw_path_curveto:nnn { 341.516 , 103.758 } { 333.258 , 104.543 } { 326.984 , 106.223 } + \draw_path_curveto:nnn { 326.004 , 108.113 } { 324.996 , 109.988 } { 323.918 , 111.836 } + \draw_path_curveto:nnn { 319.867 , 118.781 } { 311.859 , 126.008 } { 304.09 , 131.965 } + \draw_path_curveto:nnn { 309.375 , 136.508 } { 316.367 , 144.684 } { 321.918 , 158.836 } + \draw_path_curveto:nnn { 332.254 , 185.168 } { 344.922 , 224.5 } { 370.586 , 298.836 } + \draw_path_curveto:nnn { 396.254 , 373.168 } { 406.586 , 385.5 } { 406.586 , 385.5 } + \draw_path_lineto:n { 439.086 , 349 } + \draw_path_curveto:nnn { 423.918 , 346 } { 416.754 , 328.5 } { 416.754 , 328.5 } + \draw_path_close: +} + +\cs_new:Npn \__jsonparse_jason_path_iv: { + \draw_path_moveto:n { 255.586 , 71 } + \draw_path_curveto:nnn { 244.922 , 61.336 } { 233.754 , 60.168 } { 224.918 , 59.836 } + \draw_path_curveto:nnn { 209.812 , 59.266 } { 199.918 , 33.168 } { 199.918 , 33.168 } + \draw_path_curveto:nnn { 199.918 , 33.168 } { 199.918 , 48.336 } { 196.918 , 51.5 } + \draw_path_curveto:nnn { 190.754 , 42.168 } { 177.586 , 39.668 } { 167.254 , 40.5 } + \draw_path_curveto:nnn { 152.656 , 41.68 } { 143.254 , 52.168 } { 143.254 , 52.168 } + \draw_path_curveto:nnn { 143.254 , 52.168 } { 157.754 , 49.336 } { 167.418 , 59.336 } + \draw_path_curveto:nnn { 177.086 , 69.336 } { 177.586 , 74.5 } { 177.586 , 74.5 } + \draw_path_curveto:nnn { 170.418 , 65.5 } { 151.754 , 68.168 } { 135.418 , 79.836 } + \draw_path_curveto:nnn { 119.086 , 91.5 } { 123.918 , 122.836 } { 123.918 , 122.836 } + \draw_path_curveto:nnn { 123.918 , 122.836 } { 127.586 , 110 } { 144.586 , 102.168 } + \draw_path_curveto:nnn { 151.156 , 99.141 } { 168.586 , 98.5 } { 168.586 , 98.5 } + \draw_path_curveto:nnn { 168.586 , 98.5 } { 143.754 , 99.336 } { 138.918 , 128.336 } + \draw_path_curveto:nnn { 136.012 , 145.789 } { 142.586 , 160.668 } { 142.586 , 160.668 } + \draw_path_curveto:nnn { 142.586 , 160.668 } { 144.086 , 145.168 } { 158.918 , 136 } + \draw_path_curveto:nnn { 169.23 , 129.629 } { 180.754 , 126.668 } { 180.754 , 126.668 } + \draw_path_curveto:nnn { 175.586 , 130.5 } { 177.586 , 141.5 } { 177.586 , 141.5 } + \draw_path_curveto:nnn { 177.586 , 141.5 } { 186.586 , 126.336 } { 210.418 , 127.836 } + \draw_path_curveto:nnn { 240.898 , 129.754 } { 253.441 , 117.625 } { 266.047 , 96.559 } + \draw_path_curveto:nnn { 265.492 , 90.465 } { 263.41 , 78.09 } { 255.586 , 71 } + \draw_path_close: +} + +\cs_new:Npn \__jsonparse_jason_path_v: { + \draw_path_moveto:n { 108.738 , 351.707 } + \draw_path_curveto:nnn { 117.086 , 341.312 } { 128.648 , 326.078 } { 131.504 , 318.086 } + \draw_path_curveto:nnn { 139.004 , 297.086 } { 130.254 , 287.336 } { 125.504 , 280.086 } + \draw_path_curveto:nnn { 120.754 , 272.836 } { 128.754 , 268.586 } { 115.504 , 255.836 } + \draw_path_curveto:nnn { 102.254 , 243.086 } { 61.754 , 264.086 } { 56.254 , 261.586 } + \draw_path_curveto:nnn { 50.754 , 259.086 } { 51.254 , 255.836 } { 49.754 , 244.836 } + \draw_path_curveto:nnn { 48.254 , 233.836 } { 42.57 , 232.652 } { 33.254 , 233.836 } + \draw_path_curveto:nnn { 20.605 , 235.438 } { 14.754 , 258.336 } { 11.504 , 274.086 } + \draw_path_curveto:nnn { 8.254 , 289.836 } { -0.047 , 289.59 } { 1.754 , 303.086 } + \draw_path_curveto:nnn { 2.605 , 309.484 } { 6.199 , 316.066 } { 17.652 , 318.48 } + \draw_path_curveto:nnn { 16.93 , 324.238 } { 16.715 , 331.266 } { 17.934 , 338.922 } + \draw_path_curveto:nnn { 21.098 , 358.809 } { 52.738 , 368.754 } { 76.242 , 366.492 } + \draw_path_curveto:nnn { 87 , 365.461 } { 97.395 , 359.312 } { 108.738 , 351.707 } + \draw_path_close: +} + +\cs_new:Npn \__jsonparse_jason_path_vi: { + \draw_path_moveto:n { 108.738 , 351.707 } + \draw_path_curveto:nnn { 122.176 , 342.695 } { 136.945 , 331.641 } { 155.254 , 324.586 } + \draw_path_curveto:nnn { 179.297 , 315.316 } { 219.527 , 312.707 } { 241.223 , 302.762 } + \draw_path_curveto:nnn { 262.918 , 292.82 } { 265.629 , 259.371 } { 265.629 , 259.371 } + + \draw_path_moveto:n { 222.254 , 444.336 } + \draw_path_curveto:nnn { 222.254 , 444.336 } { 221.004 , 374.836 } { 217.754 , 352.836 } + \draw_path_curveto:nnn { 215.195 , 335.516 } { 208.922 , 318.824 } { 206.363 , 312.504 } + \draw_path_curveto:nnn { 206.18 , 312.539 } { 205.996 , 312.574 } { 205.812 , 312.613 } + + \draw_path_moveto:n { 284.254 , 145.336 } + \draw_path_curveto:nnn { 284.254 , 145.336 } { 314.586 , 127.836 } { 323.918 , 111.836 } + \draw_path_curveto:nnn { 330.82 , 100 } { 335.586 , 87.336 } { 339.586 , 73.336 } + \draw_path_curveto:nnn { 341.984 , 64.941 } { 349.254 , 59.168 } { 349.254 , 59.168 } + \draw_path_curveto:nnn { 349.254 , 59.168 } { 294.254 , 46.168 } { 270.586 , 88.668 } + \draw_path_curveto:nnn { 269.051 , 91.422 } { 267.551 , 94.051 } { 266.047 , 96.559 } + + \draw_path_moveto:n { 140.461 , 121.891 } + \draw_path_curveto:nnn { 129.957 , 133 } { 118.898 , 147.27 } { 114.254 , 161.836 } + \draw_path_curveto:nnn { 110.125 , 174.766 } { 102.918 , 177.836 } { 87.918 , 189.836 } + \draw_path_curveto:nnn { 72.918 , 201.836 } { 40.52 , 233.609 } { 40.52 , 233.609 } +} + +\cs_new:Npn \__jsonparse_jason_path_vii: { + \draw_path_moveto:n { 177.586 , 74.5 } + \draw_path_curveto:nnn { 177.586 , 74.5 } { 177.086 , 69.336 } { 167.418 , 59.336 } + \draw_path_curveto:nnn { 165.707 , 57.562 } { 163.84 , 56.199 } { 161.93 , 55.145 } + \draw_path_curveto:nnn { 162.246 , 61.227 } { 162.852 , 66.336 } { 163.234 , 69.152 } + \draw_path_curveto:nnn { 169.391 , 68.957 } { 174.535 , 70.668 } { 177.586 , 74.5 } + \draw_path_close: +} + +\cs_new:Npn \__jsonparse_jason_path_viii: { + \draw_path_moveto:n { 167.254 , 40.5 } + \draw_path_curveto:nnn { 177.586 , 39.668 } { 190.754 , 42.168 } { 196.918 , 51.5 } + \draw_path_curveto:nnn { 199.918 , 48.336 } { 199.918 , 33.168 } { 199.918 , 33.168 } + \draw_path_curveto:nnn { 199.918 , 33.168 } { 207.445 , 53.012 } { 219.391 , 58.465 } + \draw_path_curveto:nnn { 214.809 , 42.316 } { 198.312 , 27.348 } { 191.504 , 21.836 } + \draw_path_curveto:nnn { 184.504 , 16.168 } { 174.879 , 2.5 } { 174.879 , 2.5 } + \draw_path_curveto:nnn { 174.879 , 2.5 } { 165.898 , 13.836 } { 162.898 , 31.5 } + \draw_path_curveto:nnn { 162.355 , 34.695 } { 162.035 , 38.043 } { 161.867 , 41.383 } + \draw_path_curveto:nnn { 163.57 , 40.965 } { 165.367 , 40.652 } { 167.254 , 40.5 } + \draw_path_close: +} + +\cs_new:Npn \__jsonparse_jason_path_ix: { + \draw_path_moveto:n { 230.922 , 186.793 } + \draw_path_curveto:nnn { 230.922 , 196.391 } { 222.188 , 204.168 } { 211.422 , 204.168 } + \draw_path_curveto:nnn { 200.648 , 204.168 } { 191.922 , 196.391 } { 191.922 , 186.793 } + \draw_path_curveto:nnn { 191.922 , 177.195 } { 200.648 , 169.418 } { 211.422 , 169.418 } + \draw_path_curveto:nnn { 222.188 , 169.418 } { 230.922 , 177.195 } { 230.922 , 186.793 } + \draw_path_close: +} + +\cs_new:Npn \__jsonparse_jason_path_x: { + \draw_path_moveto:n { 217.922 , 188.836 } + \draw_path_curveto:nnn { 217.922 , 192.699 } { 214.375 , 195.836 } { 210.004 , 195.836 } + \draw_path_curveto:nnn { 205.633 , 195.836 } { 202.086 , 192.699 } { 202.086 , 188.836 } + \draw_path_curveto:nnn { 202.086 , 184.969 } { 205.633 , 181.836 } { 210.004 , 181.836 } + \draw_path_curveto:nnn { 214.375 , 181.836 } { 217.922 , 184.969 } { 217.922 , 188.836 } + \draw_path_close: +} + +% nostril +\cs_new:Npn \__jsonparse_jason_path_xi: { + \draw_path_moveto:n { 68.77 , 289.297 } + \draw_path_curveto:nnn { 68.77 , 289.297 } { 71.215 , 285.078 } { 74.879 , 280.211 } + \draw_path_curveto:nnn { 79.305 , 274.324 } { 87.262 , 269.184 } { 91.254 , 268.836 } + \draw_path_curveto:nnn { 98.379 , 268.211 } { 103.449 , 269.938 } { 100.551 , 275.527 } + \draw_path_curveto:nnn { 97.652 , 281.117 } { 88.188 , 287.027 } { 81.254 , 287.961 } + \draw_path_curveto:nnn { 74.316 , 288.891 } { 68.77 , 289.297 } { 68.77 , 289.297 } + \draw_path_close: +} + +% mouth +\cs_new:Npn \__jsonparse_jason_path_xii: { + \draw_path_moveto:n { 27.488 , 319.328 } + \draw_path_curveto:nnn { 26.766 , 323.887 } { 26.395 , 330.605 } { 29.504 , 334.336 } + \draw_path_curveto:nnn { 34.504 , 340.336 } { 44.004 , 349.336 } { 65.504 , 336.336 } + \draw_path_curveto:nnn { 83.551 , 325.422 } { 106.699 , 303.945 } { 113.672 , 297.328 } + \draw_path_curveto:nnn { 109.645 , 300.484 } { 98.965 , 306.266 } { 74.754 , 306.086 } + \draw_path_curveto:nnn { 48.09 , 305.883 } { 41.801 , 318.445 } { 27.488 , 319.328 } + \draw_path_close: +} + +% mouth edge +\cs_new:Npn \__jsonparse_jason_path_xiii: { + \draw_path_moveto:n { 17.652 , 318.48 } + \draw_path_curveto:nnn { 19.613 , 318.891 } { 21.801 , 319.188 } { 24.254 , 319.336 } + \draw_path_curveto:nnn { 25.383 , 319.402 } { 26.453 , 319.395 } { 27.488 , 319.328 } +} + +% teeth +\cs_new:Npn \__jsonparse_jason_path_xiv: { + \draw_path_moveto:n { 96.598 , 304.234 } + \draw_path_curveto:nnn { 80.379 , 312.863 } { 52.5 , 327.137 } { 44.855 , 327.496 } + \draw_path_curveto:nnn { 37.57 , 327.84 } { 31.289 , 322.75 } { 27.891 , 319.293 } + \draw_path_curveto:nnn { 27.758 , 319.305 } { 27.625 , 319.32 } { 27.488 , 319.328 } +} + +\draw_transform_yscale:n { -1 } +\draw_linewidth:n { 3pt } +\draw_miterlimit:n { 10 } +\color_stroke:n { color_v } + +\draw_scope_begin: + + \color_fill:n { color_i } + \__jsonparse_jason_path_i: + \draw_path_use_clear:n { fill , clip } + + \color_fill:n { color_ii } + \__jsonparse_jason_path_ii: + \draw_path_use_clear:n { fill } + + \color_fill:n { color_iii } + \__jsonparse_jason_path_iii: + \draw_path_use_clear:n { fill , draw } + + \__jsonparse_jason_path_vi: + \draw_path_use_clear:n { draw } + +\draw_scope_end: + +\color_fill:n { color_ii } +\__jsonparse_jason_path_vii: +\draw_path_use_clear:n { fill , draw } + +\__jsonparse_jason_path_viii: +\draw_path_use_clear:n { fill , draw } + +\color_fill:n { color_iii } +\__jsonparse_jason_path_iv: +\draw_path_use_clear:n { fill , draw } + +\color_fill:n { color_iv } +\__jsonparse_jason_path_v: +\draw_path_use_clear:n { fill , draw } + +\color_fill:n { color_vii } +\__jsonparse_jason_path_ix: +\draw_path_use_clear:n { fill , draw } + +\color_fill:n { color_vi } +\__jsonparse_jason_path_x: +\draw_path_use_clear:n { fill } + +\__jsonparse_jason_path_xi: +\draw_path_use_clear:n { fill } + +\color_fill:n { color_vii } +\__jsonparse_jason_path_xii: +\draw_path_use_clear:n { fill , draw } + +\__jsonparse_jason_path_xiii: +\draw_path_use_clear:n { draw } + +\__jsonparse_jason_path_xiv: +\draw_path_use_clear:n { draw } + +\draw_end: + +\ExplSyntaxOff +\end{document}
\ No newline at end of file diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf Binary files differindex ed7a1dded6..e52f8631a0 100644 --- a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf +++ b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.tex b/macros/latex/contrib/jsonparse/jsonparse-doc.tex index 1cfcde1e18..7e775f7499 100644 --- a/macros/latex/contrib/jsonparse/jsonparse-doc.tex +++ b/macros/latex/contrib/jsonparse/jsonparse-doc.tex @@ -11,8 +11,8 @@ % This work has the LPPL maintenance status `maintained'. % \documentclass[a4paper]{article} -\def\jsonparsefileversion{0.8.3} -\def\jsonparsefiledate{28 April 2024} +\def\jsonparsefileversion{0.8.7} +\def\jsonparsefiledate{8 August 2024} \usepackage[T1]{fontenc} \usepackage{Alegreya} @@ -193,10 +193,13 @@ \changes{v0.5.7}{2024/04/14}{Bug fixes, key-value option setting added.} \changes{v0.6.0}{2024/04/15}{Bug fixes, renaming of several commands.} \changes{v0.7.0}{2024/04/18}{Renaming and rearranging of keys, escaping of special JSON escape sequences added.} -\changes{v0.7.1}{2024/04/20}{Access to first-level keys of object added.} +\changes{v0.7.1}{2024/04/20}{Access to top-level keys of object added.} \changes{v0.8.0}{2024/04/24}{Internal rewrite, escaping procedures changed.} \changes{v0.8.2}{2024/04/26}{Bug fixes, externalizing parsed data.} \changes{v0.8.3}{2024/04/28}{Escaping of characters with special meaning in TeX.} +\changes{v0.8.5}{2024/05/05}{Enhanced key management.} +\changes{v0.8.6}{2024/05/09}{Bug fix in nesting function.} +\changes{v0.8.7}{2024/08/08}{Corrections in documentation, error messages.} \begin{document} \vspace*{-1cm} @@ -225,20 +228,22 @@ The package does not load any dependencies. \end{macrodef} The package can be loaded with the option \macro{debug}. It will then output to the log file every instance of a string, a boolean (true or false) value, a null value, a number as well as the start and end of every object and the start and end of every array that is found while parsing the JSON string or JSON file. +This key can be set either as package option or using \macro{\JSONParseSet}. It can also be set locally as option to the commands \macro{\JSONParse} and \macro{\JSONParseFromFile}. + \section{Escaping and special treatment of the input}\label{sec:escaping} In general, the package reads the JSON source as string, which means that all characters have category code 12 (other), except for spaces which have category code 10 (space). The \macro{\endlinechar} value is set to $-1$. Furthermore, if PDFLaTeX is used, the upper-half of the 8-bit range is set to ``active''. JSON, however, defines a small set of escape sequences and in order to be able to process these, the category code of the backslash is set to 0 (escpape). JSON strings cannot contain the two characters \macro{"} and \macro{\}. These two characters need to be escaped with a preceding backslash (\macro{\}). This package therefore redefines locally the TeX control symbols \macro{\"}, \macro{\/}, \macro{\\}, \macro{\b}, \macro{\f}, \macro{\n}, \macro{\r}, \macro{\t} and \macro{\u}. These control symbols are prevented from expanding during parsing. For example, \macro{\"} is first defined as \macro{\exp_not:N \"} and only hen typeset, \macro{\"} is expanded to \macro{"}, which ensures that strings are parsed properly. -Similarly, the control symbol \macro{\/} expands eventually to \macro{/} and \macro{\\} to \macro{\c_backslash_str} (i.\,e. a backslash with category code 12). The escape sequence \macro{\u} followed by a hex value consisting of four digits eventually eventually expands to \macro{\char"} followed by the relevant four hex digits. The JSON escape sequences \macro{\b}, \macro{\f}, \macro{\n}, \macro{\r}, \macro{\t} or \macro{\u} (followed by a hex value) eventually expand to token variables of which the contents can be set using the relevant \macro{replacement} key. See more on setting keys below in section \ref{sec:settings}. +Similarly, the control symbol \macro{\/} expands eventually to \macro{/} and \macro{\\} to \macro{\c_backslash_str} (i.\,e. a backslash with category code 12). The escape sequence \macro{\u} followed by a hex value consisting of four digits eventually eventually expands to \macro{\char"} followed by the relevant four hex digits. The JSON escape sequences \macro{\b}, \macro{\f}, \macro{\n}, \macro{\r}, \macro{\t} or \macro{\u} (followed by a hex value) eventually expand to token variables of which the contents can be set using the relevant \macro{replacement} key. See more on setting options below in section \ref{sec:options}. It is possible to insert TeX macros to the JSON source that will eventually be parsed when typesetting. Backslashes of TeX macros need to be escaped by another backslash. The TeX macros \macro{\"} and \macro{\\} must be escaped twice in the JSON source, so that they become \macro{\\\"} and \macro{\\\\} respectively. \begin{macrodef} -|\x|[<token variable name>][<key>] +|\x|{<token variable name>}{<key>} \end{macrodef} -Using the control sequence \macro{\x}, it is possible to nest JSON strings into each other. The control sequence takes two arguments delimited by square brackets. The first argument represents the name of the token variable that holds the parsed JSON data where the inserted JSON string should be taken from. The second argument sets the key that should be selected. The following example shows a simple use case: +Using the control sequence \macro{\x}, it is possible to nest JSON strings into each other. The control sequence takes two arguments delimited by curly braces. The first argument represents the name of the token variable that holds the parsed JSON data where the inserted JSON string should be taken from. The second argument sets the key that should be selected. The following example shows a simple use case: \begin{codeexamplecolumns} \JSONParse{\myJSONdataA}{ @@ -246,49 +251,52 @@ Using the control sequence \macro{\x}, it is possible to nest JSON strings into } \JSONParse{\myJSONdataB}{ - { "d" : \x[myJSONdataA][a] } + { "d" : \x{myJSONdataA}{a} } } \JSONParseValue{\myJSONdataB}{d.b} \end{codeexamplecolumns} +Note that the control sequence \macro{\x} is replaced by the value exactly. Therefore, if the value happens to be a string, the control sequence \macro{\x} should be placed between quotation marks (\macro{"}) in order for the resulting string to be valid JSON. + \begin{macrodef} -|escape|={<all>} -|escape|={<none>} -|escape|={<number sign>} -|escape|={<dollar sign>} -|escape|={<percent sign>} -|escape|={<ampersand>} -|escape|={<circumflex accent>} -|escape|={<low line>} -|escape|={<tilde>} +|escape|={all} +|escape|={none} +|escape|={number sign} +|escape|={dollar sign} +|escape|={percent sign} +|escape|={ampersand} +|escape|={circumflex accent} +|escape|={low line} +|escape|={tilde} \end{macrodef} -The key \macro{escape} can be used to convert characters that don't require escaping in JSON but in TeX into their relevant TeX escape sequences. Apart from the backslash and curly braces that need to be escaped anyways, these are the number sign, the dollar sign, the percent sign, the ampersand, the circumflex accent, the low line and the tilde. The characters can be selected individually separated by a comma (for example \macro{escape={dollar sign, circumflex accent, low line}}. With \macro{escape={all}}, all escaping sequences are selected, with \macro{escape={none}}, none is selected. +The key \macro{escape} can be used to convert characters that don't require escaping in JSON but in TeX into the relevant TeX escape sequences. Apart from the backslash and curly braces that need to be escaped anyways, these are the number sign, the dollar sign, the percent sign, the ampersand, the circumflex accent, the low line and the tilde. The characters can be selected individually separated by a comma (for example \macro{escape={dollar sign, circumflex accent, low line}}. With \macro{escape={all}}, all escaping sequences are selected, with \macro{escape={none}}, none is selected. The naming of the relevant characters follows their Unicode names. However, \macro{hash} exists as alias for \macro{number sign}, \macro{dollar} as alias for \macro{dollar sign}, \macro{percent} for \macro{percent sign}, \macro{circumflex} for \macro{circumflex accent} and \macro{underscore} for \macro{low line}. +This key can be set using \macro{\JSONParseSet}. It can also be set locally as option to the commands \macro{\JSONParseValue}, \macro{\JSONParseArrayValues} and \macro{\JSONParseArrayValuesMap}. + \begin{macrodef} -replacement/|backspace|={<string>} -replacement/|formfeed|={<string>} -replacement/|linefeed|={<string>} -replacement/|carriage return|={<string>} -replacement/|horizontal tab|={<string>} +|rescan| +|rescan|={<boolean>} \end{macrodef} -These keys can be used to set the replacement text for the JSON escape sequences \macro{\b} (backspace), \macro{\f} (formfeed), \macro{\n} (linefeed), \macro{\r} (carriage return) and \macro{\t} (horizontal tab). The default replacement string is a space. Only strings can be used as replacement. +The key \macro{rescan} can be used to activate and deactivate rescanning of the output. This key is active per default. Rescanning converts all tokens to their default category codes and TeX control sequences are expanded before typesetting. Further, during the rescanning process, JSON escape sequences are replaced and characters that don't require escaping in JSON but in TeX are replaced by the relevant TeX escape sequences. + +This key can be set using \macro{\JSONParseSet}. It can also be set locally as option to the commands \macro{\JSONParseValue}, \macro{\JSONParseArrayValues} and \macro{\JSONParseArrayValuesMap}. \section{Main user commands} \begin{macrodef} -|\JSONParse|[<file name>]{<token variable>}{<JSON string>} +|\JSONParse|[<options>]{<token variable>}{<JSON string>} \end{macrodef} The command \macro{\JSONParse} is used to parse a JSON string and store the parsed result in a token variable (a property list). The second argument takes the name of the token variable that is created by the command. The third argument takes the JSON string to be parsed. For example, using \macro{\JSONParse{\myJSONdata}{ { "key" : "value" } }}, the relevant JSON string will be parsed and the result stored in the token variable \macro{\myJSONdata} as property list. In this case, the property list only consists of one entry with the key \macro{key} and the value \macro{value}. The command \macro{\JSONParseValue{\myJSONdata}{key}}, for example, can then be used to extract the relevant value from this property list (see the description below). -The first optinal argument can be used to externalize the parsed JSON data to a file. See more on externalization in section \ref{sec:externalizing} below. +The first optional argument can be used to pass options to the command that are then applied locally. \begin{macrodef} -|\JSONParseFromFile|[<file name>]{<token variable>}{<JSON file>} +|\JSONParseFromFile|[<options>]{<token variable>}{<JSON file>} \end{macrodef} The command \macro{\JSONParseFromFile} is used to parse a JSON file and store the parsed result in a token variable (a property list). It works the same way as \macro{\JSONParse}, but instead of a JSON string, it takes as third argument the path to the JSON file relative to the working directory. @@ -298,8 +306,7 @@ The command \macro{\JSONParseFromFile} is used to parse a JSON file and store th The command \macro{\JSONParseKeys} is used to store all top-level keys of a parsed JSON object as array into a token variable. The command takes as first argument the token variable that holds the parsed JSON data. The second argument takes the token variable that is assigned a JSON array containing the top-level keys of the object represented by the token variable in the first argument. The token variable to store the keys as array is created if it does not exist. \begin{macrodef} -|\JSONParseValue|{<token variable>}{<key>} -|\JSONParseValue*|{<token variable>}{<key>} +|\JSONParseValue|[<options>]{<token variable>}{<key>} |\JSONParseExpandableValue|{<token variable>}{<key>} \end{macrodef} The command \macro{\JSONParseValue} is used to select values from the token variable (property list) that has been created using the commands \macro{\JSONParse} or \macro{\JSONParseFromFile}. The first argument takes the token variable that holds the parsed JSON data. The second argument takes the key to select the relevant entry from the parsed JSON data using JavaScript syntax. @@ -308,15 +315,14 @@ If the JSON string \macro{{ "key" : "value" }} is parsed into the token variable Nested objects and arrays are assigned keys that adhere to JavaScript syntax. For example, if the JSON string \macro{{ "outer_key" : { "inner_key" : "value" } }} is parsed into the token variable \macro{\myJSONdata}, to select the value associated with the key \macro{inner_key}, the command \macro{\JSONParseValue{\myJSONdata}{outer_key.inner_key}} can be used. To give an example for an array, the command \macro{\JSONParseValue{\myJSONdata}{key[0]}} selects the first value of the array associated with the key \macro{key} in the JSON string \macro{{ "key" : [ "one" , "two" ] }}. -The non-starred variant of this command, \macro{\JSONParseValue}, rescans the token list before it is typeset (which means that all category codes that may have been changed before are set to the default values). The starred variant, \macro{\JSONParseValue*}, does not rescan the ouput. The non-starred variants of this and similar commands should therefore not be placed in a \macro{\JSONParse} command. +The first optional argument can be used to pass options to the command, such as \macro{escape} or \macro{rescan}, that are then applied locally. When the option \macro{rescan} is used, the token list is rescanned before it is typeset (which means that all category codes that may have been changed before are set to the default values). This is the default behaviour. If rescanning is not desired, pass the option \macro{rescan=false} to the command. When a key is associated with an object or array, the whole object or array is output as JSON string. The special key \macro{.} (or the string defined using the key \macro{child sep}) returns the whole JSON object as string. Whole objects or arrays can also be output as JSON string for further use in other macros using the expandable command \macro{\JSONParseExpandableValue}. \begin{macrodef} -|\JSONParseArrayValues|{<token variable>}{<key>}[<subkey>]{<string>} -|\JSONParseArrayValues*|{<token variable>}{<key>}[<subkey>]{<string>} +|\JSONParseArrayValues|[<options>]{<token variable>}{<key>}[<subkey>]{<string>} \end{macrodef} The command \macro{\JSONParseArrayValues} is used to select all values from an array from a parsed JSON string or JSON file. The first argument takes the token variable that holds the parsed JSON data. The second argument takes the key to select the relevant entry from the parsed JSON data using JavaScript syntax. The third argument is optional and can be used to pass a subkey, i.\,e. a key that is used to select a value for every item. The last argument takes a string that is inserted between all values when they are typeset. @@ -339,11 +345,11 @@ For example, let us assume the following JSON data structure is parsed into the Then, when using \macro{\JSONParseArrayValues{\myJSONdata}{array}[key_a]{, }}, `one, three' is typeset to the document. -The starred variant, \macro{\JSONParseArrayValues*}, does not rescan the token lists before they are typeset. +The first optional argument can be used to pass options to the command, such as \macro{escape} or \macro{rescan}, that are then applied locally. \begin{macrodef} -|\JSONParseArrayValuesMap|{<token variable>}{<key>}[<subkey>]{<command name>} -|\JSONParseArrayValuesMap*|{<token variable>}{<key>}[<subkey>]{<command name>} +|\JSONParseArrayValuesMap|[<options>]{<token variable>}{<key>}[<subkey>] + {<command name>} \end{macrodef} The command \macro{\JSONParseArrayValuesMap} takes the same first three arguments as the command \macro{\JSONParseArrayValues} and works in a similar way. However, instead of a string that is added between the array items, it takes a command name as fourth argument. This command can be defined beforehand and will be called for every array item. Inside its definition, the commands \macro{\JSONParseArrayIndex}, \macro{\JSONParseArrayKey} and \macro{\JSONParseArrayValue} can be used which are updated for each item and output the index, the key and the value of the current item respectively. @@ -362,7 +368,7 @@ For example, let us assume the same JSON data structure as defined above parsed \end{itemize} \end{codeexamplecolumns} -The starred variant, \macro{\JSONParseArrayValuesMap*}, does not rescan the token lists before they are typeset. +The first optional argument can be used to pass options to the command, such as \macro{escape} or \macro{rescan}, that are then applied locally. \begin{macrodef} |\JSONParseArrayCount|{<token variable>}{<key>} @@ -371,45 +377,89 @@ The command \macro{\JSONParseArrayCount} takes as first argument a token variabl \subsection{Externalising parsed JSON data}\label{sec:externalizing} -Parsing large JSON files can take quite a while. In order to speed up follow-up compilation runs, this package provides a way to store parsed JSON data for future use. The first opional argument of the commands \macro{\JSONParse} and \macro{\JSONParseFromFile} can be used to provide the name of a file (without file extension) that will be created in the working directory and which stores the relevant information. The file name will have the extension \macro{.jsonparse}. If a file with the same name and file extension already exists, an error will be issued. Once the file has been created, the package will try to load the data from this file instead of parsing the JSON data again. +Parsing large JSON files can take quite a while. In order to speed up follow-up compilation runs, this package provides a way to store parsed JSON data for future use. Once a file for externalization has been created, the package will try to load the data from this file instead of parsing the JSON data again. + +\begin{macrodef} +|externalize| +|externalize|={<boolean>} +\end{macrodef} +With the key \macro{externalize} set (or set to true), a file will be created in the working directory that stores the externalization of the parsed JSON data. The file name gets the extension \macro{.jsonparse}. The file name is created automatically and consists of the name of the current file followed by an underscore and the name of the token variable where the JSON data is stored into. If a file with the same name and file extension already exists, an error will be issued. + +This key can be set using \macro{\JSONParseSet}. It can also be set locally as option to the commands \macro{\JSONParse} and \macro{\JSONParseFromFile}. + +\begin{macrodef} +|externalize prefix|={<string>} +\end{macrodef} +With the key \macro{externalize prefix}, a prefix can be defined that is added to the file name. Per default this is an empty string. + +This key can be set using \macro{\JSONParseSet}. It can also be set locally as option to the commands \macro{\JSONParse} and \macro{\JSONParseFromFile}. + +\begin{macrodef} +|externalize file name|={<token list>} +\end{macrodef} +The key \macro{externalize file name} sets the schema for the file name. The default schema is as follows: + +\begin{codeexample} +\l_jsonparse_externalize_prefix_str \c_sys_jobname_str + \c_underscore_str \l_jsonparse_current_prop_str +\end{codeexample} + +The token variable \macro{\l_jsonparse_externalize_prefix_str} contains the prefix that is set using the key \macro{externalize prefix}. \macro{\c_sys_jobname_str} holds the name of the current file (the current job name), \macro{\c_underscore_str} is an underscore and the token variable \macro{\l_jsonparse_current_prop_str} contains the name of the property list where the relevant JSON data is stored into. + +This key can be set using \macro{\JSONParseSet}. It can also be set locally as option to the commands \macro{\JSONParse} and \macro{\JSONParseFromFile}. \begin{macrodef} |\JSONParsePut|{<token variable>}{<key>}[<JSON string>] \end{macrodef} The command \macro{\JSONParsePut} is used by the externalization procedure to re-read already parsed JSON data to the main file. It just adds a key-value pair to the property list (where the value part is read as string). Hence, it can also be used to append more entries to an already existing property list containing parsed JSON data. -\subsection{Changing separators, output and other settings}\label{sec:settings} +\subsection{Changing separators, output and other options}\label{sec:options} The package provides a set of keys can be set to change the separators used to select the relevant value in the JSON structure, the output that is generated from the JSON data as well as other things. \begin{macrodef} -|\JSONParseSet|{<key-value list>} +|\JSONParseSet|{<options>} \end{macrodef} -The commands \macro{\JSONParseSet} can be used to specify settings via key-value pairs (separated by commas). Keys that are presented here as a subkey (i.\,e. preceded by another key and a slash) can also be set using the syntax \macro{key={subkey}} and multiple subkeys belonging to one key can be combined using a comma as separator. The following keys are available: +The commands \macro{\JSONParseSet} can be used to specify options via key-value pairs (separated by commas). Keys that are presented here as a subkey (i.\,e. preceded by another key and a slash) can also be set using the syntax \macro{key={subkey}} and multiple subkeys belonging to one key can be combined using a comma as separator. Several user commands allow to pass keys directly which are then applied locally. The following keys are available: \begin{macrodef} separator/|child|={<string>} +separator/|array left|={<string>} +separator/|array right|={<string>} \end{macrodef} -With the key \macro{child sep}, the separator for child objects that is used in the syntax to select a specific value in the JSON data structure can be changed. Per default, the child separator is a dot (\macro{.}). Changing the separator can be useful if keys in the JSON structure already use these characters. +With the key \macro{separator/child}, the separator for child objects that is used in the syntax to select a specific value in the JSON data structure can be changed. Per default, the child separator is a dot (\macro{.}). Changing the separator can be useful if keys in the JSON structure already use these characters. + +With the keys \macro{separator/array left} and \macro{separator/array right}, the separators for arrays that are used in the syntax to select a specific value in the JSON data structure can be changed. Per default, the separators are square brackets (\macro{[} and \macro{]}). Changing the separators can be useful if keys in the JSON structure already use these characters. Changing these separators to curly braces (\macro{{}}) is not supported due to their grouping function in TeX. + +These keys can be set using \macro{\JSONParseSet}. They can also be set locally as option to the commands \macro{\JSONParse} and \macro{\JSONParseFromFile}. \begin{macrodef} -separator/|array left|={<string>} -separator/|array right|={<string>} +|zero-based| +|zero-based|={<boolean>} \end{macrodef} -With the keys \macro{array sep left} and \macro{array sep right}, the separators for arrays that are used in the syntax to select a specific value in the JSON data structure can be changed. Per default, the separators are square brackets (\macro{[} and \macro{]}). Changing the separators can be useful if keys in the JSON structure already use these characters. +If set (or explicitly set to \macro{true}), the key \macro{zero-based} sets the numbering of the index of array items to zero-based. If set to false, the indexing starts with one instead. Per default, the package uses zero-based indexing to resemble JavaScript notation. + +This key can be set using \macro{\JSONParseSet}. It can also be set locally as option to the commands \macro{\JSONParse} and \macro{\JSONParseFromFile}. \begin{macrodef} -replacement/|true|={<string>} -replacement/|false|={<string>} -replacement/|null|={<string>} +replace/|true|={<string>} +replace/|false|={<string>} +replace/|null|={<string>} \end{macrodef} -With the keys \macro{true}, \macro{false} and \macro{null}, the string that is typeset for true, false and null values can be changed. The default strings that are typeset are \macro{true}, \macro{false} and \macro{null} respectively. Only strings can be used as replacement. +With the keys \macro{replace/true}, \macro{replace/false} and \macro{replace/null}, the string that is typeset for true, false and null values can be changed. The default strings that are typeset are \macro{true}, \macro{false} and \macro{null} respectively. Only strings can be used as replacement. These replacements take place already during parsing. + +These keys can be set using \macro{\JSONParseSet}. They can also be set locally as option to the commands \macro{\JSONParse} and \macro{\JSONParseFromFile}. \begin{macrodef} -|array index zero-based| -|array index zero-based|={<boolean>} +replace/|backspace|={<string>} +replace/|formfeed|={<string>} +replace/|linefeed|={<string>} +replace/|carriage return|={<string>} +replace/|horizontal tab|={<string>} \end{macrodef} -If set (or explicitly set to \macro{true}), the key \macro{array index zero-based} sets the numbering of the index of array items to zero-based. If set to false, the indexing starts with one instead. Per default, the package uses zero-based indexing to resemble JavaScript notation. +These keys can be used to set the replacement text for the JSON escape sequences \macro{\b} (backspace), \macro{\f} (formfeed), \macro{\n} (linefeed), \macro{\r} (carriage return) and \macro{\t} (horizontal tab). The default replacement string is a space. Only strings can be used as replacement. These replacements take place only during typesetting. + +These keys can be set using \macro{\JSONParseSet}. They can also be set locally as option to the commands \macro{\JSONParseValue}, \macro{\JSONParseArrayValues} and \macro{\JSONParseArrayValuesMap}. \subsection{L3 commands} diff --git a/macros/latex/contrib/jsonparse/jsonparse.sty b/macros/latex/contrib/jsonparse/jsonparse.sty index 680e89bfca..514064d92a 100644 --- a/macros/latex/contrib/jsonparse/jsonparse.sty +++ b/macros/latex/contrib/jsonparse/jsonparse.sty @@ -10,15 +10,16 @@ % % This work has the LPPL maintenance status `maintained'. % -\ProvidesExplPackage {jsonparse} {2024-04-28} {0.8.3} +\ProvidesExplPackage {jsonparse} {2024-08-08} {0.8.7} {JSON Parse} \bool_new:N \l__jsonparse_debug_mode_bool -\keys_define:nn { jsonparse } { +\keys_define:nn { jsonparse / global } { debug .bool_set:N = \l__jsonparse_debug_mode_bool , debug .default:n = { true } , + debug .initial:n = { false } } -\ProcessKeyOptions [ jsonparse ] +\ProcessKeyOptions [ jsonparse / global ] \msg_new:nnn { jsonparse } { debug-info } { #1 @@ -43,7 +44,7 @@ \msg_new:nnn { jsonparse } { file-exists } { \msg_error_text:n { jsonparse } \iow_newline: - File ~ #1 ~ already ~ existing. + File ~ #1 ~ already ~ existing. } \msg_new:nnn { jsonparse } { escape-in-key } { @@ -56,6 +57,11 @@ Escape ~ character ~ #1 ~ not ~ found. } +\msg_new:nnn { jsonparse } { unknown-key } { + \msg_warning_text:n { jsonparse } \iow_newline: + Ignoring ~ unknown ~ key: ~ #1. +} + \msg_new:nnn { jsonparse } { saving-external } { \msg_info_text:n { jsonparse } \iow_newline: Saving ~ external ~ file: ~ #1. @@ -67,14 +73,21 @@ } % === - + +\str_new:N \l_jsonparse_externalize_prefix_str +\str_new:N \l_jsonparse_current_prop_str + +\tl_new:N \l__jsonparse_externalize_file_name_tl + \str_new:N \l__jsonparse_child_sep_str \str_new:N \l__jsonparse_array_sep_left_str \str_new:N \l__jsonparse_array_sep_right_str \str_new:N \l__jsonparse_true_str \str_new:N \l__jsonparse_false_str \str_new:N \l__jsonparse_null_str -\bool_new:N \l__jsonparse_array_index_zero_based_bool +\bool_new:N \l__jsonparse_zero_based_bool +\bool_new:N \l__jsonparse_rescan_bool +\bool_new:N \l__jsonparse_externalize_bool \str_new:N \l__jsonparse_backspace_str \str_new:N \l__jsonparse_formfeed_str @@ -82,6 +95,8 @@ \str_new:N \l__jsonparse_carriage_return_str \str_new:N \l__jsonparse_horizontal_tab_str +\clist_new:N \l__jsonparse_unused_keys_clist + \clist_new:N \l__jsonparse_escape_tex_chars_clist \clist_set:Nn \l__jsonparse_escape_tex_chars_clist { number_sign , @@ -98,35 +113,48 @@ \bool_new:c { l__jsonparse_escape_ #1 _bool } } -\keys_define:nn { jsonparse } { - array ~ index ~ zero-based .bool_set:N = \l__jsonparse_array_index_zero_based_bool , - array ~ index ~ zero-based .default:n = { true } , - array ~ index ~ zero-based .initial:n = { true } , - separator .code:n = { \keys_set:nn { jsonparse / separator } {#1} }, - separator / child .str_set:N = \l__jsonparse_child_sep_str , - separator / child .initial:n = { . } , - separator / array ~ left .str_set:N = \l__jsonparse_array_sep_left_str , - separator / array ~ left .initial:n = { [ } , - separator / array ~ right .str_set:N = \l__jsonparse_array_sep_right_str , - separator / array ~ right .initial:n = { ] } , - replacement .code:n = { \keys_set:nn { jsonparse / replacement } {#1} }, - replacement / true .str_set:N = \l__jsonparse_true_str , - replacement / true .initial:n = { true } , - replacement / false .str_set:N = \l__jsonparse_false_str , - replacement / false .initial:n = { false } , - replacement / null .str_set:N = \l__jsonparse_null_str , - replacement / null .initial:n = { null } , - replacement / backspace .str_set:N = \l__jsonparse_backspace_str , - replacement / backspace .initial:n = { ~ } , - replacement / formfeed .str_set:N = \l__jsonparse_formfeed_str , - replacement / formfeed .initial:n = { ~ } , - replacement / linefeed .str_set:N = \l__jsonparse_linefeed_str , - replacement / linefeed .initial:n = { ~ } , - replacement / carriage ~ return .str_set:N = \l__jsonparse_carriage_return_str , - replacement / carriage ~ return .initial:n = { ~ } , - replacement / horizontal ~ tab .str_set:N = \l__jsonparse_horizontal_tab_str , - replacement / horizontal ~ tab .initial:n = { ~ } , - escape .code:n = { +\keys_define:nn { jsonparse / parse } { + externalize .bool_set:N = \l__jsonparse_externalize_bool , + externalize .default:n = { true } , + externalize .initial:n = { false } , + externalize ~ prefix .str_set:N = \l_jsonparse_externalize_prefix_str , + externalize ~ prefix .initial:n = { } , + externalize ~ file ~ name .tl_set:N = \l__jsonparse_externalize_file_name_tl , + externalize ~ file ~ name .initial:n = { + \l_jsonparse_externalize_prefix_str \c_sys_jobname_str \c_underscore_str \l_jsonparse_current_prop_str + } , + separator .code:n = { \keys_set:nn { jsonparse / parse / separator } {#1} } , + separator / child .str_set:N = \l__jsonparse_child_sep_str , + separator / child .initial:n = { . } , + separator / array ~ left .str_set:N = \l__jsonparse_array_sep_left_str , + separator / array ~ left .initial:n = { [ } , + separator / array ~ right .str_set:N = \l__jsonparse_array_sep_right_str , + separator / array ~ right .initial:n = { ] } , + zero-based .bool_set:N = \l__jsonparse_zero_based_bool , + zero-based .default:n = { true } , + zero-based .initial:n = { true } , + replace .code:n = { \keys_set:nn { jsonparse / parse / replace } {#1} } , + replace / true .str_set:N = \l__jsonparse_true_str , + replace / true .initial:n = { true } , + replace / false .str_set:N = \l__jsonparse_false_str , + replace / false .initial:n = { false } , + replace / null .str_set:N = \l__jsonparse_null_str , + replace / null .initial:n = { null } +} + +\keys_define:nn { jsonparse / typeset } { + replace .code:n = { \keys_set:nn { jsonparse / typeset / replace } {#1} } , + replace / backspace .str_set:N = \l__jsonparse_backspace_str , + replace / backspace .initial:n = { ~ } , + replace / formfeed .str_set:N = \l__jsonparse_formfeed_str , + replace / formfeed .initial:n = { ~ } , + replace / linefeed .str_set:N = \l__jsonparse_linefeed_str , + replace / linefeed .initial:n = { ~ } , + replace / carriage ~ return .str_set:N = \l__jsonparse_carriage_return_str , + replace / carriage ~ return .initial:n = { ~ } , + replace / horizontal ~ tab .str_set:N = \l__jsonparse_horizontal_tab_str , + replace / horizontal ~ tab .initial:n = { ~ } , + escape .code:n = { \str_case:nnF {#1} { { all } { \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist { @@ -168,11 +196,27 @@ } } } + } , + escape .groups:n = { output } , + rescan .bool_set:N = \l__jsonparse_rescan_bool , + rescan .default:n = { true } , + rescan .initial:n = { true } , + rescan .groups:n = { output } +} + +\cs_new:Npn \__jsonparse_warning_unused_keys: { + \clist_map_inline:Nn \l__jsonparse_unused_keys_clist { + \msg_warning:nne { jsonparse } { unknown-key } { + ##1 + } } } \NewDocumentCommand { \JSONParseSet } { m } { - \keys_set:nn { jsonparse } {#1} + \keys_set_known:nnN { jsonparse / global } {#1} \l__jsonparse_unused_keys_clist + \keys_set_known:noN { jsonparse / parse } { \l__jsonparse_unused_keys_clist } \l__jsonparse_unused_keys_clist + \keys_set_known:noN { jsonparse / typeset } { \l__jsonparse_unused_keys_clist } \l__jsonparse_unused_keys_clist + \__jsonparse_warning_unused_keys: } % === @@ -181,6 +225,7 @@ \cs_new:Npn \str_casefold:n { \str_foldcase:n } } +\cs_generate_variant:Nn \file_input:n { e } \cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nne } \cs_generate_variant:Nn \tl_range:nnn { nne , nen } \cs_generate_variant:Nn \tl_range:Nnn { Nne , Nen } @@ -193,14 +238,20 @@ \cs_generate_variant:Nn \str_case_e:nn { en } \cs_generate_variant:Nn \str_casefold:n { o } \cs_generate_variant:Nn \str_head_ignore_spaces:n { o } +\cs_generate_variant:Nn \str_set:Nn { Ne } \cs_generate_variant:Nn \prop_gput:Nnn { Nee } \cs_generate_variant:Nn \prop_item:Nn { Ne , ce } \cs_generate_variant:Nn \prop_put:Nnn { Nen , Nee } +\cs_generate_variant:Nn \keys_set_known:nnN { noN } \cs_generate_variant:Nn \iow_now:Nn { Ne } +\cs_generate_variant:Nn \iow_open:Nn { Ne } \cs_generate_variant:Nn \msg_error:nnn { nno } \cs_generate_variant:Nn \msg_error:nnnn { nnoo } +\cs_generate_variant:Nn \msg_info:nnn { nne } \cs_generate_variant:Nn \msg_log:nnn { nne } +\cs_generate_variant:Nn \msg_warning:nnn { nne } +\prg_generate_conditional_variant:Nnn \file_if_exist:n { e } { T , TF } \prg_generate_conditional_variant:Nnn \tl_if_eq:nn { en } { T } \prg_generate_conditional_variant:Nnn \tl_if_head_eq_charcode:nN { oN } { T , TF } \prg_generate_conditional_variant:Nnn \tl_if_in:nn { nV } { F } @@ -224,7 +275,7 @@ \int_new:N \l__jsonparse_array_count_last_int \bool_new:N \l__jsonparse_prop_map_first_bool -\bool_new:N \l__jsonparse_load_external_bool +\bool_new:N \l__jsonparse_externalize_load_bool \ior_new:N \l__jsonparse_json_ior \iow_new:N \g__jsonparse_externalize_iow @@ -366,10 +417,10 @@ \bool_if:NT \l__jsonparse_debug_mode_bool { \msg_log:nnn { jsonparse } { debug-info } { (arr ~ begin) - } + } } \int_zero:N \l__jsonparse_array_index_int - \bool_if:NT \l__jsonparse_array_index_zero_based_bool { + \bool_if:NT \l__jsonparse_zero_based_bool { \int_decr:N \l__jsonparse_array_index_int } \tl_set_eq:NN \l__jsonparse_object_array_key_tl \l__jsonparse_key_tl @@ -412,7 +463,7 @@ \tl_if_head_eq_charcode:oNTF { \l__jsonparse_remainder_tl } : { \tl_remove_once:NV \l__jsonparse_remainder_tl \c_colon_str \tl_set:Ne \l__jsonparse_key_tl { \l__jsonparse_prefix_tl #1 } - } { + } { \tl_set:Nn \l__jsonparse_val_tl {#1} \prop_gput:Nee \g_jsonparse_entries_prop { \l__jsonparse_key_tl } { \l__jsonparse_val_tl } @@ -515,7 +566,7 @@ \tl_if_empty:NF \l__jsonparse_remainder_tl { \exp_args:No \jsonparse_parse:n { \l__jsonparse_remainder_tl } } -} +} \cs_new_protected:Npn \jsonparse_filter:Nn #1#2 { \prop_clear:N \l__jsonparse_temp_prop @@ -542,98 +593,117 @@ \prop_if_exist:NF #1 { \prop_new:N #1 } - \prop_gput:Nnn #1 { #2 } { #3 } + \prop_gput:Nnn #1 {#2} {#3} } \cs_new:Npn \__jsonparse_externalize:Nn #1#2 { - \file_if_exist:nTF {#2} { - \msg_error:nnn { jsonparse } { file-exists } + \file_if_exist:eTF {#2} { + \msg_error:nne { jsonparse } { file-exists } {#2} } { - \iow_open:Nn \g__jsonparse_externalize_iow {#2} + \iow_open:Ne \g__jsonparse_externalize_iow {#2} \prop_map_inline:Nn #1 { \iow_now:Nn \g__jsonparse_externalize_iow { \JSONParsePut {#1} {##1} {##2} } } \iow_close:N \g__jsonparse_externalize_iow - \msg_info:nnn { jsonparse } { saving-external } + \msg_info:nne { jsonparse } { saving-external } {#2} } } % === -\NewDocumentCommand { \JSONParse } { o m +v } { - \bool_set_false:N \l__jsonparse_load_external_bool - \tl_if_novalue:nF {#1} { - \file_if_exist:nT { #1 .jsonparse } { - \bool_set_true:N \l__jsonparse_load_external_bool - } +\cs_new:Npn \__json_nested_construct_cs:Nnn #1 #2 #3 { + \cs_set:Npn #1 #2 ##1 #3 #2 ##2 #3 { + \prop_item:ce {##1} {##2} } - \bool_if:NTF \l__jsonparse_load_external_bool { - \msg_info:nnn { jsonparse } { loading-external } - { #1 .jsonparse } - \file_input:n { #1 .jsonparse } - } { - \prop_new:N #2 - \tl_gclear:N \g__jsonparse_json_tl - \group_begin: - \cs_set:Npn \" { \exp_not:N \" } - \cs_set:Npn \/ { \exp_not:N \/ } - \cs_set:Npn \\ { \exp_not:N \\ } - \cs_set:Npn \b { \exp_not:N \b } - \cs_set:Npn \f { \exp_not:N \f } - \cs_set:Npn \n { \exp_not:N \n } - \cs_set:Npn \r { \exp_not:N \r } - \cs_set:Npn \t { \exp_not:N \t } - \cs_set:Npn \u { \exp_not:N \u } - \cs_set:Npn \x [ ##1 ] [ ##2 ] { \prop_item:ce {##1} {##2} } - \tl_gset_rescan:Nne \g__jsonparse_json_tl { \cctab_select:N \c__jsonparse_json_escape_cctab } {#3} - \exp_args:NNe \jsonparse_parse_to_prop:Nn #2 { \g__jsonparse_json_tl } - \group_end: - \tl_if_novalue:nF {#1} { - \__jsonparse_externalize:Nn #2 { #1 .jsonparse } +} +\cs_generate_variant:Nn \__json_nested_construct_cs:Nnn { Noo } + +\NewDocumentCommand { \JSONParse } { O{} m +v } { + \group_begin: + \str_set:Ne \l_jsonparse_current_prop_str { \cs_to_str:N #2 } + \keys_set_known:nnN { jsonparse / global } {#1} \l__jsonparse_unused_keys_clist + \keys_set_known:noN { jsonparse / parse } { \l__jsonparse_unused_keys_clist } \l__jsonparse_unused_keys_clist + \__jsonparse_warning_unused_keys: + \bool_set_false:N \l__jsonparse_externalize_load_bool + \bool_if:NT \l__jsonparse_externalize_bool { + \file_if_exist:eT { \l__jsonparse_externalize_file_name_tl .jsonparse } { + \bool_set_true:N \l__jsonparse_externalize_load_bool + } } - } + \bool_if:NTF \l__jsonparse_externalize_load_bool { + \msg_info:nne { jsonparse } { loading-external } + { \l__jsonparse_externalize_file_name_tl .jsonparse } + \file_input:e { \l__jsonparse_externalize_file_name_tl .jsonparse } + } { + \prop_new:N #2 + \tl_gclear:N \g__jsonparse_json_tl + \group_begin: + \cs_set:Npn \" { \exp_not:N \" } + \cs_set:Npn \/ { \exp_not:N \/ } + \cs_set:Npn \\ { \exp_not:N \\ } + \cs_set:Npn \b { \exp_not:N \b } + \cs_set:Npn \f { \exp_not:N \f } + \cs_set:Npn \n { \exp_not:N \n } + \cs_set:Npn \r { \exp_not:N \r } + \cs_set:Npn \t { \exp_not:N \t } + \cs_set:Npn \u { \exp_not:N \u } + \__json_nested_construct_cs:Noo \x \c_left_brace_str \c_right_brace_str + \tl_gset_rescan:Nne \g__jsonparse_json_tl { \cctab_select:N \c__jsonparse_json_escape_cctab } {#3} + \exp_args:NNe \jsonparse_parse_to_prop:Nn #2 { \g__jsonparse_json_tl } + \group_end: + \bool_if:NT \l__jsonparse_externalize_bool { + \__jsonparse_externalize:Nn #2 { \l__jsonparse_externalize_file_name_tl .jsonparse } + } + } + \group_end: } -\NewDocumentCommand { \JSONParseFromFile } { o m m } { +\NewDocumentCommand { \JSONParseFromFile } { O{} m m } { \file_if_exist:nF {#3} { \msg_error:nnn { jsonparse } { file-not-found } {#3} } - \bool_set_false:N \l__jsonparse_load_external_bool - \tl_if_novalue:nF {#1} { - \file_if_exist:nT { #1 .jsonparse } { - \bool_set_true:N \l__jsonparse_load_external_bool + \group_begin: + \str_set:Ne \l_jsonparse_current_prop_str { \cs_to_str:N #2 } + \keys_set_known:nnN { jsonparse / global } {#1} \l__jsonparse_unused_keys_clist + \keys_set_known:noN { jsonparse / parse } { \l__jsonparse_unused_keys_clist } \l__jsonparse_unused_keys_clist + \__jsonparse_warning_unused_keys: + \bool_set_false:N \l__jsonparse_externalize_load_bool + \bool_if:NT \l__jsonparse_externalize_bool { + \file_if_exist:eT { \l__jsonparse_externalize_file_name_tl .jsonparse } { + \bool_set_true:N \l__jsonparse_externalize_load_bool + } } - } - \bool_if:NTF \l__jsonparse_load_external_bool { - \msg_info:nnn { jsonparse } { loading-external } - { #1 .jsonparse } - \file_input:n { #1 .jsonparse } - } { - \prop_new:N #2 - \tl_gclear:N \g__jsonparse_json_tl - \group_begin: - \cs_set:Npn \" { \exp_not:N \" } - \cs_set:Npn \/ { \exp_not:N \/ } - \cs_set:Npn \\ { \exp_not:N \\ } - \cs_set:Npn \b { \exp_not:N \b } - \cs_set:Npn \f { \exp_not:N \f } - \cs_set:Npn \n { \exp_not:N \n } - \cs_set:Npn \r { \exp_not:N \r } - \cs_set:Npn \t { \exp_not:N \t } - \cs_set:Npn \u { \exp_not:N \u } - \cs_set:Npn \x [ ##1 ] [ ##2 ] { \prop_item:ce {##1} {##2} } - \file_get:nnN {#3} { \cctab_select:N \c__jsonparse_json_escape_cctab } \g__jsonparse_json_tl - \exp_args:NNe \jsonparse_parse_to_prop:Nn #2 { \g__jsonparse_json_tl } - \group_end: - \tl_if_novalue:nF {#1} { - \__jsonparse_externalize:Nn #2 { #1 .jsonparse } + \bool_if:NTF \l__jsonparse_externalize_load_bool { + \msg_info:nne { jsonparse } { loading-external } + { \l__jsonparse_externalize_file_name_tl .jsonparse } + \file_input:e { \l__jsonparse_externalize_file_name_tl .jsonparse } + } { + \prop_new:N #2 + \tl_gclear:N \g__jsonparse_json_tl + \group_begin: + \cs_set:Npn \" { \exp_not:N \" } + \cs_set:Npn \/ { \exp_not:N \/ } + \cs_set:Npn \\ { \exp_not:N \\ } + \cs_set:Npn \b { \exp_not:N \b } + \cs_set:Npn \f { \exp_not:N \f } + \cs_set:Npn \n { \exp_not:N \n } + \cs_set:Npn \r { \exp_not:N \r } + \cs_set:Npn \t { \exp_not:N \t } + \cs_set:Npn \u { \exp_not:N \u } + \cs_set:Npn \x [ ##1 ] [ ##2 ] { \prop_item:ce {##1} {##2} } + \file_get:nnN {#3} { \cctab_select:N \c__jsonparse_json_escape_cctab } \g__jsonparse_json_tl + \exp_args:NNe \jsonparse_parse_to_prop:Nn #2 { \g__jsonparse_json_tl } + \group_end: + \bool_if:NT \l__jsonparse_externalize_bool { + \__jsonparse_externalize:Nn #2 { \l__jsonparse_externalize_file_name_tl .jsonparse } + } } - } + \group_end: } \NewExpandableDocumentCommand { \JSONParseExpandableValue } { m m } { @@ -682,12 +752,16 @@ \group_end: } -\NewDocumentCommand { \JSONParseValue } { s m m } { - \bool_if:NTF #1 { - \prop_item:Ne #2 {#3} - } { - \exp_args:Ne \__jsonparse_rescan:n { \prop_item:Ne #2 {#3} } - } +\NewDocumentCommand { \JSONParseValue } { O{} m m } { + \group_begin: + \keys_set_known:nn { jsonparse / typeset } {#1} \l__jsonparse_unused_keys_clist + \__jsonparse_warning_unused_keys: + \bool_if:NTF \l__jsonparse_rescan_bool { + \exp_args:Ne \__jsonparse_rescan:n { \prop_item:Ne #2 {#3} } + } { + \prop_item:Ne #2 {#3} + } + \group_end: } \NewDocumentCommand { \JSONParseKeys } { m m } { @@ -700,7 +774,7 @@ \tl_if_in:nVF {##1} \l__jsonparse_child_sep_str { \bool_if:NTF \l__jsonparse_prop_map_first_bool { \bool_set_false:N \l__jsonparse_prop_map_first_bool - } { + } { \tl_put_right:Nn \l__jsonparse_temp_tl { , } } \tl_put_right:Nn \l__jsonparse_temp_tl { " ##1 " } @@ -710,8 +784,10 @@ \tl_set_eq:NN #2 \l__jsonparse_temp_tl } -\NewDocumentCommand { \JSONParseArrayValues } { s m m O{} m } { +\NewDocumentCommand { \JSONParseArrayValues } { O{} m m O{} m } { \group_begin: + \keys_set_known:nn { jsonparse / typeset } {#1} \l__jsonparse_unused_keys_clist + \__jsonparse_warning_unused_keys: \tl_set:Nn \l__jsonparse_temp_tl {#2} \jsonparse_filter:Nn \l__jsonparse_temp_tl {#3} \bool_set_true:N \l__jsonparse_prop_map_first_bool @@ -721,13 +797,13 @@ } {#4} { \bool_if:NTF \l__jsonparse_prop_map_first_bool { \bool_set_false:N \l__jsonparse_prop_map_first_bool - } { + } { #5 } - \bool_if:NTF #1 { - ##2 - } { + \bool_if:NTF \l__jsonparse_rescan_bool { \__jsonparse_rescan:n {##2} + } { + ##2 } } } @@ -759,10 +835,12 @@ \tl_new:N \JSONParseArrayIndex \tl_new:N \JSONParseArrayKey -\tl_new:N \JSONParseArrayValue +\tl_new:N \JSONParseArrayValue -\NewDocumentCommand { \JSONParseArrayValuesMap } { s m m O{} m } { +\NewDocumentCommand { \JSONParseArrayValuesMap } { O{} m m O{} m } { \group_begin: + \keys_set_known:nn { jsonparse / typeset } {#1} \l__jsonparse_unused_keys_clist + \__jsonparse_warning_unused_keys: \jsonparse_filter:Nn #2 {#3} \prop_map_inline:Nn #2 { \str_if_eq:enT { @@ -771,10 +849,10 @@ \int_incr:N \l__jsonparse_array_index_int \tl_set:Ne \JSONParseArrayIndex { \__jsonparse_get_array_index:w ##1 \q_stop } \tl_set:Nn \JSONParseArrayKey {##1} - \bool_if:NTF #1 { - \tl_set:Nn \JSONParseArrayValue { \prop_item:Nn #2 {##1} } - } { + \bool_if:NTF \l__jsonparse_rescan_bool { \tl_set:Nn \JSONParseArrayValue { \exp_args:Ne \__jsonparse_rescan:n { \prop_item:Nn #2 {##1} } } + } { + \tl_set:Nn \JSONParseArrayValue { \prop_item:Nn #2 {##1} } } \use:c {#5} } diff --git a/macros/latex/contrib/litesolution/README.md b/macros/latex/contrib/litesolution/README.md index f597d5fb09..452c7e9de9 100644 --- a/macros/latex/contrib/litesolution/README.md +++ b/macros/latex/contrib/litesolution/README.md @@ -10,7 +10,7 @@ This work may be distributed and/or modified under the conditions of the [LaTeX This work has the LPPL maintenance status `maintained`. -The Current Maintainer of this work is [Mingyu Hsia](https://www.ctan.org/author/xia-my). +The Current Maintainer of this work is [Mingyu XIA](https://www.ctan.org/author/xia-my). ## Derivative Works diff --git a/macros/latex/contrib/litesolution/doc/figure/universe.pdf b/macros/latex/contrib/litesolution/doc/figure/universe.pdf Binary files differindex 6ebe5201dc..244c7770a7 100644 --- a/macros/latex/contrib/litesolution/doc/figure/universe.pdf +++ b/macros/latex/contrib/litesolution/doc/figure/universe.pdf diff --git a/macros/latex/contrib/litesolution/doc/figure/universe.tex b/macros/latex/contrib/litesolution/doc/figure/universe.tex index f2fa69eaab..7cce50ecd2 100644 --- a/macros/latex/contrib/litesolution/doc/figure/universe.tex +++ b/macros/latex/contrib/litesolution/doc/figure/universe.tex @@ -5,7 +5,7 @@ \usephysicsmodule{ab.legacy} \usetikzlibrary{tikzmark} \tikzset{every node/.style={align=center,DarkSlateGray!30}, - every path/.style={DarkSlateGray!30,line cap=round}} + every path/.style={DarkSlateGray!30,line cap=round}} \begin{document}\tikz{ \node [above right] at (0,0) {$\color{DarkSlateGray!30} diff --git a/macros/latex/contrib/litesolution/doc/litesolution.pdf b/macros/latex/contrib/litesolution/doc/litesolution.pdf Binary files differindex 8d9efb2ba3..eb14917941 100644 --- a/macros/latex/contrib/litesolution/doc/litesolution.pdf +++ b/macros/latex/contrib/litesolution/doc/litesolution.pdf diff --git a/macros/latex/contrib/litesolution/doc/litesolution.tex b/macros/latex/contrib/litesolution/doc/litesolution.tex index 678e4cd4aa..34d82694a2 100644 --- a/macros/latex/contrib/litesolution/doc/litesolution.tex +++ b/macros/latex/contrib/litesolution/doc/litesolution.tex @@ -1,17 +1,34 @@ +%% ****************************************************** +%% * This work may be distributed and/or modified under * +%% * the conditions of the LaTeX Project Public License * +%% * http://www.latex-project.org/lppl.txt * +%% * either version 1.3c of this license or any later * +%% * version. * +%% ****************************************************** \documentclass[mtpro2,twoside,openany]{litesolution} - \usepackage[listings]{tcolorbox} +\usepackage{pmboxdraw} \lstset{language=[LaTeX]TeX,basicstyle=\small\ttfamily,breaklines=true,columns=flexible} -\title{\sffamily The \pkg{LiteSolution} Class} -\subtitle{\sffamily\scshape Hangzhou Dianzi University} -\bioinfo{Mingyu Hsia (\mailto{xiamyphys@hdu.edu.cn})\quad|\quad\today\quad|\quad Version 2.2b} -\cover[checkerboard]{schrodinger}\coverhead[3]{universe} +\coverset{ + title = \sffamily The \pkg{LiteSolution} Class, + subtitle = \sffamily\scshape Hangzhou Dianzi University, + bioinfo = Mingyu XIA (\mailto{xiamyphys@gmail.com})\quad|\quad Version 2.4a, + covercolor = DarkSeaGreen, + coverhead = universe, + coverhead.rotate = 3, + cover = schrodinger, + cover.pattern = sixpointed stars +} \begin{document} -\maketitle[DarkSlateGray] -\frontmatter\tableofcontents\mainmatter +\maketitle + +\frontmatter +\tableofcontents +\mainmatter + \chapterimage{\UPFadingImage*[trim={0 {.9\paperheight} 0 0},clip]{Beautiful-realities}} \chapter{Introduction to the \pkg{LiteSolution} Class} @@ -20,7 +37,7 @@ This is the document for the \pkg{LiteSolution} class, which is designed for typesetting solutions of problems in exams, textbooks, etc. -Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@hdu.edu.cn}{\ttfamily xiamyphys@hdu.edu.cn} or \href{https://github.com/xiamyphys/litesolution}{GitHub}. +Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com} or \href{https://github.com/xiamyphys/litesolution}{GitHub}. \subsection{Installing \pkg{LiteSolution} and loading it} @@ -39,18 +56,18 @@ The test environments are macOS + Mac\hologo{TeX} 2024 / Overleaf / Ubuntu 22.04 \section{Global Options of this Class} \begin{verbatim} - \documentclass[<options>]{litesolution} + \documentclass[⟨options⟩]{litesolution} \end{verbatim} \subsection{The \mode{answer} option} -The \mode{hideanswer} mode can hide contents in \cmd{solution} environment and \cmd{ans} command. +The \mode{hideanswer} mode can hide contents in the \cmd{solution} environment and \cmd{ans} command, and make the effect of \cmd{emph} weaker. \subsection{The \mode{math} option} The \mode{mtpro2}, \mode{newtx} and \mode{newtxsf} modes can format the font of formulas in the document. Please check if mtpro2 font has been installed on your computer correctly before using \mode{mtpro2} mode. -\section{Related Packages} +\section{Derivative Works} \begin{description} \item[Package \pkg{notebeamer}] provides macros for inputting slides on note papers quickly. \item[Package \pkg{fadingimage}] provides macros for inputting full width picture at the edges of pages quickly. @@ -63,27 +80,23 @@ The \mode{mtpro2}, \mode{newtx} and \mode{newtxsf} modes can format the font of \subsection{The cover page configurations} \begin{verbatim} - \title{<content>} \subtitle{<content>} - \bioinfo{<content>} \cover[<pattern>]{<image>} - \coverhead[<angle>]{<image>} \coverhead*[<angle>]{<content>} - - \begin{document} \maketitle[<color>] -\end{verbatim} - -\begin{verbatim} - \title{\sffamily The \pkg{LiteSolution} Class} - \subtitle{\sffamily\scshape Hangzhou Dianzi University} - \bioinfo{Mingyu Hsia (\mailto{xiamyphys@hdu.edu.cn}) - \quad|\quad\today\quad|\quad Version 2.2b} - \cover[checkerboard]{schrodinger} \coverhead[5]{universe} - - \begin{document} \maketitle[Midnightblue] + \coverset{ + title = \sffamily The \pkg{LiteSolution} Class, + subtitle = \sffamily\scshape Hangzhou Dianzi University, + bioinfo = Mingyu XIA (\mailto{xiamyphys@gmail.com})\quad|\quad + Version 2.4a, + covercolor = DarkSeaGreen, + coverhead = universe, + coverhead.rotate = 3, + cover = schrodinger, + cover.pattern = sixpointed stars + } \end{verbatim} \subsection{The chapter head configurations} \begin{verbatim} - \chapterimage {<insert image macro>} + \chapterimage {⟨insert image macro⟩} \end{verbatim} This command can assign the format of the image at every chapters begin and you can adjust the format of the image with the \pkg{fadingimage} package. @@ -94,24 +107,32 @@ This template has preset many packages. The following packages are the common on \begin{table}[htbp] \centering\small - \begin{tabular}{l l l l l l l l} + \begin{tabularx}{.96\linewidth}{*{6}{X}} \toprule - \pkg{amsthm} & \pkg{amssymb} & \pkg{bm} & \pkg{booktabs} & - \pkg{cancel} & \pkg{caption} & \pkg{circuitikz} & \pkg{datetime} \\ + \pkg{amsthm} & \pkg{amssymb} & \pkg{bm} & + \pkg{booktabs} & \pkg{cancel} & \pkg{caption}\\ + \midrule + \pkg{circuitikz} & \pkg{datetime} & \pkg{derivative} & + \pkg{diagbox} & \pkg{enumitem} & \pkg{esvect}\\ + \midrule + \pkg{extarrows} & \pkg{fadingimage} & \pkg{fancyhdr} & + \pkg{fixdif} & \pkg{fontawesome5}& \pkg{geometry}\\ \midrule - \pkg{derivative} & \pkg{diagbox} & \pkg{esvect} & \pkg{extarrows} & - \pkg{fadingimage} & \pkg{fancyhdr} & \pkg{fixdif} & \pkg{fontawesome5} \\ + \pkg{graphicx} & \pkg{hyperref} & \pkg{indentfirst} & + \pkg{lipsum} & \scriptsize\pkg{magicwatermark} & \pkg{mathtools}\\ \midrule - \pkg{geometry} & \pkg{graphics} & \pkg{graphicx} & \pkg{hyperref} & - \pkg{indentfirst} & \pkg{lipsum} & \pkg{mathtools} & \pkg{multicol} \\ + \pkg{mhchem} & \pkg{multicol} & \pkg{multirow} & + \pkg{nicematrix} & \pkg{notebeamer} & \pkg{paracol}\\ \midrule - \pkg{multirow} & \pkg{nicematrix} & \pkg{notebeamer} & \pkg{paracol} & - \pkg{pgfplots} & \pkg{physics2} & \pkg{qrcode} & \pkg{refstyle} \\ + \pkg{pgfplots} & \pkg{physics2} & \pkg{qrcode} & + \pkg{refstyle} & \pkg{setspace} & \pkg{siunitx}\\ \midrule - \pkg{setspace} & \pkg{siunitx} & \pkg{tabularx} & \pkg{tasks} & - \pkg{wallpaper} & \pkg{xcolor} & \pkg{xeCJK} & \pkg{xfrac} \\ + \pkg{subcaption} & \pkg{tabularx} & \pkg{soul} & + \pkg{tasks} & \pkg{ulem} & \pkg{xcolor}\\ + \midrule + \pkg{xeCJK} & \pkg{xeCJKfntef} & \pkg{xfrac}\\ \bottomrule - \end{tabular} + \end{tabularx} \end{table} \section{Preset Commands} @@ -119,7 +140,7 @@ This template has preset many packages. The following packages are the common on \subsection{The \cmd{ans} command} \begin{verbatim} - \ans {<contents>} + \ans {⟨contents⟩} \end{verbatim} This command can underline the answer, and if mode \mode{noans} is enabled the answer will be hidden. @@ -127,11 +148,21 @@ This command can underline the answer, and if mode \mode{noans} is enabled the a \subsection{The \cmd{solute} command} \begin{verbatim} - \solute {<number>} \solute* {<contents>} + \solute {⟨number⟩} \solute* {⟨contents⟩} \end{verbatim} This command can create a fixable answer box when the mode \mode{noans} is enabled. +\subsection{The \cmd{emph} command} + +\begin{verbatim} + \emph {⟨content⟩} \emph* {⟨content⟩} +\end{verbatim} + +\emph{The Quick Brown Fox Jumps Over the Lazy Dog: non-hideanswer mode} + +\emph*{The Quick Brown Fox Jumps Over the Lazy Dog: hideanswer mode} + \subsection{Other preset commands} \begin{verbatim} @@ -144,7 +175,7 @@ This command can create a fixable answer box when the mode \mode{noans} is enabl \subsection{The \cmd{problem} environment} \begin{tcblisting}{sidebyside,colback=DarkGreen!5,colframe=DarkGreen!80} -\begin{problem}[<Keywords>]\leavevmode +\begin{problem}[Keywords]\leavevmode \begin{tasks}(2) \task Choice A \task[\true] Choice B \task Choice C \task Choice D @@ -167,16 +198,9 @@ This command can create a fixable answer box when the mode \mode{noans} is enabl \begin{note} We note that. \end{note} -\end{tcblisting} +\end{tcblisting} \end{minipage} -\section{Equation test} - -\[\begin{cases} - \i\hbar\partial_t\psi(\mathbf x,t)=\ab(-\frac{\hbar^2}{2m}\bm\nabla^2+V)\\ - \i\hbar\partial_t\psi(\mathbf x,t)=-(\i\hbar c\bm\alpha\cdot\bm\nabla+\beta mc^2)\psi(\mathbf x,t) -\end{cases}\] - \section*{Original Code for the Cover Head} \setstretch{1.15} diff --git a/macros/latex/contrib/litesolution/tex/litesolution.cls b/macros/latex/contrib/litesolution/tex/litesolution.cls index 0f59d89630..2b7a3ecb34 100644 --- a/macros/latex/contrib/litesolution/tex/litesolution.cls +++ b/macros/latex/contrib/litesolution/tex/litesolution.cls @@ -1,5 +1,5 @@ %% *********************************************************** -%% Copyright 2024 by Mingyu Hsia <xiamyphys@hdu.edu.cn> * +%% Copyright 2024 by Mingyu XIA <xiamyphys@gmail.com> * %% * %% This work may be distributed and/or modified under * %% the conditions of the LaTeX Project Public License * @@ -11,19 +11,18 @@ %% * %% This work has the LPPL maintenance status `maintained'. * %% * -%% The Current Maintainer of this work is Mingyu Hsia. * +%% The Current Maintainer of this work is Mingyu XIA. * %% * %% This work consists of the files litesolution.cls, * %% and README.md. * -%% available at https://github.com/xiamyphys/litsolution * +%% available at https://github.com/xiamyphys/litesolution * %% *********************************************************** % !Mode:: "TeX:UTF-8" \NeedsTeXFormat{LaTeX2e} \PassOptionsToPackage{no-math}{fontspec} \PassOptionsToPackage{svgnames}{xcolor} -\ProvidesClass{litesolution}[2024/05/07 v2.2b LiteSolution document class] -\RequirePackage{kvoptions} -\RequirePackage{etoolbox} +\ProvidesClass{litesolution}[2024/08/15 v2.4a LiteSolution document class] +\RequirePackage{kvoptions,etoolbox,keyval} \SetupKeyvalOptions{family=LITE, prefix=LITE@, setkeys=\kvsetkeys} \def\ekv#1{\kvsetkeys{LITE}{#1}} @@ -39,7 +38,7 @@ \ProcessKeyvalOptions*\relax \LoadClass[letterpaper,11pt]{book} -\RequirePackage{setspace,datetime,caption,booktabs,multicol,diagbox,paracol} +\RequirePackage{setspace,datetime,tabularx,caption,subcaption,anyfontsize,booktabs,multicol,diagbox,paracol} \linespread{1.3} \ddmmyyyydate \captionsetup{labelsep=period,labelfont={bf,sf},font=small} @@ -52,18 +51,18 @@ \setlist[enumerate]{itemsep=.5ex} \setlist[itemize]{itemsep=.5ex} \RequirePackage[notelinecolor=MidnightBlue,notemargin=.75in]{notebeamer} -\geometry{margin=1in} +\geometry{margin=1in,headheight=14pt} \RequirePackage[nokeyprefix]{refstyle} \newref{eq}{refcmd=(\ref{#1}),name={\sffamily eq.~},Name={\sffamily Eq.~}} \newref{fig}{name={\sffamily fig.~},Name={\sffamily Fig.~}} \newref{tab}{name={\sffamily tab.~},Name={\sffamily Tab.~}} -\RequirePackage{graphics,graphicx,wallpaper,pagecolor} +\RequirePackage{graphicx,magicwatermark,pagecolor} \graphicspath{{./figure/}{./figures/}{./image/}{./images/}{./graphics/}{./graphic/}{./pictures/}{./picture/}} \RequirePackage{ifxetex} \ifXeTeX - \RequirePackage[quiet]{xeCJK} + \RequirePackage[quiet,CJKmath,CheckSingle,PlainEquation]{xeCJK} \RequirePackage{zhlipsum} \setlength{\parindent}{2em} \fi @@ -82,8 +81,7 @@ \RequirePackage[mono=false]{libertine} }{\relax} \let\openbox\relax\def\hmmax{0}\def\bmmax{0} -\RequirePackage{amsthm,amssymb,mathtools,physics2,bm,fixdif,derivative,cancel,extarrows,siunitx,xfrac,nicematrix} -\renewcommand\qedsymbol{$\color{gray}\blacksquare$} +\RequirePackage{amssymb,mathtools,physics2,bm,fixdif,derivative,cancel,extarrows,siunitx,xfrac,nicematrix} \usephysicsmodule{ab,braket,diagmat,doubleprod,xmat,ab.legacy,op.legacy} \RequirePackage[e]{esvect} \let\vec\vv @@ -109,6 +107,7 @@ \AddToHook{cmd/faIcon/after}{\endgroup} \RequirePackage{circuitikz,pgfplots,fadingimage} +\RequirePackage[version=4]{mhchem} \usetikzlibrary{arrows,tikzmark,patterns,calc,angles,quotes,intersections} \tikzset{>=stealth', every picture/.append style={% @@ -133,56 +132,77 @@ \def\mode#1{\textcolor{Indigo}{\textsf{#1}}} \def\cmd#1{\textcolor{MidnightBlue}{\texttt{\string#1}}} -\def\subtitle#1{\gdef\@subtitle{#1}} -\def\bioinfo#1{\gdef\@bioinfo{#1}} -\NewDocumentCommand\coverhead{ O{0} m }{ - \gdef\@coverheadrotate{#1}\gdef\@coverhead{#2} +\define@key{coverset}{title}{\gdef\@title{#1}} +\define@key{coverset}{subtitle}{\gdef\@subtitle{#1}} +\define@key{coverset}{bioinfo}{\gdef\@bioinfo{#1}} +\define@key{coverset}{covercolor}{\gdef\@covercolor{#1}} +\define@key{coverset}{coverhead}{\gdef\@coverhead{#1}} +\define@key{coverset}{coverhead.rotate}{\gdef\@coverheadrotate{#1}} +\define@key{coverset}{cover}{\gdef\@cover{#1}} +\define@key{coverset}{cover.pattern}{\gdef\@coverpattern{#1}} +\def\coverset#1{ + \setkeys{coverset}{#1} + \ifcsname @covercolor\endcsname + \relax + \else + \gdef\@covercolor{DarkSlateGray} + \fi } -\NewDocumentCommand\cover{ o m }{ - \IfValueT{#1}{\gdef\@coverpattern{#1}} - \gdef\@cover{#2}} -\RenewDocumentCommand\maketitle{O{MidnightBlue}}{ + +\renewcommand*\maketitle{ \begin{titlepage} - \newgeometry{margin=0in}\newpagecolor{#1!15} + \newgeometry{margin=0in} + \newpagecolor{\@covercolor!15} + \gdef\@covercolor{DarkSlateGray} \tikz[remember picture,overlay]{ - \ifcsname @coverhead\endcsname - \node [rotate=\@coverheadrotate] at ($(current page.center)+(0,.35*\paperheight)$) {\includegraphics[width=\paperwidth]{\@coverhead}}; - \fi \fill [white,opacity=.5] ($(current page.south west)+(.2*\paperwidth,.6*\paperheight)$) rectangle (current page.south east); \fill [white,opacity=.5] ($(current page.south west)+(.3*\paperwidth,.7*\paperheight)$) rectangle (current page.south east); - \ifcsname @cover\endcsname - \node [opacity=.5] at ($(current page.south west)+(.65*\paperwidth,.3*\paperheight)$) {\includegraphics[height=.3\paperheight]{\@cover}}; - \ifcsname @coverpattern\endcsname - \fill [pattern=\@coverpattern,pattern color=#1!15!white!25] ($(current page.south west)+(.3*\paperwidth,0)$) rectangle ++ (.7*\paperwidth,.6\paperheight); - \fi\fi \node [darkgray] at ($(current page.south west)+(.65*\paperwidth,.65*\paperheight)$) {\Huge\bfseries\@title}; \ifcsname @subtitle\endcsname \node [rotate=90,gray,opacity=.6] at ($(current page.south west)+(.25*\paperwidth,.3*\paperheight)$) {\huge\bfseries\@subtitle}; \fi \ifcsname @bioinfo\endcsname \node [gray,opacity=.4] at ($(current page.south)+(.15*\paperwidth,.075*\paperheight)$) {\large\@bioinfo}; - \fi} + \fi + \ifcsname @coverhead\endcsname + \ifcsname @coverheadrotate\endcsname + \relax + \else + \gdef\@coverheadrotate{0} + \fi + \node [rotate=\@coverheadrotate] at ($(current page.center)+(0,.35*\paperheight)$) {\includegraphics[width=\paperwidth]{\@coverhead}}; + \fi + \ifcsname @cover\endcsname + \node (@cover) at ($(current page.south west)+(.65*\paperwidth,.3*\paperheight)$) {\includegraphics[height=.3\paperheight]{\@cover}}; + \ifcsname @coverpattern\endcsname + \fill [scope fading=south,pattern=\@coverpattern,pattern color=\@covercolor!15!white!25] (@cover.south west) rectangle (@cover.north east); + \fi\fi} \end{titlepage} - \restoregeometry\restorepagecolor + \restoregeometry + \restorepagecolor \if@twoside \clearpage% - \newpagecolor{#1!15!white!50} + \newpagecolor{\@covercolor!15!white!25} \thispagestyle{empty}% \null\clearpage - \fi\restorepagecolor + \fi + \restorepagecolor } \RequirePackage{tocloft} \setlength{\cftbeforetoctitleskip}{6\p@} \setlength{\cftaftertoctitleskip}{24\p@} -\setlength{\cftbeforesecskip}{3\p@} -\def\contentsname{\sffamily\scshape\hfill Contents\hfill} +\AddToHook{cmd/tableofcontents/before}{ + \begingroup + \setstretch{1.5} +} +\AddToHook{cmd/tableofcontents/after}{\endgroup} +\renewcommand\contentsname{\sffamily\scshape Contents} \setcounter{tocdepth}{1} \let\@chapapptmp\@chapapp -\def\@chapapp{\textsc{\@chapapptmp}} +\gdef\@chapapp{\textsc{\@chapapptmp}} \def\chapterimage#1{\gdef\@chapterimage{#1}} -\def\HUGE{\@setfontsize\HUGE{30}{40}} \def\@makechapterhead#1{% \def\thesection{\arabic{chapter}.\arabic{section}} \def\theproblem{\thechapter.\arabic{problem}} @@ -194,8 +214,8 @@ \fi \ifnum \c@secnumdepth >\m@ne \if@mainmatter - \parbox{6em} - {\centering\HUGE\normalfont\bfseries\textcolor{darkgray}\thechapter\vskip4\p@\normalsize\bfseries\textcolor{darkgray}{\bfseries\sffamily\@chapapp}}% + \parbox{6em} + {\centering\@setfontsize\HUGE{30}{40}\normalfont\bfseries\textcolor{darkgray}\thechapter\vskip4\p@\normalsize\bfseries\textcolor{darkgray}{\bfseries\sffamily\@chapapp}}% \fi \fi \interlinepenalty\@M\hspace*{3ex} @@ -203,20 +223,20 @@ \vskip 36\p@ }} \def\@makeschapterhead#1{% - \def\thesection{\arabic{section}} - \def\theproblem{\arabic{problem}} - \setcounter{section}{0} - \setcounter{problem}{0} - {\centering - \ifcsname @chapterimage\endcsname - \@chapterimage - \fi\vskip-40\p@ - \parindent \z@ \normalfont - \interlinepenalty\@M - \huge \bfseries #1\par\nobreak - \vskip 28\p@}} +\def\thesection{\arabic{section}} +\def\theproblem{\arabic{problem}} +\setcounter{section}{0} +\setcounter{problem}{0} +{\centering +\ifcsname @chapterimage\endcsname + \@chapterimage +\fi\vskip-40\p@ + \parindent \z@ \normalfont + \interlinepenalty\@M + \huge \bfseries #1\par\nobreak + \vskip 28\p@}} \let\cleardoublepage=\clearpage -\renewcommand*{\cleardoublepage}{\clearpage\if@twoside \ifodd\c@page\else +\renewcommand*\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else \ifnum \thechapter=0 \vspace*{\fill} {\centering\itshape\Large This page was intentionally left blank.\par} @@ -231,27 +251,38 @@ \RequirePackage{fancyhdr} \pagestyle{fancy} - \let\oldheadrule\headrule - \renewcommand{\headrule}{{\color{gray}\oldheadrule}} - \renewcommand{\headrulewidth}{1pt} - \if@twoside\cfoot{} - \fancyhead[OL]{\color{darkgray}\nouppercase\leftmark} - \fancyhead[OR]{\color{darkgray}\sffamily\thepage} - \fancyhead[ER]{\color{darkgray}\nouppercase\rightmark} - \fancyhead[EL]{\color{darkgray}\sffamily\thepage} - \else - \fancyhead[L]{\color{darkgray}\nouppercase\leftmark} - \fancyhead[R]{\color{darkgray}\nouppercase\rightmark} - \cfoot{\color{darkgray}\sffamily\thepage} - \fi - \setlength{\headheight}{14pt} +\let\oldheadrule\headrule +\renewcommand{\headrule}{{\color{gray}\oldheadrule}} +\renewcommand{\headrulewidth}{1pt} +\fancyfoot[L]{\footnotesize\fbox{Unauthorized copying or reuse of any part of this page is illegal}} +\fancyfoot[OR]{\sffamily\bfseries GO ON TO THE NEXT PAGE} +\if@twoside\cfoot{} + \fancyhead[OL]{\color{darkgray}\nouppercase\leftmark} + \fancyhead[OR]{\color{darkgray}\sffamily\thepage} + \fancyhead[ER]{\color{darkgray}\nouppercase\rightmark} + \fancyhead[EL]{\color{darkgray}\sffamily\thepage} +\else + \fancyhead[L]{\color{darkgray}\nouppercase\leftmark} + \fancyhead[R]{\color{darkgray}\nouppercase\rightmark} + \cfoot{\color{darkgray}\sffamily\thepage} +\fi +\RequirePackage{amsthm} +\renewcommand\qedsymbol{$\color{gray}\blacksquare$} \theoremstyle{definition} \newtheorem{problem}{\color{DarkGreen}\faIcon{pen-square}~\textsc{\textsf{Problem}}}[chapter] \newtheorem*{solution}{\color{MidnightBlue}\faIcon{check-square}~\textsc{\textsf{Solution}}} \newtheorem*{scratch}{\color{MidnightBlue}\faIcon{check-square}~\textsc{\textsf{Scratch}}} \newtheorem*{note}{\color{DarkRed}\faIcon{info-circle}~\textsc{\textsf{Note}}} -\RequirePackage{comment} +\RequirePackage{comment,ulem,soul} +\ifxetex + \RequirePackage{xeCJKfntef} + \def\@emph#1{\CJKsout*[thickness=2.5ex, format=\color{\@covercolor!15}]{#1}} + \def\s@emph#1{\CJKunderwave{#1}} +\else + \def\@emph#1{\sethlcolor{\@covercolor!15}\hl{#1}} + \def\s@emph#1{\uwave{#1}} +\fi \ifdefstring{\LITE@answer}{hideanswer}{% \def\ans#1{\underline{\phantom{#1}}} \def\choiceans#1{\phantom{#1}} @@ -261,6 +292,7 @@ \excludecomment{solution}\excludecomment{note} \let\endsolution\relax\let\endnote\relax} \def\true{\addtocounter{task}{1}\thetask} + \DeclareRobustCommand\emph{\@ifstar\s@emph\s@emph} }{ \def\ans#1{\underline{~#1~}} \def\s@solute#1{\relax}\def\@solute#1{\relax} @@ -268,6 +300,7 @@ \excludecomment{scratch} \let\endscratch\relax} \def\true{\addtocounter{task}{1}\faIcon{check-circle}} + \DeclareRobustCommand\emph{\@ifstar\s@emph\@emph} } \DeclareRobustCommand\solute{\@ifstar\s@solute\@solute} %% diff --git a/macros/latex/contrib/lni/CHANGELOG.md b/macros/latex/contrib/lni/CHANGELOG.md index 5bb6f9697c..377ce68c43 100644 --- a/macros/latex/contrib/lni/CHANGELOG.md +++ b/macros/latex/contrib/lni/CHANGELOG.md @@ -6,9 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). ## [Unreleased] -## [1.9] - 2024-07-1 +## [1.10] - 2024-07-23 +### Changed +- Footnotes are set as superscripts in the footer +- URLs are set using the text font instead of a typewriter font + +### Fixed +- Support for multiple affiliations (#173) + +## [1.9] - 2024-07-01 ### Added -- Support for multiple affiliations +- Support for multiple affiliations (#158) ## [1.8.1] - 2024-01-08 @@ -171,7 +179,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). First release of the revised files -[Unreleased]: https://github.com/gi-ev/LNI/compare/v1.9...HEAD +[Unreleased]: https://github.com/gi-ev/LNI/compare/v1.10...HEAD +[1.10]: https://github.com/gi-ev/LNI/compare/v1.9...v1.10 [1.9]: https://github.com/gi-ev/LNI/compare/v1.8.1...v1.9 [1.8.1]: https://github.com/gi-ev/LNI/compare/v1.8...v1.8.1 [1.8]: https://github.com/gi-ev/LNI/compare/v1.7...v1.8 diff --git a/macros/latex/contrib/lni/README.md b/macros/latex/contrib/lni/README.md index 034ef480d8..9935391e3b 100644 --- a/macros/latex/contrib/lni/README.md +++ b/macros/latex/contrib/lni/README.md @@ -4,7 +4,7 @@ ---------------------------------------------------------------------------- lni -- A class for submissions to the ``Lecture Notes in Informatics'' (c) 2016-2024 Gesellschaft für Informatik (GI) -Version: 1.9 +Version: 1.10 Maintainer: Martin Sievers Email: martin.sievers@schoenerpublizieren.de License: Released under the LaTeX Project Public License v1.3c or later diff --git a/macros/latex/contrib/lni/lni.dtx b/macros/latex/contrib/lni/lni.dtx index 257f0d4bb0..b5699cbac6 100644 --- a/macros/latex/contrib/lni/lni.dtx +++ b/macros/latex/contrib/lni/lni.dtx @@ -134,7 +134,7 @@ This work consists of the file lni.dtx %<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<class>\ProvidesClass{lni} %<*class> - [2024/07/01 v1.9 Official class for submissions to the ``Lecture Notes + [2024/07/23 v1.10 Official class for submissions to the ``Lecture Notes in Informatics''] %</class> %<*driver> @@ -287,6 +287,8 @@ This work consists of the file lni.dtx % \changes{v1.8}{2022/11/25}{Make class compatable with latest publisher requirements (#121)} % \changes{v1.8}{2022/11/25}{Make usage of `hyperref` mandatory (#131)} % \changes{v1.9}{2024/07/01}{Support multiple affiliations (#158)} +% \changes{v1.10}{2024/07/01}{Change font for URLs to text font and change footnote numbers to superscript} +% \changes{v1.10}{2024/07/23}{Fix support multiple affiliations (#173)} % % \GetFileInfo{\jobname.dtx} % \DoNotIndex{\newcommand,\newenvironment} @@ -1046,7 +1048,7 @@ This work consists of the file lni.dtx \RequirePackage[hang]{footmisc} \setlength{\footnotemargin}{1em} \long\def\@makefntext#1{% - \def\@makefnmark{\rlap{\normalfont\@thefnmark}}% + \def\@makefnmark{\rlap{\normalfont\textsuperscript{\@thefnmark}}}% \ifFN@hangfoot \bgroup \setbox\@tempboxa\hbox{% @@ -1160,9 +1162,9 @@ This work consists of the file lni.dtx \newcommand{\@multiaffil}[1]{% \ifcsundef{@emailsandorcids#1}{\csgdef{@emailsandorcids#1}{}}{}% \ifcsempty{@emailsandorcids#1}% - {\csgappto{@emailsandorcids#1}{% + {\protected@csxappto{@emailsandorcids#1}{% \if\relax\@currEmail\relax\else\email{\@currEmail}\fi\if\relax\@currOrcid\relax\else,\ \orcid{\@currOrcid}\fi}}% - {\csgappto{@emailsandorcids#1}{% + {\protected@csxappto{@emailsandorcids#1}{% \if\relax\@currEmail\relax\else;\ \email{\@currEmail}\fi\if\relax\@currOrcid\relax\else,\ \orcid{\@currOrcid}\fi}}% } @@ -1549,6 +1551,7 @@ This work consists of the file lni.dtx % \end{macrocode} % \begin{macrocode} \RequirePackage{url} +\urlstyle{same} % \end{macrocode} % improve wrapping of URLs - hint by http://tex.stackexchange.com/a/10419/9075 % \begin{macrocode} diff --git a/macros/latex/contrib/lni/lni.pdf b/macros/latex/contrib/lni/lni.pdf Binary files differindex c3b50c0cd1..b79a12a091 100644 --- a/macros/latex/contrib/lni/lni.pdf +++ b/macros/latex/contrib/lni/lni.pdf diff --git a/macros/latex/contrib/magicwatermark/README.md b/macros/latex/contrib/magicwatermark/README.md index db59f622e8..39615d2bb4 100644 --- a/macros/latex/contrib/magicwatermark/README.md +++ b/macros/latex/contrib/magicwatermark/README.md @@ -3,6 +3,4 @@ - Repository: https://github.com/ljguo1020/magicwatermark - License: The LaTeX Project Public License 1.3c -> magicwatermark is a package based on everypage and tikz and encapsulated by LATEX3 İt can -> flexibly set and clear watermarks. All watermark content is placed in inside a node of verbtikz and -> in the center of the page. +magicwatermark is based on tikz and expl3, and can flexibly set backgrounds or watermarks. diff --git a/macros/latex/contrib/magicwatermark/doc/magicwatermark-cn.pdf b/macros/latex/contrib/magicwatermark/doc/magicwatermark-cn.pdf Binary files differnew file mode 100644 index 0000000000..c43ac7ff92 --- /dev/null +++ b/macros/latex/contrib/magicwatermark/doc/magicwatermark-cn.pdf diff --git a/macros/latex/contrib/magicwatermark/doc/magicwatermark-cn.tex b/macros/latex/contrib/magicwatermark/doc/magicwatermark-cn.tex new file mode 100644 index 0000000000..883f2b6808 --- /dev/null +++ b/macros/latex/contrib/magicwatermark/doc/magicwatermark-cn.tex @@ -0,0 +1,373 @@ +\documentclass{article} + +\usepackage{lipsum} + +\usepackage{../magicwatermark} + +\usepackage[margin = 2.51828cm]{geometry} + + +\def\pkgname{\textcolor{teal}{\texttt{magicwatermark}}} +\usepackage{indentfirst} +\pagestyle{empty} + +\usepackage[UTF8, scheme=plain, fontset=none, heading=true, zihao=-4]{ctex} +\setCJKmainfont[BoldFont={LXGWWenKai-Bold},ItalicFont={LXGWWenKai-Light}]{LXGWWenKai-Regular} +\setCJKsansfont[BoldFont={LXGWWenKai-Bold}]{LXGWWenKai-Regular} +\setCJKmonofont[BoldFont={LXGWWenKaiMono-Bold},ItalicFont={LXGWWenKaiMono-Light}]{LXGWWenKaiMono-Regular} + +\ctexset{ +% chapter={ +% format+=\raggedright, +% name = {第,部分}, +% afterskip = .5cm +% }, + section={ + format+=\raggedright, + afterskip = .5cm + }, + contentsname = {目次} +} + +\usepackage{fontspec} +\IfFontExistsTF{calibri.ttf} +{ + \setmainfont{calibri.ttf}[ + BoldFont = calibrib.ttf, + ItalicFont = calibrii.ttf, + BoldItalicFont = calibriz.ttf + ] +} +{} + +\usepackage[listings,breakable]{tcolorbox} + +\ExplSyntaxOn +\clist_new:N \l_function_variant_list %fuction variant list +\NewDocumentCommand{\function}{svo} % #1:function name #2: variant list +{ + \IfBooleanTF{#1} + { + \IfNoValueTF{#3} + { + \begin{tcolorbox}[width=\textwidth,left=1mm,right=1mm,top=1mm,bottom=1mm,sharp~corners,colback=white,boxrule=.5pt,colback=lime!30] + \texttt{Function}\hskip -2pt \Triangle\hskip -3pt \texttt{#2}\hfill \examplelabel* + \end{tcolorbox} + } + { + \clist_gset:Nn \l_function_variant_list {#3} + \begin{tcolorbox}[width=\textwidth,left=1mm,right=1mm,top=1mm,bottom=1mm,sharp~corners,colback=white,boxrule=.5pt,colback=lime!30] + \texttt{Function}\hskip -2pt \Triangle\hskip -3pt \texttt{#2\textcolor{gray}{(\clist_use:Nn \l_function_variant_list{|})}} \hfill \examplelabel* + \end{tcolorbox} + } + } + { + \IfNoValueTF{#3} + { + \def\functionn{ + \texttt{#2} + } + } + { + \clist_gset:Nn \l_function_variant_list {#3} + \def\functionn{ + \texttt{ + #2 + \textcolor{gray}{(\clist_use:Nn \l_function_variant_list{|})} + } + } + } + } + +} +\NewDocumentCommand{\examplelabel}{s} +{ + \IfBooleanTF{#1}{ + \raisebox{-0.5ex}{ + \tikz{ + \node[ball~color=purple,circle,outer~sep=0pt,scale=0.5] {\phantom{2}}; + }} + }{ + \raisebox{-0.5ex}{ + \tikz{ + \node[ball~color=cyan,circle,outer~sep=0pt,scale=0.5,font=\bfseries] {\theexample}; + }} + } +} +\ExplSyntaxOff +\def\Triangle{ % triangle icon + \raisebox{-0.3ex}{ + \tikz{ + \fill[scale=2,outer sep=0pt] (240:0.5ex) -- (0:0.5ex) -- (120:0.5ex); + } +}} +\newcounter{example} +\tcbset{ + example style/.style={ + sharp corners, + colback=white, + boxrule=.5pt, + breakable, + left=1mm,right=1mm,top=1mm,bottom=1mm, + fonttitle=\bfseries, + colbacktitle=lime!30, + coltitle=black, + % title={MagicWatermark}, + listing only + } +} + +\newtcblisting[use counter=example]{example}[1][]{ + listing options={ + style=tcblatex, + tabsize = 1, + language={[LaTeX]TeX}, + classoffset=0, + morekeywords = {MagicWatermark, foreach, includegraphics}, + keywordstyle={\color[RGB]{178,34,34}\bfseries}, + commentstyle={\color[RGB]{102,205,170}\itshape}, + classoffset=1, + morekeywords = {setup, pages, content, is, append, style}, + keywordstyle=\color{cyan!50!green}\bfseries, + }, + example style, + #1 + } + + +\MagicWatermark{ + setup = { + pages = {*}, + content = {P-\thepage}, + style = {shift = {(.5\textwidth, .5\textheight + \headheight + \headsep)}, scale = 3, text = cyan, font = \ttfamily} + }, + setup = { + pages = {even}, + style = {scale = 5, text = pink}, + content = {Watermark}, + is append + }, + setup = { + pages = {1}, + style = {text width = 1.7\paperwidth, rotate = 45, align = left, font = \Large\linespread{1}\selectfont, opacity = .1}, + content = { + \foreach \x in {0, ..., 500} {Magic Watermark } + }, + is append + } +} + + +\def\opt#1{\textcolor{magenta}{\texttt{#1}}} +\def\para#1{\textcolor[rgb]{0.13, 0.67, 0.8}{\texttt{#1}}} + +\usepackage[hidelinks]{hyperref} +\begin{document} + + +\vspace*{\fill} +\begin{center} + {\Huge \textcolor{teal}{\texttt{magicwatermark}} 宏包\footnote{\url{https://github.com/ljguo1020/magicwatermark}}} \\[.5cm] + {\Large 郭李军<ljguo1020@gmail.com>} \\[.5cm] + {\Large V1.2B}\\[1cm] +\begin{example}[] +\MagicWatermark{ + setup = { + pages = {*}, + content = {P-\thepage}, + style = {shift = {(.5\textwidth, .5\textheight + \headheight + \headsep)}, scale = 3, text = cyan, font = \ttfamily} + }, + setup = { + pages = {even}, + style = {scale = 5, text = pink}, + content = {Watermark}, + is append + }, + setup = { + pages = {1}, + style = {text width = 1.7\paperwidth, rotate = 45, align = left, font = \Large, opacity = .1}, + content = { + \foreach \x in {0, ..., 500} {Magic Watermark } + }, + is append + } +} +\end{example} +\end{center} + +\vspace*{\fill} + +\newpage + + +\linespread{1.3}\selectfont +\tableofcontents + +\section{介绍} + +\pkgname{} 是一个全新的水印宏包, 在 2022 年 6 月 17 日发布了第一版, 本次更新并不是基于第一版, 而是进行了重构. + +\pkgname{} 基于 \texttt{tikz} 和 \texttt{expl3}, 可以灵活的设置背景或水印. + +\section{使用} +\pkgname{} 的使用, 相比于其它同类功能的包来说, 可以说是易用性最高的, 它只提供了一个命令 \verb|\MagicWatermark|, 命令参数由多个 \opt{setup} 规则组成. +\begin{example}[] +\MagicWatermark{ + setup = {}, + setup = {}, + ... +} +\end{example} + +\opt{setup} 内部接受四个键值选项, 用于配置水印的表现形式. + +\subsection{pages} +\opt{pages} 接受一个逗号分割列表, 用于配置水印作用范围, 例如 \verb|pages = {2, 4, 5, 8-10}|, 表示选中页码为第 2, 4, 5, 8, 9, 10 这些页面. + +\opt{pages} 共接受 4 种配置规则, +\begin{itemize} + \item \para{*}, 表示所有页面; + \item \para{odd} 和 \para{oven}, 表示奇偶页; + \item 范围, 形如 \para{3-5}, \para{12-ii}; + \item 表达式, 形如 \para{2X+1}, \para{2X\^{}2+X+1}, 但是变量必须为 \para{X}. +\end{itemize} + +这里假定页面总页数为 24 页, +\begin{example}[title = pages 配置规则] +pages = {*} => 1, 2, 3, ..., 24 +pages = {odd} => 1, 3, 5, ..., 23 +pages = {1, 3, 5-10} => 1, 3, 5, 6, 7, ..., 10 +pages = {1-5, 8, 20-ii} => 1, 2, ..., 5, 8, 20, 21, ..., 23 +pages = {3X + 1} => 1, 4, 7, 10, ..., 22 +\end{example} + +\subsection{tikz} +\opt{tikz} 用于设置是否将水印内容放置在 \texttt{tikz} 的 \texttt{node} 中, 见下文, 可选值为 \para{true} 和 \para{false}, 默认为 \para{true}. 当你需要使用 \opt{tikz} 时, 需要手动加载 \texttt{tikz} 宏包. + +\subsection{content} +\opt{content} 用来设置水印的内容, 当 \opt{tikz} 被启用时, 它被放在了 \texttt{tikz} 的 \texttt{node} 中, 为此, 想要灵活的设置它, 您需要对 \texttt{node} 有一些了解. + +\subsection{style} +\opt{style} 用于设置容纳水印内容的 \texttt{node} 的样式, 默认为 \para{inner~sep = 0pt, outer~sep = 0pt, opacity = .5, align = left}, 当 \opt{tikz} 被禁用时, 它会被忽略. + +\subsection{is append} +\opt{is append} 用于设置是否覆盖当前页已有的水印, 可选值为 \para{true} 和 \para{false}, 默认为 \para{false}. + +\section{使用案例} +\begin{example}[title = 为所有页面右上角添加页码] +% \usepackage{tikz} +\MagicWatermark{ + setup = { + pages = {*}, + content = {P-\thepage}, + style = {shift = {(.5\textwidth, .5\textheight + \headheight + \headsep)}, scale = 3, text = cyan, font = \ttfamily} + } +} +\end{example} + +\begin{example}[title = 为偶数页页面中心添加文字 Watermark] +% \usepackage{tikz} +\MagicWatermark{ + setup = { + pages = {even}, + style = {scale = 5, text = pink}, + content = {Watermark}, + is append + } +} +\end{example} + +\begin{example}[title = 为第二页到最后一页设置铺满整个页面的文字] +% \usepackage{tikz} +\MagicWatermark{ + setup = { + pages = {2-i}, + style = {text width = 1.7\paperwidth, rotate = 45, align = left, font = \Large, opacity = .1}, + content = { + \foreach \x in {0, ..., 500} {Magic Watermark } + }, + is append + } +} +\end{example} + +\begin{example}[title = 为奇偶页设置不同水印] +% \usepackage{tikz} +\MagicWatermark{ + setup = { + pages = {even}, + style = {scale = 8, rotate = 45, text=red, align = center,font = \linespread{2}\selectfont}, + content = { + Even MagicWatermark\\ + Even MagicWatermark\\ + Even MagicWatermark\\ + Even MagicWatermark + } + }, + setup = { + pages = {odd}, + style = {scale = 6, rotate = -45, text = cyan, text width = 1.7\paperwidth, font = \linespread{1.5}\selectfont, align = center}, + content = { + \foreach \x in {0,...,5}{ + Odd MagicWatermark + } + } + } +} +\end{example} + +\begin{example}[title = 设置图片为水印] +% \usepackage{tikz} +\MagicWatermark{ + setup = { + pages = {even}, + style = {opacity = 0.3}, + content = { + \includegraphics{example-image-a} + } + }, + setup = { + pages = {odd}, + style = {opacity = .3, rotate=45, text width = 3\paperwidth}, + content = { + \foreach \x in {0, ..., 20}{ + \foreach \y in {1, 2, 3} { + \includegraphics{example-image-b} + } \\ + } + } + } +} +\end{example} + +\begin{example}[title = 禁用 tikz] +\def\addhead#1#2{% + \expandafter\gdef\csname head@content@#1\endcsname{#2}% +} + +\def\printhead#1{% + \csname head@content@#1\endcsname% +} + +\addhead{2}{The only way to do great work is to love what you do.} +\addhead{3}{Success is not final, failure is not fatal: It is the courage to continue that counts.} +\addhead{4}{In the end, we will remember not the words of our enemies, but the silence of our friends.} +\addhead{5}{It does not matter how slowly you go as long as you do not stop.} + +\NewDocumentCommand{\mywatermark}{}{% + \begin{tikzpicture}[remember picture, overlay] + \node[yshift = -\headheight - \headsep, text = teal, font = \large] at (current page.north) {\printhead{\thepage}}; + \end{tikzpicture} +} + +\MagicWatermark{ + setup = { + pages = {2-5}, + tikz = false, + content = \mywatermark + } +} +\end{example} + + +\end{document} diff --git a/macros/latex/contrib/magicwatermark/doc/magicwatermark-en.pdf b/macros/latex/contrib/magicwatermark/doc/magicwatermark-en.pdf Binary files differnew file mode 100644 index 0000000000..30b84bd6cd --- /dev/null +++ b/macros/latex/contrib/magicwatermark/doc/magicwatermark-en.pdf diff --git a/macros/latex/contrib/magicwatermark/doc/magicwatermark-en.tex b/macros/latex/contrib/magicwatermark/doc/magicwatermark-en.tex new file mode 100644 index 0000000000..e6520fa330 --- /dev/null +++ b/macros/latex/contrib/magicwatermark/doc/magicwatermark-en.tex @@ -0,0 +1,400 @@ +\documentclass{article} + +\usepackage{lipsum} + +\usepackage{../magicwatermark} + +\usepackage[margin = 2.51828cm]{geometry} + + +\def\pkgname{\textcolor{teal}{\texttt{magicwatermark}}} +\usepackage{indentfirst} +\pagestyle{empty} + +\usepackage[UTF8, scheme=plain, fontset=none, heading=true, zihao=-4]{ctex} +%\setCJKmainfont[BoldFont={LXGWWenKai-Bold},ItalicFont={LXGWWenKai-Light}]{LXGWWenKai-Regular} +%\setCJKsansfont[BoldFont={LXGWWenKai-Bold}]{LXGWWenKai-Regular} +%\setCJKmonofont[BoldFont={LXGWWenKaiMono-Bold},ItalicFont={LXGWWenKaiMono-Light}]{LXGWWenKaiMono-Regular} + +\ctexset{ +% chapter={ +% format+=\raggedright, +% name = {第,部分}, +% afterskip = .5cm +% }, + section={ + format+=\raggedright, + afterskip = .5cm + }, + contentsname = {Table of contents} +} + +\usepackage{fontspec} +\IfFontExistsTF{calibri.ttf} +{ + \setmainfont{calibri.ttf}[ + BoldFont = calibrib.ttf, + ItalicFont = calibrii.ttf, + BoldItalicFont = calibriz.ttf + ] +} +{} + +\newcommand\blfootnote[1]{ + \begingroup + \renewcommand\thefootnote{}\footnote{#1} + \addtocounter{footnote}{-1} + \endgroup +} + +\usepackage[listings,breakable]{tcolorbox} + +\ExplSyntaxOn +\clist_new:N \l_function_variant_list %fuction variant list +\NewDocumentCommand{\function}{svo} % #1:function name #2: variant list +{ + \IfBooleanTF{#1} + { + \IfNoValueTF{#3} + { + \begin{tcolorbox}[width=\textwidth,left=1mm,right=1mm,top=1mm,bottom=1mm,sharp~corners,colback=white,boxrule=.5pt,colback=lime!30] + \texttt{Function}\hskip -2pt \Triangle\hskip -3pt \texttt{#2}\hfill \examplelabel* + \end{tcolorbox} + } + { + \clist_gset:Nn \l_function_variant_list {#3} + \begin{tcolorbox}[width=\textwidth,left=1mm,right=1mm,top=1mm,bottom=1mm,sharp~corners,colback=white,boxrule=.5pt,colback=lime!30] + \texttt{Function}\hskip -2pt \Triangle\hskip -3pt \texttt{#2\textcolor{gray}{(\clist_use:Nn \l_function_variant_list{|})}} \hfill \examplelabel* + \end{tcolorbox} + } + } + { + \IfNoValueTF{#3} + { + \def\functionn{ + \texttt{#2} + } + } + { + \clist_gset:Nn \l_function_variant_list {#3} + \def\functionn{ + \texttt{ + #2 + \textcolor{gray}{(\clist_use:Nn \l_function_variant_list{|})} + } + } + } + } + +} +\NewDocumentCommand{\examplelabel}{s} +{ + \IfBooleanTF{#1}{ + \raisebox{-0.5ex}{ + \tikz{ + \node[ball~color=purple,circle,outer~sep=0pt,scale=0.5] {\phantom{2}}; + }} + }{ + \raisebox{-0.5ex}{ + \tikz{ + \node[ball~color=cyan,circle,outer~sep=0pt,scale=0.5,font=\bfseries] {\theexample}; + }} + } +} +\ExplSyntaxOff +\def\Triangle{ % triangle icon + \raisebox{-0.3ex}{ + \tikz{ + \fill[scale=2,outer sep=0pt] (240:0.5ex) -- (0:0.5ex) -- (120:0.5ex); + } +}} +\newcounter{example} +\tcbset{ + example style/.style={ + sharp corners, + colback=white, + boxrule=.5pt, + breakable, + left=1mm,right=1mm,top=1mm,bottom=1mm, + fonttitle=\bfseries, + colbacktitle=lime!30, + coltitle=black, + % title={MagicWatermark}, + listing only + } +} + +\newtcblisting[use counter=example]{example}[1][]{ + listing options={ + style=tcblatex, + tabsize = 1, + language={[LaTeX]TeX}, + classoffset=0, + morekeywords = {MagicWatermark, foreach, includegraphics}, + keywordstyle={\color[RGB]{178,34,34}\bfseries}, + commentstyle={\color[RGB]{102,205,170}\itshape}, + classoffset=1, + morekeywords = {setup, pages, content, is, append, style}, + keywordstyle=\color{cyan!50!green}\bfseries, + }, + example style, + #1 + } + + +\MagicWatermark{ + setup = { + pages = {*}, + content = {P-\thepage}, + style = {shift = {(.5\textwidth, .5\textheight + \headheight + \headsep)}, scale = 3, text = cyan, font = \ttfamily} + }, + setup = { + pages = {even}, + style = {scale = 5, text = pink}, + content = {Watermark}, + is append + }, + setup = { + pages = {1}, + style = {text width = 1.7\paperwidth, rotate = 45, align = left, font = \Large\linespread{1}\selectfont, opacity = .1}, + content = { + \foreach \x in {0, ..., 500} {Magic Watermark } + }, + is append + } +} + + +\def\opt#1{\textcolor{magenta}{\texttt{#1}}} +\def\para#1{\textcolor[rgb]{0.13, 0.67, 0.8}{\texttt{#1}}} + +\usepackage[hidelinks]{hyperref} +\begin{document} + + +\vspace*{\fill} +\begin{center} + {\Huge The \textcolor{teal}{\texttt{magicwatermark}}\footnote{\url{https://github.com/ljguo1020/magicwatermark}} package\blfootnote{English version of the documentation by Jérémy Just <\url{jeremy@jejust.fr}>.}} \\[.5cm] + {\Large Guo Li Jun <ljguo1020@gmail.com>} \\[.5cm] + {\Large V1.2B}\\[1cm] +\begin{example}[] +\MagicWatermark{ + setup = { + pages = {*}, + content = {P-\thepage}, + style = {shift = {(.5\textwidth, .5\textheight + \headheight + \headsep)}, scale = 3, text = cyan, font = \ttfamily} + }, + setup = { + pages = {even}, + style = {scale = 5, text = pink}, + content = {Watermark}, + is append + }, + setup = { + pages = {1}, + style = {text width = 1.7\paperwidth, rotate = 45, align = left, font = \Large, opacity = .1}, + content = { + \foreach \x in {0, ..., 500} {Magic Watermark } + }, + is append + } +} +\end{example} +\end{center} + +\vspace*{\fill} + +\newpage + + +\linespread{1.3}\selectfont +\tableofcontents + +\section{Presentation} + +\pkgname{} is a new watermarking package. Tts first version was released on June 17\textsuperscript{th}, 2022, +but this update is a complete refactoring. + +\pkgname{} is based on \texttt{ti\textit{k}z} and \texttt{expl3}, which gives you a lot of flexibility +to add a background or a watermark to the pages of your document. + +\section{Use} + +The use of \pkgname{}, compared to other packages of similar functionality, is a lot easier, +as it provides a single command, \verb|\MagicWatermark|. +This command takes a parameter consisting in a number of \opt{setup} rules. +\begin{example}[] +\MagicWatermark{ + setup = {}, + setup = {}, + ... +} +\end{example} + +\opt{setup} internally accepts four key options to configure the presentation of the watermark. + +\subsection{pages} +\opt{pages} accepts a comma-separated list which defines the scope of the watermark,\linebreak[4] \textit{e.g.} \verb|pages = {2, 4, 5, 8-10}| indicates that the watermark is to appear on pages 2, 4, 5, 8, 9 and 10. + +\opt{pages} accepts a total of four configuration rules: +\begin{itemize} + \item \para{*}, indicating all pages; + \item \para{odd} and \para{even}, for odd/even pages; + \item a range, like \para{3-5} or \para{12-ii}; + \item expressions, such as \para{2X+1}, \para{2X\^{}2+X+1} (the variable \textbf{has to be} \para{X}). +\end{itemize} + +Here, we assume that the total number of pages is 24: +\begin{example}[title = pages machine rules] +pages = {*} => 1, 2, 3, ..., 24 +pages = {odd} => 1, 3, 5, ..., 23 +pages = {1, 3, 5-10} => 1, 3, 5, 6, 7, ..., 10 +pages = {1-5, 8, 20-ii} => 1, 2, ..., 5, 8, 20, 21, ..., 23 +pages = {3X + 1} => 1, 4, 7, 10, ..., 22 +\end{example} + +\subsection{tikz} + +\opt{tikz} is used to choose whether the watermark content will be placed +in a \texttt{tikz} \texttt{node} (see below). +The two possible values are \para{true} and \para{false}. The default is \para{true}. +When you choose to use \opt{tikz}, you need to load the \texttt{tikz} package manually. + +\subsection{content} + +\opt{content} is used to define the content of the watermark, when \opt{tikz} is enabled. +The given value is placed inside the \texttt{tikz} \texttt{node}; +for this reason, to take full avantage of this syntax, you need to have some knowledge +of the available \texttt{node} options. + +\subsection{style} + +\opt{style} is used to set the style of the \texttt{node} that holds the watermark content. +The default style is \para{inner~sep = 0pt, outer~sep = 0pt, opacity = .5, align = left}, +and is ignored when \opt{tikz} is disabled. + +\subsection{is append} + +\opt{is append} is used to choose whether or not to override the existing watermark on the +current page. The available values are \para{true} and \para{false}, the default is \para{false}. + + +\section{Examples} + +\begin{example}[title = Add page number to the top right corner of each pages:] +% \usepackage{tikz} +\MagicWatermark{ + setup = { + pages = {*}, + content = {P-\thepage}, + style = {shift = {(.5\textwidth, .5\textheight + \headheight + \headsep)}, scale = 3, text = cyan, font = \ttfamily} + } +} +\end{example} + +\begin{example}[title = Add text watermark at the center of even numbered pages:] +% \usepackage{tikz} +\MagicWatermark{ + setup = { + pages = {even}, + style = {scale = 5, text = pink}, + content = {Watermark}, + is append + } +} +\end{example} + +\begin{example}[title = Add a full page of text as watermark to the second to last page:] +% \usepackage{tikz} +\MagicWatermark{ + setup = { + pages = {2-i}, + style = {text width = 1.7\paperwidth, rotate = 45, align = left, font = \Large, opacity = .1}, + content = { + \foreach \x in {0, ..., 500} {Magic Watermark } + }, + is append + } +} +\end{example} + +\begin{example}[title = Use different watermarks for odd and even pages:] +% \usepackage{tikz} +\MagicWatermark{ + setup = { + pages = {even}, + style = {scale = 8, rotate = 45, text=red, align = center,font = \linespread{2}\selectfont}, + content = { + Even MagicWatermark\\ + Even MagicWatermark\\ + Even MagicWatermark\\ + Even MagicWatermark + } + }, + setup = { + pages = {odd}, + style = {scale = 6, rotate = -45, text = cyan, text width = 1.7\paperwidth, font = \linespread{1.5}\selectfont, align = center}, + content = { + \foreach \x in {0,...,5}{ + Odd MagicWatermark + } + } + } +} +\end{example} + +\begin{example}[title = Use an image as watermark:] +% \usepackage{tikz} +\MagicWatermark{ + setup = { + pages = {even}, + style = {opacity = 0.3}, + content = { + \includegraphics{example-image-a} + } + }, + setup = { + pages = {odd}, + style = {opacity = .3, rotate=45, text width = 3\paperwidth}, + content = { + \foreach \x in {0, ..., 20}{ + \foreach \y in {1, 2, 3} { + \includegraphics{example-image-b} + } \\ + } + } + } +} +\end{example} + +\begin{example}[title = Disable tikz] +\def\addhead#1#2{% + \expandafter\gdef\csname head@content@#1\endcsname{#2}% +} + +\def\printhead#1{% + \csname head@content@#1\endcsname% +} + +\addhead{2}{The only way to do great work is to love what you do.} +\addhead{3}{Success is not final, failure is not fatal: It is the courage to continue that counts.} +\addhead{4}{In the end, we will remember not the words of our enemies, but the silence of our friends.} +\addhead{5}{It does not matter how slowly you go as long as you do not stop.} + +\NewDocumentCommand{\mywatermark}{}{% + \begin{tikzpicture}[remember picture, overlay] + \node[yshift = -\headheight - \headsep, text = teal, font = \large] at (current page.north) {\printhead{\thepage}}; + \end{tikzpicture} +} + +\MagicWatermark{ + setup = { + pages = {2-5}, + tikz = false, + content = \mywatermark + } +} +\end{example} + + +\end{document} diff --git a/macros/latex/contrib/magicwatermark/magicwatermark-en.pdf b/macros/latex/contrib/magicwatermark/magicwatermark-en.pdf Binary files differdeleted file mode 100644 index 5ee2d2d9f5..0000000000 --- a/macros/latex/contrib/magicwatermark/magicwatermark-en.pdf +++ /dev/null diff --git a/macros/latex/contrib/magicwatermark/magicwatermark-en.tex b/macros/latex/contrib/magicwatermark/magicwatermark-en.tex deleted file mode 100644 index 03a3e6db11..0000000000 --- a/macros/latex/contrib/magicwatermark/magicwatermark-en.tex +++ /dev/null @@ -1,212 +0,0 @@ -\documentclass{l3doc} -\usepackage{graphicx} -\usepackage{enumitem} -\usepackage{listings} -\lstset{ -frame=tb,framerule=2pt,language={[LaTeX]TeX},basicstyle={\ttfamily}, -language={[LaTeX]TeX}, -keywordstyle=\color{red!70!black}\bfseries, -keywordstyle={[2]\color{blue!70!black}\bfseries}, -morekeywords={PageSetup,Watermark,NewWatermark,MyPageSetup,MyWatermark,EvenPageSetup,OddPageSetup,EvenWatermark,OddWatermark,ClearWatermark}} -\usepackage{fontspec} -\IfFontExistsTF{calibri.ttf} -{ - \setmainfont{calibri.ttf}[ - BoldFont = calibrib.ttf, - ItalicFont = calibrii.ttf, - BoldItalicFont = calibriz.ttf - ] -} -{} -\usepackage{magicwatermark} -\renewcommand*\marg[1]{\{\meta{#1}\}} -\renewcommand*\oarg[1]{[\meta{#1}]} -\renewcommand*\parg[1]{(\meta{#1})} -\title{\pkg{magicwatermark}} -\author{lijun guo \\ liguo1020@gmail.com} -\def\version{v1.0.1} -\date{\today\quad\version} -\pagestyle{empty} -\PageSetup* -{ - \begin{tikzpicture}[remember picture,overlay] - \node[cyan,scale = 2,shift={(-1,-1)}] at (current page.north east){--~\thepage~--}; - \end{tikzpicture} -} -\Watermark -\begin{document} -\maketitle -\tableofcontents -\begin{abstract} -\pkg{magicwatermark} is a package based on \pkg{everypage} and \pkg{tikz} and encapsulated by \LaTeX3 \. It can flexibly set and clear watermarks. All watermark content is placed in \ inside a \verb|node| of \verb|tikz| and in the center of the page. -\end{abstract} -\section{Introduction} -Currently the \pkg{magicwatermark} package can only implement the following functions -\begin{itemize} - \item Set watermark for all pages - \item Set watermark for odd pages - \item Set the watermark for even pages - \item Create a new watermark and set multiple watermarks on the same page - \item Clear watermark -\end{itemize} -\section{Interface} -\subsection{Some command} -\begin{function}[added=2021-12-21,updated=2021-12-21]{\PageSetup} - \begin{syntax} - \tn{PageSetup} \oarg{option} \marg{content for watermark} - \end{syntax} - This command is used to set the watermark content of all pages. It accepts two parameters. The first parameter is used to set some properties and is given in the form of \verb|key=value|. The second parameter is used to set the watermark content. It is text, pictures, etc. -\end{function} -\begin{function}[added=2021-12-21,updated=2021-12-21]{\Watermark} -\begin{syntax} - \tn{Watermark} -\end{syntax} -This command is used to display the watermark set above -\end{function} -\begin{function}[added=2021-12-21,updated=2021-12-21]{\EvenPageSetup} -\begin{syntax} -\tn{EvenPageSetup}\oarg{option}\marg{content for watermark} -\end{syntax} -This command is used to set the watermark content of even pages -\end{function} -\begin{function}[added=2021-12-21,updated=2021-12-21]{\EvenWatermark} -\begin{syntax} - \tn{EvenWatermark} -\end{syntax} -This command is used to display the even page watermark set above -\end{function} -\begin{function}[added=2021-12-21,updated=2021-12-21]{\OddPageSetup} -\begin{syntax} -\tn{OddPageSetup}\oarg{option}\marg{content for watermark} -\end{syntax} -This command is used to set the watermark content of odd pages -\end{function} -\begin{function}[added=2021-12-21,updated=2021-12-21]{\OddWatermark} -\begin{syntax} - \tn{OddWatermark} -\end{syntax} -This command is used to display the odd page watermark set above -\end{function} -\subsection{Add command} -The usage of the following commands with asterisks is similar to the above. It is not so much an extension as it is a cancellation of restrictions. The above commands all write the watermark content in a \verb|node|, for users who are not familiar with TikZ , the former is more square is convenient and fast, while the latter is more flexible -\begin{function}[added=2022-01-07,updated=2022-01-07]{\PageSetup*} -\begin{syntax} -\tn{PageSetup*}\marg{content for watermark} -\end{syntax} -\end{function} -\begin{function}[added=2022-01-07,updated=2022-01-07]{\EvenPageSetup*} -\begin{syntax} -\tn{EvenPageSetup*}\marg{content for watermark} -\end{syntax} -\end{function} -\begin{function}[added=2022-01-07,updated=2022-01-07]{\OddPageSetup*} -\begin{syntax} -\tn{OddPageSetup*}\marg{content for watermark} -\end{syntax} -\end{function} -\begin{function}[added=2021-12-21,updated=2021-12-21]{\NewWatermark} -\begin{syntax} -\tn{NewWatermark}\marg{watermark name} -\end{syntax} -This command is used to create a new watermark. Note that the watermark name cannot be \verb|main|, \verb|even|, \verb|odd|. -\end{function} -\begin{function}[added=2021-12-21,updated=2021-12-21]{\MyPageSetup} -\begin{syntax} -\tn{MyPageSetup}\oarg{option}\marg{watermark name}\marg{content for watermark} -\end{syntax} -Used to set the new watermark content -\end{function} -\begin{function}[added=2021-12-21,updated=2021-12-21]{\MyWatermark} -\begin{syntax} - \tn{MyWatermark}\marg{watermark name} -\end{syntax} -This command is used to display the watermark set above -\end{function} -\begin{function}[added=2021-12-21,updated=2021-12-21]{\ClearWatermark} -\begin{syntax} - \tn{ClearWatermark}\marg{watermark list} -This command is used to clear the set watermark, accepts a comma list as parameter, for example: -\begin{itemize} - \item \verb|\ClearWatermark{main}| clears the watermark set by \verb|\Watermark| - \item \verb|\ClearWatermark{even,odd}| clears the watermark on odd and even pages - \item \verb|\ClearWatermark{all}| Clear all watermarks - \item \verb|\ClearWatermark{name1,name2,name3,...}| -\end{itemize} -\end{syntax} -\end{function} -\subsection{option list} -The \textbf{option} in the above setting command is as follows -\begin{itemize} - \item \verb|scale = <number>| set the scale - \item \verb|opacity = <number>| set the opacity - \item \verb|shift = {(x,y)}| for translation by vector (x,y) - \item \verb|color = <color expression>| set the color - \item \verb|rotate = <angle>| Set the rotation angle - \item \verb+align = <center|left|right>+ Set the alignment of multi-line text, the default is center - \item \verb+showframe = <true|false>+ Set whether to display the frame, the default is false -\end{itemize} -\subsection{notes} -All show and clear commands take effect only on the text following the command. - -\section{Examples} -\subsection{basic} -\begin{lstlisting} -\documentclass{ctexart} -\usepackage{magicwatermark} -\PageSetup[ - rotate = 30, % set the rotation angle - color = red!80, % set color for watermark content - scale = 6 % set the scale -]{ - watermark content -} -\Watermark -\begin{document} -... -\end{document} -\end{lstlisting} -\subsection{Odd and Even Pages} -\begin{lstlisting} -\documentclass{ctexart} -\usepackage{magicwatermark} -\EvenPageSetup[color=cyan,showframe,scale=4]{Even page} % Even page -\OddPageSetup[color=purple,showframe,scale=4]{Odd page} % Odd page -\EvenWatermark % show watermark -\OddWatermark -\begin{document} -... -\end{document} -\end{lstlisting} -\subsection{star} -\begin{lstlisting} -\documentclass{ctexart} -\usepackage{magicwatermark} -\PageSetup*{ - \begin{tikzpicture}[remember picture,overlay] - \node[cyan,scale = 2,shift={(-1,-1)}] at - (current page.north east){--~\thepage~--}; - \end{tikzpicture} -} -\begin{document} -... -\Watermark % This order did not take effect before -\end{document} -\end{lstlisting} -\subsection{New watermark} -\begin{lstlisting} -\documentclass{ctexart} -\usepackage{magicwatermark} -\NewWatermark{one} % new -\NewWatermark{two} -\MyPageSetup[scale=5,color=blue]{one}{content one} % setting -\MyPageSetup[scale=5,color=red]{two}{content two} -\begin{document} -\MyWatermark{one} % use watermark one -... -\newpage -\ClearWatermark{one} % clear watermark one -\MyWatermark{two} % use watermark two -... -\end{document} -\end{lstlisting} -\end{document}
\ No newline at end of file diff --git a/macros/latex/contrib/magicwatermark/magicwatermark.dtx b/macros/latex/contrib/magicwatermark/magicwatermark.dtx deleted file mode 100644 index 35115c1cca..0000000000 --- a/macros/latex/contrib/magicwatermark/magicwatermark.dtx +++ /dev/null @@ -1,598 +0,0 @@ -% \iffalse meta-comment -% !TEX program = XeLaTeX -%<*internal> -\iffalse -%</internal> -%<*internal> -\fi -\begingroup - \def\temp{LaTeX2e} -\expandafter\endgroup\ifx\temp\fmtname\else -\csname fi\endcsname -%</internal> -%<*install> - -\input ctxdocstrip % - -\let\MetaPrefix\relax - -\declarepostamble\emptypostamble -\endpostamble - -\def\MetaPrefix{-- } - - -\let\MetaPrefix\DoubleperCent - -\generate - { -%</install> -%<*internal> - \usedir{source/xelatex/magicwatermark} - \file{magicwatermark.ins} {\from{\jobname.dtx}{install}} -%</internal> -%<*install> - \usedir{xetex/xelatex/magicwatermark} - \file{magicwatermark.sty} {\from{\jobname.dtx}{package}} - \nopreamble\nopostamble - \usedir{doc/xelatex/magicwatermark} - \file{README.md} {\from{\jobname.dtx}{readme}} - } - -\endbatchfile -%</install> -%<*internal> -\fi -%</internal> -%<package>\NeedsTeXFormat{LaTeX2e}[2020/10/01] -%<package>\ProvidesPackage{magicwatermark}[2021/12/22 v1.0.1 watermark for ljguo ] -%<*driver> -\documentclass{ctxdoc} -\usepackage{graphicx} -\usepackage{enumitem} -\usepackage{listings} -\lstset{ -frame=tb,framerule=2pt,language={[LaTeX]TeX},basicstyle={\ttfamily}, -language={[LaTeX]TeX}, -keywordstyle=\color{red!70!black}\bfseries, -keywordstyle={[2]\color{blue!70!black}\bfseries}, -morekeywords={PageSetup,Watermark,NewWatermark,MyPageSetup,MyWatermark,EvenPageSetup,OddPageSetup,EvenWatermark,OddWatermark,ClearWatermark}} -\usepackage{fontspec} -\IfFontExistsTF{calibri.ttf} -{ - \setmainfont{calibri.ttf}[ - BoldFont = calibrib.ttf, - ItalicFont = calibrii.ttf, - BoldItalicFont = calibriz.ttf - ] -} -{} -\setCJKmainfont[AutoFakeBold,AutoFakeSlant]{simfang.ttf} -\usepackage{magicwatermark} -\renewcommand*\marg[1]{\{\meta{#1}\}} -\renewcommand*\oarg[1]{[\meta{#1}]} -\renewcommand*\parg[1]{(\meta{#1})} -\begin{document} -%<!--CODEDOC--> \DisableImplementation - \EnableImplementation - \DocInput{\jobname.dtx} - \IndexLayout - \PrintChanges - \PrintIndex -\end{document} -%</driver> -% \fi -% - -% \GetFileId{magicwatermark.sty} -% -% \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 \~} -% -% -%\title{\pkg{magicwatermark}: 魔法水印宏包} -%\author{郭李军 \\ liguo1020@gmail.com} -%\def\version{v1.0.1} -%\date{\today\quad\version} -%\pagestyle{empty} -%\PageSetup* -%{ -% \begin{tikzpicture}[remember picture,overlay] -% \node[cyan,scale = 2,shift={(-1,-1)}] at (current page.north east){--~\thepage~--}; -% \end{tikzpicture} -%} -%\Watermark -%\maketitle -%\thispagestyle{empty} -%\tableofcontents -%\begin{documentation} -%\changes{v1.0.1}{2021/12/21}{实现了一些基本功能} -%\begin{abstract} -%\pkg{magicwatermark} 是一个基于 \pkg{everypage} 和 \pkg{tikz} 宏包,并经过 \LaTeX3 \ 进行封装的宏包,它可以很灵活的设置和清除水印,所有水印内容都放在 \verb|tikz| 的一个 \verb|node| 里面,并处于页面中心。 -%\end{abstract} -%\section{介绍} -%目前 \pkg{magicwatermark} 宏包只能实现如下功能 -%\begin{itemize} -% \item 设置所有页面的水印 -% \item 设置奇数页的水印 -% \item 设置偶数页的水印 -% \item 新建水印,同页面设置多个水印 -% \item 清除水印 -%\end{itemize} -%\section{用户接口} -%\subsection{提供命令} -% \begin{function}[added=2021-12-21,updated=2021-12-21]{\PageSetup} -% \begin{syntax} -% \tn{PageSetup} \oarg{水印参数} \marg{水印内容} -% \end{syntax} -% 此命令用于设置所有页面的水印内容,接受两个参数,第一个参数用于设置一些属性,以 \verb|key=value| 的形式给出, 第二个参数用于设置水印内容,可以是文字、图片、等. -% \end{function} -%\begin{function}[added=2021-12-21,updated=2021-12-21]{\Watermark} -%\begin{syntax} -% \tn{Watermark} -%\end{syntax} -% 该命令用于显示上面设置的水印 -%\end{function} -%\begin{function}[added=2021-12-21,updated=2021-12-21]{\EvenPageSetup} -%\begin{syntax} -% \tn{EvenPageSetup}\oarg{水印参数}\marg{水印内容} -%\end{syntax} -% 该命令用于设置偶数页的水印内容 -%\end{function} -%\begin{function}[added=2021-12-21,updated=2021-12-21]{\EvenWatermark} -%\begin{syntax} -% \tn{EvenWatermark} -%\end{syntax} -% 该命令用于显示上面设置的偶数页水印 -%\end{function} -%\begin{function}[added=2021-12-21,updated=2021-12-21]{\OddPageSetup} -%\begin{syntax} -% \tn{OddPageSetup}\oarg{水印参数}\marg{水印内容} -%\end{syntax} -% 该命令用于设置奇数页的水印内容 -%\end{function} -%\begin{function}[added=2021-12-21,updated=2021-12-21]{\OddWatermark} -%\begin{syntax} -% \tn{OddWatermark} -%\end{syntax} -% 该命令用于显示上面设置的奇数页水印 -%\end{function} -%\subsection{扩展命令} -%以下带星号命令用法和上面的类似,与其说是扩展,不如说是取消了限制,以上的命令都将水印内容写在一个\verb|node|中,对于对 TikZ 不太熟练的用户来说,前者更加方 -%便快捷,而后者则更加灵活 -%\begin{function}[added=2022-01-07,updated=2022-01-07]{\PageSetup*} -%\begin{syntax} -% \tn{PageSetup*}\marg{水印内容} -%\end{syntax} -%\end{function} -%\begin{function}[added=2022-01-07,updated=2022-01-07]{\EvenPageSetup*} -%\begin{syntax} -% \tn{EvenPageSetup*}\marg{水印内容} -%\end{syntax} -%\end{function} -%\begin{function}[added=2022-01-07,updated=2022-01-07]{\OddPageSetup*} -%\begin{syntax} -% \tn{OddPageSetup*}\marg{水印内容} -%\end{syntax} -%\end{function} -%\begin{function}[added=2021-12-21,updated=2021-12-21]{\NewWatermark} -%\begin{syntax} -% \tn{NewWatermark}\marg{水印名称} -%\end{syntax} -%该命令用于新建一个水印,注意水印名称不能是 \verb|main|, \verb|even|, \verb|odd|. -%\end{function} -%\begin{function}[added=2021-12-21,updated=2021-12-21]{\MyPageSetup} -%\begin{syntax} -% \tn{MyPageSetup}\oarg{水印参数}\marg{水印名称}\marg{水印内容} -%\end{syntax} -%用于设置新建的水印内容 -%\end{function} -%\begin{function}[added=2021-12-21,updated=2021-12-21]{\MyWatermark} -%\begin{syntax} -% \tn{MyWatermark}\marg{水印名称} -%\end{syntax} -% 该命令用于显示上面设置的水印 -%\end{function} -%\begin{function}[added=2021-12-21,updated=2021-12-21]{\ClearWatermark} -%\begin{syntax} -% \tn{ClearWatermark}\marg{水印列表} -%该命令用于清除设置的水印,接受一个逗号列表作为参数,例如: -%\begin{itemize} -% \item \verb|\ClearWatermark{main}| 清除由 \verb|\Watermark| 设置的水印 -% \item \verb|\ClearWatermark{even,odd}| 清除奇数和偶数页的水印 -% \item \verb|\ClearWatermark{all}| 清除所有的水印 -% \item \verb|\ClearWatermark{name1,name2,name3,...}| -%\end{itemize} -%\end{syntax} -%\end{function} -%\subsection{参数列表} -%以上设置命令中的\textbf{水印参数}如下 -%\begin{itemize} -% \item \verb|scale = <number>| 用于设置缩放比例 -% \item \verb|opacity = <number>| 用于设置不透明度 -% \item \verb|shift = {(x,y)}| 用于按向量 (x,y) 平移 -% \item \verb|color = <color expression>| 用于设置文本颜色 -% \item \verb|rotate = <angle>| 用于设置旋转角度 -% \item \verb+align = <center|left|right>+ 用于设置多行文本对齐方式,默认为 center -% \item \verb+showframe = <true|false>+ 用于设置是否显示文本框,默认为 false -%\end{itemize} -%\subsection{一些说明} -%所有的显示命令和清除命令都仅对该命令后面的文本生效。 - -%\section{Examples} -%\subsection{不带星号} -%\begin{lstlisting} -\documentclass{ctexart} -\usepackage{magicwatermark} -\PageSetup[ - rotate = 30, % 设置旋转角度 - color = red!80, % 设置水印内容颜色 - scale = 6 % 设置比例 -]{ - 水印内容 -} -\Watermark % 全文生效 -\begin{document} -... -\end{document} -\end{lstlisting} -%\subsection{奇偶页} -%\begin{lstlisting} -\documentclass{ctexart} -\usepackage{magicwatermark} -\EvenPageSetup[color=cyan,showframe,scale=4]{偶数页} % 设置奇数页 -\OddPageSetup[color=purple,showframe,scale=4]{奇数页} % 设置偶数页 -\EvenWatermark % 显示水印 -\OddWatermark -\begin{document} -... -\end{document} -\end{lstlisting} -%\subsection{带星号} -%\begin{lstlisting} -\documentclass{ctexart} -\usepackage{magicwatermark} -\PageSetup*{ - \begin{tikzpicture}[remember picture,overlay] - \node[cyan,scale = 2,shift={(-1,-1)}] at - (current page.north east){--~\thepage~--}; - \end{tikzpicture} -} -\begin{document} -... -\Watermark % 该命令之前不生效 -\end{document} -\end{lstlisting} -%\subsection{新建水印} -%\begin{lstlisting} -\documentclass{ctexart} -\usepackage{magicwatermark} -\NewWatermark{one} % 新建两个水印 -\NewWatermark{two} -\MyPageSetup[scale=5,color=blue]{one}{水印内容一} % 设置水印 -\MyPageSetup[scale=5,color=red]{two}{水印内容二} -\begin{document} -\MyWatermark{one} % 使用第一个水印 -... -\newpage -\ClearWatermark{one} % 清除第一个水印 -\MyWatermark{two} % 使用第二个水印 -... -\end{document} -\end{lstlisting} -%\end{documentation} -% -% \StopEventually{} -% \section{代码实现} -% \begin{macrocode} -%<*package> -% \end{macrocode} -% 加载必要的宏包 -% \begin{macrocode} -\RequirePackage{everypage-1x,tikz,xparse,expl3} -% \end{macrocode} -% 打开\LaTeX3 编程环境 -% \begin{macrocode} -\ExplSyntaxOn -% \end{macrocode} -% 声明一些变量 -% \begin{macrocode} -\tl_new:N \l_mainpage_tl -\tl_new:N \l_evenpage_tl -\tl_new:N \l_oddpage_tl -\tl_new:N \g_case_tl -\tl_new:N \g_clear_all_tl -% \end{macrocode} -% 定义警告 -% \begin{macrocode} -\msg_new:nnn{clear}{not~have}{I~can~not~find~the~"\clear"~watermark~!} -% \end{macrocode} -% \begin{macro}{\PageSetup} -% 对所有页面设置水印 -% \begin{macrocode} -\NewDocumentCommand{\PageSetup}{sO{}+m} -{ - \IfBooleanTF{#1} - { - \tl_set:Nn \l_mainpage_tl{#3} - } - { - \tl_set:Nn \l_mainpage_tl - { - \group_begin: - \keys_set:nn{watermark}{#2} - \begin{tikzpicture}[remember~picture,overlay] - \node - [ - scale = \fp_use:N\l_scale_fp, - opacity = \fp_use:N\l_opacity_fp, - shift = \tl_use:N\l_shift_tl, - color = \tl_use:N \l_color_tl, - rotate = \fp_use:N \l_rotate_fp, - align = \tl_use:N \l_align_tl, - \bool_if:NTF \l_showframe_bool{draw}{}, - ] - at(current~page.center){#3}; - \end{tikzpicture} - \group_end: - } - } -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\Watermark} -% 用于显示由 \verb|\PageSetup| 命令设置的水印 -% \begin{macrocode} -\NewDocumentCommand{\Watermark}{} -{ - \AddEverypageHook{\tl_use:N \l_mainpage_tl} -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\EvenPageSetup} -% 对偶数页设置水印 -% \begin{macrocode} -\NewDocumentCommand{\EvenPageSetup}{sO{}+m} -{ - \IfBooleanTF{#1} - { - \tl_set:Nn \l_evenpage_tl{#3} - } - { - \tl_set:Nn \l_evenpage_tl - { - \group_begin: - \keys_set:nn{watermark}{#2} - \begin{tikzpicture}[remember~picture,overlay] - \node - [ - scale = \fp_use:N\l_scale_fp, - opacity = \fp_use:N\l_opacity_fp, - shift = \tl_use:N\l_shift_tl, - color = \tl_use:N \l_color_tl, - rotate = \fp_use:N \l_rotate_fp, - align = \tl_use:N \l_align_tl, - \bool_if:NTF \l_showframe_bool{draw}{}, - ] - at(current~page.center){#3}; - \end{tikzpicture} - \group_end: - } - } -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\EvenWatermark} -% 用于显示由 \verb|\EvenPageSetup| 命令设置的水印 -% \begin{macrocode} -\NewDocumentCommand{\EvenWatermark}{} -{ - \AddEverypageHook - { - \int_if_even:nT{\int_use:N \value{page}} - { - \tl_use:N \l_evenpage_tl - } - } -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\OddPageSetup} -% 对奇数页设置水印 -% \begin{macrocode} -\NewDocumentCommand{\OddPageSetup}{sO{}+m} -{ - \IfBooleanTF{#1} - { - \tl_set:Nn \l_oddpage_tl{#3} - } - { - \tl_set:Nn \l_oddpage_tl - { - \group_begin: - \keys_set:nn{watermark}{#2} - \begin{tikzpicture}[remember~picture,overlay] - \node - [ - scale = \fp_use:N\l_scale_fp, - opacity = \fp_use:N\l_opacity_fp, - shift = \tl_use:N\l_shift_tl, - color = \tl_use:N \l_color_tl, - rotate = \fp_use:N \l_rotate_fp, - align = \tl_use:N \l_align_tl, - \bool_if:NTF \l_showframe_bool{draw}{}, - ] - at(current~page.center){#3}; - \end{tikzpicture} - \group_end: - } - } -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\OddWatermark} -% 用于显示由 \verb|\OddPageSetup| 命令设置的水印 -% \begin{macrocode} -\NewDocumentCommand{\OddWatermark}{} -{ - \AddEverypageHook - { - \int_if_odd:nT{\int_use:N \value{page}} - { - \tl_use:N \l_oddpage_tl - } - } -} -% \end{macrocode} -% \end{macro} - -% \begin{macro}{\NewWatermark} -% 用于新建一个水印 -% \begin{macrocode} -\NewDocumentCommand{\NewWatermark}{m} -{ - \tl_new:c {l_#1_tl} - \tl_put_right:Nn \g_case_tl {{#1}{\tl_clear:c {l_#1_tl}}} - \tl_put_right:Nn \g_clear_all_tl {\tl_clear:c {l_#1_tl}} -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\MyPageSetup} -% 用于设置新建的水印 -% \begin{macrocode} -\NewDocumentCommand{\MyPageSetup}{O{} m +m} -{ - \tl_set:cn {l_#2_tl} - { - \group_begin: - \keys_set:nn{watermark}{#1} - \begin{tikzpicture}[remember~picture,overlay] - \node - [ - scale = \fp_use:N\l_scale_fp, - opacity = \fp_use:N\l_opacity_fp, - shift = \tl_use:N\l_shift_tl, - color = \tl_use:N \l_color_tl, - rotate = \fp_use:N \l_rotate_fp, - align = \tl_use:N \l_align_tl, - \bool_if:NTF \l_showframe_bool{draw}{}, - ] - at(current~page.center){#3}; - \end{tikzpicture} - \group_end: - } -} -% \end{macrocode} -% \end{macro} - - - -% \begin{macro}{\MyWatermark} -% 用于显示由 \verb|\MyPageSetup| 命令设置的水印 -% \begin{macrocode} -\NewDocumentCommand{\MyWatermark}{m} -{ - \AddEverypageHook{\tl_use:c {l_#1_tl}} -} -% \end{macrocode} -% \end{macro} -% 定义一些可选参数, 用于对水印进行设置 -% \begin{macrocode} -\keys_define:nn{watermark} -{ - scale.fp_set:N = \l_scale_fp, - scale.initial:n = 1.0, - scale.default:n = 1.0, - opacity.fp_set:N = \l_opacity_fp, - opacity.initial:n = 0.8, - opacity.default:n = 0.8, - shift.tl_set:N = \l_shift_tl, - shift.initial:n = {(0,0)}, - shift.default:n = {(0,0)}, - color.tl_set:N = \l_color_tl, - color.initial:n = black, - color.default:n =black, - rotate.fp_set:N =\l_rotate_fp, - rotate.initial:n = 0.0, - rotate.default:n = 0.0, - align.tl_set:N = \l_align_tl, - align.initial:n = center, - align.default:n = center, - showframe.bool_set:N = \l_showframe_bool, - showframe.initial:n = false, - showframe.default:n = true, -} -% \end{macrocode} -% \begin{macro}{\g_clear_all_tl} -% 用于保存待清空的所有水印 -% \begin{macrocode} -\tl_gset:Nn \g_clear_all_tl -{ - \tl_clear:N \l_mainpage_tl - \tl_clear:N \l_evenpage_tl - \tl_clear:N \l_oddpage_tl -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\g_case_tl} -% 用于保存一些开关 -% \begin{macrocode} -\tl_gset:Nn \g_case_tl{ - {all} - { - \tl_use:N\g_clear_all_tl - } - {even} - { - \tl_clear:N \l_evenpage_tl - } - {odd} - { - \tl_clear:N \l_oddpage_tl - } - {main} - { - \tl_clear:N \l_mainpage_tl - } -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ClearWatermark} -% 用于清除设置的水印 -% \begin{macrocode} -\NewDocumentCommand{\ClearWatermark}{m} -{ -\clist_gset:Nn \g_clear_clist{#1} -\clist_map_variable:NNn \g_clear_clist \clear -{ - \exp_args:NV \str_case:nVF \clear - \g_case_tl - {\msg_warning:nn{clear}{not~have}} -} -} -% \end{macrocode} -% \end{macro} -% 关闭\LaTeX3 编程环境 -% \begin{macrocode} -\ExplSyntaxOff -% \end{macrocode} -% \begin{macrocode} -%</package> -% \end{macrocode} -% \Finale -% -\endinput -\endlinechar
\ No newline at end of file diff --git a/macros/latex/contrib/magicwatermark/magicwatermark.pdf b/macros/latex/contrib/magicwatermark/magicwatermark.pdf Binary files differdeleted file mode 100644 index 396233aba2..0000000000 --- a/macros/latex/contrib/magicwatermark/magicwatermark.pdf +++ /dev/null diff --git a/macros/latex/contrib/magicwatermark/magicwatermark.sty b/macros/latex/contrib/magicwatermark/magicwatermark.sty new file mode 100644 index 0000000000..e40af7ea0b --- /dev/null +++ b/macros/latex/contrib/magicwatermark/magicwatermark.sty @@ -0,0 +1,453 @@ +\ProvidesExplPackage{magicwatermark}{2024/06/11}{1.2B}{magic watermark, author} + + +\msg_new:nnn {magicwatermark}{ Unable to parse } +{ + Unable~to~parse~this~list~parameter.^^J + #1 +} + +\msg_new:nnn {magicwatermark}{ Enable TikZ } +{ + tikz~option~has~been~disabled,^^J + style~will~be~ignored. +} + +\msg_new:nnn {magicwatermark}{ Load TikZ } +{ + Please~load~tikz~package~before~magicwatermark. +} + +\seq_new:N \l__mw_tmpa_seq +\seq_new:N \l__mw_tmpb_seq +\seq_new:N \l__mw_tmpc_seq +\seq_new:N \l__mw_tmpd_seq + + +\int_new:N \l__mw_tmpa_int +\int_new:N \l__mw_tmpb_int +\int_new:N \l__mw_tmpc_int +\int_new:N \l__mw_tmpd_int +\int_new:N \l__mw_tmpe_int + +\clist_new:N \l__mw_list_arabic_number_clist +\clist_new:N \l__mw_list_roman_number_clist +\clist_new:N \l__mw_list_range_clist +\clist_new:N \l__mw_list_expression_clist + + + + +\clist_new:N \l__mw_tmpa_clist +\clist_new:N \l__mw_tmpb_clist +\clist_new:N \l__mw_tmpc_clist + + +\tl_new:N \l__mw_tmpa_tl +\tl_new:N \l__mw_tmpb_tl +\tl_new:N \l__mw_tmpc_tl +\tl_new:N \g__mw_list_tl + +\tl_new:N \g__mw_style_tl +\tl_new:N \g__mw_content_tl + +\bool_new:N \g__mw_is_append_bool +\bool_set_false:N \g__mw_is_append_bool +\bool_new:N \g__mw_tikz_bool +\bool_set_true:N \g__mw_tikz_bool + +\regex_const:Nn \c__mw_arabic_numbers_regex { ^\d+$ } +\regex_const:Nn \c__mw_roman_numbers_regex { ^[ivxlcdm]+$ } + + + +\int_new:N \g__mw_last_page_int + +\AtBeginDocument{ + \int_compare:nTF { \@abspage@last = \number\maxdimen } + { + \int_gset:Nn \g__mw_last_page_int { 10 } + } + { + \int_gset:Nn \g__mw_last_page_int { \@abspage@last } + } +} + +\cs_new_protected:Npn \__mw_clist_deduplicate:N #1 +{ + \group_begin: + \clist_clear:N \l_tmpa_clist + \clist_map_inline:Nn #1 + { + \clist_if_in:NnF \l_tmpa_clist { ##1 } + { \clist_put_right:Nn \l_tmpa_clist { ##1 } } + } + \clist_gset_eq:NN #1 \l_tmpa_clist + \group_end: +} + + +\cs_new:Npn \__mw_list_parser_aux:n #1 { + + \clist_clear:N \l__mw_list_arabic_number_clist + \clist_clear:N \l__mw_list_roman_number_clist + \clist_clear:N \l__mw_list_range_clist + \clist_clear:N \l__mw_list_expression_clist + + % split by commas + \group_begin: + \seq_set_split:Nnn \l__mw_tmpa_seq { , } { #1 } + \seq_map_inline:Nn \l__mw_tmpa_seq + { + \tl_if_eq:nnTF { ##1 } { odd } % odd, push 2X + 1 + { + \clist_gput_right:Nn \l__mw_list_expression_clist { 2X + 1 } + } + { + \tl_if_eq:nnTF { ##1 } { even } % even, push 2X + { + \clist_gput_right:Nn \l__mw_list_expression_clist { 2X } + } + { + \tl_if_in:nnTF { ##1 } { X } % expression, push ##1 + { + \clist_gput_right:Nn \l__mw_list_expression_clist { ##1 } + } + { + \tl_if_in:nnTF { ##1 } { - } % range, push ##1 + { + \clist_gput_right:Nn \l__mw_list_range_clist { ##1 } + } + { + \__mw_if_arabic_number:nTF { ##1 } + { + \clist_gput_right:Nn \l__mw_list_arabic_number_clist { ##1 } + } + { + \__mw_if_roman_number:nTF { ##1 } + { + \clist_gput_right:Nn \l__mw_list_roman_number_clist { ##1 } + } + { + % error + \msg_error:nnn {magicwatermark}{ Unable to parse } + { + Error~list~parameter~``##1''. + } + } + } + } + } + } + } + } + \group_end: +} + +\prg_new_conditional:Npnn \__mw_if_arabic_number:n #1 { p, T, F, TF } +{ + \regex_match:NnTF \c__mw_arabic_numbers_regex { #1 } + { + \prg_return_true: + } + { + \prg_return_false: + } +} + +\prg_new_conditional:Npnn \__mw_if_roman_number:n #1 { p, T, F, TF } +{ + \regex_match:NnTF \c__mw_roman_numbers_regex { #1 } + { + \prg_return_true: + } + { + \prg_return_false: + } +} + +\prg_generate_conditional_variant:Nnn \__mw_if_arabic_number:n { x } {p, T, F, TF} +\prg_generate_conditional_variant:Nnn \__mw_if_roman_number:n { x } {p, T, F, TF} + + +\cs_new:Npn \__mw_list_parser_for_arabic_number:n #1 { + % arabic number + \fp_compare:nTF { #1 <= \g__mw_last_page_int && #1 > 0 } + { + \clist_put_right:Nn \l__mw_tmpa_clist { #1 } + } + { + % error + \msg_error:nnn {magicwatermark}{ Unable to parse } + { + Error~list~parameter~``#1''.^^J + Error~number~``#1''. + } + } +} + + + +\cs_new:Npn \__mw_list_parser_for_roman_number:n #1 { + % roman number + \int_set:Nn \l__mw_tmpa_int { \g__mw_last_page_int - \int_from_roman:n { #1 } + 1 } + \fp_compare:nTF + { + \l__mw_tmpa_int <= \g__mw_last_page_int && \l__mw_tmpa_int > 0 + } + { + \clist_put_right:NV \l__mw_tmpa_clist \l__mw_tmpa_int + } + { + % error + \msg_error:nnn {magicwatermark}{ Unable to parse } + { + Error~list~parameter~``#1''.^^J + Error~roman~number~``#1''. + } + } +} + + +\cs_new:Npn \__mw_list_parser_for_range:n #1 { + % range, 1-5, 3-i + \seq_set_split:Nnn \l__mw_tmpb_seq { - } { #1 } + + \__mw_if_arabic_number:xTF { \seq_item:Nn \l__mw_tmpb_seq { 1 } } + { + \int_set:Nn \l__mw_tmpb_int { \seq_item:Nn \l__mw_tmpb_seq { 1 } } + } + { + \__mw_if_roman_number:xTF { \seq_item:Nn \l__mw_tmpb_seq { 1 } } + { + \exp_args:NNx \int_set:Nn \l__mw_tmpb_int + { + \g__mw_last_page_int - \exp_not:N \int_from_roman:n { \seq_item:Nn \l__mw_tmpb_seq { 1 } } + 1 + } + } + { + \int_set:Nn \l__mw_tmpb_int { -1 } + % error + \msg_error:nnn {magicwatermark}{ Unable to parse } + { + Error~list~parameter~``#1''.^^J + Error~range~left~``#1''. + } + } + } + + \__mw_if_arabic_number:xTF { \seq_item:Nn \l__mw_tmpb_seq { 2 } } + { + \int_set:Nn \l__mw_tmpc_int { \seq_item:Nn \l__mw_tmpb_seq { 2 } } + } + { + \__mw_if_roman_number:xTF { \seq_item:Nn \l__mw_tmpb_seq { 2 } } + { + \exp_args:NNx \int_set:Nn \l__mw_tmpc_int + { + \g__mw_last_page_int - \exp_not:N \int_from_roman:n { \seq_item:Nn \l__mw_tmpb_seq { 2 } } + 1 + } + } + { + \int_set:Nn \l__mw_tmpc_int { -1 } + % error + \msg_error:nnn {magicwatermark}{ Unable to parse } + { + Error~list~parameter~``#1''.^^J + Error~range~right~``#1''. + } + } + } + + \fp_compare:nT { \l__mw_tmpb_int > 0 && \l__mw_tmpc_int > 0} + { + \int_step_inline:nnn + { \int_min:nn { \l__mw_tmpb_int } { \l__mw_tmpc_int } } + { \int_max:nn { \l__mw_tmpb_int } { \l__mw_tmpc_int } } + { + \clist_put_right:Nn \l__mw_tmpa_clist { ##1 } + } + } +} + +\cs_new:Npn \__mw_list_parser_for_expression:n #1 { + \int_zero:N \l__mw_tmpd_int + \int_zero:N \l__mw_tmpe_int + \group_begin: + \tl_set:Nn \l__mw_tmpa_tl { #1 } + \regex_replace_all:nnN { (\d+)X } { \1*\c{l__mw_tmpe_int} } \l__mw_tmpa_tl + \tl_replace_all:Nnn \l__mw_tmpa_tl { X } { \l__mw_tmpe_int } + % \tl_show:N \l__mw_tmpa_tl + \int_while_do:nn { \l__mw_tmpd_int < \g__mw_last_page_int } + { + \int_set:Nn \l__mw_tmpd_int + { + \fp_eval:n { \l__mw_tmpa_tl } + } + \clist_gput_right:NV \l__mw_tmpa_clist \l__mw_tmpd_int + \int_incr:N \l__mw_tmpe_int + } + \group_end: +} + + +\cs_new_nopar:Npn \__mw_list_parser:nN #1#2 { + + % case 1 -> odd, even + % case 2 -> number, 1 + % case 3 -> roman, i + % case 4 -> range, 1-5, 3-ii + % case 5 -> expression, 3X + 1 + + \__mw_list_parser_aux:n { #1 } + + \clist_clear:N \l__mw_tmpa_clist + \clist_map_inline:Nn \l__mw_list_arabic_number_clist + { + \__mw_list_parser_for_arabic_number:n { ##1 } + } + + \clist_map_inline:Nn \l__mw_list_roman_number_clist + { + \__mw_list_parser_for_roman_number:n { ##1 } + } + + + \clist_map_inline:Nn \l__mw_list_range_clist + { + \__mw_list_parser_for_range:n { ##1 } + } + + + \clist_map_inline:Nn \l__mw_list_expression_clist + { + \__mw_list_parser_for_expression:n { ##1 } + } + + + \clist_sort:Nn \l__mw_tmpa_clist { + \int_compare:nNnTF { ##1 } > { ##2 } + { \sort_return_swapped: } + { \sort_return_same: } + } + \__mw_clist_deduplicate:N \l__mw_tmpa_clist + \clist_set_eq:NN #2 \l__mw_tmpa_clist +} + + +\cs_new:Npn \__mw_parser:nN #1#2 { + \clist_clear:N #2 + \tl_if_eq:nnTF { #1 } { * } + { + \int_step_inline:nnn { 1 } { \g__mw_last_page_int } + { + \clist_put_right:Nn #2 { ##1 } + } + } + { + \__mw_list_parser:nN { #1 } #2 + } +} + + + + +\keys_define:nn { mw / new } +{ + pages .tl_set:N = \g__mw_list_tl, + style .tl_set:N = \g__mw_style_tl, + % style .code:n = \__mw_parse_style:n { #1 }, + content .tl_set:N = \g__mw_content_tl, + is~append .bool_set:N = \g__mw_is_append_bool, + tikz .bool_set:N = \g__mw_tikz_bool +} + +\cs_new:Npn \__mw_parse_style: { + \tl_if_empty:NF \g__mw_style_tl + { + \bool_if:NTF \g__mw_tikz_bool + { + \IfPackageLoadedTF{tikz} + { + \tl_set_eq:NN \l__mw_tmpc_tl \g__mw_style_tl + } + { + \msg_error:nn {magicwatermark}{ Load TikZ } + } + } + { + \msg_warning:nn {magicwatermark}{ Enable TikZ } + } + } +} + +\keys_define:nn { mw } +{ + setup .code:n = \__mw_new_watermark:n {#1} +} + + +\cs_new:Npn \__mw_new_watermark:n #1 { + \group_begin: + \keys_set:nn { mw / new }{#1} + + % parse style + \__mw_parse_style: + + % parse pages + \exp_args:NV \__mw_parser:nN \g__mw_list_tl \l__mw_tmpc_clist + + \clist_map_inline:Nn \l__mw_tmpc_clist { + + \bool_if:NTF \g__mw_tikz_bool + { + \IfPackageLoadedTF{tikz} + { + \tl_set:Ne \l__mw_tmpb_tl + { + \exp_not:N \tikz[remember~picture, overlay] + { + \exp_not:N \node[inner~sep = 0pt, outer~sep = 0pt, opacity = .5, align = left, \exp_not:V \g__mw_style_tl] at (current~page.center) + { + \exp_not:V \g__mw_content_tl + }; + } + } + } + { + \msg_error:nn {magicwatermark}{ Load TikZ } + } + } + { + \tl_set:NV \l__mw_tmpb_tl \g__mw_content_tl + } + + \bool_if:nTF { \g__mw_is_append_bool && \tl_if_exist_p:c { g__mw_content_ \int_to_roman:n { ##1 } _tl } } + { + \tl_gput_right:cV { g__mw_content_ \int_to_roman:n { ##1 } _tl } \l__mw_tmpb_tl + } + { + \tl_gset:cV { g__mw_content_ \int_to_roman:n { ##1 } _tl } \l__mw_tmpb_tl + } + } + \group_end: +} + + +\NewDocumentCommand{\MagicWatermark}{m}{ + \group_begin: + \AtBeginDocument{ + \keys_set:nn { mw } { #1 } + \AddToHook{shipout/background}{ + \put(.5\paperwidth,-.5\paperheight){ + \tl_if_exist:cT { g__mw_content_ \int_to_roman:n { \value{page} }_tl } + { + \tl_use:c { g__mw_content_ \int_to_roman:n { \value{page} } _tl } + } + } + } + } + \group_end: +} + +\@onlypreamble\MagicWatermark
\ No newline at end of file diff --git a/macros/latex/contrib/mailing/CATALOG b/macros/latex/contrib/mailing/CATALOG new file mode 100644 index 0000000000..bfc37ff238 --- /dev/null +++ b/macros/latex/contrib/mailing/CATALOG @@ -0,0 +1,15 @@ +Name: mailing +Problems-To: texniek at texniek.nl +Author: J.L. Braams +Version: 1.0c + +Description: + +The mailing package implements support for producing letters to +multiple people. + +Keywords: latex mailing + +Address: +TeXniek +The Netherlands diff --git a/macros/latex/contrib/mailing/manifest.txt b/macros/latex/contrib/mailing/MANIFEST index b0653434c7..b93e68a619 100644 --- a/macros/latex/contrib/mailing/manifest.txt +++ b/macros/latex/contrib/mailing/MANIFEST @@ -2,11 +2,11 @@ % CONTENTS OF THE MAILING PACKAGE % =============================== % -% manifest.txt -- This file +% MANIFEST -- This file % % mailing.dtx -- A package to produce a `mailing' ie a large number % of letters with (almost) identical text. -% mailing.pdf -- The `printed version of mailing.dtx +% mailing.pdf -- The `printed´ version of mailing.dtx % % Installation script for the various parts: % ------------------------------------------- diff --git a/macros/latex/contrib/mailing/README b/macros/latex/contrib/mailing/README new file mode 100644 index 0000000000..6dccf798b9 --- /dev/null +++ b/macros/latex/contrib/mailing/README @@ -0,0 +1,14 @@ + mailing bundle + + July 2024, 2024 + +This bundle contains a package that provides functionality to +produce multiple letters with the same text to different addressses. +It provides three commands \addressfile, \mailingtext and \makemailing. + +Copyright (C) 2024 Johannes L. Braams texniek(at)texniek.nl + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1.3c of the License, or any later version. diff --git a/macros/latex/contrib/mailing/mailing.dtx b/macros/latex/contrib/mailing/mailing.dtx index 01aabfcfd4..2a1747d440 100644 --- a/macros/latex/contrib/mailing/mailing.dtx +++ b/macros/latex/contrib/mailing/mailing.dtx @@ -1,33 +1,34 @@ % \iffalse meta-comment % -% Copyright 1994-2004 Johannes Braams. All rights reserved. -% +% Copyright 1999-2024 Johannes L. Braams. All rights reserved. +% % This file is part of the mailing package. % ----------------------------------------- -% +% % It may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 +% 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.3 or later is part of all distributions of LaTeX -% version 2003/12/01 or later. -% +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008 or later. +% % This work has the LPPL maintenance status "maintained". -% +% % The Current Maintainer of this work is Johannes Braams. -% -% The list of all files belonging to the mailing package is -% given in the file `manifest.txt'. -% +% +% The list of all files belonging to the supertabular package is +% given in the file `MANIFEST. +% % The list of derived (unpacked) files belonging to the distribution % and covered by LPPL is defined by the unpacking scripts (with % extension .ins) which are part of the distribution. % \fi +% % \CheckSum{157} % %\iffalse -%% Copyright (C) 1999-2004 Johannes L. Braams texniek at braams.cistron.nl +%% Copyright (C) 1999-2024 Johannes L. Braams texniek at texniek.nl %% %% %<*dtx> @@ -38,7 +39,7 @@ %<driver>\ProvidesFile{mailing.drv} %\fi %\ProvidesFile{mailing} - [2004/02/20 v1.0b Send letters to multiple addresses] + [2024/07/20 v1.0c Send letters to multiple addresses] %\iffalse %<*driver> \documentclass{ltxdoc} @@ -48,11 +49,14 @@ \end{document} %</driver> %\fi +% \changes{v1.0c}{2024/07/20}{Updated contact info} % % \GetFileInfo{mailing} -% \title{Creating a mailing} +% \title{Creating a mailing\thanks{This file +% has version number \fileversion, last +% revised \filedate.}} % \author{Johannes Braams} -% \date{september 7, 1994} +% \date{\filedate}^^AA original date{september 7, 1994} % \maketitle % % \markboth @@ -304,4 +308,4 @@ % \end{macro} % % \Finale -\endinput
\ No newline at end of file +\endinput diff --git a/macros/latex/contrib/mailing/mailing.ins b/macros/latex/contrib/mailing/mailing.ins index b9143a89b6..a9c133d718 100644 --- a/macros/latex/contrib/mailing/mailing.ins +++ b/macros/latex/contrib/mailing/mailing.ins @@ -3,54 +3,43 @@ %% driver files from the doc files in this package when run through %% LaTeX or TeX. %% -%% Copyright 1989-2004 Johannes L. Braams. All rights reserved. %% -%% This file is part of the mailing package. -%% ------------------------------------------ +%% This file is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. %% -%% It 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. -%% The latest version of this license is in -%% http://www.latex-project.org/lppl.txt -%% and version 1.3 or later is part of all distributions of LaTeX -%% version 2003/12/01 or later. +%% IMPORTANT NOTICE: %% -%% This work has the LPPL maintenance status "maintained". +%% Copyright (C) 1994-2024 Johannes Braams, All rights reserved. %% -%% The Current Maintainer of this work is Johannes Braams. -%% -%% The list of all files belonging to the mailing package is -%% given in the file `manifest.txt. -%% -%% The list of derived (unpacked) files belonging to the distribution -%% and covered by LPPL is defined by the unpacking scripts (with -%% extension .ins) which are part of the distribution. +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt; either +%% version 1.3c of the License, or any later version. %% %% --------------- start of docstrip commands ------------------ %% % ignored commands -\def\filedate{2004/02/20} +\def\filedate{2024/07/20} \def\batchfile{mailing.ins} \input docstrip.tex - % package file \preamble -Copyright (C) 1999-2004 Johannes Braams. All rights reserved. +Copyright (C) 1999-2024 Johannes Braams. All rights reserved. This file was generated from file(s) of the mailing package. ------------------------------------------------------------ It may be distributed and/or modified under the -conditions of the LaTeX Project Public License, either version 1.3 +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.3 or later is part of all distributions of LaTeX -version 2003/12/01 or later. +and version 1.3c or later is part of all distributions of LaTeX +version 2008 or later. This work has the LPPL maintenance status "maintained". @@ -61,12 +50,13 @@ mailing package. You may however distribute the mailing package without such generated files. The list of all files belonging to the mailing package is -given in the file `manifest.txt. +given in the file `MANIFEST'. The list of derived (unpacked) files belonging to the distribution and covered by LPPL is defined by the unpacking scripts (with extension .ins) which are part of the distribution. \endpreamble +\keepsilent \generateFile{mailing.sty}{t}{\from{mailing.dtx}{package}} diff --git a/macros/latex/contrib/mailing/mailing.pdf b/macros/latex/contrib/mailing/mailing.pdf Binary files differindex 1625f90e04..109c5c3de0 100644 --- a/macros/latex/contrib/mailing/mailing.pdf +++ b/macros/latex/contrib/mailing/mailing.pdf diff --git a/macros/latex/contrib/mathastext/README.md b/macros/latex/contrib/mathastext/README.md index 44b778b728..f2c55cf149 100644 --- a/macros/latex/contrib/mathastext/README.md +++ b/macros/latex/contrib/mathastext/README.md @@ -8,13 +8,13 @@ +-------------------------------------------+ This Work may be distributed and/or modified under the conditions -of the [LPPL1.3c](http://www.latex-project.org/lppl/lppl-1-3c.txt) +of the [LPPL 1.3c](https://www.latex-project.org/lppl/lppl-1-3c.txt) The Author of this Work is Jean-Francois Burnol (`jfbu at free dot fr`) -Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol +Copyright (C) 2011-2019, 2022-2024 Jean-Francois Burnol - Source: mathastext.dtx 1.3zb 2023/12/29 + Source: mathastext.dtx 1.4b 2024/07/27 DESCRIPTION @@ -82,6 +82,98 @@ Main options: `italic`, `frenchmath`, `subdued`, `LGRgreek`. RECENT CHANGES ============== +1.4b \[2024/07/27\] +---- + +* Fix a regression at `1.4` regarding option `nodigits`. + +* New option: `noletters`. I am in old age now so I can provide an option + completely antithetical to my life work. + +* Option `everymath` which is destined to be removed at next major + release warns user about it. As major releases tend to happen once + per decade I think the constant nagging will become insufferable + and you will adapt to the `1.4` changes rather than persisting into + using this option. + +1.4a \[2024/07/20\] +---- + +* There was a documentation glitch in 1.4 and also a problem with the + `\MTprimeskip` feature being lost under the emergency fall-back + `everymath` option. + +1.4 \[2024/07/20\] +--- + +* Since 1.2 of 2012/12/20, mathastext has used mathematically active + characters to propose certain advanced functionalities. For reasons half + lost in the mists of time but whose main one was surely to keep the + meaning of the active shape of characters unchanged outside of math mode, + this mathematical activation, and (in most cases) the definitions of what + active characters do, were done again at *each* entrance into math mode. + At this 1.4 release, mathastext does not inject *any* code whatsoever into + the `\everymath` and `\everydisplay` toks registers anymore (except for + one font-related hack needed under LuaLaTeX, see below). Your documents + will compile a tiny bit faster. + +* In (unsual) documents where users play with catcodes and mathcodes it is + impossible to keep exact backward compatibility, because documented user + commands which acted formerly a toggles with delayed action now will enact + changes immediately if in the document body. In practice consequences are + expected to be few, because catcode active characters are (as was already + the case with earlier releases) hacked only when they are Babel shorthands + and they are then modified in a way altering only their action in math + mode. The precise description of what mathastext does when mathematically + activating (or not) a character, depending on circumstances, is to be + found among small-print comments in the section "Extended scope of the + math alphabets commands". See also the documentation of the + `\MTmathactiveletters` command for some specifics regarding ascii letters. + +* New option: `everymath`. It instructs mathastext to revert (partially) + to its legacy code which uses `\everymath/\everydisplay`. This reversal + is partial, the handling of ascii letters not being included into it. The + `everymath` option is there only to try as a quick fix in case transition + to this release causes a major problem in a user document and time is + lacking to investigate. Please report to the author such issues. Option + `everymath` is destined to be removed at next major release. + +* New option: `activedigits`. Enjoy. + +* It is now easier to hook into the mathastext architecture for + mathematically activated ascii letters. See the new section "Hacking + letters (and even digits) for special tasks". + +* Bugfix: do not override special behavior of the math mode dot in + babel-spanish. + +* Bugfix: A desperate hack related to LuaLaTeX font matters and dating + back to 1.3o 2016/05/03 had been for some years in dire need of an update + regarding fonts using `Renderer=HarfBuzz`. This is done now. Thanks to + tex.sx `user691586` for report. This is currently the sole remaining + usage of `\everymath/\everydisplay`. + +* Bugfix: an optional feature related to `\{` and `\}` was broken since an + upstream LaTeX change at its 2020-02-02 release. + +* With option symbolmisc, those math symbol macros formerly defined via + `\DeclareRobustCommand` are now declared via `\protected\def`. + +* Removal of legacy branches previously kept to support LaTeX earlier than + 2020-02-02. + +* Removal of support for EU1 and EU2 font encodings. + +* Option `noasterisk` deprecated at 1.2d 2013/01/02 has (finally) been removed. + +* Four test files previously included and auto-extracted from the + distributed dtx have been dropped. One of them is still available + on the package homepage. + +* Some parts of the documentation have been massively re-ordered and even to some + extent improved. But there may be some occasions where obsolete statements will + be found having the legacy `\everymath/\everydisplay` situation as background. + 1.3zb \[2023/12/29\] ----- @@ -133,63 +225,3 @@ RECENT CHANGES * Fix long-standing hyperlink problems in the documentation: blue color words should now all be functioning hyperlinks. -1.3z \[2023/09/01\] ----- - -Fix 1.3y regression which broke `selfGreek` option due to internal -renamings. Thanks to Stephan Korell for report. - -1.3y \[2022/11/04\] ----- - -(the 1.3x had an annoying documentation bug, and had already -been pushed to CTAN, hence the version increase to 1.3y) - -* mathastext now requires the `\expanded` primitive (which is - available with all major engines since TeXLive 2019). - -* Revisit parts of the documentation (mainly - the Examples, and the section on Greek letters) and shuffle - the other parts to surely improve things. Mention - the [mathfont](https://ctan.org/pkg/mathfont) - and [frenchmath](https://ctan.org/pkg/frenchmath) packages. - -* Add the `ncccomma` option which loads the - [ncccomma](https://ctan.org/pkg/ncccomma) - package to allow the comma as decimal separator. - -* Add the `binarysemicolon` option to let the semi-colon - be of type `\mathbin`, not `\mathpunct`. - -* Add the `frenchmath*` option which does all three of - `frenchmath`, `ncccomma` and `binarysemicolon`. - -* Under the `LGRgreek` and `LGRgreeks` options only: - - - make available upright and italic Greek letters in math mode - via `\alphaup`, `\alphait`, ... control sequences, in - addition to those not using such postfixed-names. - - - add `\mathgreekup` and `\mathgreekit` math alphabets. - - - add `\MTgreekupdefault` and `\MTgreekitdefault`. The former - replaces `\updefault` which was used in some places and since - LaTeX 2020-02-02 caused systematic Font Warnings about the - substitution of `up` by `n`. - - These new features required an extensive internal refactoring - which is expected to not induce changes to most existing - documents. But it may induce changes to those using some - unusual configuration in the preamble, as made possible via the - package macros; this can apply only to documents authored by - those few people who actually read the documentation. For full - details make sure to read the PDF documentation about this - change. - -* Fix "`\Digamma` under `LGRgreek` option uses the shape for - lowercase not uppercase Greek". - -* Fix some incongruities in log messages related to Greek - letters and emitted during math version creation in the - preamble. - diff --git a/macros/latex/contrib/mathastext/mathastext.dtx b/macros/latex/contrib/mathastext/mathastext.dtx index d8c464a117..7857f9b70a 100644 --- a/macros/latex/contrib/mathastext/mathastext.dtx +++ b/macros/latex/contrib/mathastext/mathastext.dtx @@ -2,8 +2,8 @@ % N.B.: this dtx file does NOT use \DocInput, it only uses docstrip. % The LaTeX source of the documentation is NOT prefixed with %'s. %<*dtx> -\def\dtxtimestamp {Time-stamp: <29-12-2023 at 10:54:52 CET>} -\def\docdate{2023/12/29} +\def\dtxtimestamp {Time-stamp: <26-07-2024 at 11:21:35 CEST>} +\def\docdate{2024/07/27} % To extract run etex on this file, then to build documentation run % latexmk on mathastext.tex then dvipdfmx on the dvi. % For more information see http://jf.burnol.free.fr/v13/INSTALL.txt @@ -11,8 +11,8 @@ % due to usage of (<A7>) as an active character. %</dtx> %<*drv> -\def\MSTpkgdate {2023/12/29} -\def\MSTpkgversion {1.3zb} +\def\MSTpkgdate {2024/07/27} +\def\MSTpkgversion {1.4b} %</drv> %<*dtx> \iffalse % meta-comment @@ -28,13 +28,13 @@ +-------------------------------------------+ This Work may be distributed and/or modified under the conditions -of the [LPPL1.3c](http://www.latex-project.org/lppl/lppl-1-3c.txt) +of the [LPPL 1.3c](https://www.latex-project.org/lppl/lppl-1-3c.txt) The Author of this Work is Jean-Francois Burnol (`jfbu at free dot fr`) -Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol +Copyright (C) 2011-2019, 2022-2024 Jean-Francois Burnol - Source: mathastext.dtx 1.3zb 2023/12/29 + Source: mathastext.dtx 1.4b 2024/07/27 %</readme> %<*dtx> @@ -44,10 +44,10 @@ Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol %%---------------------------------------------------------------- %% Package: mathastext %% Info: Use the text font in math mode (JFB) -%% Version: 1.3zb 2023/12/29 +%% Version: 1.4b 2024/07/27 %% License: LPPL 1.3c (http://www.latex-project.org/lppl/lppl-1-3c.txt) -%% Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol -%% <jfbu at free dot fr> +%% Copyright (C) 2011-2019, 2022-2024 Jean-Francois Burnol +%% <jfbu at free dot fr> %% Examples of use of mathastext: %% http://jf.burnol.free.fr/mathastext.html %% http://jf.burnol.free.fr/showcase.html @@ -95,19 +95,11 @@ Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol \begingroup \input docstrip.tex \askforoverwritefalse -\def\testfilepreamble{\string\def\string\testfileincipit{Test file - to accompany \string\texttt{mathastext}^^J% - version \string\texttt{\MSTpkgversion} of \string\texttt{\MSTpkgdate}}} \generate{\nopreamble\nopostamble \file{README.md}{\from{mathastext.dtx}{readme}} \file{ChangeLog.md}{\from{mathastext.dtx}{changelog}} \usepostamble\defaultpostamble \file{mathastext.tex}{\from{mathastext.dtx}{drv}} - \usepreamble\testfilepreamble - \file{mathastexttestmathversions.tex}{\from{mathastext.dtx}{mathversions}} - \file{mathastexttestunicodemacos.tex}{\from{mathastext.dtx}{macos}} - \file{mathastexttestunicodelinux.tex}{\from{mathastext.dtx}{linux}} - \file{mathastexttestalphabets.tex}{\from{mathastext.dtx}{alphabets}} \usepreamble\defaultpreamble \file{mathastext.sty}{\from{mathastext.dtx}{package}}% } @@ -120,7 +112,8 @@ Copyright (C) 2011-2019, 2022, 2023 Jean-Francois Burnol % no file extractions if latex compilation was on mathastext.tex \ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi \begingroup\catcode1 0 \catcode`\\ 12 -% this is to fool TeX's recognition of \if/\else/\fi like tokens in test files +% This is to fool TeX's recognition of \if/\else/\fi like tokens in test files, +% but on 2024/07/14 I removed from the dtx four previously included such filss. ^^Aiffalse %</dtx> %<*readme> @@ -200,6 +193,98 @@ MATHASTEXT CHANGE LOG %</changelog> %<*readme|changelog> +1.4b \[2024/07/27\] +---- + +* Fix a regression at `1.4` regarding option `nodigits`. + +* New option: `noletters`. I am in old age now so I can provide an option + completely antithetical to my life work. + +* Option `everymath` which is destined to be removed at next major + release warns user about it. As major releases tend to happen once + per decade I think the constant nagging will become insufferable + and you will adapt to the `1.4` changes rather than persisting into + using this option. + +1.4a \[2024/07/20\] +---- + +* There was a documentation glitch in 1.4 and also a problem with the + `\MTprimeskip` feature being lost under the emergency fall-back + `everymath` option. + +1.4 \[2024/07/20\] +--- + +* Since 1.2 of 2012/12/20, mathastext has used mathematically active + characters to propose certain advanced functionalities. For reasons half + lost in the mists of time but whose main one was surely to keep the + meaning of the active shape of characters unchanged outside of math mode, + this mathematical activation, and (in most cases) the definitions of what + active characters do, were done again at *each* entrance into math mode. + At this 1.4 release, mathastext does not inject *any* code whatsoever into + the `\everymath` and `\everydisplay` toks registers anymore (except for + one font-related hack needed under LuaLaTeX, see below). Your documents + will compile a tiny bit faster. + +* In (unsual) documents where users play with catcodes and mathcodes it is + impossible to keep exact backward compatibility, because documented user + commands which acted formerly a toggles with delayed action now will enact + changes immediately if in the document body. In practice consequences are + expected to be few, because catcode active characters are (as was already + the case with earlier releases) hacked only when they are Babel shorthands + and they are then modified in a way altering only their action in math + mode. The precise description of what mathastext does when mathematically + activating (or not) a character, depending on circumstances, is to be + found among small-print comments in the section "Extended scope of the + math alphabets commands". See also the documentation of the + `\MTmathactiveletters` command for some specifics regarding ascii letters. + +* New option: `everymath`. It instructs mathastext to revert (partially) + to its legacy code which uses `\everymath/\everydisplay`. This reversal + is partial, the handling of ascii letters not being included into it. The + `everymath` option is there only to try as a quick fix in case transition + to this release causes a major problem in a user document and time is + lacking to investigate. Please report to the author such issues. Option + `everymath` is destined to be removed at next major release. + +* New option: `activedigits`. Enjoy. + +* It is now easier to hook into the mathastext architecture for + mathematically activated ascii letters. See the new section "Hacking + letters (and even digits) for special tasks". + +* Bugfix: do not override special behavior of the math mode dot in + babel-spanish. + +* Bugfix: A desperate hack related to LuaLaTeX font matters and dating + back to 1.3o 2016/05/03 had been for some years in dire need of an update + regarding fonts using `Renderer=HarfBuzz`. This is done now. Thanks to + tex.sx `user691586` for report. This is currently the sole remaining + usage of `\everymath/\everydisplay`. + +* Bugfix: an optional feature related to `\{` and `\}` was broken since an + upstream LaTeX change at its 2020-02-02 release. + +* With option symbolmisc, those math symbol macros formerly defined via + `\DeclareRobustCommand` are now declared via `\protected\def`. + +* Removal of legacy branches previously kept to support LaTeX earlier than + 2020-02-02. + +* Removal of support for EU1 and EU2 font encodings. + +* Option `noasterisk` deprecated at 1.2d 2013/01/02 has (finally) been removed. + +* Four test files previously included and auto-extracted from the + distributed dtx have been dropped. One of them is still available + on the package homepage. + +* Some parts of the documentation have been massively re-ordered and even to some + extent improved. But there may be some occasions where obsolete statements will + be found having the legacy `\everymath/\everydisplay` situation as background. + 1.3zb \[2023/12/29\] ----- @@ -251,6 +336,8 @@ MATHASTEXT CHANGE LOG * Fix long-standing hyperlink problems in the documentation: blue color words should now all be functioning hyperlinks. +%</readme|changelog> +%<*changelog> 1.3z \[2023/09/01\] ---- @@ -311,8 +398,6 @@ been pushed to CTAN, hence the version increase to 1.3y) letters and emitted during math version creation in the preamble. -%</readme|changelog> -%<*changelog> 1.3w \[2019/11/16\] ---- @@ -358,7 +443,7 @@ been pushed to CTAN, hence the version increase to 1.3y) to some other (robust) math alphabet macros, but were not robust in the strict sense. This does cause some issues for moving arguments in the context of multiple math versions, - hence it was a bug. The special behaviour of the math + hence it was a bug. The special behavior of the math alphabet commands (they redefine themselves and other macros on first use) makes is somewhat problematic for mathastext to keep them updated across math versions and at the same @@ -620,16 +705,14 @@ been pushed to CTAN, hence the version increase to 1.3y) redefined as math symbols and could not be used as delimiters. -1.3d \[2015/02/26\] +1.3d \[2014/05/23\] ---- -* the documentation mentions the improved compatibility of mathastext +* A 2015/02/26 edit to the documentation mentions the + improved compatibility of mathastext with the latest (3.34) beamer release: no more need for `\usefonttheme{professionalfonts}`. -1.3d \[2014/05/23\] ----- - * new commands `\MTstandardgreek` and `\MTcustomgreek`. * The Greek letters, in case of use of one of the package related @@ -760,6 +843,8 @@ use of mathematically active characters in versions 1.2 and 1.2b. mechanism of letting non-letter symbols obey the math alphabet commands. +* the `noasterisk` option is deprecated and made a no-op. + * documentation extended and improved. 1.2c \[2012/12/31\] @@ -904,6 +989,11 @@ use of mathematically active characters in versions 1.2 and 1.2b. complete manner to adapt the math configuration to fonts provided with no math support. +1.13d +---- + +* new macros `\MTstandardgreek` and `\MTcustomgreek` + 1.13b ---- @@ -972,502 +1062,6 @@ use of mathematically active characters in versions 1.2 and 1.2b. %%% mode: latex %%% End: %</drv> -%<*mathversions> -%% This file `mathastexttestversions.tex' is for testing the enhanced -%% concept of math versions provided by the package `mathastext'. -%% -%% See `mathastext.dtx' for the copyright and conditions of distribution or -%% modification. -%% -\documentclass{article} -\usepackage[T1]{fontenc} -\usepackage{newcent} -\usepackage[subdued]{mathastext} -\Mathastext[newcent] -\renewcommand\familydefault\ttdefault -\Mathastext[courier] -\renewcommand\familydefault\sfdefault -\Mathastext[avantgarde] -\renewcommand\familydefault\rmdefault -\begin{document} -\testfileincipit - -text in NewCentury and $math\ as\ in\ default$,% -\MTversion{courier} text in Courier and $math\ in\ Courier$,% -\MTversion{avantgarde} text in AvantGarde and $math\ in\ AvantGarde$,% -\MTversion[newcent]{courier} text in NewCentury and $math\ in\ -Courier$,\MTversion{bold} text in bold NewCentury and $math\ as\ in\ -bold\ default$,\MTversion[courier]{avantgarde} text in Courier and -$math\ in\ AvantGarde$. -\end{document} -%</mathversions> -%<*macos> -%% This file `mathastexttestunicodemacos.tex' is for testing the use -%% of the package `mathastext' with the unicode engines XeTeX or LuaLaTeX. -%% -%% Mac OS X specific fonts are used (initially tested on 10.8.2). -%% -%% See `mathastext.dtx' for the copyright and conditions of distribution or -%% modification. -%% -\documentclass{article} -\usepackage[hscale=0.85]{geometry} -\usepackage{multicol} -\usepackage[no-math]{fontspec} -\usepackage{lmodern} -\usepackage{metalogo} -\usepackage{iftex} -\ifXeTeX -\expandafter\def\expandafter\testfileincipit\expandafter - {\testfileincipit\ (compiled with \XeLaTeX)} -\else -\ifLuaTeX -\expandafter\def\expandafter\testfileincipit\expandafter - {\testfileincipit\ (compiled with \LuaLaTeX)} -\fi\fi -\usepackage[subdued,italic,asterisk]{mathastext} -\setmainfont[Color=FF0000]{Hoefler Text} \Mathastext[Hoefler] -\setmainfont[Color=336633]{American Typewriter}\Mathastext[Typewriter] -\setmainfont[Color=0000FF]{Herculanum} \Mathastext[Herculanum] -\setmainfont[Color=FF00FF]{Didot} \Mathastext[Didot] -\setmainfont[Color=999999]{Comic Sans MS} \Mathastext[Comic] -\MTDeclareVersion{Times}{T1}{ptm}{m}{n} -\begin{document} -\MTversion{normal} -\testfileincipit - -This test uses \verb|mathastext| with its \emph{italic}, \emph{asterisk}, and -\emph{subdued} options. The base document fonts are the Latin Modern ones (in -OpenType format). The other OpenType fonts were chosen from those available on -a Mac OS machine. We also used the Times font in traditional \TeX\ font T1 -encoding, to demonstrate the removal since release \texttt{1.3u} of a former -limitation that all math versions had to share the same font encoding, else -some characters such as the dotless \texttt{i} ($\imath$), or the minus sign -could well vanish from the output in the non-normal math versions. - -Furthermore we test (last line of each block, on the left) if the non-letter -characters obey the math alphabet \verb|\mathbf|. In the normal and bold math -versions, this feature is de-activated, as option \emph{subdued} was used; and -if activated we should then use in these math versions the package -\verb|\Mathbf| rather than \verb|\mathbf| which is there still the original -one, which will use encoding \verb|OT1| in the normal and bold versions, as we -loaded \verb|fontspec| with its option \emph{no-math}. - -Some among the fonts tested have no bold variant or no italic variant. - -Note (tested 2013/09/03): for some reason the \verb|Color| specifications in the -\verb|\setmainfont| commands work only -with \XeLaTeX{}, not with \LuaLaTeX{}; a few months back I had not noticed -such a difference between the two engines. - -Update (tested 2016/01/15 with reasonably up-to-date TL2015): \verb|Color| -spec in use of \verb|\setmainfont| command now functional again with -\LuaLaTeX. - -Note (tested 2019/08/11, reasonably up-to-date TL2019): spacing with the Didot -font differs widely between \XeLaTeX\ and \LuaLaTeX{} (perhaps related to -italic corrections, see the package documentation), and also it seems -\LuaLaTeX{} will not find (from our generic usage of the \verb|fontspec| -interface, at least) bold variants of the Hoefler Text and American Typewriter -fonts, contrarily to \XeLaTeX. Also, the \emph{italic} option remains -seemingly without effect with \LuaLaTeX{} in the case of the Hoefler Text font -(see the package source code comments on some problems with the two ``modes'' -for text fonts under \LuaLaTeX, which may be related with this specific issue -here). - -Update (tested 2022/10/29, with 1.3x and up-to-date TL2022): it appears that -most, perhaps even all, of the remarks in the preceding note are now obsolete -as I do not see obvious differences between outputs from \XeLaTeX{} versus -\LuaLaTeX{} but I did not seriously compare, only quickly done. - -\newcommand\TEST[1]{\MTversion{#1}\def\tmpa{#1}% - \def\tmpb{normal}\def\tmpc{bold}% - \ifx\tmpa\tmpb\else\ifx\tmpa\tmpc\else \MTnonlettersobeymathxx - \MTexplicitbracesobeymathxx\fi\fi -\begin{multicols}{2} -\hbox to\columnwidth{\hbox to\columnwidth{\hfil - $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}} - \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ } - \centerline{ $0123456789$ } - \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% - \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ } - \centerline{ $\mathbf{!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% - \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash}$ } -\columnbreak - \centerline{ abcdefghijklmnopqrstuvwxyz } - \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ } - \centerline{ 0123456789 } - \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% - \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } - \centerline{\bfseries !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% - \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } -\end{multicols}} -\begin{multicols}{2} - \centerline{\textbf{math mode}} -\columnbreak - \centerline{ \textbf{text} } -\end{multicols} -\TEST{Didot}\TEST{Comic}\TEST{normal}\TEST{Herculanum} -\TEST{Hoefler}\TEST{Typewriter}\TEST{bold}\TEST{Times} -\end{document} -%</macos> -%<*linux> -%% This file `mathastexttestunicodelinux.tex' is for testing the use -%% of the package `mathastext' with the unicode engines XeTeX or LuaLaTeX. -%% -%% Fonts which were available on a Linux machine are used. Beware that -%% compilation with LuaLaTeX will abort with errors if specified fonts do not -%% exist on your system. -%% -%% See `mathastext.dtx' for the copyright and conditions of distribution or -%% modification. -%% -\documentclass{article} -\usepackage[hscale=0.8]{geometry} -\usepackage{multicol} -\usepackage[no-math]{fontspec} -\usepackage{lmodern} -\usepackage{metalogo} -\usepackage{iftex} -\ifXeTeX -\expandafter\def\expandafter\testfileincipit\expandafter - {\testfileincipit\ (compiled with \XeLaTeX)} -\else -\ifLuaTeX -\expandafter\def\expandafter\testfileincipit\expandafter - {\testfileincipit\ (compiled with \LuaLaTeX)} -\fi\fi -\usepackage[subdued,italic,asterisk]{mathastext} -\setmainfont[Color=999999]{Verdana} \Mathastext[Verdana] -\setmainfont[Color=0000FF]{Arial} \Mathastext[Arial] -\setmainfont[Color=00C000]{DejaVu Serif} \Mathastext[DejaVu] -\setmainfont[Color=FF0000]{Andale Mono} \Mathastext[Andale] -%% commented out as these fonts do not exist anymore on the Linux box -%% I have access to (test last done 2016/01/15) -%%\setmainfont[Color=C000C0]{URW Chancery L} \Mathastext[Chancery] -%%\setmainfont[Color=800080]{URW Palladio L} \Mathastext[Palladio] -\setmainfont[Color=808000]{Liberation Serif} \Mathastext[Liberation] -\MTDeclareVersion{Times}{T1}{ptm}{m}{n} -\begin{document} -\MTversion{normal} -\testfileincipit - -This test uses \verb|mathastext| with its \emph{italic}, \emph{asterisk}, and -\emph{subdued} options. The base document fonts are the Latin Modern ones (in -OpenType format). The other OpenType fonts were chosen from those available on -a Linux machine. We also used the Times font in traditional \TeX\ font T1 -encoding, to demonstrate the removal since release \texttt{1.3u} of a former -limitation that all math versions had to share the same font encoding, else -some characters such as the dotless \texttt{i} ($\imath$), or the minus sign -could well vanish from the output in the non-normal math versions. - -Furthermore we test (last line of each block, on the left) if the non-letter -characters obey the math alphabet \verb|\mathbf|. In the normal and bold math -versions, this feature is de-activated, as option \emph{subdued} was used; and -if activated we should then use in these math versions the package -\verb|\Mathbf| rather than \verb|\mathbf| which is there still the original -one, which will use encoding \verb|OT1| in the normal and bold versions, as we -loaded \verb|fontspec| with its option \emph{no-math}. - -Some among the fonts tested have no bold variant or no italic variant. - -Note: the two unicode engines \XeLaTeX\ and \LuaLaTeX\ give likely not fully -identical results particularly for the math mode. At least this is what I -observed regularly over the years with the variant of this file prepared for -fonts available on Mac OS, which is my main system where I develop -|\mathastext|. Lastly for example (TL2019, august 2019), \LuaLaTeX\ could not -find the bold variant of some system font, but \XeLaTeX\ did. And the spacing -for the letters of the Didot font was vastly different between the two -engines. - -\newcommand\TEST[1]{\MTversion{#1}\def\tmpa{#1}% - \def\tmpb{normal}\def\tmpc{bold}% - \ifx\tmpa\tmpb\else\ifx\tmpa\tmpc\else \MTnonlettersobeymathxx - \MTexplicitbracesobeymathxx\fi\fi -\begin{multicols}{2} -\hbox to\columnwidth{\hbox to\columnwidth{\hfil - $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}} - \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ } - \centerline{ $0123456789$ } - \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% - \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ } - \centerline{ $\mathbf{!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% - \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash}$ } -\columnbreak - \centerline{ abcdefghijklmnopqrstuvwxyz } - \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ } - \centerline{ 0123456789} - \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% - \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } - \centerline{\bfseries !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% - \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } -\end{multicols}} -\begin{multicols}{2} - \centerline{\textbf{math mode}} -\columnbreak - \centerline{ \textbf{text} } -\end{multicols} -\TEST{DejaVu} -\TEST{Verdana} -\TEST{Andale} -%%\TEST{Palladio} -\TEST{Arial} -%%\TEST{Chancery} -\TEST{Liberation} -\TEST{bold}\TEST{normal}\TEST{Times} -\end{document} -%</linux> -%<*alphabets> -%% This file `mathastexttestalphabets.tex' is for testing the extended -%% scope of the math alphabet commands with package `mathastext', via -%% the package command \MTnonlettersobeymathxx. -%% -%% Compile either with latex, pdflatex, lualatex (pdf output) or xelatex. -%% -%% See `mathastext.dtx' for the copyright and conditions of distribution or -%% modification. -%% -\documentclass{article} -\usepackage[hscale=0.66, vscale=0.72]{geometry} -\usepackage{amsmath} -\usepackage{mathtools}\mathtoolsset{centercolon} -%% WARNING THIS IS INCOMPATIBLE WITH BABEL+FRENCHB -%% BUT WITH MATHASTEXT LOADED THIS IS CORRECTED -%% *IF* \MTnonlettersobeymathxx IS MADE USE OF. -\usepackage{iftex} -\ifXeTeX -\expandafter\def\expandafter\testfileincipit\expandafter - {\testfileincipit\ (compiled with \XeLaTeX)} -\usepackage[no-math]{fontspec} -\setmainfont[ExternalLocation, - Mapping=tex-text, - BoldFont=texgyretermes-bold, - ItalicFont=texgyretermes-italic, - BoldItalicFont=texgyretermes-bolditalic]{texgyretermes-regular} -\setmonofont[ExternalLocation, - Mapping=tex-text]{texgyrecursor-regular} -\setsansfont[ExternalLocation, - Mapping=tex-text]{texgyreheros-regular} -\else -\ifLuaTeX % for pdf output -\expandafter\def\expandafter\testfileincipit\expandafter - {\testfileincipit\ (compiled with \LuaLaTeX)} -\usepackage[no-math]{fontspec} -\setmainfont[Ligatures=TeX]{TeX Gyre Termes} -\setmonofont[Ligatures=TeX]{TeX Gyre Cursor} -\setsansfont[Ligatures=TeX]{TeX Gyre Heros} -\else -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage{tgtermes} -\usepackage{tgcursor} -\usepackage{tgheros} -\fi\fi -\usepackage{metalogo} % must be loaded /after/ [no-math]fontspec -\usepackage[french]{babel} -\usepackage[italic,asterisk]{mathastext} -\MTlettershape{n}\Mathastext[upright] -\MTnonlettersobeymathxx -\MTexplicitbracesobeymathxx -\delimitershortfall-1pt -\usepackage{color} -\begin{document} -\testfileincipit - -\begin{center} - \bfseries Two features of \texttt{mathastext}:\\ -extended scope of the math alphabets and added italic corrections\par -\end{center} - -The package makes -${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}\,{\{}\,{\}}$, -the asterisk $*$, and $.\,/\,\vert\,\backslash\,{\#}\,{\$}\,{\%}\,{\&}$ obey the -math alphabet commands (this is the maximal list, some characters may have been -excluded by the corresponding package options). For the characters listed first -the mechanism involves a `mathematical activation'. - -As this process may create incompatibilities, it will be put into action -for -${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}$ -only if the user makes use of the package command -\verb|\MTnonlettersobeymathxx| (and the braces necessitate -\verb|\MTexplicitbracesobeymathxx|). - -It could be that one such character has been made `active' in the entire -document by some other package, typically a language definition file for the -\verb|babel| system. Here for example we have used \verb|babel| with the -\verb|french| option, which makes the high punctuation characters !?:; active -throughout the document (extra spacing is put in front of the character when -used in text; no change in math but perhaps for other languages and characters -this could happen, it is up to the language definition file to decide). - -When \verb|mathastext| detects that a character it wants to `mathematically -activate' is already `active', it does not go further except if it seems that -the activation was done by Babel. If the activation was done by Babel, then -\verb|mathastext| replaces the expansion of the active character in math mode by -what is necessary to achieve its goal. It does not additionally mathematically -activate the character; rather it makes sure that the character is \emph{not} -mathematically active. In the present document the colon was made mathematically -active by \verb|mathtools| but this was already canceled in the preamble by -\verb|mathastext| as it was loaded later. And it is better so, because the -combination \verb|babel| (with option \verb|frenchb|) +\verb|mathtools| (with -\verb|centercolon|) makes \verb|$:$| create an infinite loop! - -But even if someone had mathematically activated the colon after the preamble, -or after the loading of \verb|mathastext|, this would be canceled again -automatically for each inline or displayed mathematical formula (if the user -does \verb|\MTnonlettersobeymathxx|). - -The conclusion with \verb|\MTnonlettersobeymathxx| is: if some package has tried -to make the character mathematically active, this will be overruled by -\verb|mathastext|; if some package has made the character globally active, then -the package wins except if it is Babel, as \verb|mathastext| may in the latter -case safely modify the action in math mode (paying attention to the fact that -the character should be usable in \verb|\label| and \verb|\ref| in and outside -of math mode). - -The displayed equations next illustrate the extended scope of the math alphabets -which now apply to $=$, $-$, $($, $)$, $[$, $]$ (but not to the large delimiters -of course). Furthermore, for testing purposes the equations were labeled using -such characters, for example the last one has label \verb|eq=7|, to check that -the mathematical activation of $=$ does not cause problems with -\verb|\label/\ref|. - -\def\testformula{\quad\Biggl\lbrace\biggl(\left(\left[[\sin(a) + \cos(b) - \log(c) = -\sec(d)]\right]\right)\biggr)\Biggr\rbrace} -\begin{equation}\testformula\label{eq:1}\end{equation} -\begin{equation}\mathnormalbold{mathnormalbold:\testformula}\label{eq;2}\end{equation} -\begin{equation}\mathrm{mathrm:\testformula}\label{eq?3}\end{equation} -\begin{equation}\mathbf{mathbf:\testformula}\label{eq!4}\end{equation} -\begin{equation}\mathit{mathit:\testformula}\label{eq(5}\end{equation} -\begin{equation}\mathtt{mathtt:\testformula}\label{eq)6}\end{equation} -\begin{equation}\mathsf{mathsf:\testformula}\label{eq=7}\end{equation} - -Equations above are numbered \ref{eq:1}, \ref{eq;2}, \ref{eq?3}, \ref{eq!4}, and -$\ref{eq(5}$, $\ref{eq)6}$, and $\ref{eq=7}$. - -\def\testline#1{$#1$&$\mathnormalbold{#1}$&$\mathrm{#1}$&$\mathbf{#1}$&$\mathit{#1}$&$\mathtt{#1}$&$\mathsf{#1}$} - -\centerline{\begin{tabular}{ccccccc} -\testline{a!b}\\ -\testline{a?b}\\ -\testline{a,b}\\ -\testline{a;b}\\ -\testline{a:b}\\ -\testline{a:=b}\\ -\testline{a\vcentcolon= b}\\ -\testline{a\colon b}\\ -\testline{a.b}\\ -\testline{a-b}\\ -\testline{a+b}\\ -\testline{a=b}\\ -\testline{a<b}\\ -\testline{a>b}\\ -\testline{<x,y>}\\ -\testline{\mathopen{<} x,y\mathclose{>}}\\ -\testline{\left< x,y\right>}\\ -\testline{a/b}\\ -\testline{a\backslash b}\\ -\testline{a\setminus b}\\ -\testline{a|b}\\ -\testline{a\mid b}\\ -\testline{(a,b)}\\ -\testline{[a,b]}\\ -\testline{\{a,b\}} -\end{tabular}} - -The question mark has been made active by \verb|babel+frenchb|. -\verb|mathastext| has imposed in math mode its ways (now \verb|$\mathbf{???}$| -gives $\mathbf{???}$). As the extra spacing is added by \verb|frenchb| only in -text, we had to use the math alphabet to check that indeed \verb|mathastext| -overruled Babel. - -To double-check we will now make \string? mathematically active: -\verb|\mathcode`?="8000|\mathcode`?="8000. This is a sure cause for disaster -normally with Babel (don't do this at home without \verb|mathastext|!). But here -with \verb|$?$| no bad surprise (infinite loop!) awaits us: just $?$. - -Let's take some other character, for example the opening parenthesis, and make -it catcode active: -\verb|\catcode`(=\active \def ({X}|. -Let's try the input -\verb|( and $($|. -\begingroup -\catcode`(=\active \gdef ({X} -This gives ( and $($. We see that \verb|mathastext| does not attempt to modify -the definition of the active character, as this activation was not done via the -\verb|babel| services. \catcode`\(=12 \mathcode`(="8000 We now revert the -parenthesis to catcode other (but maintain \verb|\def ({X}| as definition of its -active version), and then make it mathematically active using the command -\verb|\mathcode`(="8000|. If we try \verb|$((($| we see that the parenthesis is -not converted into an $X$: $((($. The mathematically active character was -overruled by \verb|mathastext|. - -Issuing \verb|\MTnonlettersdonotobeymathxx|\MTnonlettersdonotobeymathxx\ we do -get the $X$'s from the input \verb|$((($|: $((($ -\endgroup -This shows that \verb|mathastext| now does not modify in math mode the -non-letter \verb|(|. - -\MTversion{upright}\MTnonlettersobeymathxx -We defined in the preamble of the document a \verb|mathastext|-enhanced -math version (named \verb|upright|) having the Latin letters upright in -math mode. Let's switch to -it: \newline -\hbox to\linewidth{\hss\verb|\MTversion{upright}|\hss} - -With a font which is neither italic nor slanted, \verb|mathastext| automatically -inserts italic corrections for better positioning of the subscript: -\verb|$f_i^i$| gives -$f_i^i$. -After \verb|\MTnoicinmath| which turns off this feature\MTnoicinmath{}, the same -input gives $f_i^i$, which is different. -\footnote{last time I tried, this only worked with PDF\LaTeX{}, not with - \LuaLaTeX{} or \XeTeX{}.} - -Again with italic corrections on (\verb|\MTicinmath|)\MTicinmath{} -\verb|$f_{abc}^{def}$| gives $f_{abc}^{def}$, and here is another one: -$f^{f_{abc}^{def}}_u$. Without italic corrections\MTnoicinmath: $f_{abc}^{def}$, -and respectively $f^{f_{abc}^{def}}_u$. - -\MTicinmath - -\verb|mathastext| does not add these italic corrections inside arguments of -math alphabets, as this would prevent the formation of ligatures: -$\mathnormal{ff}$, $\mathrm{ff}$, $\mathit{ff}$, $\mathbf{ff}$, $\mathtt{ff}$ -(no ligature in teletype) and $\mathsf{ff}$.\footnote{\llap{\textcolor{magenta}{\bfseries Changed!\kern3em}}Prior to 1.3i, - italic corrections were added to the \string\mathnormal\ arguments.} - -\centerline{\begin{tabular}{ccccccc} -\testline{a!b}\\ -\testline{a?b}\\ -\testline{a,b}\\ -\testline{a;b}\\ -\testline{a:b}\\ -\testline{a:=b}\\ -\testline{a\vcentcolon= b}\\ -\testline{a\colon b}\\ -\testline{a.b}\\ -\testline{a-b}\\ -\testline{a+b}\\ -\testline{a=b}\\ -\testline{a<b}\\ -\testline{a>b}\\ -\testline{<x,y>}\\ -\testline{\mathopen{<} x,y\mathclose{>}}\\ -\testline{\left< x,y\right>}\\ -\testline{a/b}\\ -\testline{a\backslash b}\\ -\testline{a\setminus b}\\ -\testline{a|b}\\ -\testline{a\mid b}\\ -\testline{(a,b)}\\ -\testline{[a,b]}\\ -\testline{\{a,b\}} -\end{tabular}} - -\end{document} -%</alphabets> %<*dtx> ^^Afi^^Aendgroup % end of big \iffalse block including generated files % Removal of the *sfixed found in tex/latex/mlmodern/omxmlmex.fd @@ -1523,7 +1117,7 @@ $\mathnormal{ff}$, $\mathrm{ff}$, $\mathit{ff}$, $\mathbf{ff}$, $\mathtt{ff}$ \def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}} \def\cmd@to@cs#1#2{\char\number`#2\relax} % Here I am loading doc=v2 but formerly I was using ltxdoc via scrdoc -% which I dropped at release 1.4l (2022-05-29) and without much +% which I dropped at (etoc) release 1.4l (2022-05-29) and without much % thinking I had kept this. \DeclareRobustCommand\cs[1]{\texttt{\bslash#1}} % As I may have the * active, or macro names with _ or ^, I should @@ -1552,12 +1146,19 @@ $\mathnormal{ff}$, $\mathrm{ff}$, $\mathit{ff}$, $\mathbf{ff}$, $\mathtt{ff}$ % is set by geometry package and a4paper option from xint.tex file. So it % seems I only need the hologo loading: \usepackage{hologo} -\DeclareRobustCommand*{\eTeX}{\hologo{eTeX}}% -\DeclareRobustCommand*{\pdfLaTeX}{\hologo{pdfLaTeX}}% -\DeclareRobustCommand*{\LuaTeX}{\hologo{LuaTeX}}% -\DeclareRobustCommand*{\LuaLaTeX}{\hologo{LuaLaTeX}}% -\DeclareRobustCommand*{\XeTeX}{\hologo{XeTeX}}% -\DeclareRobustCommand*{\XeLaTeX}{\hologo{XeLaTeX}}% +% 1.4 fix to some extra line spacing obviously caused by usage of the +% \hologo macro. +% I opened https://github.com/ho-tex/hologo/issues/9 +% after testing, actually only XeTeX and XeLaTeX are problematic +% update: as per @u-fischer the problem goes away if graphicx package +% is loaded, but we don't use it in this document... +\def\msthologo#1{\smash{\hologo{#1}}} +\DeclareRobustCommand*{\eTeX}{\msthologo{eTeX}}% +\DeclareRobustCommand*{\pdfLaTeX}{\msthologo{pdfLaTeX}}% +\DeclareRobustCommand*{\LuaTeX}{\msthologo{LuaTeX}}% +\DeclareRobustCommand*{\LuaLaTeX}{\msthologo{LuaLaTeX}}% +\DeclareRobustCommand*{\XeTeX}{\msthologo{XeTeX}}% +\DeclareRobustCommand*{\XeLaTeX}{\msthologo{XeLaTeX}}% % \makeatother %%% end of ltxdoc+srcdoc emulation from June 2022 xint.dtx, @@ -1669,7 +1270,8 @@ pdfpagemode=UseOutlines,% asterisk,% defaultmathsizes,% symbolmisc,symbolre,% - LGRgreek+]{mathastext} + LGRgreek+, + activedigits]{mathastext} \let\symbolbullet\bullet \let\bullet\originalbullet % This version will use the mlmodern font which is current @@ -1790,15 +1392,15 @@ pdfpagemode=UseOutlines,% \def\tt {\normalfont\ttfamily} % mais bon, en fait je ne les utilise pas. -% 2023/12/27 pas encore -% \newcommand\mstrelease[1]{\hyperlink{v#1}{\texttt{#1}}} - % 2023/12/27 \DeclareRobustCommand\ctanpkg[1] {\texorpdfstring{\href{https://ctan.org/pkg/#1}{#1}}{#1}} -% bataille avec le rendu de l'entre 1.3zb du change log -% \hyphenation{ncc-comma} +% 2024/07/10 +% Attention que si la cible n'existe pas il n'y a AUCUN warning +% dans le log... +\newcommand\mstrelease[1]{\hyperlink{#1}{\texttt{#1}}} + \begin{document} % \makeatletter\show\mv@normal\makeatother % contient @@ -1924,10 +1526,6 @@ the preamble: \end{verbatim} The package records which font is set up for text, at the time it is loaded, -%\footnote{alternatively it is possible to configure the text font after - % loading \mst, and then the command \cs{Mathastext} will accomplish the - % necessary changes to the font for letters, digits and a few extra ascii - % symbols in math mode.} and then arranges things in order for this text font to be used in math mode as well. So, with the preamble as above @@ -1955,293 +1553,6 @@ The exact list of characters concerned by As one can see, this is a very limited list! Some possibilities exist regarding Greek letters and will be described later. -\subsection{Miscellanea} - -Please note that most of this section was written many years ago (except for -the item about math alphabets which was enriched with important background -information and moved upfront at |1.3zb|). But it should still be valid! -% -\begin{description} - -\item[math alphabets:] Let us first recall fundamental facts of life, in the - world of traditional PDF\TeX\ engine and \TeX\ fonts, as background for - understanding what \mst does in this context, which will be explained next. - People familiar with using Unicode engines and \ctanpkg{unicode-math}, please be - aware that the semantics there of the \LaTeX\ math alphabet commands are - \textbf{significantly} modified! -\begin{snugshade} -\begin{itemize} -\item In the default \LaTeX\ set-up all five of \mathrm, \mathbf, - \mathit, \mathsf and \mathtt tell \TeX\ to use for their arguments - specific \texttt{OT1}-encoded fonts, -\item if the document body uses, as will be the case probably with any - language other than English or its variants, some other encoding such as - \texttt{T1} for its fonts, there is no change whatsoever to the math - configuration, indeed most font packages ignore it completely, -\item it is thus a priori wrong to think of these commands as switching to - some body text font, although letters within their scopes will act as in a - text font, and in particular obey ligatures (this also applies to operator - names defined by |amsmath|'s \cs{DeclareMathOperator} which are, with some - extras not mentioned here, as using \mathrm), -\item these commands are completely different in spirit from the \LaTeX\ - \cs{textrm}, \cs{textbf}, and others, which change only some font axis; - indeed the math alphabet commands inherit from legacy Knuth's \cs{rm}, - \cs{bf}, and others which are complete font specifiers, -\item in particular when nesting, it is the inner-most which wins, -\item only mathematical characters (such as letters) which are declared to - \TeX\ as being of ``variable family type'' react to being in the argument of - a math alphabet command, -\item lowercase Greek letters are by default in \LaTeX\ immune to math - alphabets (so \verb|\mathrm{\pi}| induces no change in output), but the - eleven uppercase Greek letters are of ``variable family type'' because they - are picked in the \texttt{OT1}-encoded font also used for operator names - (the one to which \mathrm maps), \emph{and they occupy the exact same - slots in the \emph{\texttt{OML}}-encoding to which} \mathnormal maps! So - in default \TeX, \verb|\mathnormal{\Gamma}| gives a slanted one. The slots - occupied in \texttt{OML}-encoding by the lowercase Greek letters (to which - encoding they are a priori assigned) give - completely unrelated glyphs in the \texttt{OT1}-encoding, so it makes sense - that the default \LaTeX\ declares them to not react to math alphabets. - Notice though, that if \LaTeX\ had declared a \cs{mathnormalbold}, mapping - to a bold \texttt{OML}-encoded font, it would have made sense to also have - \cs{alpha}, \cs{beta}, etc... be of ``variable family type'', -\item but of course then one should a priori never use |\mathbf{\pi}| for - example, because the default \mathbf selects an \texttt{OT1}-encoded - font, where there is no pi glyph whatsoever and in particular not at the slot of - pi in the \texttt{OML} encoding (slot number 25)! -\end{itemize} -\end{snugshade} -Please keep all the above in mind when trying to understand what \mst does -with math alphabets. The most significant point described next naturally is that -\mst will sync \mathnormal, \mathrm, \mathbf, \mathit, \mathsf and -\mathtt to map to the \mst-ified body text fonts. - \begin{itemize} - \item \mathnormal, \mathrm, \mathbf, \mathit, - \mathsf and \mathtt are modified to use the \mst-ified - text fonts; this can be disabled via defaultalphabets and - related individual options, but the package always provides - \Mathnormal, \Mathrm, etc..., to match the \mst font - configuration (\RLNote{changed:}{1.3za}prior to |1.3za| - defaultalphabets and related options also caused the \mst - alphabet commands not to be defined). Recall that there may - arise a ``too many math alphabets'' error if too many of these - commands are \emph{used} in the document: - \emph{declaring} them is not by itself the cause of the error. See the - \LaTeX\ news entry of its \texttt{2021-11-15} release for - the counter \texttt{localmathalphabets} (with default value 2) - which can be now be used if one hits such a difficulty. - \item We define a new math alphabet command - \mathnormalbold which gives direct access to - the bold version of the \mathnormal alphabet - (rather than using either the \cs{bm} command from - the \ctanpkg{bm} package or the \cs{boldsymbol} command - from the \ctanpkg{amsbsy} package). As it does not - exist in the default \LaTeX{} math font set-up, this - alphabet is \emph{not} subjected to the {subdued option} action. - -\item version \RightNote{1.2}|1.2| of \mst has extended the scope of the math - alphabets to apply to non-alphabetical characters and to - operator names. This respects the automatic white spaces - added by \TeX{} around math symbols. -\item The\RightNote{1.3i} - extra skips around letters (see \autoref{sec:mathskips} and - \autoref{sec:ic}) are removed in the scope of the math alphabets. - - \item Depending on options, further math alphabet commands - are defined by the package: \MathEulerBold, - \MathEuler, \MathPSymbol, and since |1.3x| under - the LGRgreek family of options\RightNote{1.3x} also - \mathgreekup and \mathgreekit. See - \autoref{sec:newgreek}. - \item \RightNote{1.3za}Addition of \mathgreekupbold and - \mathgreekitbold under the LGRgreek family of options. - \item With\RightNote{1.3za} the LGRgreek+ option - which enhances Greek letters with a specific behavior when in the - arguments of the \mathrm, \mathbf, etc..., math alphabet - commands, this special behavior is not triggered by the \Mathrm, - \Mathbf, et al., which are genuine unmodifed math alphabet commands. See - \autoref{sec:newgreekplus}. - \end{itemize} - -\item[the en-dash as minus sign:] very often the - - character from the text font does not give a good - minus sign. So by default, the package uses the - en-dash sign \textendash{}. Use noendash to - deactivate it. Starting with version |1.12| of the - package this `en-dash as minus' should work in all - encodings, including Unicode (if \ctanpkg{fontspec} has been - loaded); see also |unicodeminus| for OpenType fonts. - -\item[amsmath:] \strut the behaviour of the - \cs{DeclareMathOperator}\RightNote{1.3n} command - of |amsmath| is modified by \mst for it to use the correct font. - Additionally, release |1.3n| of \mst at long last also handles an extra - operation done by |amsmath| for |'.:/-*| to be used in operator names - without the extra math spacing.% -% -\footnote{To the experts: there is a long story here that \cs{newmcodes@} - hardcodes the font, that it was not compatible with Unicode engines, that - during some time (2013-2016) \texttt{lualatex-math} fixed that and very - recently |amsopn.sty 2016/03/08 v2.02| also, so now \texttt{lualatex-math - 1.6} does nothing as it is already fixed ``upstream'' in |amsopn.sty|, but - anyhow in both cases, this still hardcoded the font, so finally \mst does - the right thing from its point of view. See the code comments for more, - there is an issue here with \LuaLaTeX\ not applying the curly right quote - contrarily to \XeLaTeX.} -% -This customization is suppressed in subdued mode for the |normal| and |bold| -math versions. - -\item[hbar:] the default \LaTeX\ definition of \hbar would in our context - make use of the |h| of the current math font (so for us, it is also the text - font, perhaps in italic shape), but with a bar accross the |h| from the - original default math font for letters (usually |cmmi|). We redefine - \cs{hbar} to use the text font macron accent (|\=|) as a mock math accent - (this takes into account the italic option and is compatible with - subscripts and superscripts). - - Since |1.12| \mst when dealing with a Unicode font sets the \cs{hbar} - to be the character from the font having hexadecimal codepoint |U+0127|. - - Since |1.3u| the general 8bits font encoding is - supported\RightNote{1.3u} (see discussion of the |mathaccents| option - at end of this list for the shared limitations). Brief testing with - various usual \TeX\ fonts shows that the vertical positioning of - the bar isn't satisfying. It is planned to either add a parameter to - adjust it or to modify altogether the mode of construction of the |\hbar|. - - Use nohbar to tell \mst not do provide its own |\hbar|. - - -\item[dotless i and j:] by default the package redefines \cs{imath} and - \cs{jmath} to give (in math mode) the dotless i and j (if it exists at - all) from the text font.% -% -\footnote{\RightNote{1.3t}Since \texttt{1.12} it also redefined \cs{i} and - \cs{j} for usability both in text and math modes, but this has been - dropped at \texttt{1.3t}. Breaking change!} - -\item[asterisk:] versions of \mst earlier than |1.2d [2013/01/02]| - did not do anything - with the \cs{ast} control sequence but did pick the asterisk - $*$ in the document text font, and this often was a rather - silly thing as the text asterisk is generally in a raised - position. Furthermore, the $*$ lost its status of a binary - operator and was treated as an `ordinary' symbol. An option - |noasterisk| turned this feature off. Starting with |1.2d|, - the |noasterisk| option is deprecated and the new default is - to do nothing. But when option asterisk is received by the - package, then both \cs{ast} and $*$ are simultaneously - modified to use (as binary operators) the text asterisk, - slightly lowered. The amount of lowering\footnote{with the - option \texttt{symbolmisc}, the asterisk is picked from - the Symbol font, and the amount of lowering is - non-customizable; however if a math alphabet command is - used, the asterisk is then again from a text font and the - lowering will be as specified by \cs{MTlowerast}.} is - decided by the mandatory argument to the command - \csb{MTlowerast}\marg{dimen}. The package initially does - \cs{MTlowerast}|{.3\height}|. Doing \cs{MTlowerast}|{.5ex}| is - not a good idea as it does not scale properly in the script - and scriptscript styles. With an argument given as a - multiple of |\height|, the asterisk will behave as expected - in subscripts and subscripts of subscripts. But $*$ is now - `mathematically active'\thinspace\footnote{in a hopefully - safe way, for example {\ttfamily\$\string\label\{eq*1\}\$} - is ok.} and |$R^*$| or |$R^\ast$| \emph{must} be input as - |$R^{*}$| and |$R^{\ast}$|. Furthermore, they will obey the - math alphabet commands. - -\item[\XeTeX{} and \LuaLaTeX{}:] regarding the en-dash and the - dotless i and j, the package is now under the Unicode engines - compatible not only with the ``Unicode'' \LaTeX\ font encodings - EU1 (\XeTeX, old fontspec), EU2 (\LuaLaTeX, old fontspec), TU - (\XeTeX\ and \LuaLaTeX, modern fontspec), but also with - traditional 8bits-encodings declared as a |fontenc| - option.\RightNote{1.3u} - -% obsolete - % Formerly, with a Unicode engine, - % only OT1, T1 and LY1 were supported by \mst as the 8bit encoding - % of the document text font, regarding the minus as en-dash and - % the dotless i and j. - - \item[fontspec:] one more note to users of -\XeTeX{}/\LuaLaTeX{} with \ctanpkg{fontspec}:\newline -\fbox{it has to be -loaded {with the option} |no-math|}, -and \emph{before} \mst. - -\item[vec accent:] The default \cs{vec} accent is not - appropriate for upright letters, so \mst - provides a \cs{fouriervec} which takes its glyph in a - Fourier font, and an Ersatz \cs{pmvec} - which is reasonably good looking on upright letters - and works with the \cs{rightarrow} glyph. Contrarily - to version |1.0|, the default \cs{vec} is not - overwritten with \cs{fouriervec}. And contrarily to - version |1.1|, one now needs to pass the option - fouriervec to have the math accent \cs{fouriervec} - defined by the package.% -% -\footnote{this costs a math family, as I never came back to this to try to - do otherwise.} - -\item[math accents:] if option mathaccents is used then \mst attempts to let - the math accents |\acute|, |\grave|, etc... use the suitable glyphs from the - text font. Prior to |1.3u| only |OT1|, |T1|, and |LY1| were supported (via - hardcoded slots). It should now work with any 8bits font - encoding\RightNote{1.3u} having been declared as an option to the - \ctanpkg{fontenc} package (and of course providing the ten needed text accents which - will mock math accents).% - % - \footnote{The code will raise low-level \TeX\ errors if the user attempts to - use an 8bits font encoding whose \LaTeX\ definition file is lacking the - suitable uses of \cs{DeclareTextAccent} or if the low level \LaTeX\ macro - implementation of text accents changes significantly; in such cases please - report the problem to the author, so that it can be documented in future - releases!} - - The |\vec| math accent is not handled here, as it is not available in the - usual 8bits font encodings. See the fouriervec option or the \pmvec - command. - - The math accents obey the subdued option\RightNote{1.3u} - and will change in sync with the \mst-ified text font used in - each non subdued math version. - - (Very) brief testing during |1.3u| development with \XeTeX\ and \LuaTeX\ let - the author conclude that usage with the \cs{Umathaccent} primitive of an - OpenType accent glyph slot (which in the text font is for usage as a - postpended combining character) gives definitely bad horizontal placements - for both engines (each in its own way). Thus, the redefinitions of accents - for a \mst declared math version with an OpenType font is by default - canceled.% -% -\footnote{I.e., the \cs{grave} etc... control sequences will, in math versions - with an OpenType \mst-ified font, expand to macros holding their initial - meanings, unmodified by \mst, which was in force at the - |\string\begin\string{document\string}|.} -% - Use unimathaccents to force usage of the OpenType font text - accents glyph slots with the \cs{Umathaccent} primitive. Expert users are - invited to check out the code and to contribute suggestions if some extras - can improve it. - -\item[varying font encodings:] the very first release of \mst dealt with only - one font; very soon thereafter it acquired the capacity to define multiple - math versions, each one using its own text font. But, as was documented at - this location formerly, various encoding dependent decisions were done once - and for all during package loading. - - This meant in particular that the minus sign (using the text endash), the - dotless |i| and |j|, the |\hbar|, the math accents were all set up for only - one unique font encoding. It was thus recommended that all math versions - share the same font encoding. - - The |1.3u| release has lifted this restriction.\RightNote{1.3u} -\end{description} - \subsection{Examples} \label{sec:examples} @@ -2473,7 +1784,7 @@ versions.% % \href{http://mirrors.ctan.org/help/Catalogue/entries/cbgreek-complete.html}{cbfonts}, % \href{http://mirrors.ctan.org/help/Catalogue/entries/txfontsb.html}{txfontsb}. -\emph{Since |1.3x| this documentation uses globally the |mlmodern|% +\emph{Since \mstrelease{1.3y} this documentation uses globally the |mlmodern|% % \footnote{Daniel Benjamin \textsc{Miller}, \emph{A blacker Type 1 version of Computer Modern, with multilingual support}, \url{https://ctan.org/pkg/mlmodern}. I have added to the preamble @@ -2500,7 +1811,7 @@ reasons of PDF file size.}% \subsubsection{The \blueit{italic} option} -In the initial version |1.0|, the Latin letters in +In the initial version \mstrelease{1.0}, the Latin letters in mathematical mode assumed the exact same shape as in text mode, and this meant, generally speaking, that they would turn up upright. Doing this gives a very @@ -2510,15 +1821,15 @@ one of the design goals of \mst. Nevertheless, soon after I posted the initial version of the package to CTAN, I was overwhelmed by -numerous\footnote{this means ``more then one.''} +numerous\footnote{this means ``more than one.''} questions\footnote{I thank in particular Tariq~\textsc{Perwez} and Kevin~\textsc{Klement} for their kind remarks (chronological order).} on how to have the letters be in italic shape. -The default is still, as in version |1.0|, for everything to be in +The default is still, as in version \mstrelease{1.0}, for everything to be in upright shape, but it suffices to pass to the package the option -italic\RightNote{1.1} to let the Latin letters in math mode be +italic\RightNote{\mstrelease{1.1}} to let the Latin letters in math mode be in italic shape.% % \footnote{more precisely stated, the value of \cs{itdefault} @@ -2547,7 +1858,7 @@ the \ctanpkg{moresize} package. To cancel all of this use option \subsubsection[The subdued option]{The \blueit{subdued} option}\label{sec:subdued} -This option was introduced in |v1.15|.\RightNote{1.15} It provides a manner to +This option was introduced in |v1.15|.\RightNote{\mstrelease{1.15}} It provides a manner to switch on the \mst-\emph{ification} only for limited portions of the document, with the help of the mechanism of math versions. Without the subdued option, the \emph{mathastextification} applies by default @@ -2560,7 +1871,7 @@ Despite some limitations I will now partially describe, the subdued option has its utility, as I think is illustrated enough by the examples given at the start of this document and it works reasonably well. -\begin{framed} +\begin{shaded*} \mst was not written initially in order to allow its action to be completely canceled. It does not store (all) mathcodes nor does it set them (all) when changing math versions; only that would @@ -2569,7 +1880,7 @@ start of this document and it works reasonably well. official interface to math mode, as it is almost entirely preamble only). - Releases |1.3t| and |1.3u| do this kind of things to maintain + Releases \mstrelease{1.3t} and \mstrelease{1.3u} do this kind of things to maintain usability across multiple \mst-ified math versions of characters which are obviously font encoding dependent such as the minus sign as en-dash (or unicode minus), the dotless i, the |\hbar|, @@ -2581,7 +1892,7 @@ start of this document and it works reasonably well. mode and to multiple math versions amounts to some kind of a kludge, added to an initial design which handled a single unique text font. -\end{framed} +\end{shaded*} To get the displayed math (almost) as if \mst had not been loaded, one must also @@ -2590,7 +1901,7 @@ as, for example, the colon, the dot, and the minus sign belong in the default \LaTeX{} math mode set-up to three distinct fonts whereas \mst will pick (even subdued) the three of them in the same font,% -\footnote{\RightNote{1.3t}The minus sign is now perfectly subdued, +\footnote{\RightNote{\mstrelease{1.3t}}The minus sign is now perfectly subdued, because its original mathcode is stored and restored; this was only way to handle the case with Unicode engines where the math operator font is in a classic @@ -2604,13 +1915,13 @@ mathcodes, so to be on the safe side one needs the basic option which limits the mathastextification to letters and digits.% % -\footnote{\RightNote{1.3d}The subdued mode does extinguish +\footnote{\RightNote{\mstrelease{1.3d}}The subdued mode does extinguish in the normal and bold math versions the action of options selfGreek, eulergreek, and symbolgreek (previously only LGRgreek was subdue-able).} -\footnote{\RightNote{1.3t}The \texttt{\string\imath} and +\footnote{\RightNote{\mstrelease{1.3t}}The \texttt{\string\imath} and \texttt{\string\jmath} now obey the subdued regime.} -\footnote{\RightNote{1.3u}Also \texttt{\string\hbar} +\footnote{\RightNote{\mstrelease{1.3u}}Also \texttt{\string\hbar} and the math accents (see mathaccents option) obey the subdued regime.} % Even then, in some circumstances, this may not suffice: for example the @@ -2644,80 +1955,192 @@ customization of Greek letters. The command \MTcustomgreek reenables the customization done by \mst, if it was loaded with the LGRgreek or one of the other Greek related options. -\begin{framed} - Release |1.3x| has added important new aspects to the handling of Greek +\begin{shaded*} + Release \mstrelease{1.3y} has added important new aspects to the handling of Greek letters via the LGRgreek option. Make sure to read the \autoref{sec:newgreek}. -\end{framed} +\end{shaded*} + +\subsection{Miscellanea} + +Please note that most material to be found in this section was written many +years ago (except the two subsections on frenchmath on one hand and +intervals on the other hand). But it should still be valid! -\subsection{More miscellanea} +Ultimately most information here should be moved into the +reference sections \autoref{sec:cmd} and \autoref{sec:opt}, and only some +generalities should be kept here. -This may repeat information already given. +\subsubsection{Load \mst always last} + +The ``large'' math symbols are not modified in any way by \mst. Only loading +some math font packages such as \ctanpkg{fourier}, \ctanpkg{kpfonts}, \ctanpkg{mathabx}, \ctanpkg{mathdesign}, +\ctanpkg{txfonts}, \ctanpkg{newtxmath}, \ctanpkg{libertinust1math}, others\dots{} will change them. Think of loading these +packages before \mst, else they might undo what \mst did. + +More generally any package (such as \ctanpkg{amsmath}) dealing with math mode should be +loaded \emph{before} \mst. \subsubsection{Avoid \texorpdfstring{\texttt{OT1}}{OT1} encoding} - We specified in our minimal working example a |T1| encoding (|LY1| would - have been ok, too) because the default |OT1| does not have the + The default |OT1| does not have the {\color{joli}\DeleteShortVerb{\|} $\mathord{<}\,\mathord{>}\,\mathord{|}$\,\{\,\}} and {\color{joli}$\backslash$\MakeShortVerb{\|}} glyphs. If \mst detects |OT1| as the default encoding it will leave these characters to - their defaults from the math fonts.\footnote{the subdued option, described next, + their defaults from the math fonts.% +% +\footnote{The subdued option, described next, acts a bit otherwise, it forces, contrarily to its usual low-key character, the replacement of |OT1| by |T1| for the fonts ultimately used with letters and digits in math mode.} -\begin{framed} +% +\begin{shaded*} If \mst detects the obsolete |OT1| encoding it does not do anything with \DeleteShortVerb{\|}<, >, |, \{, and \} which (except for monospace fonts) are not available in that encoding.\MakeShortVerb{\|} To fully benefit from \mst it is recommended to use some other encoding having these glyphs such as |T1| or |LY1|. -\end{framed} +\end{shaded*} \subsubsection{Derivative, minus, asterisk} The text characters {}'{} and {}-{} are not used, and the asterisk is -done optionally: +done only optionally: \begin{itemize} \item the derivative sign ${}'$ is left to its default as the text font - glyph {}'{} is not, as a rule, a satisfying alternative.\footnote{|v1.2| adds + glyph {}'{} is not, as a rule, a satisfying alternative.% +% +\footnote{|v1.2| adds a customizable tiny space before ${}'$ to separate it from the previous letter, this is really needed when using upright letters in math mode with the CM derivative glyph.{\MTversion{upright}\sffamily\MTprimeskip{.5mu}% Compare $f'$ with \MTprimeskip{0mu}$f'$.} } + \item for the minus sign \mst uses the endash character - \textendash, if available, and not the hyphen character -.% -% -\footnote{see the unicodeminus option if using an OpenType font.} -% -\item the asterisk option is mandatory for \mst to replace the binary math - operator $*$ (and the equivalent control sequence \cs{ast}) with a version - which uses the text asterisk * suitably lowered\footnote{the amount of - lowering can be customized.} (and with the correct spaces around it as - binary operator). The reason is that after this inputs such as |$R^*$| - or |$R^\ast$| raise errors and \emph{must} be written |$R^{*}$| or |$R^{\ast}$|. + \textendash, if available, and not the hyphen character -. With +an OpenType font, \mst uses per default the EN DASH U+2013 (see unicodeminus). + +\item the asterisk option is required for \mst to use the text font for the + binary infix math operator $*$ and + the control sequence \cs{ast}. They will use then the text asterisk + * suitably lowered, and with the correct spaces around it as binary + operator. + \begin{snugshade} + Attention that with this option, inputs such as |$R^*$| or |$R^\ast$| + raise errors and \emph{must} be replaced by |$R^{*}$|, respectively + |$R^{\ast}$|. + \end{snugshade} \end{itemize} +\subsubsection{Large symbols and delimiters} + Nothing is changed to the ``large'' math symbols, except for $\MToriginalprod$ and $\MToriginalsum$ in inline math which, like here: $\prod\sum$, will be taken from the Symbol Font if option symbolmisc was used. The left and right delimiters are taken from -the text font only for the base size: any |\big|, |\bigl|, |\bigr|, -etc\dots reverts to the original math symbols. +the text font only for the base size: any one of |\big|, |\bigl|, |\bigr|, +etc\dots will trigger the use of the original math symbols. +\subsubsection{amsmath} +The behavior of the + \cs{DeclareMathOperator}\RightNote{\mstrelease{1.3n}} command + of |amsmath| is modified by \mst for it to use the correct font. + Additionally, release \mstrelease{1.3n} of \mst at long last also handles an extra + operation done by |amsmath| for |'.:/-*| to be used in operator names + without the extra math spacing.% +% +\footnote{To the experts: there is a long story here that \cs{newmcodes@} + hardcodes the font, that it was not compatible with Unicode engines, that + during some time (2013-2016) \texttt{lualatex-math} fixed that and very + recently |amsopn.sty 2016/03/08 v2.02| also, so now \texttt{lualatex-math + 1.6} does nothing as it is already fixed ``upstream'' in |amsopn.sty|, but + anyhow in both cases, this still hardcoded the font, so finally \mst does + the right thing from its point of view. See the code comments for more, + there is an issue here with \LuaLaTeX\ not applying the curly right quote + contrarily to \XeLaTeX.} +% +This customization is suppressed in subdued mode for the |normal| and |bold| +math versions. -\subsubsection{Load \mst always last} +\subsubsection{hbar} +The default \LaTeX\ definition of \hbar would in our context + make use of the |h| of the current math font (so for us, it is also the text + font, perhaps in italic shape), but with a bar accross the |h| from the + original default math font for letters (usually |cmmi|). We redefine + \cs{hbar} to use the text font macron accent (|\=|) as a mock math accent + (this takes into account the italic option and is compatible with + subscripts and superscripts). -The ``large'' math symbols are not modified in any way by \mst. Only loading -some math font packages such as \ctanpkg{fourier}, \ctanpkg{kpfonts}, \ctanpkg{mathabx}, \ctanpkg{mathdesign}, -\ctanpkg{txfonts}, \ctanpkg{newtxmath}, etc\dots{} will change them. Think of loading these -packages before \mst, else they might undo what \mst did. + Since \mstrelease{1.12} \mst when dealing with a Unicode font sets the \cs{hbar} + to be the character from the font having hexadecimal codepoint |U+0127|. -More generally any package (such as \ctanpkg{amsmath}) dealing with math mode should be -loaded \emph{before} \mst. + Since \mstrelease{1.3u} the general 8bits font encoding is + supported\RightNote{\mstrelease{1.3u}} (see discussion of the |mathaccents| option + at end of this list for the shared limitations). Brief testing with + various usual \TeX\ fonts shows that the vertical positioning of + the bar isn't satisfying. It is planned to either add a parameter to + adjust it or to modify altogether the mode of construction of the |\hbar|. + + Use nohbar to tell \mst not do provide its own |\hbar|. + + +\subsubsection{Dotless i and j} +By default the package redefines \cs{imath} and + \cs{jmath} to give (in math mode) the dotless i and j (if it exists at + all) from the text font.% + + \subsubsection{fontspec} + +\fbox{\ctanpkg{fontspec} +has to be +loaded {with the option} |no-math|}, +\emph{and before} \mst. + +\subsubsection{vec accent} + +The default \cs{vec} accent is not appropriate for upright letters, so \mst +provides under option fouriervec a math accent control sequence +\cs{fouriervec} which takes its glyph in a Fourier font. A poorman Ersatz +\cs{pmvec} is always available ; it is reasonably good looking on upright +letters and works with the \cs{rightarrow} glyph. + +\subsubsection{math accents} +If option mathaccents is used then \mst attempts to let + the math accents |\acute|, |\grave|, etc... use the suitable glyphs from the + text font. + + The |\vec| math accent is not handled here, as it is not available in the + usual 8bits font encodings. See the fouriervec option or the \pmvec + command. + + The math accents obey the subdued option\RightNote{\mstrelease{1.3u}} + and will change in sync with the \mst-ified text font used in + each non subdued math version. + +\begin{footnotesize} + (Very) brief testing during \mstrelease{1.3u} development with \XeTeX\ and \LuaTeX\ let + the author conclude that usage with the \cs{Umathaccent} primitive of an + OpenType accent glyph slot (which in the text font is for usage as a + postpended combining character) gives definitely bad horizontal placements + for both engines (each in its own way). Thus, the redefinitions of accents + for a \mst declared math version with an OpenType font is by default + canceled.% +% +\footnote{I.e., the \cs{grave} etc... control sequences will, in math versions + with an OpenType \mst-ified font, expand to macros holding their initial + meanings, unmodified by \mst, which was in force at the + |\string\begin\string{document\string}|.} +% + Use unimathaccents to force usage of the OpenType font text + accents glyph slots with the \cs{Umathaccent} primitive. Expert users are + invited to check out the code and to contribute suggestions if some extras + can improve it.\par +\end{footnotesize} + \subsubsection{Sans serif in math} @@ -2733,8 +2156,6 @@ text. \subsubsection{\mst with \ctanpkg{beamer}}\label{ssec:beamer} -%\noindent\llap{\textcolor{green}{\bfseries 2015/02/26}\hspace{1em}} - Starting with release |3.34| of \ctanpkg{beamer}% % @@ -2791,24 +2212,9 @@ Antoine~\textsc{Missier}: \item and load \mst afterwards (with possibly some font packages loaded in-between), passing it the option frenchmath*. \end{itemize} -% \begin{footnotesize} -% The\RightNote{1.3zb} release |2.7| dated |2023/12/23| of -% \ctanpkg{frenchmath} required \mst to add a compatiblity patch and modify -% the frenchmath* option. The above instructions cause a build crash with -% |2.7| \ctanpkg{frenchmath} and \mst |1.3za| and earlier. One must use \mst -% |1.3zb| or later.\par -% \end{footnotesize} -% Also, \ctanpkg{frenchmath} must be at least at -% version |2.7| of |2023/12/23|.% Limited testing indicated that the combination of the two packages (using the options as indicated above) works satisfactorily. -% as expected but that some adjustments may be needed for some of -% the macros defined by \ctanpkg{frenchmath}: we -% observed in particular that the |\paral| command (which produces -% $\mathrel{/\!\!/}$) may not work well if the $/$ is picked up from the text -% font due to \mst (alternative could be for most text fonts -% |\def\paral{\mathrel{//}}|), There may be some minor adjustments to do, as the \mst-ified math font may cause issues to some of the \ctanpkg{frenchmath} macros: for exemple \cs{Oijk} may not work @@ -2886,9 +2292,9 @@ respectively, which make the comma (to some extent) `intelligent', i.e. decide on the spacing type (ordinary or punctuation) depending on next token. Do not load directly the packages but simply use the corresponding option and \mst will do the loading and take -appropriate needed measures for compatibility. The\RightNote{1.3zb} decimalcomma option is +appropriate needed measures for compatibility. The\RightNote{\mstrelease{1.3zb}} decimalcomma option is included in the frenchmath* option, and the ncccomma -option is included in the frenchmath+ option.\RightNote{1.3zb} +option is included in the frenchmath+ option.\RightNote{\mstrelease{1.3zb}} Let's give another example of usage of \ctanpkg{mathtools} here to define a macro for integer ranges: @@ -2924,6 +2330,417 @@ multiple math versions. Read the fine print below for some limitations though. \mst actions on square brackets (and parentheses).\par \end{footnotesize} +\subsubsection{Unicode engines} + +\mst is minimally Unicode aware since \mstrelease{1.12} and can be used with \XeTeX{} or +\LuaTeX{}. Starting with release \mstrelease{1.3}, it needs |luatex| to be at least +as recent as the one which was provided with the TL2013 distribution. + +However \mst applies only to (a subset of) the |32-127| ascii range, and +optionally to Greek letters, but for the latter only if provided via ``\TeX\ +fonts'' such as Euler, Symbol or LGR-encoded fonts. +It does not know how to use a given Unicode font simultaneously for Latin and +Greek letters. + +Thus, first consider much better alternatives: +\begin{itemize} +\item Since 2018, the package \ctanpkg{mathfont}% +% +\footnote{Conrad \textsc{Kosowsky}, \emph{Use TrueType and OpenType fonts in math mode} +\url{https://ctan.org/pkg/mathfont}.} +% +adapts Unicode text fonts to usage in math mode. It works with both \XeTeX\ +and \LuaTeX. +\item For \XeTeX\ only, \ctanpkg{mathspec}% +% +\footnote{Andrew Gilbert \textsc{Moschou}, \emph{Specify arbitrary fonts for mathematics in \XeTeX} +\url{https://ctan.org/pkg/mathspec}.} +% +also allows usage of arbitrary text fonts in mathematics. +\item and of course +\ctanpkg{unicode-math}% +% +\footnote{Will \textsc{Robertson}, et al., \emph{Unicode mathematics with + support for XeTeX and LuaTeX} \url{https://ctan.org/pkg/unicode-math}.} +% +is the standard package for using OpenType fonts which are equipped with the needed extra +support being used in \TeX\ math mode. +\end{itemize} + +If using any one of the above you probably don't need, don't want, and should +not use \mst. + +Let me insist that \mst has not been tested in any systematic +manner under the Unicode engines; and that it is expected to be most definitely +incompatible with \ctanpkg{unicode-math}, although your mileage may vary and some +features may appear to work. + +When using \mst with either \XeTeX{} or \LuaTeX{} it is recommended to use the +\ctanpkg{fontspec} package (see remark below on \cs{encodingdefault}). Furthermore, +if using \ctanpkg{fontspec} it is \emph{necessary} to load it with its +|no-math| option, and this \emph{must} happen before loading \mst. +\begin{shaded*} +\begin{itemize}[label=$\bullet$, leftmargin=1em] +\item + Use \ctanpkg{fontspec} with its + \emph{no-math} option, and load it \emph{prior} to \mst. As some packages + load \ctanpkg{fontspec} themselves (for example |polyglossia|), a + \centeredline{|\PassOptionsToPackage{no-math}{fontspec}|} early in the + preamble might be needed. + +\item + The \ctanpkg{amsmath} package, if used, \emph{must} be loaded \emph{prior} to \mst. + +\item + Under |lualatex| engine, it is recommended to also load the package + \ctanpkg{lualatex-math}.% Please check its documentation as possibly it has now + % been incorporated upstream (I am not following up on the situation). +\end{itemize} +\end{shaded*} + +I already mentioned in the \autoref{sec:ic} the fact that +the italic corrections were not available for OpenType fonts +under the \XeTeX{} engine and only partially available for the +\LuaTeX{} engine, with the result that the spacings in math +mode when using for the letters an upright text font will be +less satisfying than with the standard PDF\TeX{} engine (the +OpenType fonts not being usable with the latter engine, this is +not a criterion of choice anyhow). + +To define math versions when using unicode fonts, use \ctanpkg{fontspec}'s +\cs{setmainfont} before the \cs{Mathastext}\oarg{version} command, or simply +before loading \mst for the default math versions. + +It is possible to mix usage of Unicode fonts and classical \TeX{} +fonts. All used 8bits font encoding must have been passed as +options to the \ctanpkg{fontenc} package. + +\subsubsection{The unicodeminus option} + +For legacy reason, \mst uses by default the |EN DASH U+2013| for the minus +sign in math mode, if the font is determined to be a ``Unicode'' font. + +There is now the unicodeminus\RightNote{\mstrelease{1.3q}} to use rather +% BORDEL DE BORDEL DE FAIT CHIER \verb ET Text for \verb command ended by end +% of line. je l'ai patch dans etoc et xint mais pas ici encore. +|MINUS SIGN U+2212|.% +\footnote{Thanks to Tobias~\textsc{Brink} who asked for this feature.} +% +Check \hyperref[nicodeminus]{\ttfamily\hyphenchar\font=189 its documentation} +on page \pageref{nicodeminus}. + +\subsubsection{Two examples with OpenType fonts} + +\begingroup\def\MacroFont{\normalfont\footnotesize\ttfamily} +I include +here two examples which compiled successfully (a long time ago!) with \XeTeX{} and +\LuaLaTeX{}, the first one on a Linux machine, the second one on a Mac +OS X machine. +\begin{verbatim} +\documentclass{article} +\usepackage[hscale=0.8]{geometry} +\usepackage{multicol} +\usepackage[no-math]{fontspec} +\usepackage{lmodern} +\usepackage[subdued,italic]{mathastext} +\setmainfont[Color=999999]{Verdana} \Mathastext[Verdana] +\setmainfont[Color=0000FF]{Arial} \Mathastext[Arial] +\setmainfont[Color=00FF00]{DejaVu Serif} \Mathastext[DejaVu] +\MTDeclareVersion{times}{T1}{ptm}{m}{n} +\setmainfont[Color=FF0000]{Andale Mono} \Mathastext[Andale] +\begin{document} +\newcommand\TEST[1]{\MTversion{#1}% +\begin{multicols}{2} +\hbox to\columnwidth{\hbox to\columnwidth{\hfil + $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}} + \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ } + \centerline{ $0123456789$ } + \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ } +\columnbreak + \centerline{ abcdefghijklmnopqrstuvwxyz } + \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ } + \centerline{ 0123456789} + \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } +\end{multicols}} +\begin{multicols}{2} + \centerline{\textbf{math mode}} +\columnbreak + \centerline{ \textbf{text} } +\end{multicols} +\TEST{DejaVu}\TEST{Verdana}\TEST{times}\TEST{Andale} +\TEST{Arial}\TEST{bold}\TEST{normal} +\end{document} +\end{verbatim} +And now the same thing with fonts available on Mac OS X: +\begin{verbatim} +\documentclass{article} +\usepackage[hscale=0.8]{geometry} +\usepackage{multicol} +\usepackage[no-math]{fontspec} +\usepackage{lmodern} +\usepackage[subdued,italic]{mathastext} +\setmainfont[Color=FF0000]{Hoefler Text} \Mathastext[Hoefler] +\setmainfont[Color=336633]{American Typewriter}\Mathastext[Typewriter] +\setmainfont[Color=0000FF]{Herculanum} \Mathastext[Herculanum] +\setmainfont[Color=FF00FF]{Didot} \Mathastext[Didot] +\setmainfont[Color=999999]{Comic Sans MS} \Mathastext[Comic] +\begin{document} + --- copy here the code from the previous example --- +\TEST{Didot}\TEST{Comic}\TEST{normal}\TEST{Herculanum} +\TEST{Hoefler}\TEST{Typewriter}\TEST{bold} +\end{document} +\end{verbatim} +\endgroup + + +\subsubsection{Compatibility with other packages}\label{sec:compat} + +Regarding the namespace of the package: all internal macros use +\cs{mst@} (or \cs{ifmst@} for \TeX{} conditionals) as prefix. Almost all user +commands have \cs{MT} prefix, the oldest ones +may use \cs{Mathastext} or variants.% +% +\footnote{It is only years after initial release that I became aware that +package \ctanpkg{mathtools} used \cs{MT\string_} prefix (with an underscore as +shown) for most internal constructs, and sometimes \cs{MT@}, and those can not +clash with our \cs{MT[a-z\string|A-Z]} for public commands and \cs{mst@} for +internal macros. They do have however user commands \cs{MTFlushSpaceAbove} and +\cs{MTFlushSpaceBelow}, but nothing else hence some retroactive relief.} + +Compatibility issues are often questions of who decides last. They are +naturally to be expected with packages dealing with the math setting. The fix +is simply to load \mst last. In particular one should \emph{always} load \mst +\emph{after} \ctanpkg{amsmath} (this is especially needed with Unicode engines +but applies in general as well). + +Any definition made in a package loaded before \mst of the font to be +used for letters or for the common characters in the |ascii| basic range +will be overruled by the loading of \mst. +Conversely most of the set-up done by \mst may well be overruled by +packages loaded later which do math related things. + +Starting with version \mstrelease{1.2}, \mst makes some characters +`mathematically active' to achieve certain effects: automatic insertion of the +italic corrections when using an upright text font in math (\autoref{sec:ic}), +extended scope of the math alphabet commands which now apply to non-letter +symbols (\autoref{sec:mathxx}; and also to math operator names, but this is +much easier to achieve). And the (already mathematically active) right quote +is modified to have some extra space added before the derivative glyph ${}'$ +(see \MTprimeskip). + +This mathematical activation is compatible with the \cs{label} and \cs{ref} +commands in and outside of math mode. + +But a difficulty arises when some other package has +made the character `catcode active' everywhere in the document. If it is +detected for such a character that \mst wishes to make `mathematically active' +that it is already `catcode active', \mst then checks if it is handling a Babel +shorthand. If yes, it then hacks into \ctanpkg{babel} support macros for that +character to let it do what it desires it to do in math mode. And it does not +make the character mathematically active, to the contrary it makes sure +that the character is \emph{not} mathematically active. + +\begin{footnotesize} + This last paragraph applies to the characters + {{;}\,{,}\,{:}\,{!}\,{?}\,{+}\,{\textendash}\,{=}\,{<}\,{>}\,{(}\,{)}\,{[}\,{]}*} + mentioned in \autoref{sec:mathxx} as `hard non-letters'. The right tick + (which is already mathematically active per default) is also handled via a + similar process, and in particular is tested for being a Babel shorthand + (which happens in particular with the Spanish language |activeacute| option). + + The reason for avoiding in general for a catcode active character to be at + same time mathematically active is illustrated in next shaded box. + + In the case of the Spanish active |'|, the advantage of \mst intervention to + reset its mathcode is that in case of a faulty input as a curly right tick + |U+8217| ', which \LaTeX{} will map to \cs{textquoteright} which itself + gives the catcode 12 |'|, it will show as curly quote in output not as prime + glyph, as \mst removes its mathematical activation. This complements the + \LaTeX{} warnings about \cs{textquoteright} being invalid in math mode. + + The ascii letters can not have been made active by Babel interface (see code + comments of \cs{mst@do@activecase}) so if an ascii letter is catcode active + when \mst examines it, nothing will change to its meaning. + + \CHANGED{\mstrelease{1.4}}At \mstrelease{1.4} these actions are done for + ascii letters at loading of the package or via \csb{MTmathactiveletters}, + which is itself done by \csb{MTversion} when entering non-subdued math + version. Check documentation of \csb{MTmathactiveletters} for some relevant + details.\par +\end{footnotesize} + +\begin{shaded*} +\footnotesize +On matters of \emph{mathematical} versus \emph{catcode} active character +tokens, here is some code, not involving \mst, that you should \textbf{not} +try at home: +\begin{verbatim} + \documentclass{article} + \usepackage[french]{babel} + \usepackage{mathtools}\mathtoolsset{centercolon} + \begin{document} + $:$ + \end{document} +\end{verbatim} +\fbox{DO NOT DO THIS AT HOME}\thinspace: it creates (with |pdflatex|) an infinite +loop. +% % +% \footnote{This seems to still be the case with Babel |3.9f| and +% frenchb.ldf |2.6e|, as tested on Sep. 2, 2013. Again tested with up-to-date +% TL2015 Jan. 15, 2016 with same result. Again tested July 11, 2024 with +% up-to-date TL2024 with the +% same result.} +% % +This is due +to the fact that the colon is simultaneously active (this is made by +\ctanpkg{babel-french} at begin document) and mathematically active (done by +\ctanpkg{mathtools} in the preamble). The interaction gives an infinite loop. +% +% Such a +% situation will be cured by \mst, even loaded before \ctanpkg{mathtools}, +% \emph{if} use is made of \MTnonlettersobeymathxx. +% +% At each math formula +% \mst will detect that Babel has activated the colon, and will cancel the +% mathematical activation (the precise definition done by \ctanpkg{mathtools} was +% already lost at begin document due to overwriting by \ctanpkg{babel} but the fact that +% the character was mathematically active remained true). +\par +\end{shaded*} + + + Regarding mathematical activation, an incompatibility of + another type arose with \ctanpkg{amsmath}. To fix it, \mst now replaces + an inner macro of \ctanpkg{amsmath} + (\cs{resetMathstrut@}) with its own version.\\ + \null\hspace{1cm}\fbox{Always load \ctanpkg{amsmath} before \mst.} + +\begin{footnotesize} + Actually this last commandment was already made necessary by the use of the + text endash to represent the minus sign in math mode, and, especially for + Unicode engines, some aspects of the \cs{DeclareMathOperator} macro from + \ctanpkg{amsmath}.\par +\end{footnotesize} + + + + \begin{shaded*} + \textcolor{magenta}{\bfseries New with 1.3i:} \mst patches |\url| of + packages \ctanpkg{url} and \ctanpkg{hyperref}, and also |\nolinkurl|, to force them + to do automatically \MTeverymathoff. Indeed they use math mode, and it + is better to turn \mst off for their dealings. + + See the \MTeverymathoff documentation. + \end{shaded*} + + + +\subsection{Math alphabets} + +Let us first recall fundamental facts of life, in the + world of traditional PDF\TeX\ engine and \TeX\ fonts, as background for + understanding what \mst does in this context. + People familiar with using Unicode engines and \ctanpkg{unicode-math}, please be + aware that the semantics there of the \LaTeX\ math alphabet commands are + \textbf{significantly} modified! +\begin{shaded*} +\begin{itemize} +\item In the default \LaTeX\ set-up all five of \mathrm, \mathbf, + \mathit, \mathsf and \mathtt tell \TeX\ to use for their arguments + specific \texttt{OT1}-encoded fonts. +\item If the document body uses, as will be the case probably with any + language other than English or its variants, some other encoding such as + \texttt{T1} for its fonts, there is no change whatsoever to the math + configuration, indeed most font packages ignore it completely. +\item It is thus a priori wrong to think of these commands as switching to + some body text font, although letters within their scopes will act as in a + text font, and in particular obey ligatures (this also applies to operator + names defined by |amsmath|'s \cs{DeclareMathOperator} which are, with some + extras not mentioned here, as using \mathrm). +\item These commands are completely different in spirit from the \LaTeX\ + \cs{textrm}, \cs{textbf}, and others, which change only some font axis; + indeed the math alphabet commands inherit from legacy Knuth's \cs{rm}, + \cs{bf}, and others which are complete font specifiers. +\item In particular when nesting, it is the inner-most which wins. +\item Only mathematical characters (such as letters) which are declared to + \TeX\ as being of ``variable family type'' react to being in the argument of + a math alphabet command. +\item Lowercase Greek letters are by default in \LaTeX\ immune to math + alphabets (so \verb|\mathrm{\pi}| induces no change in output), but the + eleven uppercase Greek letters are of ``variable family type'' because they + are picked in the \texttt{OT1}-encoded font also used for operator names + (the one to which \mathrm maps), \emph{and they occupy the exact same + slots in the \emph{\texttt{OML}}-encoding to which} \mathnormal maps! So + in default \TeX, \verb|\mathnormal{\Gamma}| gives a slanted glyph. The slots + occupied in \texttt{OML}-encoding by the lowercase Greek letters (to which + encoding they are a priori assigned) give + completely unrelated glyphs in the \texttt{OT1}-encoding, so it makes sense + that the default \LaTeX\ declares lowercase Greek to not react to math alphabets. + Notice though, that if \LaTeX\ had declared a \cs{mathnormalbold}, mapping + to a bold \texttt{OML}-encoded font, it would have made sense to also have + \cs{alpha}, \cs{beta}, etc... be of ``variable family type''. +\item But of course even if |\pi| is of such ``variable family type'' then + |\mathbf{\pi}| will give garbage because the default \mathbf selects an + \texttt{OT1}-encoded font, where there is no pi glyph whatsoever and in + particular not at the slot (which is 25) of $\pi$ in the \texttt{OML} encoding! +\end{itemize} +\end{shaded*} + +Please keep all the above in mind when trying to understand what \mst does +with math alphabets. The most significant point described next naturally is that +\mst will sync \mathnormal, \mathrm, \mathbf, \mathit, \mathsf and +\mathtt to map to the \mst-ified body text fonts. + \begin{itemize} + \item \mathnormal, \mathrm, \mathbf, \mathit, + \mathsf and \mathtt are modified to use the \mst-ified + text fonts; this can be disabled via defaultalphabets and + related individual options, but the package always provides + \Mathnormal, \Mathrm, etc..., to match the \mst font + configuration (\RLNote{changed:}{\mstrelease{1.3za}}prior to \mstrelease{1.3za} + defaultalphabets and related options also caused the \mst + alphabet commands not to be defined). Recall that there may + arise a ``too many math alphabets'' error if too many of these + commands are \emph{used} in the document: + \emph{declaring} them is not by itself the cause of the error. See the + \LaTeX\ news entry of its \texttt{2021-11-15} release for + the counter \texttt{localmathalphabets} (with default value 2) + which can be now be used if one hits such a difficulty. + \item We define a new math alphabet command + \mathnormalbold which gives direct access to + the bold version of the \mathnormal alphabet + (rather than using either the \cs{bm} command from + the \ctanpkg{bm} package or the \cs{boldsymbol} command + from the \ctanpkg{amsbsy} package). As it does not + exist in the default \LaTeX{} math font set-up, this + alphabet is \emph{not} subjected to the {subdued option} action. + +\item Version \RightNote{\mstrelease{1.2}}\mstrelease{1.2} of \mst has extended the scope of the math + alphabets to apply to non-alphabetical characters and to + operator names. This respects the automatic white spaces + added by \TeX{} around math symbols. See the devoted \autoref{sec:mathxx}. +\item The optional\RightNote{\mstrelease{1.3i}} + extra skips around letters (see \autoref{sec:mathskips} and + \autoref{sec:ic}) are removed in the scope of the math alphabets. + + \item Depending on options, further math alphabet commands + are defined by the package: \MathEulerBold, + \MathEuler, \MathPSymbol, and since \mstrelease{1.3y} under + the LGRgreek family of options\RightNote{\mstrelease{1.3y}} also + \mathgreekup and \mathgreekit. See + \autoref{sec:newgreek}. And also \mathgreekupbold and + \mathgreekitbold under the LGRgreek family of + options.\RightNote{\mstrelease{1.3za}} + + \item With\RightNote{\mstrelease{1.3za}} the LGRgreek+ option + which enhances Greek letters with a specific behavior when in the + arguments of the \mathrm, \mathbf, etc..., math alphabet + commands, this special behavior is not triggered by the \Mathrm, + \Mathbf, et al., which are genuine unmodifed math alphabet commands. See + \autoref{sec:newgreekplus}. + \end{itemize} + \subsection{Math versions}\label{sec:mathversions} @@ -2972,13 +2789,13 @@ It is still possible to switch on via \MTversion in the document body \footnote{When not using math versions at all (so not using \texttt{subdued} mode either) another way to achieve distinct fonts in text and math is naturally to modify the document text font \emph{after} having loaded \mst (or -after last usage of \cs{Mathastext} without optional argument). -Another way is to use \cs{MTfamily}, \cs{MTencoding}, \cs{MTseries}, -\cs{MTshape}, \cs{MTlettershape} in the preamble before a call to -\cs{Mathastext} which will configure math fonts without having modified the +after last usage of \csb{Mathastext} without optional argument). +Another way is to use \csb{MTfamily}, \csb{MTencoding}, \csb{MTseries}, +\csb{MTshape}, \csb{MTlettershape} in the preamble before a call to +\csb{Mathastext} which will configure math fonts without having modified the document text fonts. However if one does \texttt{\string\MTversion\{normal\}} in the document then the text font will be reset to what was recorded as math -font by the \cs{Mathastext} call in the preamble (as said above, when not +font by the \csb{Mathastext} call in the preamble (as said above, when not using \texttt{subdued} option).} The native \LaTeX{} command \cs{mathversion}\marg{version\_name} would change @@ -3000,19 +2817,19 @@ For all math versions if not using the subdued option, or only for the non-\emph{normal} and non-\emph{bold} math versions if using the subdued option, \cs{MTversion} does further additional tasks: \begin{itemize} -\item it resets\RightNote{1.3u} the \hbar, \cs{imath} +\item it resets\RightNote{\mstrelease{1.3u}} the \hbar, \cs{imath} (see \inodot), \cs{jmath}, math accents (see option mathaccents) and minus sign as en dash according to the used font encoding for the \mst-ified text font, -\item (see sections \ref{sec:mathskips} and \ref{sec:ic}) it re-issues the +\item (see \autoref{sec:mathskips} and \autoref{sec:ic}) it re-issues the command \MTmathactiveletters to let a to z, A to Z, be mathematically active in order to automatically insert the skips as defined by the user with \MTsetmathskips, and the italic corrections (if the font is not italic or slanted), -\item (see section \ref{sec:extraskips}) it resets the extra spaces after the +\item (see \autoref{sec:extraskips}) it resets the extra spaces after the symbols $\exists$, $\forall$ and before the derivative ${}'$ to the values as decided by the user in the preamble on a \emph{per version} basis, -\item (see section \ref{sec:mathxx}) it re-issues the commands +\item (see \autoref{sec:mathxx}) it re-issues the commands \MTmathoperatorsobeymathxx and \MTeasynonlettersobeymathxx to let the math operator names and (`easy') non letter characters obey the math alphabets, @@ -3058,8 +2875,9 @@ provided by \mst: package, Greek letters are the default Computer Modern ones or have been set-up by other packages; for example by the \ctanpkg{fourier} package with option - `upright', which gives upright Greek letters. -\item[LGRgreek:] (this was substantially updated at |1.3x|, make sure to + `upright', which gives upright Greek letters + or by the author \ctanpkg{lgrmath} package. +\item[LGRgreek:] (this was substantially updated at \mstrelease{1.3y}, make sure to read the new documentation at \autoref{sec:newgreek}) this option is for fonts which additionally to Latin letters also provide Greek letters in |LGR| encoding. Here is @@ -3088,7 +2906,7 @@ provided by \mst: If you use the italic option note that the italic Greek letters from the |cbfonts| are not the same glyphs as the default Greek letters from the |OML| encoded font |cmmi|. -\item[LGRgreek+:] \RightNote{1.3za}extends LGRgreek to allow abusive +\item[LGRgreek+:] \RightNote{\mstrelease{1.3za}}extends LGRgreek to allow abusive usage of \cs{mathrm} and alike commands with Greek letters. This is very much not in the spirit (especially with traditional ``8bit'' \TeX\ fonts) of the \LaTeX\ kernel concept of math alphabet @@ -3146,17 +2964,17 @@ from the lowest to the highest priority: the digits and operator names (most of the time this means ``upright shape'', but it can be otherwise), \item[itgreek]: says that Greek letters (both lowercase and uppercase) will - be in `|it|' shape. \RLNote{changed:}{1.3x}More precisely the expansion of + be in `|it|' shape. \RLNote{changed:}{\mstrelease{1.3y}}More precisely the expansion of \MTgreekitdefault is used. - This was changed at |1.3x|, formerly the value of \cs{itdefault} which was in + This was changed at \mstrelease{1.3y}, formerly the value of \cs{itdefault} which was in force at the time of using \Mathastext (or at time of loading the package if no use is made of \Mathastext) was used. \item[upgreek]: says that Greek letters (both lowercase and uppercase) will - be in `|n|' shape. \RLNote{changed:}{1.3x}More precisely the expansion of + be in `|n|' shape. \RLNote{changed:}{\mstrelease{1.3y}}More precisely the expansion of \MTgreekupdefault is used. - This was changed at |1.3x|, formerly the value of \cs{updefault} which was in + This was changed at \mstrelease{1.3y}, formerly the value of \cs{updefault} which was in force at the time of using \Mathastext (or at time of loading the package if no use is made of \Mathastext) was used. But since \LaTeX{} |2020-02-02| this caused many Font Warnings in the log because @@ -3187,7 +3005,7 @@ font family available in |LGR| encoding: for example |lmr|, |DejaVuSerif-TLF| (needs \ctanpkg{dejavu} package on your system), etc\dots -\begin{framed} +\begin{shaded*} \MTitgreek, \MTupgreek, \MTitGreek, \MTupGreek have some effect only if one of the LGRgreek, LGRgreeks, selfGreek or selfGreeks options was passed to the package. @@ -3198,14 +3016,14 @@ etc\dots \MTgreekfont has an effect only for LGRgreek and selfGreek. It is without any effect with LGRgreeks and selfGreeks. -\end{framed} +\end{shaded*} \subsubsection{Control sequences to access directly upright or italic shape for Greek under \texttt{LGRgreek} option} \label{sec:newgreek} -Some changes were made at |1.3x| to enhance the LGRgreek (and LGRgreeks) +Some changes were made at \mstrelease{1.3y} to enhance the LGRgreek (and LGRgreeks) options with new features. Everything which will be explained here applies only to these two options. @@ -3224,7 +3042,7 @@ command in the preamble (possibly with \oarg{version\_name} optional argument). Their default definitions are to expand to `|n|' and `|it|' respectively. They can also be defined prior to loading \mst. -See\RightNote{1.3x} the \autoref{table:greekup} and \autoref{table:greekit} +See\RightNote{\mstrelease{1.3y}} the \autoref{table:greekup} and \autoref{table:greekit} for illustrations (using here the Libertinus Serif font). \begin{table}[htbp] \MTversion{libertinus} @@ -3364,7 +3182,7 @@ etc\dots\ options or \MTitgreek et al.\@ commands. This is on a per \mst-enri math version basis, depending only on how the options or commands were used in the preamble. -Furthermore\RightNote{1.3x} two math alphabets are provided +Furthermore\RightNote{\mstrelease{1.3y}} two math alphabets are provided \centeredline{\mathgreekup} \centeredline{\mathgreekit} which can be used to map a letter to the corresponding Greek fonts: @@ -3379,14 +3197,14 @@ which can be used to map a letter to the corresponding Greek fonts: \centeredline{$\mathgreekit{W}=\mathgreekit{\Omega}=\mathgreekit{\Omegaup}=\Omegait$} } -Some\RightNote{1.3x} refactoring% +Some\RightNote{\mstrelease{1.3y}} refactoring% % \footnote{Technically, formerly two symbol fonts were declared, one for the lowercase Greek letters and one for the uppercase Greek letters; now those are dropped and replaced by two symbol fonts, one for `italic' Greek letters, the other for `upright' Greek letters.} % -was required to achieve this at |1.3x| +was required to achieve this at \mstrelease{1.3y} and it is not 100\% backwards compatible: if none of the itgreek etc\dots\ things was used, the Greek letters formerly would follow the shape of Latin letters (for lowercase Greek) and of operator names (for uppercase Greek). @@ -3414,10 +3232,10 @@ compatibility. \subsubsection{\cs{mathgreekupbold} and \cs{mathgreekitbold}} \label{sec:newgreekbold} -Again this applies only to LGRgreek and LGRgreeks options (and the |1.3za| +Again this applies only to LGRgreek and LGRgreeks options (and the \mstrelease{1.3za} added LGRgreek+ and LGRgreeks+). -See\RightNote{1.3za} the \autoref{table:greekupbold} and \autoref{table:greekitbold} +See\RightNote{\mstrelease{1.3za}} the \autoref{table:greekupbold} and \autoref{table:greekitbold} for illustration of usage (in math mode only) of code such as \begin{verbatim} \mathgreekupbold{\alpha} @@ -3594,7 +3412,7 @@ commands on Latin letters also: the \texttt{LGRgreek+} option} \label{sec:newgreekplus} -With option\RightNote{1.3za} LGRgreek+ or LGRgreeks+, \mst makes Greek +With option\RightNote{\mstrelease{1.3za}} LGRgreek+ or LGRgreeks+, \mst makes Greek letters control sequences \cs{alpha}, \cs{beta}, ... (but not \cs{alphaup} or \cs{betait} and the others) react in a special manner within the scope of \mathnormal, \mathrm, \mathit, \mathbf, and \mathnormalbold, but not @@ -3671,15 +3489,24 @@ fonts having only 128 or 256 glyphs, and from the fact that \mathrm and \mathbf originate in Plain \TeX\ \cs{rm} and \cs{bf} and are still quite akin to it, they are font switching commands nothing more or less. +\subsection{Advanced capacities} + +Some such capacities are on per default (but if with subdued option will be +turned off in the \emph{normal} and \emph{bold} math versions), others require +an action from the user for activation. -\subsection{Extra spaces around letters} +\subsubsection{Extra spaces around letters} \label{sec:mathskips} -This is a new feature added with release |1.3|: the command \MTsetmathskips -allows the user to set up some spaces (more precisely, `mu glue'; but stretch -and shrink are discarded) to be -automatically inserted around the letters in math mode. Some (very) unrealistic -uses: +This is a new feature% +% +\footnote{It was new in 2013 indeed. Not so much new now, but it is never too +late to try it out.} +% +added with release \mstrelease{1.3}: the command \MTsetmathskips allows the +user to set up some spaces (more precisely, `mu glue'; but stretch and shrink +are discarded) to be automatically inserted around the letters in math +mode. Some (very) unrealistic uses: \begin{verbatim} % this may be anywhere in the document (also within a math group): \MTsetmathskips{x}{20.33mu}{15.66mu}% 20.33mu before all x's and 15.66mu after. @@ -3699,28 +3526,25 @@ limits as usual the scope of this command. Furthermore the command \MTunsetmathskips cancels previous use of \cs{MTsetmathskips} for a given letter. -The implementation relies on the `mathematical activation' of letters, which is -done by default by the package since release |1.2b|. Should this cause -compatibility problems, the command \MTmathstandardletters cancels it +The implementation relies on the `mathematical activation' of letters, which +is done by default by the package since release \mstrelease{1.2b}. Should this +cause compatibility problems, the command \MTmathstandardletters cancels it entirely. To reactivate it, there is \MTmathactiveletters. Note that -\cs{MTmathactiveletters} is done automatically by \mst when loaded, and also -each time the package enhanced math-version-switch command \MTversion is used, -except for the normal and bold math versions under the subdued option. - -% Earlier this `mathematical activation' of letters had been used by the package -% only to add automatically italic corrections, as described in the next -% section. +\MTmathactiveletters is done automatically (as part of \MTicinmath) by +\mst when loaded (if not with subdued option), and also each time the +package enhanced math-version-switch command \MTversion is used, except for +the normal and bold math versions under the subdued option. -\begin{framed} +\begin{shaded*} The extra skips are set at natural width; they do not contribute to the overall stretchability or shrinkability of the math formula and do not create break points. - \textcolor{magenta}{\bfseries Changed with |1.3i|}: they are \emph{not} + \textcolor{magenta}{\bfseries Changed with \mstrelease{1.3i}}: they are \emph{not} applied within the scope of math alphabet commands. -\end{framed} +\end{shaded*} -\subsection{Italic corrections} +\subsubsection{Background on italic corrections in math mode} \label{sec:ic} {\small Note: this is somewhat technical discussion which may well be skipped in @@ -3824,9 +3648,14 @@ $\xdef\mstrestorefontdimen{\fontdimen2\textfont\symmtletterfont= We learn in Appendix G of the \TeX book that the italic correction is used for the horizontal shift of the superscript with respect to the position of -the subscript: $\mathit{f_i^j}$, or, +% CETTE LIGNE PROVOQUE L'AJOUT D'UN LINESKIP +% the subscript: $\mathit{f_i^j}$, or, +% En fait dj en Plain TeX, configuration de base la hauteur totale de +% $f_i^j$ est > 12pt = baselineskip ! +% Work-around ad hoc +the subscript: \smash{$\mathit{f_i^j}$}, or, going back now to the standard math italics $f_i^j$. In the next paragraphs -we use $f_i^i$ for more accurate comparison of the positioning of the sub- and superscript. +we use \smash{$f_i^i$} for more accurate comparison of the positioning of the sub- and superscript. If we try something like this: |${f\/}_i^i$| we obtain ${f\/}_i^i$. Our overlapping game with |\rlap{$f_i^i$}${f\/}_i^i$| gives @@ -3889,15 +3718,10 @@ to preserve this behavior). italic corrections are canceled inside the arguments to the math alphabet commands, to allow the formation of ligatures as is expected in the standard default \TeX{} font set-up in math.% -% \footnotemark -% \global\let\saved@Href@B\Hy@footnote@currentHref \end{framed}\vskip-.75\baselineskip \end{framed} -%\addtocounter{footnote}{-1}% -%\let\Hy@footnote@currentHref\saved@Href@A -% \footnotetext{the situation is rather ironical! by the way, the warnings in - section \ref{sec:mathxx} with \texttt{\$x\^{}?\$} or similar are less of an + \autoref{sec:mathxx} with \texttt{\$x\^{}?\$} or similar are less of an issue here, because the letter is only \emph{followed} by \texttt{\char92/} and anyhow the whole is put by \mst within group braces, so no surprises with \texttt{\$x\^{}y\$} or \texttt{\$\char92mathbin x\$}. Nevertheless it @@ -3905,16 +3729,10 @@ to preserve this behavior). composite objects, something which could surprise other packages. The command \csb{MTmathstandardletters} cancels this mechanism.} -%\addtocounter{footnote}{1}% -% \let\Hy@footnote@currentHref\saved@Href@B -% -% \footnotetext{\RightNote{1.3i}Formerly, italic corrections were added to the -% \cs{mathnormal} arguments.} - \makeatother The feature-implementing commands \MTicinmath, \MTnoicinmath, -\MTicalsoinmathxx are described in section \ref{sec:cmds}. +\MTicalsoinmathxx are described in \autoref{sec:cmds}. \endgroup \textbf{\hbox{Note:}} \emph{from brief testing on 2012/12/28, \XeTeX{} seems not @@ -3944,11 +3762,7 @@ at least on current TL2016. \noindent\kern-0.5em\relax2022/10/29: no change with current TL2022.} -% For more see -% \url{http://tex.stackexchange.com/a/337076} which explores also the differences -% between the two Unicode engines regarding italic corrections in pure text mode. - -\subsection{Extra glue after \texorpdfstring{\cs{exists}}{\textbackslash +\subsubsection{Extra glue after \texorpdfstring{\cs{exists}}{\textbackslash exists}, \texorpdfstring{\cs{forall}}{\textbackslash forall}, and before the prime glyph} \label{sec:extraskips} @@ -3998,21 +3812,16 @@ Under the subdued option, the \emph{normal} math version (at the start of the document body, or after |\MTversion{normal}|) and the \emph{bold} math version (either at the start of the document body after \cs{boldmath}, or after |\MTversion{bold}|) do not have any extra skip inserted (even one of zero -width) after $\oldforall$, $ \oldexists$, or before the ${}'$.% -% -%\footnote{\RightNote{1.3j}Formerly, skips of zero widths were inserted.} +width) after $\oldforall$, $ \oldexists$, or before the ${}'$. \endgroup - -\subsection{Extended scope of the math alphabets commands} +\subsubsection{Extended scope of the math alphabets commands} \label{sec:mathxx} \begingroup \MTversion{italic}\renewcommand\familydefault\sfdefault -% il faudra peut-tre que j'annule cette faon qu' mathastext de tripatouiller -% \familydefault... -\makeatletter\let\mst@doasterisk\relax\makeatother +\MTnormalasterisk Ever since the initial version of the package, some characters usually unaffected by the math alphabet commands \cs{mathbf}, \cs{mathtt}, @@ -4027,21 +3836,31 @@ $<$, or $]$ could not be declared of `variable family' (in addition to being picked up in the text font) as this would, for reasons of the inner workings of \TeX{}, not be compatible with the automatically inserted spaces around them. -A revolutionary\RightNote{1.2} ;-) novelty is introduced with version |1.2| of the package: +A revolutionary\RightNote{\mstrelease{1.2}} ;-) novelty is introduced with +version \mstrelease{1.2} of the package: \begin{enumerate} \item the pre-declared or user-declared (using the |amsmath| \cs{DeclareMathOperator} or equivalent) operator names obey the math alphabet commands,\footnote{contrarily to the next feature, this one is not likely to create incompatibilities with other packages, so it is activated by default.} -\item and, \emph{optionally}, all non alphabetical - characters\footnote{of course some of them are input preceded by a - backslash, and the backslash itself is input as \cs{backslash}.} treated by - \mst, \emph{i.e.}, if not disabled by options, - ${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}\,{\{}\,{\}}$, - the asterisk $*$, and - $.\,/\,\vert\,\backslash\,{\#}\,{\$}\,{\%}\,{\&}$% -% +\item as well as all non alphabetical characters treated by \mst. +\end{enumerate} + +The non-letters handled by \mst (if not disabled by options) fall into two +groups: +\begin{itemize}[nosep] +\item Those to which \TeX{} associates some specific spacings: + \centeredline{${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,% + {(}\,{)}\,{[}\,{]}\,{<}\,{>}\,{\{}\,{\}}\,*$} + We call them the ``hard'' ones. +\item Those for which \TeX{} uses so-called ordinary spacings: + \centeredline{$.\,/\,\vert\,\backslash\,{\#}\,{\$}\,{\%}\,{\&}$} + We call them the ``easy'' ones. +\end{itemize} +The ``easy'' non-letters are handled \emph{easily} by \mst, simply +by declaring them to be of ``variable family type''. This will +be done automatically.% \footnote{% ${\#}\,{\$}\,{\%}\,{\&}$ obey the math alphabets since the initial version of \mst; the dot $.$, the slash $/$, the vertical bar $\vert$ and the @@ -4049,431 +3868,326 @@ A revolutionary\RightNote{1.2} ;-) novelty is introduced with version |1.2| of t around them, and the procedure is then activated by default since \texttt{1.2} for these characters as they are `easy non-letters'. But for \cs{mid} and \cs{setminus} which are $\vert$ and $\backslash$ with special - spacing (of type \cs{mathrel} and \cs{mathbin} resp.) the procedure has - some constraints explained in the framed box on next page and the - activation requires \cs{MTnonlettersobeymathxx}.} + spacing (of type \cs{mathrel} and \cs{mathbin} resp.) the + activation requires \csb{MTnonlettersobeymathxx}.} % -will also obey - the math alphabet commands (when not used as delimiters). The - important thing is that the spaces added by \TeX{} before and after - are not modified. -\end{enumerate} +The ``hard'' non-letters require a more complex approach using a concept +called ``mathematical activation''. For reasons explained next, this is not +done automatically and requires the user to employ the command +\MTnonlettersobeymathxx (or, for the specific case of the asterisk the option +asterisk). + +\begin{shaded*} + It is a fundamental feature that the spacing added by \TeX{} before and + after each such \mst-ified non-letter is in no way modified. +\end{shaded*} + + Let us compare, for example, the new behavior of \cs{mathtt} and \cs{mathbf} -\MTmathoperatorsobeymathxx\MTnonlettersobeymathxx\MTeasynonlettersobeymathxx -\[ \mathtt{(\sin(n!)<\cos(m-p)?)}\qquad \mathbf{[\sin(x+y)=\cos(z-t)]}\] -with the traditional default behavior: -\MTmathoperatorsdonotobeymathxx\MTnonlettersdonotobeymathxx +when \MTnonlettersobeymathxx has been used +\MTmathoperatorsobeymathxx +\MTnonlettersobeymathxx +\MTeasynonlettersobeymathxx +\[ new:\quad \mathtt{(\sin(n!)<\cos(m-p)?)}\qquad \mathbf{[\sin(x+y)=\cos(z-t)]}\] +with the traditional default behavior one observes without \mst or in +subdued normal or bold math version: +\MTmathoperatorsdonotobeymathxx +\MTnonlettersdonotobeymathxx \MTeasynonlettersdonotobeymathxx -\[ \mathtt{(\sin(n!)<\cos(m-p)?)}\qquad \mathbf{[\sin(x+y)=\cos(z-t)]}\] - -The first feature is activated by default, except of course for the normal and -bold math versions when the package was given the \emph{subdued} option. The -second feature is \emph{off} by default for the characters listed first. It is -\emph{on} for the `easy' cases -${\#}\,{\$}\,{\%}\,{\&}\,.\,/\,\vert\,\backslash$ (activating the feature for -them puts no constraint on the user input and should not be too upsetting to -other packages), and also for $*$ but only if this was required explicitly by -the option asterisk, as the user then is supposed to know that |$R^*$| is no -valid input anymore and should be replaced by |$R^{*}$|. The remaining `difficult' -cases create similar -constraints, which will be commented more upon next. The commands% -\footnote{these commands are to be used outside of math mode. - Their scope is limited to the current \LaTeX{} environment or group. They use - the \cs{everymath} and \cs{everydisplay} mechanism so if the document needs to - modify these token lists it has to do so in a responsible manner, extending - not annihilating their previous contents.} -% -for deactivation are:\\ +\[ standard:\quad \mathtt{(\sin(n!)<\cos(m-p)?)}\qquad \mathbf{[\sin(x+y)=\cos(z-t)]}\] + +The commands for +\emph{deactivation} are:\\ \mbox{}\hspace{1cm}\csb{MTmathoperatorsdonotobeymathxx},\\ \mbox{}\hspace{1cm}\csb{MTeasynonlettersdonotobeymathxx},\\ \mbox{}\hspace{1cm}\csb{MTnonlettersdonotobeymathxx},\\ -and those for activation:\\ -\mbox{}\hspace{1cm}\csb{MTmathoperatorsobeymathxx} regards operator names and is executed by default,\\ -\mbox{}\hspace{1cm}\csb{MTeasynonlettersobeymathxx} is done by default and applies to \centeredline{${\#}\,{\$}\,{\%}\,{\&}\,.\,/\,\vert\,\backslash$} and also to $*$ under package option asterisk,\\ -\mbox{}\hspace{1cm}\csb{MTnonlettersobeymathxx} is \emph{not} done by default (see explanations why in the framed box next) and regards \centeredline{${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}$} and also \cs{mid} and \cs{setminus} but applies to -the braces ${\{}\,{\}}$ only if \csb{MTexplicitbracesobeymathxx} is also used.\par -% -%% suppression de cette note de bas de page 1.3u car elle est obsolte -%% (pas sr si 100%, mais en tout cas l'exemple avec \mathbf{-} n'a plus -%% de problme. -% \footnote{when in subdued mode, the -% math alphabets are the default ones, not the ones modified by \mst to use the -% document text fonts. As a result, matters of font encodings may then give -% unexpected results, for example for $-$. On the present document page we -% switched to a math version to escape from the |subdued| mode and avoid the -% problem with \cs{mathbf\{-\}} giving in the normal (subdued) math version -% {\MTversion{normal}\MTnonlettersobeymathxx$\mathbf-$\sffamily, when -% `non-letters' are declared to obey math alphabets.}} +and those for \emph{activation}:\\ +\mbox{}\hspace{1cm}\csb{MTmathoperatorsobeymathxx} (done by default),\\ +\mbox{}\hspace{1cm}\csb{MTeasynonlettersobeymathxx} (done by default),\\ +\mbox{}\hspace{1cm}\csb{MTnonlettersobeymathxx} is \emph{not} done by default +(see explanations why in the shaded box next) and applies to the ``hard'' +non-letters mentioned above and also to \cs{mid} and \cs{setminus}. +Furthermore, it applies to +the braces ${\{}\,{\}}$ only if \csb{MTexplicitbracesobeymathxx} is also used. + + +\begin{shaded*} + \textbf{Important:} the package does not execute on its own + \csb{MTnonlettersobeymathxx}. The reason is that the + mechanism in effet replaces the original ``hard'' characters such as + |?|, |[|, |<| by (in math mode only) a more complex structure, which + ceases looking to \TeX{} as only one token, and as a consequence |$x^?$|, |$R^+$| + or |$\mathopen<A\mathclose>$| raise an error, the workaround being to + employ additional braces: |$x^{?}$|, |$R^{+}$| and |$\mathopen{<}A\mathclose{>}$|. + + Similarly |$R^*$| does not work anymore under option asterisk, the user is + supposed to know that with this option |$R^{*}$| is the mark-up to use. + + Thus, if one adds + \centeredline{|\usepackage{mathastext}|\MTnonlettersobeymathxx} to a + pre-existing document, it is needed to check if the mark-up satisfies + to the above guidelines. For this reason the mechanism is by default + not activated and the user has to execute: + \centeredline{\MTnonlettersobeymathxx} + This can be done in the preamble and will trigger actual modifications + only at time of |\begin{document}|. +\end{shaded*} -\begin{framed} - \textbf{Important:} the package does \csb{MTnonlettersdonotobeymathxx} by - default. The reason is that activating the mechanism adds some constraints to - the way things must be input, adding -\centeredline{|\usepackage{mathastext}|\csb{MTnonlettersobeymathxx}} - to a pre-existing - document might well create errors: - all these characters treated by \mst, such - as |?|, |[|, |<| now represent (in math mode only!) \emph{two} `tokens' and - this will utterly confuse \TeX{} if some precautions are not taken: |$x^?$|, - |$R^+$| or |$\mathopen<A\mathclose>$| \emph{must} now be coded as |$x^{?}$|, - |$R^{+}$| and |$\mathopen{<}A\mathclose{>}$| (the rule is to do as if |?|, - |+|, |<| or |>| were each really \emph{two} characters). - - Even if this rule is respected in the document source, it is still a - possibility that incompatibilities with other packages will arise because - \mst does a \emph{mathematical activation} of the characters which could be - unexpected and unchecked for by other packages. This is precisely the case - with the \ctanpkg{amsmath} package, and the problem goes away by just making sure - that |amsmath| is loaded before \mst{} (generally speaking, \mst should be - loaded last after all packages dealing with math things). -\end{framed} + +\begin{footnotesize} +Some \TeX nical notes:% +% +\footnote{The complete truth is only to be found in source code. Here are + some extra details: + + The + dollar sign and the curly braces are not tested for mathematical or catcode + activation. + + The $*$\RLNote{changed:}{\mstrelease{1.4}} is tested as + are the ``hard'' non-letters, except under option everymath. On the + other hand \cs{ast} will be modified independently of what is decided for + $*$. Comprenne qui pourra.} + +\begin{itemize}[nosep] +\item +The asterisk $*$ is associated with its own option asterisk, because +independently of the matter of its behavior in the scope of math alphabets +commands, its handling by \mst (via the \MTlowerast associated +configuration) always requires it to be made mathematically active and to +expand to a more complex structure. So once this option is received by the +package, it goes full steam and also adds by default the responsiveness to +math alphabet commands (in non-subdued math versions). + +\item The legacy situation which is a bit late to change is that the + responsiveness of the asterisk to math alphabets being on by default under + option asterisk, it was decided that this responsiveness would be turned + off by \MTeasynonlettersdonotobeymathxx and back on by + \MTeasynonlettersobeymathxx, although the $*$ is part of the ``hard'' + non-letters. One can use \MTnormalasterisk to stop the $*$ to obey math + alphabet commands, but it also cancels the \MTlowerast mechanism. + +\item At\RLNote{changed:}{\mstrelease{1.4}} \mstrelease{1.4} ``easy'' + non-letters found out to be (at |\begin{document}| or with \MTversion + except for subdued \emph{normal} or \emph{bold}) mathematically active + characters will not get overridden by \mst. + This applies for example with + the dot ``.'' under \ctanpkg{babel} with Spanish language. Its special + behavior to transform into a comma ``,'' if before a digit is now + kept. As an amusing side note, if \MTnonlettersobeymathxx is used, this + comma does obey math alphabet commands. + +\item An ``easy'' non-letter which (at |\begin{document}| or with \MTversion + except for subdued \emph{normal} or \emph{bold}) is catcode active will + still be set by \mst to be of ``variable family type'', if it is not + mathematically active. The catcode status is not checked nor modified, only + the mathcode as per previous item. Now whether the \mst-ification has any + effect depends on how the user has configured the catcode active character + to behave if in math mode. + +\item When \mst wants to employ mathematical activation for a non-letter + character among the ``hard'' cases (inclusive of the asterisk), which is done + at |\begin{document}| if not subdued or with every \MTversion except for + subdued \emph{normal} or \emph{bold}, it first checks if this character + is currently catcode active. If this is the case, it then checks if the + character is a \ctanpkg{babel} shorthand. If yes, it then hooks into + \ctanpkg{babel} internals to modify the way this shorthand acts in math + mode, so that now the character will respond to math alphabet commands. + If however the catcode active character does not appear to be a + \ctanpkg{babel} shorthand, then \mst does not do anything at all (beyond + its general business at package loading time to set-up the + font used for the non-active token). +% + In relation to this context \mst should always be loaded \emph{after} \ctanpkg{babel}. + And also \emph{after} the \ctanpkg{amsmath} package. + +\item The braces |\{| and |\}| remain unresponsive to the alphabet changing commands -even after \csb{MTnonlettersobeymathxx}. One must issue also -\csb{MTexplicitbracesobeymathxx}, but it has the disadvantage that |\{| and +even after \csb{MTnonlettersobeymathxx}. The user must employ for this +\centeredline{\csb{MTexplicitbracesobeymathxx}} +This has the disadvantage that |\{| and |\}| become then unusable as variable-size delimiters: |\big\{| or |\big\}| create errors and one must make use of |\big\lbrace| and |\big\rbrace|. But -\MTmathoperatorsobeymathxx\MTnonlettersobeymathxx\MTexplicitbracesobeymathxx +% +\MTmathoperatorsobeymathxx +\MTnonlettersobeymathxx +\MTexplicitbracesobeymathxx +% one can now enjoy $\mathtt{\{a, a>b\}}$, $\mathbf{\{a, a>b\}}$, -$\mathsf{\{a, a>b\}}$, or even $\mathnormalbold{\{a, a>b\}}$.\footnote{this - last example uses the \cs{mathnormalbold} additional alphabet defined by - \mst.}\footnote{Let me recall that braces will anyhow not be handled at all +$\mathsf{\{a, a>b\}}$, or even $\mathnormalbold{\{a, a>b\}}$.% +% +\footnote{This + last example uses the \csb{mathnormalbold} additional alphabet defined by + \mst.}% +% +\footnote{Let me recall that braces will anyhow not be handled at all by \mst if the document font encoding is |OT1|, except under option |alldelims|.} -Even with \csb{MTnonlettersobeymathxx}, the parenthese-like symbols $($, $)$, +\item +Even with \csb{MTnonlettersobeymathxx}, the parentheses-like symbols $($, $)$, $[$, $]$, $<$ and $>$ and the slashes $/$, $\backslash$, \emph{if used as - left/right delimiters} (i.e.\@ with |\left/\right|) do not react to math + left/right delimiters} (i.e.\@ with |\left/\right|) will not respond to math alphabet commands. This is mainly explained by the fact that the text font -will not contain suitable glyphs, hence no attempt was made to make the +will not contain suitable glyphs, hence no attempt was made by \mst to make the delimiters pick up their glyphs there. But \mst does try to pick up most of the `small variants' of the delimiters -from the text font: |$\left<x\right>$| gives $\left<x\right>$ (but -|$\left<b\right>$| gives $\left<b\right>$.) Notice that this differs from +from the text font: |$\left<x\right>$| gives $\left<x\right>$ but +|$\left<b\right>$| gives $\left<b\right>$. Notice that this differs from standard \LaTeX{} for which |$\left< x\right>$| gives $\langle x\rangle$. As -it is perhaps a bit strange to have $\left< x\right>$ next to -$\left< X\right>$ there is option nosmalldelims: with this option the -small-sized variants of the delimiters are not modified by \mst (option -nosmalldelims has the side effect that, for the non-delimiter uses of -|\{, \}| -to be \mst-ified it is necessary to issue \csb{MTnonlettersobeymathxx} and -\csb{MTexplicitbracesobeymathxx}.) - -At any rate, as said above, whether `small' or not, delimiters are -unresponsive to math alphabet commands, due to technical aspects of \TeX, and -the way \mst handles these things. Examples: |\mathbf{<a,b>}| gives -$\mathbf{<a,b>}$ -%{\setbox0\hbox{$\mathbf{<a,b>}$}\typeout{ICI}\showboxdepth\maxdimen -% \showboxbreadth\maxdimen \showbox0} -(no use of |\left/\right|, hence brackets do obey the math alphabets --- as we -issued \MTnonlettersobeymathxx a bit earlier), |\mathbf{\left<a,b\right>}| -gives $\mathbf{\left<a,b\right>}$ (brackets used with |\left/\right| do not -obey the math alphabets), |\mathbf{\mathopen{<}a,b \mathclose{>}}| gives -$\mathbf{\mathopen{<} a,b \mathclose{>}}$ (no |\left/\right|, brackets -do obey the math alphabets). - -\endgroup -For comparison, the \LaTeX{} standard behavior for -\centeredline{|\mathbf{\mathopen{<}a,b\mathclose{>}}|} -is $\mathbf{\mathopen{<} a,b - \mathclose{>}}$ (neither brackets nor the comma do respond). - - -\subsection{Unicode engines} - -\mst is minimally Unicode aware since |1.12| and can be used with \XeTeX{} or -\LuaTeX{}. Starting with release |1.3|, it needs |luatex| to be at least -as recent as the one which was provided with the TL2013 distribution. - -However \mst applies only to (a subset of) the |32-127| ascii range, and -optionally to Greek letters, but for the latter only if provided via ``\TeX\ -fonts'' such as Euler, Symbol or LGR-encoded fonts. -It does not know how to use a given Unicode font simultaneously for Latin and -Greek letters. - -Thus, first consider much better alternatives: -\begin{itemize} -\item Since 2018, the package \ctanpkg{mathfont}% -% -\footnote{Conrad \textsc{Kosowsky}, \emph{Use TrueType and OpenType fonts in math mode} -\url{https://ctan.org/pkg/mathfont}.} -% -adapts Unicode text fonts to usage in math mode. It works with both \XeTeX\ -and \LuaTeX. -\item For \XeTeX\ only, \ctanpkg{mathspec}% -% -\footnote{Andrew Gilbert \textsc{Moschou}, \emph{Specify arbitrary fonts for mathematics in \XeTeX} -\url{https://ctan.org/pkg/mathspec}.} -% -also allows usage of arbitrary text fonts in mathematics. -\item and of course -\ctanpkg{unicode-math}% -% -\footnote{Will \textsc{Robertson}, et al., \emph{Unicode mathematics with - support for XeTeX and LuaTeX} \url{https://ctan.org/pkg/unicode-math}.} -% -is the standard package for using OpenType fonts which are equipped with the needed extra -support being used in \TeX\ math mode. -\end{itemize} - -If using any one of the above you probably don't need, don't want, and should -not use \mst. - -Let me insist that \mst has not been tested in any systematic -manner under the Unicode engines; and that it is expected to be most definitely -incompatible with \ctanpkg{unicode-math}, although your mileage may vary and some -features may appear to work. +it is perhaps a bit strange to have $\left< x\right>$ and $\left< y\right>$ +not use the same bracketing glyphs, there is an option nosmalldelims: with +this option the small-sized variants of the delimiters are not modified by +\mst (option nosmalldelims has the side effect that, for the non-delimiter +uses of |\{, \}| to be \mst-ified it is necessary to issue +\csb{MTnonlettersobeymathxx} and \csb{MTexplicitbracesobeymathxx}.)\par -When using \mst with either \XeTeX{} or \LuaTeX{} it is recommended to use the -\ctanpkg{fontspec} package (see remark below on \cs{encodingdefault}). Furthermore, -if using \ctanpkg{fontspec} it is \emph{necessary} to load it with its -|no-math| option, and this \emph{must} happen before loading \mst. -\begin{framed} -\begin{itemize}[label=$\bullet$, leftmargin=1em] \item - Use \ctanpkg{fontspec} with its - \emph{no-math} option, and load it \emph{prior} to \mst. As some packages - load \ctanpkg{fontspec} themselves (for example |polyglossia|), a - \centeredline{|\PassOptionsToPackage{no-math}{fontspec}|} early in the - preamble might be needed. - -\item - The \ctanpkg{amsmath} package, if used, \emph{must} be loaded \emph{prior} to \mst. - -\item - Under |lualatex| engine, it is recommended to also load the package - \ctanpkg{lualatex-math}.% Please check its documentation as possibly it has now - % been incorporated upstream (I am not following up on the situation). +At any rate, as said above, whether `small' or not, delimiters will remain +unresponsive to math alphabet commands, due to technical aspects of \TeX, and +the way \mst handles these things. Examples: +\begin{itemize}[nosep] +\item |\mathbf{<a,b>}| gives $\mathbf{<a,b>}$: no use of |\left/\right|, hence + brackets do obey the math alphabets --- as we issued + \MTnonlettersobeymathxx a bit earlier, +\item |\mathbf{\left<a,b\right>}| gives + $\mathbf{\left<a,b\right>}$: delimiters used with |\left/\right| will not obey + the math alphabets, +\item |\mathbf{\mathopen{<}a,b \mathclose{>}}| gives + $\mathbf{\mathopen{<} a,b \mathclose{>}}$: no |\left/\right|, so the + brackets do obey the math alphabets due to \MTnonlettersobeymathxx. +\item +\MTnonlettersdonotobeymathxx +to compare, the \LaTeX{} standard for +|\mathbf{\mathopen{<}a,b\mathclose{>}}| is to produce +$\mathbf{\mathopen{<} a,b \mathclose{>}}$: neither brackets nor the comma are +responding to \cs{mathbf}. \end{itemize} -\end{framed} - -% obsolete with release 1.3: -% A little piece of the functionality of \mst is less fully -% realized under the \LuaLaTeX{} engine than it is with -% \XeTeX{}. This is a temporary situation as the needed feature -% of \LuaLaTeX{} has been implemented in its latest development -% release. I will update \mst when these binaries will have -% reached the distribution stage. - -I already mentioned in the section \ref{sec:ic} the fact that -the italic corrections were not available for OpenType fonts -under the \XeTeX{} engine and only partially available for the -\LuaTeX{} engine, with the result that the spacings in math -mode when using for the letters an upright text font will be -less satisfying than with the standard PDF\TeX{} engine (the -OpenType fonts not being usable with the latter engine, this is -not a criterion of choice anyhow). - -To define math versions when using unicode fonts, use \ctanpkg{fontspec}'s -\cs{setmainfont} before the \cs{Mathastext}\oarg{version} command, or simply -before loading \mst for the default math versions. - -It is possible to mix usage of Unicode fonts and classical \TeX{} -fonts. All used 8bits font encoding must have been passed as -options to the \ctanpkg{fontenc} package. - -\subsubsection{The unicodeminus option} - -For legacy reason, \mst uses by default the |EN DASH U+2013| for the minus -sign in math mode, if the font is determined to be a ``Unicode'' font. - -There is now the unicodeminus\RightNote{1.3q} to use rather -% BORDEL DE BORDEL DE FAIT CHIER \verb ET Text for \verb command ended by end -% of line. je l'ai patch dans etoc et xint mais pas ici encore. -|MINUS SIGN U+2212|.% -\footnote{Thanks to Tobias~\textsc{Brink} who asked for this feature.} -% -Check \hyperref[nicodeminus]{\ttfamily\hyphenchar\font=189 its documentation} -on page \pageref{nicodeminus}. +\end{itemize} +\end{footnotesize} -\subsubsection{Two examples} +\endgroup -I include -here two examples which compiled successfully with \XeTeX{} and -\LuaLaTeX{}, the first one on a Linux machine, the second one on a Mac -OS X machine.\footnote{A |tex mathastext.dtx| (in a temporary repertory) on a - copy of |kpsewhich mathastext.dtx| will extract extended versions of - these examples as test files.} +\subsubsection{Hacking letters (and even digits) for special tasks} +\label{ssec:hackingletters} + +For some ascii characters, i.e.\@ the ``hard'' non-letters considered in the +previous section, and even more spectacularly for all ascii letters, \mst +achieves the capabilities describes in earlier sections via a \TeX nique known +as ``mathematically active characters''. For letters this is turned on by +default, but for the non-letter characters it is the command +\cs{MTnonlettersobeymathxx} which triggers this mathematical activation. + +It is possible for daring \LaTeX{} users to hook into this architecture. +Release \mstrelease{1.4} has made this especially easy regarding ascii letters +(and even for digits if using the package option activedigits). + +Except if told otherwise, \mst will make all Latin ascii letters mathematically +active, and when \TeX{} encounters e.g.\@ `e' in math mode it replaces it with +the macro having name \cs{MTcommandlettere} (mind the ending |e|). Its +default definition inserts \hyperref[sec:mathskips]{optional extra skips} +and/or an \hyperref[sec:ic]{italic correction}. + +You can redefine this \cs{MTcommandlettere}, or any +\cs{MTcommandletter}\meta{ascii-letter}, to achieve (globally or locally) +custom goals.% +% +\footnote{\CHANGED{\mstrelease{1.4}}% +Prior to \mstrelease{1.4}, there was no equivalent to +\cs{MTcommandletter}\meta{letter}. An internal macro \cs{mst@}\meta{letter} +stood for what is denoted now \cs{MTmathcharletter}\meta{letter}, but required +a \cs{protected} if redefined as it was submitted to an \cs{edef} during +processing.} +% +Attention, this redefinition should not use `e' itself as a ``naked'' +character to typeset in math mode, else an infinite loop will arise at time of +use. To access a symbol equivalent to the ``naked'' `e', use +\cs{MTmathcharlettere} (again mind the ending |e|). For example: \begin{verbatim} -\documentclass{article} -\usepackage[hscale=0.8]{geometry} -\usepackage{multicol} -\usepackage[no-math]{fontspec} -\usepackage{lmodern} -\usepackage[subdued,italic]{mathastext} -\setmainfont[Color=999999]{Verdana} \Mathastext[Verdana] -\setmainfont[Color=0000FF]{Arial} \Mathastext[Arial] -\setmainfont[Color=00FF00]{DejaVu Serif} \Mathastext[DejaVu] -\MTDeclareVersion{times}{T1}{ptm}{m}{n} -\setmainfont[Color=FF0000]{Andale Mono} \Mathastext[Andale] -\begin{document} -\newcommand\TEST[1]{\MTversion{#1}% -\begin{multicols}{2} -\hbox to\columnwidth{\hbox to\columnwidth{\hfil - $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}} - \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ } - \centerline{ $0123456789$ } - \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% - \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ } -\columnbreak - \centerline{ abcdefghijklmnopqrstuvwxyz } - \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ } - \centerline{ 0123456789} - \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% - \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } -\end{multicols}} -\begin{multicols}{2} - \centerline{\textbf{math mode}} -\columnbreak - \centerline{ \textbf{text} } -\end{multicols} -\TEST{DejaVu}\TEST{Verdana}\TEST{times}\TEST{Andale} -\TEST{Arial}\TEST{bold}\TEST{normal} -\end{document} +\renewcommand\MTcommandlettere{\mathsf{\MTmathcharlettere}}% not \mathsf{e}! \end{verbatim} -And now the same thing with fonts available on Mac OS X: +In this case we could do the simpler approach with \cs{textsf}, which works +as it will then typeset the |e| in text mode, not math mode. \begin{verbatim} -\documentclass{article} -\usepackage[hscale=0.8]{geometry} -\usepackage{multicol} -\usepackage[no-math]{fontspec} -\usepackage{lmodern} -\usepackage[subdued,italic]{mathastext} -\setmainfont[Color=FF0000]{Hoefler Text} \Mathastext[Hoefler] -\setmainfont[Color=336633]{American Typewriter}\Mathastext[Typewriter] -\setmainfont[Color=0000FF]{Herculanum} \Mathastext[Herculanum] -\setmainfont[Color=FF00FF]{Didot} \Mathastext[Didot] -\setmainfont[Color=999999]{Comic Sans MS} \Mathastext[Comic] -\begin{document} - --- copy here the code from the previous example --- -\TEST{Didot}\TEST{Comic}\TEST{normal}\TEST{Herculanum} -\TEST{Hoefler}\TEST{Typewriter}\TEST{bold} -\end{document} +\renewcommand\MTcommandlettere{\textsf{e}}% not \mathsf{e}! \end{verbatim} -% The test files which will be produced by running |latex| on -% |mathastext.dtx| are more extent. +This gives a priori the same result in our \mst context, which +picks the font for \cs{mathsf} from the one used by \cs{textsf}, assuming here +default configuration in the preamble following the loading of \mst.% +% +\footnote{This example simply reassigns \texttt{e} to another font, and one +could use also the \LaTeX{} command \cs{DeclareMathSymbol} for this. But few +\LaTeX{} users are familiar with its interface, and such an approach could +cost adding an extra math symbol font, depending on what one wants to do. +Besides \cs{DeclareMathSymbol} is a preamble-only command, which limits +considerably its usability, forcing basically the change to apply to the whole +document. Using the \mst interface via mathematically active characters opens +up the possibility of arbitrary replacements, of local scope in the document +body.} -\subsection{Compatibility issues}\label{sec:compat} - -Compatibility issues (or just questions of who decides last) are naturally to -be expected with packages dealing with the math setting; the fix is simply to -load \mst last. And one should always load |amsmath| before \mst (this is -especially true when using Unicode engines but applies in general as well). - -Any definition made in a package loaded before \mst of the font to be -used for letters or for the common characters in the |ascii| basic range -will be overruled by the loading of \mst (this includes the case -when the earlier package had made the character `mathematically active'). -Conversely most of the set-up done by \mst may well be overruled by -packages loaded later which do math related things. - -Starting with version |1.2|, \mst makes some characters `mathematically -active' to achieve certain effects: automatic insertion of the italic -corrections when using an upright text font in math, extended scope of -the math alphabet commands which now apply to non-letter symbols (and -also to math operator names, but this is much easier to achieve). And -the (already mathematically active) right quote is modified to have some -extra space added before the derivative glyph ${}'$. - -This is compatible with using \cs{label} and \cs{ref} in and outside of -math mode. But a difficulty arises when some other package has made the -character `globally active' everywhere in the document. The action of -\mst is made anew at each mathematical inline or displayed formula. If -it is detected that a character has been activated then nothing further -will be done (so the \mst feature\footnote{italic correction insertion - for the latin letters, receptivity to the math alphabet action for the - other characters.} for that character is lost) \emph{except} if it -appears that this activation was done by the Babel system. In that case -\mst does not make the character mathematically active but it modifies -in the appropriate manner the action of Babel for that character in math -mode. Furthermore \mst makes the character mathematically -\emph{inactive}.\footnote{only the characters - {{;}\,{,}\,{:}\,{!}\,{?}\,{+}\,{\textendash}\,{=}\,{<}\,{>}\,{(}\,{)}\,{[}\,{]}\,*} - mentioned in section \ref{sec:mathxx} as `difficult non letters' (and - the right quote {'}) and - the latin letters are concerned here; it seems highly unprobable that - a latin letter ${\in}\{a\mbox{--}z,A\mbox{--}Z\}$ will have been made - globally active (only letters never being used in command names are - possible candidates), but \mst has been - designed to cope with it, should it happen ...} - -Here is indeed some code that you should \textbf{not} try at -home: + +It is recommended in general to add an extra pair of braces +to avoid problems when used with |_| and |^|. Let's give an other example and +demonstrate its output: \begin{verbatim} - \documentclass{article} - \usepackage[french]{babel} - \usepackage{mathtools}\mathtoolsset{centercolon} - \begin{document} - $:$ - \end{document} +\[ +\renewcommand\MTcommandlettere{{\mathcolor{blue}{\mathsf{\MTmathcharlettere}}}}% +abcde^efgh +\] \end{verbatim} -\fbox{DO NOT DO THIS AT HOME}\thinspace: it creates an infinite -loop.\footnote{This seems to still be the case with Babel |3.9f| and - frenchb.ldf |2.6e|, as tested on Sep. 2, 2013. Again tested with up-to-date - TL2015 Jan. 15, 2016 with same result.} This is due -to the fact that the colon is simultaneously active (this is made by -\ctanpkg{babel-french} at begin document) and mathematically active (done by -\ctanpkg{mathtools} in the preamble). The interaction gives an infinite loop. Such a -situation will be cured by \mst, even loaded before \ctanpkg{mathtools}, -\emph{if} use is made of \cs{MTnonlettersobeymathxx}. At each math formula -\mst will detect that Babel has activated the colon, and will cancel the -mathematical activation (the precise definition done by \ctanpkg{mathtools} was -already lost at begin document due to overwriting by \ctanpkg{babel} but the fact that -the character was mathematically active remained true). +\MTversion{times} +\[ +\renewcommand\MTcommandlettere{{\mathcolor{blue}{\mathsf{\MTmathcharlettere}}}}% +abcde^efgh +\]% +\MTversion{normal}% +As this document is in subdued mode, we had, to show the effect, to +switch temporarily to some math version activating \mst, and we used here a +|times| math version with Times and Helvetica clones. + +If you redefine \cs{MTcommandlettere} as described in this section the optional extra +math skips added before or after via \MTsetmathskips will be lost, as well +as the automatic italic correction |\/| added by \mst for an upright font, and it +is up to the redefinition of \cs{MTcommandlettere} to do the job. + +The explanations above apply to any (ascii) Latin letters \meta{ascii-letter} +with associed macros \cs{MTcommandletter}\meta{ascii-letter} and ``naked'' +symbol command \cs{MTmathcharletter}\meta{ascii-letter}. + +With option activedigits you can even extend the game to digits. The +``raw'' digit symbol is kept as a math symbol control sequence +\cs{MTmathchardigit}\meta{y} where \meta{y} stands for the Roman version of +the digit: empty +for $0$, then |i|, |ii|, etc... until |ix|. The macro to redefine for special +effect is \cs{MTcommanddigit}\meta{y}. Example: +\begin{verbatim} +\[ +\renewcommand\MTcommanddigit{{\MTmathchardigit^{\mathcolor{blue}{1}} + _{\mathcolor{red}{2}}}}% +\renewcommand\MTcommanddigiti{{\boxed{\mathbf{\MTmathchardigiti}}}} +0^0_0 +\] +\end{verbatim} +\MTversion{times} +\[ +\renewcommand\MTcommanddigit{{\MTmathchardigit^{\mathcolor{blue}{1}} + _{\mathcolor{red}{2}}}}% +\renewcommand\MTcommanddigiti{{\boxed{\mathbf{\MTmathchardigiti}}}} +0^0_0 +\]% +\MTversion{normal}% +(\cs{boxed} is from \ctanpkg{amsmath}) Let's hope you find better +usage... recall that you can't use digit $0$ in its redefinition but must use +\cs{MTcommanddigit}. But you can of course use other digits... except if +their definitions use the digit $0$ rather than the non-active symbol control +sequence \cs{MTmathchardigit}. +See also \MTmathactiveletters and \MTmathactivedigits. - So far I have briefly described the problem of document active - characters (see the test file |mathastexttestalphabets.tex| for more - explanations and illustrations, and the commented source code of the - package). Pure mathematical activation revealed an incompatibility of - another type with \ctanpkg{amsmath}. To fix it, \mst now replaces - an inner macro of \ctanpkg{amsmath} - (\cs{resetMathstrut@}) with its own version.\\ - \null\hspace{1cm}\fbox{Always load \ctanpkg{amsmath} before \mst.}\\ - Actually this last commandment was already made necessary by the use of the - text endash to represent the minus sign in math mode, and, especially for - Unicode engines, some aspects of the \cs{DeclareMathOperator} macro from - \ctanpkg{amsmath}. - - \begin{framed}\kern-.75\baselineskip - \begin{framed} - \textbf{Important!} As is mentioned in the section \ref{sec:mathxx}, - after command \MTnonlettersobeymathxx, characters such as - |?|, or |[|, now represent \emph{two} `tokens' and this will utterly - confuse \TeX{} if some precautions are not taken. Examples: |$0^+$| or - |$x\mathrel?y$| or |$R^*$| \emph{must} be input now as |$0^{+}$| - and, respectively, - |$x\mathrel{?}y$| or |$R^{*}$|. This is why the package does - \MTnonlettersdonotobeymathxx by default. - \end{framed}\vskip-.75\baselineskip - \end{framed} - One thing to take note of is that this mechanism uses the \cs{everymath} - and \cs{everydisplay}, so if it is needed to add to these \TeX{} `token - lists' some additional things this should be done in a way preserving the - former contents. - - If one issues (after |\begin{document}|) |\everymath={}| and - |\everydisplay={}| this annihilates not only all the \mst (evil ?) doings - with math active characters but also everything else some other package - might have put in these token registers, so it is better, if the need - arises to cancel the math activation of characters done by \mst to use the - command \MTeverymathoff, which does all of - \MTmathoperatorsdonotobeymathxx, \MTnonlettersdonotobeymathxx (already - default), \MTmathstandardletters, \MTnormalprime, and - \MTnormalasterisk. This is supposed to be used in a group or - environment (as there is no |\MTactivemathon|). It must be used prior to - entering math mode. - - \begin{framed} - \textcolor{magenta}{\bfseries New with 1.3i:} \mst patches |\url| of - packages \ctanpkg{url} and \ctanpkg{hyperref}, and also |\nolinkurl|, to force them - to do automatically \MTeverymathoff. Indeed they use math mode, and it - is better to turn \mst off for their dealings. - \end{framed} - % 2 septembre 2013; finalis 22:58 % Mardi 19 dcembre 2023: l'utilisation de bleu alors que ce n'est @@ -4503,7 +4217,7 @@ option). \item \mstcmd{Mathastext} (or \mstcmd{mathastext}) reinitializes \mst: it sets the fonts used in math mode (in versions |normal| and |bold|) for letters, digits and a few ascii symbols to the \emph{current} defaults of encoding, - family, series and shape.\footnote{\texttt{\char92Mathastext} updates also + family, series and shape.\footnote{\csb{Mathastext} updates also the font and shapes for the Greek letters (|LGRgreek| option), and the skips to be inserted after the symbols $\oldforall$ and $\oldexists$, see \emph{infra.}} Both the normal and bold math version are modified by @@ -4517,7 +4231,7 @@ option). the \LaTeX{} \cs{DeclareMathVersion} macro. \emph{Do not use} |\string\Mathastext[foo]| \emph{with |foo| equal to ``normal'' or ``bold'';} this is already taken care of by the - initial loading of the package or a later command \cs{Mathastext} + initial loading of the package or a later command \csb{Mathastext} without any optional argument. And it will be rejected.} \item %\textbf{inheritance:} \csb{Mathastext}\oarg{version\_name}\oarg{parent\_name} @@ -4553,7 +4267,7 @@ option). \mstcmd{MTlettershape}\marg{sh}.% % \footnote{These commands exist also with - long names: \texttt{\char92Mathastextencoding}, + long names: \csb{Mathastextencoding}, etc\dots{} The same applies to the other commands mentioned in this section.} % @@ -4597,7 +4311,7 @@ optional argument) will these commands have any real effect. of the time of loading the package.} else letters will have the same shape as used for digits and operator-names. - Another optional argument may be used as last argument.\RightNote{1.3c} + Another optional argument may be used as last argument.\RightNote{\mstrelease{1.3c}} Similarly as its use with \Mathastext this makes the declared math version inherit, for things not modified by \mst like large symbols, the font set up of the math @@ -4645,7 +4359,7 @@ optional argument) will these commands have any real effect. redefined). In the absence of the optional argument, the mandatory one is used. The versions \emph{must} be either |normal|, or |bold|, or previously declared ones via \Mathastext or \MTDeclareVersion. - \item the starred variant\RightNote{1.3c} does the math set-up, but changes \emph{nothing} to + \item the starred variant\RightNote{\mstrelease{1.3c}} does the math set-up, but changes \emph{nothing} to the text fonts (see \autoref{sec:mathversions} for a description of the math set-up, which summarizes what is done additionally to only using \LaTeX{}'s |\mathversion|). @@ -4659,7 +4373,7 @@ optional argument) will these commands have any real effect. option the package checks separately the letter shape for lowercase and uppercase. - \RightNote{1.3j}\MTversion also does \MTexistsdoesskip, + \RightNote{\mstrelease{1.3j}}\MTversion also does \MTexistsdoesskip, \MTforalldoesskip, and also \MTprimedoesskip, \csb{MTmathoperatorsobeymathxx}, except under the |subdued| option for \emph{normal} and \emph{bold}, in which case it does the opposite actions. @@ -4668,17 +4382,13 @@ optional argument) will these commands have any real effect. the |italic| option) combining the |h| letter and the \={ } accent from the \mst font. Note that \cs{mathrm}|{\hbar}| and \cs{mathbf}|{\hbar}| will work and that \cs{hbar} does scale in subscripts and exponents. Since - |1.3u|, this is a priori compatible with all 8bits text font - encodings\RightNote{1.3u} supporting the |\=| text accent in + \mstrelease{1.3u}, this is a priori compatible with all 8bits text font + encodings\RightNote{\mstrelease{1.3u}} supporting the |\=| text accent in the LaTeX way.% % -\footnote{\RightNote{1.3u}The horizontal skips for letter |h| from - \cs{MTsetmathskips} are ignored for \cs{hbar}.% Formerly, a positive - % ``before'' skip was not properly taken into account for the horizontal - % positioning of the accent and thus gave a bad result. The user can extend - % the package \cs{hbar} definition to add skips. -} -\footnote{\RightNote{1.3u}The \cs{hbar} redefinition is canceled in normal and +\footnote{\RightNote{\mstrelease{1.3u}}The horizontal skips for letter |h| from + \csb{MTsetmathskips} are ignored for \cs{hbar}.} +\footnote{\RightNote{\mstrelease{1.3u}}The \cs{hbar} redefinition is canceled in normal and bold math versions under the |subdued| option.} \item \mstcmd{fouriervec}: this is a |\vec| accent taken from the Fourier font; @@ -4687,7 +4397,7 @@ if option fouriervec. \item \mstcmd{pmvec}: this provides a poor man \cs{vec} accent command, for upright letters. It uses the right arrow. Does not change size in subscripts and exponents. -\item \RLNote{new description:}{1.3za}\mstcmd{Mathnormal}, \mstcmd{Mathrm}, +\item \RLNote{new description:}{\mstrelease{1.3za}}\mstcmd{Mathnormal}, \mstcmd{Mathrm}, \mstcmd{Mathbf}, \mstcmd{Mathit}, \mstcmd{Mathsf}, \mstcmd{Mathtt}: they use the \mst-ified fonts. By default, \mstcmd{mathnormal}, \mstcmd{mathrm}, \mstcmd{mathbf}, \mstcmd{mathit}, \mstcmd{mathsf}, \mstcmd{mathtt} are redefined @@ -4707,7 +4417,7 @@ size in subscripts and exponents. This command is also made available under subdued option in the ``normal'' and ``bold'' math versions, as \LaTeX\ does not define it a priori, contrarily to \mathbf and other math alphabet commands. - \item \RightNote{1.3x}\mstcmd{mathgreekup}: math alphabet, only available + \item \RightNote{\mstrelease{1.3y}}\mstcmd{mathgreekup}: math alphabet, only available under LGRgreek (or LGRgreeks) option, which gives access to `upright' Greek letters (picked up from a font available in |LGR|-encoding). Note that the package also defines \cs{alphaup}, \dots, \cs{piup}, \dots\ @@ -4725,7 +4435,7 @@ size in subscripts and exponents. support as long as suitable usage of \MTgreekfont later on configures a suitable font). - \RightNote{1.3za}Also \mstcmd{mathgreekupbold}. + \RightNote{\mstrelease{1.3za}}Also \mstcmd{mathgreekupbold}. \begin{footnotesize} These math alphabets are also available under subdued option in the @@ -4764,14 +4474,14 @@ size in subscripts and exponents. the subdued option anyhow.\par \end{footnotesize} -\item \RightNote{1.3x}\mstcmd{mathgreekit}: math alphabet, only available +\item \RightNote{\mstrelease{1.3y}}\mstcmd{mathgreekit}: math alphabet, only available under LGRgreek (or LGRgreeks) option, which gives access to `italic' Greek letters (picked up from a font available in |LGR|-encoding). The actual shape is configurable via re-defining \MTgreekitdefault and then redeclaring the math version via \Mathastext (with optional argument if for a math version other than the ``normal'' one), or \MTDeclareVersion. - \RightNote{1.3za}Also \mstcmd{mathgreekitbold}. + \RightNote{\mstrelease{1.3za}}Also \mstcmd{mathgreekitbold}. \begin{footnotesize} See the discussion of \mathgreekup for some \TeX\ hacker level @@ -4782,13 +4492,6 @@ size in subscripts and exponents. font for use in math mode. By default, |\imath| and |\jmath| are redefined to use them. Since \texttt{1.3t}, these macros obey the \texttt{subdued} regime. -% -% \footnote{\RightNote{1.3t}Formerly (i.e.\@ since \texttt{1.12}) \mst -% redefined the \texttt{\string\i} and \texttt{\string\j} as robust -% commands usable both in text and math mode and using the above macros -% in the latter. I have decided it wasn't such a good idea and there is -% from now on \texttt{1.3t} no such redefinition of \texttt{\string\i} -% and \texttt{\string\j}!} \item \mstcmd{MathEuler}, \mstcmd{MathEulerBold}: math alphabets to access all the glyphs of the Euler font, if option |eulergreek| (or |eulerdigits| was passed to the package. @@ -4811,14 +4514,14 @@ all the glyphs of the Euler font, if option |eulergreek| (or \cs{let}\cs{varepsilon}$=$\cs{epsilon}, etc\dots, in case only the `variant' form of the letter was used in the documents. -\item \hypertarget{symbolmisc}{Miscelleneous mathematical symbols} from the +\item \hypertarget{symbolmisc}{Miscellaneous mathematical symbols} from the postscript Symbol font are made available (or replaced) by option symbolmisc.\footnote{option \blueit{asterisk} is also required to treat the $*$. Recall from \autoref{sec:mathxx} that the asterisk in math mode (also when using the control sequence \cs{ast}) appears then to \TeX{} to be a composite object.} - \makeatletter\let\mst@doasterisk\mst@@doasterisk\makeatother They are + \MTactiveasterisk They are \cs{prod}~$\prod$ \cs{sum}~$\sum$ \cs{implies}~$\implies$ \cs{impliedby}~$\impliedby$ \cs{iff}~$\iff$ \cs{shortiff}~$\shortiff$ \cs{to}~$\to$ \cs{longto}~$\longto$ \cs{mapsto}~$\mapsto$ @@ -4864,64 +4567,106 @@ comments). The timing for actions of \mst falls into three cases: \begin{enumerate} -\item things done during the loading of the package, or delayed to - |\AtBeginDocument|, +\item things done by \mst itself during its loading (some are delayed to + |\begin{document}|), \item things done as the result of user commands, either in the preamble or in - the body of the document, + the body of the document, (but note that some commands if used in preamble + have a real effect only at the time of |\begin{document}|), \item things done everytime math mode is entered. \end{enumerate} -The second category overlaps with the others, as the (preamble) use of some -commands can have either immediate effect or only trigger some actions in -|\AtBeginDocument| or perhaps only influence the things done later by \mst -each time math mode is entered. - -The third category deserves some brief additional comments: it mainly (but not -exclusively) regards the ``math activation'' of characters, and conversely all -``math activations'' fall into this category. The package re-checks each time -math mode is entered if some characters have been made in-between catcode -active, or math active, and takes appropriate decisions: one important aspect -of this issue is that |babel|'s mechanism for activating character was not, last -time I checked, very robust against math active characters. I now checked -again (on January 15, 2016) that -\begin{verbatim} - \documentclass{article} - \usepackage[french]{babel} - \usepackage{mathtools}\mathtoolsset{centercolon} - \begin{document} - $:$ - \end{document} -\end{verbatim} -creates an infinite loop (see section \ref{sec:compat} where this was -mentioned already, some years ago). Thus \mst has (since |1.2e 2013/01/10|) a -somewhat elaborate mechanism related to these issues (see the code comments), -installed into the list of things done by \TeX\ systematically each time -it enters math mode. For some legacy reason the package also puts into -this list a few other things which could arguably be done elsewhere once and -for all. The command \csb{MTeverymathoff} cancels all actions done by -\mst. +At \mstrelease{1.4}\RLNote{changed:}{\mstrelease{1.4}} a very significant +change took place: the last category, the one of things done everytime math mode +is entered, has become \emph{empty}.% +% +\footnote{There ia always an exception to a good +rule, and here it is: only with \LuaLaTeX{} engine, a certain +command is executed as part of \cs{everymath}. For details see +\csb{MTfixfonts}.} + +The everymath option added at \mstrelease{1.4} re-establishes the legacy +behavior. Except for ascii letters: they will not even then be made +mathematically active at each entrance in to math mode, but only once at time +of package loading (if not subdued) and also when using \MTversion (for +non-subdued math versions). + +\begin{shaded*} +Under everymath option some commands described here as being usable +everywhere have in fact an effect only if used externally of math mode. +The documentation is only accurate for the default \mstrelease{1.4} +configuration, not for the legacy one as re-enacted by everymath. +\end{shaded*} + +\subsubsection{Expert commands which are preamble-only} + +\begin{enumerate}[label=$\bullet$, leftmargin=1em] +\item \mstcmd{MTgreekupdefault}:\RightNote{\mstrelease{1.3y}} a command with + no argument whose expansion specifies, under LGRgreek regime, the + shape for the `|up|' Greek control sequences (and for the no-postfix + Greek control sequences under upgreek option) in all \mst math + versions declared \emph{afterwards} via \cs{Mathastext} or + \cs{MTDeclareVersion}. The a priori default for this shape is `|n|' + (without the quotes). See + \autoref{sec:newgreek}. + + This command can also be defined \emph{prior} to loading the package, + as the package itself only does: + \centeredline{|\providecommand*\MTgreekupdefault{n}|} + +\item \mstcmd{MTgreekitdefault}:\RightNote{\mstrelease{1.3y}} a command with + no argument whose expansion specifies, under LGRgreek regime, the + shape for the `|it|' Greek control sequences (and for the no-postfix + Greek control sequences under itgreek option) in all \mst math + versions declared \emph{afterwards} via \cs{Mathastext} or + \cs{MTDeclareVersion}. The a priori default for this shape is `|it|' + (without the quotes). + See \autoref{sec:newgreek}. + + This command can also be defined \emph{prior} to loading the package, + as the package itself only does: + \centeredline{|\providecommand*\MTgreekitdefault{it}|} +\end{enumerate} + \subsubsection{Expert commands usable everywhere}\label{sec:cmds} \begin{enumerate}[label=$\bullet$, leftmargin=1em] + \item \mstcmd{MTcustomgreek}:\RightNote{\mstrelease{1.3d}} in case \mst has been loaded with one of its + Greek related options, this activates the corresponding + customization of Greek letters in math mode. It is issued + automatically by the package in the preamble (except if loaded with + |subdued| option) and at each switch of math version via + |\MTversion| or |\MTversion*| (except for the normal and bold math + versions in subdued mode). Also available as + |\Mathastextcustomgreek|. May be used even inside of math mode. + + \item \mstcmd{MTstandardgreek}:\RightNote{\mstrelease{1.3d}} in case \mst was loaded with one of the Greek + related options this command reverts the customization, it resets the Greek + letters to their definitions in force at package loading time. Can be used + in the preamble, but is mainly for the document body (may even be used + inside math mode ...). Done automatically + under the |subdued| option when switching to the normal or bold math + version. Also available as |\Mathastextstandardgreek|. + + \DeleteShortVerb{\|}% \item \mstcmd{MTsetmathskips}\marg{a-z|A-Z}\marg{muglue\_before}\marg{muglue\_after}: % \MakeShortVerb{\|}% % - is\RightNote{1.3a} used to specify extra skips (or rather mu glue) to be + is\RightNote{\mstrelease{1.3a}} used to specify extra skips (or rather mu glue) to be inserted in math mode, before and after a letter. The rationale is that standard text fonts used in math mode may sometimes cause glyph (near-) collisions with math symbols, as \TeX{} has some implicit expectations on the design of fonts for math letters. - \begin{framed} + \begin{snugshade} These extra skips around letters are set at their natural width and do not add any stretchability or shrinkability to the math formula as a whole, nor do they result in extra potential break points. - \end{framed} + \end{snugshade} Random (silly) examples: \centeredline{|\MTsetmathskips{x}{\medmuskip}{\thickmuskip}|} \centeredline @@ -4941,19 +4686,19 @@ for all. The command \csb{MTeverymathoff} cancels all actions done by \makeatother \end{verbatim} - \begin{framed} + \begin{snugshade} \emph{\color{magenta}\bfseries Starting with |v1.3i|:} the extra skips are \emph{not} applied to the letters within the scope of math alphabet commands, or the letters from operator names (pre-defined or user declared). - \end{framed} + \end{snugshade} {\footnotesize Note that contrarily to the \csb{MTexistsskip}, \csb{MTforallskip}, and \csb{MTprimeskip} commands described next, these extra skips (which may be specified in the preamble) are not recorded in the definition of the math - version (as defined via \Mathastext with its optional argument or via - \MTDeclareVersion). The declared skips hold thoughout the document + version (as defined via \csb{Mathastext} with its optional argument or via + \csb{MTDeclareVersion}). The declared skips hold thoughout the document until modified or canceled, independently of math versions (of course, \mst cancels the skips in the normal and bold math versions if package option \blueit{subdued} was used).\par} @@ -4967,18 +4712,15 @@ for all. The command \csb{MTeverymathoff} cancels all actions done by cancels the skips for that letter (they are not set to |0mu| but completely removed). - - % setting the skips to |0mu| which prevents formation of ligatures - % when the letter is used inside a \cs{mathbf} for example). Example (using a - % version with upright Latin Modern): \centeredline - % {|\MTsetmathskips{f}{8mu}{0mu}$gffg\MTunsetmathskips{f}ff\mathbf{ff}$|} - % gives: \begingroup\MTversion{upright}% - % \MTsetmathskips{f}{8mu}{0mu}$gffg\MTunsetmathskips{f}ff\mathbf{ff}$\endgroup. - % The ligature was correctly formed. - The argument may be a macro (or any expandable code) expanding to a letter. +\item \RightNote{\mstrelease{1.3j}}\mstcmd{MTnormalexists}, \mstcmd{MTexistsdoesskip}: the + latter (done by default if not |subdued|, and also on each use of + |\MTversion| in the body of the document) makes it so that $\oldexists$ + takes into account the math glue as specified by \MTexistsskip. The + former is its opposite. + \item \mstcmd{MTexistsskip}\marg{math glue}: specifies the amount of skip or more generally glue to put after each $\oldexists$ math symbol. Indeed, upright letters (or digits for that matter) often appear to be positioned a bit too @@ -4991,17 +4733,13 @@ for all. The command \csb{MTeverymathoff} cancels all actions done by version (and subsequent ones). One may also use the command at any time in the document. In the case of the option |subdued|, the skip is canceled in the \emph{normal} and \emph{bold} math versions. -% -% \footnote{\RightNote{1.3j}% -% Formerly, it was set to |0mu|.} -% In the case of the option |italic|, the default skip is set to zero. -\item \RightNote{1.3j}\mstcmd{MTnormalexists}, \mstcmd{MTexistsdoesskip}: the +\item \RightNote{\mstrelease{1.3j}}\mstcmd{MTnormalforall}, \mstcmd{MTforalldoesskip}: the latter (done by default if not |subdued|, and also on each use of - |\MTversion| in the body of the document) makes it so that $\oldexists$ - takes into account the math glue as specified by \csb{MTexistsskip}. The + |\MTversion| in the body of the document) makes it so that $\oldforall$ + takes into account the math glue as specified by \MTforallskip. The former is its opposite. \item \mstcmd{MTforallskip}\marg{math glue}: the default is to add a |.6667mu| math @@ -5012,138 +4750,191 @@ for all. The command \csb{MTeverymathoff} cancels all actions done by be declared} math versions. In the case of the option |subdued|, the skip is canceled in the \emph{normal} and \emph{bold} math versions. -% -%\footnote{\RightNote{1.3j}Formerly, it was set to |0mu|.} In the case of the option |italic|, the default skip is zero for all math versions. One may use the command at any location in the document. -\item \RightNote{1.3j}\mstcmd{MTnormalforall}, \mstcmd{MTforalldoesskip}: the - latter (done by default if not |subdued|, and also on each use of - |\MTversion| in the body of the document) makes it so that $\oldforall$ - takes into account the math glue as specified by \csb{MTforallskip}. The - former is its opposite. +\item \RightNote{\mstrelease{1.3j}}\mstcmd{MTnormalprime}, + \mstcmd{MTprimedoesskip}: the latter (done by default if not |subdued|, + and also on each use of \csb{MTversion} in the body of the document except + for the subdued \emph{normal} and \emph{bold} math version) makes it so + that $'$ takes into account the math glue as specified by + \MTprimeskip. The former is its opposite. In all cases the right quote + |'| is a mathematically active character throughout the document producing + ${}'$ as is the default in \TeX, it is only its meaning which changes to + include or not an extra skip. + + \begin{footnotesize} + Even though \MTprimedoesskip is not done in the subdued case, it is + \emph{not} a no-op even then in the preamble or in the \emph{normal} and + \emph{bold} math versions.\par + \end{footnotesize} -\item \mstcmd{MTprimeskip}\marg{math glue}: the default is to add a |0.5mu| skip - before the derivative glyph, except for the |italic| option. In the case of - the option |subdued|, the skip is canceled in the \emph{normal} and +\item \mstcmd{MTprimeskip}\marg{math glue}: specifies the amount of math + skip to add before the derivative glyph. The default iniitial value is + |0.5mu|, except with the |italic| option where it is |0mu|. In the case + of the option |subdued|, the skip is canceled in the \emph{normal} and \emph{bold} math versions. -% -%\footnote{\RightNote{1.3j}Formerly, it was set to -% |0mu|.} -% obsolete et mme faux avec 1.3j -% \footnote{if \cs{begin\{document\}} is not followed -% with \cs{MTversion\{normal\}}, the latest values set in the preamble by -% these commands are used at the beginning of the document, -% even under option \texttt{subdued}.} +\item \mstcmd{MTnormalasterisk}, \mstcmd{MTactiveasterisk}: the latter will + use for |*| and |\ast| the text font asterisk, suitably lowered; the former + if used in the preamble tells \mst to not modify the non-\mst situation, or + if used in the body to revert to it. Both are no-op's in absence of option + asterisk. + +\begin{footnotesize} + A legacy feature is that \MTactiveasterisk is \emph{not} a no-op in + subdued \emph{normal} or \emph{bold} math versions, and does let the + asterisk obey the \MTlowerast configuration, if used explicitly by user + (even in the preamble). + + At \mstrelease{1.4}\RLNote{changed:}{\mstrelease{1.4}} \mst checks at + |\begin{document}| (or each time \MTaciveasterisk is made use of) if + * is a Babel shorthand (which I far as I know is the case of no + language) or is already mathematically active. In the latter case the + * is not modified in math mode; and it is not modified either if + found to be catcode active but not a \ctanpkg{babel} shorthand. In + contrast, the \cs{ast} will always be set to obey \MTlowerast + configuration after \MTactiveasterisk. + +\end{footnotesize} -\item \mstcmd{MTlowerast}\marg{dimen}: a \cs{raisebox} command is +\item \mstcmd{MTlowerast}\marg{dimen}: under option asterisk + a \cs{raisebox} command is used to lower the text asterisk to produce a reasonable math asterisk. The package uses this command initially with argument |0.3\height|, this will have to be fine-tuned for each given text font but worked out ok with the fonts we - tried. Note that the dimension argument will be used also in + tried. The dimension argument will be used also in sub-scripts and sub-sub-scripts, so it is best not to use an - absolute dimension. + absolute dimension. The dimension specification is for text + it can not be with |mu| unit. \item \mstcmd{MTmathoperatorsobeymathxx}, \mstcmd{MTmathoperatorsdonotobeymathxx}: the former is done by default, it makes operator names obey math alphabets. See - also section \ref{sec:mathxx}. This functionality \emph{does + also \autoref{sec:mathxx}. This functionality \emph{does {\normalfont\bfseries not} rely} on ``math active characters''. Automatically issued by each \cs{MTversion}, except under option |subdued| when switching to \emph{normal} or \emph{bold}. - \item \mstcmd{MTcustomgreek}:\RightNote{1.3d} in case \mst has been loaded with one of its - Greek related options, this activates the corresponding - customization of Greek letters in math mode. It is issued - automatically by the package in the preamble (except if loaded with - |subdued| option) and at each switch of math version via - |\MTversion| or |\MTversion*| (except for the normal and bold math - versions in subdued mode). Also available as - |\Mathastextcustomgreek|. May be used even inside of math mode. +\item \mstcmd{MTmathactiveletters}:\RightNote{\mstrelease{1.3}} + `math activation' of all ascii Latin + letters. This is done by the package automatically except under the + subdued option. - \item \mstcmd{MTstandardgreek}:\RightNote{1.3d} in case \mst was loaded with one of the Greek - related options this command reverts the customization, it resets the Greek - letters to their definitions in force at package loading time. Can be used - in the preamble, but is mainly for the document body (may even be used - inside math mode ...). Done automatically - under the |subdued| option when switching to the normal or bold math - version. Also available as |\Mathastextstandardgreek|. -\end{enumerate} - -\subsubsection{Expert commands which are preamble-only} - -\begin{enumerate}[label=$\bullet$, leftmargin=1em] -\item \mstcmd{MTgreekupdefault}:\RightNote{1.3x} a command with - no argument whose expansion specifies, under LGRgreek regime, the - shape for the `|up|' Greek control sequences (and for the no-postfix - Greek control sequences under upgreek option) in all \mst math - versions declared \emph{afterwards} via \cs{Mathastext} or - \cs{MTDeclareVersion}. The a priori default for this shape is `|n|' - (without the quotes). See - \autoref{sec:newgreek}. - - This command can also be defined \emph{prior} to loading the package, - as the package itself only does: - \centeredline{|\providecommand*\MTgreekupdefault{n}|} - -\item \mstcmd{MTgreekitdefault}:\RightNote{1.3x} a command with - no argument whose expansion specifies, under LGRgreek regime, the - shape for the `|it|' Greek control sequences (and for the no-postfix - Greek control sequences under itgreek option) in all \mst math - versions declared \emph{afterwards} via \cs{Mathastext} or - \cs{MTDeclareVersion}. The a priori default for this shape is `|it|' - (without the quotes). - See \autoref{sec:newgreek}. - - This command can also be defined \emph{prior} to loading the package, - as the package itself only does: - \centeredline{|\providecommand*\MTgreekitdefault{it}|} -\end{enumerate} - -\subsubsection{Expert commands usable only outside of math mode}\label{sec:cmdsoutmath} + At \mstrelease{1.4}\RLNote{changed:}{\mstrelease{1.4}} its behavior was + modified significantly: instead of setting some toggle obeyed only at + entrance of math mode, it acts on the spot immediately. +\begin{snugshade} + Formerly, this command was only a configuration toggle with no immediate + impact (and was not usable from inside math mode). Indeed, the \mst work of + mathematical activation was done (or not done) \emph{each time} math mode + was entered (if not in subdued), and the ascii letters kept standard + mathcodes outside of math mode. + + The command now does the mathematical activation on the spot and the meaning + of the active shape of the ascii letters --- a priori undefined because + typesetting a document with an active ascii letter is near impossible, as no + \LaTeX{} command name used in the document can contain it --- is modified + here and then; but of course the catcodes are not modified only the + mathcodes are. Except if \mst is loaded with the subdued option, this + mathematical activation is executed already at package loading time. + + If with the subdued option, the command is inactive in the preamble, as + well as in the \emph{normal} and \emph{bold} math versions. In all cases it + gets (re-)executed automatically when \MTversion is used for activating a + non-subdued math version. -They are usable only from outside math mode because they act via turning on -or off the execution, each time math mode is entered, of certain macros added -by \mst to the \cs{everymath} and \cs{everydisplay} token list variables. + \begin{footnotesize} + The new situation may be dangerous if the document author makes a letter, + say |A|, catcode active at some point, with a definition of the active + state using |\string A|. As \mst has (earlier, in the preamble) set |A| + to be mathematically active as well, and as the \cs{string} changes + nothing to that, an infinite loop will be triggered by such an |A| in math + mode. + + But, having an active ascii letter can only be in very localized portions + of a document, and only be authored by experts. The experts should + carefully make sure the mathcode of the letter is not active if they set + the catcode to active and let the active meaning use \cs{string} on the + letter itself, thus we can trust that the mathematical activation done + earlier by \mst is undone and there will be no problems.\par + \end{footnotesize} -\begin{enumerate}[label=$\bullet$, leftmargin=1em] + This \mstrelease{1.4} change may thus need to be followed by some + adjustments in some quite special circumstances caused by some expert + interventions. -\item \mstcmd{MTmathactiveletters}: activates the `math activation' of Latin - letters. This is done by the package during loading, except under the - |subdued| option. -% -% \footnote{\RightNote{1.3j}Formerly, it was also executed -% from each \cs{Mathastext} in the preamble.} - It is again executed in the - body at each \cs{MTversion}, except under the |subdued| option when - switching to the \emph{normal} or \emph{bold} math versions. + See \autoref{sec:mathskips} and \autoref{sec:ic} for the rationale of this + mathematical activation, and \autoref{ssec:hackingletters} for ways to + use it for other goals. +\end{snugshade} + \begin{footnotesize} + If you do want mathematically active letters also in subdued \emph{normal} + or \emph{bold} math versions (to apply tricks such as those of + \autoref{ssec:hackingletters}) there is \cs{mst@mathactivateletters} which + does not check the subdued status.\par + \end{footnotesize} + +\item \mstcmd{MTmathstandardletters}:\RightNote{\mstrelease{1.3}} + turns off the mathematical active + ascii letters, i.e.\@ reverts their mathcodes to package font configuration. + Here ``standard'' only means + that the letters will not be mathematically active, but they are still under the + influence of \mst regarding the typeface they use, so they are only + ``standard'' from \mst point of view. + + At \mstrelease{1.4}\RLNote{changed:}{\mstrelease{1.4}} its behavior was + modified: instead of setting some toggle obeyed only at entrance of math + mode, it acts on the spot immediately. + \begin{snugshade} + \MTmathstandardletters will not try to restore the meaning associated to + the catcode active variant of the letter token which may have been in place + at the time of \MTmathactiveletters. This meaning is not saved for + later reset. + + \emph{Except} if the \emph{letter} was an active Babel-shorthand at the time + of \MTmathactiveletters, which is in fact almost impossible to achieve + via the \ctanpkg{babel} interface. + + And if the letter was catcode-active due to user action, + \MTmathactiveletters will not have made it mathematically active, nor + will it have modified its active meaning. So the active meaning may get + overwritten only for a letter having a normal catcode at time of + \MTmathactiveletters but which for some reason has some meaning + associated to its catcode active variant. + \end{snugshade} + +\item \mstcmd{MTmathactivedigits}:\RLNote{new:}{\mstrelease{1.4}} + is a no-op except under option + activedigits. It then makes all digits mathematically active and is + executed during package loading, except if subdued. It is again executed + when entering any non-subdued math version in the document body. See + \autoref{ssec:hackingletters} for an example of use. - The letters are made mathematically active\footnote{the |mathcode|'s are - only modified at the time of execution of \cs{everymath}, - \cs{everydisplay}.} to insert the extra skips as specified by - \csb{MTsetmathskips} (see section \ref{sec:mathskips}), and also possibly - the italic corrections when using upright fonts (see section \ref{sec:ic}). + \begin{footnotesize} + If you do want mathematically active digits also in subdued \emph{normal} + or \emph{bold} math versions (to apply tricks such as those of + \autoref{ssec:hackingletters}) there is \cs{mst@mathactivatedigits} which + does not check the subdued status.\par + \end{footnotesize} -\item \mstcmd{MTmathstandardletters}: cancels the `math activation' of the letters. - Must be re-issued after each \csb{MTversion}, but see - \csb{MTeverymathdefault}. +\item \mstcmd{MTmathstandarddigits}:\RLNote{new:}{\mstrelease{1.4}} + a no-op except under option + activedigits. Under this option it resets the digits to their normal + mathcodes as configured by the package. \item \mstcmd{MTicinmath}: this command is executed by default by \mst except in case of option |subdued| or if the user chosen letter shape is oblique (|it| or |sl|). It tells \mst to add italic corrections after all letters in math mode, except within the scope of math alphabets. -% -% \footnote{\RightNote{1.3i}% -% Formerly, italic corrections were added to the (non-oblique) letters of -% \cs{mathnormal} arguments.} - This command and the next ones in this item can be used in the preamble as - well as in the body of the document (in case of |subdued| option, using the - commands from within the preamble will remain without effect, as the - document body will start in the subdued normal math version anyhow.) But - each \cs{MTversion} in the body will re-emit \cs{MTicinmath} (in case of + This\RLNote{changed:}{\mstrelease{1.4}} + command and the next ones in this item can be used anywhere in the + document and even from inside math mode. In case of subdued option, using the + command from within the preamble remains without effect, as the + document body will start in the subdued normal math version anyhow. + Each \cs{MTversion} in the body reemits \cs{MTicinmath} (in case of non-oblique letter shape), except if the |subdued| option was used and the chosen math version is \emph{normal} or \emph{bold}. @@ -5153,54 +4944,38 @@ by \mst to the \cs{everymath} and \cs{everydisplay} token list variables. {\footnotesize - It may theoretically be used from inside math mode, but the included - \MTmathactiveletters will have an effect only if issued prior to - entering math mode. + The description above about the command not being executed if the letter + shape is italic or slanted is not quite right, as it refers only to the + act of inserting or not italic correction. The + \MTmathactiveletters component is always executed, however it will be a + no-op in |subdued| \emph{normal} and \emph{bold}. \mstcmd{MTnoicinmath}: this command deactivates the package added italic corrections. It can be used inside as well as outside - of math mode (or in the preamble of the document). - - \mstcmd{MTICinmath}, \mstcmd{MTnoICinmath}: these commands activate the italic - corrections only for the uppercase letters (but recall that \cs{MTicinmath} - is done by default, thus this will typically have to follow - \cs{MTnoicinmath}.) - -% obsolte 1.3i - % Following some decision of the package author whose rationale has been - % forgotten, afer \cs{MTICinmath} italic corrections for uppercase letters in - % arguments to all math alphabets (\emph{i.e.} also \cs{mathnormal}) are - % suppressed (with \cs{MTicinmath} the italic corrections are suppressed - % inside the scope of math alphabets \emph{except} \cs{mathnormal}.) - % No italic corrections are explicitly added inside arguments of math - % alphabets. + of math mode (or in the preamble of the document). Note that it does not + deactivate the mathematical activation of the ascii letters. Use + \MTmathstandardletters for that. + + \mstcmd{MTICinmath}, \mstcmd{MTnoICinmath}: only acts on the uppercase + letters. But recall that \cs{MTicinmath} is done by default, thus + using italic corrections only for uppercase needs to go via + \cs{MTnoicinmath} then \cs{MTICinmath}. \mstcmd{MTicalsoinmathxx}: this command de-activates the de-activation of the italic corrections inside the arguments to the math alphabet - commands. -% apart from \cs{mathnormal}. + commands. It can be issued inside as well as outside of math mode. Will be effective only if \MTicinmath or \MTICinmath is in force. -% obsolte 1.3i - % \footnote{it is provided - % for the \mst defined math alphabet \cs{mathnormalbold} which - % contrarily to \cs{mathnormal} is not treated apart from the other - % math alphabets.} To cancel its effect either enclose it in a group or environment or re-issue \MTicinmath after it. } -\item \mstcmd{MTnormalasterisk}, \mstcmd{MTactiveasterisk}: the latter will use for |*| - and |\ast| the text font asterisk, suitably lowered; the former tells \mst - to not modify the \LaTeX\ default. Both are no-op without option - asterisk. - \item \mstcmd{MTeasynonlettersobeymathxx}, \mstcmd{MTeasynonlettersdonotobeymathxx}: the former is done by default, it makes characters \verb+.+, \verb+/+, \verb+|+, \verb+\+, \verb+#+, \verb+$+, \verb+%+, and \verb+&+ (if not excluded by package options) obey math alphabet commands. See also - section \ref{sec:mathxx}. This functionality does \emph{not} make the + \autoref{sec:mathxx}. This functionality does \emph{not} make the characters ``math active'' (but it does modify |\mathcode|'s, naturally). \item \mstcmd{MTnonlettersobeymathxx}, \mstcmd{MTnonlettersdonotobeymathxx}: the former @@ -5213,105 +4988,110 @@ by \mst to the \cs{everymath} and \cs{everydisplay} token list variables. it will have to be coded |$a^{!}$|. Hence, by default, the package does \MTnonlettersdonotobeymathxx. - \begin{framed} - Under |subdued| option, \cs{MTnonlettersobeymathxx} effect is of course - canceled in the \emph{normal} and \emph{bold} math versions; but please - note that when switching back to a non-subdued math version it will be - mandatory to issue again \cs{MTnonlettersobeymathxx} explicitly if its - effect is to be re-activated. - - In particular, executing \cs{MTnonlettersobeymathxx} in the preamble or at - the start of the document body serves nothing, because the document is in - the subdued \emph{normal} math version regime then. It must thus be - executed after the first usage of \cs{MTversion} switching to a - non-subdued math version, and again on each successive exit from the - \emph{normal} or \emph{bold} math versions. - \end{framed} - \item \mstcmd{MTexplicitbracesobeymathxx}: extends an earlier \MTnonlettersobeymathxx to also treat \verb|\{| and \verb|\}|. But then |\left\{|, |\right\}| must be coded |\left\lbrace|, |\right\rbrace| rather. There is also \mstcmd{MTexplicitbracesdonotobeymathxx}. -\item \RightNote{1.3j}\mstcmd{MTnormalprime}, \mstcmd{MTprimedoesskip}: the latter (done by default if not - |subdued|, and also on each use of \csb{MTversion} in the body of the document - except for the |subdued| \emph{normal} and \emph{bold} math version) - makes it so that $'$ takes into account the math glue as specified by - \csb{MTprimeskip}. The former is its opposite. In all cases the right quote - |'| is a mathematically active character producing ${}'$ as is the default - in \TeX, it is only its meaning which changes to include or not an extra - skip. For some (legacy) reason, this change of meaning is done anew - by \mst each time math mode is entered. The commands of this item are thus - no-op from inside math mode. - - -\item \RightNote{1.3j}\mstcmd{MTeverymathdefault}: this hook is executed by - \csb{MTversion}\marg{version\_name}, except under option |subdued| - when switching to the \emph{normal} or \emph{bold} math versions. Its +\item \RightNote{\mstrelease{1.3j}}\mstcmd{MTeverymathdefault}: this hook is executed by + \csb{MTversion}\marg{version\_name} (but if under option |subdued| + and switching to the \emph{normal} or \emph{bold} math version its default + effect is overruled by an \MTeverymathoff executed after it). Its default meaning is: \begin{verbatim} \MTactiveasterisk % this has no effect without option asterisk \MTprimedoesskip % this makes prime glyph obey extra space \MTeasynonlettersobeymathxx - \MTicinmath % this does \MTmathactiveletters, hence also skips from - % \MTsetmathskips are obeyed. + \MTicinmath % this does \MTmathactiveletters, hence the extra + % skips from \MTsetmathskips are obeyed. + \MTmathactivedigits % this is a no-op in absence of option activedigits \MTfixfonts % only operant under LuaLaTeX. \end{verbatim} - {\footnotesize Notice that under |subdued| option, switching to the + {\footnotesize Under |subdued| option, switching to the \emph{normal} or \emph{bold} version does \csb{MTeverymathoff} which - includes \cs{MTnonlettersdonotobeymathxx}. + includes \MTnonlettersdonotobeymathxx. The default \MTeverymathdefault which is issued when going back to a non-\emph{normal} or \emph{bold} math version doesn't do - \cs{MTnonlettersobeymathxx}: thus it is up to the user to correct this if - needed (no issue without |subdued| option). + \MTnonlettersobeymathxx: thus it is up to the user to correct this if + desired. Notice also that \csb{MTversion}\marg{version\_name}, except for \emph{normal} or \emph{bold} if |subdued| does \csb{MTforalldoesskip} and \csb{MTexistsdoesskip}, which are not included in \cs{MTeverymathdefault} -actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par} +actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par -\item \RightNote{1.3j}\mstcmd{MTeverymathoff}: does \MTnormalasterisk, +At \mstrelease{1.4}, the name of this command diverges somewhat from its +action as mathematical activation of ascii letters (or, optionally, of digits) +will happen on the spot and not during \cs{everymath} or \cs{everydisplay} +execution.\par +} + +\item \RightNote{\mstrelease{1.3j}}\mstcmd{MTeverymathoff}: does \MTnormalasterisk, \MTnormalprime, \MTnonlettersdonotobeymathxx, - \MTeasynonlettersdonotobeymathxx, \MTmathstandardletters and + \MTeasynonlettersdonotobeymathxx, \MTmathstandardletters, + \MTmathstandarddigits\RightNote{\mstrelease{1.4}} and \MTdonotfixfonts. - {\footnotesize \RightNote{1.3i}The commands - |\url/\nolinkurl| of package |hyperref| and |url| from |url.sty| (which + Automatically done by \csb{MTversion}|{normal}| (or |{bold}|) under option |subdued| + (and + also \csb{MTnormalexists} and + \csb{MTnormalforall} are executed then). + + + {\footnotesize \RightNote{\mstrelease{1.3i}}The commands + |\url/\nolinkurl| of package |hyperref| and |\url| from |url.sty| (which use math mode under the hood) are patched by \mst to do \MTeverymathoff automatically: this is needed because \mst modifies anew some mathcodes \emph{each time math mode is entered,} hence may overwrite to some extent - the specific preparation done by |{url,hyperref}.sty|. - % {\parfillskip0pt\hfill - % \rlap{\kern10pt\textcolor{magenta}{\bfseries New! (1.3i)}}\par} + the specific preparations done by |{url,hyperref}.sty|. + + \RightNote{\mstrelease{1.4}}However, in some cases it may be interesting to + be able to apply hacks as described in \autoref{ssec:hackingletters}. + You can use now \MTeverymathoff as a hook inside + |\url| and |\nolinkurl| commands. Perhaps redefine it (locally) to do + all of the above except \MTmathstandardletters and/or + \MTmathstandarddigits, and use the \autoref{ssec:hackingletters} + instructions to achieve special effects for some letters or digits in + the URLs rendered via |\url| and |\nolinkurl|. + \par + } + +\end{enumerate} - Automatically done by \csb{MTversion} under option |subdued| - if switching to the \emph{normal} or \emph{bold} math versions; and - \csb{MTversion} then does also \csb{MTnormalexists} and - \csb{MTnormalforall}. -\par} +\subsubsection{Expert commands usable only outside of math mode}\label{sec:cmdsoutmath} + +There is only one pair of commands here: \MTfixfonts and \MTdonotfixfonts. +They are operant only under \LuaLaTeX{}. As \MTeverymathdefault and +\MTeverymathoff use them, they arguably could have been listed here, but +only for engine \LuaLaTeX{}. \small -\item \RightNote{1.3o}\mstcmd{MTfixfonts}: this is operant only under +\begin{enumerate}[label=$\bullet$, leftmargin=1em] + +\item \RightNote{\mstrelease{1.3o}}\mstcmd{MTfixfonts}: this is operant only under \LuaLaTeX{}. It has the effect that each time math mode is entered macro \csb{MTfixmathfonts} will be executed. The latter forces so-called |base| mode for the used text font in math mode, in an effort to (only partially, see code comments) fix the fact that OpenType features such as Lining Figures were in some cases not being applied in math mode when one uses text fonts there (text fonts are declared by \LuaTeX+|luaotfload| to use |node| - mode, which is non-functional in math.) It is invoked automatically by the + or |harf| mode, which are non-functional in math.) It is invoked automatically by the package (except for |normal| and |bold| math versions under |subdued| option), and in normal situations, there is no reason to use it directly. + \RLNote{changed:}{\mstrelease{1.4}}The hack was updated at \mstrelease{1.4} + in order to also handle fonts using |Renderer=HarfBuzz|. + % pas envie de perdre mon temps l-dessus. D'ailleurs peut-tre dj pour % commencer bm ne fonctionne pas avec fontes OpenType. % Notice (not tested) that package |bm| is presumably not compatible. -\item \RightNote{1.3o}\mstcmd{MTdonotfixfonts}: cancels the job of +\item \RightNote{\mstrelease{1.3o}}\mstcmd{MTdonotfixfonts}: cancels the job of |\MTfixfonts|. Done automatically in subdued mode when in the |normal| or |bold| math version; in normal contexts, there is no reason to use this command. Only operant under \LuaLaTeX. @@ -5321,17 +5101,19 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par} \subsubsection{Expert commands usable only in math mode} \begin{enumerate}[label=$\bullet$, leftmargin=1em] -{\small -\item\RightNote{1.3p}% + +\item\RightNote{\mstrelease{1.3p}}% \mstcmd{MTfixmathfonts}: this used to be an internal package macro - but it is given a public name at |1.3p| because I discovered that + but it is given a public name at \mstrelease{1.3p} because I discovered that |$..\hbox{\mathversion{foo}$..$}..$| causes an issue and one needs to invoke again \cs{MTfixmathfonts} \emph{after} the \verb|\hbox|, for some reason. To be used \emph{only} under \LuaLaTeX{} and only for such rare cases where it may be needed.\par -} + \end{enumerate} +\normalsize + \section{Package options} \subsection{Summary of main options} @@ -5388,7 +5170,8 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par} roughly by themes. So, objectively, the best for the diligent reader is to read thoroughly all descriptions. \begin{enumerate}[label=$\bullet$, leftmargin=1em] - \item \mstopt{basic}: only mathastextify letters and digits. + \item \mstopt{basic}: only mathastextify (ascii) letters and digits. Can + be combined with either nodigits or noletters. \item \mstopt{subdued}: acts in a subdued way, which means that the \LaTeX\ ``normal'' (default) and ``bold'' (triggered by \cs{boldmath} or \cs{mathversion}|{bold}|, undone by \cs{unboldmath} or on exit from a @@ -5410,10 +5193,10 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par} handles Greek letters, also lowercase (but not uppercase) Greek letters will use this a priori italic shape except if some other option such as \blueit{upgreek} was used.% - \footnote{Since \texttt{1.3x}, in presence of the \blueit{LGRgreek} - option in addition to \blueit{italic}, the \cs{MTgreekitdefault} + \footnote{Since \texttt{1.3y}, in presence of the \blueit{LGRgreek} + option in addition to \blueit{italic}, the \csb{MTgreekitdefault} shape is then used for lowercase Greek letters and - \cs{MTgreekupdefault} for uppercase.} + \csb{MTgreekupdefault} for uppercase.} \item \mstopt{frenchmath}: configures the lowercase Latin letters to use italic shape (\cs{itdefault}), and uppercase Latin letters to be in same shape as for digits and operator names (i.e.\@ a priori @@ -5424,8 +5207,8 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par} and uppercase Greek letters will use the same shape as operator names, except if some other option such as \blueit{itgreek} was used.% - \footnote{Under \blueit{LGRgreek} and since |1.3x|, the - \cs{MTgreekupdefault} is used for Greek letters if no other option + \footnote{Under \blueit{LGRgreek} and since \mstrelease{1.3y}, the + \csb{MTgreekupdefault} is used for Greek letters if no other option such as \blueit{itgreek} was employed.} \begin{snugshade} @@ -5434,9 +5217,7 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par} be in the same shape as the one for digits and operator names) is \textbf{not} undone in the subdued ``normal'' and ``bold'' math versions. It holds throughout the - document, but math versions declared by \mst may use - \MTshape and \MTlettershape to, in effect, obtain - whatever configuration is desired. + document. As a bonus, note that doing \centeredline{|\usepackage[basic,subdued,frenchmath]{mathastext}|} @@ -5490,7 +5271,7 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par} %\end{footnotesize} -\item \mstopt{defaultalphabets}: \RLNote{new behavior}{1.3za}\mst +\item \mstopt{defaultalphabets}: \RLNote{new behavior}{\mstrelease{1.3za}}\mst always defines \cs{Mathnormal}, \cs{Mathrm}, \cs{Mathbf} etc... to refer to the \mst-ified text fonts, and redefines the math alphabets \cs{mathrm}, \cs{mathit}, \cs{mathtt} etc\dots{} (but @@ -5501,22 +5282,22 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par} be available whether or not this option is made use of. \begin{footnotesize} - Prior to |1.3za| (and since |1.15f|), this option also prevented the + Prior to \mstrelease{1.3za} (and since \mstrelease{1.15f}), this option also prevented the package to declare the \cs{Mathnormal} et al.\@ and \cs{mathnormalbold} commands. In this context, recall that the dreaded ``too many math alphabets'' error can only occur on \emph{use} in the document of too many of such commands, and not at the time of their declarations. The author's - notes from time of |1.15f| release (|2012/10/25|) only say that it may not + notes from time of \mstrelease{1.15f} release (|2012/10/25|) only say that it may not be ``useful'' to package user to have both (for example) |\mathrm| and |\Mathrm|, which sounds weird if they are to acquire distinct meanings. - So since |1.3za| both will exist. In the default package configuration + So since \mstrelease{1.3za} both will exist. In the default package configuration |\mathrm| is configured to expand to |\Mathrm| (with some extra behavior under LGRgreek+), and with this option or the defaultrm option |\mathrm| is kept with its original meaning (and the LGRgreek+ extras do not work).\par \end{footnotesize} -\item \RLNote{changed:}{1.3za}\mstopt{defaultnormal}, \mstopt{defaultrm}, +\item \RLNote{changed:}{\mstrelease{1.3za}}\mstopt{defaultnormal}, \mstopt{defaultrm}, \mstopt{defaultbf}, \mstopt{defaultit}, \mstopt{defaultsf}, \mstopt{defaulttt}: tell \mst to not set up, respectively, the \cs{mathnormal}, \cs{mathrm}, \cs{mathbf}, \cs{mathit}, \cs{mathsf}, and @@ -5524,11 +5305,11 @@ actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par} always via \cs{Mathnormal}, \cs{Mathrm}, \cs{Mathbf}, \cs{Mathit}, etc... \begin{footnotesize} - Prior to |1.3za| these options also prevented the creation of the + Prior to \mstrelease{1.3za} these options also prevented the creation of the corresponding \mst command with an uppercased initial.\par \end{footnotesize} -\item \mstopt{ncccomma}:\RightNote{1.3x} it triggers the loading of the +\item \mstopt{ncccomma}:\RightNote{\mstrelease{1.3y}} it triggers the loading of the \ctanpkg{ncccomma} package% % \footnote{Alexander I. \textsc{Rozhenko}, \emph{Use comma as decimal @@ -5553,8 +5334,8 @@ those parts of the document using another language than French.% reenact it. For background on this issue see \url{https://github.com/latex3/babel/issues/190}. - This does not apply to \ctanpkg{decimalcomma} |1.3| or later.} -\item \mstopt{decimalcomma}:\RightNote{1.3zb} it triggers the loading of the + This does not apply to \ctanpkg{decimalcomma} \mstrelease{1.3} or later.} +\item \mstopt{decimalcomma}:\RightNote{\mstrelease{1.3zb}} it triggers the loading of the \ctanpkg{decimalcomma} package% % \footnote{Antoine \textsc{Missier}, \emph{Comma for decimal numbers}, @@ -5565,7 +5346,7 @@ The same remarks apply as for the ncccomma option. In particular \emph{note \emph{\texttt{decimalcomma}}, the correct way is to use the eponymous option.} -\item \mstopt{binarysemicolon}:\RightNote{1.3x} sets (except if +\item \mstopt{binarysemicolon}:\RightNote{\mstrelease{1.3y}} sets (except if \blueit{nopunctuation} is used) the semi-colon to let \TeX\ use spacing of binary type, not punctuation type, around the semi-colon (it is often used in French mathematical typesetting as separator in @@ -5575,12 +5356,12 @@ The same remarks apply as for the ncccomma option. In particular \emph{note The effect applies to all math versions, even the \emph{normal} and \emph{bold} math versions with \mst having been loaded with the \blueit{subdued} option. -\item \mstopt{frenchmath*}:\RLNote{CHANGED!}{1.3zb} does all three of \blueit{frenchmath}, +\item \mstopt{frenchmath*}:\RLNote{CHANGED!}{\mstrelease{1.3zb}} does all three of \blueit{frenchmath}, \blueit{decimalcomma} and \blueit{binarysemicolon}. \begin{footnotesize} - Prior to |1.3zb|, this option did what is now available via frenchmath+. - The |1.3zb| + Prior to \mstrelease{1.3zb}, this option did what is now available via frenchmath+. + The \mstrelease{1.3zb} change was made as a follow-up consecutive to the |2.7| release \ctanpkg{frenchmath}. Indeed this option as explained in \autoref{ssec:frenchmath} is provided as a compatiblity layer with \ctanpkg{frenchmath}, and it was mandatory to @@ -5588,20 +5369,75 @@ The same remarks apply as for the ncccomma option. In particular \emph{note consecutive to the internal change of \ctanpkg{frenchmath} at its |2.7| release to use \ctanpkg{decimalcomma}.\par \end{footnotesize} -\item \mstopt{frenchmath+}:\RightNote{1.3zb} does all three of \blueit{frenchmath}, +\item \mstopt{frenchmath+}:\RightNote{\mstrelease{1.3zb}} does all three of \blueit{frenchmath}, \blueit{ncccomma} and \blueit{binarysemicolon}. This is what used to be - called frenchmath* prior to |1.3zb|. + called frenchmath* prior to \mstrelease{1.3zb}. \item \mstopt{endash}, \mstopt{emdash}: use the text font en-dash (\textendash) or even the em-dash (\textemdash, but this seems crazy) for the minus sign rather than {}-{}. endash option is default for the package. -\item \mstopt{unicodeminus}:\RightNote{1.3q} use the |MINUS SIGN U+2212| (requires +\item \mstopt{unicodeminus}:\RightNote{\mstrelease{1.3q}} use the |MINUS SIGN U+2212| (requires \ctanpkg{fontspec}.) Or, in the form |unicodeminus=HHHH| with four \emph{uppercased} hexadecimal digits: use the |U+HHHH| code point. As noendash really means ``use the hyphen from the text font'', unicodeminus remains without effect under it, or, naturally, under nominus. Without this option, \mst uses the |EN DASH U+2013| by default for OpenType fonts. -\item \mstopt{asterisk}: use the text font (or the Symbol font) asterisk in math mode. -\item \mstopt{nohbar}: prevents \mst from defining its own +\item \mstopt{asterisk}: this tells \mst to replace the binary math operator $*$ + and the control sequence \cs{ast} with versions which uses the text asterisk + * suitably lowered, and with the correct spaces around it as binary + operator. The amount of lowering% +% +\footnote{With the option + \texttt{symbolmisc}, the asterisk is picked from the Symbol font, and the + amount of lowering is non-customizable; however if a math alphabet command + is used, the asterisk is then again from a text font and the lowering will + be as specified by \cs{MTlowerast}.} +% + is decided by the mandatory argument to the command + \csb{MTlowerast}\marg{dimen}. The package does + \cs{MTlowerast}|{.3\height}|. Using the |ex| unit as in + \cs{MTlowerast}|{.5ex}| is not a good idea as it does not scale properly in + the script and scriptscript styles. + + Attention that if using this option, inputs such as |$R^*$| or |$R^\ast$| + raise errors and \emph{must} be replaced by |$R^{*}$|, respectively + |$R^{\ast}$|. The $*$ is now `mathematically active'\thinspace% +% +\footnote{In + a hopefully safe way, for example {\ttfamily\$\string\label\{eq*1\}\$} is + ok.} +% + and |*| and |\ast| will obey the math alphabet + commands (see \autoref{sec:mathxx}). + +\item \mstopt{activedigits}:\RLNote{new:}{\mstrelease{1.4}} + it makes all digits mathematically active! This is + reserved to expert \LaTeX{} users. See \autoref{ssec:hackingletters} for an + example. Do not use this option if you don't intend to make use of such + techniques to achieve special effects at some location of your document at + least. (I know this goes without saying, but passing this option and not + using it is only adding overhead to all your equations with digits). + +\item \mstopt{nodigits}: no \mst-ification of digits. +\item \mstopt{noletters}:\RLNote{new:}{\mstrelease{1.4b}} + This is quite antithetical to the package core aim, but here you go. + + \begin{footnotesize} + This option implies nohbar and defaultimath. + + Note though that \mst will still declare to \LaTeX{} two extra symbol + fonts and define alphabet commands such as \Mathrm, \Mathnormal and + \mathnormalbold which map to them. But ascii letters will if not in + arguments of these commands not use the \mst-font and all business of + active letters (see \autoref{ssec:hackingletters}) is now irrevocably + inaccessible. + + If you simply want to avoid the overhead of math active + letters, use rather \MTmathstandardletters in the preamble after having + loaded the package (although this does not undo the fact that \mst will + have redefined what a letter does if it is catcode active but that remark + should have been made in an even smaller typeface).\par + \end{footnotesize} + \item \mstopt{nohbar}: prevents \mst from defining its own \cs{hbar}. \item \mstopt{noendash}: the minus sign will be the - from the text font, not the en-dash \textendash. @@ -5616,7 +5452,7 @@ The same remarks apply as for the ncccomma option. In particular \emph{note \ \mstopt{nopunctuation} ,\,.\,:\,;\ \mstopt{noplus}, \mstopt{nominus}, \mstopt{noplusnominus}\ +\,\textendash{} \mstopt{noequal} =\ \mstopt{noparenthesis} (\,)\,[\,]\,/\ \mstopt{nospecials} -\#\,\$\,\%\,\&\ and \mstopt{nodigits}. +\#\,\$\,\%\,\&\ (and nodigits and noletters mentioned earlier). \item \mstopt{alldelims}: true by default, means that the characters excluded by nolessnomore are treated. Use this option in case of a mono-width @@ -5690,7 +5526,7 @@ Euler font. declared |\alphaup|, |\alphait|, ...., and the associated \mathgreekup and \mathgreekit commands to access the underlying fonts, and also since - |1.3za| \mathgreekupbold and \mathgreekitbold. + \mstrelease{1.3za} \mathgreekupbold and \mathgreekitbold. The font used by these math alphabet commands in the subdued ``normal'' and ``bold'' is either @@ -5699,7 +5535,7 @@ Euler font. \MTgreekfont when the command \Mathastext (without optional argument) was used in the preamble. - |1.3za| fixes here a bug which froze the target font to be + \mstrelease{1.3za} fixes here a bug which froze the target font to be the one at time of loading the package: this bug applied (only) to the subdued ``normal'' and ``bold'' math versions and was not readily visible as there is a priori no reason to @@ -5716,7 +5552,7 @@ Euler font. LGRgreek and then \MTgreekfont manually appropriately. \item \mstopt{LGRgreek+} and - \mstopt{LGRgreeks+}:\RightNote{1.3za} they extend + \mstopt{LGRgreeks+}:\RightNote{\mstrelease{1.3za}} they extend respectively LGRgreek or LGRgreeks to let Greek letters control sequences when in the scope of \mathrm, \mathit, and \mathbf behave as would be expected by LaTeX users who @@ -5747,7 +5583,7 @@ Euler font. accents. As in vanilla \LaTeX{}, they are taken from the font for the digits and \cs{log}-like names. Obey the alphabet changing commands. - \item \mstopt{unimathaccents}:\RightNote{1.3u} extends |mathaccents| to + \item \mstopt{unimathaccents}:\RightNote{\mstrelease{1.3u}} extends |mathaccents| to OpenType fonts. Gave bad results in my brief testing. \item \mstopt{defaultimath}: do not overwrite \cs{imath} and \cs{jmath} to use \cs{inodot} and \cs{jnodot}. @@ -5756,7 +5592,29 @@ OpenType fonts. Gave bad results in my brief testing. \item \mstopt{fouriervec}: provides a \cs{fouriervec} command. The user can then add in the preamble \cs{let}\cs{vec}$=$\cs{fouriervec}. There is also always available a ``poor man'' vec accent \cs{pmvec} for upright letters. - \end{enumerate} +\item \mstopt{everymath}:\RLNote{new:}{\mstrelease{1.4}} this option tells + \mst to employ as in the \mstrelease{1.3} releases the + \cs{everymath}/\cs{everydisplay} registers to store certain actions to be + executed at each entrance into math mode. The main change with + \mstrelease{1.4} is that mathcode changes done by user (or possibly via + language changes in a multilingual \ctanpkg{babel} context) in the document + body, and which apply to those characters which \mst used to handle as part of + \cs{everymath}/\cs{everydisplay}, will now have an effect, whereas with + earlier releases or this one + with the everymath option, they may get overruled by \mst. Use + everymath for backward compatibility if needed (and \emph{only} if needed). + Notice though that regarding ascii letters, there is no return to the + pre-\mstrelease{1.4}: they will not acquire their mathcode active status only + at each entrance into math mode, even with this option, + but once and for all at package loading time, if not subdued, or when using + \MTversion to enter a non-subdued math version. + + Please report breakages due to the \mstrelease{1.4} release, which made it + necessary for you to use this option everymath as workaround. + + The option is destined to be removed at next major release and it will warn + the user about this. +\end{enumerate} Thanks to Kevin~\textsc{Klement}, Tariq~\textsc{Perwez} and Ricard~\textsc{Torres} for sending bug reports and feature requests when @@ -5780,6 +5638,7 @@ Numerous examples will be found there:\\ \label{sec:changelog} \begingroup +\hyphenation{Lua-La-TeX} \def\MacroFont{\footnotesize\normalfont} % utilis par verbatim en classe scrdoc (ou plutt shortvrb) @@ -5817,16 +5676,27 @@ Numerous examples will be found there:\\ \lccode`\~`1 \lowercase{\endgroup\def~}{\ifvmode\medskip\expandafter\@DTXLOGhelper\fi 1} +% 2024/07/10 hypertargets pour \mstrelease (import de etoc, et j'ai dj ici +% toute une infrastructure rendant le truc trivial avec un fol 1 actif). Par +% contre j'ai fait une modification s/#1\[/#1 \[/ car le #1 avant se terminait +% par un espace.\]\] +% Et attention au detokenize... +% Il y a juste un problme avec le cas "1.15f and 1.15g". \begingroup \catcode`\| 0 \catcode`\\ 12 -|long|gdef|@DTXLOGhelper #1 ----#2|par{|@@DTXLOGhelper #1\[\]|par} -|long|gdef|@@DTXLOGhelper #1\[#2\]#3|par% - {|textbf{#1}% le #1 ici contient un espace +% Je rduis --- ici. +|long|gdef|@DTXLOGhelper #1 ---#2|par{|@@DTXLOGhelper #1 \[\]|par} +|long|gdef|@@DTXLOGhelper #1 \[#2\]#3|par% + {|hypertarget{|detokenize|expandafter{|fixonexv#1 and|relax}}{|textbf{#1}} % |ifx|relax #2|relax|else [#2]|fi |par|nopagebreak} |endgroup +% uniquement pour s'occuper de "1.15f and 1.15g" et en profitant du fait qu'il +% n'y a de rfrence 1.15g nulle part. +\def\fixonexv#1 and#2\relax{#1} + \catcode`-=\active \def-{% \catcode`M\active @@ -5869,7 +5739,7 @@ Numerous examples will be found there:\\ \StopEventually{\end{document}\endinput} \cleardoublepage -\newgeometry{hmarginratio=3:2} +\newgeometry{hmarginratio=2:1} \small \section{Implementation} @@ -5884,27 +5754,44 @@ Numerous examples will be found there:\\ % %</dtx> %<*package> -% The usual catcode regime for letters and digits is assumed and some characters -% such as |*|, |`|, |"|, |=| are supposed to be of catcode other at the time of loading -% of \mst. The source of \mst takes precautions for some other characters such -% as the right quote |'|, which may thus be active with no harm at the time of -% loading. By the way, I think \LaTeX2e should have provided to authors a +% The comments are a kind of palimpsest. Indeed they are not destined to the +% reader but to the author: when coming back to the source code perhaps years +% after having last looked at it, all bits of past information even if +% obsolete are useful. Not only comments but perhaps also some ancient parts +% of the code itself are a bit strange (the author hardly new any \LaTeX{} at +% that time). +% +% For about the same reason, there may be some long macro names which do not +% fit in the margins and that one sees only partially. The author sometimes +% has used a workaround to hyphenate, but not systematically. Life is +% time-limited. At \mstrelease{1.4} large chunks of code have been re-ordered +% but the global architecture is still somewhat of a mess and doing some such +% large diffs makes it sometimes difficult to follow small bits of code across +% commit history, so this is done reluctantly. +% +% The usual catcode regime for letters and digits is assumed and some +% characters such as |*|, |`|, |"|, |=| are supposed to be of catcode other at +% the time of loading of \mst. The source of \mst takes precautions for some +% other characters such as the right quote |'|, which may thus be active with +% no harm at the time of loading (note added |2024/07/16|: very hard to +% understand why I was so paranoid, but I have kept this annoying constraint). +% +% By the way, I think \LaTeX2e should have provided to authors a % standard macro to be used at the beginning of a style file to make sure the % catcodes are standard. Shorthands created by Babel should be mostly no problem % as Babel does the activation only at the |\begin{document}|. % -% The comments have been accumulating through successive versions with only -% partial efforts to achieve some sort of coherence; as a result some are a -% bit strange or obsolete to various degrees. And the similar remark -% applies to some ancient parts of the code itself! -% -% Should I require |2005/12/01| \LaTeX? (not sure about the month). +% \mstrelease{1.4} removes a few code branches still there for support to +% old \LaTeX{} and requires \LaTeX{} |2020-02-02| (which made |\{| and |\}| +% \cs{protected}; earlier release |2019-10-01| had math macros such as the +% math accents and \cs{hbar} robust and so far we kept supporting both new and +% old contexts). % \begin{macrocode} -\NeedsTeXFormat{LaTeX2e} +\NeedsTeXFormat{LaTeX2e}[2020/02/02] \ProvidesPackage {mathastext} - [2023/12/29 v1.3zb Use the text font in math mode (JFB)] + [2024/07/27 v1.4b Use the text font in math mode (JFB)] % \end{macrocode} -% |1.3zb| avoids writing \mst info messages also to console output, only log file. +% \mstrelease{1.3zb} avoids writing \mst info messages also to console output, only log file. % Make prefix occupy 20 not 25 characters for alignment with \texttt{LaTeX Font Info}, % as the latter often issues info messages. For similar reason the usages of % \cs{PackageInfo} will be done with empty lines above and below for better visual @@ -5915,16 +5802,9 @@ Numerous examples will be found there:\\ \immediate\write\m@ne{} \PackageInfo{mathastext}{Starting the math mode configuration\@gobble} % \end{macrocode} -% \LaTeX{} |2019-10-01| release has made robust math macros such as the math -% accents and \cs{hbar}. -% \begin{macrocode} -\newif\ifmst@robust@obsessed@LaTeX@era -\@ifl@t@r\fmtversion{2019/10/01}{\mst@robust@obsessed@LaTeX@eratrue}{} -\edef\mst@robustifyingspace{\ifmst@robust@obsessed@LaTeX@era\space\fi} -% \end{macrocode} % Testing for \XeTeX\ and \LuaLaTeX. % -% |1.3g 2015/10/15|: update for the naming of primitives, the situation has +% \mstrelease{1.3g} |2015/10/15|: update for the naming of primitives, the situation has % evolved both on \XeTeX\ side and on the \LuaLaTeX\ side (LaTeX base % |2015/10/01|): I was told "U" named math primitives were always available % for \LuaLaTeX. For \XeTeX, the XeTeX prefix got replaced by U prefix with @@ -5967,10 +5847,37 @@ Numerous examples will be found there:\\ \ifmst@LuaTeX\mst@XeOrLuatrue\fi \ifmst@XeTeX \mst@XeOrLuatrue\fi % \end{macrocode} -% |1.2|: all inner macros of \mst now starts with |\mst@| for a cleaner +% \mstrelease{1.4}. I only checked this is correct with TL2024. +% The macro will be used with |#1| a catcode 11 or 12 token or a one character +% control sequence such as |\#|. +% \begin{macrocode} +\ifmst@XeTeX + \def\mst@OnlyIfNotMathActive#1{% + \ifnum\mst@Umathcodenum`#1="1FFFFF + \expandafter\@gobble + \else\expandafter\@firstofone + \fi + } +\else\ifmst@LuaTeX + \def\mst@OnlyIfNotMathActive#1{% + \ifnum\mst@Umathcodenum`#1="1000000 + \expandafter\@gobble + \else\expandafter\@firstofone + \fi + } +\else + \def\mst@OnlyIfNotMathActive#1{% + \ifnum\mathcode`#1="8000 + \expandafter\@gobble + \else\expandafter\@firstofone + \fi + } +\fi\fi +% \end{macrocode} +% \mstrelease{1.2}: all inner macros of \mst now starts with |\mst@| for a cleaner % name-space. % -% |1.3l 2016/01/29|: hmmm... at this late stage where nobody would expect me +% \mstrelease{1.3l} |2016/01/29|: hmmm... at this late stage where nobody would expect me % to still look at the code, I have found at least two macros which still % didn't: \cs{do@the@endashstuff} and \cs{do@the@emdashstuff}. % @@ -5980,16 +5887,16 @@ Numerous examples will be found there:\\ % engines for a while, hence it is not hard to adapt to the replacement of % |EU1/EU2| by |TU|, maintaining compatibility with legacy installations. % +% At \mstrelease{1.4} the support for obsolete |EU1| and |EU2| font encodings +% has been removed. +% % \begin{macro}{\mst@OneifUniEnc} % The \cs{mst@OneifUniEnc} is expandable but must be used after % having set \cs{mst@tmp@enc}... % \begin{macrocode} \def\mst@oti{OT1} -\def\mst@eui{EU1}\def\mst@euii{EU2}\def\mst@tu{TU} -\def\mst@OneifUniEnc {% - \ifx \mst@tmp@enc\mst@tu 1\else - \ifx \mst@tmp@enc\mst@eui 1\else - \ifx \mst@tmp@enc\mst@euii 1\else 0\fi\fi\fi } +\def\mst@tu{TU} +\def\mst@OneifUniEnc{\ifx\mst@tmp@enc\mst@tu1\else0\fi} \newif\ifmst@goahead \newif\ifmst@abort % \end{macrocode} @@ -6006,9 +5913,13 @@ Numerous examples will be found there:\\ \def\mst@enc{\encodingdefault} \def\mst@fam{\familydefault} \def\mst@ser{\seriesdefault} - \def\mst@opsh{\shapedefault} %% will be default shape for operator names +% \end{macrocode} +% \noindent\cs{mst@opsh} will hold default shape for operator names.\newline +% \cs{mst@ltsh} will hold default shape for letters. +% \begin{macrocode} + \def\mst@opsh{\shapedefault} \def\mst@bold{\bfdefault} - \def\mst@ltsh{\shapedefault} %% will be default shape for letters + \def\mst@ltsh{\shapedefault} % \end{macrocode} % \end{macro} % \end{macro} @@ -6017,7 +5928,7 @@ Numerous examples will be found there:\\ % \end{macro} % \end{macro} % \begin{macro}{\mst@greekfont} -% |1.15c|: for use by the LGRgreek and selfGreek options. Defined as +% \mstrelease{1.15c}: for use by the LGRgreek and selfGreek options. Defined as % an \cs{edef} in order to be able to set-up once and for all the % Greek at the time of \cs{usepackage}. Modifiable in the preamble % via \cs{MTgreekfont}\marg{font\_name}\cs{Mathastext}. @@ -6026,20 +5937,24 @@ Numerous examples will be found there:\\ % \end{macrocode} % \end{macro} % \begin{macro}{Package options} -% |2011/03/09|: |1.13| introduces the option LGRgreek and systematic use +% |2011/03/09|: \mstrelease{1.13} introduces the option LGRgreek and systematic use % of \cs{if...} conditionals, for better readability (by myself) of % the code. % -% |1.3x| of |2022/11/03| adds |ncccomma|, |binarysemicolon| and +% \mstrelease{1.3y} of |2022/11/03| adds |ncccomma|, |binarysemicolon| and % |frenchmath*| options. % -% |1.3za| adds |LGRgreek+| and |LGRgreeks+|. +% \mstrelease{1.3za} adds |LGRgreek+| and |LGRgreeks+|. % -% |1.3zb| adds |decimalcomma| and modifies |frenchmath*| to use it. And -% provides |frenchmath+| as an alias to former |frenchmath*|. Consecutive -% to the change at |2.7| of \ctanpkg{frenchmath} which replaced +% \mstrelease{1.3zb} adds |decimalcomma| and modifies |frenchmath*| to use +% it. And provides |frenchmath+| as an alias to former |frenchmath*|. +% Consecutive to the change at |v2.7| of \ctanpkg{frenchmath} which replaced % \ctanpkg{ncccomma} by \ctanpkg{decimalcomma} and broke the compatibility % recipe explained in \autoref{ssec:frenchmath}. +% +% \mstrelease{1.4} adds options |everymath| and |activedigits|. +% +% \mstrelease{1.4b} adds |noletters|. % \begin{macrocode} \newif\ifmst@italic \newif\ifmst@frenchmath @@ -6082,25 +5997,32 @@ Numerous examples will be found there:\\ \newif\ifmst@noexclam \DeclareOption{noexclam}{\mst@noexclamtrue} \newif\ifmst@asterisk - \DeclareOption{noasterisk}{\PackageWarningNoLine{mathastext} - {option `noasterisk\string' is deprecated.^^J\space\space\space - Check the documentation}} \DeclareOption{asterisk}{\mst@asterisktrue} \newif\ifmst@nospecials \DeclareOption{nospecials}{\mst@nospecialstrue} -\newif\ifmst@basic % 1.3 to avoid unnecessary patch of amsmath \newmcodes@ +\newif\ifmst@basic \DeclareOption{basic}{\mst@basictrue \ExecuteOptions{noparenthesis,nopunctuation,% noplusnominus,noequal,noexclam,nospecials,nolessnomore}} \newif\ifmst@nohbar \DeclareOption{nohbar}{\mst@nohbartrue} +% \end{macrocode} +% \mstrelease{1.4} adds option |activedigits|. +% \begin{macrocode} +\newif\ifmst@activedigits + \DeclareOption{activedigits}{\mst@activedigitstrue} \newif\ifmst@nodigits \DeclareOption{nodigits}{\mst@nodigitstrue} \newif\ifmst@defaultimath \DeclareOption{defaultimath}{\mst@defaultimathtrue} +% \end{macrocode} +% \mstrelease{1.4b} adds option |noletters|. +% \begin{macrocode} +\newif\ifmst@noletters + \DeclareOption{noletters}{\mst@noletterstrue\ExecuteOptions{nohbar,defaultimath}} \newif\ifmst@mathaccents \DeclareOption{mathaccents}{\mst@mathaccentstrue} -\newif\ifmst@unimathaccents % 1.3u +\newif\ifmst@unimathaccents \DeclareOption{unimathaccents}{\mst@mathaccentstrue\mst@unimathaccentstrue} \newif\ifmst@needsymbol \newif\ifmst@symboldelimiters @@ -6108,7 +6030,7 @@ Numerous examples will be found there:\\ \newif\ifmst@symboldigits \DeclareOption{symboldigits}{\mst@needsymboltrue\mst@symboldigitstrue} \newif\ifmst@symbolgreek -\newif\ifmst@customgreek %% new with 1.3d +\newif\ifmst@customgreek \DeclareOption{symbolgreek}{\mst@needsymboltrue\mst@symbolgreektrue \mst@customgreektrue } \newif\ifmst@symbolre @@ -6144,13 +6066,13 @@ Numerous examples will be found there:\\ \DeclareOption{itGreek}{\def\mst@greek@select{1}} \DeclareOption{upGreek}{\def\mst@greek@select{2}} % \end{macrocode} -% Starting with |1.15f| the meaning of the `defaultxx' options has changed. They +% Starting with \mstrelease{1.15f} the meaning of the `defaultxx' options has changed. They % now prevent |mathastext| from defining additional alphabets rather than % prevent it from identifying the `mathxx' with the new `Mathxx'. The % `Mathnormal' and `Mathrm' alphabet commands are always created as they are % SymbolFontAlphabets. % -% This was again changed at |1.3za|. The additional alphabets are +% This was again changed at \mstrelease{1.3za}. The additional alphabets are % always declared, the options only prevent mapping the existing % `mathxx' to the new `Mathxx'. This may be breaking change if % people used these options because they had a need for the @@ -6169,7 +6091,7 @@ Numerous examples will be found there:\\ \newif\ifmst@defaulttt \DeclareOption{defaulttt}{\mst@defaulttttrue} % \end{macrocode} -% Here and elsewhere |1.3za| has removed an +% Here and elsewhere \mstrelease{1.3za} has removed an % \cs{ifmst@nonormalbold} conditional. % \begin{macrocode} \DeclareOption{defaultalphabets}{\ExecuteOptions{defaultnormal,defaultrm,% @@ -6185,14 +6107,25 @@ defaultbf,defaultit,defaultsf,defaulttt}} \newif\ifmst@fouriervec \DeclareOption{fouriervec}{\mst@fouriervectrue} % \end{macrocode} -% |1.15|: the subdued option. +% \mstrelease{1.15}: the |subdued| option. % \begin{macrocode} \newif\ifmst@subdued \DeclareOption{subdued}{\mst@subduedtrue} % \end{macrocode} -% |1.3q|: the unicode option. Thanks to Tobias~\textsc{Brink} for suggesting its -% incorporation. The parsing of |\CurrentOption| does not seek any robustness, -% it just does its job if the option is used correctly. +% \mstrelease{1.4}: the |everymath| option. +% \begin{macrocode} +\newif\ifmst@everymath + \DeclareOption{everymath}{\mst@everymathtrue +\PackageWarningNoLine{mathastext}{% + `everymath\string' will be removed at next major release.\MessageBreak + Please report to the author the circumstances\MessageBreak + which mandated its use in the present document}% +} +% \end{macrocode} +% \mstrelease{1.3q}: the |unicode| option. Thanks to Tobias~\textsc{Brink} +% for suggesting its incorporation. The parsing of \cs{CurrentOption} does +% not seek any robustness, it just does its job if the option is used +% correctly. % \begin{macrocode} \def\mst@unicodeminus {2013} \def\mst@checkoption #1unicodeminus#2\mst@#3\mst@@ @@ -6216,7 +6149,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % % This broke usage of \cs{Mathastext} macro in preamble. % -% |1.3w| works around this via \cs{mst@DeclareMathAccent}. And other +% \mstrelease{1.3w} works around this via \cs{mst@DeclareMathAccent}. And other % changes were made in \mst code to cope with these complications around % robustness. % \begin{macrocode} @@ -6226,13 +6159,36 @@ defaultbf,defaultit,defaultsf,defaulttt}} \DeclareMathAccent{#1}} % \end{macrocode} % \end{macro} +% \begin{macro}{\mst@normalversionname} +% \begin{macro}{\mst@boldversionname} % Helper macros to test math version names. User is not allowed to redefine % via \cs{Mathastext} with optional argument or via \cs{MTDeclareVersion} the -% |normal| and |bold| math versions! Added at |1.3w|, about 7 years late. +% |normal| and |bold| math versions. Added at \mstrelease{1.3w}, about 7 years late. % \begin{macrocode} \def\mst@normalversionname{normal}% \def\mst@boldversionname{bold}% % \end{macrocode} +% \end{macro}\end{macro} +% \begin{macro}{\mst@OnlyIfNotSubdued} +% \mstrelease{1.3u} adds this check that we are not in a subdued normal or +% bold math version. We do not push the |#1| out of the TeX conditionals, +% and anyhow there was no real need for expandable coding. +% \begin{macrocode} +\def\mst@OnlyIfNotSubdued#1{% + \ifmst@subdued + \ifx\math@version\mst@normalversionname + \else + \ifx\math@version\mst@boldversionname + \else + #1% + \fi + \fi + \else + #1% + \fi +}% +% \end{macrocode} +% \end{macro} % \begin{macro}{\exists} \begin{macro}{\mst@exists@skip} % \begin{macro}{\forall} \begin{macro}{\mst@forall@skip} % \begin{macro}{\MTnormalexists} @@ -6240,7 +6196,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macro}{\MTnormalforall} % \begin{macro}{\MTforalldoesskip } % -% |1.15e| |2012/10/21|: math skip/glue \emph{after} \cs{exists} and +% \mstrelease{1.15e} |2012/10/21|: math skip/glue \emph{after} \cs{exists} and % \cs{forall}, this is useful with upright letters in math mode. % Each math version has its own user defined values for the skips, % stored as macros. The redefinitions of $\exists$ and $\forall$ are @@ -6249,32 +6205,32 @@ defaultbf,defaultit,defaultsf,defaulttt}} % % The subdued option (later and only for the normal and bold math % version) and the italic option (here) set to zero the package -% default skips. With |1.2| the skips can be modified on the fly in +% default skips. With \mstrelease{1.2} the skips can be modified on the fly in % the document, they are not necessarily set in the preamble once % and for all for each math version. % -% |1.3j| adds \cs{MTnormalexists}, \cs{MTexistsdoesskip}, +% \mstrelease{1.3j} adds \cs{MTnormalexists}, \cs{MTexistsdoesskip}, % \cs{MTnormalforall}, \cs{MTforalldoesskip}. % -% Earlier to |1.3j|, |\let\mst@exists@original\exists| was done at End of +% Earlier to \mstrelease{1.3j}, |\let\mst@exists@original\exists| was done at End of % Package, now it is done at Begin Document, and same for |\forall|. We % pay attention that use of \cs{MTnormalexists} etc... inside the % preamble does not create self-let's. % % Also |subdued| mode will do \cs{MTnormalexists}, \cs{MTnormalforall} -% (earlier than |1.3j|, it only set the muskips to |0mu|.) Same when +% (earlier than \mstrelease{1.3j}, it only set the muskips to |0mu|.) Same when % using |\MTversion{normal}|, if |subdued|. % % For some (random, legacy) reason, the handling of $\exists$ and % $\forall$ is part of the things % not included inside |\everymath/\everydisplay|. % -% |1.3v| The \mst-defined \cs{exists} and \cs{forall} are created +% \mstrelease{1.3v} The \mst-defined \cs{exists} and \cs{forall} are created % \cs{protected}. We feel this matches better with their default % definition as \cs{mathchardef} tokens than dealing with \LaTeX2e robust % macros. Besides, the coding is simpler. % \begin{macrocode} -\newmuskip\mst@exists@muskip %% v 1.15e +\newmuskip\mst@exists@muskip \newmuskip\mst@forall@muskip \def\mst@exists@skip{1mu} \def\mst@forall@skip{.6667mu} @@ -6318,13 +6274,13 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macro}{\MTnormalprime} % \begin{macro}{\MTprimedoesskip} % -% |1.2| |2012/12/17|: math skip/glue \emph{before} the \cs{prime} +% \mstrelease{1.2} |2012/12/17|: math skip/glue \emph{before} the \cs{prime} % glyph. This is useful with the default CM glyph and upright letters % (in contrast the prime from |txfonts| works fine with upright % letters). For this we replace the \LaTeX{} kernel \cs{active@math@prime} % with our own skip-enhanced version \cs{mst@active@math@prime}. % -% |1.2b| |2012/12/31|: doing\\ +% \mstrelease{1.2b} |2012/12/31|: doing\\ % \null\hspace{1cm}|{\catcode`\'=\active \global\let'\mst@active@math@prime}|\\ % is awfully wrong when the right quote is made active at begin document by % some other package (as happens with |babel| for some languages). So \mst @@ -6340,47 +6296,102 @@ defaultbf,defaultit,defaultsf,defaulttt}} % does its job only as part of the \cs{everymath} and % \cs{everydisplay} token lists. % -% |1.2e| being paranoid, we take precautions against a possibly +% \mstrelease{1.2e} being paranoid, we take precautions against a possibly % catcode active right quote at % the time of loading mathastext. % -% |1.3i| adds \cs{MTactiveprime}. +% \mstrelease{1.3i} adds \cs{MTactiveprime}. % -% |1.3j| renames it to \cs{MTprimedoesskip}. Besides, it makes use in the -% preamble of \cs{MTnormalprime} or \cs{MTprimedoesskip}. +% \mstrelease{1.3j} renames it to \cs{MTprimedoesskip}. Besides, it makes use in the +% preamble of \cs{MTnormalprime} or \cs{MTprimedoesskip}. +% +% \mstrelease{1.4} adds the support for the new ``non-everymath'' +% implementation, which has to satisfy to very different constraints. +% +% The \cs{MTprimedoesskip} is not a |no-op| in |subdued| math version. +% This is legacy situation, not changed at \mstrelease{1.4}. +% % \begin{macrocode} -\newmuskip\mst@prime@muskip %% v 1.2 +\newmuskip\mst@prime@muskip \def\mst@prime@skip{.5mu} \ifmst@italic\ifmst@frenchmath\else\def\mst@prime@skip{0mu}\fi\fi +% \end{macrocode} +% Shouldn't I have rather hacked \cs{prim@s}? (answer: perhaps related to +% Babel see a comment above).\par +% \noindent +% TODO: clarify why I used \cs{sp} not |^| in +% \cs{mst@active@math@prime} in 2012/2013.\newline +% TODO: clarify why I am paranoid regarding the |'| catcode here. +% +% The |everymath| branch was initially superficially refactored at +% \mstrelease{1.4}, but unfortunately as \cs{mst@mathactivate} had been +% modified to not handle mathematically active characters, this meant that the +% \mst feature of extra math skip was lost under the |everymath| option, due to +% an oversight by the author. For this among other reasons having mainly to +% do with code comments we did \mstrelease{1.4a}. +% +% At \mstrelease{1.4} we can not go via \cs{mst@mathactivate} (defined further +% down in the code) which filters out the already mathematically active +% characters. +% +% Why am I paranoid here about |'| catcode at package loading time? (this +% looks ridiculous...). +% \begin{macrocode} +\def\mst@tmp#1{% +\def\mst@mathactivateprime{% + \ifnum\catcode`#1=\active + \@ifundefined{active@char#1} + {} + {\mst@do@activecase #1{}{\mst@active@math@prime}}% + \else + \mst@@mathactivate #1{}{\mst@active@math@prime}% + \fi +}% +% \end{macrocode} +% The ``undo'' is needed at \mstrelease{1.4} (but not if |everymath|). +% \begin{macrocode} +\def\mst@undo@mathactivateprime{\mst@mathdeactivate#1{"8000}}% +}\expandafter\mst@tmp\string' \def\mst@active@math@prime{\sp\bgroup\mskip\mst@prime@muskip\prim@s} -{\catcode`\'=12 -\gdef\mst@@modifyprime{\mst@mathactivate'{}\mst@active@math@prime}} -\newcommand*\MTnormalprime {\let\mst@modifyprime\@empty } -\newcommand*\MTprimedoesskip {\let\mst@modifyprime\mst@@modifyprime} -\ifmst@subdued - \MTnormalprime +\ifmst@everymath + \newcommand*\MTnormalprime {\let\mst@modifyprime\@empty} + \newcommand*\MTprimedoesskip{\let\mst@modifyprime\mst@mathactivateprime}% + \AtBeginDocument{% + \everymath\expandafter + {\the\everymath \mst@modifyprime \MTnormalprime}% + \everydisplay\expandafter + {\the\everydisplay \mst@modifyprime \MTnormalprime}% +% \end{macrocode} +% MEMO: |subdued| case will do its own \cs{MTnormalprime} at +% |\begin{document}| later as part of \cs{MTeverymathoff}. +% \begin{macrocode} + \MTprimedoesskip + } \else - \MTprimedoesskip +% \end{macrocode} +% \mstrelease{1.4} must do things a bit differently. +% \begin{macrocode} + \newcommand*\MTnormalprime {\mst@undo@mathactivateprime} + \newcommand*\MTprimedoesskip{\mst@mathactivateprime} +% \end{macrocode} +% MEMO: |subdued| case will do its own \cs{MTnormalprime} at +% |\begin{document}| later as part of \cs{MTeverymathoff}. +% \begin{macrocode} + \AtBeginDocument{\MTprimedoesskip} \fi -\AtBeginDocument{% - \everymath\expandafter - {\the\everymath \mst@modifyprime \MTnormalprime}% - \everydisplay\expandafter - {\the\everydisplay \mst@modifyprime \MTnormalprime}% -} % \end{macrocode} % \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} % \begin{macro}{\MTexistsskip} % \begin{macro}{\MTforallskip} % \begin{macro}{\MTprimeskip} -% |1.15e|: These user macros set up the amount of muglue after +% \mstrelease{1.15e}: These user macros set up the amount of muglue after % \cs{exists} or \cs{forall}. The normal and % bold math versions inherit the same skips; these skips are set to % zero in case of the subdued, or the italic option. Each command % \cs{Mathastext}\oarg{version\_name} stores the current values in % the definition of the math version. % -% |1.2|: \cs{MTprimeskip} added, the silly \cs{@onlypreamble} are removed +% \mstrelease{1.2}: \cs{MTprimeskip} added, the silly \cs{@onlypreamble} are removed % and the macros are modified to have immediate effect in the document, % independently of their possible use in the preamble for the math % versions to store values. @@ -6433,35 +6444,49 @@ defaultbf,defaultit,defaultsf,defaulttt}} % mathastext font (both in the current math version). If option % |noparenthesis| was used, we leave everything untouched. % -% In |1.3a|, |2013/09/04|, the modification is done only at the time of +% In \mstrelease{1.3a}, |2013/09/04|, the modification is done only at the time of % \cs{MTnonlettersobeymathxx}. It is canceled by % \cs{MTnonlettersdonotobeymathxx}. So the code has been moved to these % macros and here we just store at the begin document the then meaning of % \cs{resetMathstrut@}, and check also if \cs{MTnonlettersobeymathxx} has % been invoked in the preamble. % -% |1.3f| |2015/09/12| issues only an Info message not a Warning, as I am +% \mstrelease{1.3f} |2015/09/12| issues only an Info message not a Warning, as I am % becoming aware from another context (etoc) that Warnings are stressful to % users, in some integrated environments for editing and compiling \LaTeX{} % source files. +% +% \mstrelease{1.4} adds here an \cs{AtEndOfPackage}. As this must be +% executed (if not in the legacy |everymath| context) after the +% redefinition of \cs{MTnonlettersobeymathxx} which happens at begin +% document. % \begin{macrocode} \ifmst@noparen\else -\AtBeginDocument{% - \@ifundefined{resetMathstrut@}{% nothing to do, no amsmath - }{% amsmath loaded, and possibly patched by things such as lualatex-math - \let\mst@savedresetMathstrut@\resetMathstrut@ -% \PackageInfo{mathastext}{current `at begin document\string' meaning of -% amsmath\MessageBreak -% \string\resetMathstrut@\space preserved for -% future use\@gobble}% - \ifx\mst@the\the % means that \MTnonlettersobeymathxx was used in preamble - \let\mst@the\@gobble\MTnonlettersobeymathxx - \fi}} +\AtEndOfPackage{% + \AtBeginDocument{% + \@ifundefined{resetMathstrut@} + {}% + {% + \let\mst@savedresetMathstrut@\resetMathstrut@ +% \end{macrocode} +% The |\ifx\mst@the\the| is true iff \cs{MTnonlettersobeymathxx} was used in preamble +% (last compared to \cs{MTnonlettersdonotobeymathxx}). +% Setting \cs{mst@the} to \cs{@gobble} here wiil cause \cs{MTnonlettersobeymathxx} +% to indeed modify \cs{resetMathstrut@} (and it resets \cs{mst@the} to \cs{the} for +% its behavior in \cs{everymath}). +% \begin{macrocode} + \ifx\mst@the\the + \let\mst@the\@gobble + \MTnonlettersobeymathxx + \fi + }% + }% +}% \fi % \end{macrocode} % \end{macro} % -% |1.2| |2012/12/20| does some rather daring \emph{math} activation of +% \mstrelease{1.2} |2012/12/20| does some rather daring \emph{math} activation of % \verb$; , : ! ? + - = < > ( ) [ ]$ in % math mode to achieve something I wanted to do since a long time: overcome % the mutually excluding relation between the variable-family concept and @@ -6476,7 +6501,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % the entrance of the math mode are discussed later),\\ % \null\hspace{1cm}\fbox{but the concerned characters will now expand in math % mode to \emph{two} tokens.}\\ -% |1.2c| |2012/12/31|: hence, this current +% \mstrelease{1.2c} |2012/12/31|: hence, this current % implementation puts constraints on the input: |$x^?$| or |$x\mathrel?y$| % now create errors. They must be input % |$x^{?}$|, respectively |$x\mathrel{?}y$|.\\ @@ -6488,8 +6513,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % should be used instead) but it can be activated for them too. % % -% \begin{macro}{\mst@mathactivate} -% |1.2b| |2012/12/30|: there were bad oversights in the |1.2| code +% \mstrelease{1.2b} |2012/12/30|: there were bad oversights in the \mstrelease{1.2} code % for \cs{mst@mathactivate} related to the possibility for some % characters to have been made active (in the sense of the catcode) % elsewhere (something which often is done by language definition @@ -6503,7 +6527,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % |:| (assuming for the latter that things would have worked ok before % the twiddling by \mst). % -% |1.2e| |2013/01/09|: alas |$\ref{eq:1}$| still was a problem. +% \mstrelease{1.2e} |2013/01/09|: alas |$\ref{eq:1}$| still was a problem. % Indeed in that case the \mst prefix had no means to know it was % inside a \cs{ref} so it made the character expand to its \mst % redefinition, which is not acceptable inside a @@ -6566,13 +6590,13 @@ defaultbf,defaultit,defaultsf,defaulttt}} % the mathcode to 32768!!}, rather it makes \emph{sure} the character % is not mathematically active. % -% As |1.2e| is a bit paranoid it takes precautions against +% As \mstrelease{1.2e} is a bit paranoid it takes precautions against % the possibility of characters it treats being active at % the time of its loading. Excepted from the scope of the % paranoia are the latin letters (that would be crazy!) and % also |*|, |"| and the left quote |`|. % -% |1.2f| |2013/01/21| with earlier versions (*) it was important not +% \mstrelease{1.2f} |2013/01/21| with earlier versions (*) it was important not % to do twice the business of \cs{mst@mathactivate} (think % |$\hbox{$?$}$|), so I used (this was a bit wasteful) some sort of % boolean macro for each character. But now that there are the @@ -6590,57 +6614,274 @@ defaultbf,defaultit,defaultsf,defaulttt}} % |\label| or |\ref|. So testing for active characters should be done % always... many things should be done always... I leave as is. % -% |1.3i| |2016/01/06| removes a spurious end of line space in +% \mstrelease{1.3i} |2016/01/06| removes a spurious end of line space in % \cs{mst@mathactivate} (did not show as anyhow done in math mode). % -% \begin{macro}{\mst@do@az} -% \begin{macro}{\mst@do@AZ} -% \begin{macro}{\mst@addtodo@az} -% \begin{macro}{\mst@addtodo@AZ} -% \begin{macro}{\mst@the} -% |1.2b| |2012/12/28| now that we understand the great advantages of |"8000| -% we do it also for all letters a-z and A-Z to insert automatically the -% italic corrections. See the \hyperref[sec:ic]{discussion} in the user -% manual. Ironically I wrote the code initially for the |italic| option only -% to realize later it was more suitable to using an \emph{upright} text font -% in math mode! So this mathematical activation of the letters is not done if -% the font shape is detected to be |it| or |sl|; to bypass this the command -% \cs{MTicinmath} is provided. -% -% |1.2e| |2013/01/10| corrects a bad oversight of |1.2b| in -% \cs{mst@mathactivate} which made the reproduction of the user manual -% illustrations with |$f_i^i$| impossible. As \cs{mst@mathactivate} was -% originally used also to get the non-letters obey math alphabet while -% maintaining the \TeX{} spacings, it added no extra braces. The braces -% should however be added for expansion of math active letters, in order of -% things like |x^y| to work as expected. (the group braces do not prevent -% ligatures when the letters are arguments to the math alphabet commands, -% the added macros \cs{mst@itcorr} and \cs{mst@before<letter>} expanding to -% nothing). +% \mstrelease{1.4} has significantly refactored the coding, there were +% simplication from a changed way to use \cs{mst@mathactivate} for letters +% and added branches to accomodate the renouncement to \cs{everymath}. +% \begin{macro}{\mst@do@activecase} +% Called by \cs{mst@mathactivate} if |#1| is catcode active. +% +% Check if token activation originates apparently into \ctanpkg{babel}: +% \begin{itemize}[nosep] +% \item if NO, nothing is done. The active meaning of |#1| is not modified. +% \item if YES, we hook into \ctanpkg{babel} associated macros so +% that in math mode the catcode active token does what \mst expects it to +% do. Its \cs{mathcode} is set to the +% one of the associated \cs{mathalpha} symbol as declared by \mst, except +% for asterisk and right tick which simply use their ascii number as mathcode. +% \end{itemize} +% +% In the case of \ctanpkg{babel}-spanish which has a catcode active right +% tick, resetting its mathcode has the advantage to reveal in output the case +% of a faulty input using the curly right tick U+8217 which one can get easily +% from copy paste, for example from the |babel-spanish.pdf| file. +% +% And in general it is dangerous to have a character both catcode active and +% mathcode active. +% +% Some auxiliaries. +% \begin{macrocode} +\def\mst@magic@v #1#2#3#4#5{#1#3#4} +\def\mst@magic@vi #1#2#3#4#5#6{#1#2#4#5} +\def\mst@fork{\ifmmode\mst@magic@v\fi\@thirdofthree} +\def\mst@safefork{\ifmmode\if@safe@actives\else\mst@magic@vi\fi\fi\@thirdofthree} +% \end{macrocode} +% Some refactoring (and streamlining) at \mstrelease{1.4} here. +% \begin{footnotesize} +% There was at some point in the case of a Babel-active token a special +% hanlding for |#1| to use \cs{MTmathcharletter}|#1| (and event for +% digits!). But this is almost impossible to arise in practice: +% \begin{itemize}[nosep] +% \item Babel commands to set up a shorthand are preamble only (they use +% \cs{AtBeginDocument}), +% \item A shorthand is made active at begin document, and we don't want that +% for a letter! +% \item Activation is recorded as an instruction in the |.aux| file which +% breaks it almost surely (except perhaps for letter |Z| or such not +% likely to appear in macro names in the |.aux| file). +% \item Even if we somehow hack against that (which I did to test) a more +% subtle problem arises that Babel updates \cs{nfss@catcodes}, so that the +% latter will want to make (e.g.) |a| of catcode 12! This causes breakage +% very easily at the time of \cs{process@table} almost as easily as with +% the |a| set to be an active character... +% \end{itemize} +% +%^^A In revisiting and +%^^A improving the coding here (following up on a simplification of +%^^A \cs{mst@mathactivate} itself, I discovered a bug of earlier releases: in +%^^A this fictitious "letter made active by Babel" branch the insertion of mu +%^^A glue around the letter was lost, only the italic correction was kept in the +%^^A modified meaning of Babel active letter in math mode. This bug was +%^^A dissolved by the new way \cs{mst@mathactivate} is used by +%^^A \cs{mst@DeclareMathLetter} and the ensuing simplifcation here. But in fact +%^^A as summarized above this is purely fictitious code, which will never get +%^^A executed in real life! +%^^A As I am not of the repenting type, I also add at \mstrelease{1.4} a similar +%^^A fictituous layer for catcode active digits...\par +% \end{footnotesize} +% |#1| here is a character token of catcode 11 or 12. +% We do something only if the catcode activation appears to have been triggered +% by \ctanpkg{babel}. The test has been moved earlier at \mstrelease{1.4}. +% \begin{macrocode} +\def\mst@do@activecase#1#2#3{% +% \end{macrocode} +% As letters and digits are impossible here, |#2| is either empty (which +% happens only now for asterisk and right tick) or a single token (\cs{mathclose}, +% \cs{mathopen},... ). When |#2| is not empty, |#3| is always a mathchar +% token. For safety we make sure then the mathcode is not active. +% +% The rationale is +% to avoid context where people have both catcode and math active and use +% |\string|. In the case of \ctanpkg{babel}-spanish with +% |activeacute| option it allows to reveal more easily input errors using +% curly right tick U+8217. +% +% Arguably I probably mainly wanted to do this if the character was found +% catcode active but not a Babel shorthand. But it ended into the Babel +% branch and the non-Babel branch for active catcode is to do nothing. +% +% |#2| is empty exactly for the case of the right tick and the asterisk. +% In all other cases, then |#3| is a mathchar token. +% \begin{macrocode} + \ifx\relax #2\relax\mathcode`#1=`#1\relax\else\mathcode`#1=#3\relax\fi +% \end{macrocode} +% Less \cs{expandafter}'s at \mstrelease{1.4}. Also, it is now required +% to make sure: +% \begin{itemize}[nosep] +% \item not do it twice in succession (else infinite loop), +% \item and undo it when deactivating. +% \end{itemize} +% This was easily done under legacy code (now only used under |everymath| +% option, and only for non-letters) as it activated only when entering into +% math mode. +% +% This is more annoying when activation happens in an uncontrolled +% scope, and we handle this via a \cs{mst@hackedshorthand@<char>} flag. +% +% MEMO: the undoing is done in \cs{mst@mathdeactivate} which is invoked +% only for those non-letters submitted to \cs{mst@mathactivate}. +% \begin{macrocode} + \ifmst@everymath\else\@ifundefined{mst@hackedshorthand@#1}{\fi + \expandafter\let\csname mst@orig@user@active#1\expandafter\endcsname + \csname user@active#1\endcsname + \expandafter\let\csname mst@orig@normal@char#1\expandafter\endcsname + \csname normal@char#1\endcsname + \ifmst@everymath\else}{}\fi +% \end{macrocode} +% No more \cs{edef}'s at \mstrelease{1.4}. At this release, in letter case +% |#3| is empty and |#2| is a single token which needs no extra brace +% pair as this brace pair will come from its expansion. +% We can use |{#2}{#3}| in all cases rather than either |{{#2#3}}{}| versus +% |{#2}#3| depending on whether |#1| is letter or not as was done in the past. +% Attention that |#2| and |#3| may each be empty. +% \begin{macrocode} + \def\mst@tmp##1##2{\def##1{\mst@fork{#2}{#3}##2}}% + \expandafter\mst@tmp\csname user@active#1\expandafter\endcsname + \csname mst@orig@user@active#1\endcsname + \def\mst@tmp##1##2{\def##1{\mst@safefork{#2}{#3}##2}}% + \expandafter\mst@tmp\csname normal@char#1\expandafter\endcsname + \csname mst@orig@normal@char#1\endcsname + \ifmst@everymath + \else + \expandafter\let\csname mst@hackedshorthand@#1\endcsname\@empty + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\mst@@mathactivate} +% \begin{macrocode} +\begingroup + \catcode`\~=\active + \def\x{% +\endgroup +% \end{macrocode} +% |##1| is always a token of catcode 11 or 12. +% \begin{macrocode} +\ifmst@everymath + \def\mst@@mathactivate##1##2##3{% + \begingroup + \lccode`~=`##1 + \lccode`##1=`##1 +% \end{macrocode} +% Careful here as |##2| is empty in the asterisk and prime case. And |##3| +% also is at \mstrelease{1.4} empty for letters. +% \begin{macrocode} + \lowercase{\endgroup +% \end{macrocode} +% Refactoring at \mstrelease{1.4} merged the catcode 11 and catcode 12 +% branches here and in particular avoided in former case an \cs{edef}. This +% helped into providing the \cs{MTcommandletter}\meta{letter} as a +% customizable macro. There was no equivalent to this macro, which here is +% |##2|, prior to \mstrelease{1.4}. +% \begin{macrocode} + \mathcode`##1="8000 + \def~{##2##3}% + }% + }% +\else + \def\mst@@mathactivate##1##2##3{% + \begingroup + \lccode`~=`##1 + \lccode`##1=`##1 + \lowercase{\endgroup + \mathcode`##1="8000 +% \end{macrocode} +% Also, \mstrelease{1.4} possibly execute \cs{mst@mathactivate} everywhere +% in document body (at version changes for example) or at begin document. +% Hence this modifies globally the active meaning. So we add some safeguard +% here using an \cs{ifmmode}. And we store the original meaning of the +% active variant of the token to reset it when ``undoing''. +% +% Careful not to do it twice in a row... (but this means \cs{mst@deactivate} +% might not revert to a user custom redefinition done in-between but to a +% prior one; although if the character is made active the second +% \cs{mst@mathactivate} would not have been done). +% \begin{macrocode} + \@ifundefined{mst@prioractivemeaning@##1} + {\expandafter\let + \csname mst@prioractivemeaning@##1\endcsname ~} + {}% + \def~{\ifmmode##2##3\else##1\fi}% + }% + }% +\fi +}\x +% \end{macrocode} +% At \mstrelease{1.4} the macro was split into two, to test first whether the +% character which is encountered is currently with active catcode. % -% Added note |2016/01/06|: it should be explicitly said that the extra -% |{..}| in |\mst@mathactivate| for letters end up creating |\hbox|'es -% around each letter with its extra skips and explicit italic correction, -% when present. These skips are thus set at natural width and do not add -% any break point. +% At \mstrelease{1.4} the non-catcode active branch is entered only if the +% character isn't mathematically active at time of use.. % -% \begin{macro}{\MTmath-}\begin{macro}{activeletters} -% \begin{macro}{\MTmath-}\begin{macro}{standardletters} -% |1.3| |2013/09/02| extends the use of mathematically active letters to -% allow the user to specify muglue before and after the letter itself (see -% \cs{MTsetmathskips}, below). -% Mathematically active letters were previously used only to add the italic -% correction; the math activation has now been separated and put in -% \cs{MTmathactiveletters}. There is also \cs{MTmathactiveLetters} to allow -% math activation only for the uppercase letters. To cancel the (now default, -% even with option |italic|) math -% activation of letters, there is \cs{MTmathstandardletters}. Version |1.3a| -% removes some silly |\string|'s from the code, which prevented to pass -% macros as first argument to the command. -% \begin{macro}{\MTnonletters-}\begin{macro}{obeymathxx} -% \begin{macro}{\MTnonletters-}\begin{macro}{donotobeymathxx} -% \begin{macro}{\resetMathstrut@} -% These macros are modified in version |1.3a| |2013/09/04| in order to +% Careful that |#2| and |#3| may each be empty. The test for being a Babel +% shorthand is done here and not as prior to \mst@release{1.4} inside +% \cs{mst@do@activecase}. +% \begin{macrocode} +\def\mst@mathactivate#1#2#3{% + \ifnum\catcode`#1=\active + \@ifundefined{active@char#1}{}{\mst@do@activecase #1{#2}{#3}}% + \else + \mst@OnlyIfNotMathActive{#1}{\mst@@mathactivate #1{#2}{#3}}% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\mst@mathdeactivate} +% This is needed at \mstrelease{1.4} for non-letters which are mathematically +% activated. See comments above in \cs{mst@do@activecase}. Works in +% sync with \cs{mst@addtodo@nonletters}. +% +% The \cs{mst@mathdeactivate} is active (sic) only in the non |everymath| +% situation. It will restore a previously existing active meaning if it has +% been changed. +% \begin{macrocode} +\ifmst@everymath +\else +\def\mst@mathdeactivate#1#2{% + \mathcode`#1=#2\relax + \@ifundefined{active@char#1} + {\@ifundefined{mst@prioractivemeaning@#1} + {}% + {\mst@restoreactivemeaning#1% + \expandafter\let\csname mst@prioractivemeaning@#1\endcsname\relax}% + } + {\@ifundefined{mst@hackedshorthand@#1} + {} + {\expandafter\let\csname user@active#1\expandafter\endcsname + \csname mst@orig@user@active#1\endcsname + \expandafter\let\csname normal@char#1\expandafter\endcsname + \csname mst@orig@normal@char#1\endcsname + \expandafter\let\csname mst@hackedshorthand@#1\endcsname\relax + }% + }% +}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\mst@restoreactivemeaning} +% At \mstrelease{1.4} when we undo the mathematical activation we now also +% restore the prior existing active meaning, if any. Only in the ``no +% |everymath|'' branch (because in the |everymath| \TeX{} itself takes care +% of that on exiting the scope of the math mode). +% \begin{macrocode} +\def\mst@restoreactivemeaning#1{% + \begingroup + \lccode`~=`#1 + \lccode`#1=`#1 + \lowercase{\endgroup + \expandafter\let\expandafter~\csname mst@prioractivemeaning@#1\endcsname + }% +} +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\mst@do@nonletters} +% \begin{macro}{\mst@addtodo@nonletters} +% \begin{macro}{\mst@the} +% \begin{macro}{\MTnonlettersobeymathxx} +% \begin{macro}{\MTnonlettersdonotobeymathxx} +% These macros are modified in version \mstrelease{1.3a} |2013/09/04| in order to % cleverly adjust, or not, the |amsmath| \cs{resetMathstrut@}. When used in % the preamble, they just modify \cs{mst@the}. And there is code at begin % document to check the status there of \cs{mst@the} and if its meaning is @@ -6658,7 +6899,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % |2016/03/03 v2.15a| of |amsmath.sty| is still not compatible with a math % active opening parenthesis. Hence my patch here is still needed. % -% At |1.3u| \cs{MTnonlettersobeymathxx} and \cs{MTeasynonlettersobeymathxx} +% At \mstrelease{1.3u} \cs{MTnonlettersobeymathxx} and \cs{MTeasynonlettersobeymathxx} % are made no-ops under subdued mode. This fixes some bug if for example % the former was used in preamble or immediately after |\begin{document}| % making the minus sign math active although the \mst action was @@ -6667,42 +6908,42 @@ defaultbf,defaultit,defaultsf,defaulttt}} % versions. % \begin{macrocode} \newtoks\mst@do@nonletters -\newtoks\mst@do@easynonletters -\newtoks\mst@do@az -\newtoks\mst@do@AZ +\ifmst@everymath +\else + \newtoks\mst@undo@nonletters +\fi +% \end{macrocode} +% |#1| is a category 12 character, |#2| is a \cs{mathopen}, or \cs{mathclose}, +% etc..., |#3| is a \cs{mathchar} (of variable family type). +% +% At \mstrelease{1.4}, \cs{mst@mathactivate} will not do anything if |#1| +% is mathcode active (but not catcode active) at time of use. +% \begin{macrocode} +\ifmst@everymath + \def\mst@addtodo@nonletters#1#2#3{\mst@do@nonletters\expandafter + {\the\mst@do@nonletters\mst@mathactivate#1#2#3}% + }% +\else +% \end{macrocode} +% We need to automatize some safeguards related to \cs{mst@do@activecase} when +% deactivating. +% \begin{macrocode} + \def\mst@addtodo@nonletters#1#2#3{\mst@do@nonletters\expandafter + {\the\mst@do@nonletters\mst@mathactivate#1#2#3}% + \edef\mst@tmp{\noexpand\mst@mathdeactivate#1{\the\mathcode`#1}}% + \mst@undo@nonletters\expandafter\expandafter\expandafter + {\expandafter\mst@tmp\the\mst@undo@nonletters}% + }% +\fi \let\mst@the\@gobble -\newcommand*\MTnonlettersdonotobeymathxx{% - \ifx\mst@the\@gobble - \else - \@ifundefined{mst@savedresetMathstrut@}{}{% - \PackageInfo{mathastext}{restoring for this group or environment - the original\MessageBreak - amsmath \protect\resetMathstrut@}% - \let\resetMathstrut@\mst@savedresetMathstrut@}% - \fi - \let\mst@the\@gobble -}% % \end{macrocode} -% |1.3u| adds this check that we are not in a subdued normal or bold math -% version. No need for expandable coding. +% As \cs{mst@savedresetMathstrut@} will only be defined at begin document, +% the next two macros are no-op in the preamble. % \begin{macrocode} -\def\mst@OnlyIfNotSubdued#1{% - \ifmst@subdued - \ifx\math@version\mst@normalversionname - \else - \ifx\math@version\mst@boldversionname - \else - #1% - \fi - \fi - \else - #1% - \fi -}% -\def\mst@nonlettersobeymathxx{% - \ifx\mst@the\the - \else - \@ifundefined{mst@savedresetMathstrut@}{}{% +\def\mst@redefine@resetMathstrut@{% + \@ifundefined{mst@savedresetMathstrut@} + {} + {% \ifmst@symboldelimiters \def\resetMathstrut@{% \setbox\z@\hbox{\the\textfont\symmtpsymbol\char40 @@ -6715,234 +6956,186 @@ defaultbf,defaultit,defaultsf,defaulttt}} \the\textfont\symoperators\char40}% \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@}% \fi - \PackageInfo{mathastext}{\string\resetMathstrut@\space - from amsmath replaced for this\MessageBreak group or environment}}% - \fi - \let\mst@the\the + \PackageInfo{mathastext}{\string\resetMathstrut@\space + from amsmath replaced for this\MessageBreak group or environment}% + }% }% -\newcommand*\MTnonlettersobeymathxx - {\mst@OnlyIfNotSubdued\mst@nonlettersobeymathxx}% -\newcommand*\MTeasynonlettersdonotobeymathxx{\let\mst@theeasy\@gobble}% -\def\mst@easynonlettersobeymathxx{\let\mst@theeasy\the}% -\newcommand*\MTeasynonlettersobeymathxx - {\mst@OnlyIfNotSubdued\mst@easynonlettersobeymathxx}% -\MTeasynonlettersobeymathxx % no-op here if subdued mode -\def\mst@mathactiveletters{\let\mst@thef\the \let\mst@theF\the}% -\newcommand*\MTmathactiveletters - {\mst@OnlyIfNotSubdued\mst@mathactiveletters}% -\MTmathactiveletters % no-op here if subdued mode -\def\mst@mathactiveLetters{\let\mst@theF\the}% -\newcommand*\MTmathactiveLetters - {\mst@OnlyIfNotSubdued\mst@mathactiveLetters}% -\newcommand*\MTmathstandardletters{\let\mst@thef\@gobble \let\mst@theF\@gobble}% +\def\mst@restore@resetMathstrut@{% + \@ifundefined{mst@savedresetMathstrut@}{}{% + \PackageInfo{mathastext}{restoring for this group or environment + the original\MessageBreak + amsmath \protect\resetMathstrut@}% + \let\resetMathstrut@\mst@savedresetMathstrut@}% +}% +\ifmst@everymath + \newcommand*\MTnonlettersobeymathxx{% + \mst@OnlyIfNotSubdued{% + \ifx\mst@the\the + \else + \mst@redefine@resetMathstrut@ + \fi + \let\mst@the\the + }% + }% + \newcommand*\MTnonlettersdonotobeymathxx{% + \ifx\mst@the\@gobble + \else + \mst@restore@resetMathstrut@ + \fi + \let\mst@the\@gobble + }% +\else + \newcommand*\MTnonlettersobeymathxx{% + \mst@OnlyIfNotSubdued{% + \AtBeginDocument{\MTnonlettersobeymathxx}% + }% + }% + \newcommand*\MTnonlettersdonotobeymathxx{% + \AtBeginDocument{\MTnonlettersdonotobeymathxx}% + }% + \AtBeginDocument{% + \renewcommand*\MTnonlettersobeymathxx{% + \mst@OnlyIfNotSubdued{% + \the\mst@do@nonletters + \ifx\mst@the\the + \else + \mst@redefine@resetMathstrut@ + \fi + \let\mst@the\the + }% + }% + \renewcommand*\MTnonlettersdonotobeymathxx{% + \the\mst@undo@nonletters + \ifx\mst@the\@gobble + \else + \mst@restore@resetMathstrut@ + \fi + \let\mst@the\@gobble + }% + }% +\fi % \end{macrocode} -% \begin{macro}{\MTicinmath} -% \begin{macro}{\MTICinmath} -% \begin{macro}{\MTnoicinmath} -% \begin{macro}{\MTicalsoinmathxx} -% \cs{MTnoicinmath} can also be used from inside math mode. -% -% \cs{MTicalsoinmathxx} is destined to be used inside -% \cs{mathnormalbold} as I didn't want to add the complication of -% extracting the family number used inside \cs{mathnormalbold} (will -% perhaps come back if I have time to spend on -% |source2e|). Added note |2016/01/06|: this number is a priori simply -% |symmtletterfont+1|. -% -% \cs{MTicinmath} can also be used inside math mode, to revert an -% earlier \cs{MTnoicinmath} from inside the same math group: the math mode -% had to be entered with the math activation of letters allowed. -% -% |1.3i| |2016/01/06|: For some reason which I have now forgotten I did -% until now: -% \begin{verbatim} -% \def\mst@itcorr{\ifnum\fam=\m@ne\/\else\ifnum\fam=\symmtletterfont\/\fi\fi}% -% \end{verbatim} -% hence italic corrections were also applied inside \cs{mathnormal} (for -% upright fonts; \cs{mathnormalbold} math alphabet was not treated like -% \cs{mathnormal}). I now drop this to be more in sync with the handling -% of the extra skips around letters. Everything gets suppressed inside -% all math alphabets, allowing ligatures, even for \cs{mathnormal}. -% +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \begin{macro}{\MTeasynonlettersobeymathxx} +% \begin{macro}{\MTeasynonlettersdonotobeymathxx} % \begin{macrocode} -\newcommand*\MTicinmath{% - \MTmathactiveletters - \def\mst@itcorr{\ifnum\fam=\m@ne\/\fi}% - \let\mst@ITcorr\mst@itcorr} -\newcommand*\MTICinmath{% - \MTmathactiveLetters - \def\mst@ITcorr{\ifnum\fam=\m@ne\/\fi}} -\newcommand*\MTnoicinmath{\let\mst@itcorr\@empty\let\mst@ITcorr\@empty} -\newcommand*\MTnoICinmath{\let\mst@ITcorr\@empty} -\newcommand*\MTicalsoinmathxx{% - \ifx\mst@itcorr\@empty\else\def\mst@itcorr{\/}\fi - \ifx\mst@ITcorr\@empty\else\def\mst@ITcorr{\/}\fi} +\newtoks\mst@do@easynonletters +\ifmst@everymath + \newcommand*\MTeasynonlettersdonotobeymathxx{\let\mst@theeasy\@gobble}% + \newcommand*\MTeasynonlettersobeymathxx{% + \mst@OnlyIfNotSubdued{\let\mst@theeasy\the}% + }% + \MTeasynonlettersobeymathxx +\else + \newtoks\mst@undo@easynonletters + \newcommand*\MTeasynonlettersdonotobeymathxx{\the\mst@undo@easynonletters} + \newcommand*\MTeasynonlettersobeymathxx{% + \mst@OnlyIfNotSubdued{\the\mst@do@easynonletters}% + }% + \AtEndOfPackage{\MTeasynonlettersobeymathxx}% +\fi % \end{macrocode} -% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} -% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} -% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} -% \begin{macro}{\MTsetmathskips} -% \begin{macro}{\MTunsetmathskips} -% |1.3| |2013/09/02|: user level command to specify extra spaces in math mode -% around the letters (only the 7bit a,b,..,z and A,B,..,Z). First parameter is -% the letter, second is the math skip to be inserted before, and third the -% skip to be inserted after; for example \cs{thickmuskip} or explicitly -% |0.1mu|. -% -% For this, letters are made mathematically active. This is now the package -% default (version |1.2| did this only in the absence of option |italic|, or -% more precisely when the font used was not of shape |it| or |sl|). But if -% \cs{MTsetmathskips} has not been used for that letter, the only effect of -% the math activation is, as in |1.2|, to add the italic correction -% automatically, except when the font shape is detected to be |it| or |sl|; in -% these latter cases, although mathematically active, the letter acts in the -% standard way. -% -% The command \cs{MTmathstandardletters} turns off math activation and its -% effects for all letters. -% -% Ligatures within the argument of a math alphabet command are impeached by -% skips; so \cs{MTunsetmathskips} is provided to cancel the skips for one -% specific letter (|f| for example). +% \end{macro}\end{macro} +% \begin{macro}{\mst@addtodo@easynonletters} +% |#1| is a one character control sequence (|\.|, |\/|, |\#|, |\%| or |\&|) +% and |#2| is a mathchar. % -% |1.3a| |2013/09/04|: I strangely had |\string#1| inside \cs{MTsetmathskips}. -% Phobic of catcode active letters... but with |\string| one needs some -% |\expandafter| to use \cs{MTsetmathskips} in an |\@for| loop for example. It -% is better to allow the first argument to be a macro or anything expanding to -% a letter, and to not be paranoid about improbable catcode active letters -% (the user just has to tame them at the time of the \cs{MTsetmathskip}) so I -% take out these |\string|'s. +% Perhaps I should use the Unicode engine \cs{Umathcode} et alia. I do this +% at other places. However +% I realized in 2013 and it is still true in 2024 that \LaTeX{} interface +% \cs{DeclareSymbolFont} does not allow to declare more than 16 font +% families even with \LuaLaTeX{} despite the latter allowing 256 such. % -% |1.3i| |2016/01/06|: the extra skips are suppressed for the arguments of -% math alphabet commands. This applies in particular for amsmath's -% \cs{DeclareMathOperator}. +% So why bother? % +% \mstrelease{1.4} adds to this legacy branch a test to not override +% a mathematically active ``easy'' non-letter. Main case is the dot +% with Babel Spanish. % \begin{macrocode} -\newcommand*\MTsetmathskips[3]{% - \@namedef{mst@before#1}{\ifnum\fam=\m@ne\mskip#2\relax\fi }% - \@namedef{mst@after#1}{\ifnum\fam=\m@ne\mskip#3\relax\fi }% -} -\newcommand*\MTunsetmathskips[1]{% - \@namedef{mst@before#1}{}% - \@namedef{mst@after#1}{}% -} +\ifmst@everymath + \def\mst@addtodo@easynonletters#1#2{% + \mst@do@easynonletters\expandafter{% + \the\mst@do@easynonletters + \mst@OnlyIfNotMathActive{#1}{\mathcode`#1=#2}% + }% + }% + \def\mst@addtodo@easynonletters@U#1#2{% + \mst@do@easynonletters\expandafter{% + \the\mst@do@easynonletters + \mst@OnlyIfNotMathActive{#1}{\mst@Umathcodenum`#1=#2}% + }% + }% +\else % \end{macrocode} -% \end{macro}\end{macro} -% \begin{macro}{\mst@mathactivate} -% \begin{macro}{\mst@addtodo@nonletters} -% \begin{macro}{\mst@addtodo@easynonletters} -% \begin{macro}{\mst@addtodo@az} -% \begin{macro}{\mst@addtodo@AZ} -% Added note |2016/01/06|: -% Notice that the initially |\relax| tokens \verb+\mst@[before|after]@<letter>+ -% formed with |\csname...\endcsname| do not modify TeX's math layout: -% |{\relax f\relax}| is like |f| (also for ligatures inside |\mathrm| for -% example). +% The character may have been made mathcode active +% exterior to \mst. We can not test this for sure at begin document as it +% may happen later. If such an ``easy'' character is mathcode active, +% this can not originate in \mst. So we should not overwrite when +% we issue \cs{MTeasynonlettersdonotobeymathxx}. Example I know is +% with \ctanpkg{babel} Spanish which makes the dot math active. With PDF\LaTeX{} +% it is also catcode active +% +% This macro may be used with Unicoe engines, and \LuaTeX{} and \XeTeX{} +% differ regarding math active characters. I have only tested this (anew) +% for \mstrelease{1.4} for which this branch is needed, so in 2024. % \begin{macrocode} -\def\mst@magic@v #1#2#3#4#5{#1#3#4} -\def\mst@magic@vi #1#2#3#4#5#6{#1#2#4#5} -\def\mst@fork{\ifmmode\mst@magic@v\fi\@thirdofthree} -\def\mst@safefork{\ifmmode\if@safe@actives\else\mst@magic@vi\fi\fi\@thirdofthree} -\def\mst@do@activecase#1#2#3{% #1 is a category 11 or 12 character token - \@ifundefined{active@char#1}{}{% - \ifcat #1a\mathcode`#1=#2\else - \ifx\relax #2\relax\mathcode`#1=`#1 \else\mathcode`#1=#3\fi\fi - \expandafter\expandafter\expandafter\let\expandafter\expandafter - \csname mst@orig@user@active#1\endcsname - \csname user@active#1\endcsname - \expandafter\expandafter\expandafter\let\expandafter\expandafter - \csname mst@orig@normal@char#1\endcsname - \csname normal@char#1\endcsname - \ifcat #1a% - \expandafter\edef\csname user@active#1\endcsname - {\noexpand\mst@fork {{#2\noexpand#3}}{}\expandafter - \noexpand\csname mst@orig@user@active#1\endcsname - }% - \expandafter\edef\csname normal@char#1\endcsname - {\noexpand\mst@safefork {{#2\noexpand#3}}{}\expandafter - \noexpand\csname mst@orig@normal@char#1\endcsname - }% - \else - \expandafter\edef\csname user@active#1\endcsname - {\noexpand\mst@fork {#2}\noexpand#3\expandafter - \noexpand\csname mst@orig@user@active#1\endcsname - }% - \expandafter\edef\csname normal@char#1\endcsname - {\noexpand\mst@safefork {#2}\noexpand#3\expandafter - \noexpand\csname mst@orig@normal@char#1\endcsname - }% - \fi}} -\begingroup - \catcode`\~=\active - \def\x{\endgroup - \def\mst@mathactivate##1##2##3{% ##1 guaranteed of cat 11 or 12 - \begingroup - \lccode`~=`##1 - \lccode`##1=`##1 - \lowercase{\endgroup - \ifnum\catcode`##1=\active - \mst@do@activecase ##1{##2}##3% - % careful as ##2 is empty in the asterisk and - % prime case! - \else - \mathcode`##1="8000 - % version 1.3 adds the possibility of extra skips around letters, - % (only if non catcode active at the time of use). - \ifcat##1a\edef~{% extra braces for a^b for example - {\expandafter\noexpand\csname mst@before##1\endcsname - ##2\noexpand##3% - \expandafter\noexpand\csname mst@after##1\endcsname}}% - \else\def~{##2##3}\fi - \fi}}} -\x -\def\mst@addtodo@nonletters#1#2#3{% - % #1 will be of cat 11 or 12. - % #2 is empty for asterisk and right quote - \mst@do@nonletters\expandafter - {\the\mst@do@nonletters \mst@mathactivate#1{#2}#3}% -} -\def\mst@addtodo@easynonletters#1#2{% #1 is a one char control sequence - \mst@do@easynonletters\expandafter{\the\mst@do@easynonletters\mathcode`#1=#2}% -} -\def\mst@addtodo@az#1#2{% - \mst@do@az\expandafter{\the\mst@do@az\mst@mathactivate#1#2\mst@itcorr} -} -\def\mst@addtodo@AZ#1#2{% - \mst@do@AZ\expandafter{\the\mst@do@AZ\mst@mathactivate#1#2\mst@ITcorr}% -} + \def\mst@addtodo@easynonletters#1#2{% + \mst@do@easynonletters\expandafter + {\the\mst@do@easynonletters + \mst@OnlyIfNotMathActive{#1}{\mathcode`#1=#2}}% + \def\mst@tmp##1\relax{% + \def\mst@tmp{\mst@OnlyIfNotMathActive{#1}{\mathcode`#1=##1\relax}}% + }% + \expandafter\mst@tmp\the\mathcode`#1\relax + \mst@undo@easynonletters\expandafter\expandafter\expandafter + {\expandafter\mst@tmp\the\mst@undo@easynonletters}% + }% + \def\mst@addtodo@easynonletters@U#1#2{% + \mst@do@easynonletters\expandafter{% + \the\mst@do@easynonletters + \mst@OnlyIfNotMathActive{#1}{\mst@Umathcodenum`#1=#2}% + }% + \def\mst@tmp##1\relax{% + \def\mst@tmp{\mst@OnlyIfNotMathActive{#1}{\mst@Umathcodenum`#1=##1\relax}}% + }% + \expandafter\mst@tmp\the\mst@Umathcodenum`#1\relax + \mst@undo@easynonletters\expandafter\expandafter\expandafter + {\expandafter\mst@tmp\the\mst@undo@easynonletters}% + }% +\fi % \end{macrocode} -% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \end{macro} % \begin{macro}{\newmcodes@} % \begin{macro}{\mst@newmcodes@} % \begin{macro}{\MTresetnewmcodes} % \begin{macro}{\MTcustomizenewmcodes} -% |1.15d|: the \cs{newmcodes@} amsmath macro causes an error in Unicode engines as soon -% someone assigns a Unicode mathcode to the minus sign, and then makes a -% \cs{DeclareMathOperator} declaration. Furthermore it hard-codes the font -% family 0 as being the one to be used. Moreover just putting the concerned -% signs |-|, |:|, |.|, |\| ,|'|, |*| inside braces emulates enough the -% behavior (although the tick will give a prime). +% \mstrelease{1.15d}: the \cs{newmcodes@} amsmath macro causes an error in +% Unicode engines as soon someone assigns a Unicode mathcode to the minus +% sign, and then makes a \cs{DeclareMathOperator} declaration. Furthermore +% it hard-codes the font family 0 as being the one to be used. Moreover just +% putting the concerned signs |-|, |:|, |.|, |\| ,|'|, |*| inside braces +% emulates enough the behavior (although the tick will give a prime). % -% |1.3|: now tests if `basic' option was used. +% \mstrelease{1.3}: now tests if `basic' option was used. % -% |1.3d|: I should re-examine the situation with |\newmcodes@|. In the +% \mstrelease{1.3d}: I should re-examine the situation with |\newmcodes@|. In the % meantime its relaxification will not be done if lualatex-math is % loaded. And the whole thing is put at begin document. % -% |1.3m|: |lualatex-math 1.5| n'a pas modifi son traitement de |\newmcodes@| +% \mstrelease{1.3m}: |lualatex-math 1.5| n'a pas modifi son traitement de |\newmcodes@| % mais par contre a supprim le patch de \cs{resetMathstrut@}. Mais la date -% de release est reste |2015/09/22| (date de |1.4a|) au lieu de quelque +% de release est reste |2015/09/22| (date de \mstrelease{1.4a}) au lieu de quelque % chose comme |2016/03/13| (date pour l'annonce sur CTAN). Il faudra suivre % l'volution future de |amsmath.sty| maintenant assure par D.C. % -% |1.3n 2016/04/22|: there is no more a patch of |\newmcodes@| by +% \mstrelease{1.3n} |2016/04/22|: there is no more a patch of |\newmcodes@| by % |lualatex-math 1.6| |(2016/04/16)|, as |amsmath 2016/03/10 v2.15b| has now % a version compatible with \LuaLaTeX. % % My very radical |\let\newmcodes@\relax| was only a temporary measure I % adopted for lack of time on October 13, 2012, and apart from avoiding to % do that in case |lualatex-math| was detected, I never came back... finally -% I handle it myself for |1.3n|. The remaining problem of this macro (now +% I handle it myself for \mstrelease{1.3n}. The remaining problem of this macro (now % that it does not anymore crash |lualatex| or vice versa) is that (also % with |amsmath| version |2016/03/10 v2.15b|) it hardcodes the font used. % The aim of the macro is to modify the type of spacing affected to symbols @@ -6954,7 +7147,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \item \mst makes (or not, depending on commands issued by the user) these % characters math active (the right tick already is), which complicates % recovery of former mathcode. We have mathchar type \emph{macros}, but -% then the complication is in diverging behaviours of the engines: +% then the complication is in diverging behaviors of the engines: % |\numexpr\mst@varfam@minus\relax| works with \LuaTeX, not with \XeTeX. % \item the |*| must presumably really be the non-lowered text glyph. % \item for the |-| I hesitated but do use the hyphen in the end. @@ -6979,7 +7172,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \item I noticed that \LuaLaTeX\ does not apply the ``TeX Ligature'' (bad % name) regarding the right tick APOSTROPHE being transformed into RIGHT % SINGLE QUOTATION MARK in math mode, but \XeLaTeX\ does. From the point -% of view of \mst, the behaviour of \XeLaTeX\ is the coherent one. It +% of view of \mst, the behavior of \XeLaTeX\ is the coherent one. It % appears that \LuaLaTeX\ use in math mode of a text font does not obey % the set features.^^A like this %^^A \url{http://tex.stackexchange.com/questions/208688/oldstylefigure-issue-with-lualatex-and-mathastext} @@ -6997,7 +7190,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % in 2012! I spent some hours on this small thing, with consequent testing and % for example this TeX Ligature issue with Unicode engines. % -% Since |1.3v| we require e-\TeX{} extensions, so a test for +% Since \mstrelease{1.3v} we require e-\TeX{} extensions, so a test for % \cs{numexpr} has been dropped here. % \begin{macrocode} \ifmst@basic @@ -7027,7 +7220,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} }% \let\mst@originalnewmcodes@\newmcodes@ \fi - }% end of AtBeginDocument + }% \else \AtBeginDocument {% \ifx\newmcodes@\@undefined\else @@ -7047,9 +7240,9 @@ defaultbf,defaultit,defaultsf,defaulttt}} }% \let\mst@originalnewmcodes@\newmcodes@ \fi - }% end of second AtBeginDocument - \fi % mst@XeOrLua -\fi % mst@basic + }% + \fi +\fi \newcommand*\MTresetnewmcodes{\ifx\mst@originalnewmcodes@\undefined\else \let\newmcodes@\mst@originalnewmcodes@\fi} \newcommand*\MTcustomizenewmcodes{\ifx\mst@originalnewmcodes@\undefined\else @@ -7080,7 +7273,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % we'll see. % \begin{macro}{\MTmathoperators-}\begin{macro}{obeymathxx} % \begin{macro}{\MTmathoperators-}\begin{macro}{donot-}\begin{macro}{obeymathxx} -% |1.2|: rather than just replacing \cs{symoperators} by +% \mstrelease{1.2}: rather than just replacing \cs{symoperators} by % \cs{symmtoperatorfont} I add a modification which makes the % declared operator names sensitive to the math alphabets... ouh le % vilain! @@ -7093,7 +7286,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \end{macrocode} % \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} % \begin{macro}{mtletterfont} -% At version |1.1|, we add the possibility to mimick the standard +% At version \mstrelease{1.1}, we add the possibility to mimick the standard % behavior, that is to have italic letters and upright % digits. Thanks to Tariq~\textsc{Perwez} and % Kevin~\textsc{Klement} who asked for such a feature. @@ -7134,39 +7327,59 @@ defaultbf,defaultit,defaultsf,defaulttt}} % simultaneously when specified with |mode=base|. It does work with % |mode=node| but this mode ``does not work in math mode.'' % -% Done for |1.3o| of |2016/05/03|. +% Done for \mstrelease{1.3o} of |2016/05/03|. +% +% \mstrelease{1.3p} renames the macro to \cs{MTfixmathfonts} for public access. +% +% \mstrelease{1.4} intercepts also |mode=harf|. Cf +% \url{https://tex.stackexchange.com/questions/722084/change-number-style-with-mathastext} +% (thanks to |user691586| for bug report). The new code unconditionally +% replaces |mode=foo| by |mode=base|. The complications due to the output of +% |\fontname| using only category 12 characters are handled in a different way +% than the |2016| code. % -% |1.3p| renames the macro to \cs{MTfixmathfonts} for public access. +% The \url{https://github.com/latex3/fontspec/issues/525} problem causes +% additional complications. +% +% Perhaps I should simply zap spaces always rather than check for quotes? +% Anyway this appears to work. % \begin{macrocode} -\begingroup -\catcode`N 12 -\catcode`O 12 -\catcode`D 12 -\catcode`E 12 -\lowercase{\gdef\mst@fixmathfonts@ #1=NODE;#2#3\relax #4\@empty #5}% - {\ifx#2\empty\else\font\mst@mathfont=#1=base;#2#3\relax#5=\mst@mathfont\fi} -\lowercase{\gdef\MTfixmathfonts -{\expandafter\mst@fixmathfonts@ - \fontname\textfont\symmtoperatorfont\relax\relax=NODE;\empty\relax\@empty - {\textfont\symmtoperatorfont}% - \expandafter\mst@fixmathfonts@ - \fontname\scriptfont\symmtoperatorfont\relax\relax=NODE;\empty\relax\@empty - {\scriptfont\symmtoperatorfont}% - \expandafter\mst@fixmathfonts@ - \fontname\scriptscriptfont\symmtoperatorfont\relax\relax=NODE;\empty\relax\@empty - {\scriptscriptfont\symmtoperatorfont}% - \expandafter\mst@fixmathfonts@ - \fontname\textfont\symmtletterfont\relax\relax=NODE;\empty\relax\@empty - {\textfont\symmtletterfont}% - \expandafter\mst@fixmathfonts@ - \fontname\scriptfont\symmtletterfont\relax\relax=NODE;\empty\relax\@empty - {\scriptfont\symmtletterfont}% - \expandafter\mst@fixmathfonts@ - \fontname\scriptscriptfont\symmtletterfont\relax\relax=NODE;\empty\relax\@empty - {\scriptscriptfont\symmtletterfont}% - }% +\def\mst@fixmathfonts@#1.#2.#3.{% +\def\mst@fixmathfonts@##1##2#1=##3;##4##5\relax##6\@empty##7{% + \ifx##3\empty\else + \if"##1% + \font\mst@mathfont=##1##2#1=base;##4##5\relax + \else + \mst@arrrrgh@fixmathfonts##1##2#1=base;##4##5#2\empty#3\relax + \fi + ##7=\mst@mathfont + \fi }% -\endgroup +\def\mst@arrrrgh@fixmathfonts##1#2##2##3#3##4\relax{% + \ifx##2\empty + \font\mst@mathfont="##1"\relax + \else + \font\mst@mathfont="##1"#2##2##3#3\relax + \fi +}% +}% +\expandafter\mst@fixmathfonts@\detokenize{mode. at.pt.}% +\def\MTfixmathfonts#1{% +\def\MTfixmathfonts{% + \expandafter\mst@fixmathfonts@\fontname\textfont\symmtoperatorfont + \relax\relax #1=;\empty\relax\@empty{\textfont\symmtoperatorfont}% + \expandafter\mst@fixmathfonts@\fontname\scriptfont\symmtoperatorfont + \relax\relax #1=;\empty\relax\@empty{\scriptfont\symmtoperatorfont}% + \expandafter\mst@fixmathfonts@\fontname\scriptscriptfont\symmtoperatorfont + \relax\relax #1=;\empty\relax\@empty{\scriptscriptfont\symmtoperatorfont}% + \expandafter\mst@fixmathfonts@\fontname\textfont\symmtletterfont + \relax\relax #1=;\empty\relax\@empty{\textfont\symmtletterfont}% + \expandafter\mst@fixmathfonts@\fontname\scriptfont\symmtletterfont + \relax\relax #1=;\empty\relax\@empty{\scriptfont\symmtletterfont}% + \expandafter\mst@fixmathfonts@\fontname\scriptscriptfont\symmtletterfont + \relax\relax #1=;\empty\relax\@empty{\scriptscriptfont\symmtletterfont}% +}}% +\expandafter\MTfixmathfonts\expandafter{\detokenize{mode}}% \ifmst@LuaTeX \everymath\expandafter{\the\everymath\mst@fixmathfonts}% \everydisplay\expandafter{\the\everydisplay\mst@fixmathfonts}% @@ -7198,7 +7411,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \cs{mathrm} and not \cs{mathnormal}. % % Actually math alphabet macros are created robust since \LaTeX{} from 2005, -% so at |1.3v 2019/09/19| I decided to modify the old \mst approach a bit. +% so at \mstrelease{1.3v} |2019/09/19| I decided to modify the old \mst approach a bit. % Indeed with the old approach a \cs{mathtt} in a moving argument translates % ultimately into \cs{Mathtt} but if for example the new context where it % gets expanded is a subdued normal math version, this does not give the same @@ -7220,10 +7433,10 @@ defaultbf,defaultit,defaultsf,defaulttt}} % robustness (except of course in the subdued math versions as there the math % alphabets acquire back their original robust meanings.) % -% Potential breaking change at |1.3za|, the |defaultbf| etc... options do +% Potential breaking change at \mstrelease{1.3za}, the |defaultbf| etc... options do % not prevent the package declaring |\Mathbf| etc... commands. % -% |1.3za| defines a \cs{Mathnormalbold} and then defines \cs{mathnormalbold} +% \mstrelease{1.3za} defines a \cs{Mathnormalbold} and then defines \cs{mathnormalbold} % in terms of it in place of defining directly \cs{mathnormalbold} as a math % alphabet. This is in relation to implementation of the |LGRgreek+| % option. There was some hesitation though to restrict this change to that @@ -7249,7 +7462,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \let\mst@original@it\mathit \let\mst@original@sf\mathsf \let\mst@original@tt\mathtt -\def\mst@restorealphabets{% for subdued +\def\mst@restorealphabets{% \let\mathnormal\mst@original@normal \let\mathrm\mst@original@rm \let\mathbf\mst@original@bf @@ -7264,7 +7477,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % there to be a robust and easy way to know when one is in the argument of % \cs{mathrm} or \cs{mathbf}, and the code is spread on various chapters of % \texttt{source2e.pdf}, and the comments are often not up-to-date. So I did -% not try a too complex hack and decided for |1.3za| to add a numeric +% not try a too complex hack and decided for \mstrelease{1.3za} to add a numeric % indicator to let Greek letters react to it. It incorporates a space to be % self-delimiting in an \cs{ifcase} to maintain expandability in numeric % context of the to-be-defined Greek control sequences. @@ -7316,7 +7529,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macro}{\MTgreekupdefault} % \begin{macro}{\MTgreekitdefault} % \begin{macro}{selfGreek} -% |1.14b|: We can not move the \cs{DeclareSymbolFont} to the +% \mstrelease{1.14b}: We can not move the \cs{DeclareSymbolFont} to the % \cs{Mathastext} macro because it resets the font family in *all* % math versions, and some could have been defined by the user with % previous calls to \cs{Mathastext}. So we have to have them here. @@ -7336,7 +7549,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % % First we establish the cumulative effect of the greek related options. % -% |1.15c| introduces some possibilities to change the shapes of Greek letters +% \mstrelease{1.15c} introduces some possibilities to change the shapes of Greek letters % in each math versions, and even the Greek font (in LGR encoding). The % commands \cs{MTitgreek} etc... will be used in-between calls to % \cs{Mathastext} and re-adjust the shapes. And the command \cs{MTgreekfont} @@ -7355,7 +7568,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \LaTeX\ (since 2020-02-02 now that I check this out). As a result this % triggered Font Warnings in the log about the replacement of |up| by |n|. % -% |1.3x| refactors completely the handling of Greek letter shapes under the +% \mstrelease{1.3y} refactors completely the handling of Greek letter shapes under the % |LGRgreek(s)| options (and only under them). Under these options we don't % use one font for lowercase Greek and anotherone for uppercase Greek (some % above code comments have not been updated) but one math font |mtgreekit| for italic Greek @@ -7372,7 +7585,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % % In order to maintain perfect identical code for non-|LGRgreek|, the % |LGRgreek| related code is simply added to previously shared -% constructions. The |LGRgreek| behaviour will remain identical in most +% constructions. The |LGRgreek| behavior will remain identical in most % documents, but for example those who used some adventurous `|sc|' for the % main shape (the one used per default for operator names) need to adjust % \cs{MTgreekupdefault} to be `|sc|', for the math version being defined, or @@ -7386,9 +7599,9 @@ defaultbf,defaultit,defaultsf,defaulttt}} % package; to be examined next time --- which may be a long time in % future!). % -% Unfortunately the |1.3x/1.3y| did some internal renamings here (using +% Unfortunately the \mstrelease{1.3y} did some internal renamings here (using % |@lgr@| in macro names in place of |@greek@|) which were not everywhere -% followed up, and this broke the |selfGreek| option. Fixed at |1.3z|. +% followed up, and this broke the |selfGreek| option. Fixed at \mstrelease{1.3z}. % % \begin{macrocode} \providecommand*\MTgreekupdefault{n} @@ -7442,14 +7655,14 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macro}{\mathgreekit} % \begin{macro}{\mathgreekupbold} % \begin{macro}{\mathgreekitbold} -% The |1.3x| refactoring was done in order to be able to define \cs{alphaup}, +% The \mstrelease{1.3y} refactoring was done in order to be able to define \cs{alphaup}, % etc \dots\ control sequences (\cs{mathchar}'s), as well as the italic ones. % Formerly two math fonts were created but to be used respectively with % lowercase or uppercase Greek. Now we have two fonts indexed by their shape, % and we take advantage to create two math alphabets mapping to the two % defined symbol fonts |mtgreekup| and |mtgreekit|. % -% |1.3za| adds \cs{mathgreekupbold} and \cs{mathgreekitbold}. +% \mstrelease{1.3za} adds \cs{mathgreekupbold} and \cs{mathgreekitbold}. % \begin{macrocode} \ifmst@LGRgreek \DeclareFontEncoding{LGR}{}{} @@ -7484,10 +7697,11 @@ defaultbf,defaultit,defaultsf,defaulttt}} % In case we need the Euler font, we declare it here. It will use % |uzeur.fd| from the \ctanpkg{eulervm} package of Walter~\textsc{Schmidt} % \begin{macrocode} -\ifmst@needeuler\mst@infoline{will use Euler font; command \string\MTEulerScale} -\DeclareSymbolFont{mteulervm}{U}{zeur}{m}{n} -\DeclareSymbolFontAlphabet{\MathEuler}{mteulervm} -\DeclareMathAlphabet{\MathEulerBold}{U}{zeur}{\mst@bold}{n} +\ifmst@needeuler +\mst@infoline{will use Euler font; command \string\MTEulerScale} + \DeclareSymbolFont{mteulervm}{U}{zeur}{m}{n} + \DeclareSymbolFontAlphabet{\MathEuler}{mteulervm} + \DeclareMathAlphabet{\MathEulerBold}{U}{zeur}{\mst@bold}{n} \fi \newcommand*\MTEulerScale[1]{\edef\zeu@Scale{#1}} \let\MathastextEulerScale\MTEulerScale @@ -7534,14 +7748,15 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \cs{psy@scale} will be used to scale the font (see at the % very end of this file). % \begin{macrocode} -\ifmst@needsymbol\mst@infoline{will use Symbol font; command \string\MTSymbolScale} - \def\psy@scale{1} - \DeclareSymbolFont{mtpsymbol}{U}{psy}{m}{n} - \DeclareSymbolFontAlphabet{\MathPSymbol}{mtpsymbol} -\AtBeginDocument{% - \DeclareFontFamily{U}{psy}{}% - \DeclareFontShape{U}{psy}{m}{n}{<->s*[\psy@scale] psyr}{}% -} +\ifmst@needsymbol + \mst@infoline{will use Symbol font; command \string\MTSymbolScale} + \def\psy@scale{1} + \DeclareSymbolFont{mtpsymbol}{U}{psy}{m}{n} + \DeclareSymbolFontAlphabet{\MathPSymbol}{mtpsymbol} + \AtBeginDocument{% + \DeclareFontFamily{U}{psy}{}% + \DeclareFontShape{U}{psy}{m}{n}{<->s*[\psy@scale] psyr}{}% + } \fi \newcommand*\MTSymbolScale[1]{\edef\psy@scale{#1}} \let\MathastextSymbolScale\MTSymbolScale @@ -7553,10 +7768,14 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \end{macro} % \end{macro} % \begin{macro}{\pmvec} -% Definition of a poor man version of the \cs{vec} accent +% Definition of a poor man version of the \cs{vec} accent. +% Done using \cs{protected}\cs{def} at \mstrelease{1.4}. % \begin{macrocode} -\DeclareRobustCommand*\pmvec[1]{\mathord{\stackrel{\raisebox{-.5ex}% -{\tiny\boldmath$\mathord{\rightarrow}$}}{{}#1}}} +\protected\def\pmvec#1{% + \mathord{\stackrel{\raisebox{-.5ex}{\tiny\boldmath$\mathord{\rightarrow}$}}% + {{}#1}% + }% +} % \end{macrocode} % \end{macro} % \begin{macro}{\fouriervec} @@ -7584,7 +7803,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % Some public macros to modify our private internals, and % we will use them also ourself. % -% In version |1.1| we add the possibility to have two +% In version \mstrelease{1.1} we add the possibility to have two % distinct font shapes for letters and digits. So in fact % we could as well have two really unrelated fonts but % this is really not the spirit of the package. @@ -7594,7 +7813,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % same time not modifying the \cs{familydefault} or \cs{romandefault} % etc\dots % -% At time of |1.3za| I considered letting |LGRgreeks| and |selfGreeks| +% At time of \mstrelease{1.3za} I considered letting |LGRgreeks| and |selfGreeks| % support \cs{MTgreekfont} and this needed a chaneg to \cs{MTfamily} % here but I dropped the idea. Too wary of documentation changes. % \begin{macrocode} @@ -7622,14 +7841,14 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macro}{\MTitGreek} % \begin{macro}{\MTupGreek} % \begin{macro}{\MTgreekfont} -% |1.15c|: These new macros can be used in-between calls to \cs{Mathastext}. +% \mstrelease{1.15c}: These new macros can be used in-between calls to \cs{Mathastext}. % They reset the shapes for Greek letters (applies to LGRgreek(s) and % selfGreek(s) options). The \cs{MTgreekfont} presupposes either LGRgreek or % selfGreek (it is inoperant under |LGRgreeks| or |selfGreeks|). % |\MTgreekfont{\familydefault}| is somewhat like using LGRgreeks or % selfGreeks. % -% At time of |1.3za| I let \cs{MTgreekfont} also have an effect under option +% At time of \mstrelease{1.3za} I let \cs{MTgreekfont} also have an effect under option % |LGRgreeks| or |selfGreeks|, via a refactoring which also modified \cs{MTfamily}. % \begin{macrocode} \newcommand*\MTitgreek{\mst@itgreektrue\mst@upgreekfalse\def\mst@greek@select{0}} @@ -7648,55 +7867,359 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \end{macro} % \end{macro} % \end{macro} +% % At (long...) last we now change the font for the letters of the -% latin alphabet. In version |1.1|, Latin letters have their own font +% latin alphabet. In version \mstrelease{1.1}, Latin letters have their own font % (shape). % -% |1.2b| initiated the use of mathematically active letters to insert the italic -% corrections. With version |1.3| the use of math active letters is also for -% extra muglue added before and after the letters. Use of |\@for| to shorten the -% code initiated with release |1.3|. +% \mstrelease{1.2b} |2012/12/28| now that we understand the great advantages of |"8000| +% we do it also for all letters a-z and A-Z to insert automatically the +% italic corrections. See the \hyperref[sec:ic]{discussion} in the user +% manual. Ironically I wrote the code initially for the |italic| option only +% to realize later it was more suitable to using an \emph{upright} text font +% in math mode! So this mathematical activation of the letters is not done if +% the font shape is detected to be |it| or |sl|; to bypass this the command +% \cs{MTicinmath} is provided. +% +% \mstrelease{1.2e} |2013/01/10| corrects a bad oversight of \mstrelease{1.2b} in +% \cs{mst@mathactivate} which made the reproduction of the user manual +% illustrations with |$f_i^i$| impossible. As \cs{mst@mathactivate} was +% originally used also to get the non-letters obey math alphabet while +% maintaining the \TeX{} spacings, it added no extra braces. The braces +% should however be added for expansion of math active letters, in order of +% things like |x^y| to work as expected. (the group braces do not prevent +% ligatures when the letters are arguments to the math alphabet commands, +% the added macros \cs{mst@itcorr} and \cs{mst@before@<letter>} expanding to +% nothing). +% +% Added note |2016/01/06|: it should be explicitly said that the extra +% |{..}| in |\mst@mathactivate| for letters end up creating |\hbox|'es +% around each letter with its extra skips and explicit italic correction, +% when present. These skips are thus set at natural width and do not add +% any break point. +% +% Added note at \mstrelease{1.4}: the extra pair of braces is inserted here +% at \cs{mst@DeclareMathLetter}, not at \cs{mst@mathactivate}. +% +% \mstrelease{1.3} |2013/09/02| extends the use of mathematically active letters to +% allow the user to specify muglue before and after the letter itself (see +% \cs{MTsetmathskips}, below). +% Mathematically active letters were previously used only to add the italic +% correction; the math activation has now been separated and put in +% \cs{MTmathactiveletters}. There is also \cs{MTmathactiveLetters} to allow +% math activation only for the uppercase letters. To cancel the (now default, +% even with option |italic|) math +% activation of letters, there is \cs{MTmathstandardletters}. Version \mstrelease{1.3a} +% removes some silly |\string|'s from the code, which prevented to pass +% macros as first argument to the command. +% +% Added note |2016/01/06|: +% Notice that the initially |\relax| tokens \verb+\mst@[before|after]@<letter>+ +% formed with |\csname...\endcsname| do not modify TeX's math layout: +% |{\relax f\relax}| is like |f| (also for ligatures inside |\mathrm| for +% example). +% +% The code here was refactored at \mstrelease{1.4} and this simplified +% \cs{mst@mathactivate} definition. +% +% The \cs{mst@before}\meta{letter} were renamed at \mstrelease{1.4} into +% \cs{mst@before@}\meta{letter} and are incorporated at the +% \cs{mst@DeclareMathLetter} location. Formerly \cs{mst@}\meta{letter} was +% only the math symbol, now \cs{MTmathcharletter}\meta{letter} is used for that and +% \cs{MTcommandletter}\meta{letter} is the whole thing to which the active letter +% expands (the definition of the active letter done by \cs{mst@mathactivate} +% is done with a \cs{def}, not a \cs{let}). +% \begin{macro}{\mst@DeclareMathLetter} +% +% \mstrelease{1.4b} adds |noletters| option. % \begin{macrocode} -\def\mst@DeclareMathLetter #1{% +\ifmst@noletters + \let\MTmathactiveletters\@empty + \let\MTmathactiveLetters\@empty + \let\MTmathstandardletters\@empty +\else +\def\mst@DeclareMathLetter#1#2#3#4#5{% \DeclareMathSymbol {#1}{\mathalpha}{mtletterfont}{`#1}% - \expandafter - \DeclareMathSymbol \csname mst@#1\endcsname{\mathalpha}{mtletterfont}{`#1}% - \expandafter\mst@addtodo@az\expandafter #1\csname mst@#1\endcsname + \DeclareMathSymbol {#4}{\mathalpha}{mtletterfont}{`#1}% + \def#2{{#3#4#5\mst@itcorr}}% +}% +\@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do{% + \expandafter\expandafter\expandafter\mst@DeclareMathLetter + \expandafter\mst@tmp + \csname MTcommandletter\mst@tmp\expandafter\endcsname + \csname mst@before@\mst@tmp\expandafter\endcsname + \csname MTmathcharletter\mst@tmp\expandafter\endcsname + \csname mst@after@\mst@tmp\endcsname }% -\@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do - {\expandafter\mst@DeclareMathLetter\mst@tmp}% \ifmst@frenchmath \def\mst@font@tbu{mtoperatorfont}% \else \def\mst@font@tbu{mtletterfont}% \fi -\def\mst@DeclareMathLetter #1{% +\def\mst@DeclareMathLetter #1#2#3#4#5{% \DeclareMathSymbol {#1}{\mathalpha}{\mst@font@tbu}{`#1}% - \expandafter - \DeclareMathSymbol \csname mst@#1\endcsname{\mathalpha}{\mst@font@tbu}{`#1}% - \expandafter\mst@addtodo@AZ\expandafter #1\csname mst@#1\endcsname + \DeclareMathSymbol {#4}{\mathalpha}{\mst@font@tbu}{`#1}% + \def#2{{#3#4#5\mst@ITcorr}}% }% -\@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do - {\expandafter\mst@DeclareMathLetter\mst@tmp}% -\let\mst@DeclareMathLetter\relax +\@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{% + \expandafter\expandafter\expandafter\mst@DeclareMathLetter + \expandafter\mst@tmp + \csname MTcommandletter\mst@tmp\expandafter\endcsname + \csname mst@before@\mst@tmp\expandafter\endcsname + \csname MTmathcharletter\mst@tmp\expandafter\endcsname + \csname mst@after@\mst@tmp\endcsname +}% +\def\mst@mathactivate@lowercase{% + \@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do{% + \expandafter\expandafter\expandafter + \mst@mathactivate\expandafter\mst@tmp\csname MTcommandletter\mst@tmp\endcsname{}% + }% +}% +\def\mst@mathactivate@uppercase{% + \@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{% + \expandafter\expandafter\expandafter + \mst@mathactivate\expandafter\mst@tmp\csname MTcommandletter\mst@tmp\endcsname{}% + }% +}% +\def\mst@mathdeactivate@lowercase{% + \@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do{% + \expandafter\mathcode\expandafter`\mst@tmp=\csname MTmathcharletter\mst@tmp\endcsname + }% +}% +\def\mst@mathdeactivate@uppercase{% + \@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{% + \expandafter\mathcode\expandafter`\mst@tmp=\csname MTmathcharletter\mst@tmp\endcsname + }% +}% +% \end{macrocode} +% We redo the definitions with some added layer (silly because will never +% happen in pratice that a letter is Babel-active) related to +% \cs{mst@do@activecase} in \ctanpkg{babel} context. +% \begin{macrocode} +\ifmst@everymath +\else + \def\mst@mathdeactivate@lowercase{% + \@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do{% + \expandafter\mathcode\expandafter`\mst@tmp= + \csname MTmathcharletter\mst@tmp\endcsname + }% + }% + \def\mst@mathdeactivate@uppercase{% + \@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{% + \expandafter\mathcode\expandafter`\mst@tmp= + \csname MTmathcharletter\mst@tmp\endcsname + }% + }% +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\MTmathactiveletters} +% \begin{macro}{\MTmathstandardletters} +% +% Important changes at \mstrelease{1.4}. +% +% Ascii letters are math-activated at package loading time, rather than again and +% again each time math mode is entered. But not under |subdued| mode, then +% the activation is done as part of switching to some math version. +% +% The ordering in this code source is a bit of a mess, and it may be too early +% here to execute \cs{MTmathactiveletters} (I think it is fine now after some +% major moving around of code chunks but will not waste time checking +% it) so this will be postponed to end of package loading. Prior to +% \mstrelease{1.4} \cs{MTmathactiveletters} could be executed here as it only +% set some toggle to be obeyed at every math mode entrance. +% \begin{macrocode} +\def\mst@mathactivateletters{% + \mst@mathactivate@lowercase + \mst@mathactivate@uppercase +}% +\newcommand*\MTmathactiveletters{% + \mst@OnlyIfNotSubdued + \mst@mathactivateletters +}% +\AtEndOfPackage{\MTmathactiveletters}% +% \end{macrocode} +% Duplication due to some legacy reasons, do not rely on these internal +% macro names, beware they change at future release. +% \begin{macrocode} +\def\mst@mathactivateLetters{\mst@activate@uppercase}% +\newcommand*\MTmathactiveLetters{% + \mst@OnlyIfNotSubdued + \mst@mathactivateLetters +}% +\newcommand*\MTmathstandardletters{% + \mst@mathdeactivate@lowercase + \mst@mathdeactivate@uppercase +}% +\fi +% \end{macrocode} +% \end{macro}\end{macro} +% \begin{macro}{\MTicinmath} +% \begin{macro}{\MTICinmath} +% \begin{macro}{\MTnoicinmath} +% \begin{macro}{\MTicalsoinmathxx} +% \cs{MTnoicinmath} can also be used from inside math mode. +% +% \cs{MTicalsoinmathxx} is destined to be used inside +% \cs{mathnormalbold} as I didn't want to add the complication of +% extracting the family number used inside \cs{mathnormalbold} (will +% perhaps come back if I have time to spend on +% |source2e|). Added note |2016/01/06|: this number is a priori simply +% |symmtletterfont+1|. +% +% \cs{MTicinmath} can also be used inside math mode, to revert an +% earlier \cs{MTnoicinmath} from inside the same math group. +% +% \mstrelease{1.3i} |2016/01/06|: For some reason which I have now forgotten I did +% until then: +% \begin{verbatim} +% \def\mst@itcorr{\ifnum\fam=\m@ne\/\else\ifnum\fam=\symmtletterfont\/\fi\fi}% +% \end{verbatim} +% hence italic corrections were also applied inside \cs{mathnormal} (for +% upright fonts; \cs{mathnormalbold} math alphabet was not treated like +% \cs{mathnormal}). I now drop this to be more in sync with the handling +% of the extra skips around letters. Everything gets suppressed inside +% all math alphabets, allowing ligatures, even for \cs{mathnormal}. +% +% \begin{macrocode} +\newcommand*\MTicinmath{% + \MTmathactiveletters + \def\mst@itcorr{\ifnum\fam=\m@ne\/\fi}% + \let\mst@ITcorr\mst@itcorr +} +\newcommand*\MTICinmath{% + \MTmathactiveLetters + \def\mst@ITcorr{\ifnum\fam=\m@ne\/\fi}% +} +\newcommand*\MTnoicinmath{\let\mst@itcorr\@empty\let\mst@ITcorr\@empty} +\newcommand*\MTnoICinmath{\let\mst@ITcorr\@empty} +\newcommand*\MTicalsoinmathxx{% + \ifx\mst@itcorr\@empty\else\def\mst@itcorr{\/}\fi + \ifx\mst@ITcorr\@empty\else\def\mst@ITcorr{\/}\fi +} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro} +% \begin{macro}{\MTsetmathskips} +% \begin{macro}{\MTunsetmathskips} +% \mstrelease{1.3} |2013/09/02|: user level command to specify extra spaces in math mode +% around the letters (only the 7bit a,b,..,z and A,B,..,Z). First parameter is +% the letter, second is the math skip to be inserted before, and third the +% skip to be inserted after; for example \cs{thickmuskip} or explicitly +% |0.1mu|. +% +% For this, letters are made mathematically active. This is now the package +% default (version \mstrelease{1.2} did this only in the absence of option |italic|, or +% more precisely when the font used was not of shape |it| or |sl|). But if +% \cs{MTsetmathskips} has not been used for that letter, the only effect of +% the math activation is, as in \mstrelease{1.2}, to add the italic correction +% automatically, except when the font shape is detected to be |it| or |sl|; in +% these latter cases, although mathematically active, the letter acts in the +% standard way. +% +% The command \cs{MTmathstandardletters} turns off math activation and its +% effects for all letters. +% +% Ligatures within the argument of a math alphabet command are impeached by +% skips; so \cs{MTunsetmathskips} is provided to cancel the skips for one +% specific letter (|f| for example). +% +% \mstrelease{1.3a} |2013/09/04|: I strangely had |\string#1| inside \cs{MTsetmathskips}. +% Phobic of catcode active letters... but with |\string| one needs some +% |\expandafter| to use \cs{MTsetmathskips} in an |\@for| loop for example. It +% is better to allow the first argument to be a macro or anything expanding to +% a letter, and to not be paranoid about improbable catcode active letters +% (the user just has to tame them at the time of the \cs{MTsetmathskip}) so I +% take out these |\string|'s. +% +% \mstrelease{1.3i} |2016/01/06|: the extra skips are suppressed for the arguments of +% math alphabet commands. This applies in particular for amsmath's +% \cs{DeclareMathOperator}. +% +% \begin{macrocode} +\newcommand*\MTsetmathskips[3]{% + \@namedef{mst@before@#1}{\ifnum\fam=\m@ne\mskip#2\relax\fi}% + \@namedef{mst@after@#1}{\ifnum\fam=\m@ne\mskip#3\relax\fi}% +} +\newcommand*\MTunsetmathskips[1]{% + \@namedef{mst@before@#1}{}% + \@namedef{mst@after@#1}{}% +} +% \end{macrocode} +% \end{macro}\end{macro} +% \begin{macro}{\mst@DeclareMathDigit} +% \begin{macro}{\MTmathactivedigits} +% \begin{macro}{\MTmathstandarddigits} +% In version \mstrelease{1.1}, we have now separated digits from letters, so paradoxically +% it is less problematic to give them the |mathalpha| type. +% +% \mstrelease{1.4} had defined some no-op \cs{MTmathstandarddigits} and +% \cs{MTmathactivedigits} but if not under option |nodigits|. As they are +% used in \cs{MTeverymathoff} and \cs{MTeverymathdefault} though this broke +% the option |nodigits| (either with |subdued| or when using \cs{MTversion}). +% +% Defining them as \cs{empty} so that \LaTeX{} defensive mechanism with +% \cs{newcommand} works but this is sooooooo hypothetical context! +% \begin{macrocode} +\let\MTmathactivedigits\empty +\let\MTmathstandarddigits\empty \ifmst@nodigits\else -\def\mst@font@tbu{mtoperatorfont}% + \def\mst@font@tbu{mtoperatorfont}% + \ifmst@symboldigits \def\mst@font@tbu{mtpsymbol}\fi + \ifmst@eulerdigits \def\mst@font@tbu{mteulervm}\fi + \DeclareMathSymbol{0}{\mathalpha}{\mst@font@tbu}{`0}% + \DeclareMathSymbol{1}{\mathalpha}{\mst@font@tbu}{`1}% + \DeclareMathSymbol{2}{\mathalpha}{\mst@font@tbu}{`2}% + \DeclareMathSymbol{3}{\mathalpha}{\mst@font@tbu}{`3}% + \DeclareMathSymbol{4}{\mathalpha}{\mst@font@tbu}{`4}% + \DeclareMathSymbol{5}{\mathalpha}{\mst@font@tbu}{`5}% + \DeclareMathSymbol{6}{\mathalpha}{\mst@font@tbu}{`6}% + \DeclareMathSymbol{7}{\mathalpha}{\mst@font@tbu}{`7}% + \DeclareMathSymbol{8}{\mathalpha}{\mst@font@tbu}{`8}% + \DeclareMathSymbol{9}{\mathalpha}{\mst@font@tbu}{`9}% % \end{macrocode} -% In version |1.1|, we have now separated digits from letters, so paradoxically -% it is less problematic to give them the |mathalpha| type. -% \begin{macrocode} -\ifmst@symboldigits \def\mst@font@tbu{mtpsymbol} \fi -\ifmst@eulerdigits \def\mst@font@tbu{mteulervm} \fi -\DeclareMathSymbol{0}{\mathalpha}{\mst@font@tbu}{`0}% -\DeclareMathSymbol{1}{\mathalpha}{\mst@font@tbu}{`1}% -\DeclareMathSymbol{2}{\mathalpha}{\mst@font@tbu}{`2}% -\DeclareMathSymbol{3}{\mathalpha}{\mst@font@tbu}{`3}% -\DeclareMathSymbol{4}{\mathalpha}{\mst@font@tbu}{`4}% -\DeclareMathSymbol{5}{\mathalpha}{\mst@font@tbu}{`5}% -\DeclareMathSymbol{6}{\mathalpha}{\mst@font@tbu}{`6}% -\DeclareMathSymbol{7}{\mathalpha}{\mst@font@tbu}{`7}% -\DeclareMathSymbol{8}{\mathalpha}{\mst@font@tbu}{`8}% -\DeclareMathSymbol{9}{\mathalpha}{\mst@font@tbu}{`9}% +% \mstrelease{1.4} adds possibility of mathematically active digits. +% \begin{macrocode} + \ifmst@activedigits + \def\mst@DeclareMathDigit #1#2#3{% + \DeclareMathSymbol{#3}{\mathalpha}{\mst@font@tbu}{`#1}% + \def#2{#3}% + }% + \@tfor\mst@tmp:=0123456789\do{% + \expandafter\expandafter\expandafter\mst@DeclareMathDigit + \expandafter\mst@tmp + \csname MTcommanddigit\romannumeral\mst@tmp\expandafter\endcsname + \csname MTmathchardigit\romannumeral\mst@tmp\endcsname + }% + \def\mst@mathactivatedigits{% + \@tfor\mst@tmp:=0123456789\do{% + \expandafter\expandafter\expandafter\mst@mathactivate + \expandafter\mst@tmp\csname MTcommanddigit\romannumeral\mst@tmp\endcsname{}% + }% + }% + \def\MTmathactivedigits{\mst@OnlyIfNotSubdued\mst@mathactivatedigits}% + \MTmathactivedigits + \ifmst@everymath + \def\MTmathstandarddigits{% + \@tfor\mst@tmp:=0123456789\do{% + \expandafter\mathcode\expandafter`\mst@tmp + =\csname MTmathchardigit\romannumeral\mst@tmp\endcsname + }% + }% + \else +% \end{macrocode} +% We inject some extra layer (silly because will never happen in pratice +% that a digit token is Babel-active) related to \cs{mst@do@activecase} in +% \ctanpkg{babel} context. +% \begin{macrocode} + \def\MTmathstandarddigits{% + \@tfor\mst@tmp:=0123456789\do{% + \expandafter\mathcode\expandafter`\mst@tmp + =\csname MTmathchardigit\romannumeral\mst@tmp\endcsname + }% + }% + \fi + \fi \fi % \end{macrocode} +% \end{macro}\end{macro}\end{macro} % When |symboldelimiters| is passed as an option, we use the % Symbol font for the printable characters other than % letters and digits. @@ -7709,7 +8232,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \def\mst@font@tbu{mtoperatorfont}% \fi % \end{macrocode} -% |1.2| adds the tricks to let non letters/digits obey math alphabets. We have +% \mstrelease{1.2} adds the tricks to let non letters/digits obey math alphabets. We have % to double the definitions for easy switch on-off of the mechanism, via a token % list which is put into \cs{everymath} and \cs{everydisplay}. % \begin{macrocode} @@ -7727,7 +8250,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macro}{\mst@@doasterisk} % \begin{macro}{\MTnormalasterisk} % \begin{macro}{\MTactiveasterisk} -% |1.12d| The \cs{ast} or |*| is defined in |fontmath.ltx| as a binary +% \mstrelease{1.12d} The \cs{ast} or |*| is defined in |fontmath.ltx| as a binary % operator from the |symbols| font. Usually the asterisk from the text % font is in a raised position. Previous versions of \mst did nothing % with \cs{ast} but strangely defined |*| to be the one from the text @@ -7740,61 +8263,100 @@ defaultbf,defaultit,defaultsf,defaulttt}} % The user macro \cs{MTlowerast} sets the amount % of lowering to be applied to the text asterisk. % -% |1.12e| Somehow there was a big omission in |1.12d|, the +% \mstrelease{1.12e} Somehow there was a big omission in \mstrelease{1.12d}, the % command \cs{MTlowerast} as described in the manual was missing! % -% nota bene: it is assumed that |*| is of type |other| when \mst -% is loaded... it should neither be active, nor of type |letter|! +% \mstrelease{1.3i} adds \cs{MTnormalasterisk} and \cs{MTactiveasterisk}. +% They do nothing if package is loaded without option |asterisk|. +% +% \mstrelease{1.4} uses \cs{protected} rather than robust commands. +% And implements the support for the new default of not using \cs{everymath}. % -% |1.3i| adds \cs{MTnormalasterisk} and \cs{MTactiveasterisk}. They do nothing -% without option |asterisk|. +% The first two \cs{newcommand*} are because the commands were previously +% defined unconditionally anyhow, in a way making them no-op's without +% option |asterisk|. Finally using \cs{let} here with \cs{empty} with +% the idea of less impact on \TeX{} internals, but losing \LaTeX{} check. % \begin{macrocode} -\def\mst@@doasterisk{\let\ast\mst@ast\mst@mathactivate*{}\mst@ast}% -\newcommand*\MTnormalasterisk {\let\mst@doasterisk\relax} -\newcommand*\MTactiveasterisk {\let\mst@doasterisk\mst@@doasterisk} +\let\MTnormalasterisk\empty +\let\MTactiveasterisk\empty \ifmst@asterisk\mst@infoline{asterisk: \string\ast\space and *} - \AtBeginDocument{% - \everymath\expandafter - {\the\everymath \mst@doasterisk \MTnormalasterisk }% - \everydisplay\expandafter - {\the\everydisplay\mst@doasterisk \MTnormalasterisk }} \ifmst@symbolmisc - \def\mst@bin@ast{% - \mathbin{\mathchoice{\raisebox{-.1\height}% - {\the\textfont\symmtpsymbol\char42}}% - {\raisebox{-.1\height}% - {\the\textfont\symmtpsymbol\char42}}% - {\raisebox{-.1\height}% - {\the\scriptfont\symmtpsymbol\char42}}% - {\raisebox{-.1\height}% - {\the\scriptscriptfont\symmtpsymbol\char42}}}}% + \protected\def\mst@bin@ast{\mathbin{\mathchoice + {\raisebox{-.1\height}{\the\textfont\symmtpsymbol\char42}}% + {\raisebox{-.1\height}{\the\textfont\symmtpsymbol\char42}}% + {\raisebox{-.1\height}{\the\scriptfont\symmtpsymbol\char42}}% + {\raisebox{-.1\height}{\the\scriptscriptfont\symmtpsymbol\char42}}}% + }% \else - \def\mst@bin@ast{% - \mathbin{\mathchoice{\raisebox{-\mst@lowerast}% - {\the\textfont\symmtoperatorfont\char42}}% - {\raisebox{-\mst@lowerast}% - {\the\textfont\symmtoperatorfont\char42}}% - {\raisebox{-\mst@lowerast}% - {\the\scriptfont\symmtoperatorfont\char42}}% - {\raisebox{-\mst@lowerast}% - {\the\scriptscriptfont\symmtoperatorfont\char42}}}}% + \protected\def\mst@bin@ast{\mathbin{\mathchoice + {\raisebox{-\mst@lowerast}{\the\textfont\symmtoperatorfont\char42}}% + {\raisebox{-\mst@lowerast}{\the\textfont\symmtoperatorfont\char42}}% + {\raisebox{-\mst@lowerast}{\the\scriptfont\symmtoperatorfont\char42}}% + {\raisebox{-\mst@lowerast}{\the\scriptscriptfont\symmtoperatorfont\char42}}}% + }% \fi - \def\mst@varfam@ast{\ifnum\fam=\m@ne\mst@bin@ast\else - \mathbin{\mathchoice{\raisebox{-\mst@lowerast}% - {\the\textfont\fam\char42}}% - {\raisebox{-\mst@lowerast}% - {\the\textfont\fam\char42}}% - {\raisebox{-\mst@lowerast}% - {\the\scriptfont\fam\char42}}% - {\raisebox{-\mst@lowerast}% - {\the\scriptscriptfont\fam\char42}}}\fi}% - \MTactiveasterisk - \DeclareRobustCommand*{\mst@ast}{\mst@bin@ast} + \protected\def\mst@varfam@ast{\ifnum\fam=\m@ne + \mst@bin@ast + \else + \mathbin{\mathchoice + {\raisebox{-\mst@lowerast}{\the\textfont\fam\char42}}% + {\raisebox{-\mst@lowerast}{\the\textfont\fam\char42}}% + {\raisebox{-\mst@lowerast}{\the\scriptfont\fam\char42}}% + {\raisebox{-\mst@lowerast}{\the\scriptscriptfont\fam\char42}}}% + \fi}% + \let\mst@ast\mst@bin@ast \newcommand*\MTlowerast[1]{\def\mst@lowerast{#1}} \MTlowerast{.3\height} - \mst@do@easynonletters\expandafter\expandafter\expandafter - {\expandafter\the\expandafter\mst@do@easynonletters - \expandafter\def\csname mst@ast \endcsname{\mst@varfam@ast}} +% \end{macrocode} +% Arguably \mst should have used the ``hard'' non-letters affiliation here. +% Probably too late to change this in 2024... and costly in documentation +% time. +% \begin{macrocode} + \mst@do@easynonletters\expandafter{% + \the\mst@do@easynonletters\let\mst@ast\mst@varfam@ast + }% + \ifmst@everymath + \def\mst@@doasterisk {\let\ast\mst@ast\mst@mathactivate*{}\mst@ast}% + \def\MTnormalasterisk {\let\mst@doasterisk\relax} + \def\MTactiveasterisk {\let\mst@doasterisk\mst@@doasterisk} + \MTactiveasterisk + \AtBeginDocument{% + \everymath\expandafter + {\the\everymath \mst@doasterisk \MTnormalasterisk }% + \everydisplay\expandafter + {\the\everydisplay\mst@doasterisk \MTnormalasterisk }% + }% + \else + \def\MTnormalasterisk{\AtBeginDocument{\MTnormalasterisk}} + \def\MTactiveasterisk{\AtBeginDocument{\MTactiveasterisk}} +% \end{macrocode} +% For legacy reasons the responsiveness to math alphabets is made part of the +% handling of ``easy'' non letters (probably because it is on per default), +% and this causes me problems of internal logic and even more annoyingly of +% documentation. I am leaving this standing because it would be too much of a +% pain at this stage to document a change and it was already quite annoying to +% better document actual situation. +% \begin{macrocode} + \mst@undo@easynonletters\expandafter{% + \the\mst@do@easynonletters\let\mst@ast\mst@bin@ast + }% +% \end{macrocode} +% For legacy reasons the action of \cs{MTactiveasterisk} is not testing if +% in |subdued| mode. +% +% MEMO: if |subdued| there is \cs{MTeverymathoff} added to |\begin{document}| +% near end of package and it will do \cs{MTnormalasterisk}. +% \begin{macrocode} + \AtBeginDocument{% + \let\mst@orig@abd@ast\ast + \edef\MTnormalasterisk{\noexpand\mst@mathdeactivate*{\the\mathcode`\*}% + \let\noexpand\ast\noexpand\mst@orig@abd@ast}% + \def\MTactiveasterisk{\def\ast{\mst@ast}% + \mst@mathactivate*{}\mst@ast + }% + \MTactiveasterisk + } + \fi \fi % \end{macrocode} % \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} @@ -7807,17 +8369,19 @@ defaultbf,defaultit,defaultsf,defaulttt}} % % [(Dec. 2012) should I reexamine these definitive sounding remarks?] % -% |1.3x| of |2022/11/03| adds support for |ncccomma| option. +% \begin{macro}{ncccomma} +% \begin{macro}{decimalcomma} +% \mstrelease{1.3y} of |2022/11/03| adds support for |ncccomma| option. % % Some non-obvious hack is needed for compatibility with our home-made % mechanism of non-letters obeying math alphabet commands. Alternative would -% have been to not load at all \ctanpkg{ncccomma} (or since |1.3zb| +% have been to not load at all \ctanpkg{ncccomma} (or since \mstrelease{1.3zb} % \ctanpkg{decimalcomma}) and provide the functionality purely by our own % means; because here in order to support \cs{MTnonlettersobeymathxx} we are % almost contrived to override quasi entirely the contents of these tiny % packages. % -% |1.3zb| adds support for the |decimalcomma| option. This was mandatory to +% \mstrelease{1.3zb} adds support for the |decimalcomma| option. This was mandatory to % keep a compatibility layer with \ctanpkg{frenchmath} after its |2.7| release % of |2023/12/23|. % @@ -7838,7 +8402,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \RequirePackage{decimalcomma}[2023/12/28]% 1.3 or later % \end{macrocode} % Attention -% that the breaking behavior of \cs{AtBeginDocument} at October 2020 +% that the \textbf{BREAKING CHANGE} to \cs{AtBeginDocument} at October 2020 % \LaTeX{} release means that, \emph{taking into account that \emph{\mst} already has % employed some \emph{\cs{AtBeginDocument}} prior to loading} \ctanpkg{decimalcomma}, any % code here will be executed \textbf{BEFORE} the \cs{AtBeginDocument} material @@ -7855,7 +8419,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % latter for which \ctanpkg{babel-french} has a dectection mechanism, which as % a result avoids the bad interactions with \ctanpkg{numprint} plus its % |autolanguage| option, which are mentioned below in the \ctanpkg{ncccomma} -% branch. So we don't need here the workaround done below is in the +% branch. So we don't need here the workaround done below in the % |ncccomma| branch. Notice though that in both cases, the `intelligent' % comma feature will be applied to the whole document, even inside those % portions where the user has switched to another language such as English. @@ -7884,19 +8448,26 @@ defaultbf,defaultit,defaultsf,defaulttt}} \let\mathcomma\mst@varfam@comma \let\sm@rtcomma\mst@sm@rtcomma } - \else % end of decimalcomma branch - \ifmst@ncccomma - \mst@infoline{loading package ncccomma for `smart comma\string'} - \RequirePackage{ncccomma}% + \ifmst@everymath + \else + \edef\mst@tmp{\mathchardef\mathcomma=\the\mathcode`\,\relax}% + \mst@undo@nonletters\expandafter\expandafter\expandafter + {\expandafter\mst@tmp\the\mst@undo@nonletters}% + \fi + \else % \end{macrocode} % Work around some bad interaction of \ctanpkg{ncccomma}, \ctanpkg{numprint} % with |autolanguage| and \ctanpkg{babel-french}. See % \centeredline{\url{https://github.com/latex3/babel/issues/190}} for -% background. Some hesitation whether I should use the \cs{noextrasfrench} -% to work around \ctanpkg{babel-french} code influencing non-French sections -% in the document. Update: I think the last sentence means I was hesitating -% at time of |1.3x| whether to insert some extra code inside the \cs{noextrasfrench}. +% background. Some hesitation whether I should use the \cs{noextrasfrench} to +% work around \ctanpkg{babel-french} code influencing non-French sections in +% the document. Update: I think the last sentence means I was hesitating at +% time of \mstrelease{1.3y} whether to insert some extra code inside the +% \cs{noextrasfrench}. % \begin{macrocode} + \ifmst@ncccomma + \mst@infoline{loading package ncccomma for `smart comma\string'} + \RequirePackage{ncccomma}% \AtBeginDocument{% \mathcode`\,="8000\relax \@ifpackageloaded{babel}{% @@ -7918,34 +8489,77 @@ defaultbf,defaultit,defaultsf,defaulttt}} \let\mathcomma\mst@varfam@comma \let\NCC@comma\mst@NCC@comma } - \else % neither ncccomma nor decimalcomma + \ifmst@everymath + \else +% \end{macrocode} +% Attention that \ctanpkg{ncccomma} (contrarily to \ctanpkg{icomma} loaded by +% \ctanpkg{decimalcomma} has made the comma math active already when we loaded it. +% So we don't use |\the\mathcode`\,\relax| here. +% \begin{macrocode} + \edef\mst@tmp{\mathchardef\mathcomma=\the\mathcomma\relax}% + \mst@undo@nonletters\expandafter\expandafter\expandafter + {\expandafter\mst@tmp\the\mst@undo@nonletters}% + \fi + \else +% \end{macrocode} +% Neither option |ncccomma| nor |decimalcomma|. The \mstrelease{1.4} non-use +% of \cs{everymath} and consequences is accounted for automatically by +% \cs{mst@addtodo@nonletters}. +% \begin{macrocode} \expandafter\mst@addtodo@nonletters\string,\mathpunct\mst@varfam@comma \fi\fi +% \end{macrocode} +% math dot. +% \begin{macrocode} \DeclareMathSymbol{.}{\mathord}{\mst@font@tbu}{"2E} \DeclareMathSymbol{\mst@varfam@dot}{\mathalpha}{\mst@font@tbu}{"2E} \mst@addtodo@easynonletters\.\mst@varfam@dot - \DeclareMathSymbol{:}{\mathrel}{\mst@font@tbu}{"3A} % relation spacing +% \end{macrocode} +% math colon. +% \begin{macrocode} + \DeclareMathSymbol{:}{\mathrel}{\mst@font@tbu}{"3A} \DeclareMathSymbol{\mst@varfam@colon}{\mathalpha}{\mst@font@tbu}{"3A} \expandafter\mst@addtodo@nonletters\string:\mathrel\mst@varfam@colon \@ifpackageloaded{amsmath} - {} % \colon defined in amsmath.sty in terms of : with some enlarged explicit - % spacing. No need to intervene. - {% no amsmath, use standard punctuation spacing +% \end{macrocode} +% \cs{colon} gets defined in \ctanpkg{amsmath} in terms of |:| with some enlarged explicit +% spacing. No need to intervene. +% \begin{macrocode} + {} +% \end{macrocode} +% No \ctanpkg{amsmath}, use standard punctuation spacing. +% +% The reason for |\et\colon\undefined| is if some package has redefined +% \cs{colon} which then can not be used in \cs{DeclareMathSymbol} anymore (we +% shamelessly overwrite...) +% \begin{macrocode} + {% \let\colon\undefined - % the reason is if some package has redefined \colon which then - % can not be used in \cs{DeclareMathSymbol} anymore (we - % shamelessly overwrite...) \DeclareMathSymbol{\colon}{\mathpunct}{\mst@font@tbu}{"3A} - \mst@do@nonletters\expandafter{\the\mst@do@nonletters + \let\mst@colon\colon +% \end{macrocode} +% \mstrelease{1.3v} uses \cs{protected} for the (optional) \cs{colon} redefinition. +% \begin{macrocode} + \mst@do@nonletters\expandafter{% + \the\mst@do@nonletters + \protected\def\colon{\mathpunct{\mst@varfam@colon}}% + }% % \end{macrocode} -% |1.3v| uses \cs{protected} for the (optional) \cs{colon} redefinition. +% \mstrelease{1.4} needs extras. % \begin{macrocode} - \protected\def\colon{\mathpunct{\mst@varfam@colon}}}% + \ifmst@everymath + \else + \mst@undo@nonletters\expandafter{% + \the\mst@undo@nonletters + \let\colon\mst@colon + }% + \fi } - \DeclareMathSymbol{\mst@varfam@pointvirgule}{\mathalpha}{\mst@font@tbu}{"3B} % \end{macrocode} -% |1.3x| adds |binarysemicolon| option. +% Semi-colon. +% \mstrelease{1.3y} adds |binarysemicolon| option. % \begin{macrocode} + \DeclareMathSymbol{\mst@varfam@pointvirgule}{\mathalpha}{\mst@font@tbu}{"3B} \ifmst@binarysemicolon \mst@infoline{semi-colon set to be of type \string\mathbin} \DeclareMathSymbol{;}{\mathbin}{\mst@font@tbu}{"3B} @@ -7953,21 +8567,22 @@ defaultbf,defaultit,defaultsf,defaulttt}} \else \DeclareMathSymbol{;}{\mathpunct}{\mst@font@tbu}{"3B} \expandafter\mst@addtodo@nonletters\string;\mathpunct\mst@varfam@pointvirgule - \fi % binarysemicolno -\fi % end \ifmst@nopunct else branch + \fi +\fi % \end{macrocode} +% \end{macro}\end{macro} % \begin{macro}{\relbar} % Due to the way = and - are used by \LaTeX{} in arrows, we will % have to redefine \cs{Relbar} and \cs{relbar} in order for % them to preserve their original meanings. % -% |1.15d|: Oct 13, 2012. Belated amendment of the code to be compatible +% \mstrelease{1.15d}: Oct 13, 2012. Belated amendment of the code to be compatible % with Unicode engines in case someone changed the mathcode of -. % However, for the time being I can do it in an easy way only for % \XeTeX, not for \LuaLaTeX. Also I do my modifications to \cs{relbar} % in a manner testing for the presence of amsmath. % -% |1.3v 2019/09/19|: \LaTeX{} of |2019-10-01| defines \cs{leftarrowfill} +% \mstrelease{1.3v} |2019/09/19|: \LaTeX{} of |2019-10-01| defines \cs{leftarrowfill} % and \cs{rightarrowfill} as robust macros, so we do the same. % % I need to put amsmath under surveillance to check if it decides to @@ -7981,49 +8596,48 @@ defaultbf,defaultit,defaultsf,defaulttt}} \else \ifmst@XeOrLua \mst@Umathcharnumdef\mst@minus@sign=\mst@Umathcodenum`\-\relax -%^^A I used this prior to the new \luatexUmathcodenum, as available since TL2013: -%^^A \mathchardef\mst@minus@sign=8704\relax % "2200 +% \end{macrocode} +% I used this prior to the new \cs{luatexUmathcodenum}, as available since TL2013: +% \centeredline{|\mathchardef\mst@minus@sign=8704\relax % "2200|} +%^^A L'alignement est bizarre dans l'output. +% \begin{macrocode} \else \mathchardef\mst@minus@sign=\mathcode`\-\relax \fi \@ifpackageloaded{amsmath} {\def\relbar{\mathrel{\mathpalette\mathsm@sh\mst@minus@sign}}} {\DeclareRobustCommand\relbar{\mathrel{\smash\mst@minus@sign}}} - \ifmst@robust@obsessed@LaTeX@era\expandafter\DeclareRobustCommand - \else\expandafter\def\fi - \rightarrowfill{$\m@th\mathord{\relbar}\mkern-7mu% + \DeclareRobustCommand\rightarrowfill{$\m@th\mathord{\relbar}\mkern-7mu% \cleaders\hbox{$\mkern-2mu\relbar\mkern-2mu$}\hfill \mkern-7mu\mathord\rightarrow$} - \ifmst@robust@obsessed@LaTeX@era\expandafter\DeclareRobustCommand - \else\expandafter\def\fi - \leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu% + \DeclareRobustCommand\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu% \cleaders\hbox{$\mkern-2mu\relbar\mkern-2mu$}\hfill \mkern-7mu\mathord{\relbar}$} \fi % \end{macrocode} % \end{macro} % \begin{macro}{endash} -% |1.1| |2011/01/29|: Producing this next piece of code was not a piece +% \mstrelease{1.1} |2011/01/29|: Producing this next piece of code was not a piece % of cake for a novice like myself!\newline -% |1.11| |2011/02/05|: Compatibility with Unicode (via use of fontspec +% \mstrelease{1.11} |2011/02/05|: Compatibility with Unicode (via use of fontspec % encodings EU1 and EU2)\newline -% |1.12| |2011/02/07|: Improved dealing of Unicode possibility.\newline -% |1.14b| |2011/04/02|: Corrected some very irresponsible bug in the +% \mstrelease{1.12} |2011/02/07|: Improved dealing of Unicode possibility.\newline +% \mstrelease{1.14b} |2011/04/02|: Corrected some very irresponsible bug in the % Unicode part which caused a problem when 10 or more math families have % been allocated.\newline -% |1.15| |2012/09/24|: Added AtBeginDocument to circumvent some amsmath +% \mstrelease{1.15} |2012/09/24|: Added AtBeginDocument to circumvent some amsmath % problem with unicode engines. % -% |1.3l| |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|. +% \mstrelease{1.3l} |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|. % -% |1.3t| |2018/08/22|: fix to very ancient (|2012/12/20|) bug with +% \mstrelease{1.3t} |2018/08/22|: fix to very ancient (|2012/12/20|) bug with % |\DeclareMathSymbol| lacking last argument if encoding not T1, OT1 or % LY1 when setting up math mode to use the en-dash character as minus % sign (PDF\TeX\ engine). % % \begin{macro}{\mst@subduedminus} % \begin{macro}{\mst@nonsubduedminus} -% |1.3t| Further, new macros |\mst@subduedminus| and |\mst@nonsubduedminus|, +% \mstrelease{1.3t} Further, new macros |\mst@subduedminus| and |\mst@nonsubduedminus|, % for the good functioning of the subdued option also in case of % presence of fontspec. This is the only character for which subdued % option works (now) by setting the mathcode on each math version @@ -8034,7 +8648,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % change. This means also that |\MTversion| and not |\mathversion| % must be used for good functioning. % -% |1.3u| improves the handling of the minus sign by letting it be compatible +% \mstrelease{1.3u} improves the handling of the minus sign by letting it be compatible % with math versions (and not only with the with subdued mechanism but all % math versions) having varying font encodings, even possibly classic 8bit % font encoding mixed with TU encoding for Unicode engines. For this it is @@ -8047,9 +8661,9 @@ defaultbf,defaultit,defaultsf,defaulttt}} % This is counter-intuitive and breaks expectations. % \end{quotation} % -% But the |1.3u| mechanism with \cs{mst@UmathchardefWorkAround@i} introduced a +% But the \mstrelease{1.3u} mechanism with \cs{mst@UmathchardefWorkAround@i} introduced a % bug which showed under option |noendash| (hence also |symboldelimiters|) with -% Unicode engines. Fixed at |1.3w|. +% Unicode engines. Fixed at \mstrelease{1.3w}. % \begin{macrocode} \let\mst@subduedminus\empty \let\mst@nonsubduedminus\empty @@ -8063,7 +8677,8 @@ defaultbf,defaultit,defaultsf,defaulttt}} {\csname\mst@tmp@enc\string\textendash\endcsname} \DeclareMathSymbol{#2}{\mathalpha}{mtoperatorfont} {\csname\mst@tmp@enc\string\textendash\endcsname} - \fi}% mst@dothe@endashstuff + \fi +}% \def\mst@dothe@emdashstuff#1#2#3{% \edef\mst@tmp@enc{#3}% \if1\mst@OneifUniEnc @@ -8074,7 +8689,8 @@ defaultbf,defaultit,defaultsf,defaulttt}} {\csname\mst@tmp@enc\string\textemdash\endcsname} \DeclareMathSymbol{#2}{\mathalpha}{mtoperatorfont} {\csname\mst@tmp@enc\string\textemdash\endcsname} - \fi}% mst@dothe@emdashstuff + \fi +}% \def\mst@dothe@hyphenstuff#1#2{% \DeclareMathSymbol{#1}{\mathbin}{\mst@font@tbu}{"2D}% \DeclareMathSymbol{#2}{\mathalpha}{\mst@font@tbu}{"2D}% @@ -8090,9 +8706,9 @@ defaultbf,defaultit,defaultsf,defaulttt}} \csname mst@minus@mv\math@version\endcsname \relax \else - \mathcode`\-=\@nameuse{mst@minus@mv\math@version}% self-delimiting + \mathcode`\-=\@nameuse{mst@minus@mv\math@version}% \fi - }% \mst@nonsubduedminus + }% % \end{macrocode} % The above works only if the \cs{mst@minus@mv<name>} was really % defined via \cs{Umathchardef}. If it was defined via \cs{DeclareMathSymbol} @@ -8101,8 +8717,8 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macrocode} \ifmst@endash\else\ifmst@emdash\else \def\mst@nonsubduedminus{% - \mathcode`\-=\@nameuse{mst@minus@mv\math@version}% self-delimiting - }% non Umathchardef \mst@minus@mv<mathversion> macros + \mathcode`\-=\@nameuse{mst@minus@mv\math@version}% + }% \fi\fi \fi \def\mst@UmathchardefWorkAround@i @@ -8112,7 +8728,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \end{macro}\end{macro}\end{macro} % \begin{macro}{\mst@hbar@mvnormal} % \begin{macro}{\mst@ltbar@mvnormal} -% |2011/01/31|, |1.1| I decide to settle the question of the |\hbar|. The +% |2011/01/31|, \mstrelease{1.1} I decide to settle the question of the |\hbar|. The % \LaTeX{} definition is |\def\hbar{{\mathchar'26\mkern-9muh}}| % and its advantage is that |h| is in the correct font. But of course not % the macron character (|\=|, |\bar|). And anyway |amsfonts| uses a @@ -8125,26 +8741,26 @@ defaultbf,defaultit,defaultsf,defaulttt}} % (as an aside, I am only now (April 2, 2011) aware that the package % |mathtools| provides the |mathrlap| etc... ) % -% |1.3l 2016/01/29|: anticipating TL2016 fontspec's switch to |TU|. +% \mstrelease{1.3l} |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|. % -% |1.3u 2019/08/20|: encoding (8bits) agnostic construct for hbar, using same +% \mstrelease{1.3u} |2019/08/20|: encoding (8bits) agnostic construct for hbar, using same % method as for |mathaccents| option. I should add some way to adjust the % vertical positioning. % % On this occasion I replace |h| by |\mst@h| because the mechanism for % before and after skips does not interact well with the rlap construct. % -% |1.3v 2019/09/19| adapts to maintain the robustness of \cs{hbar} which now +% \mstrelease{1.3v} |2019/09/19| adapts to maintain the robustness of \cs{hbar} which now % applies with \LaTeX{} |2019-10-01|. % -% |1.3w| works around \url{https://github.com/latex3/latex2e/issues/216} via +% \mstrelease{1.3w} works around \url{https://github.com/latex3/latex2e/issues/216} via % \cs{mst@DeclareMathAccent}. The upstream bug affected the definition of % \cs{mst@ltbar@mvnormal} and broke usage of \cs{Mathastext} in preamble. % -% |1.3w| also fixes oversight that \cs{hbar} may have been redefined via +% \mstrelease{1.3w} also fixes oversight that \cs{hbar} may have been redefined via % \cs{DeclareMathSymbol} by some package (e.g. |amsfonts|) and with \LaTeX{} % |2019-10-01| this means \cs{hbar<space>} is now undefined. Modifying it -% changed nothing to \cs{hbar} behaviour in such circumstances. Finally we +% changed nothing to \cs{hbar} behavior in such circumstances. Finally we % opt for a \cs{protected} \cs{hbar} and choose to ignore completely if % there is a \cs{hbar<space>} or not. To avoid extra steps we do not % undefine it if it exists, because we would need to restore it in @@ -8161,7 +8777,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \def\mst@mathrlapinternal#1#2{\rlap{$\mathsurround=0pt#1{#2}$}} \def\mst@dothe@hbarstuff#1#2#3{% \edef\mst@tmp@enc{#3}% - \if1\mst@OneifUniEnc % Unicode engine and font + \if1\mst@OneifUniEnc \mst@Umathchardef#1="7 \symmtletterfont "0127 \relax %% or 210F? \else \begingroup @@ -8170,13 +8786,13 @@ defaultbf,defaultit,defaultsf,defaulttt}} \mst@DeclareMathAccent{#2}{\mathalpha}{mtletterfont}% {\csname\mst@tmp@enc\string\=\endcsname{}}% \endgroup - \protected\def#1{\mst@mathrlap{#2{\ }}\mst@h}% + \protected\def#1{\mst@mathrlap{#2{\ }}\MTmathcharletterh}% \fi -}% end of \mst@dothe@hbarstuff +}% % \end{macrocode} % \end{macro} % \end{macro} -% |1.15d|: Oct 13, 2012. The \cs{mathcode} thing with = is (belatedly, +% \mstrelease{1.15d}: Oct 13, 2012. The \cs{mathcode} thing with = is (belatedly, % sorry!) made Unicode compatible. % \begin{macro}{+,=,\Relbar} % \begin{macrocode} @@ -8246,7 +8862,8 @@ defaultbf,defaultit,defaultsf,defaulttt}} % sequences can not be simultaneously math symbols and math delimiters, % thus, this complicates things for the mathastextification. % \begin{macrocode} -\ifmst@noparen\else\mst@infoline{parentheses \string( \string) \string[ \string] and slash \string/} +\ifmst@noparen\else +\mst@infoline{parentheses \string( \string) \string[ \string] and slash \string/} \ifmst@nosmalldelims \DeclareMathSymbol{(}{\mathopen}{\mst@font@tbu}{"28} \DeclareMathSymbol{)}{\mathclose}{\mst@font@tbu}{"29} @@ -8287,17 +8904,22 @@ defaultbf,defaultit,defaultsf,defaulttt}} % other math symbol fonts they do respect the encoding of the CM symbols and % largesymbols, so this is 90\% safe. But in truth I should extract from the % meaning of \cs{backslash} the |delcode|. +% +% At \mstrelease{1.4} I am a bit perplexed at the \cs{mathalpha} here. +% Adding a a \cs{mst@mathord@backslash} for matters of option |noeverymath|. % \begin{macrocode} \DeclareMathDelimiter{\mst@varfam@backslash} {\mathalpha}{symbols}{"6E}{largesymbols}{"0F} + \let\mst@mathord@backslash\backslash \else \DeclareMathDelimiter{<}{\mathopen}{\mst@font@tbu}{"3C}{largesymbols}{"0A} \DeclareMathDelimiter{>}{\mathclose}{\mst@font@tbu}{"3E}{largesymbols}{"0B} % \end{macrocode} % There is no backslash in the Symbol font hence |mtoperatorfont| here. % \begin{macrocode} - \DeclareMathDelimiter{\backslash} + \DeclareMathDelimiter{\mst@mathord@backslash} {\mathord}{mtoperatorfont}{"5C}{largesymbols}{"0F} + \let\backslash\mst@mathord@backslash \DeclareMathDelimiter{\mst@varfam@backslash} {\mathalpha}{mtoperatorfont}{"5C}{largesymbols}{"0F} \fi @@ -8309,17 +8931,38 @@ defaultbf,defaultit,defaultsf,defaulttt}} \expandafter\mst@addtodo@nonletters\string>\mathrel\mst@varfam@more \mst@do@easynonletters\expandafter{\the\mst@do@easynonletters \let\backslash\mst@varfam@backslash} +% \end{macrocode} +% Extras for \mstrelease{1.4} are needed: +% \begin{macrocode} +\ifmst@everymath +\else + \mst@undo@easynonletters\expandafter{\the\mst@undo@easynonletters + \let\backslash\mst@mathord@backslash} +\fi \DeclareMathSymbol{\setminus}{\mathbin}{mtoperatorfont}{"5C} +\let\mst@setminus\setminus \DeclareMathSymbol{\mst@varfam@setminus}{\mathalpha}{mtoperatorfont}{"5C} % \end{macrocode} -% |1.3v| adds a \cs{protected} here for \cs{setminus}. +% \mstrelease{1.3v} adds a \cs{protected} here for \cs{setminus}. % \begin{macrocode} -\mst@do@nonletters\expandafter{\the\mst@do@nonletters - \protected\def\setminus{\mathbin{\mst@varfam@setminus}}} +\mst@do@nonletters\expandafter{% + \the\mst@do@nonletters + \protected\def\setminus{\mathbin{\mst@varfam@setminus}}% +} +% \end{macrocode} +% Extras for \mstrelease{1.4} are needed: +% \begin{macrocode} +\ifmst@everymath +\else + \mst@undo@nonletters\expandafter{% + \the\mst@undo@nonletters + \let\setminus\mst@setminus + } +\fi % \end{macrocode} % \end{macro}\end{macro}\end{macro} % \begin{macro}{\models} -% |1.15d|: 13 oct 2012. Before modifying \string| we must preserve \cs{models}. +% \mstrelease{1.15d}: 13 oct 2012. Before modifying \string| we must preserve \cs{models}. % \begin{macrocode} \ifmst@XeOrLua \mst@Umathcharnumdef\mst@vert@bar=\mst@Umathcodenum`\|\relax @@ -8335,7 +8978,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % it used to be anyhow, so it is too late. Or not (2019)? maybe I % \emph{should} do something here... % -% |1.3v 2019/09/19|: I discover this rather radical legacy +% \mstrelease{1.3v} |2019/09/19|: I discover this rather radical legacy % \verb+\def\vert{|}+, which is done here once in the preamble, but I leave % it unmodified apart from prefixing it with \cs{protected}. I also add a % \cs{protected} for the definition of \cs{mid} (which applies only under @@ -8349,34 +8992,53 @@ defaultbf,defaultit,defaultsf,defaulttt}} \protected\def\vert{|} \DeclareMathSymbol{\mst@varfam@vbar}{\mathalpha}{\mst@font@tbu}{124} \mst@addtodo@easynonletters\|\mst@varfam@vbar -\let\mid\undefined % 1.3: to avoid problems with some packages +\let\mid\undefined \DeclareMathSymbol{\mid}{\mathrel}{\mst@font@tbu}{124} -\mst@do@nonletters\expandafter{\the\mst@do@nonletters - \protected\def\mid{\mathrel\mst@varfam@vbar}} +\let\mst@mid\mid +\mst@do@nonletters\expandafter{% + \the\mst@do@nonletters + \protected\def\mid{\mathrel\mst@varfam@vbar}% +} +% \end{macrocode} +% Extras for \mstrelease{1.4} are needed: +% \begin{macrocode} +\ifmst@everymath +\else + \mst@undo@nonletters\expandafter{% + \the\mst@undo@nonletters + \let\mid\mst@mid + } +\fi % \end{macrocode} % \begin{macro}{\MTexplicitbraces-}\begin{macro}{obeymathxx} % \begin{macro}{\MTexplicitbraces-}\begin{macro}{donotobeymathxx} -% Braces. With version |1.2|, |\{| and |\}| will not be acceptable as +% Braces. With version \mstrelease{1.2}, |\{| and |\}| will not be acceptable as % delimiters anymore if the redefinitions below in \cs{mst@dobraces} are -% enacted. But they will obey math alphabets. Improvements in |1.2a|, to +% enacted. But they will obey math alphabets. Improvements in \mstrelease{1.2a}, to % preserve robustness. % -% For |1.3| I make |\lbrace| and |\rbrace| undefined first, else problems +% For \mstrelease{1.3} I make |\lbrace| and |\rbrace| undefined first, else problems % may arise with some packages. % -% |1.3e| suppresses under option +% \mstrelease{1.3e} suppresses under option % |nosmalldelims| the definitions of |\lbrace| and |\rbrace| as math % symbols as this made |\left\lbrace| cause an error, it was a bug. % -% LaTeX2e defines |\{| and |\}| as robust commands for a long time +% (obsolete) LaTeX2e defines |\{| and |\}| as robust commands since a long time % (I don't know since when). The \mst redefinition is done only if user % has executed \cs{MTexplicitbracesobeymathxx}, and it is done only when % entering math mode, but there could be some |\hbox| inside math, hence % it has to be careful to be valid in text too. % -% |1.3v| maintains strict \LaTeX2e robustness for |\{| and |\}|. +% \mstrelease{1.3v} maintains strict \LaTeX2e robustness for |\{| and |\}|. % This assumes no one fiddled with |\{| and |\}| proper (without space % in the name). +% +% \LaTeX{} made |\{| and |\}| \cs{protected}, not robust, at its +% |2020-02-02| release, so the code used by \mst under +% \cs{MTexplicitbracesobeymathxx} toggle remained without effect since +% as it configured a change to |\{<space>| and |\}<space>|. Fixed at +% \mstrelease{1.4}. % \begin{macrocode} \ifmst@nosmalldelims \else @@ -8388,28 +9050,46 @@ defaultbf,defaultit,defaultsf,defaulttt}} \fi \DeclareMathSymbol{\mst@varfam@lbrace}{\mathalpha}{\mst@font@tbu}{123} \DeclareMathSymbol{\mst@varfam@rbrace}{\mathalpha}{\mst@font@tbu}{125} -\DeclareRobustCommand*{\mst@lbrace} - {\ifmmode\mathopen\mst@varfam@lbrace\else\textbraceleft\fi} -\DeclareRobustCommand*{\mst@rbrace} - {\ifmmode\mathclose\mst@varfam@rbrace\else\textbraceright\fi} -\mst@do@nonletters\expandafter{\the\mst@do@nonletters - \mst@dobraces{\expandafter\let\csname\string{ \expandafter\endcsname - \csname mst@lbrace \endcsname - \expandafter\let\csname\string} \expandafter\endcsname - \csname mst@rbrace \endcsname}} -\fi % end of \ifmst@alldelims +% \end{macrocode} +% \begin{macrocode} +\protected\def\mst@lbrace{\ifmmode\mathopen\mst@varfam@lbrace\else\textbraceleft\fi} +\protected\def\mst@rbrace{\ifmmode\mathclose\mst@varfam@rbrace\else\textbraceright\fi} +\mst@do@nonletters\expandafter{% + \the\mst@do@nonletters + \mst@dobraces{\let\{\mst@lbrace\let\}\mst@rbrace}% +} +\fi \newcommand*{\MTexplicitbracesobeymathxx}{\let\mst@dobraces\@firstofone} \newcommand*{\MTexplicitbracesdonotobeymathxx}{\let\mst@dobraces\@gobble} +% \end{macrocode} +% Extras for \mstrelease{1.4} are needed: +% \begin{macrocode} +\ifmst@everymath +\else + \renewcommand*\MTexplicitbracesobeymathxx{% + \let\mst@dobraces\@firstofone + \MTnonlettersobeymathxx + }% + \renewcommand*\MTexplicitbracesdonotobeymathxx{% + \let\mst@dobraces\@gobble + \protected\def\{{\ifmmode \lbrace \else \textbraceleft \fi}% + \protected\def\}{\ifmmode \rbrace \else \textbraceright \fi}% + }% + \mst@undo@nonletters\expandafter{\the\mst@undo@nonletters + \protected\def\{{\ifmmode \lbrace \else \textbraceleft \fi}% + \protected\def\}{\ifmmode \rbrace \else \textbraceright \fi}% + }% +\fi \MTexplicitbracesdonotobeymathxx % \end{macrocode} % \end{macro}\end{macro}\end{macro}\end{macro} % \end{macro}\end{macro} % \begin{macro}{specials} -% \leavevmode\kern\parindent |1.14b| |2011/04/02|: the redefinitions of +% \leavevmode\kern\parindent \mstrelease{1.14b} |2011/04/02|: the redefinitions of % \#, \$, \% and \& were buggy (this showed up when 10 or more math % families had been created). % -% |1.15f| |2012/10/23|: the code, although working, was perhaps a bit insane +% \mstrelease{1.15f} |2012/10/23|: the code, although working, was perhaps a bit insane % and % had definitions which could surprise other packages. For example, it did:\\ % \null\hspace{1cm}|\renewcommand{\%}{\ifmmode\mt@mmode@percent\else\char37\relax\fi}|\\ @@ -8426,60 +9106,80 @@ defaultbf,defaultit,defaultsf,defaulttt}} % mathcode. So here it is \emph{not} a redefinition of the control sequences, % purely an adjustment of mathcodes. % -% |1.2d| |2013/01/01|: previous versions imposed the variable family type. I +% \mstrelease{1.2d} |2013/01/01|: previous versions imposed the variable family type. I % hereby make it possible to de-activate this feature with the macro % \cs{MTeasynonlettersdonotobeymathxx}. Besides, I have absolutely no idea % why I had different looking code depending on the engine \XeTeX, \LuaTeX\ or % default. Removed. % -% |1.3c| |2013/12/14|: I have absolutely no idea why I removed the \XeTeX\ -% and \LuaTeX\ code at the time of |1.2d|! the code for tex/pdftex engine +% \mstrelease{1.3c} |2013/12/14|: I have absolutely no idea why I removed the \XeTeX\ +% and \LuaTeX\ code at the time of \mstrelease{1.2d}! the code for tex/pdftex engine % could not accomodate more than 16 math families. Code for \XeTeX\ and % \LuaTeX\ again added. (and since TL2013 no more problems with % |\luatexUmathcode|.) +% +% \mstrelease{1.4} has done slight refactoring here to share more code related +% to math activation across the two branches. % \begin{macrocode} \ifmst@nospecials \else - \mst@infoline{\string\#\space\string\mathdollar\space - \string\%\space\string\&\space} + \mst@infoline{\string\#\space\string\mathdollar\space + \string\%\space\string\&\space} \ifmst@XeOrLua - \mst@Umathcode`\#=0 \symmtoperatorfont "23 \relax - \mst@Umathchardef\mathdollar=0 \symmtoperatorfont "24 \relax - \mst@Umathcode`\%=0 \symmtoperatorfont "25 \relax - \mst@Umathcode`\&=0 \symmtoperatorfont "26 \relax - \mst@do@easynonletters\expandafter{% - \the\mst@do@easynonletters - \mst@Umathcode`\#=7 \symmtoperatorfont "23 \relax - \mst@Umathchardef\mathdollar=7 \symmtoperatorfont "24 \relax - \mst@Umathcode`\%=7 \symmtoperatorfont "25 \relax - \mst@Umathcode`\&=7 \symmtoperatorfont "26 \relax - } + \mst@Umathcode`\#=0 \symmtoperatorfont "23 \relax + \mst@Umathchardef\mathdollar=0 \symmtoperatorfont "24 \relax + \mst@Umathcode`\%=0 \symmtoperatorfont "25 \relax + \mst@Umathcode`\&=0 \symmtoperatorfont "26 \relax + \mst@Umathchardef\mst@varfam@mathhash = 7 \symmtoperatorfont "23 \relax + \mst@Umathchardef\mst@varfam@mathdollar = 7 \symmtoperatorfont "24 \relax + \mst@Umathchardef\mst@varfam@mathpercent = 7 \symmtoperatorfont "25 \relax + \mst@Umathchardef\mst@varfam@mathampersand = 7 \symmtoperatorfont "26 \relax + \mst@addtodo@easynonletters@U\#\mst@varfam@mathhash + \mst@addtodo@easynonletters@U\%\mst@varfam@mathpercent + \mst@addtodo@easynonletters@U\&\mst@varfam@mathampersand \else - \count@=\symmtoperatorfont - \multiply\count@ by \@cclvi - \advance\count@ by 35 - \mathcode`\#\count@ - \advance\count@ by \@ne - \mathchardef\mathdollar\count@ - \advance\count@ by \@ne - \mathcode`\%\count@ - \advance\count@ by \@ne - \mathcode`\&\count@ - \count@=\symmtoperatorfont - \multiply\count@ by \@cclvi - \advance\count@ by 28707 % = "7023 - \mathchardef\mst@varfam@mathhash\count@ - \advance\count@ by \@ne - \mathchardef\mst@varfam@mathdollar\count@ - \advance\count@ by \@ne - \mathchardef\mst@varfam@mathpercent\count@ - \advance\count@ by \@ne - \mathchardef\mst@varfam@mathampersand\count@ + \count@=\symmtoperatorfont + \multiply\count@ by \@cclvi + \advance\count@ by 35 + \mathcode`\#\count@ + \advance\count@ by \@ne + \mathchardef\mathdollar\count@ + \advance\count@ by \@ne + \mathcode`\%\count@ + \advance\count@ by \@ne + \mathcode`\&\count@ + \count@=\symmtoperatorfont + \multiply\count@ by \@cclvi + \advance\count@ by 28707 % = "7023 + \mathchardef\mst@varfam@mathhash\count@ + \advance\count@ by \@ne + \mathchardef\mst@varfam@mathdollar\count@ + \advance\count@ by \@ne + \mathchardef\mst@varfam@mathpercent\count@ + \advance\count@ by \@ne + \mathchardef\mst@varfam@mathampersand\count@ + \mst@addtodo@easynonletters\#\mst@varfam@mathhash + \mst@addtodo@easynonletters\%\mst@varfam@mathpercent + \mst@addtodo@easynonletters\&\mst@varfam@mathampersand + \fi +% \end{macrocode} +% It is possible to mathematically activate the dollar sign, and to use +% it in math mode as |\string$|... well, how many documents will have +% done that? But we do not modify the mathcode of the |$| character +% anyhow, so why should I add here a \cs{mst@OnlyIfNotMathActive}? +% There is no good reason for that. +% \begin{macrocode} \mst@do@easynonletters\expandafter{\the\mst@do@easynonletters - \mathcode`\#=\mst@varfam@mathhash - \let\mathdollar\mst@varfam@mathdollar - \mathcode`\%=\mst@varfam@mathpercent - \mathcode`\&=\mst@varfam@mathampersand} + \let\mathdollar\mst@varfam@mathdollar}% +% \end{macrocode} +% Extras for \mstrelease{1.4} are needed. Here too we do not worry +% about math active dollar character. +% \begin{macrocode} + \ifmst@everymath\else + \edef\mst@tmp{\ifmst@XeOrLua\mst@Umathcharnumdef\else\mathchardef\fi + \mathdollar=\the\mathdollar\relax}% + \mst@undo@easynonletters\expandafter\expandafter\expandafter + {\expandafter\mst@tmp\the\mst@undo@easynonletters}% \fi \fi % \end{macrocode} @@ -8495,7 +9195,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % manipulations, but well, life is finite. % \begin{macro}{\prod} % \begin{macro}{\sum} -% |1.13b|: I correct the brutal re-definitions of \cs{prod} and \cs{sum} from +% \mstrelease{1.13b}: I correct the brutal re-definitions of \cs{prod} and \cs{sum} from % the earlier versions of the package; most of the time the Symbol glyphs do % appear to be too small in display mode. The new redefinitions do have some % defects: |$\displaystyle\prod_1^2$| changes the position of limits but not @@ -8506,40 +9206,50 @@ defaultbf,defaultit,defaultsf,defaulttt}} % % October 2012: maybe I should re-examine what I did? % -% |1.3c| (|2013/12/14|) renames |\defaultprod| to |\MToriginalprod| and +% \mstrelease{1.3c} (|2013/12/14|) renames |\defaultprod| to |\MToriginalprod| and % |\defaultsum| to % |\MToriginalsum|. % -% |1.3v| hesitates about making robust here \cs{prod} and \cs{sum}. Finally I +% \mstrelease{1.3v} hesitates about making robust here \cs{prod} and \cs{sum}. Finally I % use \cs{protected} for them. +% +% \mstrelease{1.4} finally replaces all control sequences defines earlier via +% \cs{DeclareRobustCommand} to be defined using \cs{protected}\cs{def}. It +% also removes \cs{mst@prod} and \cs{mst@sum} which were aliases of +% \cs{MToriginalprod} and \cs{MToriginalsum}, and having both must have +% been some left-over of earlier versions in 2012 or 2013 (unchecked). % \begin{macrocode} -\ifmst@symbolmisc\mst@infoline{symbolmisc: miscellaneous math symbols from Symbol font} -\let\mst@prod\prod +\ifmst@symbolmisc +\mst@infoline{symbolmisc: miscellaneous math symbols from Symbol font} \let\MToriginalprod\prod \DeclareMathSymbol{\prodpsy}{\mathop}{mtpsymbol}{213} -\protected\def\prod{\ifinner\prodpsy\else\mst@prod\fi} -\let\mst@sum\sum +\protected\def\prod{\ifinner\prodpsy\else\MToriginalprod\fi} \let\MToriginalsum\sum \DeclareMathSymbol{\sumpsy}{\mathop}{mtpsymbol}{229} -\protected\def\sum{\ifinner\sumpsy\else\mst@sum\fi} +\protected\def\sum{\ifinner\sumpsy\else\MToriginalsum\fi} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macrocode} \DeclareMathSymbol{\mst@implies}{\mathrel}{mtpsymbol}{222} -\DeclareRobustCommand*{\implies}{\;\mst@implies\;} +\protected\def\implies{\;\mst@implies\;} \DeclareMathSymbol{\mst@impliedby}{\mathrel}{mtpsymbol}{220} -\DeclareRobustCommand*{\impliedby}{\;\mst@impliedby\;} -\DeclareRobustCommand*{\iff}{\;\mst@impliedby\mathrel{\mkern-3mu}\mst@implies\;} +\protected\def\impliedby{\;\mst@impliedby\;} +\protected\def\iff{\;\mst@impliedby\mathrel{\mkern-3mu}\mst@implies\;} \DeclareMathSymbol{\mst@iff}{\mathrel}{mtpsymbol}{219} -\DeclareRobustCommand*{\shortiff}{\;\mst@iff\;} -\DeclareMathSymbol{\mst@to}{\mathrel}{mtpsymbol}{174} +\protected\def\shortiff{\;\mst@iff\;} +% \end{macrocode} +% \mstrelease{1.4} drops defining a \cs{mst@to} and employs \cs{to} +% in subsequent definitions +% \begin{macrocode} +\let\to\relax +\DeclareMathSymbol{\to}{\mathrel}{mtpsymbol}{174} \DeclareMathSymbol{\mst@trait}{\mathrel}{mtpsymbol}{190} -\DeclareRobustCommand*\to{\mst@to} -\DeclareRobustCommand*\longto{\mkern2mu\mst@trait\mathrel{\mkern-10mu}\mst@to} -\DeclareRobustCommand*\mapsto{\mapstochar\mathrel{\mkern0.2mu}\mst@to} -\DeclareRobustCommand*\longmapsto{% -\mapstochar\mathrel{\mkern2mu}\mst@trait\mathrel{\mkern-10mu}\mst@to} +\protected\def\longto{\mkern2mu\mst@trait\mathrel{\mkern-10mu}\to} +\protected\def\mapsto{\mapstochar\mathrel{\mkern0.2mu}\to} +\protected\def\longmapsto{% + \mapstochar\mathrel{\mkern2mu}\mst@trait\mathrel{\mkern-10mu}\to +} \DeclareMathSymbol{\aleph}{\mathord}{mtpsymbol}{192} \DeclareMathSymbol{\inftypsy}{\mathord}{mtpsymbol}{165} \DeclareMathSymbol{\emptyset}{\mathord}{mtpsymbol}{198} @@ -8593,7 +9303,8 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macro}{symbolre} % I like the \cs{Re} and \cs{Im} from Symbol, so I overwrite the CM ones. % \begin{macrocode} -\ifmst@symbolre\mst@infoline{symbolre: \string\Re\space and \string\Im\space from Symbol font} +\ifmst@symbolre +\mst@infoline{symbolre: \string\Re\space and \string\Im\space from Symbol font} \DeclareMathSymbol{\Re}{\mathord}{mtpsymbol}{"C2} \DeclareMathSymbol{\Im}{\mathord}{mtpsymbol}{"C1} \DeclareMathSymbol{\DotTriangle}{\mathord}{mtpsymbol}{92} @@ -8603,12 +9314,12 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macro}{Greek letters} % LGRgreek $>$ selfGreek $>$ eulergreek $>$ symbolgreek % -% |1.11| I correct some bugs on how eulergreek and +% \mstrelease{1.11} I correct some bugs on how eulergreek and % symbolgreek interacted. % -% |1.12b| more bug fixes. +% \mstrelease{1.12b} more bug fixes. % -% |1.13| +% \mstrelease{1.13} % % * Option LGRgreek. % @@ -8616,10 +9327,10 @@ defaultbf,defaultit,defaultsf,defaulttt}} % the default shape is now the one for letters, not for operator-names % and digits. This complies to the ISO standard. % -% * bugfix: version |1.12b| did not define the \cs{omicron} in the +% * bugfix: version \mstrelease{1.12b} did not define the \cs{omicron} in the % case when no Greek-related option was passed to the package. % -% |1.13d| has new macros |\MTstandardgreek| and |\MTcustomgreek|. +% \mstrelease{1.13d} has new macros |\MTstandardgreek| and |\MTcustomgreek|. % And in the subdued case |\MTstandardgreek| is done when switching to % the normal or bold math versions (previously something like this % was only done in case of |LGRgreek| option. ) @@ -8672,13 +9383,13 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macrocode} \ifx\mst@mathord\mathord % \end{macrocode} -% symbolgreek but neither eulergreek nor selfGreek -% \begin{macrocode} -%% attention le P de Symbol est un \Pi pas un \Rho +% \noindent symbolgreek but neither eulergreek nor selfGreek\newline +% Attention le P de Symbol est un \cs{Pi} pas un \cs{Rho}.\newline +% Attention le X de Symbol est un \cs{Xi} pas un \cs{Chi}.\newline +% Attention le F de Symbol est un \cs{Phi}. Il n'y a pas de \cs{Digamma}. +% \begin {macrocode} \DeclareMathSymbol{\mst@Rho}{\mathord}{mtpsymbol}{"52} -%% attention le X de Symbol est un \Xi pas un \Chi \DeclareMathSymbol{\mst@Chi}{\mathord}{mtpsymbol}{"43} -%% attention le F de Symbol est un \Phi. Il n'y a pas de \Digamma \DeclareMathSymbol{\mst@Gamma}{\mathord}{mtpsymbol}{"47} \DeclareMathSymbol{\mst@Delta}{\mathord}{mtpsymbol}{"44} \DeclareMathSymbol{\mst@Theta}{\mathord}{mtpsymbol}{"51} @@ -8690,7 +9401,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \DeclareMathSymbol{\mst@Phi}{\mathord}{mtpsymbol}{"46} \DeclareMathSymbol{\mst@Psi}{\mathord}{mtpsymbol}{"59} \DeclareMathSymbol{\mst@Omega}{\mathord}{mtpsymbol}{"57} - \else % de \mst@mathord=\mathord + \else % \end{macrocode} % not symbolgreek but eulergreek or selfGreek. Note |2015/10/31| : apparemment % un moment dans le pass je considrais eulergreek et selfGreek comme pouvant @@ -8709,8 +9420,8 @@ defaultbf,defaultit,defaultsf,defaulttt}} \DeclareMathSymbol\mst@Phi {\mathalpha}{\mst@font@tbu}{"08} \DeclareMathSymbol\mst@Psi {\mathalpha}{\mst@font@tbu}{"09} \DeclareMathSymbol\mst@Omega {\mathalpha}{\mst@font@tbu}{"0A} - \fi % de \mst@mathord=\mathord -\fi % fin de goahead + \fi +\fi % \end{macrocode} % There are differences regarding Euler and Symbol with respect to the % available var-letters. We include one or two things like the |wp| and the @@ -8796,10 +9507,10 @@ defaultbf,defaultit,defaultsf,defaulttt}} \fi % \end{macrocode} % \begin{macro}{\alphaup etc...} -% Completely refactored at |1.3x| to define |\Alphaup|, |\Alphait|, +% Completely refactored at \mstrelease{1.3y} to define |\Alphaup|, |\Alphait|, % |\alphaup|, |\alphait|, etc\dots{} and prepare templates |\Alpha|, \dots{}, % |\alpha|, \dots{}, which when activating a math version will be submitted to -% an |\expanded|, whose behaviour will depend on version-specific conditionals. +% an |\expanded|, whose behavior will depend on version-specific conditionals. % \begin{macrocode} \ifmst@LGRgreek % cf http://milde.users.sourceforge.net/LGR/lgrxenc.def.html @@ -8832,7 +9543,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \DeclareMathSymbol{\Tauit}{\mathalpha}{mtgreekit}{84} \DeclareMathSymbol{\Chiit}{\mathalpha}{mtgreekit}{81} % \end{macrocode} -% |1.3w| and earlier had a bug regarding Digamma which was set up +% \mstrelease{1.3w} and earlier had a bug regarding Digamma which was set up % to use same font shape as for lowercase digamma. % \begin{macrocode} \DeclareMathSymbol{\Digammaup}{\mathalpha}{mtgreekup}{195} @@ -8916,7 +9627,9 @@ defaultbf,defaultit,defaultsf,defaulttt}} \DeclareMathSymbol{\omegaup}{\mathalpha}{mtgreekup}{119} % \DeclareMathSymbol{\digammaup}{\mathalpha}{mtgreekup}{147} -% only varsigma defined (I should check this again) +% \end{macrocode} +% Only varsigma defined (I should check this again). +% \begin{macrocode} \DeclareMathSymbol{\varsigmaup}{\mathalpha}{mtgreekup}{99} % \DeclareMathSymbol{\alphait}{\mathalpha}{mtgreekit}{97} @@ -8981,12 +9694,12 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macro}{\MTstandardgreek} % \begin{macro}{\MTcustomgreek} % \begin{macro}{\MTrecordstandardgreek} -% |1.3d 2014/05/23| defines the commands |\MTstandardgreek| and +% \mstrelease{1.3d} |2014/05/23| defines the commands |\MTstandardgreek| and % |\MTcustomgreek| for package and user. I leave |\MTrecordstandardgreek| % undocumented as I don't want to encourage people to load math packages % after \mst. % -% |1.3h 2015/10/31|: corrected |\MTcustomgreek| as it caused |\ell| to +% \mstrelease{1.3h} |2015/10/31|: corrected |\MTcustomgreek| as it caused |\ell| to % become undefined under option |symbolgreek| and, much more catastrophic, % caused |\alpha|, etc.. to become undefined under option |selfGreek| ! % \begin{macrocode} @@ -9055,7 +9768,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \let\mst@origpartial\partial \let\mst@origwp\wp - \let\mst@origell\ell }% \MTrecordstandardgreek + \let\mst@origell\ell }% \MTrecordstandardgreek \renewcommand*{\MTstandardgreek}{% \let\Alpha\mst@origAlpha @@ -9119,10 +9832,10 @@ defaultbf,defaultit,defaultsf,defaulttt}} \let\partial\mst@origpartial \let\wp\mst@origwp \let\ell\mst@origell -}% \MTstandardgreek +}% \ifmst@greekplus % \end{macrocode} -% |1.3za| implementation of |LGRgreek+| option. It is not exactly +% \mstrelease{1.3za} implementation of |LGRgreek+| option. It is not exactly % clear what we should do for \cs{mathnormal} and \cs{mathnormalbold}. % % This definition allows usage of \cs{alpha} for example in numerical @@ -9210,7 +9923,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \mst@define@lowergreekletter\omega\mst@omega \mst@define@lowergreekletter\varsigma\mst@varsigma \mst@define@lowergreekletter\digamma\mst@digamma -}% end of True branch of \ifmst@greekplus +}% \else % \end{macrocode} % Under |selfGreek| or other Greek option but not |LGRgreek|, these Greek @@ -9243,8 +9956,10 @@ defaultbf,defaultit,defaultsf,defaulttt}} \let\noexpand\Rho\mst@Rho \let\noexpand\Tau\mst@Tau \let\noexpand\Chi\mst@Chi - }% end of first big \expanded -% 1.3h: \mst@Digamma not defined if symbolgreek option + }% +% \end{macrocode} +% \mstrelease{1.3h}: \cs{mst@Digamma} not defined if |symbolgreek| option. +% \begin{macrocode} \ifmst@symbolgreek\else \expanded{\let\noexpand\Digamma\mst@Digamma}% \fi @@ -9260,10 +9975,10 @@ defaultbf,defaultit,defaultsf,defaulttt}} \let\noexpand\Phi\mst@Phi \let\noexpand\Psi\mst@Psi \let\noexpand\Omega\mst@Omega - }% end of second big \expanded + }% % \end{macrocode} -% |1.3h 2015/10/31| adds this conditional to correct the bad bug in -% |1.3d 2014/05/23| which caused |\alpha| etc... to become undefined +% \mstrelease{1.3h} |2015/10/31| adds this conditional to correct the bad bug in +% \mstrelease{1.3d} |2014/05/23| which caused |\alpha| etc... to become undefined % under option |selfGreek|. % \begin{macrocode} \ifmst@selfGreek\else @@ -9293,28 +10008,34 @@ defaultbf,defaultit,defaultsf,defaulttt}} \let\noexpand\psi\mst@psi \let\noexpand\omega\mst@omega \let\noexpand\varsigma\mst@varsigma - }% end of third big \expanded -% 1.3h: digamma only defined with option LGRgreek: + }% +% \end{macrocode} +% \mstrelease{1.3h}: digamma only defined with option |LGRgreek|. +% \begin{macrocode} \ifmst@LGRgreek \expanded{\let\noexpand\digamma\mst@digamma}% \fi -% conditional added 1.3h 2015/10/31 +% \end{macrocode} +% Conditional added \mstrelease{1.3h} |2015/10/31|. +% \begin{macrocode} \ifmst@LGRgreek\else \let\varepsilon\mst@varepsilon \let\vartheta\mst@vartheta \let\varpi\mst@varpi \let\varrho\mst@varrho \let\varphi\mst@varphi -% \let\partial\mst@partial \let\wp\mst@wp -% 1.3h: no \mst@ell if symbolgreek (bugfix 1.3h 2015/10/31) +% \end{macrocode} +% \mstrelease{1.3h}: no \cs{mst@ell} if |symbolgreek| (bugfix +% \mstrelease{1.3h} |2015/10/31|). +% \begin{macrocode} \ifmst@symbolgreek\else\let\ell\mst@ell\fi \fi \fi -}% \MTcustomgreek -\fi% end of else branch of \ifmst@greekplus -\fi% end of \ifmst@customgreek +}% +\fi +\fi \let\Mathastextstandardgreek\MTstandardgreek \let\Mathastextcustomgreek\MTcustomgreek \ifmst@subdued\else\MTcustomgreek\fi @@ -9322,22 +10043,22 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \end{macro}\end{macro}\end{macro} % \begin{macro}{\inodot} % \begin{macro}{\jnodot} -% In |1.0|, I had them of type |mathord|, here I choose |mathalpha|. If I +% In \mstrelease{1.0}, I had them of type |mathord|, here I choose |mathalpha|. If I % used \cs{i} and \cs{j} from the text font the problem would be with the % fontsize, if in scriptstyle. The amsmath \cs{text} would do the trick. % -% |1.14b| |2011/04/02|: again this bug in the EU1/EU2 encoding part, as in the +% \mstrelease{1.14b} |2011/04/02|: again this bug in the EU1/EU2 encoding part, as in the % code redefining \$ etc in math mode (see above). Fixed. % -% |1.3l| |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|. +% \mstrelease{1.3l} |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|. % -% |1.3t| |2018/08/22| removes the definitions done of |\i| and |\j| -% since |1.12| (as robust commands usable both in text and math mode). +% \mstrelease{1.3t} |2018/08/22| removes the definitions done of |\i| and |\j| +% since \mstrelease{1.12} (as robust commands usable both in text and math mode). % -% |1.3u| lets the \cs{imath} and \cs{jmath} react to the font encoding at each +% \mstrelease{1.3u} lets the \cs{imath} and \cs{jmath} react to the font encoding at each % math version. % -% |1.3v| lets the redefined \cs{imath} and \cs{jmath} be \cs{protected}. +% \mstrelease{1.3v} lets the redefined \cs{imath} and \cs{jmath} be \cs{protected}. % \begin{macrocode} \def\mst@subduedinodot{% \let\inodot\mst@original@imath @@ -9352,7 +10073,6 @@ defaultbf,defaultit,defaultsf,defaulttt}} \def\mst@dothe@inodotstuff#1#2#3{% \edef\mst@tmp@enc{#3}% \if1\mst@OneifUniEnc - % Unicode engine and font \mst@Umathchardef#1="7 \symmtletterfont "0131 \relax \mst@Umathchardef#2="7 \symmtletterfont "0237 \relax \else @@ -9360,7 +10080,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} {\csname\mst@tmp@enc\string\i\endcsname} \DeclareMathSymbol{#2}{\mathalpha}{mtletterfont} {\csname\mst@tmp@enc\string\j\endcsname} - \fi}% \mst@dothe@inodotstuff + \fi}% \ifmst@defaultimath\else\mst@infoline{\string\imath\space and \string\jmath\space} \AtEndOfPackage{\AtBeginDocument{% \protected\def\imath{\inodot}% @@ -9382,10 +10102,10 @@ defaultbf,defaultit,defaultsf,defaulttt}} % define math versions with different encodings. Here I % take T1 if it was the default at the time of loading the % package, else OT1. -% |1.12b|: I add LY1 which is quasi like OT1. +% \mstrelease{1.12b}: I add LY1 which is quasi like OT1. % \end{quote} % -% At |1.3u 2019/08/20| I decide to remove the hard-coded slot positions +% At \mstrelease{1.3u} |2019/08/20| I decide to remove the hard-coded slot positions % for OT1, T1 and LY1, and replace them with some hack which assumes % LaTeX2e way of handling text accents got executed by the encoding % definition file. If not, some breakage on package loading could occur, but @@ -9395,21 +10115,22 @@ defaultbf,defaultit,defaultsf,defaulttt}} % The |\vec| accent is not considered here because it has no suitable % available glyph in a standard 8bits text font encodings. % -% Also at |1.3u| the math accents adapt to the font encoding at each math +% Also at \mstrelease{1.3u} the math accents adapt to the font encoding at each math % version. % -% |1.3v| adapts to \LaTeX{} |2019-10-01| which now comes with robust math -% accent macros. The original-named macros are without the robustifying -% space (NOT true anymore, see |1.3w| next), as they only serve as meaning +% (obsolete at \mstrelease{1.4}) \mstrelease{1.3v} adapts to \LaTeX{} +% |2019-10-01| which now comes with robust math accent macros. The +% original-named macros are without the robustifying space (NOT true +% anymore, see \mstrelease{1.3w} next), as they only serve as meaning % holders. % -% On the other hand the macros -% indexed by math version names are (in the pdflatex branch) always defined -% via \cs{DeclareMathAccent} hence they will be robust with |2019-10-01| or +% (obsolete at \mstrelease{1.4}) On the other hand the macros indexed by +% math version names are (in the pdflatex branch) always defined via +% \cs{DeclareMathAccent} hence they will be robust with |2019-10-01| or % later and we must use the \cs{mst@robustifyingspace} with them to access % their real meaning (this thus differs from the situation with \cs{hbar}). % -% |1.3w| The above was a bit optimistic as |amsmath| for example modifies +% \mstrelease{1.3w} The above was a bit optimistic as |amsmath| for example modifies % \LaTeX{} internals and handles math accents differently. % % We thus needed to double our @@ -9456,73 +10177,63 @@ defaultbf,defaultit,defaultsf,defaulttt}} \let\add@unicode@accent\@firstoftwo \if1\mst@OneifUniEnc \ifmst@unimathaccents - % \` -> \grave \expandafter\xdef\csname mst@grave@mv#1\mst@robustifyingspace\endcsname {\mst@Umathaccent 7 \number\symmtoperatorfont\space \csname#2\string\`\endcsname{}\relax}% - % \' -> \acute \expandafter\xdef\csname mst@acute@mv#1\mst@robustifyingspace\endcsname {\mst@Umathaccent 7 \number\symmtoperatorfont\space \csname#2\string\'\endcsname{}\relax}% - % \v -> \check \expandafter\xdef\csname mst@check@mv#1\mst@robustifyingspace\endcsname {\mst@Umathaccent 7 \number\symmtoperatorfont\space \csname#2\string\v\endcsname{}\relax}% - % \u -> \breve \expandafter\xdef\csname mst@breve@mv#1\mst@robustifyingspace\endcsname {\mst@Umathaccent 7 \number\symmtoperatorfont\space \csname#2\string\u\endcsname{}\relax}% - % \= -> \bar \expandafter\xdef\csname mst@bar@mv#1\mst@robustifyingspace\endcsname {\mst@Umathaccent 7 \number\symmtoperatorfont\space \csname#2\string\=\endcsname{}\relax}% - % \. -> \dot \expandafter\xdef\csname mst@dot@mv#1\mst@robustifyingspace\endcsname {\mst@Umathaccent 7 \number\symmtoperatorfont\space \csname#2\string\.\endcsname{}\relax}% - % \" -> \ddot \expandafter\xdef\csname mst@ddot@mv#1\mst@robustifyingspace\endcsname {\mst@Umathaccent 7 \number\symmtoperatorfont\space \csname#2\string\"\endcsname{}\relax}% - % \r -> \mathring \expandafter\xdef\csname mst@mathring@mv#1\mst@robustifyingspace\endcsname {\mst@Umathaccent 7 \number\symmtoperatorfont\space \csname#2\string\r\endcsname{}\relax}% - % \^ -> \hat \expandafter\xdef\csname mst@hat@mv#1\mst@robustifyingspace\endcsname {\mst@Umathaccent 7 \number\symmtoperatorfont\space \csname#2\string\^\endcsname{}\relax}% - % \~ -> \tilde \expandafter\xdef\csname mst@tilde@mv#1\mst@robustifyingspace\endcsname {\mst@Umathaccent 7 \number\symmtoperatorfont\space \csname#2\string\~\endcsname{}\relax}% - \else % false branch of ifmst@unimathaccents + \else % \end{macrocode} -% |1.3u| used some \cs{def} but this made the accent macro meanings look +% \mstrelease{1.3u} used some \cs{def} but this made the accent macro meanings look % slightly different depending on whether the math version being set-up was % with an 8bit encoding or TU encoding. % -% For the sake of uniform treatment we modify this at |1.3v|, but this is a +% For the sake of uniform treatment we modify this at \mstrelease{1.3v}, but this is a % bit complicated regarding timing: we need, in absence of |unimathaccents| % option, in math versions with an OpenType font, to let the \cs{acute} etc... % acquire back some prior non-\mst meanings. To allow maximal flexibility, @@ -9535,8 +10246,8 @@ defaultbf,defaultit,defaultsf,defaulttt}} % definition of the original-named macros but prior to the (last one, if % multiple) \cs{mst@nonsubduedmathaccents}. % -% Hence |1.3v| delayed a bit the initial execution of this macro (see further -% down in the code) compared to what happened in |1.3u|. +% Hence \mstrelease{1.3v} delayed a bit the initial execution of this macro (see further +% down in the code) compared to what happened in \mstrelease{1.3u}. % % We are in a group but \cs{AtEndOfPackage} does the right thing. % \begin{macrocode} @@ -9561,7 +10272,6 @@ defaultbf,defaultit,defaultsf,defaulttt}} % % But wouldn't it be simpler to manage \cs{protected} macros? % \begin{macrocode} - \ifmst@robust@obsessed@LaTeX@era \@tfor\@tempa:={grave}{acute}{check}{breve}{bar}% {dot}{ddot}{mathring}{hat}{tilde}% \do @@ -9569,58 +10279,47 @@ defaultbf,defaultit,defaultsf,defaulttt}} {\noexpand\protect \expandafter\noexpand\csname mst@\@tempa @mv#1 \endcsname}% }% - \fi - \else % false branch of ifUniEnc + \else % \end{macrocode} % \cs{DeclareMathAccent} works \cs{global}ly. And with \LaTeX{} |2019-10-01| % or later it creates robust macros. % % \cs{mst@DeclareMathAccent} to work around \url{https://github.com/latex3/latex2e/issues/216} % \begin{macrocode} - % \` -> \grave \expandafter\mst@DeclareMathAccent\expandafter {\csname mst@grave@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% {\csname#2\string\`\endcsname{}} - % \' -> \acute \expandafter\mst@DeclareMathAccent\expandafter {\csname mst@acute@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% {\csname#2\string\'\endcsname{}} - % \v -> \check \expandafter\mst@DeclareMathAccent\expandafter {\csname mst@check@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% {\csname#2\string\v\endcsname{}} - % \u -> \breve \expandafter\mst@DeclareMathAccent\expandafter {\csname mst@breve@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% {\csname#2\string\u\endcsname{}} - % \= -> \bar \expandafter\mst@DeclareMathAccent\expandafter {\csname mst@bar@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% {\csname#2\string\=\endcsname{}} - % \. -> \dot \expandafter\mst@DeclareMathAccent\expandafter {\csname mst@dot@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% {\csname#2\string\.\endcsname{}} - % \" -> \ddot \expandafter\mst@DeclareMathAccent\expandafter {\csname mst@ddot@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% {\csname#2\string\"\endcsname{}} - % \r -> \mathring \expandafter\mst@DeclareMathAccent\expandafter {\csname mst@mathring@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% {\csname#2\string\r\endcsname{}} - % \^ -> \hat \expandafter\mst@DeclareMathAccent\expandafter {\csname mst@hat@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% {\csname#2\string\^\endcsname{}} - % \~ -> \tilde \expandafter\mst@DeclareMathAccent\expandafter {\csname mst@tilde@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% {\csname#2\string\~\endcsname{}} \fi \endgroup }% -\fi % \ifmst@mathaccents +\fi % \end{macrocode} % \end{macro} % \begin{macro}{\MTDeclareVersion} @@ -9634,14 +10333,14 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \cs{SetSymbolFont}|{mteulervm}||{versionname}||{U}{zeur}{bx}{n}| if % one wants to have a math version with bold Euler characters. % -% For version |1.1| we add an optional parameter specifying the shape +% For version \mstrelease{1.1} we add an optional parameter specifying the shape % to be used for letters. % % Note: (|2012/10/24|) I really should check whether the user attempts to % redefine the `normal' and `bold' versions and issue a warning in -% that case! Finally done at |1.3w| |2019/11/16|! Better late than never... +% that case! Finally done at \mstrelease{1.3w} |2019/11/16|! Better late than never... % -% |1.3c| (|2013/12/14|) adds an extra optional parameter after all +% \mstrelease{1.3c} (|2013/12/14|) adds an extra optional parameter after all % previous ones, to inherit the settings from another version. Typically % to be used with [bold]. I take this opportunity to sanitize a bit some % line endings to avoid generating (in the preamble, document macros were @@ -9650,11 +10349,11 @@ defaultbf,defaultit,defaultsf,defaulttt}} % purpose) the strange way I used |\@onlypreamble| in earlier % version. % -% |1.3u| adds storage of macros holding the needed meanings for +% \mstrelease{1.3u} adds storage of macros holding the needed meanings for % \cs{imath}, \cs{hbar}, math accents, and the minus symbol, % version wise. % -% |1.3w| adds the check to forbid |normal| and |bold| as version names. +% \mstrelease{1.3w} adds the check to forbid |normal| and |bold| as version names. % \begin{macrocode} \newcommand*\MTDeclareVersion[6][]{% \edef\mst@declareversionargs{{#1}{#2}{#3}{#4}{#5}{#6}}% @@ -9666,14 +10365,14 @@ defaultbf,defaultit,defaultsf,defaulttt}} \MTDoNotDeclareVersion@\expandafter\@gobblefour \fi \relax\DeclareMathVersion{\mst@version}\MTDeclareVersion@ -}% \MTDeclareVersion +}% \newcommand*\MTDoNotDeclareVersion@[1][]{% \PackageWarningNoLine{mathastext}{You asked to declare a version with name `\mst@version'.^^J% \@spaces Sorry but you are not allowed to do that.^^J% \@spaces \ifmst@subdued Anyway the `subdued' option is in force\else Use rather \string\Mathastext\space macro (with no optional argument)\fi -}}%\MTDoNotDeclareVersion@ +}}% \newcommand*\MTDeclareVersion@[1][]{% \edef\mst@tmp{#1}% \ifx\mst@tmp\empty\else @@ -9685,7 +10384,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} inherits from `#1\string'\@gobble}% \fi \expandafter\MTDeclareVersion@@\mst@declareversionargs -}% \MTDeclareVersion@ +}% \newcommand*\MTDeclareVersion@@[6]{% \expandafter\edef\csname mst@encoding@\mst@version\endcsname{#3}% \expandafter\edef\csname mst@family@\mst@version\endcsname{#4}% @@ -9706,46 +10405,69 @@ defaultbf,defaultit,defaultsf,defaulttt}} \ifx\mst@tmp\empty \ifmst@italic \SetSymbolFont{mtletterfont}{#2}{#3}{#4}{#5}{\mst@ltsh}% -\immediate\write\m@ne{}% -\PackageInfo{mathastext}{Latin letters in math version `#2\string'\MessageBreak + \immediate\write\m@ne{}% + \PackageInfo{mathastext}% + {\ifmst@noletters + \else + Latin letters in math version `#2\string'\MessageBreak declared\on@line\MessageBreak will use the font #3/#4/#5/\mst@ltsh \ifmst@frenchmath\space(uppercase: #6)\fi\MessageBreak + \fi Other characters (digits, ...) and \protect\log-like names\MessageBreak - will be in `#6\string' shape\@gobble}% -\immediate\write\m@ne{}% + \ifmst@noletters + will use the font #3/#4/#5/#6% + \else + will be in `#6\string' shape% + \fi\@gobble}% + \immediate\write\m@ne{}% \expandafter\edef\csname mst@ltshape@\mst@version\endcsname{\mst@ltsh}% \else \SetSymbolFont{mtletterfont}{#2}{#3}{#4}{#5}{#6}% -\immediate\write\m@ne{}% -\PackageInfo{mathastext}{Latin letters in math version `#2\string'\MessageBreak + \ifmst@noletters + \else + \immediate\write\m@ne{}% + \PackageInfo{mathastext}% + {Latin letters in math version `#2\string'\MessageBreak declared\on@line\MessageBreak will use the fonts #3/#4/#5(\mst@bold)/#6\@gobble}% -\immediate\write\m@ne{}% + \fi + \immediate\write\m@ne{}% \expandafter\edef\csname mst@ltshape@\mst@version\endcsname{#6}% \fi - \else % #1 not empty + \else +% \end{macrocode} +% |#1| not empty. +% \begin{macrocode} \SetSymbolFont{mtletterfont}{#2}{#3}{#4}{#5}{#1}% -\immediate\write\m@ne{}% -\PackageInfo{mathastext}{Latin letters in math version `#2\string'\MessageBreak + \immediate\write\m@ne{}% + \PackageInfo{mathastext}% + {\ifmst@noletters + \else + Latin letters in math version `#2\string'\MessageBreak declared\on@line\MessageBreak will use the font #3/#4/#5/#1% \ifmst@frenchmath\space(uppercase: #6)\fi\MessageBreak + \fi Other characters (digits, ...) and \protect\log-like names\MessageBreak - will be in `#6\string' shape\@gobble}% -\immediate\write\m@ne{}% - \expandafter\edef\csname mst@ltshape@\mst@version\endcsname{#1}% + \ifmst@noletters + will use the font #3/#4/#5/#6% + \else + will be in `#6\string' shape% + \fi\@gobble}% + \immediate\write\m@ne{}% + \expandafter\edef\csname mst@ltshape@\mst@version\endcsname{#1}% \fi % \end{macrocode} -% Here and elsewhere |1.3za| has removed an +% Here and elsewhere \mstrelease{1.3za} has removed an % \cs{ifmst@nonormalbold} conditional. % \begin{macrocode} \SetMathAlphabet{\Mathnormalbold}{#2}{#3}{#4}{\mst@bold}% {\csname mst@ltshape@\mst@version\endcsname}% \SetSymbolFont{mtoperatorfont}{#2}{#3}{#4}{#5}{#6}% % \end{macrocode} -% Since |1.3za| (and prior to |1.15f|) these math alphabet +% Since \mstrelease{1.3za} (and prior to \mstrelease{1.15f}) these math alphabet % commands are always defined. % \begin{macrocode} \SetMathAlphabet{\Mathbf}{#2}{#3}{#4}{\mst@bold}{#6} @@ -9765,12 +10487,12 @@ defaultbf,defaultit,defaultsf,defaulttt}} % options as well as on the (local to this version) shapes for letters % and digits. % -% |1.3x| replaces \cs{updefault} by \cs{MTgreekupdefault} and +% \mstrelease{1.3y} replaces \cs{updefault} by \cs{MTgreekupdefault} and % \cs{itdefault} by \cs{MTgreekitdefault}. It also prepares to store % two Boolean settings saying whether lowercase respectively uppercase % Greek letters will use `upright' or `italic' (|LGRgreek(s)| only). % -% The |1.3x| refactoring of |LGRgreek| is done via a decoupling, +% The \mstrelease{1.3y} refactoring of |LGRgreek| is done via a decoupling, % thus things are done here under |selfGreek| or other Greek options % which ultimately serve nothing and conversely things are done here % for |LGRgreek| which are superfluous. @@ -9813,7 +10535,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \mst@greek@upper@uptrue \fi % \end{macrocode} -% |1.3za| refactoring to reduce code duplication; I briefly considered +% \mstrelease{1.3za} refactoring to reduce code duplication; I briefly considered % trying to enhance \cs{MTgreekfont} to work also with |LGRgreeks| and % |selfGreeks| but I have dropped the idea for now. % \begin{macrocode} @@ -9875,7 +10597,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \expandafter\mst@dothe@hyphenstuff\mst@tmp \fi \fi -}% \MTDeclareVersion@@ +}% \let\MathastextDeclareVersion\MTDeclareVersion % \end{macrocode} % \end{macro} @@ -9890,45 +10612,48 @@ defaultbf,defaultit,defaultsf,defaulttt}} % additionally to the math fonts. Present already in the initial % version of the package (January 2011.) % -% |1.15|: some modifications for the subdued option vs LGRgreek and +% \mstrelease{1.15}: some modifications for the subdued option vs LGRgreek and % for the math muskips after \cs{exists} and \cs{forall}. % -% |1.2|: with the subdued option sets the math alphabets in the +% \mstrelease{1.2}: with the subdued option sets the math alphabets in the % normal and bold math versions do not apply to operator % names and non-alphabetical symbols. The switch for braces % is left as it is. % -% |1.2b|: with the subdued option, the italic corrections are not added. +% \mstrelease{1.2b}: with the subdued option, the italic corrections are not added. % Else, we check the shape of letters in this version. Also, there was a bug -% since |1.15|: the values of the math skips were taken not from the +% since \mstrelease{1.15}: the values of the math skips were taken not from the % settings for the math version (\#2) but from those of the optional argument % (\#1), if present... % -% |1.3|: activation of italic corrections is now separated from actual math +% \mstrelease{1.3}: activation of italic corrections is now separated from actual math % activation of letters. % -% |1.3c|: a starred variant is added which does not modify the text fonts, +% \mstrelease{1.3c}: a starred variant is added which does not modify the text fonts, % only the math set-tup. % -% |1.3d|: replaced in |\MTversion@| things like |\edef\mst@encoding{...}| and -% |\renewcommand{\encodingdefault}{\mst@@encoding}| by +% \mstrelease{1.3d}: replaced in |\MTversion@| things like |\edef\mst@encoding{...}| and +% \centeredline{|\renewcommand{\encodingdefault}{\mst@@encoding}|} by % |\edef\encodingdefault{...}| etc\dots All those |\mst@@...| things were % useless. I also redefine |\seriesdefault| rather than |\mddefault|. % -% |1.3d|: mechanism of restoration of Greek in subdued normal and bold +% \mstrelease{1.3d}: mechanism of restoration of Greek in subdued normal and bold % versions has been to all cases, and not only for the % |LGRgreek| option. % -% |1.3u|: version savvy (i.e.\@ font-encoding savvy) minus sign, +% \mstrelease{1.3u}: version savvy (i.e.\@ font-encoding savvy) minus sign, % \cs{hbar}, \cs{imath}, math accents. % -% |1.3x|: Booleans recovered from stored data in the math version will +% \mstrelease{1.3y}: Booleans recovered from stored data in the math version will % configure the things \cs{MTcustomgreek} do, under |LGRgreek| option. % \begin{macrocode} -\newcommand*\MTversion {\@ifstar\MTversion@s\MTversion@ } -\newcommand*\MTversion@s [1]{\mathversion{#1}\MTversion@@ } +\newcommand*\MTversion {\@ifstar\MTversion@s\MTversion@} +\newcommand*\MTversion@s [1]{\mathversion{#1}\MTversion@@} \newcommand*\MTversion@ [2][]{% - \mathversion{#2}% defines \math@version as expanded #2 +% \end{macrocode} +% This defines \cs{math@version} as expanded |#2|. +% \begin{macrocode} + \mathversion{#2}% \edef\mst@tmpa{#1}% \ifx\mst@tmpa\empty \let\mst@tmp\math@version @@ -9946,14 +10671,14 @@ defaultbf,defaultit,defaultsf,defaulttt}} \edef\ttdefault {\csname mst@ttdefault@\mst@tmp\endcsname}% \usefont{\encodingdefault}{\familydefault}{\seriesdefault}{\shapedefault}% \MTversion@@ -}% \MTversion@ +}% % \end{macrocode} -% |1.3j| has a stronger subdued which does \cs{MTnormalprime}, +% \mstrelease{1.3j} has a stronger subdued which does \cs{MTnormalprime}, % \cs{MTnormalexists}, \cs{MTnormalforall} rather than setting the skips to % |0mu|. Hence \cs{MTversion} by default should do \cs{MTprimedoesskip}, % \cs{MTexistsdoesskip}, \cs{MTforalldoesskip}. % -% |1.3u| drops the argument, as the info is in \cs{math@version} from +% \mstrelease{1.3u} drops the argument, as the info is in \cs{math@version} from % \LaTeX2e code. % \begin{macrocode} \newcommand*\MTversion@@ {% @@ -9979,18 +10704,18 @@ defaultbf,defaultit,defaultsf,defaulttt}} \edef\mst@tmpa{\csname mst@ltshape@\math@version\endcsname}% \edef\mst@tmpb{\csname mst@shape@\math@version\endcsname}% % \end{macrocode} -% |v1.15c|: extending subdued to LGRgreek. +% \mstrelease{1.15c}: extending subdued to LGRgreek. % -% |v1.15f|: subdueing math alphabets in a simpler way than in |1.15e|. +% \mstrelease{1.15f}: subdueing math alphabets in a simpler way than in \mstrelease{1.15e}. % -% |v1.2b|: subdueing the activation of characters in math mode. +% \mstrelease{1.2b}: subdueing the activation of characters in math mode. % -% |v1.2d|: special treatment of the asterisk. +% \mstrelease{1.2d}: special treatment of the asterisk. % -% |v1.3d|: extended LGRgreek mechanism of activation/restoration of Greek to all +% \mstrelease{1.3d}: extended LGRgreek mechanism of activation/restoration of Greek to all % cases. % -% |v1.3j|: use of \cs{MTeverymathdefault}, which includes \cs{MTicinmath}, but +% \mstrelease{1.3j}: use of \cs{MTeverymathdefault}, which includes \cs{MTicinmath}, but % must be corrected then according to shape of letters and presence or absence % of option |frenchmath|. We do only |\def\mst@ITcorr{\ifnum\fam=\m@ne\/\fi}| % and not \cs{MTICinmath} to not overwrite some user-defined @@ -9999,6 +10724,12 @@ defaultbf,defaultit,defaultsf,defaulttt}} % user customizing possibilities, but if I moved it later, I would possibly % have to put inside the \cs{MTicinmath} the check for |it| ot |sl|. Similary % the \cs{MTcustomgreek} always executed (if not |subdued|). +% +% MEMO: \cs{MTeverymathdefault} is executed \emph{also} if in |subdued| mode +% but there is a \cs{MTeverymathoff} done next in the \emph{normal} and +% \emph{bold} version. It does \cs{MTicinmath} and \cs{MTmathactivedigits} +% which however are no-ops (only partly for the former, and for the latter +% always anyhow if no option |activedigits|) in subdude mode. % \begin{macrocode} \MTmathoperatorsobeymathxx \MTeverymathdefault @@ -10009,7 +10740,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \@for\mst@tmpc:=it,sl\do{\ifx\mst@tmpc\mst@tmpb\MTnoICinmath\fi}% \fi % \end{macrocode} -% |1.3j| has a stronger subdued which does \cs{MTnormalprime}, +% \mstrelease{1.3j} has a stronger subdued which does \cs{MTnormalprime}, % \cs{MTnormalexists}, \cs{MTnormalforall} rather than simply setting the % skips to |0mu|. Note: \cs{MTnormalprime} is done as part of % \cs{MTeverymathoff}. @@ -10027,13 +10758,18 @@ defaultbf,defaultit,defaultsf,defaulttt}} \MTmathoperatorsdonotobeymathxx \MTnormalexists \MTnormalforall +% \end{macrocode} +% \mstrelease{1.4} has kept \cs{MTmathstandardletters} inside +% \cs{MTeverymathoff} but its action is now quite different from earlier +% situation as it resets mathcodes from active to normal status on the spot. +% \begin{macrocode} \MTeverymathoff \MTresetnewmcodes % \end{macrocode} -% |1.3t| adds better compatibility with |subdued| mode for +% \mstrelease{1.3t} adds better compatibility with |subdued| mode for % |\imath/\jmath| and perfect compatibility for the minus sign. % -% |1.3u| extends this further to allow per-math-version meanings +% \mstrelease{1.3u} extends this further to allow per-math-version meanings % for them. % \begin{macrocode} \mst@subduedhbar @@ -10056,7 +10792,14 @@ defaultbf,defaultit,defaultsf,defaulttt}} \else \mst@setalphabets % \end{macrocode} -% |1.3x| addition for \cs{MTcustomgreek} under |LGRgreeks| option. +% \mstrelease{1.3y} addition for \cs{MTcustomgreek} under |LGRgreeks| option. +% +% MEMO: the needed mathematical re-activation of letters when switching from +% \emph{normal} or \emph{bold} to a non-|subdued| math version has already +% been done above from the \cs{MTicinmath} which is part of +% \cs{MTeverymathdefault}. +% +% MEMO: idem for digits under option |activedigits|. % \begin{macrocode} \expandafter\let\csname ifmst@greek@upper@up\expandafter\endcsname \csname ifmst@greek@\math@version @upper@up\endcsname @@ -10071,19 +10814,22 @@ defaultbf,defaultit,defaultsf,defaulttt}} \fi \else % \end{macrocode} -% |1.3x| addition for \cs{MTcustomgreek} under |LGRgreek| option. +% \mstrelease{1.3y} addition for \cs{MTcustomgreek} under |LGRgreek| option. +% +% MEMO: the mathematical activation of letters happened above from +% \cs{MTeverymathdefault}. Idem if |activedigits| for digits. % \begin{macrocode} \expandafter\let\csname ifmst@greek@upper@up\expandafter\endcsname \csname ifmst@greek@\math@version @upper@up\endcsname \expandafter\let\csname ifmst@greek@lower@up\expandafter\endcsname \csname ifmst@greek@\math@version @lower@up\endcsname - \MTcustomgreek % new with 1.3d + \MTcustomgreek \mst@nonsubduedhbar \mst@nonsubduedinodot \mst@nonsubduedmathaccents \mst@nonsubduedminus \fi -}% \MTversion@@ +}% \let\MathastextVersion\MTversion \let\Mathastextversion\MTversion \let\MTVersion\MTversion @@ -10100,7 +10846,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \MTfamily{#3} \MTseries{#4} \MTshape{#5} - \ifmst@italic\MTlettershape{\itdefault}\fi % was missing in v 1.14 and prior + \ifmst@italic\MTlettershape{\itdefault}\fi \edef\mst@tmp{#1} \ifx\mst@tmp\empty\else\MTlettershape{#1}\fi \Mathastext} @@ -10113,23 +10859,23 @@ defaultbf,defaultit,defaultsf,defaulttt}} % preamble and any number of time, the last one is the % one that counts. % -% In version |1.1| we have two fonts: they only differ in +% In version \mstrelease{1.1} we have two fonts: they only differ in % shape. The |mtletterfont| is for letters, and the % |mtoperatorfont| for digits and log-like operator % names. The default is that both are upright. % -% Starting with version |1.12|, an optional argument makes +% Starting with version \mstrelease{1.12}, an optional argument makes % \cs{Mathastext} act as the declaration of a math % version, to be later used in the document. % -% Versions |1.15x| brought some adaptations related to the subdued +% Versions \mstrelease{1.15x} brought some adaptations related to the subdued % option. % -% |1.3c| adds a second optional parameter to inherit previous settings +% \mstrelease{1.3c} adds a second optional parameter to inherit previous settings % from another version; mostly done to inherit the bold version fonts for % symbols and large symbols. This is done in |\MTDeclareVersion|. % -% |1.3j| moves the code related to \cs{MTicinmath} from \cs{Mathastext@} to +% \mstrelease{1.3j} moves the code related to \cs{MTicinmath} from \cs{Mathastext@} to % \cs{AtBeginDocument} (code depending on whether |subdued| option in use). % But we omit for this from \cs{MTicinmath} the \cs{MTmathactiveletters} % and issue the latter during loading of package, hence allowing @@ -10139,15 +10885,15 @@ defaultbf,defaultit,defaultsf,defaulttt}} % command without optional parameter does not any |\SetSymbolFont| etc... % but it has a few other tasks to complete nevertheless. % -% |1.3u| fixes some long-standing bug that \cs{Mathastext} did not repeat some +% \mstrelease{1.3u} fixes some long-standing bug that \cs{Mathastext} did not repeat some % font-encoding dependent things: they got done only once during package % loading (things regarding the \cs{hbar}, \cs{imath}, the math accents and % the minus sign). They are now part of the contents of \cs{Mathastext} macro % itself (which is executed during package loading). % -% |1.3x| has refactored the |LGRgreek| associated math fonts. +% \mstrelease{1.3y} has refactored the |LGRgreek| associated math fonts. % \begin{macrocode} -\def\Mathastext {\@ifnextchar [\Mathastext@declare\Mathastext@ } +\def\Mathastext {\@ifnextchar[\Mathastext@declare\Mathastext@}% ] \def\Mathastext@declare [#1]{% \edef\mst@tmp{#1}% \ifx\mst@tmp\empty @@ -10156,7 +10902,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \fi \Mathastext@ {\MTDeclareVersion[\mst@ltsh]{#1}{\mst@enc}{\mst@fam}{\mst@ser}{\mst@opsh}}% -}% \Mathastext@declare +}% \def\Mathastext@ {% \mst@update@greeksh \edef\mst@encoding@normal{\mst@enc}% @@ -10187,7 +10933,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \edef\mst@prime@skip@bold{\mst@prime@skip}% \ifmst@subdued % \end{macrocode} -% Since |1.3j| this branch is actually almost superfluous, as entering +% Since \mstrelease{1.3j} this branch is actually almost superfluous, as entering % |normal| or |bold| with \cs{MTversion} does \cs{MTnormalexists}, % \cs{MTnormalforall}, and \cs{MTnormalprime}. But some default values are % needed if the user insists on issuing \cs{MTexistsdoesskip}, etc... @@ -10199,7 +10945,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \def\mst@exists@skip@bold{0mu}% \def\mst@forall@skip@bold{0mu}% \def\mst@prime@skip@bold{0mu}% - \else % not subdued + \else \ifmst@italic \ifmst@frenchmath \mst@exists@muskip\mst@exists@skip\relax @@ -10220,8 +10966,8 @@ defaultbf,defaultit,defaultsf,defaulttt}} \fi \fi % \end{macrocode} -% Here and elsewhere |1.3za| has removed usage of an -% \cs{ifmst@nonormalbold} conditional which was added at |1.15f|. +% Here and elsewhere \mstrelease{1.3za} has removed usage of an +% \cs{ifmst@nonormalbold} conditional which was added at \mstrelease{1.15f}. % \begin{macrocode} \SetMathAlphabet{\Mathnormalbold}{normal}{\mst@encoding@normal}% {\mst@family@normal}% @@ -10249,7 +10995,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} {\mst@series@bold}% {\mst@shape@bold}% % \end{macrocode} -% |1.3za| removes the |1.15f| added conditional checks. +% \mstrelease{1.3za} removes the \mstrelease{1.15f} added conditional checks. % \begin{macrocode} \SetMathAlphabet{\Mathbf}{normal}{\mst@encoding@normal}% {\mst@family@normal}% @@ -10283,10 +11029,10 @@ defaultbf,defaultit,defaultsf,defaulttt}} {\mst@ttdefault@bold}% {\mst@series@bold}% {\mst@shape@bold}% - \fi % de \ifmst@subdued + \fi % \end{macrocode} % \begin{macro}{\MathEulerBold} -% |1.14c|: We reset |mteulervm| and \cs{MathEulerBold} here as the +% \mstrelease{1.14c}: We reset |mteulervm| and \cs{MathEulerBold} here as the % variant for bold may have been changed by the user via % \cs{Mathastextboldvariant}|{m}|; and we should keep this local to % math versions. @@ -10309,9 +11055,9 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \begin{macro}{selfGreek*} % LGRgreek, LGRgreeks, selfGreek, and selfGreeks options. % -% |1.3x| has refactored the |LGRgreek| associated math fonts. +% \mstrelease{1.3y} has refactored the |LGRgreek| associated math fonts. % -% |1.3za| adds the math alphabets \cs{mathgreekitbold} and +% \mstrelease{1.3za} adds the math alphabets \cs{mathgreekitbold} and % \cs{mathgreekupbold}. % And it executes this code also in |subdued| mode, because % anyhow the symbolfonts |mtgreekup| and |mtgreekit| and @@ -10352,7 +11098,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \end{macrocode} % \end{macro} % \end{macro} -% |1.3za| adds the log message in case of |selfGreek| option. +% \mstrelease{1.3za} adds the log message in case of |selfGreek| option. % \begin{macrocode} \ifmst@subdued \else @@ -10380,7 +11126,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \mst@infoline{Other characters (digits, ...) and \string\log-like names will be}% \mst@infoline{typeset with the \mst@shape@normal\space shape.}% \fi - \fi % end of else branch \ifmst@subdued + \fi \ifmst@nohbar\else \mst@infoline{\string\hbar}% \mst@dothe@hbarstuff @@ -10415,9 +11161,9 @@ defaultbf,defaultit,defaultsf,defaulttt}} \let\mst@varfam@minus@mvbold\mst@varfam@minus@mvnormal \fi \fi - \fi % minus + \fi % \end{macrocode} -% |1.3zb| moves this info line last and also explicitly mentions |italic| or +% \mstrelease{1.3zb} moves this info line last and also explicitly mentions |italic| or % |frenchmath| (here and at some other locations above). % \begin{macrocode} \ifmst@subdued @@ -10427,7 +11173,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \mst@infoline{The \ifmst@frenchmath frenchmath \else italic \fi option is in effect.}% \fi -}% \Mathastext@ +}% \let\mathastext\Mathastext \Mathastext % \end{macrocode} @@ -10488,14 +11234,23 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \end{macrocode} % \end{macro} % \begin{macro}{\MTeverymathoff} -% |1.3i 2016/01/06| Compatibility patch with |\url| from |url.sty| and +% \mstrelease{1.3i} |2016/01/06| Compatibility patch with |\url| from |url.sty| and % |\url/\nolinkurl| from |hyperref.sty|. % -% |1.3j 2016/01/15| renamed the macro from |\MTactivemathoff| to +% \mstrelease{1.3j} |2016/01/15| renamed the macro from |\MTactivemathoff| to % |\MTeverymathoff|, as it is not exclusively a matter of math active % characters due to |\MTeasynonlettersdonotobeymathxx|. % -% |1.3o 2016/05/03| adds \cs{MTdonotfixfonts}. Operant with \LuaLaTeX\ only. +% \mstrelease{1.3o} |2016/05/03| adds \cs{MTdonotfixfonts}. Operant with +% \LuaLaTeX\ only. +% +% \mstrelease{1.4} |2024/07/20| keeps the \cs{MTmathstandardletters} as a +% component of \cs{MTeverymathoff}. It was checked that \ctanpkg{url} and +% \ctanpkg{hyperref} do not change mathcodes of ascii letters prior to +% location where \cs{MTeverymathoff} gets executed, so nothing is +% overwritten, despite the new mode of action of \cs{MTmathstandardletters}. +% +% \mstrelease{1.4} has \cs{MTmathstandarddigits} and inserts it into \cs{MTeverymathoff}. % \begin{macrocode} \newcommand*\MTeverymathoff {% \MTnormalasterisk @@ -10503,6 +11258,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} \MTnonlettersdonotobeymathxx \MTeasynonlettersdonotobeymathxx \MTmathstandardletters + \MTmathstandarddigits \MTdonotfixfonts }% \AtBeginDocument {% @@ -10513,7 +11269,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \end{macrocode} % \end{macro} % \begin{macro}{\MTeverymathdefault} -% |1.3j 2016/01/15| Customizable command which gets executed by +% \mstrelease{1.3j} |2016/01/15| Customizable command which gets executed by % \cs{MTversion} except when switching to |normal/bold| if option |subdued|. % The included \cs{MTicinmath} does \cs{MTmathactiveletters} which will also % activate the math skips around letters. @@ -10537,13 +11293,18 @@ defaultbf,defaultit,defaultsf,defaulttt}} % it will not be overruled (as it is delayed at begin document to after \mst % dealings). % -% |1.3o 2016/05/03| adds \cs{MTfixfonts}. Operant with \LuaLaTeX\ only. +% \mstrelease{1.3o} |2016/05/03| adds \cs{MTfixfonts}. Operant with +% \LuaLaTeX\ only. +% +% \cs{MTmathactivedigits} of \mstrelease{1.4} is a no-op except under option +% |activedigits|. % \begin{macrocode} \newcommand*\MTeverymathdefault {% \MTactiveasterisk \MTprimedoesskip \MTeasynonlettersobeymathxx \MTicinmath + \MTmathactivedigits \MTfixfonts }% % \end{macrocode} @@ -10552,48 +11313,54 @@ defaultbf,defaultit,defaultsf,defaulttt}} % \def~{\rlap} % \begin{macro}{Things to do last ~{``at begin document''}} % \let~\temp +% +% \mstrelease{1.4} has a significant change here that mathematical +% activation of ascii letters is now not incorporated into the \cs{everymath} +% and \cs{everydisplay}. % \begin{macrocode} -\AtBeginDocument{% - \everymath\expandafter{\the\everymath - \mst@the\mst@do@nonletters \let\mst@the\@gobble - \mst@theeasy\mst@do@easynonletters \let\mst@theeasy\@gobble - \mst@thef\mst@do@az \let\mst@thef\@gobble - \mst@theF\mst@do@AZ \let\mst@theF\@gobble}% - \everydisplay\expandafter{\the\everydisplay - \mst@the\mst@do@nonletters \let\mst@the\@gobble - \mst@theeasy\mst@do@easynonletters \let\mst@theeasy\@gobble - \mst@thef\mst@do@az \let\mst@thef\@gobble - \mst@theF\mst@do@AZ \let\mst@theF\@gobble}% -% \end{macrocode} -% |1.3j|: moved here to be executed at begin document (and not from inside +\ifmst@everymath + \AtBeginDocument{% + \everymath\expandafter{\the\everymath + \mst@the\mst@do@nonletters \let\mst@the\@gobble + \mst@theeasy\mst@do@easynonletters \let\mst@theeasy\@gobble + }% + \everydisplay\expandafter{\the\everydisplay + \mst@the\mst@do@nonletters \let\mst@the\@gobble + \mst@theeasy\mst@do@easynonletters \let\mst@theeasy\@gobble + }% + } +\fi +% \end{macrocode} +% \mstrelease{1.3j}: moved here to be executed at begin document (and not from inside % \cs{Mathastext@}.) The \cs{MTeverymathoff} does: \cs{MTnormalasterisk}, % \cs{MTnormalprime}, \cs{MTnonlettersdonotobeymathxx}, % \cs{MTeasynonlettersdonotobeymathxx}, \cs{MTmathstandardletters}. % -% |1.3m|: doing \cs{MTmathactiveletters} in subdued mode immediately after +% \mstrelease{1.3m}: doing \cs{MTmathactiveletters} in subdued mode immediately after % |\begin{document}| resulted in errors because \cs{mst@itcorr} had been left % undefined. We thus add \cs{MTnoicinmath} to the subdued initialization. % -% Since |1.3n| there is \cs{MTresetnewmcodes} which needs +% Since \mstrelease{1.3n} there is \cs{MTresetnewmcodes} which needs % \cs{mst@originalnewmcodes@}, itself defined at begin document. Thus we have -% wrapped the whole thing in \cs{AtEndOfPackage} (at |1.3u| whole code +% wrapped the whole thing in \cs{AtEndOfPackage} (at \mstrelease{1.3u} whole code % directly moved at end of package). % -% And |1.3p| adds here \cs{MTcustomizenewmcodes} which had been regrettably -% forgotten by |1.3n|. +% And \mstrelease{1.3p} adds here \cs{MTcustomizenewmcodes} which had been regrettably +% forgotten by \mstrelease{1.3n}. % -% |1.3t| adds some extras to handle correctly the minus sign and +% \mstrelease{1.3t} adds some extras to handle correctly the minus sign and % dotless i and j in subdued mode, even in case of usage with fontspec. % -% |1.3u| similarly lets math accents be correctly subdued. +% \mstrelease{1.3u} similarly lets math accents be correctly subdued. % -% |1.3v| adapts to \cs{hbar} and math accents now being robust with \LaTeX{} +% \mstrelease{1.3v} adapts to \cs{hbar} and math accents now being robust with \LaTeX{} % |2019-10-01| or later. % -% |1.3w| pays attention to the fact that \cs{hbar} may well be +% \mstrelease{1.3w} pays attention to the fact that \cs{hbar} may well be % a |\mathchar| and not a robust macro! And no need to worry about % \cs{hbar<space>} finally in revised code. % \begin{macrocode} +\AtBeginDocument{% \MTcustomizenewmcodes \let\mst@original@hbar\hbar \let\mst@original@imath\imath @@ -10617,21 +11384,18 @@ defaultbf,defaultit,defaultsf,defaulttt}} \MTresetnewmcodes \MTnoicinmath \MTmathoperatorsdonotobeymathxx - %\mst@subduedhbar \let\inodot\imath \let\jnodot\jmath - %\mst@subduedmathaccents \mst@subduedminus \else \mst@nonsubduedhbar % \end{macrocode} -% |1.3v| needs this \cs{mst@nonsubduedmathaccents} to get executed later (see +% \mstrelease{1.3v} needs \cs{mst@nonsubduedmathaccents} to get executed later (see % code comments for \cs{mst@dothe@mathaccentsstuff}). % \begin{macrocode} - % \mst@nonsubduedmathaccents % will get executed later \mst@nonsubduedminus % \end{macrocode} -% |1.3j|: an earlier version of this code was earlier part of \cs{Mathastext@}. +% \mstrelease{1.3j}: an earlier version of this code was earlier part of \cs{Mathastext@}. % As we are now in \cs{AtBeginDocument} we try to be careful not to overwrite % \cs{MTicinmath}, \cs{MTnoicinmath}, \cs{MTicalsoinmathxx}, ... if issued by % the user in the preamble, though. And we do not execute @@ -10652,12 +11416,12 @@ defaultbf,defaultit,defaultsf,defaulttt}} \fi \fi \fi -}% \AtBeginDocument +}% \AtEndOfPackage{\AtBeginDocument{\ifmst@subdued\else\mst@nonsubduedmathaccents\fi}}% % \end{macrocode} % \end{macro} % \begin{macro}{subdued} -% |1.15|: The subdued code was initiated in May 2011. I returned to +% \mstrelease{1.15}: The subdued code was initiated in May 2011. I returned to % |mathastext| on Sep 24, 2012, and decided to complete what I had started % then, but in the mean time I had forgotten almost all of the little I knew % about \LaTeX{} macro programming. @@ -10671,7 +11435,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % $^1$but the \emph{euler} package for example % assigns the digits to the \emph{letters} symbol font... % -% |1.15d|: Oct 13, 2012. The \cs{mathcode} thing has to be used with care +% \mstrelease{1.15d}: Oct 13, 2012. The \cs{mathcode} thing has to be used with care % under Unicode engines. Unfortunately the \cs{luatexUmathcode} macro is % helpless as it is not possible to know if it will return a legacy mathcode % or a Unicode mathcode. On the other hand the much saner @@ -10683,14 +11447,14 @@ defaultbf,defaultit,defaultsf,defaulttt}} % treats identically under both unicode engines the equal and minus signs (and % the vertical bar).} % -% |1.15e|: Oct 22, 2012. I add the necessary things to also subdue the +% \mstrelease{1.15e}: Oct 22, 2012. I add the necessary things to also subdue the % \cs{mathbf}, \cs{mathit}, \cs{mathsf} and \cs{mathtt} macros (previous % version only took care of the symbol alphabets \cs{mathnormal} and -% \cs{mathrm}.) [update: |1.15f| does that in a completely different and much +% \cs{mathrm}.) [update: \mstrelease{1.15f} does that in a completely different and much % simpler way] Notice that the package defines a \cs{mathnormalbold} macro, % but it will not be subdued in the normal and bold math versions. % -% |1.15f|: Oct 23, 2012. The previous version of the code queried the math +% \mstrelease{1.15f}: Oct 23, 2012. The previous version of the code queried the math % family of a, respectively 1, to guess and then extract the fonts to be % reassigned to mtletterfont and mtoperatorfont (which is done at the end of % this .sty file). The present code simply directly uses letters and operators @@ -10705,23 +11469,24 @@ defaultbf,defaultit,defaultsf,defaulttt}} % to revert these changes (and one would have to do even more hacking for % |\mathversion{normal}| and not only |\MTversion{normal}| to work). % -% |1.15f|: and also I take this opportunity to do the subdued math +% \mstrelease{1.15f}: and also I take this opportunity to do the subdued math % alphabets things in a much much easier way, see below. % -% |1.3s 2018/08/21|: I have half-forgotten the reasons for modifiying the +% \mstrelease{1.3s} |2018/08/21|: I have half-forgotten the reasons for modifiying the % font encoding to current |\encodingdefault|, but at any rate this should % not be done in a \ctanpkg{fontspec} context, encoding default being (now) |TU| it % is very unlikely modifying from |TU| or to |TU| from something else will -% do any good.^^A See +% do any good. +%^^A See %^^A \centeredline{\url{https://tex.stackexchange.com/questions/444565/mathastext-wrong-digits-in-math-mode/}} %^^A for original report. % I add workaround here for case of \ctanpkg{fontspec} being % detected via the |\encodingdefault| setting. % -% |1.3t 2018/08/22|: the |1.3s| fix erroneously removed the +% \mstrelease{1.3t} |2018/08/22|: the \mstrelease{1.3s} fix erroneously removed the % |OT1->T1| replacement in |TU| context. % -% |1.3u|: the whole thing will only get executed At Begin +% \mstrelease{1.3u}: the whole thing will only get executed At Begin % Document. % % I realize extremely late (|2023/12/28|) I never said explicitly anywhere @@ -10734,7 +11499,7 @@ defaultbf,defaultit,defaultsf,defaulttt}} % behavior of the package. % \begin{macrocode} \ifmst@subdued -\AtBeginDocument{% + \AtBeginDocument{% \def\mst@reserved#1\getanddefine@fonts\symletters#2#3\@nil{% \def\mst@normalmv@letter{#2}}% \expandafter\mst@reserved\mv@normal\@nil @@ -10773,15 +11538,19 @@ defaultbf,defaultit,defaultsf,defaulttt}} \else \mst@tmp@enc \fi/\mst@reste\endcsname}% - \expandafter\SetSymbolFont@ \expandafter\mv@normal\mst@normalmv@letter\symmtletterfont - \expandafter\SetSymbolFont@ \expandafter\mv@bold\mst@boldmv@letter\symmtletterfont - \expandafter\SetSymbolFont@ \expandafter\mv@normal\mst@normalmv@operator\symmtoperatorfont - \expandafter\SetSymbolFont@ \expandafter\mv@bold\mst@boldmv@operator\symmtoperatorfont -\immediate\write\m@ne{}% + \expandafter\SetSymbolFont@ + \expandafter\mv@normal\mst@normalmv@letter\symmtletterfont + \expandafter\SetSymbolFont@ + \expandafter\mv@bold\mst@boldmv@letter\symmtletterfont + \expandafter\SetSymbolFont@ + \expandafter\mv@normal\mst@normalmv@operator\symmtoperatorfont + \expandafter\SetSymbolFont@ + \expandafter\mv@bold\mst@boldmv@operator\symmtoperatorfont + \immediate\write\m@ne{}% \PackageInfo{mathastext}{...entering subdued mode...\MessageBreak ...done}% -\immediate\write\m@ne{}% -}% \AtBeginDocument -\fi % \ifmst@subdued + \immediate\write\m@ne{}% + }% +\fi % \end{macrocode} %^^A In the short-lived |1.15e| I was doing the following for alphabets:\\ %^^A |\def\mst@reservedc#1#2#3#4{\def\mst@normalmv@mathbf{#4#3}}|\\ diff --git a/macros/latex/contrib/mathastext/mathastext.pdf b/macros/latex/contrib/mathastext/mathastext.pdf Binary files differindex 6e95227410..635b6149fb 100644 --- a/macros/latex/contrib/mathastext/mathastext.pdf +++ b/macros/latex/contrib/mathastext/mathastext.pdf diff --git a/macros/latex/contrib/mercatormap/CHANGES.md b/macros/latex/contrib/mercatormap/CHANGES.md new file mode 100644 index 0000000000..49ef66fb7a --- /dev/null +++ b/macros/latex/contrib/mercatormap/CHANGES.md @@ -0,0 +1,176 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on +[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to +[Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added +### Changed +### Deprecated +### Removed +### Fixed +### Security + + + +## [1.2.0] - 2024-08-05 + +### Added +- Command `\ifmrcNPexists` to test existence of a named position +- Macros `\mrcAnimAngle` and `\l_mermap_anim_angle_fp` to measure + the current orthodrome angle +- Animation example for static maps + +### Changed +- `\mrcNPlat` and `\mrcNPlon` result to 0 now, if named position does not exist +- `\ifmrcNPinmap` and `\ifmrcNPinvicinity` result to `false` now, if named position does not exist +- Point definitions on an orthodrome now take an optional angle as result: + - Command `mrcNPfromOrthoFraction` + - Command `mrcNPfromOrthoFractionNamed` + - Command `mrcNPfromOrthoDistance` + - Command `mrcNPfromOrthoDistanceNamed` + +### Fixed +- Documentation contained dates from `2023` instead of `2024` + + + +## [1.1.0] - 2024-08-01 + +### Added +- New supply sources (web tile servers): + - `thunderforest atlas` + - `topplusopen web light` + - `topplusopen web light grau` +- Needed LaTeX version 2023-11-01 +- Point definitions on an orthodrome: + - Command `mrcNPfromOrthoFraction` + - Command `mrcNPfromOrthoFractionNamed` + - Command `mrcNPfromOrthoDistance` + - Command `mrcNPfromOrthoDistanceNamed` +- Animation support: + - Environment `mrcAnimation` + - Command `\mrcTimewarpIdentity` + - Command `\mrcTimewarpSlowStart` + - Command `\mrcTimewarpSlowFinal` + - Command `\mrcTimewarpSlowStartFinal` + - Command `\mrcAnimFrame` + - Command `\l_mermap_anim_frame_int` + - Command `\mrcAnimTime` + - Command `\l_mermap_anim_time_fp` + - Command `\mrcAnimScaleDenom` + - Command `\l_mermap_anim_scaledenom_fp` + - Command `\mrcAnimLatitude` + - Command `\l_mermap_anim_lat_fp` + - Command `\mrcAnimLongitude` + - Command `\l_mermap_anim_lon_fp` + - Option `start-position` + - Option `named-start-position` + - Option `final-position` + - Option `named-final-position` + - Option `position` + - Option `named-position` + - Option `frames` + - Option `drop-first-frame` + - Option `drop-last-frame` + - Option `drop-no-frame` + - Option `scale-denominators` + - Option `common-scale-denominator` + - Option `timewarp` + - Option `timewarp-identity` + - Option `timewarp-slow-start` + - Option `timewarp-slow-final` + - Option `timewarp-slow-start-final` + +### Changed +- Version history moved from documentation Chapter 11 to this changelog +- Versioning changed to [Semantic Versioning](http://semver.org/spec/v2.0.0.html) + starting with 1.1.0 +- `README` changed to `README.md` +- Key names start with `mermap` instead of `/mermap` now +- All common scratch variables like `\l_tmpa_tl` replaced by package variables +- Orthodrome code +- Several code further revisions + +### Deprecated +- Stamen Design has discontinued to server map tiles since 2023-07-31. + Therefore, all `supply/source` options based on Stamen Design are + deprecated now, namely + - `stamen terrain` + - `stamen terrain-background` + - `stamen terrain-labels` + - `stamen terrain-lines` + - `stamen toner` + - `stamen toner-lite` + - `stamen toner-hybrid` + - `stamen toner-background` + - `stamen toner-labels` + - `stamen toner-lines` + - `stamen watercolor` + All these options are now not documented any more, but for some time + are still available for old documents with cached map tiles. + +### Removed +- Requirement for packages `expl3`, `xparse`, and `pdftexcmds` + +### Fixed +- Links to the WMS maps of Bundesamt für Kartographie und Geodäsie changed +- Overwrite warning while generating `maptiles.texpy` +- Orthodrome drawing with identical starting and final point is now silently ignored + + + +## [1.02] - 2020-08-06 + +### Added +- New options + `/mermap/supply/area from marker input` and + `/mermap/supply/add area from marker input` + which allow to fit a map to a given external list of marker positions. +- New option `/mermap/fail on missing resource` to control + compilation behavior for missing resource files. +- New marker option `/mermap/marker/distance` with corresponding + macro `\mrcmarkerdistance` (issue #2) + +### Deprecated +- Openrouteservice has discontinued mapsurfer tiles since June 2020. + Therefore, `/mermap/supply/source=openrouteservice mapsurfer` + is deprecated now. It is not documented any more, but + for some time it is still available for old documents with + cached map tiles. + + + +## [1.01] - 2020-05-05 + +### Added +- New general marker option + `/mermap/marker/generic` with corresponding macros + `\mrcmarkergeneric` and `\l_mermap_marker_generic_tl`. + Also, the marker uuid is made expl3 accessible as `\l_mermap_marker_uuid_tl`. +- New hyper marker options: + - `/mermap/marker/url` + - `/mermap/marker/link` + - `/mermap/marker/use urls` + - `/mermap/marker/ignore urls` + - `/mermap/marker/use links` + - `/mermap/marker/ignore links` + +### Changed +- User messages for failed Python script calls are changed from warnings to + errors to fail fast and to provide more information and hints about + possible reasons. + +### Fixed +- Sorting of index key entries fixed for the documentation. + + + +## [1.00] - 2020-04-20 + +### Added +- Initial public release diff --git a/macros/latex/contrib/mercatormap/README b/macros/latex/contrib/mercatormap/README deleted file mode 100644 index c33ea99112..0000000000 --- a/macros/latex/contrib/mercatormap/README +++ /dev/null @@ -1,43 +0,0 @@ -%% The LaTeX package mercatormap - version 1.02 (2020/08/06) -%% -%% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> -%% ------------------------------------------------------------------------------------------- -%% -%% 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. -%% The latest version of this license is in -%% http://www.latex-project.org/lppl.txt -%% and version 1.3 or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -%% This work has the LPPL maintenance status `author-maintained'. -%% -%% This work consists of all files listed in README -%% - -The package ... - -Contents of the package -======================= - 'README' this file - 'mercatormap.sty' LaTeX package file (style file) - 'mercatorsupplier.def' LaTeX package file (include file for style) - 'mercatorpy.def' LaTeX package file (Python generator) - 'mercatormap.pdf' Documentation - 'mercatormap.tex' Source code of the documentation (main file) - '*.doc.*' Source code of the documentation (include files) - 'mercatormap-example.tex' Source code of an example - 'mercatormap.bib' Bibliography of the documentation - -Installation -============ -Copy the contents of the 'mercatormap.tds.zip' from CTAN to your local TeX file tree. - -Alternatively, put the files to their respective locations within the TeX installation: - 'mercatormap.sty' -> /tex/latex/mercatormap - 'mercatorpy.def' -> /tex/latex/mercatormap - 'mercatorsupplier.def' -> /tex/latex/mercatormap - - all other files -> /doc/latex/mercatormap diff --git a/macros/latex/contrib/mercatormap/README.md b/macros/latex/contrib/mercatormap/README.md new file mode 100644 index 0000000000..b7b4be29ab --- /dev/null +++ b/macros/latex/contrib/mercatormap/README.md @@ -0,0 +1,50 @@ +# The LaTeX package mercatormap - version 1.2.0 (2024/08/05) + + +> Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> + +> 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. +> The latest version of this license is in +> https://www.latex-project.org/lppl.txt +> and version 1.3c or later is part of all distributions of LaTeX +> version 2008-05-04 or later. + +> This work has the LPPL maintenance status `author-maintained`. + +> This work consists of all files listed in README.md + + +The mercatormap package extends TikZ with tools to +create map graphics. The provided coordinate system relies on the +Web Mercator projection used on the Web by OpenStreetMap and others. +The package supports the seamless integration of graphics +from public map tile servers by a Python script. Also, common map +elements like markers, geodetic networks, bar scales, routes, orthodrome +pieces, and more are part of the package. + + +## Contents of the package + +- `README.md` this file +- `CHANGES.md` log of changes (history) +- `mercatormap.sty` LaTeX package file (style file) +- `mercatorsupplier.def` LaTeX package file (include file for style) +- `mercatorpy.def` LaTeX package file (Python generator) +- `mercatormap.pdf` Documentation +- `mercatormap.tex` Source code of the documentation (main file) +- `*.doc.*` Source code of the documentation (include files) +- `mercatormap-example.tex` Source code of an example +- `mercatormap.bib` Bibliography of the documentation + + +## Installation + +Copy the contents of the `mercatormap.tds.zip` from CTAN to your local TeX file tree. + +Alternatively, put the files to their respective locations within the TeX installation: +- `mercatormap.sty` -> /tex/latex/mercatormap +- `mercatorpy.def` -> /tex/latex/mercatormap +- `mercatorsupplier.def` -> /tex/latex/mercatormap +- all other files -> /doc/latex/mercatormap diff --git a/macros/latex/contrib/mercatormap/mercatormap-example.tex b/macros/latex/contrib/mercatormap/mercatormap-example.tex index 0951bf14d1..333a249590 100644 --- a/macros/latex/contrib/mercatormap/mercatormap-example.tex +++ b/macros/latex/contrib/mercatormap/mercatormap-example.tex @@ -1,11 +1,11 @@ % \LaTeX-Main\ % !TeX encoding=UTF-8 %% -%% The LaTeX package mercatormap - version 1.02 (2020/08/06) +%% The LaTeX package mercatormap - version 1.2.0 (2024/08/05) %% mercatormap-example.tex: Example document with a map %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the diff --git a/macros/latex/contrib/mercatormap/mercatormap.bib b/macros/latex/contrib/mercatormap/mercatormap.bib index ef2e9b6213..36a3e976ec 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.bib +++ b/macros/latex/contrib/mercatormap/mercatormap.bib @@ -1,4 +1,5 @@ % Encoding: UTF-8 + % include file of mercatormap.tex (manual of the LaTeX package mercatormap) @Report{Sturm:2020, @@ -14,35 +15,27 @@ } -@manual{package:tikz, - author = {Till Tantau}, - title = {The TikZ and PGF Packages}, - subtitle = {Manual for version 3.1.5b}, - url = {http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf}, - date = {2020-01-08}, +@Manual{package:tikz, + author = {Till Tantau}, + date = {2023-01-15}, + title = {The TikZ and PGF Packages}, + subtitle = {Manual for version 3.1.10}, + url = {https://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf}, } -@manual{package:xparse, - author = {{The \LaTeX3 Project}}, - title = {The xparse package}, - subtitle = {Document command parser}, - url = {http://mirrors.ctan.org/macros/latex/contrib/l3packages/xparse.pdf}, - date = {2020-03-06}, +@Manual{l3kernel:interfaces, + author = {{The \LaTeX3 Project}}, + date = {2024-05-27}, + title = {The \LaTeX3 Interfaces}, } -@manual{package:siunitx, - author = {Joseph Wright}, - title = {siunitx -- A comprehensive (SI) units package}, - url = {http://mirrors.ctan.org/macros/latex/contrib/siunitx/siunitx.pdf}, - date = {2020-02-25}, +@Manual{package:siunitx, + author = {Joseph Wright}, + date = {2024-06-24}, + title = {siunitx -- A comprehensive (SI) units package}, + url = {https://mirrors.ctan.org/macros/latex/contrib/siunitx/siunitx.pdf}, } - -@manual{package:expl3, - author = {{The \LaTeX3 Project}}, - title = {The expl3 package and \LaTeX3 programming}, - url = {http://mirrors.ctan.org/macros/latex/contrib/l3kernel/expl3.pdf}, - date = {2020-04-06}, -} +@Comment{jabref-meta: databaseType:biblatex;} diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.animations.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.animations.tex new file mode 100644 index 0000000000..022b856a61 --- /dev/null +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.animations.tex @@ -0,0 +1,538 @@ +% !TeX root = mercatormap.tex +% !TeX encoding=UTF-8 +% !TeX spellcheck=en_US +% include file of mercatormap.tex (manual of the LaTeX package mercatormap) +\clearpage +\section{Animations}\label{sec:animations}% + +An animation in the context of map drawing is considered to be a direct movement +from a starting position to a final position with possible adaption of +scale denominators. + +This package does not provide animation production, but allows to create a +PDF with a sequence of maps (frames) following such an animation path. + + +%------------------------------------------------------------------------------- +\subsection{Animation Environment} + +\begin{docEnvironment}[doc new=2024-07-31]{mrcAnimation}{\marg{options}} + According to the given \meta{options}, the environment loops over the + \meta{environment content} several times generating \textit{frames} + for an external animation program. + A detailed description for the \meta{options} is found in \Fullref{ref:animOptions}. + \begin{itemize} + \item Basically, the position is moved from + a given \refKey{mermap/anim/start-position} with time index |0| + following an orthodrome + to a \refKey{mermap/anim/final-position} with time index |1|. + \item + This time interval $[0,1]$ is divided into \refKey{mermap/anim/frames}. + The current frame number is denoted by \refCom{mrcAnimFrame}, + the current time is denoted by \refCom{mrcAnimTime}, and + the current position is denoted by + \refCom{mrcAnimLatitude} and \refCom{mrcAnimLongitude}, + alternatively by the named positon \docValue{AnimNP}. + \item + During movement, a time dependent sequence of \refKey{mermap/anim/scale-denominators} + defines the current scale denominator \refCom{mrcAnimScaleDenom}. + \item + The frames may have an equal time distance or have different time + distances using a \refKey{mermap/anim/timewarp}. This could be used + to slow down movement near ground and to speed up with more height. + \end{itemize} + The generated sequence of frames is applicable for + \begin{itemize} + \item Movement along an orthodrome from starting to final position with an unchanged + common scale denominator. + \item Zoom in or out on a fixed position. + \item Combination of both animations. + \item Animated orthodrome drawing on a static map. + \end{itemize} + For more complex animations, several \refEnv{mrcAnimation} environments may be + used consecutively. +\end{docEnvironment} + +\clearpage +\begin{dispExample*}{breakable} + \mrcNPdef{heathrow}{51.4678}{-0.4548} + \mrcNPdef{fiumicino}{41.8151}{12.2508} + + \begin{tcbraster}[raster height=22cm,raster columns=4,raster rows=7, + tile,size=minimal,boxsep=1pt,colback=black!20 ] + \begin{mrcAnimation} + { + named-start-position = heathrow, + named-final-position = fiumicino, + frames = 36, + scale-denominators = 0/1000000 - 0.3/8000000 - 0.7/8000000 - 1/1000000, + timewarp-slow-start-final = 1.5, + } + \begin{tcolorbox} + \begin{tikzpicture} + \mermapset + { + named flex scale = \mrcAnimScaleDenom:AnimNP, + } + \mrcmap + [ + type = reference, + named position = AnimNP, + source = topplusopen web, + tex width = \tcbtextwidth, + tex height = \tcbtextheight + ]{london-roma-\mrcAnimFrame} + \mrcdrawmap + \node[above left,font=\fontsize{3.5pt}{3.5pt}\sffamily] + at (mrcmap.south east) {\mrcmapattribution}; + \mrcclipmap + \end{tikzpicture} + \end{tcolorbox} + \end{mrcAnimation} + \end{tcbraster} +\end{dispExample*} + + + +\clearpage +\begin{dispExample*}{breakable} + % \usepackage{fontawesome5} + \mrcNPdef{heathrow}{51.4678}{-0.4548} + \mrcNPdef{lax}{33.9421}{-118.4088} + \mrcNPdef{reykjavik}{64.1289}{-21.9369} + + \begin{tcbraster}[raster height=22cm,raster columns=2,raster rows=4, + tile,size=minimal,boxsep=1pt,colback=black!20 ] + \begin{mrcAnimation} + { + named-start-position = heathrow, + named-final-position = lax, + frames = 8, + } + \begin{tcolorbox} + \begin{tikzpicture} + \mrcmap + [ + type = areafit, + area = {heathrow,lax,reykjavik}, + source = topplusopen web, + tex width = \tcbtextwidth, + tex height = \tcbtextheight, + flex area fit = 8mm, + ]{london-lax-\mrcAnimFrame} + \mrcdrawmap + \node[above left,font=\fontsize{3.5pt}{3.5pt}\sffamily] + at (mrcmap.south east) {\mrcmapattribution}; + \mrcclipmap + \mrcNPdraworthodrome[red,very thick]{heathrow}{AnimNP} + \node[red!70!black,rotate=\mrcAnimAngle] + at (\mrcNPcs{AnimNP}) {\large\faPlane}; + \end{tikzpicture} + \end{tcolorbox} + \end{mrcAnimation} + \end{tcbraster} +\end{dispExample*} + + +\clearpage +%------------------------------------------------------------------------------- +\subsection{Animation Options}\label{ref:animOptions} + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = start-position, + doc parameter = {=\meta{latitude}/\meta{longitude}}, + doc description = initially |51.4779/0| + }, + { + doc name = named-start-position, + doc parameter = {=\meta{name}}, + } + } + Starting position of the animation given by + \meta{latitude} and \meta{longitude} or by a named position using \meta{name}. +\end{docMrcKeys} + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = final-position, + doc parameter = {=\meta{latitude}/\meta{longitude}}, + doc description = initially |51.4779/0| + }, + { + doc name = named-final-position, + doc parameter = {=\meta{name}}, + } + } + Final position of the animation given by + \meta{latitude} and \meta{longitude} or by a named position using \meta{name}. +\end{docMrcKeys} + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = position, + doc parameter = {=\meta{latitude}/\meta{longitude}}, + doc description = initially |51.4779/0| + }, + { + doc name = named-position, + doc parameter = {=\meta{name}}, + } + } + Fixed position of the animation given by + \meta{latitude} and \meta{longitude} or by a named position using \meta{name}. + This sets \refKey{mermap/anim/start-position} and + \refKey{mermap/anim/final-position} to the identical value. +\end{docMrcKeys} + + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = frames, + doc parameter = {=\meta{frame number}}, + doc description = initially |20| + }, + } + Integer \meta{frame number} for the animation, at least |2|. For maps made with tiles, + even a large \meta{frame number} typically results in limited downloads, + because the tiles a reused as far as possible. For WMS maps, every frame + could give another download! +\end{docMrcKeys} + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + doc parameter = {\colOpt{=true\textbar false}}, + doc description = {default |true|, initially |false|}, + ]{ + { + doc name = drop-first-frame, + }, + { + doc name = drop-last-frame, + }, + } + If several \refEnv{mrcAnimation} environments are used consecutively, + the end frame of one animation is identical to the start frame of the + next animation. These options allow to remove one superfluous connecting frame. +\end{docMrcKeys} + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = drop-no-frame, + doc description = {no value, initially set}, + }, + } + Reset to drop no frames. +\end{docMrcKeys} + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = scale-denominators, + doc parameter = {=\marg{time and scale sequence}}, + doc description = {initially |0/25000-1/25000|}, + }, + } + The \meta{time and scale sequence} has to obey the following pattern: + \par + \meta{time$_1$}|/|\meta{scale$_1$} |-| + \meta{time$_2$}|/|\meta{scale$_2$} |-| $\ldots$ |-| + \meta{time$_n$}|/|\meta{scale$_n$} + \par + The time values have to be taken from the interval $[0,1]$ and have to be + strictly monotonically increasing, i.e. + \par + $0\le$ \meta{time$_1$} $<$ + \meta{time$_2$} $<$ $\ldots$ $<$ + \meta{time$_n$} $\le 1$ + \par + If not given, time and scale for time $0$ and $1$ are automatically added + as constant continuation.\par + Depending on the current time value \refCom{mrcAnimTime}, the current + scale denominator \refCom{mrcAnimScaleDenom} is interpolated from this + sequence using a logarithmic approach. +\end{docMrcKeys} + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = common-scale-denominator, + doc parameter = {=\marg{scale denominator}}, + doc description = {initially |25000|}, + }, + } + This is a shortcut for\par + \refKey{mermap/anim/scale-denominators} |=|\\ + \hspace*{5mm} |0/|\marg{scale denominator} |- 1/|\marg{scale denominator} + \par + Thereby, a fixed \marg{scale denominator} is set for the animation. +\end{docMrcKeys} + + +\clearpage +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = timewarp, + doc parameter = {=\meta{macro}}, + doc description = initially \texttt{\textbackslash mrcTimewarpIdentity} + }, + } + \meta{macro} has to be a fully expandable \LaTeX\ macro with one parameter. + The expansion has to be a valid |expl3| \meta{floating point expression} + denoting a strictly monotonically increasing function mapping from + the interval \mbox{$[0,1]$} into \mbox{$[0,1]$} again. + This timewarp may slow down and accelerate time over the span from $0$ to $1$. +\end{docMrcKeys} + + +\begin{docCommands}[ + doc new = 2024-07-31, + ]{ + { + doc name = mrcTimewarpIdentity, + doc parameter = {=\marg{time}}, + }, + } + Identity function from \mbox{$[0,1]$} into \mbox{$[0,1]$}. +\end{docCommands} + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = timewarp-identity, + doc description = {no value, initially set} + }, + } + Sets \refKey{mermap/anim/timewarp} to \refCom{mrcTimewarpIdentity}. + This means that time flows constantly. +\end{docMrcKeys} + + +\begin{docCommands}[ + doc new = 2024-07-31, + ]{ + { + doc name = mrcTimewarpSlowStart, + doc parameter = {=\marg{exponent}\marg{time}}, + doc description = {default |2|} + }, + } + Function term $t^{\text{\meta{exponent}}}$ +\end{docCommands} + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = timewarp-slow-start, + doc parameter = \colOpt{=\meta{exponent}}, + doc description = {default |2|} + }, + } + Sets \refKey{mermap/anim/timewarp} to \refCom{mrcTimewarpSlowStart}\marg{exponent}. + \par + If $\text{\meta{exponent}}>1$ is used, time flows slower at the begin of the + interval \mbox{$[0,1]$}. This can be used, if a low scale denominator is + present at begin of a movement and is becoming larger later. Here, for smoothness, + you may want this to have slower speed near ground and larger speed later. +\end{docMrcKeys} + + +\begin{docCommands}[ + doc new = 2024-07-31, + ]{ + { + doc name = mrcTimewarpSlowFinal, + doc parameter = {=\marg{exponent}\marg{time}}, + doc description = {default |2|} + }, + } + Function term $1 - (1-t)^{\text{\meta{exponent}}}$ +\end{docCommands} + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = timewarp-slow-final, + doc parameter = \colOpt{=\meta{exponent}}, + doc description = {default |2|} + }, + } + Sets \refKey{mermap/anim/timewarp} to \refCom{mrcTimewarpSlowFinal}\marg{exponent}. + \par + If $\text{\meta{exponent}}>1$ is used, time flows slower at the end of the + interval \mbox{$[0,1]$}. This can be used, if a large scale denominator is + present at begin of a movement and is becoming lower later. Here, for smoothness, + you may want this to have slower speed near ground at the end. +\end{docMrcKeys} + + +\begin{docCommands}[ + doc new = 2024-07-31, + ]{ + { + doc name = mrcTimewarpSlowStartFinal, + doc parameter = {=\marg{exponent}\marg{time}}, + doc description = {default |2|} + }, + } + Combination of \refCom{mrcTimewarpSlowStart} and \refCom{mrcTimewarpSlowFinal} + using case discrimination for the first and the second half of the intervall. +\end{docCommands} + + +\begin{docMrcKeys}[ + doc keypath = anim, + doc new = 2024-07-31, + ]{ + { + doc name = timewarp-slow-start-final, + doc parameter = \colOpt{=\meta{exponent}}, + doc description = {default |2|} + }, + } + Sets \refKey{mermap/anim/timewarp} to \refCom{mrcTimewarpSlowStartFinal}\marg{exponent}. + \par + If $\text{\meta{exponent}}>1$ is used, time flows slower at the begin and at the end of the + interval \mbox{$[0,1]$}. This can be used, if a low scale denominator is + present at begin of a movement, becomes larger in the middle, and finally + is becoming lower later. Here, for smoothness, + you may want this to have slower speed near ground at the begin and the end. +\end{docMrcKeys} + + +\clearpage +%------------------------------------------------------------------------------- +\subsection{Macros inside the Animation Environment}\label{ref:animMacros} + +\begin{docCommands}[ + doc new = 2024-07-31, + ]{ + { + doc name = mrcAnimFrame, + }, + { + doc name = l_mermap_anim_frame_int, + }, + } + The current frame number ranging from $1$ to \refKey{mermap/anim/frames}. +\end{docCommands} + + +\begin{docCommands}[ + doc new = 2024-07-31, + ]{ + { + doc name = mrcAnimTime, + }, + { + doc name = l_mermap_anim_time_fp, + }, + } + The current time ranging from $0$ to $1$. +\end{docCommands} + + +\begin{docCommands}[ + doc new = 2024-07-31, + ]{ + { + doc name = mrcAnimScaleDenom, + }, + { + doc name = l_mermap_anim_scaledenom_fp, + }, + } + The current scale denominator according to \refKey{mermap/anim/scale-denominators}. +\end{docCommands} + + +\begin{docCommands}[ + doc new = 2024-07-31, + ]{ + { + doc name = mrcAnimLatitude, + }, + { + doc name = l_mermap_anim_lat_fp, + }, + } + The latitude of the current position. +\end{docCommands} + + +\begin{docCommands}[ + doc new = 2024-07-31, + ]{ + { + doc name = mrcAnimLongitude, + }, + { + doc name = l_mermap_anim_lon_fp, + }, + } + The longitude of the current position. +\end{docCommands} + + +\begin{docCommands}[ + doc new = 2024-08-05, + ]{ + { + doc name = mrcAnimAngle, + }, + { + doc name = l_mermap_anim_angle_fp, + }, + } + Current angle between the tangent vector to the orthodrome and + the current parallel circle. +\end{docCommands} + + + + +\docValue{AnimNP}\tcbdocmarginnote{\tcbdocnew{2024-07-31}}: + The current named position. + + + + diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.definition.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.definition.tex index ad285fb7c9..01667cd1d3 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.definition.tex +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.definition.tex @@ -23,14 +23,14 @@ \subsection{Option Setting} \begin{docCommand}{mermapset}{\marg{options}} Sets \meta{options} for all following maps inside the current \TeX\ group. - All options share the common prefix |/mermap/|, e.g. for setting - \refKey{/mermap/vicinity} use + All options share the common prefix |mermap/|, e.g. for setting + \refKey{mermap/vicinity} use \begin{dispListing} \mermapset{vicinity=3cm} \end{dispListing} Also see \refCom{mrcdefinemap}, \refCom{mermapsetsupply}, and \refCom{mermapsetmarker}.\par - Note that the options by \refCom{mermapset} are |expl3| \cite{package:expl3} + Note that the options by \refCom{mermapset} are |expl3| \cite{l3kernel:interfaces} keys while \tikzname\ \cite{package:tikz} uses its own key management. \end{docCommand} @@ -45,7 +45,7 @@ See \Fullref{sec:automated_map} for script aided map definitions. \begin{docCommand}{mrcdefinemap}{\marg{options}} Establishes a map inside a |tikzpicture| environment following and applying the given \meta{options}. - All options share the common prefix |/mermap/mapdef/|. + All options share the common prefix |mermap/mapdef/|. After \refCom{mrcdefinemap} is applied, map drawing and map coordinates can be used. \begin{itemize} @@ -60,25 +60,25 @@ See \Fullref{sec:automated_map} for script aided map definitions. \begin{docMrcKey}[mapdef]{north}{=\meta{map north latitude}}{no default, initially 50} Northern latitude degree of the visible map, possibly negative for the southern hemisphere, - lower than $90$ but always larger than \refKey{/mermap/mapdef/south}. + lower than $90$ but always larger than \refKey{mermap/mapdef/south}. It is accessible as \docAuxCommand{mrcmapnorth} (use read-only). \end{docMrcKey} \begin{docMrcKey}[mapdef]{south}{=\meta{map south latitude}}{no default, initially 48} Southern latitude degree of the visible map, possibly negative for the southern hemisphere, - larger than $-90$ but always lower than \refKey{/mermap/mapdef/north}. + larger than $-90$ but always lower than \refKey{mermap/mapdef/north}. It is accessible as \docAuxCommand{mrcmapsouth} (use read-only). \end{docMrcKey} \begin{docMrcKey}[mapdef]{west}{=\meta{map west longitude}}{no default, initially 11} Western longitude degree of the visible map, possibly negative for the western hemisphere, - possibly shifted periodically, but always lower than \refKey{/mermap/mapdef/east}. + possibly shifted periodically, but always lower than \refKey{mermap/mapdef/east}. It is accessible as \docAuxCommand{mrcmapwest} (use read-only). \end{docMrcKey} \begin{docMrcKey}[mapdef]{east}{=\meta{map east longitude}}{no default, initially 13} Eastern longitude degree of the visible map, possibly negative for the western hemisphere, - possibly shifted periodically, but always larger than \refKey{/mermap/mapdef/west}. + possibly shifted periodically, but always larger than \refKey{mermap/mapdef/west}. It is accessible as \docAuxCommand{mrcmapeast} (use read-only). \end{docMrcKey} @@ -149,7 +149,7 @@ information. \begin{docMrcKey}[mapdef]{attribution print}{=\meta{attribution text}}{no default, initially empty} Attribution text for the map source. - In contrast to \refKey{/mermap/mapdef/attribution} it is intended for media + In contrast to \refKey{mermap/mapdef/attribution} it is intended for media that does not support hyperlinks like printed posters, books, etc. It is accessible as \docAuxCommand{mrcmapattributionprint} (use read-only). \end{docMrcKey} @@ -166,7 +166,7 @@ information. \end{docMrcKey} \begin{docMrcKey}[mapdef]{tile size}{=\meta{length}}{no default, initially |32.512mm|} - Typically set computationally. It is identical to \refKey{/mermap/tile size} + Typically set computationally. It is identical to \refKey{mermap/tile size} which is the recommended user option for manual setup. \end{docMrcKey} @@ -204,7 +204,7 @@ The border of the visible map is denoted by a \tikzname\ node \docNode{mrcmap}. \medskip The |mrc cs| coordinate system defines a map point by -\refKey{/mermap/cs/latitude} and \refKey{/mermap/cs/longitude} +\refKey{mermap/cs/latitude} and \refKey{mermap/cs/longitude} \begin{docMrcKey}[cs]{latitude}{=\meta{latitude}}{no default} Sets the \meta{latitude} of a map point. @@ -220,7 +220,7 @@ The |mrc cs| coordinate system defines a map point by \medskip A map point can also be defined by shorter variants -\refKey{/mermap/cs/lat} and \refKey{/mermap/cs/lon} +\refKey{mermap/cs/lat} and \refKey{mermap/cs/lon} \begin{docMrcKey}[cs]{lat}{=\meta{latitude}}{no default} Sets the \meta{latitude} of a map point. @@ -298,9 +298,10 @@ A map point can be defined even quicker by \end{docCommand} -\begin{docCommand}{mrcNPlat}{\marg{name}} +\begin{docCommand}[doc updated=2024-08-02]{mrcNPlat}{\marg{name}} Inserts the \emph{latitude} of a \emph{named position} with given \meta{name}. \refCom{mrcNPlat} is expandable and may be used in floating point expressions. + If the \meta{name} does not exist, the macro expands to |0|. \begin{dispExample} \mrcNPdef{nuremberg}{49.45522}{11.07631} Latitude: \mrcNPlat{nuremberg}\\ @@ -309,9 +310,16 @@ A map point can be defined even quicker by \end{docCommand} -\begin{docCommand}{mrcNPlon}{\marg{name}} +\begin{docCommand}[doc updated=2024-08-02]{mrcNPlon}{\marg{name}} Inserts the \emph{longitude} of a \emph{named position} with given \meta{name}. \refCom{mrcNPlon} is expandable and may be used in floating point expressions. + If the \meta{name} does not exist, the macro expands to |0|. +\end{docCommand} + + +\begin{docCommand}[doc new=2024-08-02]{ifmrcNPexists}{\marg{name}\marg{true}\marg{false}} + If the given \emph{named position} with given \meta{name} exists, the \meta{true} code is executed, otherwise + the \meta{false} code. \end{docCommand} @@ -356,7 +364,7 @@ Very similar to \refCom{ifmrcinmap} is \refCom{ifmrcinvicinity}. \begin{docCommand}{ifmrcinvicinity}{\marg{latitude}\marg{longitude}\marg{true}\marg{false}} If the given \meta{latitude} and \meta{longitude} describes a point - inside a vicinity of the visible map, i.e. the map \emph{plus} a margin of \refKey{/mermap/vicinity}, + inside a vicinity of the visible map, i.e. the map \emph{plus} a margin of \refKey{mermap/vicinity}, the \meta{true} code is executed, otherwise the \meta{false} code.\par Inside the \meta{true} code a \tikzname\ coordinate \docNode{mrcpos} diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.drawing.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.drawing.tex index dd86fcedbd..0b484da09b 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.drawing.tex +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.drawing.tex @@ -11,7 +11,7 @@ \begin{docCommand}{mrcdrawmap}{\oarg{options}} Inside a |tikzpicture| environment, \refCom{mrcdrawmap} draws a map prepared by \refCom{mrcdefinemap}, \refCom{mrcapplymap}, or \refCom{mrcmap}. - All \meta{options} share the common prefix |/mermap/|. + All \meta{options} share the common prefix |mermap/|. This is the principal macro to draw a prepared map respectively the background of the map. The background consists of downloaded map tiles or just a color rectangle. @@ -19,10 +19,10 @@ \begin{docMrcKey}{draw}{=\meta{tile draw}}{no default, initially |auto|} \begin{itemize} - \item\docValue{auto}: Draws the map according to \refKey{/mermap/mapdef/resource}, + \item\docValue{auto}: Draws the map according to \refKey{mermap/mapdef/resource}, i.e. downloaded maps or tiles are used, if available. \item\docValue{path}: Draws the map according to the style given by - \refKey{/mermap/map path}. Existing map tiles or merged maps are ignored + \refKey{mermap/map path}. Existing map tiles or merged maps are ignored \item\docValue{tiles}: Draws the map with downloaded map tiles, if available. \item\docValue{mergedmap}: Draws the map with a merged picture, if @@ -75,24 +75,24 @@ Typically, the pixel size of a map tile is fixed and a map tile is a pixel graphics file. The actual size of such an included picture inside the document is freely selectable. Note that a very small -\refKey{/mermap/tile size} results in very small map lettering, -while a very large \refKey{/mermap/tile size} results results in +\refKey{mermap/tile size} results in very small map lettering, +while a very large \refKey{mermap/tile size} results results in very blurred images. The general idea of a \emph{flexible} tile size is to specify an aspired -tile size called \refKey{/mermap/flex tile size} and to give \LaTeX\ -the freedom to select \refKey{/mermap/tile size} in \emph{about the same size} -as \refKey{/mermap/flex tile size}. +tile size called \refKey{mermap/flex tile size} and to give \LaTeX\ +the freedom to select \refKey{mermap/tile size} in \emph{about the same size} +as \refKey{mermap/flex tile size}. This freedom is used to achieve a \emph{pseudo zoom} called -\refKey{/mermap/flex zoom} which is a nearly arbitrary rational number instead -of \refKey{/mermap/supply/zoom} which is a natural number. +\refKey{mermap/flex zoom} which is a nearly arbitrary rational number instead +of \refKey{mermap/supply/zoom} which is a natural number. This \emph{pseudo zoom} is applied by several options which share \emph{flex} in their names, e.g. -\refKey{/mermap/flex scale}, \refKey{/mermap/named flex scale}, -\refKey{/mermap/supply/flex reference scale}, -\refKey{/mermap/supply/flex area scale}, -\refKey{/mermap/supply/flex area fit}. +\refKey{mermap/flex scale}, \refKey{mermap/named flex scale}, +\refKey{mermap/supply/flex reference scale}, +\refKey{mermap/supply/flex area scale}, +\refKey{mermap/supply/flex area fit}. @@ -101,30 +101,30 @@ in their names, e.g. For standard tiles with 256 times 256 pixels a tile size of \SI{32.512}{mm} = \SI{1.28}{in} results in an approximate \SI{200}{dpi} output for the document. - For a |beamer| document, consider to use a \refKey{/mermap/tile size} of + For a |beamer| document, consider to use a \refKey{mermap/tile size} of \SI{21.333333}{mm} to get approximate 1:1 pixel input and output (depending on |beamer| settings - and used hardware). Also see \refKey{/mermap/mapdef/tile size}. + and used hardware). Also see \refKey{mermap/mapdef/tile size}. \end{docMrcKey} \begin{docMrcKey}{flex tile size}{=\meta{length}}{no default, initially |32.512mm|} Aspired width and height of a tile picture are set to \meta{length}. - This value is used while applying \refKey{/mermap/flex zoom}. + This value is used while applying \refKey{mermap/flex zoom}. \end{docMrcKey} \begin{docMrcKey}{flex zoom}{=\meta{pseudo zoom}}{style, no default} - This style sets \refKey{/mermap/supply/zoom} and \refKey{/mermap/tile size} in combination. + This style sets \refKey{mermap/supply/zoom} and \refKey{mermap/tile size} in combination. \begin{itemize} \item If \meta{pseudo zoom} is a natural number, - \refKey{/mermap/supply/zoom} is set to \meta{pseudo zoom} and - \refKey{/mermap/tile size} is set to \refKey{/mermap/flex tile size}. - \item Otherwise, \refKey{/mermap/supply/zoom} is set to the natural number - closest to \meta{pseudo zoom} and \refKey{/mermap/tile size} is such + \refKey{mermap/supply/zoom} is set to \meta{pseudo zoom} and + \refKey{mermap/tile size} is set to \refKey{mermap/flex tile size}. + \item Otherwise, \refKey{mermap/supply/zoom} is set to the natural number + closest to \meta{pseudo zoom} and \refKey{mermap/tile size} is such enlarged or reduced that the \meta{pseudo zoom} value is simulated, i.e. the \emph{impression} of a rational zoom factor is given. \end{itemize} - Note that \refKey{/mermap/flex zoom} has to be used \emph{before} + Note that \refKey{mermap/flex zoom} has to be used \emph{before} \refCom{mrcsupplymap} or \refCom{mrcmap}, because the zoom setup is adapted. \end{docMrcKey} @@ -133,12 +133,12 @@ in their names, e.g. \clearpage \begin{docMrcKey}{flex scale}{=\meta{scale denominator}:\meta{latitude}}{style, no default} For different latitude scopes, an identical zoom factor produces maps of - different scale. With \refKey{/mermap/flex scale}, a \refKey{/mermap/flex zoom} + different scale. With \refKey{mermap/flex scale}, a \refKey{mermap/flex zoom} is computed to achieve the given \meta{scale denominator} at a given \meta{latitude}. Note that this only applies to the center of a map. If the produced map is not centered at \meta{latitude}, the produced scale may differ from the intended one. - Also see \refKey{/mermap/supply/flex reference scale}. + Also see \refKey{mermap/supply/flex reference scale}. \tikzsetnextfilename{drawing_flex_scale}% \begin{dispExample} @@ -162,7 +162,7 @@ in their names, e.g. \begin{docMrcKey}{named flex scale}{=\meta{scale denominator}:\meta{name}}{style, no default} - Identical to \refKey{/mermap/flex scale}, but used the \emph{named position} + Identical to \refKey{mermap/flex scale}, but used the \emph{named position} \meta{name} to provide a \emph{latitude}, see \Fullref{sec:names_positions}. \begin{dispListing} \mrcNPdef{munich}{48.137222}{11.575556} @@ -179,12 +179,12 @@ in their names, e.g. \begin{docCommand}{mrcdrawnetwork}{\oarg{options}} Draws a geodetic network with meridians and parallels. - All \meta{options} share the common prefix |/mermap/|. + All \meta{options} share the common prefix |mermap/|. The displayed lines are selected automatically according to some tuning parameters. - The map is sliced in \emph{about} maximal \refKey{/mermap/network pieces} in each + The map is sliced in \emph{about} maximal \refKey{mermap/network pieces} in each direction. Meridians and parallels share a minimal distance of - \emph{about} \refKey{/mermap/network distance}. The algorithm is + \emph{about} \refKey{mermap/network distance}. The algorithm is allowed to violate these conditions \emph{somewhat}. Note that oversized maps are not supported, i.e. maps which are wider @@ -213,7 +213,7 @@ in their names, e.g. \begin{docMrcKey}{network pieces}{=\meta{number}}{no default, initially |8|} The map is sliced in \emph{about} maximal \meta{number} pieces in each direction. \meta{number} may be exceeded \emph{somewhat}. - It is underrun to comply with \refKey{/mermap/network distance}. + It is underrun to comply with \refKey{mermap/network distance}. \end{docMrcKey} @@ -221,7 +221,7 @@ in their names, e.g. Meridians and parallels share a minimal distance of \emph{about} \meta{mesh width}. \meta{mesh width} may be underrun \emph{somewhat}. - It is exceeded to comply with \refKey{/mermap/network pieces}. + It is exceeded to comply with \refKey{mermap/network pieces}. For parallels on small scale maps, it refers to an averaged mesh width. \end{docMrcKey} diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex index 7eb5b5f86e..11c3068f31 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex @@ -14,13 +14,13 @@ Note to do all preparations documented in \Fullref{sec:python}. %------------------------------------------------------------------------------- \subsection{Reference Position} -With \refKey{/mermap/supply/type}|=|\docValue{reference} a map with a +With \refKey{mermap/supply/type}|=|\docValue{reference} a map with a \emph{reference position} is constructed. Here, Munich is taken as reference position and center of the map. Since the position is used more than once, it is stored with \refCom{mrcNPdef} for further reference. -With \refKey{/mermap/supply/flex reference scale} the scale +With \refKey{mermap/supply/flex reference scale} the scale is set to 1:6\,000\,000. For the background map tiles, a -\refKey{/mermap/supply/source} is selected for download. +\refKey{mermap/supply/source} is selected for download. This setup is done by \refCom{mrcmap} while \refCom{mrcdrawmap} draws the downloaded map tiles. @@ -84,10 +84,10 @@ the downloaded map tiles. %------------------------------------------------------------------------------- \subsection{Fitting Area} -With \refKey{/mermap/supply/type}|=|\docValue{areafit} a map is constructed +With \refKey{mermap/supply/type}|=|\docValue{areafit} a map is constructed where a given area is fitted in. The following example lists some -US-American cities and constructs an \refKey{/mermap/supply/area} which -contains all of them. With \refKey{/mermap/supply/flex area fit}|=15mm| a +US-American cities and constructs an \refKey{mermap/supply/area} which +contains all of them. With \refKey{mermap/supply/flex area fit}|=15mm| a border region is added. @@ -102,7 +102,7 @@ border region is added. \mrcNPdef{denver}{39.7372435}{-104.997378} \mrcmap[type=areafit, area={honolulu,fairbanks,sandiego,miami,boston,denver}, - source=stamen terrain, + source=topplusopen web, tex width=15cm, tex height=11cm, flex area fit=15mm, ]{examples_fitting_area} @@ -122,12 +122,12 @@ border region is added. %------------------------------------------------------------------------------- \subsection{Fixed Boundaries} -With \refKey{/mermap/supply/type}|=|\docValue{boundaries} a map is constructed +With \refKey{mermap/supply/type}|=|\docValue{boundaries} a map is constructed with fixed boundaries. In contrast to the other map types, the document map size cannot be given directly but derives from the map setup. This bears the risk of too large maps. The following example is a map with exact boundaries \mrcformlat{-45} to \mrcformlat{-10} -and \mrcformlon{110} to \mrcformlon{155}. A decent \refKey{/mermap/supply/zoom} +and \mrcformlon{110} to \mrcformlon{155}. A decent \refKey{mermap/supply/zoom} is 5 (every zoom step doubles the map size in each direction). \tikzsetnextfilename{examples_boundaries}% @@ -160,7 +160,7 @@ is 5 (every zoom step doubles the map size in each direction). \subsection{Map Without Map Tiles} There is no coercion to use downloaded map tiles, if they are not needed or -wanted. With \refKey{/mermap/supply/target}|=none| no map tiles are downloaded. +wanted. With \refKey{mermap/supply/target}|=none| no map tiles are downloaded. The following example draws a rough polygon shape of Germany using \refEnv{mrcroute*}. @@ -299,7 +299,7 @@ The following example draws a rough polygon shape of Germany using %------------------------------------------------------------------------------- \subsection{Alignment of the Reference Position} -With \refKey{/mermap/supply/align} the reference position can be aligned +With \refKey{mermap/supply/align} the reference position can be aligned at different map positions. \tikzsetnextfilename{examples_alignment}% @@ -332,13 +332,13 @@ at different map positions. \subsection{Flexible Zoom} Map tiles are only provided at fixed zoom levels with natural numbers, -but the package allows a \refKey{/mermap/flex zoom} with rational numbers. +but the package allows a \refKey{mermap/flex zoom} with rational numbers. The flexible zoom is realized by combining a suitable fixed zoom with an adapted document tile scaling, see \Fullref{sec:flexible_tile_size}. The following example shows a more or less smooth zoom increase. The same technique is used by all options starting with |flex|, e.g. -\refKey{/mermap/supply/flex reference scale} -or \refKey{/mermap/supply/flex area fit} +\refKey{mermap/supply/flex reference scale} +or \refKey{mermap/supply/flex area fit} as seen in the examples before. \tikzexternaldisable diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.intro.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.intro.tex index 294f5e278f..29514fb0f0 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.intro.tex +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.intro.tex @@ -18,9 +18,7 @@ and the algorithms of this packages, you are invited to read \enquote{\fullcite{Sturm:2020}}. With very few exceptions, the package is programmed with the -|expl3| \cite{package:expl3} programming interface for \LaTeX3 -and loads the packages -|xparse| \cite{package:xparse} and |siunitx| \cite{package:siunitx}. +|expl3| programming interface for \LaTeX3 \cite{l3kernel:interfaces}. \medskip @@ -103,7 +101,7 @@ This should give a version number starting with 3. Otherwise, try \begin{dispListing} python3 --version \end{dispListing} -If this is successful, \refKey{/mermap/python} has to be adapted to |python3| +If this is successful, \refKey{mermap/python} has to be adapted to |python3| \subsubsection{Python Packages} The Python packages |Pillow| (\url{https://pypi.org/project/Pillow/}) diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.limitations.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.limitations.tex index 0c44427ca5..70a08de273 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.limitations.tex +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.limitations.tex @@ -42,8 +42,8 @@ remember that the eastern hemisphere lies \emph{west} and the western hemisphere lies \emph{east} for your map. Consider the following example displaying Vladivostok and Anchorage. - Here, \refKey{/mermap/supply/west} is set to \ang{130}\,E (|130|) - and \refKey{/mermap/supply/east} is set to \ang{149}\,W (|211| instead of |-149|). + Here, \refKey{mermap/supply/west} is set to \ang{130}\,E (|130|) + and \refKey{mermap/supply/east} is set to \ang{149}\,W (|211| instead of |-149|). There is some automatic correction for positions to fit inside the defined map (see Anchorage in the example below), but @@ -123,7 +123,7 @@ \tikzsetnextfilename{limit_zoom_scale_1} \begin{dispExample} - \mermapsetsupply{source=stamen terrain, type=reference, zoom=12, + \mermapsetsupply{source=topplusopen web, type=reference, zoom=12, tex width=7cm, tex height=5cm} \begin{tikzpicture} \mrcmap[latitude=59.91,longitude=10.75]{oslo1} \mrcdrawmap @@ -133,12 +133,12 @@ \begin{center}\fontsize{7pt}{7pt}\sffamily\mrcmapattribution\end{center} \end{dispExample} - Same example again, but with \refKey{/mermap/flex scale} which gives + Same example again, but with \refKey{mermap/flex scale} which gives 1:150000 for both cities and comparable maps. \tikzsetnextfilename{limit_zoom_scale_2} \begin{dispExample} - \mermapsetsupply{source=stamen terrain, type=reference} + \mermapsetsupply{source=topplusopen web, type=reference} \begin{tikzpicture} \mrcmap[latitude=59.91,longitude=10.75, flex reference scale=150000, tex width=7cm, tex height=5cm]{oslo2} \mrcdrawmap diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.maptiles.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.maptiles.tex index 9786414753..aa306f5962 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.maptiles.tex +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.maptiles.tex @@ -73,7 +73,7 @@ accompanying Python script. The technical background is documented in \cite[Section~5]{Sturm:2020}. \begin{enumerate} -\item \refKey{/mermap/supply/type}|=|\docValue{reference}: +\item \refKey{mermap/supply/type}|=|\docValue{reference}: \tcbsidebyside[sidebyside adapt=left,blankest,grow to left by=1cm] { \tikzexternaldisable @@ -85,12 +85,12 @@ accompanying Python script. The technical background is documented in }{ The default method determines the map dimensions from a reference position and given document map dimensions. - Also, a zoom level \refKey{/mermap/supply/zoom} + Also, a zoom level \refKey{mermap/supply/zoom} is required which relates to the Web Mercator map tile covering of the Earth. A higher zoom level gives a growing number of smaller map tiles. Alternative to the zoom level, a \meta{scale denominator} can be provided - by \refKey{/mermap/supply/flex area scale}, \refKey{/mermap/flex scale} - or \refKey{/mermap/supply/flex reference scale} which determines + by \refKey{mermap/supply/flex area scale}, \refKey{mermap/flex scale} + or \refKey{mermap/supply/flex reference scale} which determines the zoom level implicitly. As default, the reference position is the center of the map, but can be aligned at the map borders. This method is quite safe to use and could @@ -100,7 +100,7 @@ accompanying Python script. The technical background is documented in be more tricky. } -\item \refKey{/mermap/supply/type}|=|\docValue{areafit}: +\item \refKey{mermap/supply/type}|=|\docValue{areafit}: \tcbsidebyside[sidebyside adapt=left,blankest,grow to left by=1cm] { \tikzexternaldisable @@ -114,7 +114,7 @@ accompanying Python script. The technical background is documented in The map dimensions are determined by an area with latitude and longitude boundaries which is fitted into given document map dimensions. The zoom level is computed accordingly - for a fixed document tile size or by \refKey{/mermap/supply/flex area fit}. + for a fixed document tile size or by \refKey{mermap/supply/flex area fit}. In any case, the map contains the target area plus some protrusion. This method is also quite safe to use and may be the preferred one for many applications like showing a map which contains @@ -123,7 +123,7 @@ accompanying Python script. The technical background is documented in the third method can be regarded. } -\item \refKey{/mermap/supply/type}|=|\docValue{boundaries}: +\item \refKey{mermap/supply/type}|=|\docValue{boundaries}: \tcbsidebyside[sidebyside adapt=left,blankest,grow to left by=1cm] { \tikzexternaldisable @@ -134,11 +134,11 @@ accompanying Python script. The technical background is documented in }{ The most obvious method determines the map dimensions from latitude and longitude boundaries. For this, a corresponding zoom level - \refKey{/mermap/supply/zoom} + \refKey{mermap/supply/zoom} is required which relates to the Web Mercator map tile covering of the Earth. Alternative to the zoom level, a \meta{scale denominator} can be provided - by \refKey{/mermap/supply/flex area scale} - or \refKey{/mermap/supply/flex reference scale} which determines + by \refKey{mermap/supply/flex area scale} + or \refKey{mermap/supply/flex reference scale} which determines the zoom level implicitly. Note that a too high zoom level imposes the risk of downloading an unwanted high quantity of map tiles resulting in a much too large document map. @@ -156,9 +156,9 @@ accompanying Python script. The technical background is documented in \begin{docCommand}{mrcsupplymap}{\oarg{options}\marg{definition}} The \meta{options} provide parameters for the Python~3 script to supply all materials for a map. - All options share the common prefix |/mermap/supply/|.\par + All options share the common prefix |mermap/supply/|.\par The map is identified by\\ - \meta{id}=\refKey{/mermap/definition prefix}+\meta{definition}\\ + \meta{id}=\refKey{mermap/definition prefix}+\meta{definition}\\ for later drawing. This identifier \meta{id} has to be unique for the document. It corresponds to generated files \meta{id}|.def|, \meta{id}|.md5|, and @@ -172,8 +172,8 @@ accompanying Python script. The technical background is documented in \begin{docCommand}{mermapsetsupply}{\marg{options}} Sets \meta{options} for all following maps inside the current \TeX\ group. - All options share the common prefix |/mermap/supply/|, e.g. for setting - \refKey{/mermap/supply/type} use + All options share the common prefix |mermap/supply/|, e.g. for setting + \refKey{mermap/supply/type} use \begin{dispListing} \mermapsetsupply{type=reference} \end{dispListing} @@ -184,7 +184,7 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}{definition prefix}{=\meta{definition prefix}}{no default, initially |maps/|} Prefix for map identifiers and generated map files, see \refCom{mrcsupplymap} and \refCom{mrcapplymap}. - Note that \refKey{/mermap/definition prefix} is not to be used inside + Note that \refKey{mermap/definition prefix} is not to be used inside the option list for \refCom{mrcsupplymap}. \end{docMrcKey} @@ -193,30 +193,30 @@ accompanying Python script. The technical background is documented in \begin{itemize} \item\docValue{reference}: \flqq map with reference position\frqq\\ The map is constructed from a given reference position - \refKey{/mermap/supply/latitude},\\ - \refKey{/mermap/supply/longitude},\\ - a zoom level \refKey{/mermap/supply/zoom},\\ + \refKey{mermap/supply/latitude},\\ + \refKey{mermap/supply/longitude},\\ + a zoom level \refKey{mermap/supply/zoom},\\ map dimensions\\ - \refKey{/mermap/supply/width},\\ - \refKey{/mermap/supply/height},\\ - and alignment \refKey{/mermap/supply/align}. + \refKey{mermap/supply/width},\\ + \refKey{mermap/supply/height},\\ + and alignment \refKey{mermap/supply/align}. \item\docValue{areafit}: \flqq map fitting an area\frqq\\ The map is constructed from a given area boundaries\\ - \refKey{/mermap/supply/west},\\ - \refKey{/mermap/supply/east},\\ - \refKey{/mermap/supply/north},\\ - \refKey{/mermap/supply/south},\\ + \refKey{mermap/supply/west},\\ + \refKey{mermap/supply/east},\\ + \refKey{mermap/supply/north},\\ + \refKey{mermap/supply/south},\\ map dimensions\\ - \refKey{/mermap/supply/width},\\ - \refKey{/mermap/supply/height},\\ - and alignment \refKey{/mermap/supply/align}. + \refKey{mermap/supply/width},\\ + \refKey{mermap/supply/height},\\ + and alignment \refKey{mermap/supply/align}. \item\docValue{boundaries}: \flqq map with boundaries\frqq\\ The map is constructed from given boundaries\\ - \refKey{/mermap/supply/west},\\ - \refKey{/mermap/supply/east},\\ - \refKey{/mermap/supply/north},\\ - \refKey{/mermap/supply/south},\\ - and zoom level \refKey{/mermap/supply/zoom}. + \refKey{mermap/supply/west},\\ + \refKey{mermap/supply/east},\\ + \refKey{mermap/supply/north},\\ + \refKey{mermap/supply/south},\\ + and zoom level \refKey{mermap/supply/zoom}. \end{itemize} \end{docMrcKey} @@ -229,25 +229,25 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[supply]{north}{=\meta{setup north latitude}}{no default, initially |50|} Northern latitude degree, possibly negative for the southern hemisphere, - lower than $90$ but always larger than \refKey{/mermap/supply/south}. + lower than $90$ but always larger than \refKey{mermap/supply/south}. Used for map types \docValue{boundaries} and \docValue{areafit}. \end{docMrcKey} \begin{docMrcKey}[supply]{south}{=\meta{setup south latitude}}{no default, initially |48|} Southern latitude degree, possibly negative for the southern hemisphere, - larger than $-90$ but always lower than \refKey{/mermap/supply/north}. + larger than $-90$ but always lower than \refKey{mermap/supply/north}. Used for map types \docValue{boundaries} and \docValue{areafit}. \end{docMrcKey} \begin{docMrcKey}[supply]{west}{=\meta{setup west longitude}}{no default, initially |11|} Western longitude degree, possibly negative for the western hemisphere, - possibly shifted periodically, but always lower than \refKey{/mermap/supply/east}. + possibly shifted periodically, but always lower than \refKey{mermap/supply/east}. Used for map types \docValue{boundaries} and \docValue{areafit}. \end{docMrcKey} \begin{docMrcKey}[supply]{east}{=\meta{setup east longitude}}{no default, initially |13|} Eastern longitude degree, possibly negative for the western hemisphere, - possibly shifted periodically, but always larger than \refKey{/mermap/supply/west}. + possibly shifted periodically, but always larger than \refKey{mermap/supply/west}. Used for map types \docValue{boundaries} and \docValue{areafit}. \end{docMrcKey} @@ -262,19 +262,19 @@ accompanying Python script. The technical background is documented in { doc name = add area }, } Sets - \refKey{/mermap/supply/north}, \refKey{/mermap/supply/south}, - \refKey{/mermap/supply/west}, \refKey{/mermap/supply/east} + \refKey{mermap/supply/north}, \refKey{mermap/supply/south}, + \refKey{mermap/supply/west}, \refKey{mermap/supply/east} according to the given \meta{comma separated list of named positions}, i.e. the described area contains all these positions.\\ - \refKey{/mermap/supply/area} resets the current area which requires + \refKey{mermap/supply/area} resets the current area which requires at least two points inside the list.\\ - \refKey{/mermap/supply/add area} does not reset the current area, + \refKey{mermap/supply/add area} does not reset the current area, i.e. the positions are added to the current area which possibly grows to fit all positions.\\ Also note to take special care, if the international dateline is on your resulting map, see \Fullref{sec:dateline}. Used for map types \docValue{boundaries} and \docValue{areafit} - or in combination with \refKey{/mermap/supply/area to reference} also + or in combination with \refKey{mermap/supply/area to reference} also for for map type \docValue{reference}. \end{docMrcKeys} @@ -290,19 +290,19 @@ accompanying Python script. The technical background is documented in { doc name = add area from marker input }, } Sets - \refKey{/mermap/supply/north}, \refKey{/mermap/supply/south}, - \refKey{/mermap/supply/west}, \refKey{/mermap/supply/east} + \refKey{mermap/supply/north}, \refKey{mermap/supply/south}, + \refKey{mermap/supply/west}, \refKey{mermap/supply/east} according to the given \refCom{mrcmarker} positions contained in a file with the given \meta{file name}.\\ - \refKey{/mermap/supply/area from marker input} resets the current area which requires + \refKey{mermap/supply/area from marker input} resets the current area which requires at least two marker positions inside the file.\\ - \refKey{/mermap/supply/add area from marker input} does not reset the current area, + \refKey{mermap/supply/add area from marker input} does not reset the current area, i.e. the positions are added to the current area which possibly grows to fit all positions.\\ Also note to take special care, if the international dateline is on your resulting map, see \Fullref{sec:dateline}. Used for map types \docValue{boundaries} and \docValue{areafit} - or in combination with \refKey{/mermap/supply/area to reference} also + or in combination with \refKey{mermap/supply/area to reference} also for for map type \docValue{reference}. \end{docMrcKeys} @@ -310,10 +310,10 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[supply]{area to reference}{}{no value, initially unset} The map settings - \refKey{/mermap/supply/north}, \refKey{/mermap/supply/south}, - \refKey{/mermap/supply/west}, \refKey{/mermap/supply/east} + \refKey{mermap/supply/north}, \refKey{mermap/supply/south}, + \refKey{mermap/supply/west}, \refKey{mermap/supply/east} are taken to compute the map center. This center position is saved - to \refKey{/mermap/supply/latitude} and \refKey{/mermap/supply/longitude}. + to \refKey{mermap/supply/latitude} and \refKey{mermap/supply/longitude}. Used for map type \docValue{reference}. \end{docMrcKey} @@ -352,8 +352,8 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[supply]{tex width}{=\meta{width}}{style, no default} Width of the map as \TeX\ dimension. - This is a style to compute \refKey{/mermap/supply/width} according to - the current \refKey{/mermap/tile size}. + This is a style to compute \refKey{mermap/supply/width} according to + the current \refKey{mermap/tile size}. \end{docMrcKey} \begin{docMrcKey}[supply]{height}{=\meta{setup height in tiles}}{no default, initially |4|} @@ -363,8 +363,8 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[supply]{tex height}{=\meta{width}}{style, no default} Height of the map as \TeX\ dimension. - This is a style to compute \refKey{/mermap/supply/height} according to - the current \refKey{/mermap/tile size}. + This is a style to compute \refKey{mermap/supply/height} according to + the current \refKey{mermap/tile size}. \end{docMrcKey} \begin{docMrcKey}[supply]{align}{=\meta{setup alignment}}{no default, initially |center|} @@ -379,12 +379,12 @@ accompanying Python script. The technical background is documented in \begin{itemize} \item\docValue{none}: No tiles are downloaded and no merged map is generated, just map computation. This is the fastest method and needs no tile supplier. - \item\docValue{tiles}: Download map tiles from a tile map service (TMS) \refKey{/mermap/supply/url}. + \item\docValue{tiles}: Download map tiles from a tile map service (TMS) \refKey{mermap/supply/url}. Compilation of a document with map tile takes longer than compilation with a merged map and transparency should not be used with tiles, but the resulting document is smaller than a document with merged maps. \item\docValue{mergedmap}: Download map tiles from a tile map service (TMS) - \refKey{/mermap/supply/url} and merge them into a single map picture. + \refKey{mermap/supply/url} and merge them into a single map picture. This speeds compilation and allows transparency effects, but the resulting document is possibly larger than a document with map tiles, because map tiles often are optimized 8-bit image files while the merged @@ -394,7 +394,7 @@ accompanying Python script. The technical background is documented in may differ (shift/size) from the more accurate tile representation by one pixel. \item\docValue{wmsmap}: Download a single map from a web map service (WMS) - \refKey{/mermap/supply/url}. Internally, the package treats a WMS like + \refKey{mermap/supply/url}. Internally, the package treats a WMS like a tile map service including all tile calculations. Actually, a single file is downloaded. \end{itemize} @@ -404,7 +404,7 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[][doc new=2020-08-06]{fail on missing resource}{\colOpt{=true\textbar false}}{default |true|, initially |true|} If set to |true|, compilation stops with an error, if - \refKey{/mermap/supply/target} and \refKey{/mermap/mapdef/resource} are different. + \refKey{mermap/supply/target} and \refKey{mermap/mapdef/resource} are different. Typically, this means that something went wrong while trying to download map tiles. Set this option temporarily to |false|, if the map tile service or the internet @@ -427,7 +427,7 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[supply]{url with api key}{=\marg{prefix}\marg{name}\marg{postfix}}{no default} - This is an alternative version of \refKey{/mermap/supply/url}. + This is an alternative version of \refKey{mermap/supply/url}. The URL is constructed from some fixed \meta{prefix} and \meta{postfix} with an API key in between. The API key is retrieved by \meta{name} from a repository filled by \refCom{mrcsetapikey}. @@ -442,7 +442,7 @@ accompanying Python script. The technical background is documented in Stores an API key \meta{value} for access with the given \meta{name}. Typically, \meta{value} is a received ID from a map tile service provider after personal registration. \meta{name} is a placeholder which is used - inside \refKey{/mermap/supply/url with api key} to mark the insertion + inside \refKey{mermap/supply/url with api key} to mark the insertion point for the API key. \begin{dispListing} \mrcsetapikey{myservice}{....K942XY....} @@ -454,7 +454,7 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[supply]{attribution}{=\meta{attribution text}}{no default, initially empty} Attribution text for the map source. Typically, it acknowledges the copyright of the map data provider. It may contain hyperlinks. - It is used to set up \refKey{/mermap/mapdef/attribution} afterwards + It is used to set up \refKey{mermap/mapdef/attribution} afterwards and it is accessible as \docAuxCommand{mrcmapattribution} (use read-only).\par For technical reasons, do not use \verb+"+. \docAuxCommand{mrcumlaut} may be used for masking umlauts, e.g. use \verb+\mrcumlaut{u}+ instead of @@ -463,9 +463,9 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[supply]{attribution print}{=\meta{attribution text}}{no default, initially empty} Attribution text for the map source. - In contrast to \refKey{/mermap/supply/attribution} it is intended for media + In contrast to \refKey{mermap/supply/attribution} it is intended for media that does not support hyperlinks like printed posters, books, etc. - It is used to set up \refKey{/mermap/mapdef/attribution print} afterwards + It is used to set up \refKey{mermap/mapdef/attribution print} afterwards and it is accessible as \docAuxCommand{mrcmapattributionprint} (use read-only). \end{docMrcKey} @@ -477,10 +477,10 @@ accompanying Python script. The technical background is documented in \clearpage \begin{docMrcKey}[supply]{flex reference scale}{=\meta{scale denominator}}{no default} - With the given \meta{scale denominator}, an appropriate \refKey{/mermap/supply/zoom} - and \refKey{/mermap/tile size} is computed. Note that + With the given \meta{scale denominator}, an appropriate \refKey{mermap/supply/zoom} + and \refKey{mermap/tile size} is computed. Note that the \meta{scale denominator} - always applies to the current \refKey{/mermap/supply/latitude} + always applies to the current \refKey{mermap/supply/latitude} and is used for map type \docValue{boundaries} and \docValue{reference}. For example, if the reference point is on the north side of the map, also the \meta{scale denominator} @@ -489,16 +489,16 @@ accompanying Python script. The technical background is documented in Note to take special care to the order of the options. \begin{itemize} \item The reference point has to be set \emph{before} - \refKey{/mermap/supply/flex reference scale}, e.g. by - \refKey{/mermap/supply/latitude}, \refKey{/mermap/supply/position}, - \refKey{/mermap/supply/named position}. - \item \refKey{/mermap/supply/tex height}, \refKey{/mermap/supply/tex width} + \refKey{mermap/supply/flex reference scale}, e.g. by + \refKey{mermap/supply/latitude}, \refKey{mermap/supply/position}, + \refKey{mermap/supply/named position}. + \item \refKey{mermap/supply/tex height}, \refKey{mermap/supply/tex width} (only for map type \docValue{reference}) - have to be set \emph{after} \refKey{/mermap/supply/flex reference scale}, - because the \refKey{/mermap/tile size} is adapted. + have to be set \emph{after} \refKey{mermap/supply/flex reference scale}, + because the \refKey{mermap/tile size} is adapted. \end{itemize} - Also see \refKey{/mermap/flex tile size}, \refKey{/mermap/flex zoom}, - and \refKey{/mermap/flex scale}. + Also see \refKey{mermap/flex tile size}, \refKey{mermap/flex zoom}, + and \refKey{mermap/flex scale}. \tikzsetnextfilename{maptiles_flex_reference_scale}% \begin{dispExample} \begin{tikzpicture} @@ -519,17 +519,17 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[supply]{flex area scale}{=\meta{scale denominator}}{no default} - This is a shortcut for setting \refKey{/mermap/supply/area to reference} - and \refKey{/mermap/supply/flex reference scale}=\meta{scale denominator}. + This is a shortcut for setting \refKey{mermap/supply/area to reference} + and \refKey{mermap/supply/flex reference scale}=\meta{scale denominator}. Used for map type \docValue{boundaries} and \docValue{reference}. Note to take special care to the order of the options. \begin{itemize} \item The reference point has to be set \emph{before} - \refKey{/mermap/supply/flex area scale}. - \item \refKey{/mermap/supply/tex height}, \refKey{/mermap/supply/tex width} + \refKey{mermap/supply/flex area scale}. + \item \refKey{mermap/supply/tex height}, \refKey{mermap/supply/tex width} (only for map type \docValue{reference}) - have to be set \emph{after} \refKey{/mermap/supply/flex reference scale}. + have to be set \emph{after} \refKey{mermap/supply/flex reference scale}. \end{itemize} \end{docMrcKey} @@ -538,13 +538,13 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[supply]{flex area fit}{\colOpt{=\meta{size}}}{default |0pt|} This key can be used for map type \docValue{areafit} as \emph{final} option \emph{after} all other options. - It applies a fine tuning to \refKey{/mermap/tile size}, - \refKey{/mermap/supply/width}, and \refKey{/mermap/supply/height} such + It applies a fine tuning to \refKey{mermap/tile size}, + \refKey{mermap/supply/width}, and \refKey{mermap/supply/height} such that the defined area fits exactly into the map region. If a \meta{size} is specified, width and height are reduced for the calculation by this \meta{size}, e.g. \meta{size}|=1cm| ensures a border of |5mm| on each side. - Also see \refKey{/mermap/flex tile size} and \refKey{/mermap/flex zoom}. + Also see \refKey{mermap/flex tile size} and \refKey{mermap/flex zoom}. \tikzsetnextfilename{maptiles_flex_area_fit}% \begin{dispExample} @@ -580,24 +580,24 @@ accompanying Python script. The technical background is documented in \begin{docMrcKey}[supply]{dpi}{=\meta{dpi value}}{style, no default} - This style sets \refKey{/mermap/supply/pixel} such that the given \meta{dpi value} + This style sets \refKey{mermap/supply/pixel} such that the given \meta{dpi value} is resulting (approximately). \begin{itemize} \item Note that this only applies for WMS Servers and not for TMS (Tile Map Service) Servers, - because there \refKey{/mermap/supply/pixel} is a fixed number depending on + because there \refKey{mermap/supply/pixel} is a fixed number depending on Server settings and cannot be chosen arbitrarily. \item A high \meta{dpi value} results in large downloaded map files. If the server does not provide a high resolution map, you will get unnecessary large files with blurred content. \item The \meta{dpi value} for TMS data can be changed by adapting - \refKey{/mermap/tile size} or \refKey{/mermap/flex tile size}. + \refKey{mermap/tile size} or \refKey{mermap/flex tile size}. \end{itemize} \tikzsetnextfilename{maptiles_dpi_value} \begin{dispExample} \begin{tikzpicture} - \mrcmap[type=reference,latitude=48.14,longitude=11.57, + \mrcmap[type=reference,latitude=48.14,longitude=11.57, flex reference scale=250000, source=topplusopen p250, target=wmsmap, dpi=300, tex width=\linewidth,tex height=5cm]{dpi_value} @@ -654,7 +654,7 @@ map data is free for everyone to use. \textbf{But, map tile servers based on OpenStreetMap are not necessarily free}. A list of online raster tile servers based on OpenStreetMap data is found here:\\ -\url{https://wiki.openstreetmap.org/wiki/Tile_servers} +\url{https://wiki.openstreetmap.org/wiki/Raster_tile_providers} \begin{itemize} \item\bfseries I do not run a map tile server. @@ -681,8 +681,8 @@ want to add more to avoid any legal uncertainties. \medskip \begin{docMrcKey}[supply]{source}{=\meta{source}}{style, no default} - This style sets \refKey{/mermap/supply/url}, \refKey{/mermap/supply/attribution},\\ - \refKey{/mermap/supply/attribution print} and \refKey{/mermap/supply/basename}.\\ + This style sets \refKey{mermap/supply/url}, \refKey{mermap/supply/attribution},\\ + \refKey{mermap/supply/attribution print} and \refKey{mermap/supply/basename}.\\ Feasible values for \meta{source} are: %\mermapset{tile size=3.2512cm} \newcommand{\mapexample}[3][]{% @@ -690,10 +690,10 @@ want to add more to avoid any legal uncertainties. \mermapset{supply/source=#2}% \begin{itemize} \item Required attribution (\docAuxCommand{mrcmapattribution}): - \begin{tcolorbox}[sharp corners,size=fbox,colback=yellow!8,colframe=yellow!80!gray,halign=flush left] + \begin{tcolorbox}[sharp corners,size=fbox,colback=yellow!8,colframe=yellow!80!gray,halign=flush left,before skip=2pt] \mrcmapattribution\end{tcolorbox} \item Required attribution for media without hyperlinks (\docAuxCommand{mrcmapattributionprint}): - \begin{tcolorbox}[sharp corners,size=fbox,colback=yellow!8,colframe=yellow!80!gray,halign=flush left] + \begin{tcolorbox}[sharp corners,size=fbox,colback=yellow!8,colframe=yellow!80!gray,halign=flush left,before skip=2pt] \mrcmapattributionprint\end{tcolorbox} %\par\smallskip\ \end{itemize} @@ -713,71 +713,13 @@ want to add more to avoid any legal uncertainties. Dummy tile server at loopback |127.0.0.1| for test purposes. \item\docValue{opentopomap}:\\ - Tile server (TMS) of \href{http://opentopomap.org/}{OpenTopoMap}. + Tile server (TMS) of \href{https://opentopomap.org/}{OpenTopoMap}. \begin{itemize} \item Usage (German language): \url{https://opentopomap.org/about#verwendung} \end{itemize} \mapexample{opentopomap}{opentopomap} \clearpage - \item\docValue{stamen terrain}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#terrain} - \mapexample{stamen terrain}{stamen_terrain} - - \item\docValue{stamen terrain-background}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#terrain-background} - \mapexample{stamen terrain-background}{stamen_terrain-background} - - \item\docValue{stamen terrain-labels}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#terrain-labels} - \mapexample{stamen terrain-labels}{stamen_terrain-labels} - -\clearpage - \item\docValue{stamen terrain-lines}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#terrain-lines} - \mapexample{stamen terrain-lines}{stamen_terrain-lines} - - \item\docValue{stamen toner}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#toner} - \mapexample{stamen toner}{stamen_toner} - - \item\docValue{stamen toner-lite}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#toner-lite} - \mapexample{stamen toner-lite}{stamen_toner-lite} - -\clearpage - \item\docValue{stamen toner-hybrid}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#toner-hybrid} - \mapexample{stamen toner-hybrid}{stamen_toner-hybrid} - - \item\docValue{stamen toner-background}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#toner-background} - \mapexample{stamen toner-background}{stamen_toner-background} - - \item\docValue{stamen toner-labels}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#toner-labels} - \mapexample{stamen toner-labels}{stamen_toner-labels} - -\clearpage - \item\docValue{stamen toner-lines}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#toner-lines} - \mapexample{stamen toner-lines}{stamen_toner-lines} - - \item\docValue{stamen watercolor}:\\ - Tile server of \href{http://stamen.com}{Stamen Design}.\\ - Usage: \url{http://maps.stamen.com/#watercolor} - \mapexample{stamen watercolor}{stamen_watercolor} - \item\docValue{thunderforest opencyclemap}:\\ Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\ A registered \meta{api-key} is needed (free plan available) @@ -789,7 +731,6 @@ want to add more to avoid any legal uncertainties. \end{itemize} \mapexample{thunderforest opencyclemap}{thunderforest_opencyclemap} -\clearpage \item\docValue{thunderforest transport}:\\ Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\ A registered \meta{api-key} is needed (free plan available) @@ -812,6 +753,7 @@ want to add more to avoid any legal uncertainties. \end{itemize} \mapexample{thunderforest landscape}{thunderforest_landscape} +\clearpage \item\docValue{thunderforest outdoors}:\\ Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\ A registered \meta{api-key} is needed (free plan available) @@ -823,7 +765,17 @@ want to add more to avoid any legal uncertainties. \end{itemize} \mapexample{thunderforest outdoors}{thunderforest_outdoors} -\clearpage + \item\docValue{thunderforest atlas}:\tcbdocmarginnote{\tcbdocnew{2024-07-29}}\\ + Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\ + A registered \meta{api-key} is needed (free plan available) + which is applied by\\ + \refCom{mrcsetapikey}\brackets{\docValue{thunderforest}}\marg{api-key}. + \begin{itemize} + \item Usage: \url{https://www.thunderforest.com/terms} + \item API documentation: \url{https://www.thunderforest.com/maps/atlas} + \end{itemize} + \mapexample{thunderforest atlas}{thunderforest_atlas} + \item\docValue{thunderforest transport-dark}:\\ Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\ A registered \meta{api-key} is needed (free plan available) @@ -835,6 +787,7 @@ want to add more to avoid any legal uncertainties. \end{itemize} \mapexample{thunderforest transport-dark}{thunderforest_transport-dark} +\clearpage \item\docValue{thunderforest spinal-map}:\\ Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\ A registered \meta{api-key} is needed (free plan available) @@ -857,7 +810,6 @@ want to add more to avoid any legal uncertainties. \end{itemize} \mapexample{thunderforest pioneer}{thunderforest_pioneer} -\clearpage \item\docValue{thunderforest mobile-atlas}:\\ Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\ A registered \meta{api-key} is needed (free plan available) @@ -869,6 +821,7 @@ want to add more to avoid any legal uncertainties. \end{itemize} \mapexample{thunderforest mobile-atlas}{thunderforest_mobile-atlas} +\clearpage \item\docValue{thunderforest neighbourhood}:\\ Tile server of \href{https://www.thunderforest.com}{Thunderforest}.\\ A registered \meta{api-key} is needed (free plan available) @@ -880,31 +833,49 @@ want to add more to avoid any legal uncertainties. \end{itemize} \mapexample{thunderforest neighbourhood}{thunderforest_neighbourhood} -\clearpage \item\docValue{topplusopen web}:\\ - Tile server (TMS) of \href{http://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}. + Tile server (TMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}. \begin{itemize} \item Covers world / Europe / Germany depending on zoom level - \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/webdienste/topplus-produkte/wmts-topplusopen-wmts-topplus-open.html} + \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html} \end{itemize} \mapexample{topplusopen web}{topplusopen_web} \item\docValue{topplusopen web grau}:\\ - Tile server (TMS) of \href{http://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}. + Tile server (TMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}. \begin{itemize} \item Covers world / Europe / Germany depending on zoom level - \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/webdienste/topplus-produkte/wmts-topplusopen-wmts-topplus-open.html} + \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html} \end{itemize} \mapexample{topplusopen web grau}{topplusopen_web_grau} +\clearpage + \item\docValue{topplusopen web light}:\tcbdocmarginnote{\tcbdocnew{2024-07-29}}\\ + Tile server (TMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}. + \begin{itemize} + \item Covers world / Europe / Germany depending on zoom level + \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html} + \end{itemize} + \mapexample{topplusopen web light}{topplusopen_web_light} + + \item\docValue{topplusopen web light grau}\tcbdocmarginnote{\tcbdocnew{2024-07-29}}:\\ + Tile server (TMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}. + \begin{itemize} + \item Covers world / Europe / Germany depending on zoom level + \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html} + \end{itemize} + \mapexample{topplusopen web light grau}{topplusopen_web_light_grau} + \end{itemize} -\clearpage + +\vfill \begin{tcolorbox}[spartan,colback=white] The following sources are Web map server (WMS). Therefore, -\refKey{/mermap/supply/target} can only be set to \docValue{wmsmap} +\refKey{mermap/supply/target} can only be set to \docValue{wmsmap} or \docValue{none}. \end{tcolorbox} +\clearpage \begingroup \ExplSyntaxOn @@ -928,19 +899,19 @@ or \docValue{none}. { \cleanstep \item\docValue{topplusopen \name}:\\ - Web map server (WMS) of \href{http://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}. + Web map server (WMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}. \begin{itemize} \item 1:\scdenom, covers Europe / Germany depending on zoom level - \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/webdienste/topplus-produkte/wmts-topplusopen-wmts-topplus-open.html} + \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html} \end{itemize} \mapexample[target=wmsmap]{topplusopen \name}{topplusopen_\name} \cleanstep \item\docValue{topplusopen \name\ grau}:\\ - Web map server (WMS) of \href{http://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}. + Web map server (WMS) of \href{https://www.bkg.bund.de}{Bundesamt f\"{u}r Kartographie und Geod\"{a}sie}. \begin{itemize} \item 1:\scdenom, covers Europe / Germany depending on zoom level - \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/webdienste/topplus-produkte/wmts-topplusopen-wmts-topplus-open.html} + \item Usage (German language): \url{https://gdz.bkg.bund.de/index.php/default/digitale-geodaten/topplusopen-produkte.html} \end{itemize} \def\grau{ grau}% \mapexample[target=wmsmap]{topplusopen \name\grau}{topplusopen_\name_grau} @@ -954,16 +925,16 @@ or \docValue{none}. \begin{docCommand}{mrcnewsupplysource}{\marg{source}\marg{options}} - Adds a new \meta{source} value to \refKey{/mermap/supply/source}. + Adds a new \meta{source} value to \refKey{mermap/supply/source}. The \meta{options} should set the keys - \refKey{/mermap/supply/url}, \refKey{/mermap/supply/attribution},\\ - \refKey{/mermap/supply/attribution print} and \refKey{/mermap/supply/basename}. + \refKey{mermap/supply/url}, \refKey{mermap/supply/attribution},\\ + \refKey{mermap/supply/attribution print} and \refKey{mermap/supply/basename}. It is recommend to use |x ...| for \meta{source} to avoid conflicts - with future official additions to \refKey{/mermap/supply/source}. + with future official additions to \refKey{mermap/supply/source}. \begin{dispListing} \mrcnewsupplysource{x example} { - url = http://127.0.0.1/dummy/{z}/{x}/{y}.png, + url = https://127.0.0.1/dummy/{z}/{x}/{y}.png, attribution = {Dummy tile server}, attribution print = {Dummy tile server}, basename = tiles/dummy, diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.marker.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.marker.tex index dcd0e072b8..fb206c339e 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.marker.tex +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.marker.tex @@ -14,8 +14,8 @@ may be helpful which provides some predefined marker types. \begin{docCommand}{mrcmarker}{\marg{options}} Places a marker according to the given \meta{options} on the map. - All \meta{options} share the common prefix |/mermap/marker/|. - Different \refKey{/mermap/marker/type} settings are available which are + All \meta{options} share the common prefix |mermap/marker/|. + Different \refKey{mermap/marker/type} settings are available which are more or less customizable. \tikzsetnextfilename{marker_mrcmarker}% @@ -48,8 +48,8 @@ may be helpful which provides some predefined marker types. \begin{docCommand}{mermapsetmarker}{\marg{options}} Sets \meta{options} for all following markers inside the current \TeX\ group. - All options share the common prefix |/mermap/marker/|, e.g. for setting - \refKey{/mermap/marker/type} use + All options share the common prefix |mermap/marker/|, e.g. for setting + \refKey{mermap/marker/type} use \begin{dispListing} \mermapsetmarker{type=pin} \end{dispListing} @@ -74,7 +74,7 @@ may be helpful which provides some predefined marker types. \end{docMrcKey} \begin{docMrcKey}[marker]{lat}{=\meta{latitude}}{no default, initially |12|} - Alias for \refKey{/mermap/marker/latitude}. + Alias for \refKey{mermap/marker/latitude}. \end{docMrcKey} \begin{docMrcKey}[marker]{longitude}{=\meta{longitude}}{no default, initially |49|} @@ -83,7 +83,7 @@ may be helpful which provides some predefined marker types. \end{docMrcKey} \begin{docMrcKey}[marker]{lon}{=\meta{longitude}}{no default, initially |49|} - Alias for \refKey{/mermap/marker/longitude}. + Alias for \refKey{mermap/marker/longitude}. \end{docMrcKey} \begin{docMrcKey}[marker]{position}{=\meta{place latitude}:\meta{place longitude}}{no default, initially |12:49|} @@ -100,7 +100,7 @@ may be helpful which provides some predefined marker types. given \meta{area}. Feasible values for \meta{area} are: \begin{itemize} \item\docValue{map}: Use inside map. - \item\docValue{vicinity}: Use inside map plus vicinity, see \refKey{/mermap/vicinity}. + \item\docValue{vicinity}: Use inside map plus vicinity, see \refKey{mermap/vicinity}. \end{itemize} \end{docMrcKey} @@ -157,36 +157,36 @@ may be helpful which provides some predefined marker types. \begin{docMrcKey}[marker]{hide}{\colOpt{=true\textbar false}}{default |true|, initially |false|} If set to |true|, the marker is not used. - \refKey{/mermap/marker/hide} is inverse to \refKey{/mermap/marker/show}. + \refKey{mermap/marker/hide} is inverse to \refKey{mermap/marker/show}. \end{docMrcKey} \begin{docMrcKey}[marker]{show category}{=\meta{category}}{style, no default} - Sets \refKey{/mermap/marker/show} to |true|, if \refKey{/mermap/marker/category} equals \meta{category}. + Sets \refKey{mermap/marker/show} to |true|, if \refKey{mermap/marker/category} equals \meta{category}. Otherwise, nothing happens. - \refKey{/mermap/marker/category} has to be set \emph{before}. + \refKey{mermap/marker/category} has to be set \emph{before}. \end{docMrcKey} \begin{docMrcKey}[marker]{show all but category}{=\meta{category}}{style, no default} - Sets \refKey{/mermap/marker/show} to |true|, if \refKey{/mermap/marker/category} does not equal \meta{category}. + Sets \refKey{mermap/marker/show} to |true|, if \refKey{mermap/marker/category} does not equal \meta{category}. Otherwise, nothing happens. - \refKey{/mermap/marker/category} has to be set \emph{before}. + \refKey{mermap/marker/category} has to be set \emph{before}. \end{docMrcKey} \begin{docMrcKey}[marker]{hide category}{=\meta{category}}{style, no default} - Sets \refKey{/mermap/marker/show} to |false|, if \refKey{/mermap/marker/category} equals \meta{category}. + Sets \refKey{mermap/marker/show} to |false|, if \refKey{mermap/marker/category} equals \meta{category}. Otherwise, nothing happens. - \refKey{/mermap/marker/category} has to be set \emph{before}. + \refKey{mermap/marker/category} has to be set \emph{before}. \end{docMrcKey} \begin{docMrcKey}[marker]{hide all but category}{=\meta{category}}{style, no default} - Sets \refKey{/mermap/marker/show} to |false|, if \refKey{/mermap/marker/category} does not equal \meta{category}. + Sets \refKey{mermap/marker/show} to |false|, if \refKey{mermap/marker/category} does not equal \meta{category}. Otherwise, nothing happens. - \refKey{/mermap/marker/category} has to be set \emph{before}. + \refKey{mermap/marker/category} has to be set \emph{before}. \tikzsetnextfilename{marker_hide}% \begin{dispExample} \begin{tikzpicture} @@ -206,10 +206,10 @@ may be helpful which provides some predefined marker types. \clearpage The following options require the package |hyperref| to be loaded. -If |hyperref| is not loaded, \refKey{/mermap/marker/url} and -\refKey{/mermap/marker/link} are ignored.\\ -Note that if \refKey{/mermap/marker/url} and \refKey{/mermap/marker/link} -are applied concurrently, then \refKey{/mermap/marker/link} will win. +If |hyperref| is not loaded, \refKey{mermap/marker/url} and +\refKey{mermap/marker/link} are ignored.\\ +Note that if \refKey{mermap/marker/url} and \refKey{mermap/marker/link} +are applied concurrently, then \refKey{mermap/marker/link} will win. \begin{docMrcKeys}[ @@ -279,9 +279,9 @@ are applied concurrently, then \refKey{/mermap/marker/link} will win. doc description = {default |true|, initially |false|}, }, } - If \refKey{/mermap/marker/use urls} is set to |false|, external links - with \refKey{/mermap/marker/url} are ignored.\\ - \refKey{/mermap/marker/ignore urls} is inverse to \refKey{/mermap/marker/use urls}. + If \refKey{mermap/marker/use urls} is set to |false|, external links + with \refKey{mermap/marker/url} are ignored.\\ + \refKey{mermap/marker/ignore urls} is inverse to \refKey{mermap/marker/use urls}. \end{docMrcKeys} @@ -299,9 +299,9 @@ are applied concurrently, then \refKey{/mermap/marker/link} will win. doc description = {default |true|, initially |false|}, }, } - If \refKey{/mermap/marker/use links} is set to |false|, internal links - with \refKey{/mermap/marker/link} are ignored.\\ - \refKey{/mermap/marker/ignore links} is inverse to \refKey{/mermap/marker/use links}. + If \refKey{mermap/marker/use links} is set to |false|, internal links + with \refKey{mermap/marker/link} are ignored.\\ + \refKey{mermap/marker/ignore links} is inverse to \refKey{mermap/marker/use links}. \end{docMrcKeys} @@ -596,7 +596,7 @@ The different marker types can be customized by some additional options: \subsection{New Marker Types} \begin{docCommand}{mrcnewmarkertype}{\marg{type name}\marg{\tikzname\ code}} - Creates a new \refKey{/mermap/marker/type} value \meta{type name} using the + Creates a new \refKey{mermap/marker/type} value \meta{type name} using the given \meta{\tikzname\ code} for drawing a place marker. To avoid future name clashes, you should start a private \meta{type name} with letter |x|. For \meta{\tikzname\ code} settings like @@ -630,9 +630,9 @@ The different marker types can be customized by some additional options: \subsection{New Marker Styles} \begin{docCommand}{mrcnewmarkerstyle}{\marg{style name}\marg{options}} - Creates a new \refKey{/mermap/marker/style} value \meta{style name} using the + Creates a new \refKey{mermap/marker/style} value \meta{style name} using the given \meta{options} for drawing a place marker. - All \meta{options} share the common prefix |/mermap/marker/|. Here, a \emph{style} + All \meta{options} share the common prefix |mermap/marker/|. Here, a \emph{style} has the same concept as a \tikzname\ style. \tikzsetnextfilename{marker_markerstyle}% diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.orthodromes.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.orthodromes.tex index cddb277c86..6f9620fae0 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.orthodromes.tex +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.orthodromes.tex @@ -26,7 +26,7 @@ The mathematical background and further information are found in \cite{Sturm:202 \begin{docTikzKey}{mermap samples}{=\meta{number}}{style, no default} - \tikzname\ variant to set \refKey{/mermap/samples}. + \tikzname\ variant to set \refKey{mermap/samples}. \end{docTikzKey} \enlargethispage*{1cm} @@ -56,7 +56,7 @@ The mathematical background and further information are found in \cite{Sturm:202 \mrcclipmap \draw (mrcmap.south west) rectangle (mrcmap.north east); \mrcdraworthodrome[red,very thick,mermap samples=100] - {48.14}{11.58}{40.71}{-74.01} + {48.14}{11.58}{40.71}{-74.01} \node[red,fill=white] at ([above=1.3cm]mrcmap) { \mrcprettyorthodistance{48.14}{11.58}{40.71}{-74.01} }; \end{tikzpicture} @@ -99,6 +99,120 @@ The mathematical background and further information are found in \cite{Sturm:202 \clearpage %------------------------------------------------------------------------------- +\subsection{Orthodrome Points} + +\begin{docCommands}[ + ]{ + { + doc new and updated = {2024-08-01}{2024-08-05}, + doc name = mrcNPfromOrthoFraction, + doc parameter = \marg{name}\oarg{\textbackslash angle}\marg{lat1}\marg{lon1}\marg{lat2}\marg{lon2}\marg{fraction}, + }, + { + doc name = mrcNPfromOrthoFractionNamed, + doc parameter = \marg{name}\oarg{\textbackslash angle}\marg{name1}\marg{name2}\marg{fraction}, + }, + } + Defines a new named position \meta{name} which is located on a \meta{fraction} + from the starting point of the orthodromic curve + from a point with + latitude \meta{lat1} and longitude \meta{lon1} (or described by a named position \meta{name1}) + to a point with + latitude \meta{lat2} and longitude \meta{lon2} (or described by a named position \meta{name2}). + The given starting and final point of the orthodrome need to have a distance of more than + \SI{1}{\meter}. + If \meta{\textbackslash angle} is given, this macro is set to the + angle between the tangent vector to the orthodrome and + the current parallel circle. + +\tikzsetnextfilename{ortho_orthodrome3}% +\begin{dispExample} + \begin{tikzpicture} + \mrcNPdef{munich}{48.14}{11.58} + \mrcNPdef{newyork}{40.71}{-74.01} + \mrcmap[type=areafit, area={munich,newyork}, + source=topplusopen web, + tex width=\linewidth,tex height=6cm, + ]{ortho_orthodrome3} + \mrcdrawmap + \node[below,font=\fontsize{7pt}{7pt}\sffamily] at (mrcmap.south) + {\mrcmapattribution}; + \mrcclipmap + \draw (mrcmap.south west) rectangle (mrcmap.north east); + \mrcmarker{type=pin,named position=munich,contents={M\"unchen}} + \mrcmarker{type=pinflip,shift=5mm,named position=newyork, + contents={New York City}} + \mrcNPdraworthodrome[red,very thick] {munich}{newyork} + \foreach \fraction in { 0.1,0.3,0.5,0.7,1.0,1.1 } + { + \mrcNPfromOrthoFractionNamed{waypoint}[\myangle] + {munich}{newyork}{\fraction} + \mrcmarker{type=pin,named position=waypoint, + contents={\fraction: \fpeval{round(\myangle)}\textdegree }} + } + \end{tikzpicture} +\end{dispExample} +\end{docCommands} + +\clearpage + +\begin{docCommands}[ + ]{ + { + doc new and updated = {2024-08-01}{2024-08-05}, + doc name = mrcNPfromOrthoDistance, + doc parameter = \marg{name}\oarg{\textbackslash angle}\marg{lat1}\marg{lon1}\marg{lat2}\marg{lon2}\marg{distance}, + }, + { + doc name = mrcNPfromOrthoDistanceNamed, + doc parameter = \marg{name}\oarg{\textbackslash angle}\marg{name1}\marg{name2}\marg{distance}, + }, + } + Defines a new named position \meta{name} which is located on a \meta{distance} + from the starting point of the orthodromic curve + from a point with + latitude \meta{lat1} and longitude \meta{lon1} (or described by a named position \meta{name1}) + to a point with + latitude \meta{lat2} and longitude \meta{lon2} (or described by a named position \meta{name2}). + The given starting and final point of the orthodrome need to have a distance of more than + \SI{1}{\meter}. The unit for the \meta{distance} is kilometer. + If \meta{\textbackslash angle} is given, this macro is set to the + angle between the tangent vector to the orthodrome and + the current parallel circle. + +\tikzsetnextfilename{ortho_orthodrome4}% +\begin{dispExample} + \begin{tikzpicture} + \mrcNPdef{munich}{48.14}{11.58} + \mrcNPdef{newyork}{40.71}{-74.01} + \mrcmap[type=areafit, area={munich,newyork}, + source=topplusopen web, + tex width=\linewidth,tex height=6cm, + ]{ortho_orthodrome4} + \mrcdrawmap + \node[below,font=\fontsize{7pt}{7pt}\sffamily] at (mrcmap.south) + {\mrcmapattribution}; + \mrcclipmap + \draw (mrcmap.south west) rectangle (mrcmap.north east); + \mrcmarker{type=pin,named position=munich,contents={M\"unchen}} + \mrcmarker{type=pinflip,shift=5mm,named position=newyork, + contents={New York City}} + \mrcNPdraworthodrome[red,very thick] {munich}{newyork} + \foreach \distance in { 1000,2000,3000,4000,5000,6000 } + { + \mrcNPfromOrthoDistanceNamed{waypoint}{munich}{newyork}{\distance} + \mrcmarker{type=pin,named position=waypoint, + contents={\SI{\distance}{\kilo\meter}}} + } + \end{tikzpicture} +\end{dispExample} +\end{docCommands} + + + + +\clearpage +%------------------------------------------------------------------------------- \subsection{Orthodromic and Loxodromic Distances} \begin{docCommand}{mrcprettyorthodistance}{\marg{lat1}\marg{lon1}\marg{lat2}\marg{lon2}} diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.scales.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.scales.tex index 6efc4fe0d0..9e210c2a24 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.scales.tex +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.scales.tex @@ -164,7 +164,7 @@ but not for critical navigation purposes etc. \begin{docCommand}{mrcdrawscalebar}{\oarg{options}} Draws a scale bar according to the given \meta{options}. - All \meta{options} share the common prefix |/mermap/scalebar/|. + All \meta{options} share the common prefix |mermap/scalebar/|. The most essential option is the \emph{width} of the scale bar. \tikzsetnextfilename{scales_scalebar1} @@ -216,7 +216,7 @@ but not for critical navigation purposes etc. \end{docMrcKey} \begin{docMrcKey}[scalebar]{width-in-kilometer}{=\meta{number}}{no default, initially |0|} - Alias for \refKey{/mermap/scalebar/width-in-km} + Alias for \refKey{mermap/scalebar/width-in-km} \end{docMrcKey} \begin{docMrcKey}[scalebar]{width-in-meter}{=\meta{number}}{no default, initially |0|} @@ -247,7 +247,7 @@ but not for critical navigation purposes etc. \begin{docMrcKey}[scalebar]{at}{=\marg{\tikzname\ coordinate}}{no default, initially \texttt{\brackets{(0,0)}}} The scale bar is positioned at the given \meta{\tikzname\ coordinate}. - The placement is done with the \refKey{/mermap/scalebar/placement} option. + The placement is done with the \refKey{mermap/scalebar/placement} option. Both option correspond to the \tikzname\ options for positioning nodes. The scale bar can be positioned outside the map (e.g. below), but remember to use \refCom{mrcclipmap} \emph{after} the scale bar @@ -285,7 +285,7 @@ but not for critical navigation purposes etc. \begin{docMrcKey}[scalebar]{placement}{=\meta{\tikzname\ positioning}}{no default, initially empty} \meta{\tikzname\ positioning} of a scale bar in combination with - \refKey{/mermap/scalebar/at}. All \tikzname\ placement options for nodes + \refKey{mermap/scalebar/at}. All \tikzname\ placement options for nodes can be used, e.g. \texttt{above left} or \texttt{anchor=mid west}, etc. Actually, \emph{any} node option could be applied here, but the intended use is for placement options only. @@ -298,7 +298,7 @@ but not for critical navigation purposes etc. absolute shift values in each direction, i.e. the algebraic sign is automatically complemented. If only \meta{x shift} is given, then \meta{y shift} is set - to the same value. \refKey{/mermap/scalebar/at} and \refKey{/mermap/scalebar/placement} + to the same value. \refKey{mermap/scalebar/at} and \refKey{mermap/scalebar/placement} are set by this option. \end{docMrcKey} @@ -349,8 +349,8 @@ but not for critical navigation purposes etc. The \emph{minor} part of the scale bar is a single \tikzname\ path object which can be customized by the given \meta{\tikzname\ options}. The \emph{minor} part is seen as holes in the default case. - \refKey{/mermap/scalebar/minor style} has only an effect, if - the minor part is drawn \refKey{/mermap/scalebar/solid}. + \refKey{mermap/scalebar/minor style} has only an effect, if + the minor part is drawn \refKey{mermap/scalebar/solid}. \tikzsetnextfilename{scales_scalebar5} \begin{dispExample} \begin{tikzpicture} @@ -369,7 +369,7 @@ but not for critical navigation purposes etc. \begin{docMrcKey}[scalebar]{single}{\colOpt{=true\textbar false}}{default |true|, initially |false|} If set to |true|, the scale bar is drawn as a single ruler. - \refKey{/mermap/scalebar/single} is inverse to \refKey{/mermap/scalebar/double}. + \refKey{mermap/scalebar/single} is inverse to \refKey{mermap/scalebar/double}. \tikzsetnextfilename{scales_scalebar6} \begin{dispExample} \begin{tikzpicture} @@ -387,8 +387,8 @@ but not for critical navigation purposes etc. \begin{docMrcKey}[scalebar]{solid}{\colOpt{=true\textbar false}}{default |true|, initially |false|} If set to |true|, the \emph{minor} part of the scale bar is drawn opaque. - It is drawn white or according to \refKey{/mermap/scalebar/minor style}. - \refKey{/mermap/scalebar/solid} is inverse to \refKey{/mermap/scalebar/transparent}. + It is drawn white or according to \refKey{mermap/scalebar/minor style}. + \refKey{mermap/scalebar/solid} is inverse to \refKey{mermap/scalebar/transparent}. \end{docMrcKey} diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.sty b/macros/latex/contrib/mercatormap/mercatormap.doc.sty index 80b38241ce..95b45544d7 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.sty +++ b/macros/latex/contrib/mercatormap/mercatormap.doc.sty @@ -4,10 +4,9 @@ \renewcommand*\l@subsubsection{\@dottedtocline{3}{4.2em}{3.2em}} \RequirePackage[T1]{fontenc} -\RequirePackage[utf8]{inputenc} \RequirePackage[english]{babel} \RequirePackage{lmodern,parskip,array} -\RequirePackage[svgnames,table,hyperref]{xcolor} +\RequirePackage[svgnames,table]{xcolor} \RequirePackage{tikz} \RequirePackage{varioref} \RequirePackage[makeindex]{imakeidx} @@ -31,15 +30,17 @@ \RequirePackage{array,tabularx,booktabs} \RequirePackage{lipsum} \RequirePackage[extendedchars,encoding,filenameencoding=utf-8]{grffile} -\RequirePackage{siunitx,xfp} +\RequirePackage{xfp} \RequirePackage{tcolorbox} -\tcbuselibrary{skins,xparse,minted,breakable,documentation,raster} +\tcbuselibrary{skins,minted,breakable,documentation,raster} \providecommand\mrcpkgprefix{} \RequirePackage{\mrcpkgprefix mercatormap} \IfFileExists{../private/privatekeys.tex}{\input{../private/privatekeys.tex}}{} +\RequirePackage{fontawesome5} + \RequirePackage{csquotes} \RequirePackage[%style=authoryear, style=numeric-comp, @@ -96,8 +97,8 @@ borderline horizontal={0.3mm}{0pt}{red!50}, #1}{#2} -\tcbmakedocSubKey{docMrcKey}{mermap} -\tcbmakedocSubKeys{docMrcKeys}{mermap} +\tcbmakedocSubKey[doc key prefix=]{docMrcKey}{mermap} +\tcbmakedocSubKeys[doc key prefix=]{docMrcKeys}{mermap} \tcbmakedocSubKey{docTikzKey}{tikz} \def\tikzname{\textup{Ti\textit{k}Z}} diff --git a/macros/latex/contrib/mercatormap/mercatormap.doc.versionhistory.tex b/macros/latex/contrib/mercatormap/mercatormap.doc.versionhistory.tex deleted file mode 100644 index bcdf2fd322..0000000000 --- a/macros/latex/contrib/mercatormap/mercatormap.doc.versionhistory.tex +++ /dev/null @@ -1,50 +0,0 @@ -% !TeX root = mercatormap.tex -% !TeX encoding=UTF-8 -% !TeX spellcheck=en_US -% include file of mercatormap.tex (manual of the LaTeX package mercatormap) -\clearpage -\section{Version History}% - -\section*{v1.00 (2020/04/20)} -\begin{itemize} -\item Initial public release. -\end{itemize} - -\section*{v1.01 (2020/05/05)} -\begin{itemize} -\item Sorting of index key entries fixed for the documentation. -\item User messages for failed Python script calls are changed from warnings to - errors to fail fast and to provide more information and hints about - possible reasons. -\item New general marker option - \refKey{/mermap/marker/generic} with corresponding macros - \docAuxCommand*{mrcmarkergeneric} - and \docAuxCommand*{l_mermap_marker_generic_tl}. Also, the marker uuid is - made |expl3| accessible as \docAuxCommand*{l_mermap_marker_uuid_tl}. -\item New hyper marker options - \refKey{/mermap/marker/url}, - \refKey{/mermap/marker/link}, - \refKey{/mermap/marker/use urls}, - \refKey{/mermap/marker/ignore urls}, - \refKey{/mermap/marker/use links}, - \refKey{/mermap/marker/ignore links}. -\end{itemize} - - -\section*{v1.02 (2020/08/06)} -\begin{itemize} -\item New options - \refKey{/mermap/supply/area from marker input} and - \refKey{/mermap/supply/add area from marker input} - which allow to fit a map to a given external list of marker positions. -\item New option \refKey{/mermap/fail on missing resource} to control - compilation behavior for missing resource files. -\item Openrouteservice has discontinued mapsurfer tiles since June 2020.\\ - Therefore, \refKey{/mermap/supply/source}=\docValue{openrouteservice mapsurfer} - is deprecated now. It is not documented any more, but - for some time it is still available for old documents with - cached map tiles. -\item\issuetracker{2} - New marker option \refKey{/mermap/marker/distance} with corresponding - macro \docAuxCommand{mrcmarkerdistance}. -\end{itemize} diff --git a/macros/latex/contrib/mercatormap/mercatormap.pdf b/macros/latex/contrib/mercatormap/mercatormap.pdf Binary files differindex d90d749617..1c0c7dc3d8 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.pdf +++ b/macros/latex/contrib/mercatormap/mercatormap.pdf diff --git a/macros/latex/contrib/mercatormap/mercatormap.sty b/macros/latex/contrib/mercatormap/mercatormap.sty index d2c8d61ae4..b9f77b9715 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.sty +++ b/macros/latex/contrib/mercatormap/mercatormap.sty @@ -1,8 +1,8 @@ -%% The LaTeX package mercatormap - version 1.02 (2020/08/06) +%% The LaTeX package mercatormap - version 1.2.0 (2024/08/05) %% mercatormap.sty: geographic coordinates (Mercator projection) and map tiles for TikZ pictures %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the @@ -17,24 +17,11 @@ %% %% This work consists of all files listed in README %% -\RequirePackage{expl3}[2020/02/25] -\RequirePackage{xparse} -\ProvidesExplPackage{mercatormap}{2020/08/06}{1.02} +\NeedsTeXFormat{LaTeX2e}[2023-11-01] +\ProvidesExplPackage{mercatormap}{2024/08/05}{1.2.0} {A Web Mercator projection package with map tile support} -\@ifpackagelater { expl3 } { 2020/02/25 } - { } - { - \PackageError { mercatormap } { Support~package~expl3~too~old } - { - You~need~to~update~your~installation~of~the~bundles~'l3kernel'~and~ - 'l3packages'.\MessageBreak - Loading~mercatormap~will~abort! - } - \tex_endinput:D - } -\RequirePackage{siunitx} -\RequirePackage{graphicx,tikz,pdftexcmds} +\RequirePackage{siunitx,graphicx,tikz} \ExplSyntaxOff % space character problem if within explSyntax @@ -51,8 +38,23 @@ \NewDocumentCommand\mermapsetmarker{ m } { \keys_set:nn { mermap/marker } {#1} } -%---- constants ---------------------------------------------------------------- +%---- scratch variables -------------------------------------------------------- + +\box_new:N \l__mermap_tmpa_box + +\clist_new:N \l__mermap_tmpa_clist +\dim_new:N \l__mermap_tmpa_dim +\dim_new:N \l__mermap_tmpb_dim + +\fp_new:N \l__mermap_tmpa_fp +\fp_new:N \l__mermap_tmpb_fp + +\tl_new:N \g__mermap_tmpa_tl +\tl_new:N \l__mermap_tmpa_tl +\tl_new:N \l__mermap_tmpb_tl + +%---- constants ---------------------------------------------------------------- \fp_const:Nn \c__mermap_scale_radius_fp { 6371*pi/180 } \fp_const:Nn \c__mermap_mean_radius_fp { 637100000cm } @@ -235,16 +237,16 @@ \cs_new_nopar:Npn \__mermap_longitude_to_x:n #1 { - \fp_set:Nn \l_tmpa_fp { #1-\l__mermap_mapwest_fp } - \fp_sub:Nn \l_tmpa_fp { 360*floor(\l_tmpa_fp/360) } - \fp_set:Nn \l_tmpa_fp - { \l_tmpa_fp>\l__mermap_westeast_fp - ?(\l_tmpa_fp-\l__mermap_westeast_fp>360-\l_tmpa_fp - ?\l_tmpa_fp-360 - :\l_tmpa_fp) - :\l_tmpa_fp + \fp_set:Nn \l__mermap_tmpa_fp { #1-\l__mermap_mapwest_fp } + \fp_sub:Nn \l__mermap_tmpa_fp { 360*floor(\l__mermap_tmpa_fp/360) } + \fp_set:Nn \l__mermap_tmpa_fp + { \l__mermap_tmpa_fp>\l__mermap_westeast_fp + ?(\l__mermap_tmpa_fp-\l__mermap_westeast_fp>360-\l__mermap_tmpa_fp + ?\l__mermap_tmpa_fp-360 + :\l__mermap_tmpa_fp) + :\l__mermap_tmpa_fp } - \fp_set:Nn \l__mermap_cs_x_fp { \l_tmpa_fp*\l__mermap_cs_xfactor_fp } + \fp_set:Nn \l__mermap_cs_x_fp { \l__mermap_tmpa_fp*\l__mermap_cs_xfactor_fp } } @@ -328,7 +330,7 @@ } -\prg_new_conditional:Npnn \__mermap_if_in_map:nn #1#2 { p, TF } +\prg_new_conditional:Npnn \__mermap_if_in_map:nn #1#2 { p, T, F, TF } { \fp_compare:nNnTF {#1} > \l__mermap_mapnorth_fp { @@ -340,14 +342,14 @@ \prg_return_false: } { - \fp_set:Nn \l_tmpa_fp { #2-\l__mermap_mapwest_fp } - \fp_sub:Nn \l_tmpa_fp { 360*floor(\l_tmpa_fp/360) } - \fp_compare:nNnTF \l_tmpa_fp > \l__mermap_westeast_fp + \fp_set:Nn \l__mermap_tmpa_fp { #2-\l__mermap_mapwest_fp } + \fp_sub:Nn \l__mermap_tmpa_fp { 360*floor(\l__mermap_tmpa_fp/360) } + \fp_compare:nNnTF \l__mermap_tmpa_fp > \l__mermap_westeast_fp { \prg_return_false: } { - \fp_set:Nn \l__mermap_cs_x_fp { \l_tmpa_fp*\l__mermap_cs_xfactor_fp } + \fp_set:Nn \l__mermap_cs_x_fp { \l__mermap_tmpa_fp*\l__mermap_cs_xfactor_fp } \__mermap_latitude_to_y:n {#1} \pgfnoderename{mrclastpos}{mrcpos} \pgfcoordinate{mrcpos}{ @@ -366,7 +368,7 @@ } -\prg_new_conditional:Npnn \__mermap_if_in_vicinity:nn #1#2 { p, TF } +\prg_new_conditional:Npnn \__mermap_if_in_vicinity:nn #1#2 { p, T, F, TF } { \fp_compare:nNnTF {#1} > \l__mermap_vic_north_fp { @@ -378,14 +380,14 @@ \prg_return_false: } { - \fp_set:Nn \l_tmpa_fp { #2-\l__mermap_vic_west_fp } - \fp_sub:Nn \l_tmpa_fp { 360*floor(\l_tmpa_fp/360) } - \fp_compare:nNnTF \l_tmpa_fp > \l__mermap_vic_westeast_fp + \fp_set:Nn \l__mermap_tmpa_fp { #2-\l__mermap_vic_west_fp } + \fp_sub:Nn \l__mermap_tmpa_fp { 360*floor(\l__mermap_tmpa_fp/360) } + \fp_compare:nNnTF \l__mermap_tmpa_fp > \l__mermap_vic_westeast_fp { \prg_return_false: } { - \fp_set:Nn \l__mermap_cs_x_fp { \l_tmpa_fp*\l__mermap_cs_xfactor_fp - \l__mermap_vic_dim_fp } + \fp_set:Nn \l__mermap_cs_x_fp { \l__mermap_tmpa_fp*\l__mermap_cs_xfactor_fp - \l__mermap_vic_dim_fp } \__mermap_latitude_to_y:n {#1} \pgfnoderename{mrclastpos}{mrcpos} \pgfcoordinate{mrcpos}{ @@ -443,19 +445,13 @@ \NewExpandableDocumentCommand \mrcNPlat { m } { - \cs_if_exist_use:cF{__mermap__lat__#1} - { - \msg_error:nnx{ mercatormap }{ np-undefined }{ #1 } - } + \cs_if_exist_use:cF{ __mermap__lat__#1 }{ 0 } } \NewExpandableDocumentCommand \mrcNPlon { m } { - \cs_if_exist_use:cF{__mermap__lon__#1} - { - \msg_error:nnx{ mercatormap }{ np-undefined }{ #1 } - } + \cs_if_exist_use:cF{ __mermap__lon__#1 }{ 0 } } @@ -465,15 +461,75 @@ } +\prg_new_conditional:Npnn \__mermap_if_NP_exists:n #1 { p, TF } + { + \cs_if_exist:cTF{ __mermap__lat__#1 } + { + \cs_if_exist:cTF{ __mermap__lon__#1 } + { + \prg_return_true: + } + { + \prg_return_false: + } + } + { + \prg_return_false: + } + } + + +\NewDocumentCommand{\ifmrcNPexists}{ m } + { + \__mermap_if_NP_exists:nTF{ #1 } + } + + +\prg_new_conditional:Npnn \__mermap_if_NP_in_map:n #1 { p, TF } + { + \__mermap_if_NP_exists:nTF { #1 } + { + \__mermap_if_in_map:nnTF{ \mrcNPlat{#1} }{ \mrcNPlon{#1} } + { + \prg_return_true: + } + { + \prg_return_false: + } + } + { + \prg_return_false: + } + } + + \NewDocumentCommand{\ifmrcNPinmap}{ m } { - \__mermap_if_in_map:nnTF{\mrcNPlat{#1}}{\mrcNPlon{#1}} + \__mermap_if_NP_in_map:nTF { #1 } + } + + +\prg_new_conditional:Npnn \__mermap_if_NP_in_vicinity:n #1 { p, TF } + { + \__mermap_if_NP_exists:nTF { #1 } + { + \__mermap_if_in_vicinity:nnTF{ \mrcNPlat{#1} }{ \mrcNPlon{#1} } + { + \prg_return_true: + } + { + \prg_return_false: + } + } + { + \prg_return_false: + } } \NewDocumentCommand{\ifmrcNPinvicinity}{ m } { - \__mermap_if_in_vicinity:nnTF{\mrcNPlat{#1}}{\mrcNPlon{#1}} + \__mermap_if_NP_in_vicinity:nTF{ #1 } } @@ -485,7 +541,7 @@ \char_set_catcode_other:n {`\"} \tl_const:Nn \c__mermap_supply_call_boundaries_tl - {% + { \l__mermap_python_tl\c_space_tl boundaries -u "\str_use:N\l__mermap_supply_url_str" -at "\str_use:N\l__mermap_supply_attribution_str" @@ -503,7 +559,7 @@ } \tl_const:Nn \c__mermap_supply_call_reference_tl - {% + { \l__mermap_python_tl\c_space_tl reference -u "\str_use:N\l__mermap_supply_url_str" -at "\str_use:N\l__mermap_supply_attribution_str" @@ -523,7 +579,7 @@ \tl_const:Nn \c__mermap_supply_call_areafit_tl - {% + { \l__mermap_python_tl\c_space_tl areafit -u "\str_use:N\l__mermap_supply_url_str" -at "\str_use:N\l__mermap_supply_attribution_str" @@ -604,11 +660,11 @@ \cs_new:Npn \__mermap_supply_url_with_api_key:nnn #1#2#3 { \str_set:Nn \l__mermap_supply_url_str {#1} - \prop_get:NnNF \g__mermap_apikey_prop {#2} \l_tmpa_tl + \prop_get:NnNF \g__mermap_apikey_prop {#2} \l__mermap_tmpa_tl { \msg_error:nnx{ mercatormap }{ api-key-undefined }{ #2 } } - \str_put_right:NV \l__mermap_supply_url_str \l_tmpa_tl + \str_put_right:NV \l__mermap_supply_url_str \l__mermap_tmpa_tl \str_put_right:Nn \l__mermap_supply_url_str {#3} } @@ -621,16 +677,16 @@ { \msg_error:nnx{ mercatormap }{ np-undefined }{ ##1 } } - \fp_set:Nn \l_tmpa_fp { \mrcNPlat{##1} } - \fp_compare:nNnT \l_tmpa_fp < \l__mermap_supply_south_fp - { \fp_set_eq:NN \l__mermap_supply_south_fp \l_tmpa_fp } - \fp_compare:nNnT \l_tmpa_fp > \l__mermap_supply_north_fp - { \fp_set_eq:NN \l__mermap_supply_north_fp \l_tmpa_fp } - \fp_set:Nn \l_tmpa_fp { \mrcNPlon{##1} } - \fp_compare:nNnT \l_tmpa_fp < \l__mermap_supply_west_fp - { \fp_set_eq:NN \l__mermap_supply_west_fp \l_tmpa_fp } - \fp_compare:nNnT \l_tmpa_fp > \l__mermap_supply_east_fp - { \fp_set_eq:NN \l__mermap_supply_east_fp \l_tmpa_fp } + \fp_set:Nn \l__mermap_tmpa_fp { \mrcNPlat{##1} } + \fp_compare:nNnT \l__mermap_tmpa_fp < \l__mermap_supply_south_fp + { \fp_set_eq:NN \l__mermap_supply_south_fp \l__mermap_tmpa_fp } + \fp_compare:nNnT \l__mermap_tmpa_fp > \l__mermap_supply_north_fp + { \fp_set_eq:NN \l__mermap_supply_north_fp \l__mermap_tmpa_fp } + \fp_set:Nn \l__mermap_tmpa_fp { \mrcNPlon{##1} } + \fp_compare:nNnT \l__mermap_tmpa_fp < \l__mermap_supply_west_fp + { \fp_set_eq:NN \l__mermap_supply_west_fp \l__mermap_tmpa_fp } + \fp_compare:nNnT \l__mermap_tmpa_fp > \l__mermap_supply_east_fp + { \fp_set_eq:NN \l__mermap_supply_east_fp \l__mermap_tmpa_fp } } } @@ -662,14 +718,14 @@ { \msg_error:nnn { mercatormap }{ input-area-marker }{ #1 } } - \tl_gset:Nx \g_tmpa_tl + \tl_gset:Nx \g__mermap_tmpa_tl { \exp_not:N\fp_set:Nn \exp_not:N\l__mermap_supply_west_fp { \fp_to_decimal:N\l__mermap_supply_west_fp } \exp_not:N\fp_set:Nn \exp_not:N\l__mermap_supply_east_fp { \fp_to_decimal:N\l__mermap_supply_east_fp } \exp_not:N\fp_set:Nn \exp_not:N\l__mermap_supply_south_fp { \fp_to_decimal:N\l__mermap_supply_south_fp } \exp_not:N\fp_set:Nn \exp_not:N\l__mermap_supply_north_fp { \fp_to_decimal:N\l__mermap_supply_north_fp } } - \group_insert_after:N \g_tmpa_tl + \group_insert_after:N \g__mermap_tmpa_tl \group_end: } @@ -715,18 +771,18 @@ _source .choice:, area .code:n = { - \clist_set:Nn \l_tmpa_clist { #1 } + \clist_set:Nn \l__mermap_tmpa_clist { #1 } \fp_set:Nn \l__mermap_supply_west_fp { inf } \fp_set:Nn \l__mermap_supply_east_fp { -inf } \fp_set:Nn \l__mermap_supply_south_fp { 89 } \fp_set:Nn \l__mermap_supply_north_fp { -89 } - \__mermap_supply_add_area_clist:N \l_tmpa_clist + \__mermap_supply_add_area_clist:N \l__mermap_tmpa_clist }, area .value_required:n = true, add~area .code:n = { - \clist_set:Nn \l_tmpa_clist { #1 } - \__mermap_supply_add_area_clist:N \l_tmpa_clist + \clist_set:Nn \l__mermap_tmpa_clist { #1 } + \__mermap_supply_add_area_clist:N \l__mermap_tmpa_clist }, area~from~marker~input .code:n = { @@ -756,20 +812,20 @@ flex~area~fit .code:n = { \fp_compare:nNnF \l__mermap_tile_size_dim = \l__mermap_flex_tile_size_dim { - \fp_set:Nn \l_tmpa_fp { \l__mermap_tile_size_dim/\l__mermap_flex_tile_size_dim } - \fp_set:Nn \l__mermap_supply_width_fp{\l__mermap_supply_width_fp*\l_tmpa_fp} - \fp_set:Nn \l__mermap_supply_height_fp{\l__mermap_supply_height_fp*\l_tmpa_fp} + \fp_set:Nn \l__mermap_tmpa_fp { \l__mermap_tile_size_dim/\l__mermap_flex_tile_size_dim } + \fp_set:Nn \l__mermap_supply_width_fp{\l__mermap_supply_width_fp*\l__mermap_tmpa_fp} + \fp_set:Nn \l__mermap_supply_height_fp{\l__mermap_supply_height_fp*\l__mermap_tmpa_fp} } \fp_set:Nn \l__mermap_supply_width_fp{\l__mermap_supply_width_fp-(#1)/\l__mermap_flex_tile_size_dim} \fp_set:Nn \l__mermap_supply_height_fp{\l__mermap_supply_height_fp-(#1)/\l__mermap_flex_tile_size_dim} - \fp_set:Nn \l_tmpa_fp { min ( 180*\l__mermap_supply_width_fp / (\l__mermap_supply_east_fp-\l__mermap_supply_west_fp) + \fp_set:Nn \l__mermap_tmpa_fp { min ( 180*\l__mermap_supply_width_fp / (\l__mermap_supply_east_fp-\l__mermap_supply_west_fp) , pi*\l__mermap_supply_height_fp / ln( tand(\l__mermap_supply_north_fp/2+45) / tand(\l__mermap_supply_south_fp/2+45) ) ) } - \fp_set:Nn \l_tmpb_fp { ln(\l_tmpa_fp)/ln(2) } - \fp_set:Nn \l_tmpb_fp { round(\l_tmpb_fp)/\l_tmpb_fp } - \fp_set:Nn \l_tmpb_fp { \l_tmpa_fp^(\l_tmpb_fp-1+0.0000001) } - \dim_set:Nn \l__mermap_tile_size_dim { \fp_to_dim:n { \l__mermap_flex_tile_size_dim / \l_tmpb_fp }} - \fp_set:Nn \l__mermap_supply_width_fp { \l__mermap_supply_width_fp * \l_tmpb_fp + (#1)/\l__mermap_tile_size_dim } - \fp_set:Nn \l__mermap_supply_height_fp { \l__mermap_supply_height_fp * \l_tmpb_fp + (#1)/\l__mermap_tile_size_dim } + \fp_set:Nn \l__mermap_tmpb_fp { ln(\l__mermap_tmpa_fp)/ln(2) } + \fp_set:Nn \l__mermap_tmpb_fp { round(\l__mermap_tmpb_fp)/\l__mermap_tmpb_fp } + \fp_set:Nn \l__mermap_tmpb_fp { \l__mermap_tmpa_fp^(\l__mermap_tmpb_fp-1+0.0000001) } + \dim_set:Nn \l__mermap_tile_size_dim { \fp_to_dim:n { \l__mermap_flex_tile_size_dim / \l__mermap_tmpb_fp }} + \fp_set:Nn \l__mermap_supply_width_fp { \l__mermap_supply_width_fp * \l__mermap_tmpb_fp + (#1)/\l__mermap_tile_size_dim } + \fp_set:Nn \l__mermap_supply_height_fp { \l__mermap_supply_height_fp * \l__mermap_tmpb_fp + (#1)/\l__mermap_tile_size_dim } }, flex~area~fit .default:n = 0pt, } @@ -815,16 +871,13 @@ \msg_new:nnn { mercatormap }{ python-script } - { Python~script~'maptiles.texpy'~is~created~(for~map~tile~download). } + { Python~script~'maptiles.texpy'~is~created~for~map~tile~download. } \NewDocumentCommand \mrcactivatescript {} { \msg_info:nn { mercatormap }{ python-script } - \group_begin: - \def\@latex@warning@no@line##1{}% suppress filecontents warning \file_input:n {\mrcpkgprefix mercatorpy.def} - \group_end: \bool_set_true:N \l__mermap_script_activated_bool } \@onlypreamble\mrcactivatescript @@ -838,21 +891,21 @@ \cs_new:Npn \__mermap_create_definition_id:n #1 { - \tl_set:Nx \l_tmpa_tl {#1} - \tl_trim_spaces:N \l_tmpa_tl - \str_set:Nx \l__mermap_definition_postfix_str {\tl_to_str:N \l_tmpa_tl} + \tl_set:Nx \l__mermap_tmpa_tl {#1} + \tl_trim_spaces:N \l__mermap_tmpa_tl + \str_set:Nx \l__mermap_definition_postfix_str {\tl_to_str:N \l__mermap_tmpa_tl} \str_concat:NNN \l__mermap_definition_id_str \l__mermap_definition_prefix_str \l__mermap_definition_postfix_str } \cs_new:Npn \__mermap_map:nn #1#2 { - \tl_set:Nx \l_tmpa_tl {#2} - \tl_trim_spaces:N \l_tmpa_tl - \tl_if_empty:NT \l_tmpa_tl + \tl_set:Nx \l__mermap_tmpa_tl {#2} + \tl_trim_spaces:N \l__mermap_tmpa_tl + \tl_if_empty:NT \l__mermap_tmpa_tl { \int_gincr:N \g__mermap_automap_int - \tl_set:Nx \l_tmpa_tl + \tl_set:Nx \l__mermap_tmpa_tl { automap- \int_compare:nNnTF \g__mermap_automap_int<{10} {000} @@ -865,7 +918,7 @@ \int_use:N \g__mermap_automap_int } } - \str_set:Nx \l__mermap_definition_postfix_str {\tl_to_str:N \l_tmpa_tl} + \str_set:Nx \l__mermap_definition_postfix_str {\tl_to_str:N \l__mermap_tmpa_tl} \str_concat:NNN \l__mermap_definition_id_str \l__mermap_definition_prefix_str \l__mermap_definition_postfix_str \__mermap_supplymap:n {#1} @@ -886,12 +939,12 @@ { \group_begin: \keys_set:nn { mermap/supply } { #1 } - \tl_set:Nx \l_tmpa_tl { \str_use:N\l__mermap_definition_id_str } - \prop_if_in:NVT \g__mermap_definition_prop \l_tmpa_tl + \tl_set:Nx \l__mermap_tmpa_tl { \str_use:N\l__mermap_definition_id_str } + \prop_if_in:NVT \g__mermap_definition_prop \l__mermap_tmpa_tl { - \msg_warning:nnx { mercatormap }{ definition-id-used }{ \tl_use:N \l_tmpa_tl } + \msg_warning:nnx { mercatormap }{ definition-id-used }{ \tl_use:N \l__mermap_tmpa_tl } } - \prop_gput:NVn \g__mermap_definition_prop \l_tmpa_tl {} + \prop_gput:NVn \g__mermap_definition_prop \l__mermap_tmpa_tl {} \bool_if:NT \l__mermap_script_activated_bool { \__mermap_supplymap_call: @@ -927,10 +980,10 @@ \cs_new:Npn \__mermap_supplymap_call: { - \tl_set_eq:Nc \l_tmpa_tl { + \tl_set_eq:Nc \l__mermap_tmpa_tl { c__mermap_supply_call_\l__mermap_supply_type_tl _tl } - \tl_set:Nx \l__mermap_supply_call_tl \l_tmpa_tl - \tl_set:Nx \l__mermap_mdfivesum_tl { \pdf@mdfivesum{\l__mermap_supply_call_tl} } + \tl_set:Nx \l__mermap_supply_call_tl \l__mermap_tmpa_tl + \tl_set:Nx \l__mermap_mdfivesum_tl { \str_mdfive_hash:e{\l__mermap_supply_call_tl} } \file_if_exist:nTF {\l__mermap_definition_id_str.def} { \tl_clear:N \l__mermap_last_mdfivesum_tl @@ -1031,8 +1084,8 @@ \cs_new_nopar:Npn \__mermap_set_flex_scale:nn #1#2 { - \fp_set:Nn \l_tmpa_fp { 1+ln(\c__mermap_mean_radius_fp/#1*cosd(#2)*pi/\l__mermap_flex_tile_size_dim)/ln(2) } - \keys_set:nn { mermap }{ flex~zoom=\l_tmpa_fp } + \fp_set:Nn \l__mermap_tmpa_fp { 1+ln(\c__mermap_mean_radius_fp/#1*cosd(#2)*pi/\l__mermap_flex_tile_size_dim)/ln(2) } + \keys_set:nn { mermap }{ flex~zoom=\l__mermap_tmpa_fp } } \use:x @@ -1323,19 +1376,19 @@ \cs_new_nopar:Npn \__mermap_compute_network_step:nn #1#2 { - \fp_set:Nn \l_tmpa_fp + \fp_set:Nn \l__mermap_tmpa_fp { min ( \l__mermap_network_pieces_int, round((#1)/\l__mermap_network_distance_dim) ) } - \fp_set:Nn \l_tmpb_fp { (#2)/\l_tmpa_fp } - \fp_set:Nn \l_tmpa_fp { floor(ln(\l_tmpb_fp)/ln(10)) } - \fp_compare:nNnTF {\l_tmpa_fp} < {0} + \fp_set:Nn \l__mermap_tmpb_fp { (#2)/\l__mermap_tmpa_fp } + \fp_set:Nn \l__mermap_tmpa_fp { floor(ln(\l__mermap_tmpb_fp)/ln(10)) } + \fp_compare:nNnTF {\l__mermap_tmpa_fp} < {0} { - \fp_compare:nNnTF {\l_tmpa_fp} > {-5} + \fp_compare:nNnTF {\l__mermap_tmpa_fp} > {-5} { \use:x { - \exp_not:N\keys_set:nn { mermap }{ format~angle=decimal\fp_to_int:N\l_tmpa_fp} + \exp_not:N\keys_set:nn { mermap }{ format~angle=decimal\fp_to_int:N\l__mermap_tmpa_fp} } } { @@ -1345,25 +1398,25 @@ { \keys_set:nn { mermap }{ format~angle=decimal-0 } } - \fp_set:Nn \l_tmpa_fp { 10^\l_tmpa_fp } - \fp_set:Nn \l_tmpb_fp { \l_tmpb_fp/\l_tmpa_fp } - \fp_compare:nNnTF {abs(\l_tmpb_fp-1)} < {abs(\l_tmpb_fp-2)} + \fp_set:Nn \l__mermap_tmpa_fp { 10^\l__mermap_tmpa_fp } + \fp_set:Nn \l__mermap_tmpb_fp { \l__mermap_tmpb_fp/\l__mermap_tmpa_fp } + \fp_compare:nNnTF {abs(\l__mermap_tmpb_fp-1)} < {abs(\l__mermap_tmpb_fp-2)} { - \fp_compare:nNnTF {abs(\l_tmpb_fp-1)} < {abs(\l_tmpb_fp-5)} + \fp_compare:nNnTF {abs(\l__mermap_tmpb_fp-1)} < {abs(\l__mermap_tmpb_fp-5)} { - \fp_set:Nn \l__mermap_result_fp {\l_tmpa_fp} + \fp_set:Nn \l__mermap_result_fp {\l__mermap_tmpa_fp} } { - \fp_set:Nn \l__mermap_result_fp {5*\l_tmpa_fp} + \fp_set:Nn \l__mermap_result_fp {5*\l__mermap_tmpa_fp} } } { - \fp_compare:nNnTF {abs(\l_tmpb_fp-2)} < {abs(\l_tmpb_fp-5)} + \fp_compare:nNnTF {abs(\l__mermap_tmpb_fp-2)} < {abs(\l__mermap_tmpb_fp-5)} { - \fp_set:Nn \l__mermap_result_fp {2*\l_tmpa_fp} + \fp_set:Nn \l__mermap_result_fp {2*\l__mermap_tmpa_fp} } { - \fp_set:Nn \l__mermap_result_fp {5*\l_tmpa_fp} + \fp_set:Nn \l__mermap_result_fp {5*\l__mermap_tmpa_fp} } } } @@ -1376,46 +1429,46 @@ \IfNoValueF {#1} { \keys_set:nn { mermap } {#1} } \tl_use:N \l__mermap_tikz_map_clip_tl \__mermap_compute_network_step:nn {\l__mermap_tex_height_fp}{\l__mermap_mapnorth_fp-\l__mermap_mapsouth_fp} - \fp_set:Nn \l_tmpa_fp { ceil(\l__mermap_mapsouth_fp/\l__mermap_result_fp)*\l__mermap_result_fp} - \fp_compare:nNnT {\l_tmpa_fp-\l__mermap_mapsouth_fp} < {1e-10} + \fp_set:Nn \l__mermap_tmpa_fp { ceil(\l__mermap_mapsouth_fp/\l__mermap_result_fp)*\l__mermap_result_fp} + \fp_compare:nNnT {\l__mermap_tmpa_fp-\l__mermap_mapsouth_fp} < {1e-10} { - \fp_add:Nn \l_tmpa_fp {\l__mermap_result_fp} + \fp_add:Nn \l__mermap_tmpa_fp {\l__mermap_result_fp} } - \fp_while_do:nNnn {\l_tmpa_fp} < {\l__mermap_mapnorth_fp} + \fp_while_do:nNnn {\l__mermap_tmpa_fp} < {\l__mermap_mapnorth_fp} { - \tl_set:Nn \l_tmpa_tl {\fp_use:N\l_tmpa_fp} - \draw[gray,very~thin] (mrc~cs\c_colon_str lat=\l_tmpa_tl,lon=\mrcmapwest) + \tl_set:Nn \l__mermap_tmpa_tl {\fp_use:N\l__mermap_tmpa_fp} + \draw[gray,very~thin] (mrc~cs\c_colon_str lat=\l__mermap_tmpa_tl,lon=\mrcmapwest) coordinate (mermap_temp) node[right=1mm,inner~sep=0.5pt,black!50!gray,font=\l__mermap_network_font_tl, fill=white,opacity=0.3,text~opacity=1, - ]{\mrcformlat{\l_tmpa_tl}} + ]{\mrcformlat{\l__mermap_tmpa_tl}} -- (mermap_temp -| mrcmap.east) node[left=1mm,inner~sep=0.5pt,black!50!gray,font=\l__mermap_network_font_tl, fill=white,opacity=0.3,text~opacity=1, - ]{\mrcformlat{\l_tmpa_tl}} + ]{\mrcformlat{\l__mermap_tmpa_tl}} ; - \fp_add:Nn \l_tmpa_fp {\l__mermap_result_fp} + \fp_add:Nn \l__mermap_tmpa_fp {\l__mermap_result_fp} } \__mermap_compute_network_step:nn {\l__mermap_tex_width_fp}{\l__mermap_mapeast_fp-\l__mermap_mapwest_fp} - \fp_set:Nn \l_tmpa_fp { ceil(\l__mermap_mapwest_fp/\l__mermap_result_fp)*\l__mermap_result_fp} - \fp_compare:nNnT {\l_tmpa_fp-\l__mermap_mapwest_fp} < {1e-10} + \fp_set:Nn \l__mermap_tmpa_fp { ceil(\l__mermap_mapwest_fp/\l__mermap_result_fp)*\l__mermap_result_fp} + \fp_compare:nNnT {\l__mermap_tmpa_fp-\l__mermap_mapwest_fp} < {1e-10} { - \fp_add:Nn \l_tmpa_fp {\l__mermap_result_fp} + \fp_add:Nn \l__mermap_tmpa_fp {\l__mermap_result_fp} } - \fp_while_do:nNnn {\l_tmpa_fp} < {\l__mermap_mapeast_fp} + \fp_while_do:nNnn {\l__mermap_tmpa_fp} < {\l__mermap_mapeast_fp} { - \tl_set:Nn \l_tmpa_tl {\fp_use:N\l_tmpa_fp} - \draw[gray,very~thin] (mrc~cs\c_colon_str lon=\l_tmpa_tl,lat=\mrcmapsouth) + \tl_set:Nn \l__mermap_tmpa_tl {\fp_use:N\l__mermap_tmpa_fp} + \draw[gray,very~thin] (mrc~cs\c_colon_str lon=\l__mermap_tmpa_tl,lat=\mrcmapsouth) coordinate (mermap_temp) node[above=1mm,inner~sep=0.5pt,black!50!gray,font=\l__mermap_network_font_tl, fill=white,opacity=0.3,text~opacity=1, - ]{\mrcformlon{\l_tmpa_tl}} + ]{\mrcformlon{\l__mermap_tmpa_tl}} -- (mermap_temp |- mrcmap.north) node[below=1mm,inner~sep=0.5pt,black!50!gray,font=\l__mermap_network_font_tl, fill=white,opacity=0.3,text~opacity=1, - ]{\mrcformlon{\l_tmpa_tl}} + ]{\mrcformlon{\l__mermap_tmpa_tl}} ; - \fp_add:Nn \l_tmpa_fp {\l__mermap_result_fp} + \fp_add:Nn \l__mermap_tmpa_fp {\l__mermap_result_fp} } \end{scope} } @@ -1488,26 +1541,26 @@ \cs_new_nopar:Npn \__mermap_pretty_distance:n #1 { - \fp_set:Nn \l_tmpa_fp { #1 } - \fp_compare:nNnTF \l_tmpa_fp < 5 + \fp_set:Nn \l__mermap_tmpa_fp { #1 } + \fp_compare:nNnTF \l__mermap_tmpa_fp < 5 { - \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:n{1000*\l_tmpa_fp}}{\meter} + \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:n{1000*\l__mermap_tmpa_fp}}{\meter} } { - \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:N \l_tmpa_fp}{\kilo\meter} + \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:N \l__mermap_tmpa_fp}{\kilo\meter} } } \cs_new_nopar:Npn \__mermap_pretty_length:n #1 { - \fp_set:Nn \l_tmpa_fp { (#1)*\l__mermap_scale_fp } - \fp_compare:nNnTF \l_tmpa_fp < 5 + \fp_set:Nn \l__mermap_tmpa_fp { (#1)*\l__mermap_scale_fp } + \fp_compare:nNnTF \l__mermap_tmpa_fp < 5 { - \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:n{1000*\l_tmpa_fp}}{\meter} + \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:n{1000*\l__mermap_tmpa_fp}}{\meter} } { - \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:N \l_tmpa_fp}{\kilo\meter} + \SI[round-mode=figures,round-precision=3,detect-all]{\fp_to_decimal:N \l__mermap_tmpa_fp}{\kilo\meter} } } @@ -1535,25 +1588,25 @@ \cs_new_nopar:Npn \__mermap_format_angle_minute:n #1 { - \fp_set:Nn \l_tmpa_fp {floor(#1)} - \fp_set:Nn \l_tmpb_fp {round((#1-\l_tmpa_fp)*60)} + \fp_set:Nn \l__mermap_tmpa_fp {floor(#1)} + \fp_set:Nn \l__mermap_tmpb_fp {round((#1-\l__mermap_tmpa_fp)*60)} \ang[add-arc-degree-zero,add-arc-minute-zero] { - \fp_to_int:N \l_tmpa_fp ; - \fp_to_int:N \l_tmpb_fp ; + \fp_to_int:N \l__mermap_tmpa_fp ; + \fp_to_int:N \l__mermap_tmpb_fp ; } } \cs_new_nopar:Npn \__mermap_format_angle_second:n #1 { - \fp_set:Nn \l_tmpa_fp {floor(#1)} - \fp_set:Nn \l_tmpb_fp {floor((#1-\l_tmpa_fp)*60)} + \fp_set:Nn \l__mermap_tmpa_fp {floor(#1)} + \fp_set:Nn \l__mermap_tmpb_fp {floor((#1-\l__mermap_tmpa_fp)*60)} \ang[add-arc-degree-zero,add-arc-minute-zero] { - \fp_to_int:N \l_tmpa_fp ; - \fp_to_int:N \l_tmpb_fp ; - \fp_to_int:n {round(((#1-\l_tmpa_fp)*60-\l_tmpb_fp)*60)} + \fp_to_int:N \l__mermap_tmpa_fp ; + \fp_to_int:N \l__mermap_tmpb_fp ; + \fp_to_int:n {round(((#1-\l__mermap_tmpa_fp)*60-\l__mermap_tmpb_fp)*60)} } } @@ -1562,14 +1615,14 @@ \group_begin: \IfNoValueF {#1} { \keys_set:nn { mermap } {#1} } - \fp_set:Nn \l_tmpa_fp {#2} - \fp_compare:nNnTF \l_tmpa_fp < 0 + \fp_set:Nn \l__mermap_tmpa_fp {#2} + \fp_compare:nNnTF \l__mermap_tmpa_fp < 0 { - \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:n{-\l_tmpa_fp}} + \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:n{-\l__mermap_tmpa_fp}} \__mermap_format_south:n {\__mermap_format_angle:n{\l__mermap_temp_tl}} } { - \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:N \l_tmpa_fp} + \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:N \l__mermap_tmpa_fp} \__mermap_format_north:n {\__mermap_format_angle:n{\l__mermap_temp_tl}} } \group_end: @@ -1580,14 +1633,14 @@ \group_begin: \IfNoValueF {#1} { \keys_set:nn { mermap } {#1} } - \fp_set:Nn \l_tmpa_fp {#2-360*floor((#2+180)/360)} - \fp_compare:nNnTF \l_tmpa_fp < 0 + \fp_set:Nn \l__mermap_tmpa_fp {#2-360*floor((#2+180)/360)} + \fp_compare:nNnTF \l__mermap_tmpa_fp < 0 { - \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:n{-\l_tmpa_fp}} + \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:n{-\l__mermap_tmpa_fp}} \__mermap_format_west:n{\__mermap_format_angle:n{\l__mermap_temp_tl}} } { - \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:N \l_tmpa_fp} + \tl_set:Nx \l__mermap_temp_tl {\fp_to_decimal:N \l__mermap_tmpa_fp} \__mermap_format_east:n {\__mermap_format_angle:n{\l__mermap_temp_tl}} } \group_end: @@ -1608,22 +1661,22 @@ { \tl_if_empty:nTF {#5} { - \fp_set:Nn \l_tmpa_fp {0} - \fp_set:Nn \l_tmpb_fp {0} + \fp_set:Nn \l__mermap_tmpa_fp {0} + \fp_set:Nn \l__mermap_tmpb_fp {0} } { - \fp_set:Nn \l_tmpa_fp {#3*(#5)} + \fp_set:Nn \l__mermap_tmpa_fp {#3*(#5)} \tl_if_empty:nTF {#6} { - \fp_set:Nn \l_tmpb_fp {#4*(#5)} + \fp_set:Nn \l__mermap_tmpb_fp {#4*(#5)} } { - \fp_set:Nn \l_tmpb_fp {#4*(#6)} + \fp_set:Nn \l__mermap_tmpb_fp {#4*(#6)} } } \tl_set:Nx \l__mermap_scalebar_at_tl { - {([xshift=\fp_to_dim:N\l_tmpa_fp,yshift=\fp_to_dim:N\l_tmpb_fp]mrcmap.#1)} + {([xshift=\fp_to_dim:N\l__mermap_tmpa_fp,yshift=\fp_to_dim:N\l__mermap_tmpb_fp]mrcmap.#1)} } \tl_set:Nn \l__mermap_scalebar_placement_tl {#2} } @@ -1691,60 +1744,56 @@ \begin{scope}[shift=(mrcscalebar.south~west)] \__mermap_tikz_path_begin:n { fill=black, mrcscalebarmajor } \pgfseteorule - \fp_set:Nn \l_tmpa_fp {\l__mermap_scalebar_width_fp/\l__mermap_scale_fp} % Breite + \fp_set:Nn \l__mermap_tmpa_fp {\l__mermap_scalebar_width_fp/\l__mermap_scale_fp} % Breite \pgfpathrectangle{\pgfpoint{0pt}{0pt}} - {\pgfpoint{\fp_to_dim:N\l_tmpa_fp}{\l__mermap_scalebar_height_dim}} + {\pgfpoint{\fp_to_dim:N\l__mermap_tmpa_fp}{\l__mermap_scalebar_height_dim}} \bool_if:NF \l__mermap_scalebar_transparent_bool { \__mermap_tikz_path_end: \__mermap_tikz_path_begin:n { fill=white, mrcscalebarminor } - \fp_set:Nn \l_tmpa_fp {\l__mermap_scalebar_width_fp/\l__mermap_scale_fp} + \fp_set:Nn \l__mermap_tmpa_fp {\l__mermap_scalebar_width_fp/\l__mermap_scale_fp} } - \fp_set:Nn \l_tmpb_fp {\l_tmpa_fp/\l__mermap_scalebar_partitions_int} + \fp_set:Nn \l__mermap_tmpb_fp {\l__mermap_tmpa_fp/\l__mermap_scalebar_partitions_int} \bool_if:NTF \l__mermap_scalebar_double_bool { - \int_set:Nn \l_tmpa_int {1} - \dim_set:Nn \l_tmpb_dim {\l__mermap_scalebar_height_dim/2} - \dim_set:Nn \l_tmpa_dim {0.2pt-\l_tmpb_dim} + \dim_set:Nn \l__mermap_tmpb_dim {\l__mermap_scalebar_height_dim/2} + \dim_set:Nn \l__mermap_tmpa_dim {0.2pt-\l__mermap_tmpb_dim} \int_compare:nNnTF \l__mermap_scalebar_partitions_int = 1 { - \pgfpathrectangle{\pgfpoint{0.2pt}{\l_tmpb_dim}} - {\pgfpoint{\fp_to_dim:n{\l_tmpb_fp-0.4pt}}{\l_tmpa_dim}} + \pgfpathrectangle{\pgfpoint{0.2pt}{\l__mermap_tmpb_dim}} + {\pgfpoint{\fp_to_dim:n{\l__mermap_tmpb_fp-0.4pt}}{\l__mermap_tmpa_dim}} } { - \pgfpathrectangle{\pgfpoint{0.2pt}{\l_tmpb_dim}} - {\pgfpoint{\fp_to_dim:n{\l_tmpb_fp-0.2pt}}{\l_tmpa_dim}} + \pgfpathrectangle{\pgfpoint{0.2pt}{\l__mermap_tmpb_dim}} + {\pgfpoint{\fp_to_dim:n{\l__mermap_tmpb_fp-0.2pt}}{\l__mermap_tmpa_dim}} } - \int_while_do:nNnn \l_tmpa_int < \l__mermap_scalebar_partitions_int + \int_step_inline:nn { \l__mermap_scalebar_partitions_int-1 } { - \dim_set:Nn \l_tmpa_dim {-\l_tmpa_dim} - \int_compare:nNnTF {\l_tmpa_int+1} = \l__mermap_scalebar_partitions_int + \dim_set:Nn \l__mermap_tmpa_dim {-\l__mermap_tmpa_dim} + \int_compare:nNnTF {##1+1} = \l__mermap_scalebar_partitions_int { - \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{\l_tmpa_int*\l_tmpb_fp}}{\l_tmpb_dim}} - {\pgfpoint{\fp_to_dim:n{\l_tmpb_fp-0.2pt}}{\l_tmpa_dim}} + \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{##1*\l__mermap_tmpb_fp}}{\l__mermap_tmpb_dim}} + {\pgfpoint{\fp_to_dim:n{\l__mermap_tmpb_fp-0.2pt}}{\l__mermap_tmpa_dim}} } { - \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{\l_tmpa_int*\l_tmpb_fp}}{\l_tmpb_dim}} - {\pgfpoint{\fp_to_dim:N\l_tmpb_fp}{\l_tmpa_dim}} + \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{##1*\l__mermap_tmpb_fp}}{\l__mermap_tmpb_dim}} + {\pgfpoint{\fp_to_dim:N\l__mermap_tmpb_fp}{\l__mermap_tmpa_dim}} } - \int_incr:N \l_tmpa_int } } { - \int_set:Nn \l_tmpa_int {1} - \dim_set:Nn \l_tmpa_dim {\l__mermap_scalebar_height_dim-0.4pt} - \int_while_do:nNnn \l_tmpa_int < \l__mermap_scalebar_partitions_int + \dim_set:Nn \l__mermap_tmpa_dim {\l__mermap_scalebar_height_dim-0.4pt} + \int_step_inline:nnnn { 1 }{ 2 }{ \l__mermap_scalebar_partitions_int-1 } { - \int_compare:nNnTF {\l_tmpa_int+1} = \l__mermap_scalebar_partitions_int + \int_compare:nNnTF {##1+1} = \l__mermap_scalebar_partitions_int { - \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{\l_tmpa_int*\l_tmpb_fp}}{0.2pt}} - {\pgfpoint{\fp_to_dim:n{\l_tmpb_fp-0.2pt}}{\l_tmpa_dim}} + \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{##1*\l__mermap_tmpb_fp}}{0.2pt}} + {\pgfpoint{\fp_to_dim:n{\l__mermap_tmpb_fp-0.2pt}}{\l__mermap_tmpa_dim}} } { - \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{\l_tmpa_int*\l_tmpb_fp}}{0.2pt}} - {\pgfpoint{\fp_to_dim:N\l_tmpb_fp}{\l_tmpa_dim}} + \pgfpathrectangle{\pgfpoint{\fp_to_dim:n{##1*\l__mermap_tmpb_fp}}{0.2pt}} + {\pgfpoint{\fp_to_dim:N\l__mermap_tmpb_fp}{\l__mermap_tmpa_dim}} } - \int_add:Nn \l_tmpa_int {2} } } \__mermap_tikz_path_end: @@ -2032,53 +2081,53 @@ \__mermap_new_marker_type:nn {pin} { - \tl_set:Nx \l_tmpa_tl {\fp_to_dim:N \l__mermap_marker_distance_fp} + \tl_set:Nx \l__mermap_tmpa_tl {\fp_to_dim:N \l__mermap_marker_distance_fp} \path[fill=mrcmarkerfill,draw=none,fill~opacity=0.7] - (0,0) -- (0.1,\l_tmpa_tl) -- (-0.1,\l_tmpa_tl) -- cycle; + (0,0) -- (0.1,\l__mermap_tmpa_tl) -- (-0.1,\l__mermap_tmpa_tl) -- cycle; \node[fill=white,draw=none,text=mrcmarkertext, above,font=\mrcmarkerfont,inner~sep=0.5mm,align=center, line~width=0mm,xshift=\mrcmarkershift, fill~opacity=0.7,text~opacity=1,xshift=0mm,mrcnodestyle,mrchyperpath] - (pin_node) at (0,\l_tmpa_tl) {\mrcmarkercontents}; + (pin_node) at (0,\l__mermap_tmpa_tl) {\mrcmarkercontents}; \path[draw=mrcmarkerdraw,fill=none,line~join=round,mrcpathstyle] - (0,0) -- (0.1,\l_tmpa_tl) -- (pin_node.south~east) -- (pin_node.north~east) + (0,0) -- (0.1,\l__mermap_tmpa_tl) -- (pin_node.south~east) -- (pin_node.north~east) -- (pin_node.north~west) -- (pin_node.south~west) - -- (-0.1,\l_tmpa_tl) [line~join=bevel] -- cycle; + -- (-0.1,\l__mermap_tmpa_tl) [line~join=bevel] -- cycle; } \__mermap_new_marker_type:nn {pinflip} { - \tl_set:Nx \l_tmpa_tl {\fp_to_dim:N \l__mermap_marker_distance_fp} + \tl_set:Nx \l__mermap_tmpa_tl {\fp_to_dim:N \l__mermap_marker_distance_fp} \path[fill=mrcmarkerfill,draw=none,fill~opacity=0.7] - (0,0) -- (-0.1,-\l_tmpa_tl) -- (0.1,-\l_tmpa_tl) -- cycle; + (0,0) -- (-0.1,-\l__mermap_tmpa_tl) -- (0.1,-\l__mermap_tmpa_tl) -- cycle; \node[fill=white,draw=none,text=mrcmarkertext, below,font=\mrcmarkerfont,inner~sep=0.5mm,align=center, line~width=0mm,xshift=\mrcmarkershift, fill~opacity=0.7,text~opacity=1,xshift=0mm,mrcnodestyle,mrchyperpath] - (pin_node) at (0,-\l_tmpa_tl) {\mrcmarkercontents}; + (pin_node) at (0,-\l__mermap_tmpa_tl) {\mrcmarkercontents}; \path[draw=mrcmarkerdraw,fill=none,line~join=round,mrcpathstyle] - (0,0) -- (-0.1,-\l_tmpa_tl) -- (pin_node.north~west) -- (pin_node.south~west) + (0,0) -- (-0.1,-\l__mermap_tmpa_tl) -- (pin_node.north~west) -- (pin_node.south~west) -- (pin_node.south~east) -- (pin_node.north~east) - -- (0.1,-\l_tmpa_tl) [line~join=bevel] -- cycle; + -- (0.1,-\l__mermap_tmpa_tl) [line~join=bevel] -- cycle; } \cs_new_nopar:Npn \__mermap_tikz_drop_path:n #1 { - \tl_set:Nn \l_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp} - \tl_set:Nn \l_tmpb_tl {\fp_to_dim:n{\l__mermap_marker_radius_fp*0.552}} + \tl_set:Nn \l__mermap_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp} + \tl_set:Nn \l__mermap_tmpb_tl {\fp_to_dim:n{\l__mermap_marker_radius_fp*0.552}} \__mermap_tikz_path_begin:n { line~join=bevel,draw=mrcmarkerdraw,fill=mrcmarkerfill,mrcpathstyle,mrchyperpath } \pgfpathmoveto{\pgfpoint{0pt}{\fp_to_dim:n{-2*\l__mermap_marker_radius_fp-\l__mermap_marker_shift_fp}}} - \pgfpathcurveto{\pgfpoint{\l_tmpb_tl}{-\l_tmpa_tl}}{\pgfpoint{\l_tmpa_tl}{-\l_tmpb_tl}} - {\pgfpoint{\l_tmpa_tl}{0pt}} - \pgfpathcurveto{\pgfpoint{\l_tmpa_tl}{\l_tmpb_tl}}{\pgfpoint{\l_tmpb_tl}{\l_tmpa_tl}} - {\pgfpoint{0pt}{\l_tmpa_tl}} - \pgfpathcurveto{\pgfpoint{-\l_tmpb_tl}{\l_tmpa_tl}}{\pgfpoint{-\l_tmpa_tl}{\l_tmpb_tl}} - {\pgfpoint{-\l_tmpa_tl}{0pt}} - \pgfpathcurveto{\pgfpoint{-\l_tmpa_tl}{-\l_tmpb_tl}}{\pgfpoint{-\l_tmpb_tl}{-\l_tmpa_tl}} + \pgfpathcurveto{\pgfpoint{\l__mermap_tmpb_tl}{-\l__mermap_tmpa_tl}}{\pgfpoint{\l__mermap_tmpa_tl}{-\l__mermap_tmpb_tl}} + {\pgfpoint{\l__mermap_tmpa_tl}{0pt}} + \pgfpathcurveto{\pgfpoint{\l__mermap_tmpa_tl}{\l__mermap_tmpb_tl}}{\pgfpoint{\l__mermap_tmpb_tl}{\l__mermap_tmpa_tl}} + {\pgfpoint{0pt}{\l__mermap_tmpa_tl}} + \pgfpathcurveto{\pgfpoint{-\l__mermap_tmpb_tl}{\l__mermap_tmpa_tl}}{\pgfpoint{-\l__mermap_tmpa_tl}{\l__mermap_tmpb_tl}} + {\pgfpoint{-\l__mermap_tmpa_tl}{0pt}} + \pgfpathcurveto{\pgfpoint{-\l__mermap_tmpa_tl}{-\l__mermap_tmpb_tl}}{\pgfpoint{-\l__mermap_tmpb_tl}{-\l__mermap_tmpa_tl}} {\pgfpoint{0pt}{\fp_to_dim:n{-2*\l__mermap_marker_radius_fp-\l__mermap_marker_shift_fp}}} \pgfpathclose #1 @@ -2089,14 +2138,14 @@ { \node[circle,inner~sep=0pt,font=\mrcmarkerfont,text=mrcmarkertext,mrcnodestyle] { - \hbox_set:Nn \l_tmpa_box {\mrcmarkercontents} - \fp_compare:nNnT {\box_wd:N \l_tmpa_box} > {1.5*\l__mermap_marker_radius_fp} + \hbox_set:Nn \l__mermap_tmpa_box {\mrcmarkercontents} + \fp_compare:nNnT {\box_wd:N \l__mermap_tmpa_box} > {1.5*\l__mermap_marker_radius_fp} { - \box_resize_to_wd_and_ht:Nnn \l_tmpa_box + \box_resize_to_wd_and_ht:Nnn \l__mermap_tmpa_box {\fp_to_dim:n {1.5*\l__mermap_marker_radius_fp}} - {\box_ht:N \l_tmpa_box} + {\box_ht:N \l__mermap_tmpa_box} } - \box_use_drop:N \l_tmpa_box + \box_use_drop:N \l__mermap_tmpa_box }; } @@ -2153,22 +2202,22 @@ \__mermap_new_marker_type:nn {ringx} { - \tl_set:Nn \l_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp} + \tl_set:Nn \l__mermap_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp} \path[draw=mrcmarkerdraw,very~thin] - (45 \c_colon_str \l_tmpa_tl)--(225\c_colon_str \l_tmpa_tl) - (135\c_colon_str \l_tmpa_tl)--(315\c_colon_str \l_tmpa_tl); + (45 \c_colon_str \l__mermap_tmpa_tl)--(225\c_colon_str \l__mermap_tmpa_tl) + (135\c_colon_str \l__mermap_tmpa_tl)--(315\c_colon_str \l__mermap_tmpa_tl); \path[draw=mrcmarkerdraw,fill=mrcmarkerfill,mrcpathstyle,mrchyperpath,even~odd~rule] - circle (\l_tmpa_tl) circle (\fp_to_dim:N\l__mermap_marker_inner_radius_fp); + circle (\l__mermap_tmpa_tl) circle (\fp_to_dim:N\l__mermap_marker_inner_radius_fp); } \__mermap_new_marker_type:nn {markx} { - \tl_set:Nn \l_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp} + \tl_set:Nn \l__mermap_tmpa_tl {\fp_to_dim:N\l__mermap_marker_radius_fp} \path[line~join=bevel,draw=mrcmarkerdraw,fill=mrcmarkerfill,mrcpathstyle,mrchyperpath] - (0,0) -- (35 \c_colon_str \l_tmpa_tl) -- (55 \c_colon_str \l_tmpa_tl) -- cycle - (0,0) -- (125 \c_colon_str \l_tmpa_tl) -- (145 \c_colon_str \l_tmpa_tl) -- cycle - (0,0) -- (215 \c_colon_str \l_tmpa_tl) -- (235 \c_colon_str \l_tmpa_tl) -- cycle - (0,0) -- (305 \c_colon_str \l_tmpa_tl) -- (325 \c_colon_str \l_tmpa_tl) -- cycle; + (0,0) -- (35 \c_colon_str \l__mermap_tmpa_tl) -- (55 \c_colon_str \l__mermap_tmpa_tl) -- cycle + (0,0) -- (125 \c_colon_str \l__mermap_tmpa_tl) -- (145 \c_colon_str \l__mermap_tmpa_tl) -- cycle + (0,0) -- (215 \c_colon_str \l__mermap_tmpa_tl) -- (235 \c_colon_str \l__mermap_tmpa_tl) -- cycle + (0,0) -- (305 \c_colon_str \l__mermap_tmpa_tl) -- (325 \c_colon_str \l__mermap_tmpa_tl) -- cycle; } @@ -2269,12 +2318,21 @@ \fp_new:N \l__mermap_b_x_fp \fp_new:N \l__mermap_b_y_fp \fp_new:N \l__mermap_b_z_fp +\fp_new:N \l__mermap_alpha_fp \fp_new:N \l__mermap_delta_lambda_fp \fp_new:N \l__mermap_delta_phi_fp +\fp_new:N \l__mermap_n_x_fp +\fp_new:N \l__mermap_n_y_fp +\fp_new:N \l__mermap_n_z_fp \fp_new:N \l__mermap_psi_fp +\fp_new:N \l__mermap_sin_psi_fp +\fp_new:N \l__mermap_t_fp +\fp_new:N \l__mermap_t_psi_fp \fp_new:N \l__mermap_t_x_fp \fp_new:N \l__mermap_t_y_fp \fp_new:N \l__mermap_t_z_fp +\fp_const:Nn \c__mermap_linearization_threshold_fp { 10e-9 } +\bool_new:N \l__mermap_linearization_bool \int_new:N \l__mermap_samples_int @@ -2309,41 +2367,86 @@ } -\cs_new:Npn \__mermap_draw_orthodrome:nnnnn #1#2#3#4#5 +\cs_new_protected:Npn \__mermap_draw_orthodrome:nnnnn #1#2#3#4#5 { \__mermap_tikz_path_begin:n { draw,mermap_every_route,#1 } - \fp_set:Nn \l__mermap_a_x_fp { cosd(#3)*cosd(#2) } - \fp_set:Nn \l__mermap_a_y_fp { sind(#3)*cosd(#2) } - \fp_set:Nn \l__mermap_a_z_fp { sind(#2) } - \fp_set:Nn \l__mermap_b_x_fp { cosd(#5)*cosd(#4) } - \fp_set:Nn \l__mermap_b_y_fp { sind(#5)*cosd(#4) } - \fp_set:Nn \l__mermap_b_z_fp { sind(#4) } - - \fp_set:Nn \l_tmpa_fp { sind(#2)*sind(#4) + cosd(#2)*cosd(#4)*cosd(#5-(#3)) } - \fp_set:Nn \l__mermap_psi_fp { acosd(\l_tmpa_fp) } - \fp_set:Nn \l_tmpb_fp { sind(\l__mermap_psi_fp) } - - \fp_set:Nn \l__mermap_b_x_fp { (\l__mermap_b_x_fp - \l_tmpa_fp*\l__mermap_a_x_fp)/\l_tmpb_fp } - \fp_set:Nn \l__mermap_b_y_fp { (\l__mermap_b_y_fp - \l_tmpa_fp*\l__mermap_a_y_fp)/\l_tmpb_fp } - \fp_set:Nn \l__mermap_b_z_fp { (\l__mermap_b_z_fp - \l_tmpa_fp*\l__mermap_a_z_fp)/\l_tmpb_fp } - - \__mermap_pgf_moveto_point:nn {#2}{#3} - \int_set:Nn \l_tmpa_int {1} - \int_until_do:nNnn \l_tmpa_int > \l__mermap_samples_int - { - \fp_set:Nn \l_tmpa_fp { \l__mermap_psi_fp*\l_tmpa_int/\l__mermap_samples_int } - \fp_set:Nn \l_tmpb_fp { sind(\l_tmpa_fp) } - \fp_set:Nn \l_tmpa_fp { cosd(\l_tmpa_fp) } - \fp_set:Nn \l__mermap_t_x_fp { \l_tmpa_fp*\l__mermap_a_x_fp + \l_tmpb_fp*\l__mermap_b_x_fp } - \fp_set:Nn \l__mermap_t_y_fp { \l_tmpa_fp*\l__mermap_a_y_fp + \l_tmpb_fp*\l__mermap_b_y_fp } - \fp_set:Nn \l__mermap_t_z_fp { \l_tmpa_fp*\l__mermap_a_z_fp + \l_tmpb_fp*\l__mermap_b_z_fp } - \pgfpathlineto{\__mermap_unit_sphere_point:nnn {\l__mermap_t_x_fp}{\l__mermap_t_y_fp}{\l__mermap_t_z_fp}} - \int_incr:N \l_tmpa_int + \__mermap_setup_orthodrome:nnnn { #2 }{ #3 }{ #4 }{ #5 } + \__mermap_pgf_moveto_point:nn { #2 }{ #3 } + \int_step_inline:nn { \l__mermap_samples_int } + { + \__mermap_point_on_orthodrome:n { ##1/\l__mermap_samples_int } + \__mermap_pgf_lineto_point:nn{ \l__mermap_cs_lat_fp }{ \l__mermap_cs_lon_fp } } \__mermap_tikz_path_end: } +\cs_new_protected:Npn \__mermap_setup_orthodrome:nnnn #1#2#3#4 + { + \fp_set:Nn \l__mermap_a_x_fp { cosd(#2)*cosd(#1) } + \fp_set:Nn \l__mermap_a_y_fp { sind(#2)*cosd(#1) } + \fp_set:Nn \l__mermap_a_z_fp { sind(#1) } + + \fp_set:Nn \l__mermap_b_x_fp { cosd(#4)*cosd(#3) } + \fp_set:Nn \l__mermap_b_y_fp { sind(#4)*cosd(#3) } + \fp_set:Nn \l__mermap_b_z_fp { sind(#3) } + + \fp_set:Nn \l__mermap_psi_fp { acosd( sind(#1)*sind(#3) + cosd(#1)*cosd(#3)*cosd(#4-(#2)) ) } + \fp_set:Nn \l__mermap_sin_psi_fp { sind(\l__mermap_psi_fp) } + + \bool_set:Nn \l__mermap_linearization_bool { \fp_compare_p:nNn \l__mermap_psi_fp < \c__mermap_linearization_threshold_fp } + } + + +\cs_new_protected:Npn \__mermap_point_on_orthodrome:n #1 + { + \fp_set:Nn \l__mermap_t_fp { #1 } + + \bool_if:NTF \l__mermap_linearization_bool + { + \fp_set:Nn \l__mermap_tmpa_fp { 1 - \l__mermap_t_fp } + \fp_set_eq:NN \l__mermap_tmpb_fp \l__mermap_t_fp + } + { + \fp_set:Nn \l__mermap_t_psi_fp { \l__mermap_t_fp * \l__mermap_psi_fp } + \fp_set:Nn \l__mermap_tmpa_fp { sind( \l__mermap_psi_fp - \l__mermap_t_psi_fp ) / \l__mermap_sin_psi_fp } + \fp_set:Nn \l__mermap_tmpb_fp { sind( \l__mermap_t_psi_fp ) / \l__mermap_sin_psi_fp } + } + + \fp_set:Nn \l__mermap_t_x_fp { \l__mermap_tmpa_fp*\l__mermap_a_x_fp + \l__mermap_tmpb_fp*\l__mermap_b_x_fp } + \fp_set:Nn \l__mermap_t_y_fp { \l__mermap_tmpa_fp*\l__mermap_a_y_fp + \l__mermap_tmpb_fp*\l__mermap_b_y_fp } + \fp_set:Nn \l__mermap_t_z_fp { \l__mermap_tmpa_fp*\l__mermap_a_z_fp + \l__mermap_tmpb_fp*\l__mermap_b_z_fp } + + \fp_set:Nn \l__mermap_cs_lat_fp { asind(\l__mermap_t_z_fp) } + \fp_set:Nn \l__mermap_cs_lon_fp { sign(\l__mermap_t_y_fp)*acosd(\l__mermap_t_x_fp/sqrt(\l__mermap_t_x_fp^2+\l__mermap_t_y_fp^2)) } + } + + +\cs_new_protected:Npn \__mermap_angle_at_orthodrome: + { + \bool_if:NTF \l__mermap_linearization_bool + { + \fp_set:Nn \l__mermap_alpha_fp { 90 } + } + { + \fp_set:Nn \l__mermap_tmpa_fp { cosd( \l__mermap_psi_fp - \l__mermap_t_psi_fp ) } + \fp_set:Nn \l__mermap_tmpb_fp { cosd( \l__mermap_t_psi_fp ) } + \fp_set:Nn \l__mermap_n_x_fp { \l__mermap_tmpb_fp*\l__mermap_b_x_fp - \l__mermap_tmpa_fp*\l__mermap_a_x_fp } + \fp_set:Nn \l__mermap_n_y_fp { \l__mermap_tmpb_fp*\l__mermap_b_y_fp - \l__mermap_tmpa_fp*\l__mermap_a_y_fp } + \fp_set:Nn \l__mermap_n_z_fp { \l__mermap_tmpb_fp*\l__mermap_b_z_fp - \l__mermap_tmpa_fp*\l__mermap_a_z_fp } + \fp_set:Nn \l__mermap_tmpa_fp { sqrt( \l__mermap_n_x_fp^2 + \l__mermap_n_y_fp^2 + \l__mermap_n_z_fp^2 ) } + \fp_set:Nn \l__mermap_n_x_fp { \l__mermap_n_x_fp / \l__mermap_tmpa_fp } + \fp_set:Nn \l__mermap_n_y_fp { \l__mermap_n_y_fp / \l__mermap_tmpa_fp } + \fp_set:Nn \l__mermap_n_z_fp { \l__mermap_n_z_fp / \l__mermap_tmpa_fp } + \fp_set:Nn \l__mermap_alpha_fp { acosd( \l__mermap_n_y_fp*cosd(\l__mermap_cs_lon_fp) - \l__mermap_n_x_fp*sind(\l__mermap_cs_lon_fp) ) } + \fp_compare:nNnT \l__mermap_n_z_fp < 0 + { + \fp_set:Nn \l__mermap_alpha_fp { 360 - \l__mermap_alpha_fp } + } + } + } + + \NewDocumentCommand \mrcdraworthodrome { O{} mmmm } { \__mermap_draw_orthodrome:nnnnn {#1}{#2}{#3}{#4}{#5} @@ -2392,11 +2495,11 @@ \fp_set:Nn \l__mermap_delta_lambda_fp {(#4-(#2))/180*pi} \fp_compare:nNnTF {abs(\l__mermap_delta_phi_fp)} < {1e-5} { - \fp_set:Nn \l_tmpa_fp { tand(#1) } - \fp_set:Nn \l_tmpb_fp { \l__mermap_delta_lambda_fp*cosd(#1) - /( 1 + (\l_tmpa_fp + (1+2*\l_tmpa_fp*\l_tmpa_fp)*\l__mermap_delta_phi_fp/3)*\l__mermap_delta_phi_fp/2 ) } + \fp_set:Nn \l__mermap_tmpa_fp { tand(#1) } + \fp_set:Nn \l__mermap_tmpb_fp { \l__mermap_delta_lambda_fp*cosd(#1) + /( 1 + (\l__mermap_tmpa_fp + (1+2*\l__mermap_tmpa_fp*\l__mermap_tmpa_fp)*\l__mermap_delta_phi_fp/3)*\l__mermap_delta_phi_fp/2 ) } \fp_set:Nn \l__mermap_result_fp { - sqrt( \l__mermap_delta_phi_fp*\l__mermap_delta_phi_fp + \l_tmpb_fp*\l_tmpb_fp ) } + sqrt( \l__mermap_delta_phi_fp*\l__mermap_delta_phi_fp + \l__mermap_tmpb_fp*\l__mermap_tmpb_fp ) } } { \fp_set:Nn \l__mermap_result_fp { abs(\l__mermap_delta_phi_fp) @@ -2422,11 +2525,314 @@ \NewDocumentCommand \mrcNPprettyloxodistance { mm } { - \__mermap_loxo_distance:nnnn {\mrcNPlat{#1}}{\mrcNPlon{#1}}{\mrcNPlat{#2}}{\mrcNPlon{#2}} + \__mermap_loxo_distance:nnnn { \mrcNPlat{#1} }{ \mrcNPlon{#1} }{ \mrcNPlat{#2} }{ \mrcNPlon{#2} } \__mermap_pretty_distance:n { \l__mermap_result_fp } } +\cs_new_protected:Npn \__mermap_orthodrome_point:nnn #1#2#3 + { + \__mermap_point_on_orthodrome:n { #3 } + \__mermap_set_named_position { #1 }{ \l__mermap_cs_lat_fp }{ \l__mermap_cs_lon_fp } + \IfNoValueF { #2 } + { + \__mermap_angle_at_orthodrome: + \cs_set:Npe #2 { \fp_to_decimal:N \l__mermap_alpha_fp } + } + } + +\NewDocumentCommand \mrcNPfromOrthoFraction { mo mm mm m } + { + \__mermap_setup_orthodrome:nnnn { #3 }{ #4 }{ #5 }{ #6 } + \__mermap_orthodrome_point:nnn { #1 }{ #2 }{ #7 } + } + +\NewDocumentCommand \mrcNPfromOrthoFractionNamed { mo m m m } + { + \__mermap_setup_orthodrome:nnnn { \mrcNPlat{#3} }{ \mrcNPlon{#3} }{ \mrcNPlat{#4} }{ \mrcNPlon{#4} } + \__mermap_orthodrome_point:nnn { #1 }{ #2 }{ #5 } + } + +\NewDocumentCommand \mrcNPfromOrthoDistance { mo mm mm m } + { + \__mermap_ortho_distance:nnnn { #3 }{ #4 }{ #5 }{ #6 } + \fp_compare:nNnTF \l__mermap_result_fp > { 0.001 } + { + \__mermap_setup_orthodrome:nnnn { #3 }{ #4 }{ #5 }{ #6 } + \__mermap_orthodrome_point:nnn { #1 }{ #2 }{ #7 / \l__mermap_result_fp } + } + { + \__mermap_set_named_position { #1 }{ #3 }{ #4 } + \IfNoValueF { #2 } + { + \cs_set:Npn #2 { 90 } + } + } + } + +\NewDocumentCommand \mrcNPfromOrthoDistanceNamed { mo m m m } + { + \__mermap_ortho_distance:nnnn { \mrcNPlat{#3} }{ \mrcNPlon{#3} }{ \mrcNPlat{#4} }{ \mrcNPlon{#4} } + \fp_compare:nNnTF \l__mermap_result_fp > { 0.001 } + { + \__mermap_setup_orthodrome:nnnn { \mrcNPlat{#3} }{ \mrcNPlon{#3} }{ \mrcNPlat{#4} }{ \mrcNPlon{#4} } + \__mermap_orthodrome_point:nnn { #1 }{ #2 }{ #5 / \l__mermap_result_fp } + } + { + \__mermap_set_named_position { #1 }{ \mrcNPlat{#3} }{ \mrcNPlon{#3} } + \IfNoValueF { #2 } + { + \cs_set:Npn #2 { 90 } + } + } + } + + +%---- animations --------------------------------------------------------------- + +\bool_new:N \l__mermap_anim_drop_first_frame_bool +\bool_new:N \l__mermap_anim_drop_last_frame_bool + +\fp_new:N \l__mermap_anim_a_lat_fp +\fp_new:N \l__mermap_anim_a_lon_fp +\fp_new:N \l__mermap_anim_a_scaledenom_fp +\fp_new:N \l__mermap_anim_a_time_fp +\fp_new:N \l__mermap_anim_b_lat_fp +\fp_new:N \l__mermap_anim_b_lon_fp +\fp_new:N \l__mermap_anim_b_scaledenom_fp +\fp_new:N \l__mermap_anim_b_time_fp +\fp_new:N \l_mermap_anim_angle_fp +\fp_new:N \l_mermap_anim_lat_fp +\fp_new:N \l_mermap_anim_lon_fp +\fp_new:N \l_mermap_anim_scaledenom_fp +\fp_new:N \l_mermap_anim_time_fp + +\int_new:N \l__mermap_anim_final_frame_int +\int_new:N \l__mermap_anim_frames_int +\int_new:N \l__mermap_anim_start_frame_int +\int_new:N \l_mermap_anim_frame_int + +\seq_new:N \l__mermap_anim_scaledenom_seq + +\tl_new:N \l__mermap_anim_timescale_tl +\tl_new:N \l__mermap_anim_timewarp_tl + + +\NewExpandableDocumentCommand \mrcTimewarpIdentity { m } + { + #1 + } + +\NewExpandableDocumentCommand \mrcTimewarpSlowStart { m m } + { + (#2)^(#1) + } + +\NewExpandableDocumentCommand \mrcTimewarpSlowFinal { m m } + { + 1 - (1-#2)^(#1) + } + +\NewExpandableDocumentCommand \mrcTimewarpSlowStartFinal { m m } + { + %1 - (1-#2)^(#1) + #2 <= 0.5 + ? (2*(#2))^(#1) / 2 + : 1 - (2-2*(#2))^(#1) / 2 + } + + +\NewDocumentEnvironment { mrcAnimation }{ m +b } + { + \keys_set:nn { mermap/anim }{ #1 } + + \__mermap_anim_autocorrect_scaledenom_seq: + \int_compare:nNnT \l__mermap_anim_frames_int < 2 + { + \int_set:Nn \l__mermap_anim_frames_int { 2 } + } + \bool_if:NTF \l__mermap_anim_drop_first_frame_bool + { + \int_set:Nn \l__mermap_anim_start_frame_int { 2 } + } + { + \int_set:Nn \l__mermap_anim_start_frame_int { 1 } + } + \bool_if:NTF \l__mermap_anim_drop_last_frame_bool + { + \int_set:Nn \l__mermap_anim_final_frame_int { \l__mermap_anim_frames_int-1 } + } + { + \int_set:Nn \l__mermap_anim_final_frame_int { \l__mermap_anim_frames_int } + } + + \__mermap_setup_orthodrome:nnnn { \l__mermap_anim_a_lat_fp }{ \l__mermap_anim_a_lon_fp } + { \l__mermap_anim_b_lat_fp }{ \l__mermap_anim_b_lon_fp } + + \__mermap_anim_pop_time_scale:NN \l__mermap_anim_a_time_fp \l__mermap_anim_a_scaledenom_fp + \__mermap_anim_pop_time_scale:NN \l__mermap_anim_b_time_fp \l__mermap_anim_b_scaledenom_fp + + \int_step_variable:nnNn { \l__mermap_anim_start_frame_int }{ \l__mermap_anim_final_frame_int } \l_mermap_anim_frame_int + { + \fp_set:Nn \l_mermap_anim_time_fp { (\l_mermap_anim_frame_int-1)/(\l__mermap_anim_frames_int-1) } + \fp_set:Nn \l_mermap_anim_time_fp { \l__mermap_anim_timewarp_tl { \l_mermap_anim_time_fp } } + + \__mermap_point_on_orthodrome:n { \l_mermap_anim_time_fp } + \fp_set_eq:NN \l_mermap_anim_lat_fp \l__mermap_cs_lat_fp + \fp_set_eq:NN \l_mermap_anim_lon_fp \l__mermap_cs_lon_fp + \__mermap_set_named_position{ AnimNP }{ \l_mermap_anim_lat_fp }{ \l_mermap_anim_lon_fp } + + \__mermap_angle_at_orthodrome: + \fp_set_eq:NN \l_mermap_anim_angle_fp \l__mermap_alpha_fp + + \fp_while_do:nNnn \l_mermap_anim_time_fp > \l__mermap_anim_b_time_fp + { + \fp_set_eq:NN \l__mermap_anim_a_time_fp \l__mermap_anim_b_time_fp + \fp_set_eq:NN \l__mermap_anim_a_scaledenom_fp \l__mermap_anim_b_scaledenom_fp + \__mermap_anim_pop_time_scale:NN \l__mermap_anim_b_time_fp \l__mermap_anim_b_scaledenom_fp + } + \fp_set:Nn \l_mermap_anim_scaledenom_fp + { + round ( exp ( + ln(\l__mermap_anim_a_scaledenom_fp) + + ( ln(\l__mermap_anim_b_scaledenom_fp)-ln(\l__mermap_anim_a_scaledenom_fp) ) * + ( \l_mermap_anim_time_fp-\l__mermap_anim_a_time_fp ) / ( \l__mermap_anim_b_time_fp-\l__mermap_anim_a_time_fp ) + ) ) + } + + #2 + } + }{} + + +\cs_new_protected:Npn \__mermap_anim_autocorrect_scaledenom_seq: + { + \seq_get_left:NN \l__mermap_anim_scaledenom_seq \l__mermap_anim_timescale_tl + \bool_lazy_any:nTF + { + { \seq_if_empty_p:N \l__mermap_anim_scaledenom_seq } + { \tl_if_empty_p:N \l__mermap_anim_timescale_tl } + { \quark_if_no_value_p:N \l__mermap_anim_timescale_tl } + } + { + \seq_set_split:Nnn \l__mermap_anim_scaledenom_seq { - }{ 0/25000 - 1/25000 }, + } + { + \fp_compare:nNnF { \__mermap_anim_use_time:o \l__mermap_anim_timescale_tl } = 0 + { + \seq_put_left:Ne \l__mermap_anim_scaledenom_seq { 0 / \__mermap_anim_use_scale:o \l__mermap_anim_timescale_tl } + } + } + \seq_get_right:NNF \l__mermap_anim_scaledenom_seq \l__mermap_anim_timescale_tl + { + \msg_error:nn{ mercatormap }{ anim-scaledenom-invalid } + } + \fp_compare:nNnF { \__mermap_anim_use_time:o \l__mermap_anim_timescale_tl } = 1 + { + \seq_put_right:Ne \l__mermap_anim_scaledenom_seq { 1 / \__mermap_anim_use_scale:o \l__mermap_anim_timescale_tl } + } + \fp_set:Nn \l__mermap_anim_a_time_fp { -1 } + \seq_map_inline:Nn \l__mermap_anim_scaledenom_seq + { + \fp_set:Nn \l__mermap_anim_b_time_fp { \__mermap_anim_use_time:n { ##1 } } + \fp_compare:nNnTF \l__mermap_anim_a_time_fp < \l__mermap_anim_b_time_fp + { + \fp_set_eq:NN \l__mermap_anim_a_time_fp \l__mermap_anim_b_time_fp + } + { + \msg_error:nn{ mercatormap }{ anim-scaledenom-invalid } + } + } + } + +\cs_new_protected:Npn \__mermap_anim_pop_time_scale:NN #1#2 + { + \seq_pop_left:NN \l__mermap_anim_scaledenom_seq \l__mermap_anim_timescale_tl + \fp_set:Nn #1 { \__mermap_anim_use_time:o \l__mermap_anim_timescale_tl } + \fp_set:Nn #2 { \__mermap_anim_use_scale:o \l__mermap_anim_timescale_tl } + } + +\msg_new:nnnn{ mercatormap }{ anim-scaledenom-invalid } + { The~animation~scale~denominator~sequence~is~invalid. } + { + Check~\seq_use:Nn \l__mermap_anim_scaledenom_seq { ~-~ }~with~the~documentation.~ + Time~values~are~not~strictly~monotonically~increasing. + } + +\cs_new_protected_nopar:Npn \__mermap_anim_set_position:w #1 #2 / #3 \q_stop + { + \fp_set:cn { l__mermap_anim_#1_lat_fp }{ #2 } + \fp_set:cn { l__mermap_anim_#1_lon_fp }{ #3 } + } + +\cs_new_nopar:Npn \__mermap_anim_use_time:w #1 / #2 \q_stop + { + #1 + } +\cs_new_nopar:Npn \__mermap_anim_use_time:n #1 + { + \__mermap_anim_use_time:w #1 \q_stop + } +\cs_generate_variant:Nn \__mermap_anim_use_time:n { o } + +\cs_new_nopar:Npn \__mermap_anim_use_scale:w #1 / #2 \q_stop + { + #2 + } +\cs_new_nopar:Npn \__mermap_anim_use_scale:n #1 + { + \__mermap_anim_use_scale:w #1 \q_stop + } +\cs_generate_variant:Nn \__mermap_anim_use_scale:n { o } + +\keys_define:nn { mermap/anim } + { + start-position .code:n = \__mermap_anim_set_position:w { a } #1 \q_stop, + final-position .code:n = \__mermap_anim_set_position:w { b } #1 \q_stop, + position .meta:n = { start-position = #1, final-position = #1 }, + named-start-position .code:n = + { + \fp_set:Nn \l__mermap_anim_a_lat_fp { \mrcNPlat{ #1 } } + \fp_set:Nn \l__mermap_anim_a_lon_fp { \mrcNPlon{ #1 } } + }, + named-final-position .code:n = + { + \fp_set:Nn \l__mermap_anim_b_lat_fp { \mrcNPlat{ #1 } } + \fp_set:Nn \l__mermap_anim_b_lon_fp { \mrcNPlon{ #1 } } + }, + named-position .meta:n = { named-start-position = #1, named-final-position = #1 }, + frames .int_set:N = \l__mermap_anim_frames_int, + drop-first-frame .bool_set:N = \l__mermap_anim_drop_first_frame_bool, + drop-last-frame .bool_set:N = \l__mermap_anim_drop_last_frame_bool, + drop-no-frame .meta:n = { drop-first-frame=false, drop-last-frame=false }, + scale-denominators .code:n = \seq_set_split:Nnn \l__mermap_anim_scaledenom_seq { - }{ #1 }, + common-scale-denominator .meta:n = { scale-denominators = 0/#1 - 1/#1 }, + timewarp .tl_set:N = \l__mermap_anim_timewarp_tl, + timewarp-identity .meta:n = { timewarp = \mrcTimewarpIdentity }, + timewarp-slow-start .meta:n = { timewarp = \mrcTimewarpSlowStart{#1} }, + timewarp-slow-start .default:n = 2, + timewarp-slow-final .meta:n = { timewarp = \mrcTimewarpSlowFinal{#1} }, + timewarp-slow-final .default:n = 2, + timewarp-slow-start-final .meta:n = { timewarp = \mrcTimewarpSlowStartFinal{#1} }, + timewarp-slow-start-final .default:n = 2, + } + +\keys_set:nn { mermap/anim } + { + position = 51.4779 / 0, + frames = 20, + drop-no-frame, + common-scale-denominator = 25000, + timewarp-identity, + } + +\NewExpandableDocumentCommand\mrcAnimFrame{}{\int_to_arabic:n \l_mermap_anim_frame_int} +\NewExpandableDocumentCommand\mrcAnimTime{}{\fp_to_decimal:N \l_mermap_anim_time_fp} +\NewExpandableDocumentCommand\mrcAnimScaleDenom{}{\fp_to_decimal:N \l_mermap_anim_scaledenom_fp} +\NewExpandableDocumentCommand\mrcAnimLatitude{}{\fp_to_decimal:N \l_mermap_anim_lat_fp} +\NewExpandableDocumentCommand\mrcAnimLongitude{}{\fp_to_decimal:N \l_mermap_anim_lon_fp} +\NewExpandableDocumentCommand\mrcAnimAngle{}{\fp_to_decimal:N \l_mermap_anim_angle_fp} + %---- supplier ----------------------------------------------------------------- diff --git a/macros/latex/contrib/mercatormap/mercatormap.tex b/macros/latex/contrib/mercatormap/mercatormap.tex index 882587a3d2..a904cce2f9 100644 --- a/macros/latex/contrib/mercatormap/mercatormap.tex +++ b/macros/latex/contrib/mercatormap/mercatormap.tex @@ -2,11 +2,11 @@ % !TeX encoding=UTF-8 % !TeX spellcheck=en_US %% -%% The LaTeX package mercatormap - version 1.02 (2020/08/06) +%% The LaTeX package mercatormap - version 1.2.0 (2024/08/05) %% mercatormap.tex: Manual %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the @@ -32,8 +32,8 @@ % The following personal API-keys are needed for compilation % \mrcsetapikey{thunderforest}{YOUR-API-KEY} % registered key -\def\version{1.02}% -\def\datum{2020/08/06}% +\def\version{1.2.0}% +\def\datum{2024/08/05}% \mrcactivatescript% activates Python script @@ -54,9 +54,14 @@ \tikzexternaldisable% for final version \tcbset{shield externalize} -\nocite{Sturm:2020,package:tikz,package:xparse,package:siunitx,package:expl3} +\nocite{Sturm:2020,package:tikz,package:siunitx} -\pdfsuppresswarningpagegroup=1 +\ExplSyntaxOn +\cs_if_exist:NT \pdfsuppresswarningpagegroup + { + \pdfsuppresswarningpagegroup=1 + } +\ExplSyntaxOff %\includeonly{mercatormap.doc.intro} %\includeonly{mercatormap.doc.examples} @@ -67,8 +72,8 @@ %\includeonly{mercatormap.doc.marker} %\includeonly{mercatormap.doc.routes} %\includeonly{mercatormap.doc.orthodromes} +%\includeonly{mercatormap.doc.animations} %\includeonly{mercatormap.doc.limitations} -%\includeonly{mercatormap.doc.versionhistory} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} @@ -83,8 +88,8 @@ \include{mercatormap.doc.marker} \include{mercatormap.doc.routes} \include{mercatormap.doc.orthodromes} +\include{mercatormap.doc.animations} \include{mercatormap.doc.limitations} -\include{mercatormap.doc.versionhistory} \clearpage \phantomsection diff --git a/macros/latex/contrib/mercatormap/mercatorpy.def b/macros/latex/contrib/mercatormap/mercatorpy.def index 670d8fca3b..0df48609bf 100644 --- a/macros/latex/contrib/mercatormap/mercatorpy.def +++ b/macros/latex/contrib/mercatormap/mercatorpy.def @@ -1,19 +1,19 @@ -\begin{filecontents*}[overwrite]{maptiles.texpy} +\begin{filecontents}[force,noheader,nowarn]{maptiles.texpy} """ -The LaTeX package mercatormap - version 1.02 (2020/08/06) +The LaTeX package mercatormap - version 1.2.0 (2024/08/05) maptiles.texpy: Python script for map tile download ------------------------------------------------------------------------------------------- -Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> ------------------------------------------------------------------------------------------- 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. The latest version of this license is in - http://www.latex-project.org/lppl.txt -and version 1.3 or later is part of all distributions of LaTeX -version 2005/12/01 or later. + https://www.latex-project.org/lppl.txt +and version 1.3c or later is part of all distributions of LaTeX +version 2008-05-04 or later. This work has the LPPL maintenance status `author-maintained'. @@ -28,7 +28,7 @@ from pathlib import Path from PIL import Image -packageversion = '1.02 (2020/08/06)' +packageversion = '1.2.0 (2024/08/05)' def gd(x): @@ -531,5 +531,5 @@ if __name__ == '__main__': print('No url for download given') mapdef.save_map(args.definition, tiles_success, merge_success, wms_success) -\end{filecontents*} +\end{filecontents} diff --git a/macros/latex/contrib/mercatormap/mercatorsupplier.def b/macros/latex/contrib/mercatormap/mercatorsupplier.def index 1bf7866b7a..a8063f8135 100644 --- a/macros/latex/contrib/mercatormap/mercatorsupplier.def +++ b/macros/latex/contrib/mercatormap/mercatorsupplier.def @@ -1,15 +1,15 @@ -%% The LaTeX package mercatormap - version 1.02 (2020/08/06) +%% The LaTeX package mercatormap - version 1.2.0 (2024/08/05) %% mercatorsupplier.def: predefined map supplier list %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2020 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2020-2024 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% ------------------------------------------------------------------------------------------- %% %% 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. %% The latest version of this license is in -%% http://www.latex-project.org/lppl.txt +%% https://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% @@ -46,7 +46,7 @@ attribution = { Kartendaten:~\textcopyright\nobreakspace\href{https://openstreetmap.org/copyright}{OpenStreetMap} \ Mitwirkende,~SRTM\nobreakspace\textbar\nobreakspace - Kartendarstellung:~\textcopyright\nobreakspace\href{http://opentopomap.org/}{OpenTopoMap} + Kartendarstellung:~\textcopyright\nobreakspace\href{https://opentopomap.org/}{OpenTopoMap} \ (\href{https://creativecommons.org/licenses/by-sa/3.0/}{CC-BY-SA}) }, attribution~print = { @@ -61,12 +61,12 @@ { __attribution_topplusopen .meta:nn = {mermap/supply} { attribution = { - \textcopyright\nobreakspace\href{http://www.bkg.bund.de}{Bundesamt~f\mrcumlaut{u}r~Kartographie~und~Geod\mrcumlaut{a}sie}\nobreakspace\the\year, - \ \href{http://sg.geodatenzentrum.de/web_public/Datenquellen_TopPlus_Open.pdf}{Datenquellen} + Kartendarstellung:\nobreakspace\textcopyright\nobreakspace\href{https://www.bkg.bund.de}{BKG\nobreakspace(\the\year)}, + \ \href{https://sgx.geodatenzentrum.de/web_public/Datenquellen_TopPlus_Open.pdf}{Datenquellen} }, attribution~print = { - \textcopyright\nobreakspace Bundesamt~f\mrcumlaut{u}r~Kartographie~und~Geod\mrcumlaut{a}sie\nobreakspace\the\year, - \ Datenquellen:~\detokenize{http://sg.geodatenzentrum.de/web_public/Datenquellen_TopPlus_Open.pdf} + \textcopyright\nobreakspace BKG\nobreakspace(\the\year), + \ Datenquellen:~\detokenize{https://sgx.geodatenzentrum.de/web_public/Datenquellen_TopPlus_Open.pdf} } } } @@ -85,29 +85,121 @@ basename = tiles/tpo_web_grau, } -\cs_new:Npn \__mermap_new_supply_source_topplusopen:n #1 +\__mermap_new_supply_source:nn { topplusopen~web~light } + { + url = {https://sgx.geodatenzentrum.de/wmts_topplus_open/tile/1.0.0/web_light/default/WEBMERCATOR/{z}/{y}/{x}.png}, + __attribution_topplusopen, + basename = tiles/tpo_web_light, + } + +\__mermap_new_supply_source:nn { topplusopen~web~light~grau } + { + url = {https://sgx.geodatenzentrum.de/wmts_topplus_open/tile/1.0.0/web_light_grau/default/WEBMERCATOR/{z}/{y}/{x}.png}, + __attribution_topplusopen, + basename = tiles/tpo_web_light_grau, + } + + +\cs_new:Npn \__mermap_new_supply_source_topplusopen:nn #1#2 { \keys_define:nn { mermap/supply/_source } { topplusopen~#1 .meta:nn = {mermap/supply}{ - url = {https://sgx.geodatenzentrum.de/wms_topplus_open?service=wms&version=1.3.0&request=GetMap&Layers=#1&STYLES=default&CRS=EPSG:3857&bbox={xmin},{ymin},{xmax},{ymax}&width={width}&height={height}&Format=image/png}, + url = {https://sgx.geodatenzentrum.de/wms_topplus_open_#2?service=wms&version=1.3.0&request=GetMap&Layers=#1&STYLES=default&CRS=EPSG:3857&bbox={xmin},{ymin},{xmax},{ymax}&width={width}&height={height}&Format=image/png}, __attribution_topplusopen, basename = tiles/tpo, }, topplusopen~#1~grau .meta:nn = {mermap/supply}{ - url = {https://sgx.geodatenzentrum.de/wms_topplus_open?service=wms&version=1.3.0&request=GetMap&Layers=#1_grau&STYLES=default&CRS=EPSG:3857&bbox={xmin},{ymin},{xmax},{ymax}&width={width}&height={height}&Format=image/png}, + url = {https://sgx.geodatenzentrum.de/wms_topplus_open_#2?service=wms&version=1.3.0&request=GetMap&Layers=#1&STYLES=grau&CRS=EPSG:3857&bbox={xmin},{ymin},{xmax},{ymax}&width={width}&height={height}&Format=image/png}, __attribution_topplusopen, basename = tiles/tpo, }, } } -\__mermap_new_supply_source_topplusopen:n { p5 } -\__mermap_new_supply_source_topplusopen:n { p10 } -\__mermap_new_supply_source_topplusopen:n { p17.5 } -\__mermap_new_supply_source_topplusopen:n { p25 } -\__mermap_new_supply_source_topplusopen:n { p50 } -\__mermap_new_supply_source_topplusopen:n { p100 } -\__mermap_new_supply_source_topplusopen:n { p250 } +\__mermap_new_supply_source_topplusopen:nn { p5 }{ p5 } +\__mermap_new_supply_source_topplusopen:nn { p10 }{ p10 } +\__mermap_new_supply_source_topplusopen:nn { p17.5 }{ p17 } +\__mermap_new_supply_source_topplusopen:nn { p25 }{ p25 } +\__mermap_new_supply_source_topplusopen:nn { p50 }{ p50 } +\__mermap_new_supply_source_topplusopen:nn { p100 }{ p100 } +\__mermap_new_supply_source_topplusopen:nn { p250 }{ p250 } + + +\keys_define:nn { mermap/supply } + { + __attribution_thunderforest .meta:nn = {mermap/supply} { + attribution = { + Maps~\textcopyright\nobreakspace\href{https://www.thunderforest.com/}{Thunderforest}, + \ Data~\textcopyright\nobreakspace\href{https://openstreetmap.org/copyright}{OpenStreetMap~contributors} + }, + attribution~print = { + Maps~\textcopyright\nobreakspace www.thunderforest.com, + \ Data~\textcopyright\nobreakspace www.osm.org/copyright + } + } + } +\__mermap_new_supply_source:nn { thunderforest~opencyclemap } + { + url~with~api~key = {https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, + __attribution_thunderforest, + basename = tiles/opencyclemap, + } +\__mermap_new_supply_source:nn { thunderforest~transport } + { + url~with~api~key = {https://tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, + __attribution_thunderforest, + basename = tiles/transport, + } +\__mermap_new_supply_source:nn { thunderforest~landscape } + { + url~with~api~key = {https://tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, + __attribution_thunderforest, + basename = tiles/landscape, + } +\__mermap_new_supply_source:nn { thunderforest~outdoors } + { + url~with~api~key = {https://tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, + __attribution_thunderforest, + basename = tiles/outdoors, + } +\__mermap_new_supply_source:nn { thunderforest~atlas } + { + url~with~api~key = {https://tile.thunderforest.com/atlas/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, + __attribution_thunderforest, + basename = tiles/atlas, + } +\__mermap_new_supply_source:nn { thunderforest~transport-dark } + { + url~with~api~key = {https://tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, + __attribution_thunderforest, + basename = tiles/transport-dark, + } +\__mermap_new_supply_source:nn { thunderforest~spinal-map } + { + url~with~api~key = {https://tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, + __attribution_thunderforest, + basename = tiles/spinal-map, + } +\__mermap_new_supply_source:nn { thunderforest~pioneer } + { + url~with~api~key = {https://tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, + __attribution_thunderforest, + basename = tiles/pioneer, + } +\__mermap_new_supply_source:nn { thunderforest~mobile-atlas } + { + url~with~api~key = {https://tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, + __attribution_thunderforest, + basename = tiles/mobile-atlas, + } +\__mermap_new_supply_source:nn { thunderforest~neighbourhood } + { + url~with~api~key = {https://tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, + __attribution_thunderforest, + basename = tiles/neighbourhood, + } + + %% openrouteservice mapsurfer is DISCONTINUED after June 2020 %% Therefore, the following source is DEPRECATED and will be removed in future @@ -127,7 +219,7 @@ basename = tiles/mapsurfer, } -\keys_define:nn { mermap/supply } +\keys_define:nn { mermap/supply }% DISCONTINUED after July 2023 and DEPRECATED { __attribution_stamen .meta:nn = {mermap/supply} { attribution = { @@ -144,67 +236,67 @@ } } } -\__mermap_new_supply_source:nn { stamen~terrain } +\__mermap_new_supply_source:nn { stamen~terrain }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png}, __attribution_stamen, basename = tiles/terrain, } -\__mermap_new_supply_source:nn { stamen~terrain-background } +\__mermap_new_supply_source:nn { stamen~terrain-background }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/terrain-background/{z}/{x}/{y}.png}, __attribution_stamen, basename = tiles/terrain-background, } -\__mermap_new_supply_source:nn { stamen~terrain-labels } +\__mermap_new_supply_source:nn { stamen~terrain-labels }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/terrain-labels/{z}/{x}/{y}.png}, __attribution_stamen, basename = tiles/terrain-labels, } -\__mermap_new_supply_source:nn { stamen~terrain-lines } +\__mermap_new_supply_source:nn { stamen~terrain-lines }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/terrain-lines/{z}/{x}/{y}.png}, __attribution_stamen, basename = tiles/terrain-lines, } -\__mermap_new_supply_source:nn { stamen~toner } +\__mermap_new_supply_source:nn { stamen~toner }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/toner/{z}/{x}/{y}.png}, __attribution_stamen, basename = tiles/toner, } -\__mermap_new_supply_source:nn { stamen~toner-lite } +\__mermap_new_supply_source:nn { stamen~toner-lite }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png}, __attribution_stamen, basename = tiles/toner-lite, } -\__mermap_new_supply_source:nn { stamen~toner-hybrid } +\__mermap_new_supply_source:nn { stamen~toner-hybrid }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/toner-hybrid/{z}/{x}/{y}.png}, __attribution_stamen, basename = tiles/toner-hybrid, } -\__mermap_new_supply_source:nn { stamen~toner-background } +\__mermap_new_supply_source:nn { stamen~toner-background }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/toner-background/{z}/{x}/{y}.png}, __attribution_stamen, basename = tiles/toner-background, } -\__mermap_new_supply_source:nn { stamen~toner-labels } +\__mermap_new_supply_source:nn { stamen~toner-labels }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}.png}, __attribution_stamen, basename = tiles/toner-labels, } -\__mermap_new_supply_source:nn { stamen~toner-lines } +\__mermap_new_supply_source:nn { stamen~toner-lines }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/toner-lines/{z}/{x}/{y}.png}, __attribution_stamen, basename = tiles/toner-lines, } -\__mermap_new_supply_source:nn { stamen~watercolor } +\__mermap_new_supply_source:nn { stamen~watercolor }% DISCONTINUED after July 2023 and DEPRECATED { url = {https://stamen-tiles-a.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png}, attribution = { @@ -221,72 +313,3 @@ }, basename = tiles/watercolor, } - -\keys_define:nn { mermap/supply } - { - __attribution_thunderforest .meta:nn = {mermap/supply} { - attribution = { - Maps~\textcopyright\nobreakspace\href{https://www.thunderforest.com/}{Thunderforest}, - \ Data~\textcopyright\nobreakspace\href{https://openstreetmap.org/copyright}{OpenStreetMap~contributors} - }, - attribution~print = { - Maps~\textcopyright\nobreakspace www.thunderforest.com, - \ Data~\textcopyright\nobreakspace www.osm.org/copyright - } - } - } -\__mermap_new_supply_source:nn { thunderforest~opencyclemap } - { - url~with~api~key = {https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, - __attribution_thunderforest, - basename = tiles/opencyclemap, - } -\__mermap_new_supply_source:nn { thunderforest~transport } - { - url~with~api~key = {https://tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, - __attribution_thunderforest, - basename = tiles/transport, - } -\__mermap_new_supply_source:nn { thunderforest~landscape } - { - url~with~api~key = {https://tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, - __attribution_thunderforest, - basename = tiles/landscape, - } -\__mermap_new_supply_source:nn { thunderforest~outdoors } - { - url~with~api~key = {https://tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, - __attribution_thunderforest, - basename = tiles/outdoors, - } -\__mermap_new_supply_source:nn { thunderforest~transport-dark } - { - url~with~api~key = {https://tile.thunderforest.com/transport-dark/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, - __attribution_thunderforest, - basename = tiles/transport-dark, - } -\__mermap_new_supply_source:nn { thunderforest~spinal-map } - { - url~with~api~key = {https://tile.thunderforest.com/spinal-map/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, - __attribution_thunderforest, - basename = tiles/spinal-map, - } -\__mermap_new_supply_source:nn { thunderforest~pioneer } - { - url~with~api~key = {https://tile.thunderforest.com/pioneer/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, - __attribution_thunderforest, - basename = tiles/pioneer, - } -\__mermap_new_supply_source:nn { thunderforest~mobile-atlas } - { - url~with~api~key = {https://tile.thunderforest.com/mobile-atlas/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, - __attribution_thunderforest, - basename = tiles/mobile-atlas, - } -\__mermap_new_supply_source:nn { thunderforest~neighbourhood } - { - url~with~api~key = {https://tile.thunderforest.com/neighbourhood/{z}/{x}/{y}.png?apikey=}{thunderforest}{}, - __attribution_thunderforest, - basename = tiles/neighbourhood, - } - diff --git a/macros/latex/contrib/mitthesis/MIT-Thesis.pdf b/macros/latex/contrib/mitthesis/MIT-Thesis.pdf Binary files differindex fffb7fbf43..e7f9b4a01a 100644 --- a/macros/latex/contrib/mitthesis/MIT-Thesis.pdf +++ b/macros/latex/contrib/mitthesis/MIT-Thesis.pdf diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/MIT-Thesis.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/MIT-Thesis.tex index 4311237b48..fc7e8a88f1 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/MIT-Thesis.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/MIT-Thesis.tex @@ -3,7 +3,7 @@ % This file is MIT-Thesis.tex, a LaTeX template for formatting an MIT thesis with the mitthesis class. % -% Version: 1.13, 2024/07/03 +% Version: 1.14, 2024/07/19 % % Author: John H. Lienhard, copyright 2024. Reuse under the MIT license: https://ctan.org/license/mit @@ -182,13 +182,13 @@ % If there is more than one supervisor, use the \Supervisor command for each. \Supervisor{Edward C. Pickering}{Professor of Physics} -%\Supervisor{Edward C. Pickering}{Professor of Physics, and \\ \> Professor of Something Else} +% \Supervisor{Edward C. Pickering}{Professor of Physics, and \\ \> Professor of Something Else} % \Supervisor{Secunda Castor}{Professor of Research} % \Supervisor{Quintus Castor}{Professor of Log Dams} % Professor who formally accepts theses for your department (e.g., the Graduate Officer, Professor Sméagol,...) % If more than one department, use more than once - \Acceptor{Primus Castor}{Professor of Wetlands Engineering}{Undergraduate Officer, Department of Physics} + \Acceptor{Primus Castor}{Professor of Wetlands Engineering}{}%{Undergraduate Officer, Department of Physics} % \Acceptor{Tertius Castor}{Professor of Log Dams}{Graduate Officer, Department of Research} % \Acceptor{Quarta Castor}{Professor of Lodge Building}{Graduate Officer, Department of Mechanical Engineering} %% If you need to reduce vertical space, put the acceptor title in the second argument and leave the third blank, {}. diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/chapter1.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/chapter1.tex index 481e96a4c4..1f2acd20a6 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/chapter1.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/chapter1.tex @@ -1,5 +1,5 @@ % From mitthesis package -% Version: 1.05, 2023/11/03 +% Version: 1.06, 2024/07/09 % Documentation: https://ctan.org/pkg/mitthesis @@ -7,7 +7,7 @@ \lipsum[1-2] Postremo aliquos futuros suspicor, qui me ad alias litteras vocent, genus hoc scribendi, etsi sit elegans, personae tamen et dignitatis esse negent~\cite{DKE1969,ww1920,kirk2288a,churchill1948,gibbs1863}. -\section[A section discussing the first issue: \(J/\psi\)]{A section discussing the first issue: \ifpdftex\(\bm{J}/\bm{\psi}\)\else{\(\symbfup{J/\psi}\)}\fi} +\section[A section discussing the first issue: \(J/\psi\)]{A section discussing the first issue: \ifpdftex\(\bm{J}/\bm{\psi}\)\else{\(\symbfit{J/\psi}\)}\fi} We begin with some ideas from the literature \cite{Fong2015,sharpe1}. diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-defaultfonts.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-defaultfonts.tex index bc7ba62c91..8795eb547e 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-defaultfonts.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-defaultfonts.tex @@ -1,16 +1,16 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mitthesis-defaultfonts.tex}[2024/06/28 v1.04 Load Computer/Latin Modern text and math fonts] +\ProvidesFile{mitthesis-defaultfonts.tex}[2023/09/12 v1.03 Load Computer/Latin Modern text and math fonts] %% Default fonts % \ifpdftex - \ClassNoteNoLine{\ClassName}{Loading Computer Modern text and math fonts (default for pdftex)} + \typeout{^^JLoading Computer Modern text and math fonts (default for pdftex).^^J} \RequirePackage[T1]{fontenc} \RequirePackage{bm} \else - \ClassNoteNoLine{\ClassName}{Loading Latin Modern text and math fonts (default for unicode engines)} + \typeout{^^JLoading Latin Modern text and math fonts (default for unicode engines).^^J} % \RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math} % suppress tiresome warnings about lack of integration between mathtools and unicode-math. diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-fira-newtxsf.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-fira-newtxsf.tex index ebba9ab190..01fa981d78 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-fira-newtxsf.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-fira-newtxsf.tex @@ -1,19 +1,19 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mitthesis-fira-newtxsf.tex}[2024/06/28 v1.05 Load Fira Sans text font with newtx sans serif math font and Inconsolata typewriter font] +\ProvidesFile{mitthesis-fira-newtxsf.tex}[2023/09/12 v1.04 Load Fira Sans text font with newtx sans serif math font and Inconsolata typewriter font] %% Fira Sans text font with newtx sans serif math font and Inconsolata typewriter font % \ifpdftex - \ClassNoteNoLine{\ClassName}{Loading Fira sans text font with newtx sans serif math font and Inconsolata typewriter} + \typeout{^^JLoading Fira sans text font with newtx sans serif math font and Inconsolata typewriter^^J} \RequirePackage[sfdefault,scaled=0.90]{FiraSans} % sans serif text package %,scaled=.85 \RequirePackage[T1]{fontenc} \RequirePackage[varqu,varl,scaled=1.05]{zi4} % inconsolata font for typewriter \RequirePackage[scaled=1.05]{newtxsf} % sans serif math \RequirePackage{bm} \else - \ClassWarning{\ClassName}{The fira-newtxsf font set requires pdflatex. Defaulting to LMR fonts} + \ClassWarning{mitnewthesis}{The fira-newtxsf font set requires pdflatex. Defaulting to LMR fonts} \RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math} % suppress tiresome warnings about lack of integration between mathtools and unicode-math. % Unicode-math loads the fontspec package, but the default fonts are not selected by fontspec in this case. diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-heros-stix2.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-heros-stix2.tex index 1535771f11..26ee2ab07b 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-heros-stix2.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-heros-stix2.tex @@ -1,7 +1,7 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mitthesis-heros-stix2.tex}[2024/06/28 v1.03 Load TeX Gyre Heros (sans serif) text font with STIX Two Math font and Inconsolata monospaced font] +\ProvidesFile{mitthesis-heros-stix2.tex}[2023/09/12 v1.02 Load TeX Gyre Heros (sans serif) text font with STIX Two Math font and Inconsolata monospaced font] %% TeX Gyre Heros (sans serif) text font with STIX Two Math font and Inconsolata monospaced font % @@ -12,11 +12,11 @@ % Install these as system fonts on your computer % \ifpdftex - \ClassWarning{\ClassName}{The heros-stix2 fontset requires a unicode engine. Defaulting to CMR fonts} + \ClassWarning{mitnewthesis}{The heros-stix2 fontset requires a unicode engine. Defaulting to CMR fonts.} \RequirePackage[T1]{fontenc} \RequirePackage{bm} \else - \ClassNoteNoLine{\ClassName}{TeX Gyre Heros (sans serif) text font with STIX2 math font and Inconsolata monospaced font} + \typeout{^^JTeX Gyre Heros (sans serif) text font with STIX2 math font and Inconsolata monospaced font.^^J} % \RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math} % suppress tiresome warnings about lack of integration between mathtools and unicode-math diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-libertine.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-libertine.tex index 41b2f561df..57cf26f915 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-libertine.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-libertine.tex @@ -1,7 +1,7 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mitthesis-libertine.tex}[2024/06/28 v1.03 Load Libertine and related fonts] +\ProvidesFile{mitthesis-libertine.tex}[2023/09/12 v1.02 Load Libertine and related fonts] %% Linux Libertine (serif) text font with newtxmath[libertine] (pdftex) or Libertinus (unicode) math font % @@ -10,7 +10,7 @@ % install these as system fonts on your computer % \ifpdftex - \ClassNoteNoLine{\ClassName}{Loading newtx-libertine text and math fonts with Insolata typewriter font} + \typeout{^^JLoading newtx-libertine text and math fonts with Insolata typewriter font^^J} \RequirePackage[lining,semibold]{libertine} \RequirePackage[T1]{fontenc} \RequirePackage[varqu,varl]{inconsolata}% typewriter @@ -18,7 +18,7 @@ \RequirePackage[libertine,vvarbb]{newtxmath} \RequirePackage{bm}% load after all math to give access to bold math \else - \ClassNoteNoLine{\ClassName}{Loading Linux Libertine (serif) text font with Libertinus math font} + \typeout{^^JLoading Linux Libertine (serif) text font with Libertinus math font^^J} % \RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math} % suppress tiresome warnings about lack of integration between mathtools and unicode-math diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-lucida.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-lucida.tex index e18c72fd92..6466c36929 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-lucida.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-lucida.tex @@ -1,11 +1,11 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mitthesis-lucida.tex}[2024/06/28 v1.03 Load Lucida fonts] +\ProvidesFile{mitthesis-lucida.tex}[2023/09/12 v1.02 Load Lucida fonts] %% Lucida Bright and Lucida Bright Math fonts (available from the TeX Users Group) -\ClassNoteNoLine{\ClassName}{Lucida Bright and Lucida Bright Math fonts} +\typeout{^^JLucida Bright and Lucida Bright Math fonts^^J} \ifpdftex \RequirePackage[LY1]{fontenc} diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx-sans-text.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx-sans-text.tex index b76428f383..03d62286e2 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx-sans-text.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx-sans-text.tex @@ -1,12 +1,11 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mitthesis-newtx-sans-text.tex}[2024/06/68 v1.04 Load newtx sans-serif text and regular math fonts] +\ProvidesFile{mitthesis-newtx-sans-text.tex}[2023/10/03 v1.03 Load newtx sans-serif text and regular math fonts] %% newtx package with sans-serif text (Helvetica-like text with Times-like math) % \ifpdftex - \ClassNoteNoLine{\ClassName}{Loading newtx sans-serif text and newtx serif math fonts} \RequirePackage[T1]{fontenc} \RequirePackage[subscriptcorrection,varvw,helvratio=0.91,defaultsups]{newtx}% upint for upright integrals \AtEndPreamble{% added to accommodate v1.731 of newtx, 2023/11/03 @@ -18,7 +17,7 @@ % \DeclareFontFamily{\encodingdefault}{\ttdefault}{\hyphenchar\font=`\-} % \RequirePackage{bm}% bold math \else - \ClassWarning{\ClassName}{The newtx font set requires pdflatex. Defaulting to LMR fonts} + \ClassWarning{mitnewthesis}{The newtx font set requires pdflatex. Defaulting to LMR fonts} \RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math} % suppress tiresome warnings about lack of integration between mathtools and unicode-math. % Unicode-math loads the fontspec package, but the default fonts are not selected by fontspec in this case. diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx.tex index b1541bbd05..cc43427055 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-newtx.tex @@ -1,17 +1,17 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mitthesis-newtx.tex}[2024/06/28 v1.04 Load newtx text and math fonts] +\ProvidesFile{mitthesis-newtx.tex}[2023/09/12 v1.03 Load newtx text and math fonts] \ifpdftex - \ClassNoteNoLine{\ClassName}{Loading newtx fonts with inconsolata typewriter} + \typeout{^^JLoading newtx fonts with inconsolata typewriter^^J} \RequirePackage[T1]{fontenc} \RequirePackage[subscriptcorrection,varvw,helvratio=0.91]{newtx}% stix2, upint \RequirePackage[varl,varqu,hyphenate,mono]{inconsolata}% sans typewriter font; mono = fixed word spacing, hyphenate = allow hyphenation \RequirePackage{bm} \let\textsuperscript\textsu% newtx changes the default superiors font; this is needed to get commas aligned in sequential footnotes \else - \ClassWarning{\ClassName}{The newtx font set requires pdflatex. Defaulting to LMR fonts} + \ClassWarning{mitnewthesis}{The newtx font set requires pdflatex. Defaulting to LMR fonts} \RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math} % suppress tiresome warnings about lack of integration between mathtools and unicode-math. % Unicode-math loads the fontspec package, but the default fonts are not selected by fontspec in this case. diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-stix2.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-stix2.tex index c178ff233f..de3983fe4e 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-stix2.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-stix2.tex @@ -1,7 +1,7 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mitthesis-stix2.tex}[2024/06/28 v1.04 Load STIX Two text and math fonts] +\ProvidesFile{mitthesis-stix2.tex}[2023/09/12 v1.03 Load STIX Two text and math fonts] %% STIX Two text and math fonts with Heros sans serif font and Inconsolata monospaced font % @@ -12,11 +12,11 @@ % Install these as system fonts on your computer % \ifpdftex - \ClassWarning{\ClassName}{The stix2 fontset requires a unicode engine. Defaulting to CMR fonts.} + \ClassWarning{mitnewthesis}{The stix2 fontset requires a unicode engine. Defaulting to CMR fonts.} \RequirePackage[T1]{fontenc} \RequirePackage{bm} \else - \ClassNoteNoLine{\ClassName}{Loading STIX Two text and math fonts with Heros sans serif font and Inconsolata monospaced font} + \typeout{^^JLoading STIX Two text and math fonts with Heros sans serif font and Inconsolata monospaced font.^^J} % \RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math} % suppress tiresome warnings about lack of integration between mathtools and unicode-math diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes-stix2.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes-stix2.tex index ed2abc1655..1e65724cc0 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes-stix2.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes-stix2.tex @@ -1,7 +1,7 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mitthesis-termes-stix2.tex}[2024/10/28 v1.04 Load TeX Gyre Termes text font with STIX2 math font, Heros sans serif font, and Inconsolata monospaced font] +\ProvidesFile{mitthesis-termes-stix2.tex}[2023/09/12 v1.03 Load TeX Gyre Termes text font with STIX2 math font, Heros sans serif font, and Inconsolata monospaced font] %% TeX Gyre Termes text font and Heros sans serif font with STIX2 math font and Inconsolata monospaced font % @@ -12,11 +12,11 @@ % Install these as system fonts on your computer % \ifpdftex - \ClassWarning{\ClassName}{The termes-stix2 fontset requires a unicode engine. Defaulting to CMR fonts.} + \ClassWarning{mitnewthesis}{The termes-stix2 fontset requires a unicode engine. Defaulting to CMR fonts.} \RequirePackage[T1]{fontenc} \RequirePackage{bm} \else - \ClassNoteNoLine{\ClassName}{Loading TeX Gyre Termes text font with STIX2 math font, Heros sans serif font, and Inconsolata monospaced font} + \typeout{^^JLoading TeX Gyre Termes text font with STIX2 math font, Heros sans serif font, and Inconsolata monospaced font.^^J} % \RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math} % suppress tiresome warnings about lack of integration between mathtools and unicode-math diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes.tex index fd1e15bab8..64fffb9264 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/fontsets/mitthesis-termes.tex @@ -1,7 +1,7 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mitthesis-termes.tex}[2024/06/28 v1.04 Load TeX Gyre Termes text and math fonts, Heros sans serif font, and Cursor monospaced font] +\ProvidesFile{mitthesis-termes.tex}[2023/09/12 v1.03 Load TeX Gyre Termes text and math fonts, Heros sans serif font, and Cursor monospaced font] %% TeX Gyre Termes (Times-like) text font with Termes math font and Heros sans serif font and Cursor monospaced font % @@ -9,11 +9,11 @@ % install these as system fonts on your computer % \ifpdftex - \ClassWarning{\ClassName}{The termes fontset requires a unicode engine. Defaulting to CMR fonts.} + \ClassWarning{mitnewthesis}{The termes fontset requires a unicode engine. Defaulting to CMR fonts.} \RequirePackage[T1]{fontenc} \RequirePackage{bm} \else - \ClassNoteNoLine{\ClassName}{Loading TeX Gyre Termes text and math fonts, Heros sans serif font, and Cursor monospaced font} + \typeout{^^JLoading TeX Gyre Termes text and math fonts, Heros sans serif font, and Cursor monospaced font^^J} \RequirePackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math} % suppress tiresome warnings about lack of integration between mathtools and unicode-math % unicode-math loads the fontspec package diff --git a/macros/latex/contrib/mitthesis/MIT-thesis-template/mydesign.tex b/macros/latex/contrib/mitthesis/MIT-thesis-template/mydesign.tex index ef71521074..1d9184e973 100644 --- a/macros/latex/contrib/mitthesis/MIT-thesis-template/mydesign.tex +++ b/macros/latex/contrib/mitthesis/MIT-thesis-template/mydesign.tex @@ -1,7 +1,7 @@ % From mitthesis package % Documentation: https://ctan.org/pkg/mitthesis -\ProvidesFile{mydesign.tex}[20234/06/28 v1.04 Typographic design options for thesis] +\ProvidesFile{mydesign.tex}[2024/06/28 v1.04 Typographic design options for thesis] %%%%%%%%%% Color support %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/macros/latex/contrib/mitthesis/README.md b/macros/latex/contrib/mitthesis/README.md index c703518304..9d2918ca36 100644 --- a/macros/latex/contrib/mitthesis/README.md +++ b/macros/latex/contrib/mitthesis/README.md @@ -1,11 +1,11 @@ #mitthesis --- A LaTeX template for an MIT thesis# - v1.13 dated 2024/07/03 + v1.14 dated 2024/07/19 ####Overview#### This class provides a LaTeX template to format an MIT thesis according to - the requirements of the Massachusetts Institute of Technology Libraries (as posted in 2023): + the requirements of the Massachusetts Institute of Technology Libraries (as posted in 2024): [https://libraries.mit.edu/distinctive-collections/thesis-specs/](https://libraries.mit.edu/distinctive-collections/thesis-specs/) @@ -53,6 +53,12 @@ --- ####Change log#### + v1.14 (19 July 2024) + - add backward compatibility code for \\text_titlecase_all:n + - adjust supervisor and acceptor titles used on sample cover pages + - format J/psi as \\symbfit in sample chapter 1 and regenerate font samples + - edit documentation + v1.13 (03 July 2024) - same as v1.12, except now includes the correct documentation diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/No_cc_license.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/No_cc_license.pdf Binary files differindex 304d89113b..159f037a4d 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/No_cc_license.pdf +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/No_cc_license.pdf diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree.pdf Binary files differindex 737603f89c..8b4d3e0942 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree.pdf +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree.pdf diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree_two_departments.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree_two_departments.pdf Binary files differindex c10db9e046..e7e2f13e88 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree_two_departments.pdf +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_one_degree_two_departments.pdf diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees.pdf Binary files differindex 7ab9882820..1adb097a70 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees.pdf +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees.pdf diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees_from_one_department.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees_from_one_department.pdf Binary files differindex 8950c7ed3c..0617a275f8 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees_from_one_department.pdf +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/One_author_two_degrees_from_one_department.pdf diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree.pdf Binary files differindex 61a2b63115..7e4300d5b6 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree.pdf +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_one_degree.pdf diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_two_degrees.pdf b/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_two_degrees.pdf Binary files differindex c9ccbd8a9a..299acda338 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_two_degrees.pdf +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/Two_authors_two_degrees.pdf diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree_two_departments.tex b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_one_degree_two_departments.tex index cf4fce672e..6c1f5c3982 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree_two_departments.tex +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_one_degree_two_departments.tex @@ -3,7 +3,7 @@ % !BIB program = biber % Author: John H. Lienhard (c) 2024. Reuse under the MIT license: https://ctan.org/license/mit -% Version 1.01, 2024/06/25 +% Version 1.02, 2024/07/08 % Documentation: https://ctan.org/pkg/mitthesis @@ -75,7 +75,7 @@ % note on names: most of the following names are made up; Silas Holman was a professor at MIT in the 19th century. -\Author{Silas W. Holman}{Department of Physics}%[B.S. Physics, MIT, 1876][MBA, Ferengi School of Management, 2022] +\Author{Silas W. Holman}{Department of Nuclear Science and Engineering}%[B.S. Physics, MIT, 1876][MBA, Ferengi School of Management, 2022] %\Author{Luisa Hernández}{Department of Research}%[B.S. Mechanical Engineering, UCLA, 2018][M.S. Stellar Interiors, Vulcan Science Academy, 2020][MBA, Ferengi School of Management, 2022] % For one degree issued by two departments, leave the degree argument blank for the second degree {}. @@ -83,23 +83,17 @@ \Degree{}{Center for Computational Science and Engineering} % If there is more than one supervisor, use the \Supervisor command for each. -\Supervisor{Edward C. Pickering}{Professor of Physics} -\Supervisor{Secunda Castor}{Professor of Research} +\Supervisor{Edward C. Pickering}{Professor of Nuclear Science and Engineering} +%\Supervisor{Secunda Castor}{Professor of Research} %\Supervisor{Quintus Castor}{Professor of Log Dams} % Professor who formally accepts theses for your department (e.g., the Graduate Officer, Professor Sméagol,...) % If more than one department, use more than once % If you need to reduce vertical space, put the acceptor title in the second argument and leave the third blank {}. -\Acceptor{Primus Castor}{Professor and Graduate Officer, Department of Physics}{} -\Acceptor{Tertius Castor}{Professor and Graduate Officer, Department of Mechanical Engineering}{} +\Acceptor{Primus Castor}{Professor and Graduate Officer}{Department of Nuclear Science and Engineering} +\Acceptor{Tertius Castor}{Professor and Graduate Officer}{Center for Computational Science and Engineering} %\Acceptor{Quarta Castor}{Professor of Lodge Building}{Undergraduate Officer, Department of Mechanical Engineering} -% In this example, several steps have been taken to make the content fit on the title page! The \Acceptors have been confined to two -% lines in the above commands, the signature block font size is reduced, the skips are tightened, the author names use normal font size, -% and Luisa's previous degrees are not shown. -\SignatureBlockSize{\small} %\SignatureBlockSize{\footnotesize} -\Tighten -\AuthorNameSize{\normalsize} % Usage: \DegreeDate{Month}{year} % Valid degree months are September, February, or June. diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_two_degrees.tex b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_two_degrees.tex index 6334a228ae..f8ebb1b965 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_two_degrees.tex +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/One_author_two_degrees.tex @@ -85,8 +85,7 @@ % If there is more than one supervisor, use the \Supervisor command for each. \Supervisor{Edward C. Pickering}{Professor of Physics} -\Supervisor{Secunda Castor}{Professor of Research} -%\Supervisor{Quintus Castor}{Professor of Log Dams} +\Supervisor{Secunda Castor}{Professor of Mechanical Engineering} % Professor who formally accepts theses for your department (e.g., the Graduate Officer, Professor Sméagol,...) % If more than one department, use more than once diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree.tex b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree.tex index e5e2618b69..a757806b01 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree.tex +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_one_degree.tex @@ -2,7 +2,7 @@ % !BIB TS-program = biber % !BIB program = biber -% Author: John H. Lienhard (c) 2023. Reuse under the MIT license: https://ctan.org/license/mit +% Author: John H. Lienhard (c) 2024. Reuse under the MIT license: https://ctan.org/license/mit % Documentation: https://ctan.org/pkg/mitthesis @@ -75,7 +75,7 @@ % note on names: most of the following names are made up; Silas Holman was a professor at MIT in the 19th century. \Author{Silas W. Holman}{Department of Physics}%[B.S. Physics, MIT, 1876][MBA, Ferengi School of Management, 2022] -\Author{Luisa Hernández}{Department of Research}[B.S. Mechanical Engineering, UCLA, 2018][M.S. Stellar Interiors, Vulcan Science Academy, 2020][MBA, Ferengi School of Management, 2022] +\Author{Luisa Hernández}{Department of Physics}[B.S. Mechanical Engineering, UCLA, 2018][M.S. Stellar Interiors, Vulcan Science Academy, 2020][MBA, Ferengi School of Management, 2022] % Use once for each degree fulfilled by thesis % For two degrees from one department, leave the department argument blank for the second degree {}. @@ -85,20 +85,11 @@ % If there is more than one supervisor, use the \Supervisor command for each. \Supervisor{Edward C. Pickering}{Professor of Physics} -%\Supervisor{Secunda Castor}{Professor of Research} -%\Supervisor{Quintus Castor}{Professor of Log Dams} % Professor who formally accepts theses for your department (e.g., the Graduate Officer, Professor Sméagol,...) % If more than one department, use more than once % If you need to reduce vertical space, put the acceptor title in the second argument and leave the third blank {}. -%\Acceptor{Primus Castor}{Professor of Wetlands Engineering}{Graduate Officer, Department of Physics} \Acceptor{Quintus Castor}{Professor of Wetlands Engineering}{Undergraduate Officer, Department of Physics} -%\Acceptor{Tertius Castor}{Professor of Log Dams}{Graduate Officer, Department of Research} -%\Acceptor{Quarta Castor}{Professor of Lodge Building}{Graduate Officer, Department of Mechanical Engineering} - -% If your title page is overflowing (from too many names, degrees, etc.), you can scale -% down the Signature block at the bottom with this command, or use another creative solution... -%\SignatureBlockSize{\small} %\SignatureBlockSize{\footnotesize} % Usage: \DegreeDate{Month}{year} % Valid degree months are September, February, or June. diff --git a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_two_degrees.tex b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_two_degrees.tex index fd9fc21485..57a957b6ba 100644 --- a/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_two_degrees.tex +++ b/macros/latex/contrib/mitthesis/examples/cover_page_samples/latex_sources/Two_authors_two_degrees.tex @@ -2,8 +2,8 @@ % !BIB TS-program = biber % !BIB program = biber -% Author: John H. Lienhard (c) 2023. Reuse under the MIT license: https://ctan.org/license/mit -% Version 1.01, 2023/10/27 +% Author: John H. Lienhard (c) 2024. Reuse under the MIT license: https://ctan.org/license/mit +% Version 1.02, 2024/07/08 % Documentation: https://ctan.org/pkg/mitthesis @@ -82,19 +82,16 @@ % For two degrees from one department, leave the department argument blank for the second degree {}. \Degree{Master of Science in Physics}{Department of Physics} \Degree{Master of Science in Mechanical Engineering}{Department of Mechanical Engineering} -%\Degree{Master of Science in Physics}{} % If there is more than one supervisor, use the \Supervisor command for each. \Supervisor{Edward C. Pickering}{Professor of Physics} -\Supervisor{Secunda Castor}{Professor of Research} -%\Supervisor{Quintus Castor}{Professor of Log Dams} +\Supervisor{Secunda Castor}{Professor of of Mechanical Engineering} % Professor who formally accepts theses for your department (e.g., the Graduate Officer, Professor Sméagol,...) % If more than one department, use more than once % If you need to reduce vertical space, put the acceptor title in the second argument and leave the third blank {}. \Acceptor{Primus Castor}{Professor and Graduate Officer, Department of Physics}{} \Acceptor{Tertius Castor}{Professor and Graduate Officer, Department of Mechanical Engineering}{} -%\Acceptor{Quarta Castor}{Professor of Lodge Building}{Undergraduate Officer, Department of Mechanical Engineering} % In this example, several steps have been taken to make the content fit on the title page! The \Acceptors have been confined to two % lines in the above commands, the signature block font size is reduced, the skips are tightened, the author names use normal font size, diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Defaultfonts.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Defaultfonts.pdf Binary files differindex c32bcc359c..97243bde84 100644 --- a/macros/latex/contrib/mitthesis/examples/font_samples/Defaultfonts.pdf +++ b/macros/latex/contrib/mitthesis/examples/font_samples/Defaultfonts.pdf diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Fira_Newtxsf.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Fira_Newtxsf.pdf Binary files differindex f78b32a6d9..cc3e40ce75 100644 --- a/macros/latex/contrib/mitthesis/examples/font_samples/Fira_Newtxsf.pdf +++ b/macros/latex/contrib/mitthesis/examples/font_samples/Fira_Newtxsf.pdf diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Heros-Stix2.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Heros-Stix2.pdf Binary files differindex 0262aabdef..c09afd43ee 100644 --- a/macros/latex/contrib/mitthesis/examples/font_samples/Heros-Stix2.pdf +++ b/macros/latex/contrib/mitthesis/examples/font_samples/Heros-Stix2.pdf diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Libertine.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Libertine.pdf Binary files differindex 44d54df946..418bf7e8d3 100644 --- a/macros/latex/contrib/mitthesis/examples/font_samples/Libertine.pdf +++ b/macros/latex/contrib/mitthesis/examples/font_samples/Libertine.pdf diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Lucida.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Lucida.pdf Binary files differindex d667a4bed4..43081a36f0 100644 --- a/macros/latex/contrib/mitthesis/examples/font_samples/Lucida.pdf +++ b/macros/latex/contrib/mitthesis/examples/font_samples/Lucida.pdf diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Newtx-sans-text.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Newtx-sans-text.pdf Binary files differindex 9f22058aa0..d21ca4d057 100644 --- a/macros/latex/contrib/mitthesis/examples/font_samples/Newtx-sans-text.pdf +++ b/macros/latex/contrib/mitthesis/examples/font_samples/Newtx-sans-text.pdf diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Newtx.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Newtx.pdf Binary files differindex fabf8cd29a..45952c0c52 100644 --- a/macros/latex/contrib/mitthesis/examples/font_samples/Newtx.pdf +++ b/macros/latex/contrib/mitthesis/examples/font_samples/Newtx.pdf diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Stix2.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Stix2.pdf Binary files differindex 7c38f1d828..0792ee30f9 100644 --- a/macros/latex/contrib/mitthesis/examples/font_samples/Stix2.pdf +++ b/macros/latex/contrib/mitthesis/examples/font_samples/Stix2.pdf diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Termes-stix2.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Termes-stix2.pdf Binary files differindex c7993b99aa..80b8e07d10 100644 --- a/macros/latex/contrib/mitthesis/examples/font_samples/Termes-stix2.pdf +++ b/macros/latex/contrib/mitthesis/examples/font_samples/Termes-stix2.pdf diff --git a/macros/latex/contrib/mitthesis/examples/font_samples/Termes.pdf b/macros/latex/contrib/mitthesis/examples/font_samples/Termes.pdf Binary files differindex 4affab8613..90dfd3ab31 100644 --- a/macros/latex/contrib/mitthesis/examples/font_samples/Termes.pdf +++ b/macros/latex/contrib/mitthesis/examples/font_samples/Termes.pdf diff --git a/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.pdf b/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.pdf Binary files differindex 94724d1eec..ab61cf59e5 100644 --- a/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.pdf +++ b/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.pdf diff --git a/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.tex b/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.tex index 6f8954813b..4e5e739585 100644 --- a/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.tex +++ b/macros/latex/contrib/mitthesis/mitthesis-doc/mitthesis-doc.tex @@ -1,7 +1,7 @@ % !TEX TS-program = lualatex % !TEX encoding = UTF-8 Unicode -% Version date: 1 July 2024 +% Version date: 19 July 2024 \DocumentMetadata { @@ -24,6 +24,8 @@ \usepackage[x11names,svgnames,dvipsnames,table]{xcolor} \usepackage{luacolor} % load AFTER xcolor +\usepackage{mathtools} + \usepackage[en-US]{datetime2} %% change default date format \makeatletter \newcommand{\daymonthyeardate}{% @@ -191,7 +193,7 @@ \phantomsection\pdfbookmark[1]{\abstractname}{summary} \begin{abstract} -This \LaTeX\ class formats theses according to the requirements of the MIT Libraries. The template is suitable for MIT theses of all types and at all levels. The title and abstract pages are automatically laid out from information provided by the user. The template includes options to use a variety of typefaces, and it is compatible with either pdfTeX or unicode engines such as luaLaTeX. When using LaTeX formats dated November 2022 or later, the resulting pdf file meets the PDF/A-2b archivability standard. A standard \href{https://www.tug.org/texlive/}{\TeX\ Live} installation includes all other packages required by the template. This document provides instructions for installation and use of the template. +This \LaTeX\ class formats theses according to the requirements of the MIT Libraries. The template is suitable for MIT theses of all types and at all levels. The title and abstract pages are automatically laid out from information provided by the user. The template includes options to use a variety of typefaces, and it is compatible with either pdfTeX or unicode engines such as LuaLaTeX. When using LaTeX formats dated November 2022 or later, the resulting pdf file meets the PDF/A-2b archivability standard. A standard \href{https://www.tug.org/texlive/}{\TeX\ Live} installation includes all other packages required by the template. This document provides instructions for installation and use of the template. \end{abstract} \tableofcontents @@ -220,7 +222,7 @@ If the most current version of \texttt{mitthesis.cls} is installed in your syste The new MIT thesis template consists of: \texttt{mitthesis.cls}; a root file \texttt{MIT-Thesis.tex}; a file to load the abstract, \texttt{abstract.tex}; a file for design options, \texttt{mydesign.tex}; and an optional file to change the fonts (see the subdirectory, \texttt{fontset}). You should change the name of the root file to something more descriptive of your own work (e.g., \texttt{JohnsThesis.tex}, \texttt{MagnumOpusScientiae.tex},\ldots). In addition, files must be loaded for acknowledgments, an optional biosketch, chapters, optional appendices, and bibliography. \subsection{\LaTeX\ engine} -The template works with either \pdfTeX\ or unicode engines such as \LuaLaTeX. With the latter, fonts that you install in your operating system can be configured for use in your thesis. \LuaLaTeX\ also enables the direct use of lua code in your \texttt{.tex} file. With lua code, you can automate plotting, table generation, and other numerical computations. +The template works with either \pdfTeX\ or unicode engines such as \LuaLaTeX. With the latter, fonts that you install in your operating system can be configured for use in your thesis. \LuaLaTeX\ also enables the direct use of Lua code in your \texttt{.tex} file. With Lua code, you can automate plotting, table generation, and other numerical computations. \subsection{PDF/A compliance} PDF/A-2b compliance will be automatic if the \verb|\DocumentMetadata{pdfstandard = a-2b}| command is issued before the \verb|\documentclass{..}| command and \textit{provided that your graphics are also compliant}. This command was added to \LaTeX\ in June 2022. For older versions of \LaTeX, @@ -242,7 +244,7 @@ Note that third, fourth, fifth, and sixth arguments are optional [..] and may be \item \verb|\Degree{name of degree}{department giving degree}|. Use once for each degree fulfilled by the thesis. -If two departments jointly issue a single degree, leave the degree argument blank for the \textit{second} degree: +If two departments jointly issue a single degree, leave the degree name blank for the \textit{second} degree: \verb|\Degree{}{2nd department name}|. If the thesis satisfies two degrees from one department, leave the department argument blank for the \textit{second} degree: \verb|\Degree{2nd degree name}{}|. @@ -312,7 +314,7 @@ twoside & gives facing-page behavior for two-sided printing; omitting it will e \subsection{Font loading} By default, \texttt{mitthesis.cls} will load the traditional \LaTeX\ typeface, Computer Modern (for \pdfTeX) or Latin Modern (for unicode engines). By using the key value \texttt{fontset=$\cdots$} in the \verb|\documentclass| command, you can select a different set of fonts. -Ten font sets are predefined, including the default set (see Table~\ref{tab:2}). Three work only with \pdfTeX, four work only with unicode engines, and three work with either. These options include a mixture of serif or sans serif text and math fonts, as shown in the table. To access the predefined font sets, you \textit{must} have the directory \texttt{fontsets} as a subdirectory of your working directory, including its files as named. +Ten font sets are predefined, including the default set (see Table~\ref{tab:2}). Three work only with \pdfTeX, four work only with unicode engines, and three work with either. These options include a mixture of serif or sans serif text and math fonts, as shown in the table. To access the predefined font sets, you \textit{must} have the directory \texttt{fontsets} as a subdirectory of your working directory, including its files as named. For unicode engines, you must have the relevant fonts installed as system fonts on your computer. Among the predefined font sets, Termes and NewTX are serifed typefaces similar to the digital typeface Times New Roman. STIX Two is more similar to the original metal-type Times typeface. Linux Libertine is a serif typeface inspired by 19\textsuperscript{th} century book type. Lucida is a serifed typeface designed for high legibility at small size or on low resolution devices. Lucida is excellent for mathematics and includes a complete bold-face math font, but it is not free. Heros and NewTX-sans are sans-serif text typefaces similar to Helvetica. NewTXsf is a sans-serif math font which draws upon glyphs from the STIX fonts. Fira is a humanist sans-serif text typeface designed in association with the Firefox browser. Finally, Computer Modern (and its extension Latin Modern)---the traditional \LaTeX\ typeface---is a Didone typeface, with high contrast between thick and thin elements. % STIX Two, Termes, and LMR do not include a separate bold math font. @@ -351,7 +353,7 @@ termes-stix2 & no & yes & serif & serif & \url{http://www.gust.org.pl/projects/ \subsection{Design options} The thesis will follow the default styles of the \LaTeX\ report class for sections headings, captions, and lists. If you prefer different styles you can use the class option [mydesign] which loads the file \texttt{mydesign.tex}. -With \texttt{mydesign.tex}, you can set options for packages that manage color, e.g.\ \texttt{\hrefurl{https://ctan.org/pkg/xcolor}{xcolor}}, that change the margins, or that change the design of titles, captions, and lists: \texttt{\hrefurl{https://ctan.org/pkg/titlesec}{titlesec}}, \texttt{\hrefurl{https://ctan.org/pkg/caption}{caption}}, or \texttt{\hrefurl{https://ctan.org/pkg/enumitem}{enumitem}}. You can also load other packages. The \texttt{mitthesis} class will insert these commands at the appropriate point (prior to loading \texttt{\hrefurl{https://ctan.org/pkg/babel}{babel}}, fonts, or \texttt{\hrefurl{https://ctan.org/pkg/hyperref}{hyperref}}). You should not need to edit the class file. +With \texttt{mydesign.tex}, you can set options for packages that manage color, e.g.\ \texttt{\hrefurl{https://ctan.org/pkg/xcolor}{xcolor}}, or that change the design of titles, captions, and lists: \texttt{\hrefurl{https://ctan.org/pkg/titlesec}{titlesec}}, \texttt{\hrefurl{https://ctan.org/pkg/caption}{caption}}, or \texttt{\hrefurl{https://ctan.org/pkg/enumitem}{enumitem}}. You can change the margins with \verb|\newgeometry{..}| from the \texttt{\hrefurl{https://ctan.org/pkg/geometry}{geometry}} package. You can also load other packages. The \texttt{mitthesis} class will insert these commands at the appropriate point (prior to loading \texttt{\hrefurl{https://ctan.org/pkg/babel}{babel}}, fonts, or \texttt{\hrefurl{https://ctan.org/pkg/hyperref}{hyperref}}). You should not need to edit the class file. Hyperlink colors and pdf bookmark or viewing options from the \texttt{hyperref} package can be changed by using \verb|\hypersetup{ .. }| in the preamble or using \verb|\AtBeginDocument{ \hypersetup{ .. } }| in the \texttt{mydesign.tex} file. @@ -367,15 +369,15 @@ have one nomenclature list for whole thesis or one for each chapter (the default For example, the following code \begin{center} -\begin{minipage}{0.8\textwidth} +\begin{minipage}{0.85\textwidth} \begin{verbatim} \begin{nomenclature}[2em][Nomenclature for Chapter 1][section] \EntryHeading{Roman letters} \entry{$\mathcal{C}$}{material curve} -\entry{$\mathbf{u}$}{velocity [m s$^{-1}$]} +\entry{$\mathbf{u}$}{velocity [m s$\cramped{^{-1}}$]} \EntryHeading{Greek letters} -\entry{$\Gamma$}{circulation [m$^2$ s$^{-1}$]} -\entry{$\rho$}{mass density [kg m$^{-3}$]} +\entry{$\Gamma$}{circulation [m$\cramped{^2}$ s$\cramped{^{-1}}$]} +\entry{$\rho$}{mass density [kg m$\cramped{^{-3}}$]} \end{nomenclature} \end{verbatim} \end{minipage} @@ -386,13 +388,14 @@ produces the nomenclature list below \begin{nomenclature}[2em][Nomenclature for Chapter 1][section] \EntryHeading{Roman letters} \entry{$\mathcal{C}$}{material curve} -\entry{$\mathbf{u}$}{velocity [m s$^{-1}$]} +\entry{$\mathbf{u}$}{velocity [m s$\cramped{^{-1}}$]} \EntryHeading{Greek letters} -\entry{$\Gamma$}{circulation [m$^2$ s$^{-1}$]} -\entry{$\rho$}{mass density [kg m$^{-3}$]} +\entry{$\Gamma$}{circulation [m$\cramped{^2}$ s$\cramped{^{-1}}$]} +\entry{$\rho$}{mass density [kg m$\cramped{^{-3}}$]} \end{nomenclature} \end{minipage} \end{center} +%% \cramped is from the mathtools package, and moves the superscript a bit lower \section{PACKAGES FOR MATH, CHEMISTRY, CODE, TABLES, AND MORE} The \texttt{mitthesis} class loads the \texttt{amsmath} package and its extension \texttt{mathttools}. These packages provide many useful macros for typesetting equations and symbols, such as: environments for aligning and splitting equations or groups of equations; tools for matrices; a wide variety of operators and symbols; tools to define new math operators and paired delimiters; and much, much more. If you are including equations, look at the documentation for these packages: \url{https://ctan.org/pkg/amsmath} and \url{https://ctan.org/pkg/mathtools}.\looseness=1 @@ -458,13 +461,13 @@ unicode-math & --- & load in a fontset file if using a unicode engine\\ Listing committee members (with or without signatures) is not required under MIT's thesis specifications. Only the thesis supervisor should appear on the title page, not a list of committee members. However, some departments may require a separate committee or signature page. That page can be inserted by the author between the title and abstract pages. Check with your department about this page and any associated formatting requirements. \subsection{Dealing with multiple titles in the signature block}\label{sec:6.3} -When a thesis supervisor has multiple titles (and both will not fit on one line), you can obtain a line break with proper horizontal spacing by doing +When a thesis supervisor has multiple titles (which will not fit on one line), you can obtain a line break with proper horizontal spacing by doing \vskip 5pt \quad\verb|\Supervisor{name}{first title and \\ \> second title}| \vskip 5pt \noindent\textbf{\TeX hackers note:} The signature block is typeset as a \LaTeX\ \texttt{tabbing} environment. -\subsection{Overflowing title page: managing space} If your title page overflows the vertical space (from too many authors, degrees, previous degrees, etc.), you can using some or all of the following techniques. The commands must be given before \verb|\maketitle|. +\subsection{Overflowing title page: managing space} If your title page overflows the vertical space (from too many authors, degrees, previous degrees, etc.), you can use some or all of the following techniques. The commands must be given before \verb|\maketitle|. \begin{enumerate} \item Reduce the 12 pt and 18 pt skips between the various blocks of text to 6 pt with this command: \vskip 5pt diff --git a/macros/latex/contrib/mitthesis/mitthesis.cls b/macros/latex/contrib/mitthesis/mitthesis.cls index 9990a07a88..0a3a44310c 100644 --- a/macros/latex/contrib/mitthesis/mitthesis.cls +++ b/macros/latex/contrib/mitthesis/mitthesis.cls @@ -7,8 +7,8 @@ %% MIT Libraries' requirements as of 2024. %% %% This file's version and date: - \def\versionno{1.13} - \def\versiondate{2024/07/03\space} + \def\versionno{1.14} + \def\versiondate{2024/07/19\space} %% %% Author: John H. Lienhard, V %% Department of Mechanical Engineering @@ -361,18 +361,16 @@ \tl_gremove_all:No \g__dd_month_tl { \space } \tl_gremove_all:No \g__dd_year_tl { \space } \str_case_e:nnF -% { \str_casefold:e { \tl_to_str:N \g__dd_month_tl } } % command not def'd until 2022/10/16 +% { \str_casefold:e { \tl_to_str:N \g__dd_month_tl } } % not def'd until 2022/10/16 { \str_lowercase:f { \tl_to_str:N \g__dd_month_tl } } { {february}{} {may}{} {june}{} {september}{}} { \msg_error:nnn { \ClassName } { wrong_month } {#1} } } \msg_new:nnnn { \ClassName } { wrong_month } {The\ degree\ month\ must\ be\ one\ of\ February,\ May,\ June,\ or\ September.} {You\ cannot\ use\ #1\ as\ the\ degree\ month.} -\cs_generate_variant:Nn \text_titlecase_first:n {V} -\cs_generate_variant:Nn \text_titlecase_all:n {V} \NewDocumentCommand\DegreeDate{mm}{% {month}{year} \__dd_setdates:nn {#1}{#2} - \cs_new:Npn \DegreeMonth { \text_titlecase_first:V { \str_lowercase:f \g__dd_month_tl } } + \cs_new:Npn \DegreeMonth { \text_titlecase_first:n { \text_lowercase:n \g__dd_month_tl } } \cs_new:Npn \DegreeYear { \text_expand:n { \g__dd_year_tl } }% edited 2024/06/24 } \msg_new:nnnn { \ClassName } { no_degree_date } {Missing\ degree\ date!}{ @@ -568,12 +566,16 @@ % If for some reason you need to change "Thesis Supervisor" to a different string (say, "Doctoral Advisor") % This construction removes leading and trailing spaces and lowercases the string. -% Commands in output modules handle titlecasing. \NewDocumentCommand\SupervisorDesignation{ m } { - \tl_gset:Nn \g_titlepage_supervisor_designation_tl { \str_lowercase:f { \tl_trim_spaces:n {#1} } } - \tl_gset:Nn \g_abstract_supervisor_designation_tl { \str_lowercase:f { \tl_trim_spaces:n {#1} } } + \tl_gset:Nn \g_titlepage_supervisor_designation_tl + { \cs_if_exist:NTF \text_titlecase_all:n % not def'd until 2023/07/08 + { \text_titlecase_all:n { \text_lowercase:n { \tl_trim_spaces:n {#1} } } } + { \tl_trim_spaces:n {#1} } + } + \tl_gset:Nn \g_abstract_supervisor_designation_tl + { \text_titlecase_first:n { \text_lowercase:n { \tl_trim_spaces:n {#1} } } } } - + \cs_new:Nn \__supervisor_abstractblock: { \int_zero_new:N \l__supervisor_supervisorno_int \int_incr:N \l__supervisor_supervisorno_int @@ -583,12 +585,12 @@ \msg_error:nn { \ClassName } { no_supervisor } } {\int_until_do:nNnn { \l__supervisor_supervisorno_int } = { \g_supervisor_supervisorcnt_int } { - \text_titlecase_first:V { \g_abstract_supervisor_designation_tl } :\space + \g_abstract_supervisor_designation_tl :\space \seq_item:cn { g_supervisor_name_seq } { \l__supervisor_supervisorno_int }\par Title:\space \seq_item:cn { g_supervisor_title_seq } { \l__supervisor_supervisorno_int }\par\medskip \int_incr:N \l__supervisor_supervisorno_int } - \text_titlecase_first:V { \g_abstract_supervisor_designation_tl } :\space + \g_abstract_supervisor_designation_tl :\space \seq_item:cn { g_supervisor_name_seq } { \l__supervisor_supervisorno_int }\par Title:\space \seq_item:cn { g_supervisor_title_seq } { \l__supervisor_supervisorno_int }\ignorespaces } @@ -629,8 +631,8 @@ { Missing\ acceptor\ department,\ check\ for\ blank\ in\ \Acceptor{name}{department}{title}\ command. }{ You\ MUST\ provide\ the\ acceptor's\ department\ using\ the\ \Acceptor{name}{department}{title}\ command.} \msg_new:nnn { \ClassName } { blank_acceptor_title } - { Missing\ acceptor\ title\ (blank\ in\ \Acceptor{name}{department}{title}\ command).\ Perhaps\ you\ are\ trying\ to\ save\ vertical\ space?\ - You\ can\ put\ the\ acceptor\ title\ into\ department\ field\ instead.\ For\ consistency,\ I\ will\ omit\ titles\ of\ ALL\ acceptors.} + { Missing\ acceptor\ title\ (blank\ in\ \Acceptor{name}{department}{title}\ command).\space Perhaps\ you\ are\ trying\ to\ save\ vertical\ space?\space + You\ can\ put\ the\ acceptor\ title\ into\ department\ field\ instead.\space For\ consistency,\ I\ will\ omit\ titles\ of\ ALL\ acceptors.} \cs_new_protected:Nn \__acceptor_data_add:nnn { @@ -802,8 +804,7 @@ \int_gincr:N \g__signature_supno_int Certified\ by: \> \seq_item:cn { g_supervisor_name_seq } { \g__signature_supno_int } \\ \> \seq_item:cn { g_supervisor_title_seq } { \g__signature_supno_int },\ - \text_titlecase_all:V { \g_titlepage_supervisor_designation_tl }\\[1em] - %\ Thesis\ Supervisor\\[1em] + \g_titlepage_supervisor_designation_tl \\[1em] } \int_compare:nNnF { \g_acceptor_acceptorcnt_int } = {0} { \int_do_while:nNnn { \g__signature_accno_int } < { \g_acceptor_acceptorcnt_int } { @@ -937,12 +938,12 @@ \tl_gset:Nn \g_copyright_copyrightlicencse_tl {This\ work\ is\ licensed\ under\ a\ \mbox{\g_copyright_cclicensetext_tl}\ license.\par\g_copyright_mitpermission_tl} \tl_gset:Nn \g_copyright_pdfrightstext_tl - {This\ work\ is\ licensed\ under\ a\ \g_copyright_ccname_tl\ license.\ \g_copyright_mitpermission_tl} + {This\ work\ is\ licensed\ under\ a\ \g_copyright_ccname_tl\ license.\space \g_copyright_mitpermission_tl} }{ \tl_gset:Nn \g_copyright_copyrightlicencse_tl {All\ rights\ reserved. \par\g_copyright_mitpermission_tl} \tl_gset:Nn \g_copyright_pdfrightstext_tl - {All\ rights\ reserved.\ \g_copyright_mitpermission_tl} + {All\ rights\ reserved.\space \g_copyright_mitpermission_tl} } \int_compare:nNnTF {\g_author_authorcnt_int} > {1} { @@ -981,7 +982,7 @@ } } \hypersetup{ - pdfcopyright={Copyright\ \DegreeYear\ by\ \CopyrightAuthor.\ \g_copyright_pdfrightstext_tl}, + pdfcopyright={Copyright\ \DegreeYear\ by\ \CopyrightAuthor.\space \g_copyright_pdfrightstext_tl}, pdfauthor={\g__author_pdfca_tl}, pdfcaptionwriter = {\g__author_pdfca_tl}, } diff --git a/macros/latex/contrib/moderncv/CHANGELOG b/macros/latex/contrib/moderncv/CHANGELOG index a02c0ed451..bcfdad1373 100644 --- a/macros/latex/contrib/moderncv/CHANGELOG +++ b/macros/latex/contrib/moderncv/CHANGELOG @@ -1,3 +1,6 @@ +version 2.4.1 (18 Jul 2024) +- Fix commons/colors.tex not found in package (#194) + version 2.4.0 (08 Jul 2024) - Rewrote user guide, thanks to David Seus (#58, #106, #169). - Fixed "Underfull \hbox (badness 10000)" warning in \makecvtitle (#162). diff --git a/macros/latex/contrib/moderncv/manual/moderncv_userguide.pdf b/macros/latex/contrib/moderncv/manual/moderncv_userguide.pdf Binary files differindex c0fc87708e..0468a22e0f 100644 --- a/macros/latex/contrib/moderncv/manual/moderncv_userguide.pdf +++ b/macros/latex/contrib/moderncv/manual/moderncv_userguide.pdf diff --git a/macros/latex/contrib/moderncv/manual/moderncv_userguide.tex b/macros/latex/contrib/moderncv/manual/moderncv_userguide.tex index ada0536fa7..feb6f31f6f 100644 --- a/macros/latex/contrib/moderncv/manual/moderncv_userguide.tex +++ b/macros/latex/contrib/moderncv/manual/moderncv_userguide.tex @@ -1,4 +1,4 @@ -%% moderncv_userguide.tex as shipped with 2024-07-08 v2.4.0 modern curriculum vitae and letter document class (moderncv) +%% moderncv_userguide.tex as shipped with 2024-07-18 v2.4.1 modern curriculum vitae and letter document class (moderncv) %% 2021 David Seus, cryptointerest@posteo.de % % This work may be distributed and/or modified under the @@ -9,7 +9,7 @@ \title{% \texttt{moderncv} User Guide\\ - {\small Package v2.4.0}% + {\small Package v2.4.1}% } % Cristina Sambo, \author{% diff --git a/macros/latex/contrib/moderncv/moderncv.cls b/macros/latex/contrib/moderncv/moderncv.cls index 891b83139d..20cedc8b61 100644 --- a/macros/latex/contrib/moderncv/moderncv.cls +++ b/macros/latex/contrib/moderncv/moderncv.cls @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesClass{moderncv}[2024-07-08 v2.4.0 modern curriculum vitae and letter document class] +\ProvidesClass{moderncv}[2024-07-18 v2.4.1 modern curriculum vitae and letter document class] %------------------------------------------------------------------------------- diff --git a/macros/latex/contrib/moderncv/moderncvbodyi.sty b/macros/latex/contrib/moderncv/moderncvbodyi.sty index 75428f6cef..d3db954fef 100644 --- a/macros/latex/contrib/moderncv/moderncvbodyi.sty +++ b/macros/latex/contrib/moderncv/moderncvbodyi.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvbodyi}[2024-07-08 v2.4.0 modern curriculum vitae and letter body variant: 1] +\ProvidesPackage{moderncvbodyi}[2024-07-18 v2.4.1 modern curriculum vitae and letter body variant: 1] %------------------------------------------------------------------------------- diff --git a/macros/latex/contrib/moderncv/moderncvbodyiii.sty b/macros/latex/contrib/moderncv/moderncvbodyiii.sty index 45ed72d87a..37d8d13200 100644 --- a/macros/latex/contrib/moderncv/moderncvbodyiii.sty +++ b/macros/latex/contrib/moderncv/moderncvbodyiii.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvbodyiii}[2024-07-08 v2.4.0 modern curriculum vitae and letter body variant: 3] +\ProvidesPackage{moderncvbodyiii}[2024-07-18 v2.4.1 modern curriculum vitae and letter body variant: 3] % rules type options: "fullrules", "shortrules", "mixedrules" (default) or "norules" \@initializeif{\if@fullrules}\@fullrulesfalse diff --git a/macros/latex/contrib/moderncv/moderncvbodyiv.sty b/macros/latex/contrib/moderncv/moderncvbodyiv.sty index c076a8733a..0d9fe6fb87 100644 --- a/macros/latex/contrib/moderncv/moderncvbodyiv.sty +++ b/macros/latex/contrib/moderncv/moderncvbodyiv.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvbodyiv}[2024-07-08 v2.4.0 modern curriculum vitae and letter body variant: 4] +\ProvidesPackage{moderncvbodyiv}[2024-07-18 v2.4.1 modern curriculum vitae and letter body variant: 4] %------------------------------------------------------------------------------- diff --git a/macros/latex/contrib/moderncv/moderncvbodyv.sty b/macros/latex/contrib/moderncv/moderncvbodyv.sty index 8129ccdd2e..f29e57786b 100644 --- a/macros/latex/contrib/moderncv/moderncvbodyv.sty +++ b/macros/latex/contrib/moderncv/moderncvbodyv.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvbodyv}[2024-07-08 v2.4.0 modern curriculum vitae and letter body variant: 5] +\ProvidesPackage{moderncvbodyv}[2024-07-18 v2.4.1 modern curriculum vitae and letter body variant: 5] %------------------------------------------------------------------------------- diff --git a/macros/latex/contrib/moderncv/moderncvcollection.sty b/macros/latex/contrib/moderncv/moderncvcollection.sty index 94375465f2..bddc9a5177 100644 --- a/macros/latex/contrib/moderncv/moderncvcollection.sty +++ b/macros/latex/contrib/moderncv/moderncvcollection.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcollection}[2024-07-08 v2.4.0 moderncv collections] +\ProvidesPackage{moderncvcollection}[2024-07-18 v2.4.1 moderncv collections] %------------------------------------------------------------------------------- diff --git a/macros/latex/contrib/moderncv/moderncvcolorblack.sty b/macros/latex/contrib/moderncv/moderncvcolorblack.sty index e6a6478229..29ba5bd410 100644 --- a/macros/latex/contrib/moderncv/moderncvcolorblack.sty +++ b/macros/latex/contrib/moderncv/moderncvcolorblack.sty @@ -10,13 +10,13 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcolorblack}[2024-07-08 v2.4.0 modern curriculum vitae and letter color scheme: black] +\ProvidesPackage{moderncvcolorblack}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: black] %------------------------------------------------------------------------------- % color scheme definition %------------------------------------------------------------------------------- -\input{commons/colors} +\input{moderncvcolors.tex} \colorlet{color0}{black}% black \colorlet{color1}{black}% black diff --git a/macros/latex/contrib/moderncv/moderncvcolorblue.sty b/macros/latex/contrib/moderncv/moderncvcolorblue.sty index fcce247668..779b3be956 100644 --- a/macros/latex/contrib/moderncv/moderncvcolorblue.sty +++ b/macros/latex/contrib/moderncv/moderncvcolorblue.sty @@ -10,13 +10,13 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcolorblue}[2024-07-08 v2.4.0 modern curriculum vitae and letter color scheme: blue] +\ProvidesPackage{moderncvcolorblue}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: blue] %------------------------------------------------------------------------------- % color scheme definition %------------------------------------------------------------------------------- -\input{commons/colors} +\input{moderncvcolors.tex} \colorlet{color0}{black}% black \colorlet{color1}{lightblue}% light blue diff --git a/macros/latex/contrib/moderncv/moderncvcolorburgundy.sty b/macros/latex/contrib/moderncv/moderncvcolorburgundy.sty index 35a48a1fa2..aeeccf5ef6 100644 --- a/macros/latex/contrib/moderncv/moderncvcolorburgundy.sty +++ b/macros/latex/contrib/moderncv/moderncvcolorburgundy.sty @@ -10,13 +10,13 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcolorburgundy}[2024-07-08 v2.4.0 modern curriculum vitae and letter color scheme: burgundy] +\ProvidesPackage{moderncvcolorburgundy}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: burgundy] %------------------------------------------------------------------------------- % color scheme definition %------------------------------------------------------------------------------- -\input{commons/colors} +\input{moderncvcolors.tex} \colorlet{color0}{black}% black \colorlet{color1}{burgundy}% burgundy diff --git a/macros/latex/contrib/moderncv/moderncvcolorgreen.sty b/macros/latex/contrib/moderncv/moderncvcolorgreen.sty index fe7f1c3b55..03c026ea07 100644 --- a/macros/latex/contrib/moderncv/moderncvcolorgreen.sty +++ b/macros/latex/contrib/moderncv/moderncvcolorgreen.sty @@ -10,13 +10,13 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcolorgreen}[2024-07-08 v2.4.0 modern curriculum vitae and letter color scheme: green] +\ProvidesPackage{moderncvcolorgreen}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: green] %------------------------------------------------------------------------------- % color scheme definition %------------------------------------------------------------------------------- -\input{commons/colors} +\input{moderncvcolors.tex} \colorlet{color0}{black}% black \colorlet{color1}{green}% green diff --git a/macros/latex/contrib/moderncv/moderncvcolorgrey.sty b/macros/latex/contrib/moderncv/moderncvcolorgrey.sty index 8e68a487d9..6bd9184c0e 100644 --- a/macros/latex/contrib/moderncv/moderncvcolorgrey.sty +++ b/macros/latex/contrib/moderncv/moderncvcolorgrey.sty @@ -10,13 +10,13 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcolorgrey}[2024-07-08 v2.4.0 modern curriculum vitae and letter color scheme: grey] +\ProvidesPackage{moderncvcolorgrey}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: grey] %------------------------------------------------------------------------------- % color scheme definition %------------------------------------------------------------------------------- -\input{commons/colors} +\input{moderncvcolors.tex} \colorlet{color0}{black}% black \colorlet{color1}{darkgrey}% dark grey diff --git a/macros/latex/contrib/moderncv/moderncvcolororange.sty b/macros/latex/contrib/moderncv/moderncvcolororange.sty index 0fb7abed8e..c4f612ab6d 100644 --- a/macros/latex/contrib/moderncv/moderncvcolororange.sty +++ b/macros/latex/contrib/moderncv/moderncvcolororange.sty @@ -10,13 +10,13 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcolororange}[2024-07-08 v2.4.0 modern curriculum vitae and letter color scheme: orange] +\ProvidesPackage{moderncvcolororange}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: orange] %------------------------------------------------------------------------------- % color scheme definition %------------------------------------------------------------------------------- -\input{commons/colors} +\input{moderncvcolors.tex} \colorlet{color0}{black}% black \colorlet{color1}{orange}% orange diff --git a/macros/latex/contrib/moderncv/moderncvcolorpurple.sty b/macros/latex/contrib/moderncv/moderncvcolorpurple.sty index 750d96f203..d0110526f1 100644 --- a/macros/latex/contrib/moderncv/moderncvcolorpurple.sty +++ b/macros/latex/contrib/moderncv/moderncvcolorpurple.sty @@ -10,13 +10,13 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcolorpurple}[2024-07-08 v2.4.0 modern curriculum vitae and letter color scheme: purple] +\ProvidesPackage{moderncvcolorpurple}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: purple] %------------------------------------------------------------------------------- % color scheme definition %------------------------------------------------------------------------------- -\input{commons/colors} +\input{moderncvcolors.tex} \colorlet{color0}{black}% black \colorlet{color1}{purple}% purple diff --git a/macros/latex/contrib/moderncv/moderncvcolorred.sty b/macros/latex/contrib/moderncv/moderncvcolorred.sty index 915265f679..bc51d4adf5 100644 --- a/macros/latex/contrib/moderncv/moderncvcolorred.sty +++ b/macros/latex/contrib/moderncv/moderncvcolorred.sty @@ -10,13 +10,13 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcolorred}[2024-07-08 v2.4.0 modern curriculum vitae and letter color scheme: red] +\ProvidesPackage{moderncvcolorred}[2024-07-18 v2.4.1 modern curriculum vitae and letter color scheme: red] %------------------------------------------------------------------------------- % color scheme definition %------------------------------------------------------------------------------- -\input{commons/colors} +\input{moderncvcolors.tex} \colorlet{color0}{black}% black \colorlet{color1}{red}% red diff --git a/macros/latex/contrib/moderncv/commons/colors.tex b/macros/latex/contrib/moderncv/moderncvcolors.tex index 7f840ff059..7f840ff059 100644 --- a/macros/latex/contrib/moderncv/commons/colors.tex +++ b/macros/latex/contrib/moderncv/moderncvcolors.tex diff --git a/macros/latex/contrib/moderncv/moderncvcompatibility.sty b/macros/latex/contrib/moderncv/moderncvcompatibility.sty index e70fc45431..e8e0af713f 100644 --- a/macros/latex/contrib/moderncv/moderncvcompatibility.sty +++ b/macros/latex/contrib/moderncv/moderncvcompatibility.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcompatibility}[2024-07-08 v2.4.0 modern curriculum vitae and letter compatibility patches] +\ProvidesPackage{moderncvcompatibility}[2024-07-18 v2.4.1 modern curriculum vitae and letter compatibility patches] %------------------------------------------------------------------------------- diff --git a/macros/latex/contrib/moderncv/moderncvdebugtools.sty b/macros/latex/contrib/moderncv/moderncvdebugtools.sty index 915c8cc03d..c19651ab05 100644 --- a/macros/latex/contrib/moderncv/moderncvdebugtools.sty +++ b/macros/latex/contrib/moderncv/moderncvdebugtools.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvdebugtools}[2024-07-08 v2.4.0 modern curriculum vitae and letter debug tools] +\ProvidesPackage{moderncvdebugtools}[2024-07-18 v2.4.1 modern curriculum vitae and letter debug tools] %------------------------------------------------------------------------------- diff --git a/macros/latex/contrib/moderncv/moderncvfooti.sty b/macros/latex/contrib/moderncv/moderncvfooti.sty index 51fcdf98d4..f1de51a44e 100644 --- a/macros/latex/contrib/moderncv/moderncvfooti.sty +++ b/macros/latex/contrib/moderncv/moderncvfooti.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvfooti}[2024-07-08 v2.4.0 modern curriculum vitae and letter footer variant: 1] +\ProvidesPackage{moderncvfooti}[2024-07-18 v2.4.1 modern curriculum vitae and letter footer variant: 1] %------------------------------------------------------------------------------- diff --git a/macros/latex/contrib/moderncv/moderncvheadi.sty b/macros/latex/contrib/moderncv/moderncvheadi.sty index 4a7c163259..9dfb35a06c 100644 --- a/macros/latex/contrib/moderncv/moderncvheadi.sty +++ b/macros/latex/contrib/moderncv/moderncvheadi.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvheadi}[2024-07-08 v2.4.0 modern curriculum vitae and letter header variant: 1] +\ProvidesPackage{moderncvheadi}[2024-07-18 v2.4.1 modern curriculum vitae and letter header variant: 1] % details options: "details" (default) or "nodetails" \@initializeif{\if@details}\@detailsfalse diff --git a/macros/latex/contrib/moderncv/moderncvheadii.sty b/macros/latex/contrib/moderncv/moderncvheadii.sty index 50d2060ded..a36c8e1af4 100644 --- a/macros/latex/contrib/moderncv/moderncvheadii.sty +++ b/macros/latex/contrib/moderncv/moderncvheadii.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvheadii}[2024-07-08 v2.4.0 modern curriculum vitae and letter header variant: 2] +\ProvidesPackage{moderncvheadii}[2024-07-18 v2.4.1 modern curriculum vitae and letter header variant: 2] % details options: "details" or "nodetails" (default) \@initializeif{\if@details}\@detailsfalse diff --git a/macros/latex/contrib/moderncv/moderncvheadiii.sty b/macros/latex/contrib/moderncv/moderncvheadiii.sty index 6e660159c6..51a3aa2444 100644 --- a/macros/latex/contrib/moderncv/moderncvheadiii.sty +++ b/macros/latex/contrib/moderncv/moderncvheadiii.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvheadiii}[2024-07-08 v2.4.0 modern curriculum vitae and letter header variant: 3] +\ProvidesPackage{moderncvheadiii}[2024-07-18 v2.4.1 modern curriculum vitae and letter header variant: 3] % details options: "details" (default) or "nodetails" \@initializeif{\if@details}\@detailsfalse diff --git a/macros/latex/contrib/moderncv/moderncvheadiv.sty b/macros/latex/contrib/moderncv/moderncvheadiv.sty index 0fa81dc315..5a088fdb73 100644 --- a/macros/latex/contrib/moderncv/moderncvheadiv.sty +++ b/macros/latex/contrib/moderncv/moderncvheadiv.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvheadiv}[2024-07-08 v2.4.0 modern curriculum vitae and letter header variant: 4] +\ProvidesPackage{moderncvheadiv}[2024-07-18 v2.4.1 modern curriculum vitae and letter header variant: 4] % details options: "details" (default) or "nodetails" \@initializeif{\if@details}\@detailsfalse diff --git a/macros/latex/contrib/moderncv/moderncvheadv.sty b/macros/latex/contrib/moderncv/moderncvheadv.sty index b783e10286..e92233ef34 100644 --- a/macros/latex/contrib/moderncv/moderncvheadv.sty +++ b/macros/latex/contrib/moderncv/moderncvheadv.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvheadv}[2024-07-08 v2.4.0 modern curriculum vitae and letter header variant: 5] +\ProvidesPackage{moderncvheadv}[2024-07-18 v2.4.1 modern curriculum vitae and letter header variant: 5] % details options: "details" (default) or "nodetails" \@initializeif{\if@details}\@detailsfalse diff --git a/macros/latex/contrib/moderncv/moderncvheadvi.sty b/macros/latex/contrib/moderncv/moderncvheadvi.sty index 819ba7fded..ecd6dbb041 100644 --- a/macros/latex/contrib/moderncv/moderncvheadvi.sty +++ b/macros/latex/contrib/moderncv/moderncvheadvi.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvheadvi}[2024-07-08 v2.4.0 modern curriculum vitae and letter header: 6] +\ProvidesPackage{moderncvheadvi}[2024-07-18 v2.4.1 modern curriculum vitae and letter header: 6] % details options: "details" (default) or "nodetails" \@initializeif{\if@details}\@detailsfalse diff --git a/macros/latex/contrib/moderncv/moderncviconsacademic.sty b/macros/latex/contrib/moderncv/moderncviconsacademic.sty index 4b586aa8b7..cf7bbbb536 100644 --- a/macros/latex/contrib/moderncv/moderncviconsacademic.sty +++ b/macros/latex/contrib/moderncv/moderncviconsacademic.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncviconsacademic}[2024-07-08 v2.4.0 modern curriculum vitae icons: academicons] +\ProvidesPackage{moderncviconsacademic}[2024-07-18 v2.4.1 modern curriculum vitae icons: academicons] %------------------------------------------------------------------------------- @@ -23,7 +23,7 @@ %------------------------------------------------------------------------------- % set colors %------------------------------------------------------------------------------- -\input{commons/colors} +\input{moderncvcolors.tex} \providecolor{orcid}{named}{default-socialicon-color} \providecolor{researchgate}{named}{default-socialicon-color} diff --git a/macros/latex/contrib/moderncv/moderncviconsawesome.sty b/macros/latex/contrib/moderncv/moderncviconsawesome.sty index c81173d6f0..a51729faa6 100644 --- a/macros/latex/contrib/moderncv/moderncviconsawesome.sty +++ b/macros/latex/contrib/moderncv/moderncviconsawesome.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncviconsawesome}[2024-07-08 v2.4.0 modern curriculum vitae icons: awesome] +\ProvidesPackage{moderncviconsawesome}[2024-07-18 v2.4.1 modern curriculum vitae icons: awesome] %------------------------------------------------------------------------------- % required packages @@ -22,7 +22,7 @@ %------------------------------------------------------------------------------- % set colors %------------------------------------------------------------------------------- -\input{commons/colors} +\input{moderncvcolors.tex} \providecolor{address}{named}{default-socialicon-color} \providecolor{mobilephone}{named}{default-socialicon-color} diff --git a/macros/latex/contrib/moderncv/moderncviconsletters.sty b/macros/latex/contrib/moderncv/moderncviconsletters.sty index 3d9504184a..2dc6386d51 100644 --- a/macros/latex/contrib/moderncv/moderncviconsletters.sty +++ b/macros/latex/contrib/moderncv/moderncviconsletters.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncviconsletters}[2024-07-08 v2.4.0 modern curriculum vitae icons: letter] +\ProvidesPackage{moderncviconsletters}[2024-07-18 v2.4.1 modern curriculum vitae icons: letter] %------------------------------------------------------------------------------- % symbols definition diff --git a/macros/latex/contrib/moderncv/moderncviconsmarvosym.sty b/macros/latex/contrib/moderncv/moderncviconsmarvosym.sty index 1282ae4348..2dbc71011e 100644 --- a/macros/latex/contrib/moderncv/moderncviconsmarvosym.sty +++ b/macros/latex/contrib/moderncv/moderncviconsmarvosym.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncviconsmarvosym}[2024-07-08 v2.4.0 modern curriculum vitae icons: marvosym] +\ProvidesPackage{moderncviconsmarvosym}[2024-07-18 v2.4.1 modern curriculum vitae icons: marvosym] %------------------------------------------------------------------------------- % all symbols described in moderncv.cls diff --git a/macros/latex/contrib/moderncv/moderncviconstikz.sty b/macros/latex/contrib/moderncv/moderncviconstikz.sty index f328618e91..e1a0248924 100644 --- a/macros/latex/contrib/moderncv/moderncviconstikz.sty +++ b/macros/latex/contrib/moderncv/moderncviconstikz.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncviconstikz}[2024-07-08 v2.4.0 modern curriculum vitae and letter icons: tickz] +\ProvidesPackage{moderncviconstikz}[2024-07-18 v2.4.1 modern curriculum vitae and letter icons: tickz] %------------------------------------------------------------------------------- diff --git a/macros/latex/contrib/moderncv/moderncvskillmatrix.sty b/macros/latex/contrib/moderncv/moderncvskillmatrix.sty index c689692343..9f03be117a 100644 --- a/macros/latex/contrib/moderncv/moderncvskillmatrix.sty +++ b/macros/latex/contrib/moderncv/moderncvskillmatrix.sty @@ -203,7 +203,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvskillmatrix}[2024-07-08 v2.4.0 modern curriculum vitae and letter skill matrix] +\ProvidesPackage{moderncvskillmatrix}[2024-07-18 v2.4.1 modern curriculum vitae and letter skill matrix] % The definitions need to be adjusted depending on which moderncvbody<i-v>.sty style is usde. % body type options: "moderncvbodyi" (default), "moderncvbodyii", "moderncvbodyiii", "moderncvbodyiv" or "moderncvbodyv" diff --git a/macros/latex/contrib/moderncv/moderncvstylebanking.sty b/macros/latex/contrib/moderncv/moderncvstylebanking.sty index 08989063b3..6398480ef9 100644 --- a/macros/latex/contrib/moderncv/moderncvstylebanking.sty +++ b/macros/latex/contrib/moderncv/moderncvstylebanking.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvstylebanking}[2024-07-08 v2.4.0 modern curriculum vitae and letter style scheme: banking] +\ProvidesPackage{moderncvstylebanking}[2024-07-18 v2.4.1 modern curriculum vitae and letter style scheme: banking] % body rules type options: "fullrules", "shortrules", "mixedrules" (default) or "norules" \@initializecommand{\moderncvstylebodyoptions}{} diff --git a/macros/latex/contrib/moderncv/moderncvstylecasual.sty b/macros/latex/contrib/moderncv/moderncvstylecasual.sty index 31753c26bb..1192c8911c 100644 --- a/macros/latex/contrib/moderncv/moderncvstylecasual.sty +++ b/macros/latex/contrib/moderncv/moderncvstylecasual.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvstylecasual}[2024-07-08 v2.4.0 modern curriculum vitae and letter style scheme: casual] +\ProvidesPackage{moderncvstylecasual}[2024-07-18 v2.4.1 modern curriculum vitae and letter style scheme: casual] % head section alignment options: "left" (default) or "right" \@initializecommand{\moderncvstyleheadoptions}{} diff --git a/macros/latex/contrib/moderncv/moderncvstyleclassic.sty b/macros/latex/contrib/moderncv/moderncvstyleclassic.sty index f3193eaf2e..07950bcfa5 100644 --- a/macros/latex/contrib/moderncv/moderncvstyleclassic.sty +++ b/macros/latex/contrib/moderncv/moderncvstyleclassic.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvstyleclassic}[2024-07-08 v2.4.0 modern curriculum vitae and letter style scheme: classic] +\ProvidesPackage{moderncvstyleclassic}[2024-07-18 v2.4.1 modern curriculum vitae and letter style scheme: classic] % head section alignment options: "left" (default) or "right" \@initializecommand{\moderncvstyleheadoptions}{} diff --git a/macros/latex/contrib/moderncv/moderncvstyleempty.sty b/macros/latex/contrib/moderncv/moderncvstyleempty.sty index 2c8fc033a5..8dcce13aa5 100644 --- a/macros/latex/contrib/moderncv/moderncvstyleempty.sty +++ b/macros/latex/contrib/moderncv/moderncvstyleempty.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvstyleempty}[2024-07-08 v2.4.0 modern curriculum vitae scheme: empty] +\ProvidesPackage{moderncvstyleempty}[2024-07-18 v2.4.1 modern curriculum vitae scheme: empty] %------------------------------------------------------------------------------- % required packages diff --git a/macros/latex/contrib/moderncv/moderncvstylefancy.sty b/macros/latex/contrib/moderncv/moderncvstylefancy.sty index 838532bf40..1ad8d8732f 100644 --- a/macros/latex/contrib/moderncv/moderncvstylefancy.sty +++ b/macros/latex/contrib/moderncv/moderncvstylefancy.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvstylefancy}[2024-07-08 v2.4.0 modern curriculum vitae and letter style scheme: fancy] +\ProvidesPackage{moderncvstylefancy}[2024-07-18 v2.4.1 modern curriculum vitae and letter style scheme: fancy] % headoptions \@initializecommand{\moderncvstyleheadoptions}{} diff --git a/macros/latex/contrib/moderncv/moderncvstyleoldstyle.sty b/macros/latex/contrib/moderncv/moderncvstyleoldstyle.sty index e7d00b258f..37de3c57b3 100644 --- a/macros/latex/contrib/moderncv/moderncvstyleoldstyle.sty +++ b/macros/latex/contrib/moderncv/moderncvstyleoldstyle.sty @@ -10,7 +10,7 @@ % identification %------------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvstyleoldstyle}[2024-07-08 v2.4.0 modern curriculum vitae and letter style scheme: oldstyle] +\ProvidesPackage{moderncvstyleoldstyle}[2024-07-18 v2.4.1 modern curriculum vitae and letter style scheme: oldstyle] % headoptions \@initializecommand{\moderncvstyleheadoptions}{} diff --git a/macros/latex/contrib/oberdiek/README.md b/macros/latex/contrib/oberdiek/README.md index 4a2250cf37..b455eff334 100644 --- a/macros/latex/contrib/oberdiek/README.md +++ b/macros/latex/contrib/oberdiek/README.md @@ -1,6 +1,6 @@ # Oberdiek bundle -Version: 2023-12-04 +Version: 2024-07-26 This file describes the directory CTAN:macros/latex/contrib/oberdiek/ @@ -11,7 +11,7 @@ It contains several packages: ## Copyright (C) * 2007, 2009-2011 Heiko Oberdiek -* 2016-2023 Oberdiek Package Support Group +* 2016-2024 Oberdiek Package Support Group ## License LATEX Project Public License, version 1.3c or later. @@ -48,7 +48,6 @@ Other files in the CTAN directory: * flags: setting and clearing flags in bit fields and converting the bit field into a decimal number; * holtxdoc: extra documentation macros; * hypbmsec: bookmarks in sectioning commands; -* hypcap: anjusting anchors of captions; * hypgotoe: experimental package for links to embedded files; * hyphsubst: substitute hyphenation patterns; * ifdraft: switch for option draft; @@ -66,6 +65,5 @@ Other files in the CTAN directory: * stampinclude: selects the files for \include by inspecting the timestamp of the .aux file(s); * tabularht: tabulars with height specification; * tabularkv: key value interface for tabular parameters; -* telprint: print German telephone numbers; * thepdfnumber: canonical numbers for use in PDF files and elsewhere; * twoopt: commands with two optional arguments; diff --git a/macros/latex/contrib/oberdiek/aliascnt.dtx b/macros/latex/contrib/oberdiek/aliascnt.dtx index 47bfec1ee2..7010eb64e1 100644 --- a/macros/latex/contrib/oberdiek/aliascnt.dtx +++ b/macros/latex/contrib/oberdiek/aliascnt.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex aliascnt.dtx % makeindex -s gind.ist aliascnt.idx % pdflatex aliascnt.dtx @@ -308,7 +308,7 @@ and the derived files % Therefore we must ensure that manipulations to the clear list % are done with the clear list macro of a real counter. % \begin{macro}{\AC@findrootcnt} -% \cs{AC@findrootcnt} walks throught the aliasing relations +% \cs{AC@findrootcnt} walks through the aliasing relations % to find the base counter. % \begin{macrocode} \newcommand*{\AC@findrootcnt}[1]{% diff --git a/macros/latex/contrib/oberdiek/aliascnt.pdf b/macros/latex/contrib/oberdiek/aliascnt.pdf Binary files differindex 5978332f27..cac6636ab9 100644 --- a/macros/latex/contrib/oberdiek/aliascnt.pdf +++ b/macros/latex/contrib/oberdiek/aliascnt.pdf diff --git a/macros/latex/contrib/oberdiek/bmpsize.dtx b/macros/latex/contrib/oberdiek/bmpsize.dtx index 0eec647c99..bdcf6004d0 100644 --- a/macros/latex/contrib/oberdiek/bmpsize.dtx +++ b/macros/latex/contrib/oberdiek/bmpsize.dtx @@ -54,7 +54,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex bmpsize.dtx % makeindex -s gind.ist bmpsize.idx % pdflatex bmpsize.dtx @@ -339,7 +339,7 @@ and the derived files % % A parser sets the switch \cs{ifbmpsize@ok} to true, if it % could successfully parse the image file. -% The width and height are returnd in \cs{bmpsize@width} and +% The width and height are returned in \cs{bmpsize@width} and % \cs{bmpsize@height}. If information about density is available, % it is used to calculate width and height of the image, otherwise % the values given by option \xoption{defaultresolution} is used. diff --git a/macros/latex/contrib/oberdiek/bmpsize.pdf b/macros/latex/contrib/oberdiek/bmpsize.pdf Binary files differindex ecd47adb93..b376afc96a 100644 --- a/macros/latex/contrib/oberdiek/bmpsize.pdf +++ b/macros/latex/contrib/oberdiek/bmpsize.pdf diff --git a/macros/latex/contrib/oberdiek/centernot.dtx b/macros/latex/contrib/oberdiek/centernot.dtx index dd990a3319..aa2cff5f0d 100644 --- a/macros/latex/contrib/oberdiek/centernot.dtx +++ b/macros/latex/contrib/oberdiek/centernot.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex centernot.dtx % makeindex -s gind.ist centernot.idx % pdflatex centernot.dtx diff --git a/macros/latex/contrib/oberdiek/centernot.pdf b/macros/latex/contrib/oberdiek/centernot.pdf Binary files differindex 344a245433..a0984732ea 100644 --- a/macros/latex/contrib/oberdiek/centernot.pdf +++ b/macros/latex/contrib/oberdiek/centernot.pdf diff --git a/macros/latex/contrib/oberdiek/chemarr.dtx b/macros/latex/contrib/oberdiek/chemarr.dtx index 78e1a3cbeb..24989ed9db 100644 --- a/macros/latex/contrib/oberdiek/chemarr.dtx +++ b/macros/latex/contrib/oberdiek/chemarr.dtx @@ -53,7 +53,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex chemarr.dtx % makeindex -s gind.ist chemarr.idx % pdflatex chemarr.dtx diff --git a/macros/latex/contrib/oberdiek/chemarr.pdf b/macros/latex/contrib/oberdiek/chemarr.pdf Binary files differindex c745f15582..7a39e48a3e 100644 --- a/macros/latex/contrib/oberdiek/chemarr.pdf +++ b/macros/latex/contrib/oberdiek/chemarr.pdf diff --git a/macros/latex/contrib/oberdiek/classlist.dtx b/macros/latex/contrib/oberdiek/classlist.dtx index 8b45464521..370fc269d0 100644 --- a/macros/latex/contrib/oberdiek/classlist.dtx +++ b/macros/latex/contrib/oberdiek/classlist.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex classlist.dtx % makeindex -s gind.ist classlist.idx % pdflatex classlist.dtx @@ -233,7 +233,7 @@ and the derived files % configured by % \item[\cs{PrintClassListTitle}] for the title and % \item[\cs{PrintClassListEntry}] for formatting the entries. -% See the implemenation how to use these. +% See the implementation for how to use these. % \end{description} % % \StopEventually{ diff --git a/macros/latex/contrib/oberdiek/classlist.pdf b/macros/latex/contrib/oberdiek/classlist.pdf Binary files differindex 40ef460d94..365627fee6 100644 --- a/macros/latex/contrib/oberdiek/classlist.pdf +++ b/macros/latex/contrib/oberdiek/classlist.pdf diff --git a/macros/latex/contrib/oberdiek/colonequals.dtx b/macros/latex/contrib/oberdiek/colonequals.dtx index aeae542c39..007a42cbe5 100644 --- a/macros/latex/contrib/oberdiek/colonequals.dtx +++ b/macros/latex/contrib/oberdiek/colonequals.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex colonequals.dtx % makeindex -s gind.ist colonequals.idx % pdflatex colonequals.dtx diff --git a/macros/latex/contrib/oberdiek/colonequals.pdf b/macros/latex/contrib/oberdiek/colonequals.pdf Binary files differindex 1b4e949c6b..3446b59539 100644 --- a/macros/latex/contrib/oberdiek/colonequals.pdf +++ b/macros/latex/contrib/oberdiek/colonequals.pdf diff --git a/macros/latex/contrib/oberdiek/dvipscol.dtx b/macros/latex/contrib/oberdiek/dvipscol.dtx index 0141ae2a94..335196bf91 100644 --- a/macros/latex/contrib/oberdiek/dvipscol.dtx +++ b/macros/latex/contrib/oberdiek/dvipscol.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex dvipscol.dtx % makeindex -s gind.ist dvipscol.idx % pdflatex dvipscol.dtx diff --git a/macros/latex/contrib/oberdiek/dvipscol.pdf b/macros/latex/contrib/oberdiek/dvipscol.pdf Binary files differindex 21243da3b1..3ff66c8e89 100644 --- a/macros/latex/contrib/oberdiek/dvipscol.pdf +++ b/macros/latex/contrib/oberdiek/dvipscol.pdf diff --git a/macros/latex/contrib/oberdiek/engord.dtx b/macros/latex/contrib/oberdiek/engord.dtx index 6c75953200..a0ba888a1a 100644 --- a/macros/latex/contrib/oberdiek/engord.dtx +++ b/macros/latex/contrib/oberdiek/engord.dtx @@ -55,7 +55,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex engord.dtx % makeindex -s gind.ist engord.idx % pdflatex engord.dtx diff --git a/macros/latex/contrib/oberdiek/engord.pdf b/macros/latex/contrib/oberdiek/engord.pdf Binary files differindex 0bd217efba..49c876e5b6 100644 --- a/macros/latex/contrib/oberdiek/engord.pdf +++ b/macros/latex/contrib/oberdiek/engord.pdf diff --git a/macros/latex/contrib/oberdiek/enparen.dtx b/macros/latex/contrib/oberdiek/enparen.dtx index 773ebc861c..af503d79dc 100644 --- a/macros/latex/contrib/oberdiek/enparen.dtx +++ b/macros/latex/contrib/oberdiek/enparen.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex enparen.dtx % makeindex -s gind.ist enparen.idx % pdflatex enparen.dtx @@ -335,12 +335,12 @@ and the derived files % \subsection{Notes} % % \begin{description} -% \item[Implicite kerning:] -% Unexpandable stuff might affect the implicite kerning. +% \item[Implicit kerning:] +% Unexpandable stuff might affect the implicit kerning. % The package cannot avoid this, because it need to define -% and redefine macros at the occurence of each symbol. +% and redefine macros at the occurrence of each symbol. % This is done before the opening and after the closing -% symbol, thus that the implicite kerning inside +% symbol, thus that the implicit kerning inside % is not affected. % \end{description} % diff --git a/macros/latex/contrib/oberdiek/enparen.pdf b/macros/latex/contrib/oberdiek/enparen.pdf Binary files differindex d4de5125ba..284b88c5c1 100644 --- a/macros/latex/contrib/oberdiek/enparen.pdf +++ b/macros/latex/contrib/oberdiek/enparen.pdf diff --git a/macros/latex/contrib/oberdiek/eolgrab.dtx b/macros/latex/contrib/oberdiek/eolgrab.dtx index d27e99d34e..87f0aceaa4 100644 --- a/macros/latex/contrib/oberdiek/eolgrab.dtx +++ b/macros/latex/contrib/oberdiek/eolgrab.dtx @@ -58,7 +58,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex eolgrab.dtx % makeindex -s gind.ist eolgrab.idx % pdflatex eolgrab.dtx diff --git a/macros/latex/contrib/oberdiek/eolgrab.pdf b/macros/latex/contrib/oberdiek/eolgrab.pdf Binary files differindex 23c097b571..24a22d462c 100644 --- a/macros/latex/contrib/oberdiek/eolgrab.pdf +++ b/macros/latex/contrib/oberdiek/eolgrab.pdf diff --git a/macros/latex/contrib/oberdiek/fibnum.dtx b/macros/latex/contrib/oberdiek/fibnum.dtx index 9c3f8f7986..de66a37710 100644 --- a/macros/latex/contrib/oberdiek/fibnum.dtx +++ b/macros/latex/contrib/oberdiek/fibnum.dtx @@ -56,7 +56,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex fibnum.dtx % bibtex fibnum.aux % makeindex -s gind.ist fibnum.idx diff --git a/macros/latex/contrib/oberdiek/fibnum.pdf b/macros/latex/contrib/oberdiek/fibnum.pdf Binary files differindex 2d2510854e..7a143ac3b6 100644 --- a/macros/latex/contrib/oberdiek/fibnum.pdf +++ b/macros/latex/contrib/oberdiek/fibnum.pdf diff --git a/macros/latex/contrib/oberdiek/flags.dtx b/macros/latex/contrib/oberdiek/flags.dtx index 6a2d05c7b4..8834113617 100644 --- a/macros/latex/contrib/oberdiek/flags.dtx +++ b/macros/latex/contrib/oberdiek/flags.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex flags.dtx % makeindex -s gind.ist flags.idx % pdflatex flags.dtx diff --git a/macros/latex/contrib/oberdiek/flags.pdf b/macros/latex/contrib/oberdiek/flags.pdf Binary files differindex f0c8b76d54..17c5868612 100644 --- a/macros/latex/contrib/oberdiek/flags.pdf +++ b/macros/latex/contrib/oberdiek/flags.pdf diff --git a/macros/latex/contrib/oberdiek/holtxdoc.dtx b/macros/latex/contrib/oberdiek/holtxdoc.dtx index 9ac40aa5ae..b9ba295cfa 100644 --- a/macros/latex/contrib/oberdiek/holtxdoc.dtx +++ b/macros/latex/contrib/oberdiek/holtxdoc.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex holtxdoc.dtx % makeindex -s gind.ist holtxdoc.idx % pdflatex holtxdoc.dtx diff --git a/macros/latex/contrib/oberdiek/holtxdoc.pdf b/macros/latex/contrib/oberdiek/holtxdoc.pdf Binary files differindex 67d630bd54..f2825ebf65 100644 --- a/macros/latex/contrib/oberdiek/holtxdoc.pdf +++ b/macros/latex/contrib/oberdiek/holtxdoc.pdf diff --git a/macros/latex/contrib/oberdiek/hypbmsec.dtx b/macros/latex/contrib/oberdiek/hypbmsec.dtx index dd26b08d2b..2b5781775c 100644 --- a/macros/latex/contrib/oberdiek/hypbmsec.dtx +++ b/macros/latex/contrib/oberdiek/hypbmsec.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex hypbmsec.dtx % makeindex -s gind.ist hypbmsec.idx % pdflatex hypbmsec.dtx @@ -260,7 +260,7 @@ and the derived files % \begin{itemize} % \item An additional second optional argument in square brackets. % \item An additional optional argument in parentheses (in -% assoziation with a pdf string that is internally surrounded +% association with a pdf string that is internally surrounded % by parentheses, too). % \end{itemize} % Because \Package{\filename} stores the original meaning of the @@ -375,7 +375,7 @@ and the derived files [2016/05/16 v2.5 Bookmarks in sectioning commands (HO)] % \end{macrocode} % -% Because of redifining the sectioning commands, it is dangerous +% Because of redefining the sectioning commands, it is dangerous % to reload the package several times. % \begin{macrocode} \@ifundefined{hbs@do}{}{% @@ -554,7 +554,7 @@ and the derived files % \end{macrocode} % % Other packages are allowed to redefine the sectioning commands, -% if they does not change the syntax. Therefore the redefinitons +% if they does not change the syntax. Therefore the redefinitions % of this package should be done after the other packages. % \begin{macrocode} \let\hbs@part \part diff --git a/macros/latex/contrib/oberdiek/hypbmsec.pdf b/macros/latex/contrib/oberdiek/hypbmsec.pdf Binary files differindex 45e3ce42c2..9e75d5e8fe 100644 --- a/macros/latex/contrib/oberdiek/hypbmsec.pdf +++ b/macros/latex/contrib/oberdiek/hypbmsec.pdf diff --git a/macros/latex/contrib/oberdiek/hypgotoe.dtx b/macros/latex/contrib/oberdiek/hypgotoe.dtx index 3f6af63a3e..7a4c55e451 100644 --- a/macros/latex/contrib/oberdiek/hypgotoe.dtx +++ b/macros/latex/contrib/oberdiek/hypgotoe.dtx @@ -53,7 +53,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex hypgotoe.dtx % makeindex -s gind.ist hypgotoe.idx % pdflatex hypgotoe.dtx @@ -195,7 +195,7 @@ and the derived files % \item % Currently only embedded files and named destinations are supported. % \item -% Missing are support for destination arrays and attachted files. +% Missing are support for destination arrays and attached files. % \item % Special characters aren't supported either. % \end{itemize} diff --git a/macros/latex/contrib/oberdiek/hypgotoe.pdf b/macros/latex/contrib/oberdiek/hypgotoe.pdf Binary files differindex 98d7d1dd4b..a6203e57a1 100644 --- a/macros/latex/contrib/oberdiek/hypgotoe.pdf +++ b/macros/latex/contrib/oberdiek/hypgotoe.pdf diff --git a/macros/latex/contrib/oberdiek/hyphsubst.dtx b/macros/latex/contrib/oberdiek/hyphsubst.dtx index e0fd44bf12..996257b0d4 100644 --- a/macros/latex/contrib/oberdiek/hyphsubst.dtx +++ b/macros/latex/contrib/oberdiek/hyphsubst.dtx @@ -56,7 +56,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex hyphsubst.dtx % makeindex -s gind.ist hyphsubst.idx % pdflatex hyphsubst.dtx diff --git a/macros/latex/contrib/oberdiek/hyphsubst.pdf b/macros/latex/contrib/oberdiek/hyphsubst.pdf Binary files differindex 4c390bfdd9..0d559684d1 100644 --- a/macros/latex/contrib/oberdiek/hyphsubst.pdf +++ b/macros/latex/contrib/oberdiek/hyphsubst.pdf diff --git a/macros/latex/contrib/oberdiek/ifdraft.dtx b/macros/latex/contrib/oberdiek/ifdraft.dtx index 0b4918a6d0..7b69505449 100644 --- a/macros/latex/contrib/oberdiek/ifdraft.dtx +++ b/macros/latex/contrib/oberdiek/ifdraft.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex ifdraft.dtx % makeindex -s gind.ist ifdraft.idx % pdflatex ifdraft.dtx diff --git a/macros/latex/contrib/oberdiek/ifdraft.pdf b/macros/latex/contrib/oberdiek/ifdraft.pdf Binary files differindex 35e257d875..7e6a251092 100644 --- a/macros/latex/contrib/oberdiek/ifdraft.pdf +++ b/macros/latex/contrib/oberdiek/ifdraft.pdf diff --git a/macros/latex/contrib/oberdiek/iflang.dtx b/macros/latex/contrib/oberdiek/iflang.dtx index fa784b7d45..9eebbd0a8c 100644 --- a/macros/latex/contrib/oberdiek/iflang.dtx +++ b/macros/latex/contrib/oberdiek/iflang.dtx @@ -57,7 +57,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex iflang.dtx % makeindex -s gind.ist iflang.idx % pdflatex iflang.dtx @@ -200,7 +200,7 @@ and the derived files % Package \xpackage{babel} defines \cs{iflanguagename}. As first % argument it takes a language name and executes the second or % third argument depending on the current language. This -% language test is based on hypenation patterns. However, it +% language test is based on hyphenation patterns. However, it % is possible that different languages or dialects share the % same patterns. In such cases \cs{iflanguagename} fails. % @@ -211,7 +211,7 @@ and the derived files % % \begin{declcs}{IfLanguageName} \M{lang} \M{then} \M{else} % \end{declcs} -% Makro \cs{IfLanguageName} compares language \meta{lang} with +% Macro \cs{IfLanguageName} compares language \meta{lang} with % the current setting of macro \cs{languagename}. If both % contains the same name then the \meta{then} part is called, % otherwise the \meta{else} part. @@ -562,7 +562,7 @@ and the derived files % at the conference Bacho\TeX~2005: % \url{http://www.gust.org.pl/projects/pearls/2005p/david-kastrup/bachotex2005-david-kastrup-pearl1.pdf} % -% The orignal code allows macros inside the second string. +% The original code allows macros inside the second string. % Because also \cs{languagename} might consists of further % macros, we need a variant that allows macros in the first % string, too. diff --git a/macros/latex/contrib/oberdiek/iflang.pdf b/macros/latex/contrib/oberdiek/iflang.pdf Binary files differindex 98cb0644a3..c1941fa6ee 100644 --- a/macros/latex/contrib/oberdiek/iflang.pdf +++ b/macros/latex/contrib/oberdiek/iflang.pdf diff --git a/macros/latex/contrib/oberdiek/oberdiek-bundle.bib b/macros/latex/contrib/oberdiek/oberdiek-bundle.bib index 44fce8aeca..364db304ef 100644 --- a/macros/latex/contrib/oberdiek/oberdiek-bundle.bib +++ b/macros/latex/contrib/oberdiek/oberdiek-bundle.bib @@ -96,13 +96,6 @@ version={2.5}, url={https://ctan.org/pkg/hypbmsec}, } -@manual{oberdiek:hypcap, - title={The hypcap package}, - author={Heiko Oberdiek}, - date={2016-05-16}, - version={1.12}, - url={https://ctan.org/pkg/hypcap}, -} @manual{oberdiek:hypgotoe, title={The hypgotoe package}, author={Heiko Oberdiek}, @@ -243,13 +236,6 @@ version={1.2}, url={https://ctan.org/pkg/tabularkv}, } -@manual{oberdiek:telprint, - title={The telprint package}, - author={Heiko Oberdiek}, - date={2016-05-16}, - version={1.11}, - url={https://ctan.org/pkg/telprint}, -} @manual{oberdiek:thepdfnumber, title={The thepdfnumber package}, author={Heiko Oberdiek}, diff --git a/macros/latex/contrib/oberdiek/oberdiek.ins b/macros/latex/contrib/oberdiek/oberdiek.ins index dc59a6e024..099d1f538d 100644 --- a/macros/latex/contrib/oberdiek/oberdiek.ins +++ b/macros/latex/contrib/oberdiek/oberdiek.ins @@ -3,7 +3,7 @@ % % Copyright (C) % 1999, 2001, 2006 Heiko Oberdiek -% 2016-2020 Oberdiek Package Support Group +% 2016-2024 Oberdiek Package Support Group % https://github.com/ho-tex/oberdiek/issues % % This work may be distributed and/or modified under the @@ -40,7 +40,6 @@ \batchinput{flags.dtx} \batchinput{holtxdoc.dtx} \batchinput{hypbmsec.dtx} -\batchinput{hypcap.dtx} \batchinput{hypgotoe.dtx} \batchinput{hyphsubst.dtx} \batchinput{ifdraft.dtx} @@ -58,7 +57,6 @@ \batchinput{stampinclude.dtx} \batchinput{tabularht.dtx} \batchinput{tabularkv.dtx} -\batchinput{telprint.dtx} \batchinput{thepdfnumber.dtx} \batchinput{twoopt.dtx} diff --git a/macros/latex/contrib/oberdiek/oberdiek.pdf b/macros/latex/contrib/oberdiek/oberdiek.pdf Binary files differindex 16e08d826a..31c3efdda7 100644 --- a/macros/latex/contrib/oberdiek/oberdiek.pdf +++ b/macros/latex/contrib/oberdiek/oberdiek.pdf diff --git a/macros/latex/contrib/oberdiek/oberdiek.tex b/macros/latex/contrib/oberdiek/oberdiek.tex index 3849551d71..0759250c24 100644 --- a/macros/latex/contrib/oberdiek/oberdiek.tex +++ b/macros/latex/contrib/oberdiek/oberdiek.tex @@ -11,11 +11,11 @@ \newcommand*{\Author}{Heiko Oberdiek} \newcommand*{\Email}{ho-tex at tug.org} -\newcommand*{\Date}{2023/01/10} +\newcommand*{\Date}{2024/07/26} % Copyright (C) 2006-2016 by % Heiko Oberdiek -% Copyright (C) 2016-2023 by +% Copyright (C) 2016-2024 by % Oberdiek Package Support Group % % This work may be distributed and/or modified under the @@ -203,8 +203,6 @@ [\entrysep] \entry{hypbmsec}{Bookmarks in sectioning commands}% [\entrysep] -\entry{hypcap}{Adjusting the anchors of captions}% -[\entrysep] \entry{hypgotoe}{Links to embedded files}% [\entrysep] \entry{hyphsubst}{Substitute hyphenation patterns}% @@ -239,8 +237,6 @@ [\entrysep] \entry{tabularkv}{Tabular with key value interface}% [\entrysep] -\entry{telprint}{Format German phone numbers}% -[\entrysep] \entry{thepdfnumber}{Print PDF numbers with minimal digits}% [\entrysep] \entry{twoopt}{Definitions with two optional arguments}% @@ -391,20 +387,6 @@ a replacement for the bookmarks can be given. \tocinclude{hypbmsec} \newpage -\subsection{\pkgsectformat{hypcap}} -\label{hypcap} -\begin{abstract} -This package tries a solution of the problem with -hyperref, that links to floats points below the -caption and not at the beginning of the float. -Therefore this package divides the task into two -part, the link setting with \cs{capstart} or -automatically at the beginning of a float and -the rest in the \cs{caption} command. -\end{abstract} -\tocinclude{hypcap} - -\newpage \subsection{\pkgsectformat{hypgotoe}} \label{hypgotoe} \begin{abstract} @@ -520,7 +502,7 @@ is supported. Index preambles can be given either by means of package \label{setouterhbox} \begin{abstract} If math stuff is set in an \cs{hbox}, then TeX -performs some optimization and omits the implicite +performs some optimization and omits the implicit penalties \cs{binoppenalty} and \cs{relpenalty}. This packages tries to put stuff into an \cs{hbox} without getting lost of those penalties. @@ -578,15 +560,6 @@ especially if package \xpackage{tabularht} is used. \tocinclude{tabularkv} \newpage -\subsection{\pkgsectformat{telprint}} -\label{telprint} -\begin{abstract} -Package \xpackage{telprint} provides \cs{telprint} for formatting -German phone numbers. -\end{abstract} -\tocinclude{telprint} - -\newpage \subsection{\pkgsectformat{thepdfnumber}} \label{thepdfnumber} \begin{abstract} diff --git a/macros/latex/contrib/oberdiek/pdfcolparallel.dtx b/macros/latex/contrib/oberdiek/pdfcolparallel.dtx index 17893f98a9..02df672d4e 100644 --- a/macros/latex/contrib/oberdiek/pdfcolparallel.dtx +++ b/macros/latex/contrib/oberdiek/pdfcolparallel.dtx @@ -53,7 +53,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex pdfcolparallel.dtx % makeindex -s gind.ist pdfcolparallel.idx % pdflatex pdfcolparallel.dtx diff --git a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf Binary files differindex 90a3b348a0..d97c8441f4 100644 --- a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf +++ b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf diff --git a/macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx b/macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx index 77d8aab071..a382037b42 100644 --- a/macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx +++ b/macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx @@ -53,7 +53,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex pdfcolparcolumns.dtx % makeindex -s gind.ist pdfcolparcolumns.idx % pdflatex pdfcolparcolumns.dtx diff --git a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf Binary files differindex a49189ba4a..8afe31978a 100644 --- a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf +++ b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf diff --git a/macros/latex/contrib/oberdiek/pdfcrypt.dtx b/macros/latex/contrib/oberdiek/pdfcrypt.dtx index e4681efa8c..3c5070829c 100644 --- a/macros/latex/contrib/oberdiek/pdfcrypt.dtx +++ b/macros/latex/contrib/oberdiek/pdfcrypt.dtx @@ -55,7 +55,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex pdfcrypt.dtx % makeindex -s gind.ist pdfcrypt.idx % pdflatex pdfcrypt.dtx diff --git a/macros/latex/contrib/oberdiek/pdfcrypt.pdf b/macros/latex/contrib/oberdiek/pdfcrypt.pdf Binary files differindex 1de22245d4..eabda461d7 100644 --- a/macros/latex/contrib/oberdiek/pdfcrypt.pdf +++ b/macros/latex/contrib/oberdiek/pdfcrypt.pdf diff --git a/macros/latex/contrib/oberdiek/protecteddef.dtx b/macros/latex/contrib/oberdiek/protecteddef.dtx index cff42cccf7..21aab0c9fc 100644 --- a/macros/latex/contrib/oberdiek/protecteddef.dtx +++ b/macros/latex/contrib/oberdiek/protecteddef.dtx @@ -56,7 +56,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex protecteddef.dtx % makeindex -s gind.ist protecteddef.idx % pdflatex protecteddef.dtx @@ -246,7 +246,7 @@ and the derived files % is not supported. Macro \meta{cmd} is to be defined as % \cs{long} macro without star with \meta{num} arguments. % -% The number of arguments \meta{num} must be given as explicite digit +% The number of arguments \meta{num} must be given as explicit digit % |0| upto |9|. Otherwise the part between the argument \meta{cmd} and % the \meta{definition text} is taken as parameter text in the syntax % of vanilla \hologo{TeX}. Examples (with \cs{protected}): diff --git a/macros/latex/contrib/oberdiek/protecteddef.pdf b/macros/latex/contrib/oberdiek/protecteddef.pdf Binary files differindex cabaa32c49..c5d984bf5e 100644 --- a/macros/latex/contrib/oberdiek/protecteddef.pdf +++ b/macros/latex/contrib/oberdiek/protecteddef.pdf diff --git a/macros/latex/contrib/oberdiek/resizegather.dtx b/macros/latex/contrib/oberdiek/resizegather.dtx index 4a07864917..8ec4cc8a13 100644 --- a/macros/latex/contrib/oberdiek/resizegather.dtx +++ b/macros/latex/contrib/oberdiek/resizegather.dtx @@ -53,7 +53,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex resizegather.dtx % makeindex -s gind.ist resizegather.idx % pdflatex resizegather.dtx diff --git a/macros/latex/contrib/oberdiek/resizegather.pdf b/macros/latex/contrib/oberdiek/resizegather.pdf Binary files differindex 11d07da19c..5bf853391c 100644 --- a/macros/latex/contrib/oberdiek/resizegather.pdf +++ b/macros/latex/contrib/oberdiek/resizegather.pdf diff --git a/macros/latex/contrib/oberdiek/rotchiffre.dtx b/macros/latex/contrib/oberdiek/rotchiffre.dtx index 3023347fe1..aa80754011 100644 --- a/macros/latex/contrib/oberdiek/rotchiffre.dtx +++ b/macros/latex/contrib/oberdiek/rotchiffre.dtx @@ -56,7 +56,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex rotchiffre.dtx % makeindex -s gind.ist rotchiffre.idx % pdflatex rotchiffre.dtx @@ -214,7 +214,7 @@ and the derived files % \begin{declcs}{EdefRot} \M{type} \M{cmd} \M{text} % \end{declcs} % The \meta{text} is expanded and sanitized. All tokens -% are letters with catcode 12 (other) with the exeption of +% are letters with catcode 12 (other) with the exception of % the space token that has character code 32 (0x20) and % catcode 10 (space). This follows \hologo{TeX}'s convention of % \cs{string} and \cs{meaning}. diff --git a/macros/latex/contrib/oberdiek/rotchiffre.pdf b/macros/latex/contrib/oberdiek/rotchiffre.pdf Binary files differindex 7deae8d756..5504f90b56 100644 --- a/macros/latex/contrib/oberdiek/rotchiffre.pdf +++ b/macros/latex/contrib/oberdiek/rotchiffre.pdf diff --git a/macros/latex/contrib/oberdiek/scrindex.dtx b/macros/latex/contrib/oberdiek/scrindex.dtx index fea57fd1a9..63deeaab2f 100644 --- a/macros/latex/contrib/oberdiek/scrindex.dtx +++ b/macros/latex/contrib/oberdiek/scrindex.dtx @@ -53,7 +53,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex scrindex.dtx % makeindex -s gind.ist scrindex.idx % pdflatex scrindex.dtx @@ -195,7 +195,7 @@ and the derived files % the standard classes |article|, |report|, and |book|. It % redefines environment `theindex' for its needs. % However, it does not know other classes such as KOMA-Script. -% This package closes the compatibiliy gap between KOMA-Script's +% This package closes the compatibility gap between KOMA-Script's % classes and package \xpackage{index}. % % Environment |theindex| is redefined to support both package diff --git a/macros/latex/contrib/oberdiek/scrindex.pdf b/macros/latex/contrib/oberdiek/scrindex.pdf Binary files differindex 0ca63d3e6d..a2e2cba825 100644 --- a/macros/latex/contrib/oberdiek/scrindex.pdf +++ b/macros/latex/contrib/oberdiek/scrindex.pdf diff --git a/macros/latex/contrib/oberdiek/setouterhbox.dtx b/macros/latex/contrib/oberdiek/setouterhbox.dtx index 001cd278d3..cc937c16a4 100644 --- a/macros/latex/contrib/oberdiek/setouterhbox.dtx +++ b/macros/latex/contrib/oberdiek/setouterhbox.dtx @@ -57,7 +57,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex setouterhbox.dtx % makeindex -s gind.ist setouterhbox.idx % pdflatex setouterhbox.dtx @@ -190,7 +190,7 @@ and the derived files % % \begin{abstract} % If math stuff is set in an \cs{hbox}, then TeX -% performs some optimization and omits the implicite +% performs some optimization and omits the implicit % penalties \cs{binoppenalty} and \cs{relpenalty}. % This packages tries to put stuff into an \cs{hbox} % without getting lost of those penalties. @@ -234,7 +234,7 @@ and the derived files % method we discuss here. Nowadays we have \eTeX\ that extends % the tool set of a \TeX\ macro programmer. Especially useful % \eTeX\ was in this package for detecting and dealing with -% errorneous situations. +% erroneous situations. % % However also nowadays a perfect solution for the problem % is still missing at macro level. Probably someone has diff --git a/macros/latex/contrib/oberdiek/setouterhbox.pdf b/macros/latex/contrib/oberdiek/setouterhbox.pdf Binary files differindex dbdb939c6e..03757dc214 100644 --- a/macros/latex/contrib/oberdiek/setouterhbox.pdf +++ b/macros/latex/contrib/oberdiek/setouterhbox.pdf diff --git a/macros/latex/contrib/oberdiek/settobox.dtx b/macros/latex/contrib/oberdiek/settobox.dtx index c38d502a53..c1d7af6ae9 100644 --- a/macros/latex/contrib/oberdiek/settobox.dtx +++ b/macros/latex/contrib/oberdiek/settobox.dtx @@ -53,7 +53,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex settobox.dtx % makeindex -s gind.ist settobox.idx % pdflatex settobox.dtx @@ -282,7 +282,7 @@ and the derived files % c) Print #1 commands. % d) Print box with frame % -% The implemenation looks more weird: +% The implementation looks more weird: \makeatletter \newcommand*{\test}[1]{% \par diff --git a/macros/latex/contrib/oberdiek/settobox.pdf b/macros/latex/contrib/oberdiek/settobox.pdf Binary files differindex a2f1c8d179..ef92916de2 100644 --- a/macros/latex/contrib/oberdiek/settobox.pdf +++ b/macros/latex/contrib/oberdiek/settobox.pdf diff --git a/macros/latex/contrib/oberdiek/stackrel.dtx b/macros/latex/contrib/oberdiek/stackrel.dtx index 6b3444c33c..09110de947 100644 --- a/macros/latex/contrib/oberdiek/stackrel.dtx +++ b/macros/latex/contrib/oberdiek/stackrel.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex stackrel.dtx % makeindex -s gind.ist stackrel.idx % pdflatex stackrel.dtx diff --git a/macros/latex/contrib/oberdiek/stackrel.pdf b/macros/latex/contrib/oberdiek/stackrel.pdf Binary files differindex df11fd28dd..4edbb64c31 100644 --- a/macros/latex/contrib/oberdiek/stackrel.pdf +++ b/macros/latex/contrib/oberdiek/stackrel.pdf diff --git a/macros/latex/contrib/oberdiek/stampinclude.dtx b/macros/latex/contrib/oberdiek/stampinclude.dtx index 9acd8a61f8..ba468e8591 100644 --- a/macros/latex/contrib/oberdiek/stampinclude.dtx +++ b/macros/latex/contrib/oberdiek/stampinclude.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex stampinclude.dtx % makeindex -s gind.ist stampinclude.idx % pdflatex stampinclude.dtx @@ -225,7 +225,7 @@ and the derived files % This package \xpackage{stampinclude} goes another way. % \LaTeX\ reads and writes a separate \xext{aux} file for each % file that is included by \cs{include}. There \LaTeX\ remembers -% counter valuses. Changed \xext{tex} +% counter values. Changed \xext{tex} % files can therefore be detected by comparing the file date stamp of % the \xext{tex} file with the date stamp of its \xext{aux} file. % Since version 1.30.0 \pdfTeX\ provides \cs{pdffilemoddate} @@ -254,7 +254,7 @@ and the derived files % % \subsubsection{Other file dependencies} % -% A file that is included by \cs{include} may input ore reference +% A file that is included by \cs{include} may input or reference % other files: % \begin{itemize} % \item other \TeX\ files using \cs{input}, diff --git a/macros/latex/contrib/oberdiek/stampinclude.pdf b/macros/latex/contrib/oberdiek/stampinclude.pdf Binary files differindex 55b57219a3..b98bf15bb1 100644 --- a/macros/latex/contrib/oberdiek/stampinclude.pdf +++ b/macros/latex/contrib/oberdiek/stampinclude.pdf diff --git a/macros/latex/contrib/oberdiek/tabularht.dtx b/macros/latex/contrib/oberdiek/tabularht.dtx index 20688068b0..e6c26f1040 100644 --- a/macros/latex/contrib/oberdiek/tabularht.dtx +++ b/macros/latex/contrib/oberdiek/tabularht.dtx @@ -53,7 +53,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex tabularht.dtx % makeindex -s gind.ist tabularht.idx % pdflatex tabularht.dtx @@ -250,7 +250,7 @@ and the derived files % and add the vertical lines. The lines in a tabular % with \xpackage{tabularht} support (environments of this package) % are numbered from left to right. The gap that is -% controlled by \cs{interrowspace} or inbetween \cs{interrowstart} +% controlled by \cs{interrowspace} or in between \cs{interrowstart} % and \cs{interrowstop} is then filled with the detected % vertical lines. % @@ -472,7 +472,7 @@ and the derived files \def\tabH@spread{spread} % \end{macrocode} % First argument is the height of the table, -% then the orignal arguments for tabular follow. +% then the original arguments for tabular follow. % \begin{macrocode} \newenvironment{tabularht}[1]{% \tabH@setheight{#1}% diff --git a/macros/latex/contrib/oberdiek/tabularht.pdf b/macros/latex/contrib/oberdiek/tabularht.pdf Binary files differindex 893fe33acf..3a70cec6a2 100644 --- a/macros/latex/contrib/oberdiek/tabularht.pdf +++ b/macros/latex/contrib/oberdiek/tabularht.pdf diff --git a/macros/latex/contrib/oberdiek/tabularkv.dtx b/macros/latex/contrib/oberdiek/tabularkv.dtx index 57ef5e8745..b324e6e8ab 100644 --- a/macros/latex/contrib/oberdiek/tabularkv.dtx +++ b/macros/latex/contrib/oberdiek/tabularkv.dtx @@ -53,7 +53,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex tabularkv.dtx % makeindex -s gind.ist tabularkv.idx % pdflatex tabularkv.dtx diff --git a/macros/latex/contrib/oberdiek/tabularkv.pdf b/macros/latex/contrib/oberdiek/tabularkv.pdf Binary files differindex e6ea130064..dedc3251c0 100644 --- a/macros/latex/contrib/oberdiek/tabularkv.pdf +++ b/macros/latex/contrib/oberdiek/tabularkv.pdf diff --git a/macros/latex/contrib/oberdiek/thepdfnumber.dtx b/macros/latex/contrib/oberdiek/thepdfnumber.dtx index 61eb42684c..c1aa4bf9fa 100644 --- a/macros/latex/contrib/oberdiek/thepdfnumber.dtx +++ b/macros/latex/contrib/oberdiek/thepdfnumber.dtx @@ -57,7 +57,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex thepdfnumber.dtx % makeindex -s gind.ist thepdfnumber.idx % pdflatex thepdfnumber.dtx @@ -256,7 +256,7 @@ and the derived files % \item The decimal part is omitted, if the number is an integer (5, 7). % \item Trailing zeros from the decimal part are stripped (5, 6, 7, 9). % \end{itemize} -% The resulting number representation can be catched with one of the +% The resulting number representation can be caught with one of the % following Perl regular expressions: % \begin{itemize} % \item |^0$| (zero) @@ -295,11 +295,11 @@ and the derived files % \subsection{Input number} % % The user macros expect a number as argument. The number can either -% be given explicitely or as macro that expands in one step -% to an explicite number, because the first token of the argument +% be given explicitly or as macro that expands in one step +% to an explicit number, because the first token of the argument % is expanded once. % -% The explicite number consists of +% The explicit number consists of % \begin{itemize} % \item optional signs `\texttt{+}' and `\texttt{-}', % \item digits `\texttt{0}' upto `\texttt{9}' and @@ -320,7 +320,7 @@ and the derived files % The package is not intended for validating numbers or to % decide if an argument is a number. Therefore it is an usage % error to use the user macros with arguments that are not -% explicite numbers as specified in the previous sections. +% explicit numbers as specified in the previous sections. % Nevertheless some error conditions are sometimes recognized. % Errors are given in form of an undefined command sequence. % It is the only way to notify \hologo{TeX} in expandable context. diff --git a/macros/latex/contrib/oberdiek/thepdfnumber.pdf b/macros/latex/contrib/oberdiek/thepdfnumber.pdf Binary files differindex 8d4b73d65f..61d98f6985 100644 --- a/macros/latex/contrib/oberdiek/thepdfnumber.pdf +++ b/macros/latex/contrib/oberdiek/thepdfnumber.pdf diff --git a/macros/latex/contrib/oberdiek/twoopt.dtx b/macros/latex/contrib/oberdiek/twoopt.dtx index 10334f0d3a..806799fd41 100644 --- a/macros/latex/contrib/oberdiek/twoopt.dtx +++ b/macros/latex/contrib/oberdiek/twoopt.dtx @@ -52,7 +52,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex twoopt.dtx % makeindex -s gind.ist twoopt.idx % pdflatex twoopt.dtx diff --git a/macros/latex/contrib/oberdiek/twoopt.pdf b/macros/latex/contrib/oberdiek/twoopt.pdf Binary files differindex 6a144a8368..071dd4d2b2 100644 --- a/macros/latex/contrib/oberdiek/twoopt.pdf +++ b/macros/latex/contrib/oberdiek/twoopt.pdf diff --git a/macros/latex/contrib/pagelayout/README.md b/macros/latex/contrib/pagelayout/README.md index 4d62838bf4..8d08f566f7 100644 --- a/macros/latex/contrib/pagelayout/README.md +++ b/macros/latex/contrib/pagelayout/README.md @@ -1,4 +1,4 @@ -![The pagelayout LaTeX class](doc/banner.svg) +![The pagelayout LaTeX class](https://raw.githubusercontent.com/friedemannbartels/latex-pagelayout/1.1.1/doc/banner.svg) The pagelayout class enables you to design pages declaratively using simple macros for pages, covers, grids, templates, text, and graphics to create graphic rich, perfectly typeset, and print ready PDFs. @@ -26,7 +26,7 @@ Create a page with the `\page` command. A grid with rows and cells helps you to } ``` -![A page with a two column layout](doc/quickstart-1.svg) +![A page with a two column layout](https://raw.githubusercontent.com/friedemannbartels/latex-pagelayout/1.1.1/doc/quickstart-1.svg) ### Templates @@ -44,7 +44,7 @@ You can set width relations between grid cells and height relations between grid \template{my template}{} ``` -![A template with two placeholders](doc/quickstart-2.svg) +![A template with two placeholders](https://raw.githubusercontent.com/friedemannbartels/latex-pagelayout/1.1.1/doc/quickstart-2.svg) You can set margin and gutter at grid, page, or document level. @@ -72,17 +72,17 @@ You can scale and position a graphic. And you can add borders and box shadows to } ``` -![Photo with border and shadow](doc/quickstart-3.svg) +![Photo with border and shadow](https://raw.githubusercontent.com/friedemannbartels/latex-pagelayout/1.1.1/doc/quickstart-3.svg) -Have a look at the [examples](doc) to learn how to create double pages, covers, and more. +Have a look at the [examples](https://github.com/friedemannbartels/latex-pagelayout/tree/1.1.1/doc) to learn how to create double pages, covers, and more. -For a complete reference, read the [manual](doc/pagelayout-manual.pdf). +For a complete reference, read the [manual](https://raw.githubusercontent.com/friedemannbartels/latex-pagelayout/1.1.1/doc/pagelayout-manual.pdf). ## Installation In general, you should use the package manager shipped with your TeX distribution to install the pagelayout package. -To install manually, copy the contents of [pagelayout.tds.zip](https://github.com/friedemannbartels/latex-pagelayout/releases/download/1.1.0/pagelayout-1.1.0.tds.zip) to your local TeX directory tree and run the command `texhash`. +To install manually, copy the contents of [pagelayout.tds.zip](https://github.com/friedemannbartels/latex-pagelayout/releases/download/1.1.1/pagelayout.tds.zip) to your local TeX directory tree and run the command `texhash`. To enable image optimization, shadow creation, and preflight, perform these installation steps: diff --git a/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf Binary files differindex 6913eb17ce..a8ec76cc08 100644 --- a/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf +++ b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf diff --git a/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex index 460f1170d0..df37ebaa6f 100644 --- a/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex +++ b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex @@ -18,7 +18,7 @@ \usepackage{tikz} \OnlyDescription \hypersetup{pdfborder={0 0 0}} -\def\pagelayoutversion{1.1.0} +\def\pagelayoutversion{1.1.1} \begin{document} diff --git a/macros/latex/contrib/pagelayout/scripts/pagelayoutapi b/macros/latex/contrib/pagelayout/scripts/pagelayoutapi index be034baaa7..1232ae3ab7 100755 --- a/macros/latex/contrib/pagelayout/scripts/pagelayoutapi +++ b/macros/latex/contrib/pagelayout/scripts/pagelayoutapi @@ -13,7 +13,7 @@ # LaTeX version 2008/05/04 or later. # -version=1.1.0 +version=1.1.1 _convert() { turbo=$1 diff --git a/macros/latex/contrib/pagelayout/scripts/textestvis b/macros/latex/contrib/pagelayout/scripts/textestvis index 8ddcde77e1..8120a7ba1f 100755 --- a/macros/latex/contrib/pagelayout/scripts/textestvis +++ b/macros/latex/contrib/pagelayout/scripts/textestvis @@ -13,7 +13,7 @@ # LaTeX version 2008/05/04 or later. # -version=1.1.0 +version=1.1.1 OK="$( tput setaf 2 )•$( tput sgr0 )" FAILED="$( tput setaf 1 )$( tput bold )x$( tput sgr0 )" @@ -122,13 +122,13 @@ test() { fi fi - magick convert -density $2 -quiet $tmpdir/$name.pdf $tmpdir/$name.png + magick -density $2 -quiet $tmpdir/$name.pdf $tmpdir/$name.png if [ -f "$tmpdir/$name.png" ]; then mv $tmpdir/$name.png $tmpdir/$name-0.png fi if [ -f "$name.approved.pdf" ]; then - magick convert -density $2 -quiet $name.approved.pdf $tmpdir/$name.approved.png + magick -density $2 -quiet $name.approved.pdf $tmpdir/$name.approved.png if [ -f "$tmpdir/$name.approved.png" ]; then mv $tmpdir/$name.approved.png $tmpdir/$name.approved-0.png fi @@ -311,11 +311,11 @@ compare() { spacer="" if [ -f "$filea" ]; then if [ -f "$fileb" ]; then - magick convert -density $1 -quiet $filea $tmpdir/$basenamea.png + magick -density $1 -quiet $filea $tmpdir/$basenamea.png if [ -f "$tmpdir/$basenamea.png" ]; then mv $tmpdir/$basenamea.png $tmpdir/$basenamea-0.png fi - magick convert -density $1 -quiet $fileb $tmpdir/$basenameb.png + magick -density $1 -quiet $fileb $tmpdir/$basenameb.png if [ -f "$tmpdir/$basenameb.png" ]; then mv $tmpdir/$basenameb.png $tmpdir/$basenameb-0.png fi diff --git a/macros/latex/contrib/pagelayout/tex/pagelayout.cls b/macros/latex/contrib/pagelayout/tex/pagelayout.cls index 8e7d3616ae..655ed59bd2 100644 --- a/macros/latex/contrib/pagelayout/tex/pagelayout.cls +++ b/macros/latex/contrib/pagelayout/tex/pagelayout.cls @@ -13,8 +13,8 @@ %% \NeedsTeXFormat{LaTeX2e}[2020/10/01] -\ProvidesClass{pagelayout}[2024/01/17 Layout graphic rich documents] -\def\pagelayoutversion{1.1.0} +\ProvidesClass{pagelayout}[2024/07/31 Layout graphic rich documents] +\def\pagelayoutversion{1.1.1} % packages \RequirePackage{pgfopts} @@ -372,7 +372,11 @@ \pal@outermargin=\ifdim\pal@gridoutermargin=\pal@undefdim\pal@gridmargin\else\pal@gridoutermargin\fi \height=\dimexpr\pal@pageheight - \pal@topmargin - \pal@bottommargin\relax - \width=\dimexpr\pal@pagewidth - \pal@innermargin - \pal@outermargin\relax + \ifpal@isdoublepage + \width=\dimexpr2\pal@pagewidth - 2\pal@outermargin\relax + \else + \width=\dimexpr\pal@pagewidth - \pal@innermargin - \pal@outermargin\relax + \fi \ifdim\dimexpr\pal@gridoptionheight\relax=\pal@undefdim \else \pal@gridheightdiff=\dimexpr0.5\height - 0.5\dimexpr\pal@gridoptionheight\relax\relax diff --git a/macros/latex/contrib/passopt/README.md b/macros/latex/contrib/passopt/README.md index 3b819c42b4..f8eb8f4c43 100644 --- a/macros/latex/contrib/passopt/README.md +++ b/macros/latex/contrib/passopt/README.md @@ -1,5 +1,5 @@ # The `passopt` package -Passing options to packages or classes (v1.01) +Passing options to packages or classes (v1.01a) ## Abstract `passopt` allow reset the global options of a loaded macro package or document class, or to change the position of the pre-passed options in the list to the right. diff --git a/macros/latex/contrib/passopt/passopt.pdf b/macros/latex/contrib/passopt/passopt.pdf Binary files differindex d6c865c112..ce6e437c65 100644 --- a/macros/latex/contrib/passopt/passopt.pdf +++ b/macros/latex/contrib/passopt/passopt.pdf diff --git a/macros/latex/contrib/passopt/passopt.sty b/macros/latex/contrib/passopt/passopt.sty index b5c24ed9a3..d74c698d27 100644 --- a/macros/latex/contrib/passopt/passopt.sty +++ b/macros/latex/contrib/passopt/passopt.sty @@ -8,7 +8,7 @@ % The latest version of this license is in % https://creativecommons.org/licenses/by/4.0/legalcode \NeedsTeXFormat{LaTeX2e}[2021/11/15] -\ProvidesExplPackage{passopt}{2024/07/15}{1.01} +\ProvidesExplPackage{passopt}{2024/07/17}{1.01a} {Passing options to packages or classes} \cs_generate_variant:Nn \tl_if_blank:nTF { v } diff --git a/macros/latex/contrib/passopt/passopt.tex b/macros/latex/contrib/passopt/passopt.tex index 76568eeff1..fb4473e356 100644 --- a/macros/latex/contrib/passopt/passopt.tex +++ b/macros/latex/contrib/passopt/passopt.tex @@ -5,8 +5,8 @@ \setcnltx { package = passopt, - version = v1.01, - date = 2024/07/15, + version = v1.01a, + date = 2024/07/17, authors = Qu Yi, info = Passing options to packages or classes, email = toquyi@163.com, @@ -42,7 +42,6 @@ \setlist{nosep,topsep = \smallskipamount} \setlist[description,1]{leftmargin = \parindent} \setlist[itemize,1]{leftmargin = *} -\deffootnote{2em}{1em}{\llap{\color{red}\thefootnotemark.\space}} \makeatother \begin{document} @@ -60,7 +59,7 @@ For a developer, there are some cases where packages and classes may load other In the example above, the list of options that the \pkg*{mypackage} macro package ends up executing is \fbox{\code{opt1,opt2=A,opt3}}. If you wish to \textcolor{red}{disable} the pre-enabled options or place the newly enabled options to the \textcolor{red}{right} of the list (last executed), then you need to modify the code of the load command in the package or class file, but this is not recommended for public sharing. Therefore, this macro package provides commands to reset the options and change the order of the new options. \section{User commands} -Four commands are provided to set the options to be passed later, all of which are \textcolor{red}{locally} assigned. +Four commands are provided to set the options to be passed later, all of which are \textcolor{red}{locally} assigned. Subsequent loading of the macro package is not must required due to the hook mechanism used to modify the list of options. \begin{commands} \command{SetOptionsToPackage}[\sarg\marg{options list}\marg{package}] Passes options to the macro package, the location of the passed options is to the right of the options used when loading the macro package. If an asterisk parameter is used, only the passed options were ultimately retained. @@ -95,7 +94,7 @@ Thanks Jonathan P. Spratte for the improvement suggestions. \appendix \begin{changelog}[simple] \begin{version}[v = 1.01,date = 2024/07/15] - \item Synchronization modifier for lists of \code{@raw@opt@} and \code{opt@}. + \item Synchronized modification for lists of \code{@raw@opt@} and \code{opt@}. \item Options that are set are expanded once rather than fully expanded. \end{version} \end{changelog} diff --git a/macros/latex/contrib/photobook/Makefile b/macros/latex/contrib/photobook/Makefile index 59b7ea002c..19edca368e 100644 --- a/macros/latex/contrib/photobook/Makefile +++ b/macros/latex/contrib/photobook/Makefile @@ -85,8 +85,7 @@ endif # markdown dialect... # -# XXX still needs some tweaking... -MD_FORMAT ?= markdown_github +MD_FORMAT ?= gfm # debug output... @@ -173,26 +172,11 @@ LN := cp -l # - |..| - verbatim does not work... # - || - parts of doc omitted... # - verbatim blocks get merged sometimes... +# - does not resolve \jobname in include... # - ... # ...not sure if this can be tweaked... -#%.md: %.tex -# pandoc -t $(MD_FORMAT) -s $< -o $@ - -# XXX EXPERIMENTAL... -# XXX revise: -# ...for this to work we need to replace: -# \documentclass{ltxdoc} -# to: -# \documentclass[markdownextra]{internet} -# XXX install the internet class... -# https://github.com/loopspace/latex-to-internet -# ...needs testing... %.md: %.tex - cat $< \ - | sed 's/documentclass{ltxdoc}/documentclass[markdownextra]{internet}/' \ - > $<.tmp - mv $<{.tmp,} - $(TEX) $< $(STDERR) + pandoc -t $(MD_FORMAT) -s $< -o $@ # meta-section... diff --git a/macros/latex/contrib/photobook/README.md b/macros/latex/contrib/photobook/README.md index 13daa3c373..7055717be0 100644 --- a/macros/latex/contrib/photobook/README.md +++ b/macros/latex/contrib/photobook/README.md @@ -28,7 +28,7 @@ $ make install The `photobook` document class requires a set of modules to be installed for it to function, the full list is included in the docs and can be -printed by calling: +generated and printed by calling: ```shell $ make depends ``` @@ -39,7 +39,8 @@ For more info on `make` targets see the: [./Makefile](./Makefile) # Documentation -Pre-built documentation can be found on +Pre-built documentation can be found in the +[Github releases](https://github.com/flynx/photobook/releases/latest) or on [CTAN](http://mirrors.ctan.org/macros/latex/contrib/photobook/photobook.pdf). @@ -69,7 +70,7 @@ Build requirements for docs: ## Notes -- The main refetence is inline with the source [photobook.cls](./photobook.cls) +- The main reference is maintained inline with the source [photobook.cls](./photobook.cls) thus it is both human-readable next to the code it documents and is used to build the `photobook.pdf`. Extracting the documentation source (`photobook*.tex`) is done diff --git a/macros/latex/contrib/photobook/photobook.cls b/macros/latex/contrib/photobook/photobook.cls index a2a84809e8..ae2ecac6b6 100644 --- a/macros/latex/contrib/photobook/photobook.cls +++ b/macros/latex/contrib/photobook/photobook.cls @@ -38,6 +38,7 @@ % % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % +% % XXX ASAP: imagecell: photobook@imagecell@left and photobook@imagecell@top % should explicitly account for clearence@left and clearence@top resp. % XXX ASAP: imagecell: clearance should have the same semantics as cliptocell @@ -88,12 +89,25 @@ % cell/cell* depend on absolute mode being set globally % % +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% +% Work around an issue with calc's \ratio{..}{..} breaking into an +% "Arythmetic overflow" when working with large images. +% (see Issues section for more info) +% +% NOTE: if the error persists just make this smaller but note that the +% smaller this gets the greater the error can be for very small +% images +% +\def\CalcOverflowFactor{0.1}% + + %---------------------------------------------------------------------- %%% NOTE: \def\<module-name>@[A-Z]+ macros will be visible to both the %%% code and the generated docs... -\edef\photobook@FILEVERSION{v0.1.29} -\edef\photobook@FILEDATE{2023-08-24} +\edef\photobook@FILEVERSION{v0.1.31} +\edef\photobook@FILEDATE{2024-07-19} %% \documentclass{ltxdoc} @@ -248,26 +262,27 @@ %% \begin{minipage}{\textwidth} %% \begin{verbatim} %% +%% <-------------------------------------------------> paperwidth %% <---> bleed <---> bleed -%% -%% + - - - - - - - - - - - - - - - - - - - - - - + - + ^ -%% . . . | bleed -%% . +-----------------------------------------+----- v . . --- -%% . | ^ . . = . -%% . | . . . . . . | . . . = . ^ -%% . |<-- blockwidth ------------------------->= . | -%% . | . | . . . = . | -%% . | | . . = . textheight -%% . | . Page | . . . = . | -%% . | blockheight . . = . | -%% . | . | . . <--> bindingoffset | -%% . | | . . = . | -%% . | . . . . . . | . <--> gutteroffset v -%% . | v . . = . -%% . +-----------------------------------------+----- ^ . . --- -%% . . . . | bleed -%% + - - - - - - - - - - - - - - - - - - - - - - + - + v -%% . . +%% paperheight v +%% + - - - - - - - - - - - - - - - - - - - - - - + - + ^ . . . --- +%% . . . | bleed . +%% . +-----------------------------------------+----- v . . --- +%% . | ^ . . = . . +%% . | . . . . . . | . . . = . ^ +%% . |<-- blockwidth ------------------------->= . | . +%% . | . | . . . = . | +%% . | | . . = . textheight . +%% . | . Page | . . . = . | +%% . | blockheight . . = . | . +%% . | . | . . <--> bindingoffset | +%% . | | . . = . | . +%% . | . . . . . . | . <--> gutteroffset v +%% . | v . . = . . +%% . +-----------------------------------------+----- ^ . . --- +%% . . . . | bleed . +%% + - - - - - - - - - - - - - - - - - - - - - - + - + v . . . --- +%% . . ^ %% | <-- textwidth --------------> . | %% ^ gutter %% @@ -278,6 +293,9 @@ %% account for |\gutteroffset|, namely macros that do not display content %% with bleeds. %% +%% Also note that bleeds are included in \href{https://ctan.org/pkg/geometry}{geometry}'s +%% |\paperwidth| and |\paperheight|. +%% % NOTE: if blockwidth/blockheight are set they will force recalculations % and overriding of the paperwidth/paperheight if they were changed % by the user code anywhere between \documentclass[..]{photobook} @@ -917,7 +935,7 @@ %% \DescribeMacro{\imageblockoffsettop=<ratio>} % -%% The ration by which the image is raised in |\ImagePage{..}| and +%% The ratio by which the image is raised in |\ImagePage{..}| and %% derived templates. %% \edef\imageblockoffsettop{\photobook@imageblockoffsettop} @@ -2515,8 +2533,9 @@ % NOTE: here we calculate image/cell eccentricity to decide % to fit to width or heigh of cell... % NOTE: did I say that I "love" how LaTeX does basic math?? + % NOTE: \ratio{..}{..} here can break, see Issues for more info... \setlength\photobook@imagecell@imgratio{% - 1pt * \ratio{\wd\photobook@imagebox}{\ht\photobook@imagebox}}% + 1pt * \ratio{\CalcOverflowFactor\wd\photobook@imagebox}{\CalcOverflowFactor\ht\photobook@imagebox}}% \setlength\photobook@imagecell@cellratio{% 1pt * \ratio{\cellwidth}{\cellheight}}% \ifdim \photobook@imagecell@imgratio < \photobook@imagecell@cellratio% @@ -2524,7 +2543,7 @@ \includegraphics[% keepaspectratio, width=\photobook@imagecell@scale\dimexpr - + \cellwidth + \cellwidth - \photobook@imagecell@clearance@left - \photobook@imagecell@clearance@right \relax]{#3}}% \else% @@ -2532,7 +2551,7 @@ \includegraphics[% keepaspectratio, height=\photobook@imagecell@scale\dimexpr - + \cellheight + \cellheight - \photobook@imagecell@clearance@top - \photobook@imagecell@clearance@bottom \relax]{#3}}% \fi\fi\fi% @@ -4848,8 +4867,9 @@ % align center -> check if image fits vertically... \ifphotobook@ImagePageFit@centered\else% \sbox{\photobook@imagebox}{\includegraphics{#3}}% + % NOTE: \ratio{..}{..} here can break, see Issues for more info... \setlength\photobook@ImagePageFit@imgratio{% - 1pt * \ratio{\wd\photobook@imagebox}{\ht\photobook@imagebox}}% + 1pt * \ratio{\CalcOverflowFactor\wd\photobook@imagebox}{\CalcOverflowFactor\ht\photobook@imagebox}}% % NOTE: subtracting \bindingoffset from \cellwidth here makes sure that % we avoid offsetting images close enough in ratio to the page and % messing up bleeds... @@ -5692,6 +5712,26 @@ %---------------------------------------------------------------------- +%%%% Issues +% +%% \subsection*{Large images can cause "Arythmetic overflow"} +% +%% \DescribeMacro{\CalcOverflowFactor=0.1} +% +%% If the issue occurs set |\CalcOverflowFactor| to a smaller value. +%% But note, a value too small can lead to errors in the affected macros, +%% a good value is between 0.1 and 0.01. +%% +%% Also note that it is recommended to pre-size images the print outside +%% of \LaTeX. +%% +%% Affected macros: |\imagecell[fill]{..}{..}|, |\ImagePageFit|. +%% +% The issue occurs in the calc's |\ratio{..}{..}| macro when calculating +% image proportions. +% +% +%---------------------------------------------------------------------- % Index... % % XXX this prints trash at this point... diff --git a/macros/latex/contrib/photobook/photobook.pdf b/macros/latex/contrib/photobook/photobook.pdf Binary files differindex 5e785e73cf..119574f619 100644 --- a/macros/latex/contrib/photobook/photobook.pdf +++ b/macros/latex/contrib/photobook/photobook.pdf diff --git a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf Binary files differindex 1ae91515fb..fc1cf0d3af 100644 --- a/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf +++ b/macros/latex/contrib/reledmac/doc-more/page-typesetting-columns.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf Binary files differindex 58f1d6981d..7454d1cce0 100644 --- a/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf +++ b/macros/latex/contrib/reledmac/examples/1-criticalendnotes.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf Binary files differindex ea2f749d32..51238cf571 100644 --- a/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf +++ b/macros/latex/contrib/reledmac/examples/1-criticalnotes.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf Binary files differindex 2d7130fcb9..fa4b8cdbb5 100644 --- a/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf +++ b/macros/latex/contrib/reledmac/examples/1-sidenotes.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-tabular.pdf b/macros/latex/contrib/reledmac/examples/1-tabular.pdf Binary files differindex d7a945978b..80a889d85b 100644 --- a/macros/latex/contrib/reledmac/examples/1-tabular.pdf +++ b/macros/latex/contrib/reledmac/examples/1-tabular.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf Binary files differindex 75b679b50d..4881557ce0 100644 --- a/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf +++ b/macros/latex/contrib/reledmac/examples/1-verses-doublenumbering.pdf diff --git a/macros/latex/contrib/reledmac/examples/1-verses.pdf b/macros/latex/contrib/reledmac/examples/1-verses.pdf Binary files differindex e1d1b6af19..3caf07a14a 100644 --- a/macros/latex/contrib/reledmac/examples/1-verses.pdf +++ b/macros/latex/contrib/reledmac/examples/1-verses.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf Binary files differindex f7b843c631..7c94d43d13 100644 --- a/macros/latex/contrib/reledmac/examples/2-antilabe.pdf +++ b/macros/latex/contrib/reledmac/examples/2-antilabe.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf Binary files differindex 1c53f875a0..0278d89b9f 100644 --- a/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-cross_referencing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf Binary files differindex c9e6daca45..542174e6f0 100644 --- a/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-footnote_spacing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf Binary files differindex f702632cf3..3ecab9d63b 100644 --- a/macros/latex/contrib/reledmac/examples/2-glossaries.pdf +++ b/macros/latex/contrib/reledmac/examples/2-glossaries.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-indexing.pdf b/macros/latex/contrib/reledmac/examples/2-indexing.pdf Binary files differindex ca3b90abcc..607860d6e6 100644 --- a/macros/latex/contrib/reledmac/examples/2-indexing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-indexing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf Binary files differindex 95a09523d9..26e21be7b9 100644 --- a/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf +++ b/macros/latex/contrib/reledmac/examples/2-lemma_disambigution.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf Binary files differindex 0021b1cbd3..b1dca2b117 100644 --- a/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf +++ b/macros/latex/contrib/reledmac/examples/2-line_numbers_in_header.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf Binary files differindex 67424c3e0c..499104658b 100644 --- a/macros/latex/contrib/reledmac/examples/2-linespacing.pdf +++ b/macros/latex/contrib/reledmac/examples/2-linespacing.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf Binary files differindex 362ff7012a..f5f58e81d6 100644 --- a/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf +++ b/macros/latex/contrib/reledmac/examples/2-manuscript-apparatus.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf Binary files differindex 0fe795532a..abaf67b4f6 100644 --- a/macros/latex/contrib/reledmac/examples/2-notes-width.pdf +++ b/macros/latex/contrib/reledmac/examples/2-notes-width.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf Binary files differindex ad48933ba2..3cda9762d0 100644 --- a/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf +++ b/macros/latex/contrib/reledmac/examples/2-one_series_per_pstart.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-performances.pdf b/macros/latex/contrib/reledmac/examples/2-performances.pdf Binary files differindex e68f4f3b49..c543daa168 100644 --- a/macros/latex/contrib/reledmac/examples/2-performances.pdf +++ b/macros/latex/contrib/reledmac/examples/2-performances.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf Binary files differindex ed0755c95b..9030d23e94 100644 --- a/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf +++ b/macros/latex/contrib/reledmac/examples/2-reledmac-right-to-left.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf Binary files differindex a0e92d1b90..53b0429efc 100644 --- a/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf +++ b/macros/latex/contrib/reledmac/examples/2-subdivision-number-in-header.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf Binary files differindex 22f3ac9ed3..7872a6a918 100644 --- a/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf +++ b/macros/latex/contrib/reledmac/examples/2-titles_in_line_numbering_with_notes.pdf diff --git a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf Binary files differindex 6edc466546..d751ef78ff 100644 --- a/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf +++ b/macros/latex/contrib/reledmac/examples/2-titles_not_in_line_numbering.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf Binary files differindex ae6daea2f3..d05683ac0a 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_columns_different_languages.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf Binary files differindex 65e77b6045..71adb5d7bb 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_mwe.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf Binary files differindex 7864905fc5..3d12b5b07b 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf Binary files differindex 147ece9039..36e5904216 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_same_page_number_in_both_side.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf Binary files differindex bc2e485aa7..df79382ca8 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted-nomax.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf Binary files differindex a53aafd365..d68d98ff29 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_advancedshifted.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf Binary files differindex b873ef2634..448dea3da8 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_default.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf Binary files differindex 4437bcd188..37ac4daee6 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax-shifted.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf Binary files differindex 0c36cb9564..d69077e19b 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nomax.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf Binary files differindex 073be3c769..692832cc52 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_nosync.pdf diff --git a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf Binary files differindex 7a13994ca4..bf85737443 100644 --- a/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf +++ b/macros/latex/contrib/reledmac/examples/3-reledpar_sync_setting_shifted.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf Binary files differindex 5dbce10161..e9fb82d345 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column-continuous-numbering.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf Binary files differindex 4c574e496b..6136c9957b 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_column_mix_with_not_column.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf Binary files differindex 012bb74b4e..0fea810dc6 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_alignment.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf Binary files differindex fc67986e5a..b492f69121 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_columns_titles_in_line_numbering_with_notes.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf Binary files differindex 58d08bf3bd..d4643edcb3 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_inside-outside-columns.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf Binary files differindex 36f6321386..09f3b72602 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_one_series_per_pstart.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf Binary files differindex db1ccbc5a7..4ccf4308cd 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_long_notes.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf Binary files differindex d71f06d80e..000ffd301c 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_notes_leftpage.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf Binary files differindex c6186efd4d..3baa1de986 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_paragraph_separator_between.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf Binary files differindex a36ab701dd..7a63bced17 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf Binary files differindex 33338d8f63..e68462600d 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_titles_not_in_line_numbering.pdf diff --git a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf Binary files differindex c8200f5ff5..120bdeb43a 100644 --- a/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf +++ b/macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf diff --git a/macros/latex/contrib/reledmac/migration.pdf b/macros/latex/contrib/reledmac/migration.pdf Binary files differindex 50d46b721e..1512a20fea 100644 --- a/macros/latex/contrib/reledmac/migration.pdf +++ b/macros/latex/contrib/reledmac/migration.pdf diff --git a/macros/latex/contrib/reledmac/reledmac.dtx b/macros/latex/contrib/reledmac/reledmac.dtx index 2109ca38b5..8b43d5b6be 100644 --- a/macros/latex/contrib/reledmac/reledmac.dtx +++ b/macros/latex/contrib/reledmac/reledmac.dtx @@ -786,7 +786,7 @@ % Briefe}, series {\sc I, III, VII,} being edited by Dr.\ H.\ % Breger\index{Breger, Herbert}, Dr.~N. G\"adeke\index{G\"adeke, Nora} and % others at the Leibniz-Archiv, Nieders\"achsische Landesbibliothek, Hannover. -% (see \url{http://www.nlb-hannover.de/Leibniz})} +% (see \url{https://www.gwlb.de/leibniz/digitale-ressourcen/repositorium-des-leibniz-archivs})} % Theodosius's\index{Theodosius} {\em Spherics}, the German {\em % Algorismus} of Sacrobosco,\index{Sacrobosco} the Sanskrit text of the % {\em K\={a}\'{s}ik\={a}\-v\d{r}tti\/} of V\={a}mana\index{Vamana} and @@ -3962,7 +3962,7 @@ % & It makes the peas taste funny \\ % & And get my tummy gummy.\edindex{gummy} & % & But it keeps them on the knife. -% \end{edtabularr} +% \end{edtabularl} % \pend % \endnumbering % \end{verbatim} diff --git a/macros/latex/contrib/reledmac/reledmac.pdf b/macros/latex/contrib/reledmac/reledmac.pdf Binary files differindex bc1f8b20f9..bf4c1a04d6 100644 --- a/macros/latex/contrib/reledmac/reledmac.pdf +++ b/macros/latex/contrib/reledmac/reledmac.pdf diff --git a/macros/latex/contrib/reledmac/reledpar.dtx b/macros/latex/contrib/reledmac/reledpar.dtx index aff1d03da1..1d09e9c4ef 100644 --- a/macros/latex/contrib/reledmac/reledpar.dtx +++ b/macros/latex/contrib/reledmac/reledpar.dtx @@ -354,6 +354,7 @@ % \changes{v2.25.4}{2023/07/04}{Fix bug with \protect\cs{linenumOnlyPagesForColumnsR} and multiple numbered sections} % \changes{v2.25.5}{2023/07/20}{Fix bug with hyperlink when using \protect\cs{footnoteXnomk}} % \changes{v2.25.6}{2024/02/26}{Make \protect\cs{doinsidethislinehook} working on right side} +% \changes{v2.25.7}{2024/07/23}{Fix compatibility with \protect\package{polyglossia} 2.2} % ^^A PW added following as the definitions are at some unknown elsewhere % % \newcommand{\egstart}{% @@ -1410,7 +1411,7 @@ % \begin{macrocode} %<*code> \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{reledpar}[2024/05/11 v2.25.6a reledmac extension for parallel texts]% +\ProvidesPackage{reledpar}[2024/07/23 v2.25.7 reledmac extension for parallel texts]% % \end{macrocode} % \subsection{Package's requirement} @@ -5543,17 +5544,6 @@ % To counter this, we have to make sure that the correct language is % used at the proper times. % -% \begin{macro}{\ifl@dusedbabel} -% \begin{macro}{\l@dusedbabelfalse} -% \begin{macro}{\l@dusedbabeltrue} -% A flag for checking if \verb?babel? has been used as a package. -% \begin{macrocode} -\newif\ifl@dusedbabel -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% % \changes{v1.8.0}{2014/08/05}{Suppress \protect\cs{ifl@dsamelang} which did not work and was not logical, because both columns could have the same language but not the main language of the document.} % % \begin{macro}{\l@dchecklang} @@ -5598,20 +5588,18 @@ % Now do the \protect\package{babel} or \protect\package{polyglossia} fix or, if necessary. % \begin{macrocode} \AtBeginDocument{% - \@ifundefined{xpg@main@language}{% + \@ifpackageloaded{babel}{% \@ifundefined{bbl@main@language}{% % \end{macrocode} % Either \protect\package{babel} has not been used or it has been used with no % specified language. % \begin{macrocode} - \l@dusedbabelfalse }{% % \end{macrocode} % Here we deal with the case where babel has been used. \protect\cs{selectlanguage} % has to be redefined to use our version of \protect\cs{bbl@set@language} and to % store the left or right language. % \begin{macrocode} - \l@dusedbabeltrue \let\l@doldselectlanguage\selectlanguage \let\l@doldbbl@set@language\bbl@set@language \renewcommand{\selectlanguage}[1]{% @@ -5635,7 +5623,7 @@ \gdef\theledlanguageL{\bbl@main@language}% \gdef\theledlanguageR{\bbl@main@language}% }% - } + }{}% % \end{macrocode} % If use \protect\package{polyglossia} % \changes{v1.8.0}{2014/08/05}{Correct left/right language setting with polyglossia.} @@ -5643,25 +5631,28 @@ % \changes{v2.22.4}{2019/11/04}{Provide compatibility with the latest version of polyglossia (v1.45).} % \changes{v2.23.0}{2020/03/08}{Restore compatibility with versions of polyglossia prior to v1.45.} % \begin{macrocode} - {% - \@ifpackagelater{polyglossia}{2022/04/10}{}{\led@err@polyglossiaTooOld}% - \let\old@otherlanguage\otherlanguage% - \renewcommand{\otherlanguage}[2][]{% - \selectlanguage[#1]{#2}% - \xpg@set@language@only@aux[#1]{#2}% - \ifledRcol \gdef\theledlanguageR{#2}% - \else \gdef\theledlanguageL{#2}% - \fi}% + \@ifpackageloaded{polyglossia}{% + \@ifpackagelater{polyglossia}{2024/07/15}{}{\led@err@polyglossiaTooOld}% \renewcommand{\l@duselanguage}[1]{% \csuse{no\languagename @numbers}% - \expandafter\@select@language\expandafter{#1}% + \selectlanguage*{#1}% + }% + \AddToHook{env/Leftside/begin}{% + \AddToHookNext{cmd/polyglossia@language@switched/after}{% + \xdef\theledlanguageL{\languagename}% + }% }% - \xdef\theledlanguageL{\xpg@main@language}% - \xdef\theledlanguageR{\xpg@main@language}% + \AddToHook{env/Rightside/begin}{% + \AddToHookNext{cmd/polyglossia@language@switched/after}{% + \xdef\theledlanguageR{\languagename}% + }% + }% + \xdef\theledlanguageL{\mainlanguagename}% + \xdef\theledlanguageR{\mainlanguagename}% % \end{macrocode} % That is it. % \begin{macrocode} - }% + }{}% }% % \end{macrocode} % \end{macro} diff --git a/macros/latex/contrib/reledmac/reledpar.pdf b/macros/latex/contrib/reledmac/reledpar.pdf Binary files differindex 84a3fd4ec0..09730ec178 100644 --- a/macros/latex/contrib/reledmac/reledpar.pdf +++ b/macros/latex/contrib/reledmac/reledpar.pdf diff --git a/macros/latex/contrib/reptheorem/reptheorem.dtx b/macros/latex/contrib/reptheorem/reptheorem.dtx index d96f740fec..b0f537af97 100644 --- a/macros/latex/contrib/reptheorem/reptheorem.dtx +++ b/macros/latex/contrib/reptheorem/reptheorem.dtx @@ -12,7 +12,7 @@ % % This work has the LPPL maintenance status `maintained'. % -% The Current Maintainer of this work is Jesse Sraat. +% The Current Maintainer of this work is Jesse Straat. % % This work consists of the main file reptheorem.dtx % and the derived files @@ -89,7 +89,7 @@ License: [LPPL1.3c](https://www.latex-project.org/lppl.txt) \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: reptheorem 2024-03-27 v1.0} +\Msg{* Package: reptheorem 2024-08-12 v1.1} \Msg{************************************************************************} \keepsilent @@ -109,7 +109,7 @@ version 2008 or later. This work has the LPPL maintenance status `maintained'. -The Current Maintainer of this work is Jesse Sraat. +The Current Maintainer of this work is Jesse Straat. This work consists of the main file reptheorem.dtx and the derived files @@ -246,9 +246,9 @@ colorlinks, % environment \DescribeEnv{makethm} |makethm| is % used for. % \begin{verbatim} -% \begin{makethm}{theorem}{thm:Yoneda}[Yoneda Lemma]{ +% \begin{makethm}{theorem}{thm:Yoneda}[Yoneda Lemma] % For \(F\colon \mathcal{C}\to \mathbf{Set}\) a functor, -% \([\mathcal{C}^\mathrm{op},\mathbf{Set}](YA, F) \cong F(A)\)% +% \([\mathcal{C}^\mathrm{op},\mathbf{Set}](YA, F) \cong F(A)\) % for all objects \(A\) in \(\mathcal{C}\). % \end{makethm} % \end{verbatim} @@ -271,33 +271,33 @@ colorlinks, % the theorem is proven at a later point, or we want to % ``tease'' the reader with a powerful theorem that will be % proven later in the chapter. To do this, we use the -% \DescribeMacro{repthm} command, as follows. +% \DescribeMacro{\repthm} command, as follows. % \begin{verbatim} -% \repthm{theorem}{thm:Yoneda} +% \repthm{thm:Yoneda} % \end{verbatim} % This outputs the theorem again. -% \repthm{theorem}{thm:Yoneda} +% \repthm{thm:Yoneda} % The label of this theorem is a |\ref|, and automatically % links to the original theorem statement.\par % If the original theorem statement exists in a different % file, or has not been created yet, we can add a placeholder % alt text to the |\repthm| as an optional argument, which % only displays if the theorem is undefined. For example, -% |\repthm{theorem}{thm:foo}[bar]| returns -% \repthm{theorem}{thm:foo}[bar] +% |\repthm{thm:foo}[bar]| returns +% \repthm{thm:foo}[bar] % If we do the same without providing an alt text, we get -% \repthm{theorem}{thm:foo} +% \repthm{thm:foo} % together with a warning.\par % Since we're using the |.aux| file, it is possible % to replicate a theorem before it is stated. For example, % \begin{verbatim} -% \repthm{theorem}{thm:later} +% \repthm{thm:later} % \begin{makethm}{theorem}{thm:later}[Later] % Alligator! % \end{makethm} % \end{verbatim} % returns -% \repthm{theorem}{thm:later} +% \repthm{thm:later} % \begin{makethm}{theorem}{thm:later}[Later] % Alligator % \end{makethm} @@ -352,7 +352,7 @@ colorlinks, % \section{Source code} % \begin{macrocode} %<*package> -\ProvidesPackage{reptheorem}[2024-03-27 v1.0 Reptheorem package] +\ProvidesPackage{reptheorem}[2024-08-12 v1.1 Reptheorem package] % \end{macrocode} % % \begin{macro}{\theoremfile} @@ -387,6 +387,7 @@ colorlinks, % \end{macro} % % \begin{environment}{makethm} +% \changes{v1.1}{2024/05/03}{Now saves theorem environment type, breaking backwards compatibility} % On to defining the actual theorems to be saved. % \begin{macrocode} \NewDocumentEnvironment{makethm}{ m m o +b } @@ -403,15 +404,19 @@ colorlinks, } #4 \end{#1} + \expandafter\gdef\csname thmtype@#2\endcsname{#1} \expandafter\long\expandafter\gdef\csname thm@#2\endcsname{#4}% \expandafter\gdef\csname thmdesc@#2\endcsname{#3}% % Saving parameters to aux file \long\gdef\@thmoutput{% + \string\expandafter\string\gdef\noexpand% + \csname thmtype@#2\string\endcsname{#1}% + ^^J% \string\expandafter\string\long\string\expandafter% \string\gdef\noexpand\csname thm@#2\string\endcsname{#4}% ^^J% - \string\expandafter\string\expandafter% - \string\gdef\noexpand\csname thmdesc@#2\string\endcsname{#3}% + \string\expandafter\string\gdef\noexpand% + \csname thmdesc@#2\string\endcsname{#3}% } \write\@auxout{\@thmoutput} \if\reptheorem@theoremfile\relax @@ -426,53 +431,60 @@ colorlinks, % \end{environment} % % \begin{macro}{\repthm} +% \changes{v1.1}{2024/05/03}{Now saves theorem environment type, breaking backwards compatibility} % To repeat a theorem, use the |\repthm| command. % The type of theorem is not saved, so it is necessary to % respecify it each time a theorem is repeated. % \begin{macrocode} \newcounter{old@counter} -\NewDocumentCommand{\repthm}{ m m +o }{ - % m: the type of theorem environment +\NewDocumentCommand{\repthm}{ m +o }{ % m: the name of the theorem % o: alt text \begingroup - \setcounter{old@counter}{\value{#1}} + % Check if thmtype is given + \ifcsname thmtype@#1\endcsname% + \expandafter\let\expandafter\@@thmtype\csname thmtype@#1\endcsname% + \else% + \def\@@thmtype{theorem}% + \fi% + % % Save theorem counter so we don't increase it - \def\thetheorem{\ref{#2}} + \setcounter{old@counter}{\value{\@@thmtype}} + \def\thetheorem{\ref{#1}} \let\@@theoremnotdefined\relax % - \ifcsname thm@#2\endcsname% Check if theorem is even defined + \ifcsname thm@#1\endcsname% Check if theorem is even defined % Theorem is defined - \expandafter\edef\expandafter\@@thmdesc{\csname thmdesc@#2\endcsname}% - \expandafter\let\expandafter\@@thm\csname thm@#2\endcsname + \expandafter\edef\expandafter\@@thmdesc{\csname thmdesc@#1\endcsname}% + \expandafter\let\expandafter\@@thm\csname thm@#1\endcsname % Output theorem \IfValueTF{\@@thmdesc}{% Check if theorem has name - \begin{#1}[\@@thmdesc] + \begin{\@@thmtype}[\@@thmdesc] \@@thm - \end{#1} + \end{\@@thmtype} }{% No optionals - \begin{#1} + \begin{\@@thmtype} \@@thm - \end{#1} + \end{\@@thmtype} } \else % Theorem undefined - \IfValueTF{#3}{ - \begin{#1} - #3 - \end{#1} + \IfValueTF{#2}{ + \begin{\@@thmtype} + #2 + \end{\@@thmtype} }{% No theorem or alt text provided: throw warning - \begin{#1} - \end{#1} + \begin{\@@thmtype} + \end{\@@thmtype} \PackageWarning{reptheorem}{% - Theorem #2 not defined; rebuild your project. + Theorem #1 not defined; rebuild your project. If the issue persists, create the theorem using \begin{makethm} or consider adding alt text to \repthm using the optional parameter% } } \fi - \setcounter{#1}{\value{old@counter}} + \setcounter{\@@thmtype}{\value{old@counter}} % Reset theorem counter back to original \endgroup } @@ -483,4 +495,4 @@ colorlinks, % \begin{macrocode} %</package> % \end{macrocode} -%\Finale +%\Finale
\ No newline at end of file diff --git a/macros/latex/contrib/reptheorem/reptheorem.ins b/macros/latex/contrib/reptheorem/reptheorem.ins index c85a0d2ff3..be179b4d9a 100644 --- a/macros/latex/contrib/reptheorem/reptheorem.ins +++ b/macros/latex/contrib/reptheorem/reptheorem.ins @@ -27,7 +27,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: reptheorem 2024-03-27 v1.0} +\Msg{* Package: reptheorem 2024-08-12 v1.1} \Msg{************************************************************************} \keepsilent diff --git a/macros/latex/contrib/reptheorem/reptheorem.pdf b/macros/latex/contrib/reptheorem/reptheorem.pdf Binary files differindex 31caef6e5d..cb574aa07c 100644 --- a/macros/latex/contrib/reptheorem/reptheorem.pdf +++ b/macros/latex/contrib/reptheorem/reptheorem.pdf diff --git a/macros/latex/contrib/rpgicons/README.md b/macros/latex/contrib/rpgicons/README.md index e889b70b03..6de01a2586 100644 --- a/macros/latex/contrib/rpgicons/README.md +++ b/macros/latex/contrib/rpgicons/README.md @@ -1,4 +1,4 @@ -![Version 1.8.3](https://img.shields.io/badge/version-1.8.3-blue) +![Version 1.8.4](https://img.shields.io/badge/version-1.8.4-blue) <img width="200" alt="rpgicons-example" src="https://github.com/jasperhabicht/rpgicons/assets/6378801/81a1d0aa-7a4f-4f83-bbdc-3bc3332023b2" /> diff --git a/macros/latex/contrib/rpgicons/rpgicons-doc.pdf b/macros/latex/contrib/rpgicons/rpgicons-doc.pdf Binary files differindex 7fa0c036d7..dc0bce82b9 100644 --- a/macros/latex/contrib/rpgicons/rpgicons-doc.pdf +++ b/macros/latex/contrib/rpgicons/rpgicons-doc.pdf diff --git a/macros/latex/contrib/rpgicons/rpgicons-doc.tex b/macros/latex/contrib/rpgicons/rpgicons-doc.tex index 7eef59a1a4..9aebfdcd52 100644 --- a/macros/latex/contrib/rpgicons/rpgicons-doc.tex +++ b/macros/latex/contrib/rpgicons/rpgicons-doc.tex @@ -11,8 +11,8 @@ % This work has the LPPL maintenance status `maintained'. % \documentclass[a4paper]{article} -\def\rpgiconsfileversion{1.8.3} -\def\rpgiconsfiledate{15 May 2024} +\def\rpgiconsfileversion{1.8.4} +\def\rpgiconsfiledate{8 August 2024} \usepackage[T1]{fontenc} \usepackage{Alegreya} @@ -262,6 +262,7 @@ \changes{v1.8.0}{2024/03/24}{Unified wrapper to load either package variant.} \changes{v1.8.2}{2024/04/28}{Roll dice syntax for PGF variant.} \changes{v1.8.3}{2024/05/15}{Minor compatibility fix. Example of how to use pics added to ducumentation.} +\changes{v1.8.3}{2024/05/15}{Bug fix in evocation spellschool shape. Unification of frames in PGF and L3 variants.} \begin{document} diff --git a/macros/latex/contrib/rpgicons/rpgicons-l3.sty b/macros/latex/contrib/rpgicons/rpgicons-l3.sty index 3103502bf3..cc33d61bf2 100644 --- a/macros/latex/contrib/rpgicons/rpgicons-l3.sty +++ b/macros/latex/contrib/rpgicons/rpgicons-l3.sty @@ -10,8 +10,8 @@ % % This work has the LPPL maintenance status `maintained'. % -\ProvidesExplPackage {rpgicons-l3} {2024-05-15} {1.8.3} - {rpg Icons Package (l3 Variant)} +\ProvidesExplPackage {rpgicons-l3} {2024-08-08} {1.8.4} + {RPG Icons Package (l3 Variant)} \bool_new:N \l__rpgicons_unicode_mode_bool \sys_if_engine_luatex:T { @@ -792,22 +792,22 @@ \draw_path_lineto:n { 0cm , -.425cm } \draw_path_moveto:n { -.425cm , 0cm } \draw_path_lineto:n { .425cm , 0cm } - \draw_path_moveto:n { \draw_point_polar:nnn { 30 } { .325cm } { .225cm } } - \draw_path_lineto:n { \draw_point_polar:nn { 30 } { .4cm} } - \draw_path_moveto:n { \draw_point_polar:nnn { 60 } { .325cm } { .225cm } } - \draw_path_lineto:n { \draw_point_polar:nn { 60 } { .4cm} } - \draw_path_moveto:n { \draw_point_polar:nnn { 120 } { .325cm } { .225cm } } - \draw_path_lineto:n { \draw_point_polar:nn { 120 } { .4cm} } - \draw_path_moveto:n { \draw_point_polar:nnn { 150 } { .325cm } { .225cm } } - \draw_path_lineto:n { \draw_point_polar:nn { 150 } { .4cm} } - \draw_path_moveto:n { \draw_point_polar:nnn { 210 } { .325cm } { .225cm } } - \draw_path_lineto:n { \draw_point_polar:nn { 210 } { .4cm} } - \draw_path_moveto:n { \draw_point_polar:nnn { 240 } { .325cm } { .225cm } } - \draw_path_lineto:n { \draw_point_polar:nn { 240 } { .4cm} } - \draw_path_moveto:n { \draw_point_polar:nnn { 300 } { .325cm } { .225cm } } - \draw_path_lineto:n { \draw_point_polar:nn { 300 } { .4cm} } - \draw_path_moveto:n { \draw_point_polar:nnn { 330 } { .325cm } { .225cm } } - \draw_path_lineto:n { \draw_point_polar:nn { 330 } { .4cm} } + \draw_path_moveto:n { \draw_point_polar:nnn { .325cm } { .225cm } { 30 } } + \draw_path_lineto:n { \draw_point_polar:nn { .4cm } { 30 } } + \draw_path_moveto:n { \draw_point_polar:nnn { .325cm } { .225cm } { 60 } } + \draw_path_lineto:n { \draw_point_polar:nn { .4cm } { 60 } } + \draw_path_moveto:n { \draw_point_polar:nnn { .325cm } { .225cm } { 120 } } + \draw_path_lineto:n { \draw_point_polar:nn { .4cm } { 120 } } + \draw_path_moveto:n { \draw_point_polar:nnn { .325cm } { .225cm } { 150 } } + \draw_path_lineto:n { \draw_point_polar:nn { .4cm } { 150 } } + \draw_path_moveto:n { \draw_point_polar:nnn { .325cm } { .225cm } { 210 } } + \draw_path_lineto:n { \draw_point_polar:nn { .4cm } { 210 } } + \draw_path_moveto:n { \draw_point_polar:nnn { .325cm } { .225cm } { 240 } } + \draw_path_lineto:n { \draw_point_polar:nn { .4cm } { 240 } } + \draw_path_moveto:n { \draw_point_polar:nnn { .325cm } { .225cm } { 300 } } + \draw_path_lineto:n { \draw_point_polar:nn { .4cm } { 300 } } + \draw_path_moveto:n { \draw_point_polar:nnn { .325cm } { .225cm } { 330 } } + \draw_path_lineto:n { \draw_point_polar:nn { .4cm } { 330 } } } \cs_new:Npn \rpgicons_draw_shape_illusion: { @@ -1546,7 +1546,7 @@ } \cs_new:Npn \rpgicons_draw_frame_damage: { - \draw_path_circle:nn { 0cm , 0cm } { .45cm } + \draw_path_circle:nn { 0cm , 0cm } { .5cm } } % USER COMMANDS @@ -1910,7 +1910,7 @@ } \cs_if_exist:NF \spell { \cs_new_eq:NN \spell \RPGIconsSpell } -\NewDocumentCommand { \RPGIconsSpellschool } { O{positive} m O{} } { +\NewDocumentCommand { \RPGIconsSpellschool } { O{negative} m O{} } { \group_begin: \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#3} \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_spellschool_style_clist { , } } diff --git a/macros/latex/contrib/rpgicons/rpgicons-pgf.sty b/macros/latex/contrib/rpgicons/rpgicons-pgf.sty index 0e0c037187..dd75a7b4c0 100644 --- a/macros/latex/contrib/rpgicons/rpgicons-pgf.sty +++ b/macros/latex/contrib/rpgicons/rpgicons-pgf.sty @@ -11,7 +11,7 @@ % This work has the LPPL maintenance status `maintained'. % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{rpgicons-pgf}[2024-05-15 rpg Icons Package (PGF Variant) (1.8.3)] +\ProvidesPackage{rpgicons-pgf}[2024-08-08 RPG Icons Package (PGF Variant) (1.8.4)] % provide pics option \newif\ifrpgicons@pics\rpgicons@picsfalse diff --git a/macros/latex/contrib/rpgicons/rpgicons.sty b/macros/latex/contrib/rpgicons/rpgicons.sty index 8079232a4f..63a5fa2fc0 100644 --- a/macros/latex/contrib/rpgicons/rpgicons.sty +++ b/macros/latex/contrib/rpgicons/rpgicons.sty @@ -10,8 +10,8 @@ % % This work has the LPPL maintenance status `maintained'. % -\ProvidesExplPackage {rpgicons} {2024-05-15} {1.8.3} - {rpg Icons Package} +\ProvidesExplPackage {rpgicons} {2024-08-08} {1.8.4} + {RPG Icons Package} \bool_new:N \l__rpgicons_use_legacy_variant_bool \clist_new:N \l__rpgicons_forwarded_options_clist diff --git a/macros/latex/contrib/se2thesis/CHANGELOG.md b/macros/latex/contrib/se2thesis/CHANGELOG.md index fa60e6d1b0..2d81b57f6f 100644 --- a/macros/latex/contrib/se2thesis/CHANGELOG.md +++ b/macros/latex/contrib/se2thesis/CHANGELOG.md @@ -7,6 +7,36 @@ and this project adheres to ## [Unreleased] +## [v4.3.2] – 2024–08–12 + +### Fixed + +- Prevent line break in the lower back title if one added a manual line break + using `\\` to the title in order to layout it properly for the front title + page. + +## [v4.3.1] – 2024–07–31 + +### Added + +- Add a hint on the usage of `scrreprt` as the base class if one wants to have + numbered bibliography or appendices. +- Add section in the documentation on the usage of babel, its shorthands for + German and English to re-enable hyphenation of compound words, and the + conflicting package `hyphenat`. + +### Fixed + +- Fix list of implicitly loaded packages. + +## [v4.3.0] – 2024–07–23 + +### Fixed + +- The spelling bachelor thesis and master thesis are widely used but seem to be + wrong. According to the Oxford English Dictionary, the spelling shall be + bachelor's thesis and master's thesis. + ## [v4.2.0] – 2024–06–25 ### Fixed @@ -237,7 +267,10 @@ These changes might be breaking changes! ### Added - First official release -[Unreleased]: https://github.com/se2p/se2thesis/compare/v4.2.0...HEAD +[Unreleased]: https://github.com/se2p/se2thesis/compare/v4.3.2...HEAD +[v4.3.2]: https://github.com/se2p/se2thesis/compare/v4.3.2...v4.3.1 +[v4.3.1]: https://github.com/se2p/se2thesis/compare/v4.3.1...v4.3.0 +[v4.3.0]: https://github.com/se2p/se2thesis/compare/v4.3.0...v4.2.0 [v4.2.0]: https://github.com/se2p/se2thesis/compare/v4.2.0...v4.1.0 [v4.1.0]: https://github.com/se2p/se2thesis/compare/v4.1.0...v4.0.3 [v4.0.3]: https://github.com/se2p/se2thesis/compare/v4.0.3...v4.0.2 diff --git a/macros/latex/contrib/se2thesis/se2colors.dtx b/macros/latex/contrib/se2thesis/se2colors.dtx index 09e6523a9e..7b0b5d81f7 100644 --- a/macros/latex/contrib/se2thesis/se2colors.dtx +++ b/macros/latex/contrib/se2thesis/se2colors.dtx @@ -231,7 +231,7 @@ % % Identify the package and give the overall version information. % \begin{macrocode} -\ProvidesExplPackage {se2colors} {2024-06-25} {4.2.0} +\ProvidesExplPackage {se2colors} {2024-08-12} {4.3.2} {A colour support package for the se2thesis bundle} % \end{macrocode} % diff --git a/macros/latex/contrib/se2thesis/se2fonts.dtx b/macros/latex/contrib/se2thesis/se2fonts.dtx index bfc3210cc0..5ede585b75 100644 --- a/macros/latex/contrib/se2thesis/se2fonts.dtx +++ b/macros/latex/contrib/se2thesis/se2fonts.dtx @@ -151,7 +151,7 @@ % % Identify the package and give the overall version information. % \begin{macrocode} -\ProvidesExplPackage {se2fonts} {2024-06-25} {4.2.0} +\ProvidesExplPackage {se2fonts} {2024-08-12} {4.3.2} {A font-selection support package for the se2thesis bundle} % \end{macrocode} % diff --git a/macros/latex/contrib/se2thesis/se2packages.dtx b/macros/latex/contrib/se2thesis/se2packages.dtx index 4c915c3eb5..3ad8d99b0a 100644 --- a/macros/latex/contrib/se2thesis/se2packages.dtx +++ b/macros/latex/contrib/se2thesis/se2packages.dtx @@ -446,6 +446,8 @@ % \bibitem{DBLP:journals/sttt/BeyerLW19} Dirk Beyer, Stefan Löwe, and Philipp % Wendler: \emph{Reliable benchmarking: requirements and solutions}. STTT % 21(1): 1--29 (2019) +% \bibitem{Knu86} Donald E. Knuth: \emph{The \TeX{}book}. Addison-Wesley +% (1986) % \end{thebibliography} % % @@ -470,7 +472,7 @@ % % Identify the package and give the overall version information. % \begin{macrocode} -\ProvidesExplPackage {se2packages} {2024-06-25} {4.2.0} +\ProvidesExplPackage {se2packages} {2024-08-12} {4.3.2} {Supporting packages for the se2thesis bundle} % \end{macrocode} % diff --git a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf Binary files differindex 703086bd37..4d224fe981 100644 --- a/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf +++ b/macros/latex/contrib/se2thesis/se2thesis-master-thesis-example.pdf diff --git a/macros/latex/contrib/se2thesis/se2thesis.dtx b/macros/latex/contrib/se2thesis/se2thesis.dtx index 0a6705aaa5..6d29f97482 100644 --- a/macros/latex/contrib/se2thesis/se2thesis.dtx +++ b/macros/latex/contrib/se2thesis/se2thesis.dtx @@ -62,7 +62,7 @@ % internet, causing each thesis looking differently. % % The author of this package provided a template, -% which he initially created for his bachelor and master thesis, +% which he initially created for his bachelor's and master's thesis, % that was recommended and used by many students. % The implementation of that template, however, was very hacky and required % some changes over time. @@ -74,7 +74,7 @@ % The bundle itself consists of several \LaTeX{} classes and packages % that also allow reuse of various parts of it. % Its main class is the \pkg{se2thesis} document class, -% an extension of the \KOMAScript{} |scrreprt| document class. +% an extension of the \KOMAScript{} |scrbook| document class. % The packages \pkg{se2colors} and \pkg{se2fonts} provide necessary % colour and font settings for the \pkg{se2thesis} class; % the \pkg{se2packages} allows to load several recommended packages~(see @@ -186,9 +186,9 @@ % \pkg{expl3}, \pkg{l3keys2e} in case one uses a \LaTeX{} kernel from before % 2022--06--01, \pkg{graphicx}, \pkg{translations}, \KOMAScript, \pkg{xcolor}, % \pkg{ifthen}, as well as \pkg{fontspec}, \pkg{unicode-math}, -% and \pkg{libertinus-otf} if one uses \LuaTeX{}; +% \pkg{inconsolata-nerd-font} and \pkg{libertinus-otf} if one uses \LuaTeX{}; % for \pdfLaTeX{} we load \pkg{fontenc}, \pkg{libertinus-type1}, and -% \pkg{AnonymousPro} instead of the latter three. +% \pkg{inconsolata} instead of the latter three. % Furthermore, we load \pkg{microtype}; % when using \LuaTeX{}, we also load \pkg{lua-widow-control} and \pkg{selnolig}. % @@ -220,6 +220,11 @@ % \emph{Note:} you cannot use \cls{scrartcl} because it does not provide % the required |chapter| sectioning. % Default is |scrbook|. +% +% Please note that if you want to have the bibliography numbered or use an +% appendix with alpha-numbering (A, B, \dots), you want to explicitly use +% |scrreprt| as the base class; for some (currently unknown) reason this does +% not work with the default |scrbook|. % \end{function} % \begin{function}{paper} % \begin{syntax} @@ -243,9 +248,9 @@ % \end{syntax} % Defines the type of the thesis. % Possible values are: -% |bachelor| for a bachelor thesis, |bachelorproposal| for a proposal to -% a bachelor thesis, |master| for a master thesis, |masterproposal| for -% a proposal to a master thesis, |phdproposal| for a proposal to a PhD thesis, +% |bachelor| for a bachelor's thesis, |bachelorproposal| for a proposal to +% a bachelor's thesis, |master| for a master's thesis, |masterproposal| for +% a proposal to a master's thesis, |phdproposal| for a proposal to a PhD thesis, % |phd| for a PhD thesis in the natural sciences, |phdeng| for a PhD thesis % in engineering, and |phdphil| for a PhD thesis in natural philosophy. % \end{function} @@ -307,7 +312,7 @@ % \cmd{\matrnumber} \marg{matriculation-number} % \end{syntax} % Specify the matriculation number of the student writing the thesis. -% This is required for Bachelor and Master theses. +% This is required for bachelor's and master's theses. % \end{function} % % \begin{function}{\supervisor, \cosupervisor} @@ -437,7 +442,7 @@ % We provide the \env{acknowledgements} environment to typeset acknowledgements % for your thesis. % Using this environment is optional. -% Usually, bachelor and master thesis do not contain such an acknowledgements +% Usually, bachelor's and master's thesis do not contain such an acknowledgements % section, however, there is no general rule to this. % \begin{verbatim} % \begin{acknowledgements}[language] @@ -540,6 +545,48 @@ % question; % however, this can also be arbitrary text. % +% \subsection{Language Support and Hyphenation}\label{sec:doct-se2thesis-lang} +% +% The study regulations of the University of Passau require students to write +% their thesis in either German or English. For both cases it is recommended +% to load a package for the correct hyphenation patters. Usually, one can +% either choose between the \pkg{babel} and \pkg{polyglossia} package. For a +% detailed discussion in the differences and which to choose, please use the +% search engine of your choice. +% +% For this documentation we stick with the \pkg{babel} package, which is often +% considered to be the standard package. +% +% If you write your thesis in German, load \pkg{babel} in your preamble like +% follows +% \begin{verbatim} +% \usepackage[ngerman]{babel} +% \end{verbatim} +% For a thesis in English, you have to also load the German variant plus the +% English one as the default (see \cref{sec:doc-se2thesis-authorship} for an +% explanation) +% \begin{verbatim} +% \usepackage[ngerman,main=UKenglish]{babel} +% \end{verbatim} +% +% Note that by default, \LaTeX{} does not provide hyphenation for compound +% words, which is explained in the \TeX{} Book~\cite[p.~454]{Knu86} and a +% StackExchange post\footnote{\href{https://tex.stackexchange.com/a/63234/14622}{https://tex.stackexchange.com/a/63234/14622}}. The \pkg{babel} package +% provides a way (called shorthands) for German, which allows to reenable +% hyphenation for compound words (as they are common on German). These +% shorthands are by default not available for English, but they can easily be +% added by adding +% \begin{verbatim} +% \useshorthands{"} +% \addto\extrasUKenglish{\languageshorthands{ngerman}} +% \end{verbatim} +% after loading \pkg{babel} with the aforementioned \cmd{\usepackage} +% macro\footnote{see https://tex.stackexchange.com/a/298844/14622}. +% +% \emph{Please note:} loading the \pkg{hyphenat} package is strongly discouraged +% by the \pkg{se2thesis} maintainer because it conflicts with the \env{hyp} +% environment provided by \pkg{se2thesis} (see \cref{sec:doc-se2thesis-summaries}). +% % \end{documentation} % % \clearpage @@ -607,7 +654,7 @@ % % Identify the class and give the overall version number. % \begin{macrocode} -\ProvidesExplClass {se2thesis} {2024-06-25} {4.2.0} +\ProvidesExplClass {se2thesis} {2024-08-12} {4.3.2} {A thesis class for the Chair of Software Engineering II} % \end{macrocode} % @@ -1246,7 +1293,7 @@ % \end{macrocode} % The next block generates the text that describes the thesis. % In case of a PhD thesis, this text is predefined to match the requirements. -% In case of a bachelor or master thesis, or a proposal thereof, we generate +% In case of a bachelor's or master's thesis, or a proposal thereof, we generate % a text based on the values of the |thesistype| load-time option and the % values of the \cmd{\degreeprogramme}, \cmd{\department}, and % \cmd{\institute} variables. @@ -1362,12 +1409,18 @@ % \end{macrocode} % % \begin{macro}{\@lowertitleback} -% Afterwards, override the definition of \cs{@lowertitleback}. +% Afterwards, override the definition of \cs{@lowertitleback}. To prevent +% line breaks in the title (that might be necessary to layout it properly on +% the front title page), we place a group around \cs{@title} and temporarily +% redefine \cmd{\\} to do nothing. % \begin{macrocode} \renewcommand*{\@lowertitleback}{% \group_begin: \noindent\textbf{\@author}:\\ - \emph{\@title}\\ + \group_begin: + \let\\\relax + \emph{\@title} + \group_end:\\ \tl_if_eq:NnT \l_@@_thesis_type_tl { bachelor } { \GetTranslation{Bachelor-thesis},~ } \tl_if_eq:NnT \l_@@_thesis_type_tl { master } @@ -1678,7 +1731,7 @@ % We provide the following English translations. % % \begin{macrocode} -\ProvideDictionaryFor{English}{se2translations}[2024/06/25] +\ProvideDictionaryFor{English}{se2translations}[2024/08/12] \ProvideDictTranslation{abstract}{abstract} \ProvideDictTranslation{Abstract}{Abstract} \ProvideDictTranslation{acknowledgement}{acknowledgement} @@ -1703,10 +1756,10 @@ \ProvideDictTranslation{External}{External Examiner} \ProvideDictTranslation{degreeprogramme}{programme} \ProvideDictTranslation{Degreeprogramme}{Programme} -\ProvideDictTranslation{Bachelor-thesis}{Bachelor Thesis} -\ProvideDictTranslation{Bachelor-thesis-proposal}{Bachelor Thesis Proposal} -\ProvideDictTranslation{Master-thesis}{Master Thesis} -\ProvideDictTranslation{Master-thesis-proposal}{Master Thesis Proposal} +\ProvideDictTranslation{Bachelor-thesis}{Bachelor's Thesis} +\ProvideDictTranslation{Bachelor-thesis-proposal}{Bachelor's Thesis Proposal} +\ProvideDictTranslation{Master-thesis}{Master's Thesis} +\ProvideDictTranslation{Master-thesis-proposal}{Master's Thesis Proposal} \ProvideDictTranslation{PhD-thesis}{PhD Thesis} \ProvideDictTranslation{PhD-thesis-proposal}{PhD Thesis Proposal} \ProvideDictTranslation{date}{date} @@ -1729,7 +1782,7 @@ % We provide the following German translations. % % \begin{macrocode} -\ProvideDictionaryFor{German}{se2translations}[2024/06/25] +\ProvideDictionaryFor{German}{se2translations}[2024/08/12] \ProvideDictTranslation{abstract}{Zusammenfassung} \ProvideDictTranslation{Abstract}{Zusammenfassung} \ProvideDictTranslation{acknowledgement}{Danksagung} diff --git a/macros/latex/contrib/se2thesis/se2thesis.pdf b/macros/latex/contrib/se2thesis/se2thesis.pdf Binary files differindex 84789f2fc3..e37c07abf4 100644 --- a/macros/latex/contrib/se2thesis/se2thesis.pdf +++ b/macros/latex/contrib/se2thesis/se2thesis.pdf diff --git a/macros/latex/contrib/sillypage/sillypage-example.pdf b/macros/latex/contrib/sillypage/sillypage-example.pdf Binary files differindex 3d8180932b..5fa9dd3048 100644 --- a/macros/latex/contrib/sillypage/sillypage-example.pdf +++ b/macros/latex/contrib/sillypage/sillypage-example.pdf diff --git a/macros/latex/contrib/sillypage/sillypage.dtx b/macros/latex/contrib/sillypage/sillypage.dtx index 86982db30d..922d8b6a66 100644 --- a/macros/latex/contrib/sillypage/sillypage.dtx +++ b/macros/latex/contrib/sillypage/sillypage.dtx @@ -19,8 +19,8 @@ % by Phelype Oleinik, Paulo Cereda, samcarter and Ulrike Fischer. % %<*package> -\def\sillypageDate{2023-03-04} -\def\sillypageVersion{1.6} +\def\sillypageDate{2024-07-23} +\def\sillypageVersion{1.7} %</package> %<*driver> \documentclass[a4paper,full]{l3doc} @@ -261,9 +261,13 @@ \newcommand*\@silly { \@@_step:n } \cs_new:Npn \@@_step:n #1 { + \UseTaggingSocket{@@/begin}{#1} + \SuspendTagging{@@} \@@_step_aux:eN { \int_eval:n { \int_mod:nn { #1-1 } { \silly@steps } +1 } } \c_false_bool + \ResumeTagging{@@} + \UseTaggingSocket{@@/end} } % \end{macrocode} % \end{macro} @@ -280,8 +284,12 @@ \newcommand*\@sillynumeral { \@@_numeral:n } \cs_new:Npn \@@_numeral:n #1 { + \UseTaggingSocket{@@/begin}{#1} + \SuspendTagging{@@} \exp_args:Ne \str_map_function:nN { \int_to_base:nn {#1} { 12 } } \@@_numeral_aux:n + \ResumeTagging{@@} + \UseTaggingSocket{@@/end} } \cs_new:Npn \@@_numeral_aux:n #1 { \@@_step_aux:eN { "\char_uppercase:N #1+1 } \c_true_bool } @@ -289,6 +297,28 @@ % \end{macro} % \end{macro} % \end{macro} +% +% \subsection{Tagging Support} + +% \begin{macrocode} +\NewSocket{tagsupport/@@/begin}{1} +\NewSocket{tagsupport/@@/end}{0} +\NewSocketPlug{tagsupport/@@/begin}{tagged} + { + \mode_leave_vertical: + \tag_mc_end_push: + \tag_struct_begin:n {tag=Span} + \tag_mc_begin:n {actualtext=#1} + } +\NewSocketPlug{tagsupport/@@/end}{tagged} + { + \tag_mc_end: + \tag_struct_end: + \tag_mc_begin_pop:n{} + } +\AssignSocketPlug{tagsupport/@@/begin}{tagged} +\AssignSocketPlug{tagsupport/@@/end}{tagged} +% \end{macrocode} % % \subsection{Internals} % diff --git a/macros/latex/contrib/sillypage/sillypage.pdf b/macros/latex/contrib/sillypage/sillypage.pdf Binary files differindex 3efa13e7d7..60305403ac 100644 --- a/macros/latex/contrib/sillypage/sillypage.pdf +++ b/macros/latex/contrib/sillypage/sillypage.pdf diff --git a/macros/latex/contrib/siunitx/CHANGELOG.md b/macros/latex/contrib/siunitx/CHANGELOG.md index 1c81cd5e7a..e5e9b95b0d 100644 --- a/macros/latex/contrib/siunitx/CHANGELOG.md +++ b/macros/latex/contrib/siunitx/CHANGELOG.md @@ -7,6 +7,12 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to ## [Unreleased] +## [v3.3.20] - 2024-08-01 + +### Fixed +- Avoid rounding up when residual is exactly zero (see issue + [\#742](https://github.com/josephwright/siunitx/issues/742)) + ## [v3.3.19] - 2024-06-24 ### Fixed @@ -2120,7 +2126,8 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to ### Added - First public testing release (as `si`) -[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.19...HEAD +[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.20...HEAD +[v3.3.20]: https://github.com/josephwright/siunitx/compare/v3.3.19...v3.3.20 [v3.3.19]: https://github.com/josephwright/siunitx/compare/v3.3.18...v3.3.19 [v3.3.18]: https://github.com/josephwright/siunitx/compare/v3.3.17...v3.3.18 [v3.3.17]: https://github.com/josephwright/siunitx/compare/v3.3.16...v3.3.17 diff --git a/macros/latex/contrib/siunitx/siunitx-code.pdf b/macros/latex/contrib/siunitx/siunitx-code.pdf Binary files differindex 5f4841816e..95f55e6cac 100644 --- a/macros/latex/contrib/siunitx/siunitx-code.pdf +++ b/macros/latex/contrib/siunitx/siunitx-code.pdf diff --git a/macros/latex/contrib/siunitx/siunitx-number.dtx b/macros/latex/contrib/siunitx/siunitx-number.dtx index 2b87514375..4a7e2eb705 100644 --- a/macros/latex/contrib/siunitx/siunitx-number.dtx +++ b/macros/latex/contrib/siunitx/siunitx-number.dtx @@ -2980,7 +2980,13 @@ \str_case:nnF {#1} { { down } { \use_i:nn } - { up } { \use_ii:nn } + { up } + { + \str_if_eq:eeTF + {#2} { \prg_replicate:nn { \tl_count:n {#2} } { 0 } } + { \use_i:nn } + { \use_ii:nn } + } } { \bool_lazy_or:nnTF diff --git a/macros/latex/contrib/siunitx/siunitx.dtx b/macros/latex/contrib/siunitx/siunitx.dtx index bd97dc5750..054d525a88 100644 --- a/macros/latex/contrib/siunitx/siunitx.dtx +++ b/macros/latex/contrib/siunitx/siunitx.dtx @@ -59,6 +59,9 @@ % % \begin{documentation} % +% ^^A API documentation is given on a per-module basis: +% ^^A see the siunitx-<module>.dtx files +% % \end{documentation} % % \begin{implementation} @@ -121,7 +124,7 @@ % % Identify the package and give the over all version information. % \begin{macrocode} -\ProvidesExplPackage {siunitx} {2024-06-24} {3.3.19} +\ProvidesExplPackage {siunitx} {2024-08-01} {3.3.20} {A comprehensive (SI) units package} % \end{macrocode} % diff --git a/macros/latex/contrib/siunitx/siunitx.pdf b/macros/latex/contrib/siunitx/siunitx.pdf Binary files differindex 9d1c9d36db..93a003d7f5 100644 --- a/macros/latex/contrib/siunitx/siunitx.pdf +++ b/macros/latex/contrib/siunitx/siunitx.pdf diff --git a/macros/latex/contrib/siunitx/siunitx.tex b/macros/latex/contrib/siunitx/siunitx.tex index 7c6e147f00..3c0231e5b4 100644 --- a/macros/latex/contrib/siunitx/siunitx.tex +++ b/macros/latex/contrib/siunitx/siunitx.tex @@ -414,7 +414,7 @@ mode. \end{LaTeXdemo} The second operation mode for the \cs{unit} macro is an \enquote{interpreted} -system, Here, each unit, \acro{SI} multiple prefix and power is given a macro +system. Here each unit, \acro{SI} multiple prefix and power is given a macro name. These are entered in a method very similar to the reading of the unit name in English. \begin{LaTeXdemo} @@ -1252,7 +1252,7 @@ font variant which does not feature them. \DescribeOption{text-subscript-command} \DescribeOption{text-superscript-command} In most cases, the commands \cs{textsubscript} and \cs{textsuperscript} are -appropriagte for creating sub- and superscript material in text mode. However, +appropriate for creating sub- and superscript material in text mode. However, when the \pkg{realscripts} package is loaded, it is possible that the output is not as desired. These two commands are therefore available to allow tuning of the results. They can also be used for non-standard effects, for example as diff --git a/macros/latex/contrib/subeqn/CATALOG b/macros/latex/contrib/subeqn/CATALOG new file mode 100644 index 0000000000..9d420c825f --- /dev/null +++ b/macros/latex/contrib/subeqn/CATALOG @@ -0,0 +1,17 @@ +Name: subeqn +Problems-To: texniek at texniek.nl +Author: J.L. Braams, Donald Arsenau, Stephen Gildea +Version: 2.0c + +Description: + +The subeqn package implements an extension to LaTeXs's equation +and eqnarray environments in order to be able to put labels on +individual expressions. To this end two now environments are defined: +subequations and subeqnarray. + +Keywords: latex equations, + +Address: +TeXniek +The Netherlands diff --git a/macros/latex/contrib/subeqn/MANIFEST b/macros/latex/contrib/subeqn/MANIFEST new file mode 100644 index 0000000000..4fe2a9a156 --- /dev/null +++ b/macros/latex/contrib/subeqn/MANIFEST @@ -0,0 +1,19 @@ +% +% CONTENTS OF THE SUBEQN PACKAGE +% ============================== +% +% README -- A short introduction +% MANIFEST -- A list of files +% CATALOG -- An entry for the macro catalog +% +% subeqn.dtx -- A package to number subexpressions of an equation; +% originally by Stephen Gildea, +% rewritten by Donald Arsenau, +% updated for LaTeX2e by Johannes Braams +% subeqn.pdf -- A `printed´ version of subeqn.dtx +% subeqn-sample.pdf -- The `printed' version of the sample file +% +% Installation script for the various parts: +% ------------------------------------------- +% +% subeqn.ins -- produces subeqn.sty and subeqn-sample.tex diff --git a/macros/latex/contrib/subeqn/README b/macros/latex/contrib/subeqn/README new file mode 100644 index 0000000000..25f16dbe87 --- /dev/null +++ b/macros/latex/contrib/subeqn/README @@ -0,0 +1,14 @@ + subeqn bundle + + July 20, 2024 + +This bundle contains a package that extends the functionality +of LaTeX's equation and eqnarray environments. +It provides the environments subequations and subeqnarray. + +Copyright (C) 2024 Johannes L. Braams texniek(at)texniek.nl + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1.3c of the License, or any later version. diff --git a/macros/latex/contrib/subeqn/manifest.txt b/macros/latex/contrib/subeqn/manifest.txt deleted file mode 100644 index 58e7cdb221..0000000000 --- a/macros/latex/contrib/subeqn/manifest.txt +++ /dev/null @@ -1,16 +0,0 @@ -% -% CONTENTS OF THE SUBEQN PACKAGE -% ============================== -% -% manifest.txt -- This file -% -% subeqn.dtx -- A package to number subexpressions of an equation; -% originally by Stephen Gildea, -% rewritten by Donald Arsenau, -% updated for LaTeX2e by me -% subeqn.pdf -- A `printed version of subeqn.dtx -% -% Installation script for the various parts: -% ------------------------------------------- -% -% subeqn.ins -- produces subeqn.sty and subeqn.tex diff --git a/macros/latex/contrib/subeqn/subeqn-sample.pdf b/macros/latex/contrib/subeqn/subeqn-sample.pdf Binary files differnew file mode 100644 index 0000000000..ae4bd5c467 --- /dev/null +++ b/macros/latex/contrib/subeqn/subeqn-sample.pdf diff --git a/macros/latex/contrib/subeqn/subeqn.dtx b/macros/latex/contrib/subeqn/subeqn.dtx index cc49b5f0b5..b9ce870682 100644 --- a/macros/latex/contrib/subeqn/subeqn.dtx +++ b/macros/latex/contrib/subeqn/subeqn.dtx @@ -1,48 +1,49 @@ % \iffalse meta-comment % -% Copyright 1994-2004 Johannes Braams. All rights reserved. -% +% Copyright 1999-2024 Johannes L. Braams. All rights reserved. +% % This file is part of the subeqn package. % ---------------------------------------- -% +% % It may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 +% 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.3 or later is part of all distributions of LaTeX -% version 2003/12/01 or later. -% +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008 or later. +% % This work has the LPPL maintenance status "maintained". -% +% % The Current Maintainer of this work is Johannes Braams. -% -% The list of all files belonging to the subeqn package is -% given in the file `manifest.txt'. -% +% +% The list of all files belonging to the supertabular package is +% given in the file `MANIFEST. +% % The list of derived (unpacked) files belonging to the distribution % and covered by LPPL is defined by the unpacking scripts (with % extension .ins) which are part of the distribution. % \fi -% \CheckSum{76} +% +% \CheckSum{84} % \iffalse -%% File: `subeqn.dtx' -%% Copyright (C) 1999-2004 -%% Donald Arsenau (asnd at reg.triumf.ca), -%% Johannes Braams (TeXniek at braams.cistron.nl) -%% +% Copyright (C) 1999-2024 +% Donald Arsenau at reg.triumf.ca, +% Johannes Braams texniek at texniek.nl +% %<*dtx> \ProvidesFile{subeqn.dtx} %</dtx> %<package>\NeedsTeXFormat{LaTeX2e}[1998/06/01] %<package>\ProvidesPackage{subeqn} -%<sample>\ProvidesFile{subeqn.tex} +%<sample>\ProvidesFile{subeqn-sample.tex} %<driver>\ProvidesFile{subeqn.drv} %\ProvidesFile{subeqn.dtx} - [2004/04/15 v2.0b subnumbering of equations] + [2024/07/21 v2.0c subnumbering of equations] %<*driver> \documentclass{ltxdoc} \begin{document} +\pagestyle{myheadings} \providecommand{\Lenv}[1]{\textsf{#1}} \providecommand{\Lopt}[1]{\textsf{#1}} \providecommand{\pkg}[1]{\texttt{#1}} @@ -60,6 +61,10 @@ % \date{\filedate} % \maketitle % +% \markboth +% {subeqn package version \fileversion\space as of \filedate} +% {subeqn package version \fileversion\space as of \filedate} +% % \section{Introduction} % % Sometimes it is necessary to be able to refer to subexpressions @@ -165,7 +170,7 @@ \global\c@equation\z@ }{% % \end{macrocode} -% When the environment is finished we restore the value ot the +% When the environment is finished we restore the value of the % \texttt{equation} counter. % \begin{macrocode} \global\c@equation\c@mainequation @@ -220,7 +225,14 @@ \usepackage{subeqn} \begin{document} -This is an example ot the use of the \texttt{subeqations} package. +\title{Sample sub-equations} +\author{Johannes L. Braams} +\date{\today} +\maketitle + +\noindent +This is an example of the use of the \texttt{subeqations} +package. First we have a normal \textsf{equation} environment. \begin{equation} \label{a} a^2 + b^2 = c^2 @@ -247,6 +259,7 @@ Now we start sub-numbering. and~\ref{c2}. \end{subequations} +\noindent Now lets start a \textsf{subeqnarray} environment. \begin{subeqnarray} \label{d} diff --git a/macros/latex/contrib/subeqn/subeqn.ins b/macros/latex/contrib/subeqn/subeqn.ins index e9e8689856..b3e295f28c 100644 --- a/macros/latex/contrib/subeqn/subeqn.ins +++ b/macros/latex/contrib/subeqn/subeqn.ins @@ -3,50 +3,41 @@ %% driver files from the doc files in this package when run through %% LaTeX or TeX. %% -%% Copyright 1989-2004 Johannes L. Braams. All rights reserved. -%% -%% This file is part of the subeqn package. -%% ---------------------------------------- -%% -%% It 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. -%% The latest version of this license is in -%% http://www.latex-project.org/lppl.txt -%% and version 1.3 or later is part of all distributions of LaTeX -%% version 2003/12/01 or later. -%% -%% This work has the LPPL maintenance status "maintained". -%% -%% The Current Maintainer of this work is Johannes Braams. -%% -%% The list of all files belonging to the subeqn package is -%% given in the file `manifest.txt. +%% +%% This file is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. %% -%% The list of derived (unpacked) files belonging to the distribution -%% and covered by LPPL is defined by the unpacking scripts (with -%% extension .ins) which are part of the distribution. +%% IMPORTANT NOTICE: +%% +%% Copyright (C) 1999-2024 Johannes L. Braams. All rights reserved. +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt; either +%% version 1.3c of the License, or any later version. %% %% --------------- start of docstrip commands ------------------ %% -\def\filedate{2004/04/15} \def\batchfile{subeqn.ins} \input docstrip.tex +\keepsilent \preamble +This is a generated file. -Copyright (C) 1999-2004 Johannes Braams. All rights reserved. +Copyright (C) 1999-2024 Johannes Braams. All rights reserved. This file was generated from file(s) of the subeqn package. ----------------------------------------------------------- It may be distributed and/or modified under the -conditions of the LaTeX Project Public License, either version 1.3 +conditions of the LaTeX Project Public License, either version 1.3с 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.3 or later is part of all distributions of LaTeX -version 2003/12/01 or later. +and version 1.3с or later is part of all distributions of LaTeX +version 2008 or later. This work has the LPPL maintenance status "maintained". @@ -57,7 +48,7 @@ subeqn package. You may however distribute the subeqn package without such generated files. The list of all files belonging to the subeqn package is -given in the file `manifest.txt. +given in the file `MANIFEST'. The list of derived (unpacked) files belonging to the distribution and covered by LPPL is defined by the unpacking scripts (with @@ -70,7 +61,7 @@ extension .ins) which are part of the distribution. % The sample file -\generateFile{subeqn.tex}{t}{\from{subeqn.dtx}{sample}} +\generateFile{subeqn-sample.tex}{t}{\from{subeqn.dtx}{sample}} \Msg{***********************************************************} \Msg{*} diff --git a/macros/latex/contrib/subeqn/subeqn.pdf b/macros/latex/contrib/subeqn/subeqn.pdf Binary files differindex e2247d3fdc..bf29789b71 100644 --- a/macros/latex/contrib/subeqn/subeqn.pdf +++ b/macros/latex/contrib/subeqn/subeqn.pdf diff --git a/macros/latex/contrib/subeqnarray/CATALOG b/macros/latex/contrib/subeqnarray/CATALOG new file mode 100644 index 0000000000..5e037823f8 --- /dev/null +++ b/macros/latex/contrib/subeqnarray/CATALOG @@ -0,0 +1,17 @@ +Name: subeqnarray +Problems-To: texniek at texniek.nl +Author: J.L. Braams, Donald Arsenau, Stephen Gildea +Version: 2.1e + +Description: + +The subeqnarray package provides two new environments subeqnarray and +subeqnarray* which behave like LaTeX's eqnarray and subeqnarray environments +except the individual lines are numbered like 1a, 1b, 1c etc. +This package is not compatible with the package subeqn. + +Keywords: latex equations, + +Address: +TeXniek +The Netherlands diff --git a/macros/latex/contrib/subeqnarray/manifest.txt b/macros/latex/contrib/subeqnarray/MANIFEST index f54bba3c8a..7c25363971 100644 --- a/macros/latex/contrib/subeqnarray/manifest.txt +++ b/macros/latex/contrib/subeqnarray/MANIFEST @@ -2,14 +2,18 @@ % CONTENTS OF THE SUBEQNARRAY PACKAGE % =================================== % -% manifest.txt -- This file +% README -- A short introduction +% MANIFEST -- A list of files +% CATALOG -- An entry for the macro catalog % % subeqnarray.dtx -- Numbering of individual lines of an eqnarray % environment as subexpressions; not compatible % with subeqn.dtx -% subeqnarray.pdf -- A `printed version of subeqnarray.dtx +% subeqnarray.pdf -- A `printed´ version of subeqnarray.dtx +% subeqnarray-sample.pdf -- The `printed' versino of the sample file % % Installation script for the various parts: % ------------------------------------------- % % subeqnarray.ins -- produces subeqnarray.sty and subeqnarray.tex + diff --git a/macros/latex/contrib/subeqnarray/README b/macros/latex/contrib/subeqnarray/README new file mode 100644 index 0000000000..e52f27f0bb --- /dev/null +++ b/macros/latex/contrib/subeqnarray/README @@ -0,0 +1,16 @@ + subeqnarray bundle + + July 20, 2024 + +This bundle contains a package that provides two new environments +subeqnarray and subeqnarray* which behave like LaTeX's eqnarray and +subeqnarray environments except the individual lines are numbered like +1a, 1b, 1c etc. +This package is not compatible with the package subeqn. + +Copyright (C) 2024 Johannes L. Braams texniek(at)texniek.nl + +This program can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1.3c of the License, or any later version. diff --git a/macros/latex/contrib/subeqnarray/subeqnarray-sample.pdf b/macros/latex/contrib/subeqnarray/subeqnarray-sample.pdf Binary files differnew file mode 100644 index 0000000000..2345c08f58 --- /dev/null +++ b/macros/latex/contrib/subeqnarray/subeqnarray-sample.pdf diff --git a/macros/latex/contrib/subeqnarray/subeqnarray.dtx b/macros/latex/contrib/subeqnarray/subeqnarray.dtx index 5b3555c312..d460ccfca3 100644 --- a/macros/latex/contrib/subeqnarray/subeqnarray.dtx +++ b/macros/latex/contrib/subeqnarray/subeqnarray.dtx @@ -1,43 +1,40 @@ % \iffalse meta-comment % -% Copyright 1994-2004 Johannes Braams. All rights reserved. -% +% Copyright 1998-2024 Johannes L. Braams. All rights reserved. +% % This file is part of the subeqnarray package. % --------------------------------------------- -% +% % It may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 +% 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.3 or later is part of all distributions of LaTeX -% version 2003/12/01 or later. -% +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008 or later. +% % This work has the LPPL maintenance status "maintained". -% +% % The Current Maintainer of this work is Johannes Braams. -% -% The list of all files belonging to the subeqnarray package is -% given in the file `manifest.txt'. -% +% +% The list of all files belonging to the supertabular package is +% given in the file `MANIFEST'. +% % The list of derived (unpacked) files belonging to the distribution % and covered by LPPL is defined by the unpacking scripts (with % extension .ins) which are part of the distribution. % \fi -% \CheckSum{259} -%\iffalse +% +% \CheckSum{264} +% +% \iffalse % % Subeqnarray package to use with LaTeX2e % -%% Copyright (C) 1988--2004 by Johannes Braams, -%% all rights resserved %% %% Error reports please to: J. Braams %% TeXniek -%% Kooienswater 62 -%% 2715 AJ Zoetermeer -%% The Netherlands -%% Email: texniek at braams.cistron.nl +%% Email: texniek at texniek.nl % % \section{Producing the documentation} % @@ -48,10 +45,10 @@ %</dtx> %<package>\NeedsTeXFormat{LaTeX2e}[1998/06/01] %<package>\ProvidesPackage{subeqnarray} -%<sample>\ProvidesFile{subeqnarray.tex} +%<sample>\ProvidesFile{subeqnarray-sample.tex} %<driver>\ProvidesFile{subeqnarray.drv} %\ProvidesFile{subeqnarray.dtx} - [2004/04/15 v2.1c subeqnarray package] + [2024/07/20 v2.1e subeqnarray package] %<*driver> \documentclass{ltxdoc} @@ -82,10 +79,8 @@ % % \author{Johannes Braams\\ % \TeX niek\\ -% Kersengaarde 33\\ -% 2723 BP Zoetermeer\\ % The Netherlands\\ -% Internet: \texttt{TeXniek at braams.cistron.nl}} +% Internet: \texttt{texniek at texniek.nl}} % % \date{\filedate} % @@ -114,8 +109,8 @@ % \changes{2.0}{1993/11/02}{Added support for the leqno option} % \changes{2.0}{1993/11/02}{Added support for the fleqn option} % \changes{2.1}{1994/02/09}{Upgrade for LaTeX2e} -% \changes{2.1b}{1999/03/03}{Changed licensing remarks to use LPPL} -% \changes{2.1c}{2004/04/15}{Updated address information} +% \changes{v2.1b}{1999/03/03}{Changed licensing remarks to use LPPL} +% \changes{v2.1e}{2024/07/20}{Updated contact info} % % \section{Initial Code} % @@ -129,8 +124,8 @@ % \end{macro} % % \begin{macro}{\thesubequation} -% The representation o the counter \texttt{subequation} includes -% the \texttt{equation} counter +% The representation of the counter \texttt{subequation} includes +% the \texttt{equation} counter. % \begin{macrocode} \def\thesubequation{\theequation\alph{subequation}} % \end{macrocode} @@ -197,7 +192,7 @@ \ExecuteOptions{reqno,deqn} % \end{macrocode} % -% Now see if the use specified any options. +% Now see if the user specified any options. % \begin{macrocode} \ProcessOptions % \end{macrocode} @@ -206,9 +201,9 @@ % % \begin{macro}{\slabel} % A new label command to refer to subequations. It works -% like the |\label| command and was taken from \texttt{latex.tex}. +% like the |\label| command and was taken from \texttt{latex.ltx}. % -% |\slabel{FOO}| writes the following on file |\@auxout| +% |\slabel{FOO}| writes the following on file |\@auxout|: % % |\newlabel{FOO}{{eval(\@currentlabel)}{eval(\thepage)}}| % @@ -285,7 +280,7 @@ % \end{macro} % % \begin{macro}{\@@subeqncr} -% Ceck the number of columns, and insert extra |&| if needed. If +% Check the number of columns, and insert extra |&| if needed. If % there appear to be more than 3 columns an error is signalled. % \begin{macrocode} \def\@@subeqncr{\let\@tempa\relax @@ -314,7 +309,6 @@ % \begin{macrocode} \let\@ssubeqncr\@subeqncr %</package> -%<*sample> % \end{macrocode} % \end{macro} % @@ -328,6 +322,11 @@ \documentclass[fleqn]{article} \usepackage{subeqnarray} \begin{document} +\title{Sample subeqnarray} +\author{Johannes L. Braams} +\date{\today} +\maketitle + This document shows an example of the use of the \emph{subeqnarray} environment. Here is one: \begin{subeqnarray} @@ -360,20 +359,4 @@ These are equations~\ref{eq10},~\ref{eq11} and~\ref{eq12}. % % \Finale \endinput -% -%% \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 \~} -%% +%
\ No newline at end of file diff --git a/macros/latex/contrib/subeqnarray/subeqnarray.ins b/macros/latex/contrib/subeqnarray/subeqnarray.ins index efa2d4da60..f28eb4717a 100644 --- a/macros/latex/contrib/subeqnarray/subeqnarray.ins +++ b/macros/latex/contrib/subeqnarray/subeqnarray.ins @@ -1,53 +1,49 @@ -%% +% %% This file will generate fast loadable files and documentation %% driver files from the doc files in this package when run through %% LaTeX or TeX. %% -%% Copyright 1989-2004 Johannes L. Braams. All rights reserved. -%% -%% This file is part of the subeqnarray package. -%% --------------------------------------------- -%% +%% Copyright (C) 1999-2024 Johannes L. Braams. All rights reserved. +%% +%% This file is part of the eqnarray distribution. +%% ----------------------------------------------- +%% %% It may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.3 +%% 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.3 or later is part of all distributions of LaTeX -%% version 2003/12/01 or later. -%% -%% This work has the LPPL maintenance status "maintained". -%% -%% The Current Maintainer of this work is Johannes Braams. -%% -%% The list of all files belonging to the subeqnarray package is -%% given in the file `manifest.txt. -%% -%% The list of derived (unpacked) files belonging to the distribution -%% and covered by LPPL is defined by the unpacking scripts (with -%% extension .ins) which are part of the distribution. +%% https://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2008 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% As this file contains legal notices, it is NOT PERMITTED to modify +%% this file in any way that the legal information placed into +%% generated files is changed (i.e., the files generated when the +%% original file is executed). This restriction does not apply if +%% (parts of) the content is reused in a different WORK producing its +%% own generated files. %% %% --------------- start of docstrip commands ------------------ %% -% ignored commands -\def\filedate{2004/04/15} -\def\batchfile{subeqnarray.ins} + \input docstrip.tex \preamble -Copyright (C) 1999-2004 Johannes Braams. All rights reserved. +Copyright (C) 1999-2024 Johannes Braams. All rights reserved. This file was generated from file(s) of the subeqnarray package. ---------------------------------------------------------------- It may be distributed and/or modified under the -conditions of the LaTeX Project Public License, either version 1.3 +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.3 or later is part of all distributions of LaTeX -version 2003/12/01 or later. +and version 1.3c or later is part of all distributions of LaTeX +version 2008 or later. This work has the LPPL maintenance status "maintained". @@ -71,7 +67,7 @@ extension .ins) which are part of the distribution. % The sample file -\generateFile{subeqnarray.tex}{t}{\from{subeqnarray.dtx}{sample}} +\generateFile{subeqnarray-sample.tex}{t}{\from{subeqnarray.dtx}{sample}} \Msg{***********************************************************} \Msg{*} @@ -89,4 +85,4 @@ extension .ins) which are part of the distribution. \Msg{* Happy TeXing} \Msg{***********************************************************} -\endinput +\endbatchfile diff --git a/macros/latex/contrib/subeqnarray/subeqnarray.pdf b/macros/latex/contrib/subeqnarray/subeqnarray.pdf Binary files differindex 937120f21d..d69c233513 100644 --- a/macros/latex/contrib/subeqnarray/subeqnarray.pdf +++ b/macros/latex/contrib/subeqnarray/subeqnarray.pdf diff --git a/macros/latex/contrib/supertabular/CATALOG b/macros/latex/contrib/supertabular/CATALOG index 8c58273050..b6438f4bcf 100644 --- a/macros/latex/contrib/supertabular/CATALOG +++ b/macros/latex/contrib/supertabular/CATALOG @@ -1,7 +1,7 @@ Name: supertabular (also called supertab) -Problems-To: texniek@braams.xs4all.nl +Problems-To: texniek@texniek.nl Author: J.L. Braams and T. Jurriens -Version: 4.1g +Version: 4.2c Description: @@ -23,6 +23,4 @@ ISBN 0-201-54199-8. Address: TeXniek -Kersengaarde 33 -2723 BP Zoetermeer The Netherlands diff --git a/macros/latex/contrib/supertabular/MANIFEST b/macros/latex/contrib/supertabular/MANIFEST index bcd27adbf4..3015e0edd5 100644 --- a/macros/latex/contrib/supertabular/MANIFEST +++ b/macros/latex/contrib/supertabular/MANIFEST @@ -1,6 +1,6 @@ -README - A short introduction -MANIFEST - A list of files -CATALOG - An entry for the macro catalog +00readme.tx - A short introduction +manifest.txt - A list of files +catalog.txt - An entry for the macro catalog Changelog - An overview of the changes to the package supertabular.dtx - The documented version of the code, including a couple of examples of how to use it. Needs supertabular.sty diff --git a/macros/latex/contrib/supertabular/README b/macros/latex/contrib/supertabular/README index ccd7c596a5..9de0746460 100644 --- a/macros/latex/contrib/supertabular/README +++ b/macros/latex/contrib/supertabular/README @@ -13,9 +13,9 @@ The files contained in this bundle are listed in the file MANIFEST Supertabular can be used with LaTeX2e as a package. -Copyright (C) 1989 - 2020 Johannes L. Braams texniek at braams.xs4all.nl +Copyright (C) 1989 - 2024 Johannes L. Braams texniek at texniek.nl This program can be redistributed and/or modified under the terms of the LaTeX Project Public License Distributed from CTAN archives in directory macros/latex/base/lppl.txt; either -version 1 of the License, or any later version. +version 1.3c of the License, or any later version. diff --git a/macros/latex/contrib/supertabular/ChangeLog b/macros/latex/contrib/supertabular/supertabular.bug index 1dedbe6cd4..7c340f0a99 100644 --- a/macros/latex/contrib/supertabular/ChangeLog +++ b/macros/latex/contrib/supertabular/supertabular.bug @@ -1,8 +1,29 @@ -2020-02-02 Johannes Braams <texniek at braams.xs4all.nl> +2021-02-14 Johannes Braams <texniek at texniek.nl> + + * supertabular.dtx: Issue a \penalty-\@M instead of \newpage when + moving the first part of a supertabular to the next page to + prevent the first two rows from opverlapping. + +2021-02-14 Johannes Braams <texniek at texniek.nl> + + * supertabular.dtx: When the tablehead and/or tabletail are not + defeined the internal macros that store their arguments need to + remain empty as well. Otherwise the algorithm will always think + there's a head and tail with a height of 2.5 pt. + +2020-06-27 Johannes Braams <texniek at texniek.nl> + + * supertabular.dtx: the new algorithm for calculating the height + of the row broke old documents, especially when small font sizes + are used. Made the new algorithm optional (calculate versus + estimate) and make sure the row height covers super- and + subscripts. + +2020-02-02 Johannes Braams <texniek at texniek.nl> * supertabular.dtx: Replaced the way the height of normal tabular lines is calculated by basing it on the height and depth of - \strutbox. This also ment being able to take the \extrarowheight + \strutbox. This also meant being able to take the \extrarowheight from the array package into account. Also the height of the first and subsequent heads was not taken into account in the calculation of the available pageheigt. This @@ -14,25 +35,25 @@ \pagesofar. Therefore we substract a little extra from \ST@pageleft. -2020-01-26 Johannes Braams <texniek at braams.xs4all.nl> +2020-01-26 Johannes Braams <texniek at texniek.nl> * supertabular.dtx: Updated the copyright year and rearranged the text around the examples in order to get the first table to split accross a page boundary again. -2019-01-18 Johannes Braams <texniek at braams.xs4all.nl> +2019-01-18 Johannes Braams <texniek at texniek.nl> * supertabular.dtx: The linenumber in the tracing information, that is reported from within \\, is off by one when the optional argument is missing. Therefore the input linenumber is now saved before TeX starts scanning. Problem reported by Frank Mittelbach. -2019-01-16 Johannes Braams <texniek at braams.xs4all.nl> +2019-01-16 Johannes Braams <texniek at texniek.nl> * supertabular.dtx: The option "pageshow" didn't work as it set a too low value in \c@tracingst. Problem reported by Frank Mittelbach. -2019-01-12 Johannes Braams <texniek at braams.xs4all.nl> +2019-01-12 Johannes Braams <texniek at texniek.nl> * supertabular.dtx : The definition for the first table head was different from the definition of the regular table heads. This problem was reported by FMi as it produced an extra table in @@ -44,7 +65,7 @@ themselves although this couteracts the change that was introduced on 08-08-1999. -2001-08-21 Johannes Braams <texniek at braams.xs4all.nl> +2001-08-21 Johannes Braams <texniek at texniek.nl> * supertabular.dtx : The macro \ST@next needs to be defined when \ST@skippage was called. Therefore I moved the default definition @@ -52,7 +73,7 @@ is called; possibly defined by \ST@newpage. This problem was reported by Andrew Dorrell <dorrell@research.canon.com.au>. -1999-08-08 Johannes Braams <texniek at braams.xs4all.nl> +1999-08-08 Johannes Braams <texniek at texniek.nl> * supertabular.dtx : No longer re-initialize the internal variable \@table@first@head and \@table@last@tail. This made it impossible @@ -61,20 +82,20 @@ redeclaring the firsthead and/or lasttail. Reported by Christian Matuszewski <matuszew@informatik.uni-halle.de>. -Fri Nov 7 20:27:27 1997 Johannes Braams <texniek at braams.xs4all.nl> +Fri Nov 7 20:27:27 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx : For standard LaTeX we need to change \@@startpbox not \@startpbox. Found by Peter R Wilson - <Peter.Wilson@PSS.Boeing.com> + <Peter.Wilson@PSS.Boeing.com>. -Wed Oct 8 22:35:40 1997 Johannes Braams <texniek at braams.xs4all.nl> +Wed Oct 8 22:35:40 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx: Running the documentation revealed a loop; inside the table tail and head \\ was reset to \@tabularcr instead of to \@@tabularcr (now: \org@tabularcr). First found by Thomas - Esser <te@informatik.uni-hannover.de> + Esser <te@informatik.uni-hannover.de>. -Sat Sep 27 21:35:29 1997 Johannes Braams <texniek at braams.xs4all.nl> +Sat Sep 27 21:35:29 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx: Added the mpsupertabular and mpsupertabular* environments provided by Axel Kielhorn <A.Kielhorn@tu-bs.de>; @@ -84,14 +105,14 @@ Sat Sep 27 21:35:29 1997 Johannes Braams <texniek at braams.xs4all.nl> The calculation of the available height still missed the case where TeX has already begun the second column. -Thu Sep 18 00:31:55 1997 Johannes Braams <texniek at braams.xs4all.nl> +Thu Sep 18 00:31:55 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx : The \tablehead and \tabletail commands reset the command \\; they used \cr for it. That should have been \@tabularcr to properly deal with it's optional argument. Found by Axel Kielhorn <A.Kielhorn@tu-bs.de> -Wed Sep 17 23:59:13 1997 Johannes Braams <texniek at braams.xs4all.nl> +Wed Sep 17 23:59:13 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx : In two column mode the parameters that determine how much space is left on the page were not correctly @@ -99,7 +120,7 @@ Wed Sep 17 23:59:13 1997 Johannes Braams <texniek at braams.xs4all.nl> completely. Found by Jeffrey Spielberg <jspielberg@infinet-software.com> -Tue May 20 23:46:08 1997 Johannes Braams <texniek at braams.xs4all.nl> +Tue May 20 23:46:08 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx : \shrinkheight didn't shrink the available height for a part of the tabular (as documented); it just *set* it @@ -109,26 +130,26 @@ Tue May 20 23:46:08 1997 Johannes Braams <texniek at braams.xs4all.nl> \@table@last@tail are undefined; this shoud be done globally. Found by Axel Kielhorn <A.Kielhorn@tu-bs.de> -Sat Apr 12 23:37:33 1997 Johannes Braams <texniek at braams.xs4all.nl> +Sat Apr 12 23:37:33 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx : Added \ST@stretchht and \ST@prevht to improve decision process. \estimate@lineht now also computes the difference between a normal line height and when \arraystretch is in effect. -Thu Apr 10 23:33:07 1997 Johannes Braams <texniek at braams.xs4all.nl> +Thu Apr 10 23:33:07 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx: Had to repaire some documentation errors. (found by Thomas Esser <te@informatik.uni-hannover.de>) -Wed Apr 9 00:29:36 1997 Johannes Braams <texniek at braams.xs4all.nl> +Wed Apr 9 00:29:36 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx : Only the first part of a supertabular can be moved to the next page. Therefore we need to change the definition of \ST@skippage in the middle of processing the supertabular data. -Thu Mar 6 21:56:18 1997 Johannes Braams <texniek at braams.xs4all.nl> +Thu Mar 6 21:56:18 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx : Using a tabular environment in the cells of a supertabular gives `interesting' results when the algorithm @@ -136,14 +157,14 @@ Thu Mar 6 21:56:18 1997 Johannes Braams <texniek at braams.xs4all.nl> tabular. A number of changes were necessary to make this work. Found by Axel Kielhorn <i0080108@ws.rz.tu-bs.de> -Thu Feb 20 23:29:18 1997 Johannes Braams <texniek at braams.xs4all.nl> +Thu Feb 20 23:29:18 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx: Renamed \tableformat into \ST@tableformat because the KOPMA-packages also use \tableformat and therefore clashed with babel. Found by Axel Kielhorn <i0080108@ws.rz.tu-bs.de> -Tue Feb 4 23:50:50 1997 Johannes Braams <texniek at braams.xs4all.nl> +Tue Feb 4 23:50:50 1997 Johannes Braams <texniek at texniek.nl> * supertabular.dtx (section{The Implementation}): Removed the use of the page height correction for p-columns; the current algorithm @@ -155,7 +176,7 @@ Tue Feb 4 23:50:50 1997 Johannes Braams <texniek at braams.xs4all.nl> page on a calculated minimum height of the table. The minimum is the head, the tail and 1 line of tabular data. -Thu Nov 28 20:38:53 1996 Johannes Braams <texniek at braams.xs4all.nl> +Thu Nov 28 20:38:53 1996 Johannes Braams <texniek at texniek.nl> * supertabular.dtx: Started a cleanup of the code, made source file a full fledged .dtx file @@ -168,7 +189,7 @@ Thu Nov 28 20:38:53 1996 Johannes Braams <texniek at braams.xs4all.nl> % jurriens at fwn.rug.nl P.O Box 800, 9700 AV Groningen % % revised by: Johannes Braams -% texniek at braams.xs4all.nl TeXniek (NL) +% texniek at texniek.nl TeXniek (NL) % \def\fileversion{3.7c} % \def\filename{supertabular sty} % \def\filedate{1995/10/16} diff --git a/macros/latex/contrib/supertabular/supertabular.dtx b/macros/latex/contrib/supertabular/supertabular.dtx index be31a2d113..6bde17bbfa 100644 --- a/macros/latex/contrib/supertabular/supertabular.dtx +++ b/macros/latex/contrib/supertabular/supertabular.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright 1989-2020 Johannes L. Braams. All rights reserved. +% Copyright 1989-2021 Johannes L. Braams. All rights reserved. % % This file is part of the supertabular package. % --------------------------------------------- @@ -25,14 +25,13 @@ % extension .ins) which are part of the distribution. % \fi % -% \CheckSum{1132} +% \CheckSum{1188} % \iffalse %% Sourcefile `supertabular.dtx'. %% %% Copyright (C) 1988 by Theo Jurriens -%% Copyright (C) 1990-2020 by Johannes Braams texniek at braams.xs4all.nl -%% Kersengaarde 33 -%% 2723 BP Zoetermeer NL +%% Copyright (C) 1990-2024 by Johannes Braams texniek at texniek.nl +%% The Netherlands %% all rights reserved. %% %% @@ -43,11 +42,11 @@ %<package>\ProvidesPackage{supertabular} %<driver>\ProvidesFile{supertabular.drv} %\ProvidesFile{supertabular.dtx} - [2020/02/02 v4.1g the supertabular environment] + [2024/07/20 v4.2c the supertabular environment] % %<*driver> \documentclass{ltxdoc} -\usepackage[debugshow]{supertabular} +\usepackage[debugshow,calculate]{supertabular} \newcommand{\tbsp}{\rule{0pt}{18pt}} \begin{document} \providecommand{\Lenv}[1]{\textsf{#1}} @@ -59,17 +58,19 @@ %</driver> % \fi % -% \changes{v4.0a}{1996/11/28}{Cleanup of the code, now a \file{.dtx} -% source file} -% \changes{v4.0c}{1997/02/20}{Replace \cs{tableformat} by -% \cs{ST@tableformat} to prevent a clash with the \pkg{KOMA} -% pacakage} -% \changes{v4.0f}{1997/04/10}{Repaired a few typos in the -% documentation} -% \changes{v4.1a}{1997/09/18}{Repaired a number of typos and added -% contributed mpsupertabular environemnts} -% \changes{v4.1b}{1997/10/08}{Renamed \cs{@@tabularcr} to -% \cs{org@tabularcr}} +% \changes{v4.0a}{1996/11/28}{Cleanup of the code, now a \file{.dtx} +% source file} +% \changes{v4.0c}{1997/02/20}{Replace \cs{tableformat} by +% \cs{ST@tableformat} to prevent a clash with the \pkg{KOMA} +% pacakage} +% \changes{v4.0f}{1997/04/10}{Repaired a few typos in the +% documentation} +% \changes{v4.1a}{1997/09/18}{Repaired a number of typos and added +% contributed mpsupertabular environemnts} +% \changes{v4.1b}{1997/10/08}{Renamed \cs{@@tabularcr} to +% \cs{org@tabularcr}} +% \changes{v4.2a}{2020-06-27}{renamed \cs{ST@lineht} to \cs{ST@rowht}} +% \changes{v4.2c}{2024/07/20}{A few documentation changes} % % \GetFileInfo{supertabular.dtx} % \title{The \texttt{supertabular} environment\thanks{This file @@ -110,7 +111,13 @@ % and why \pkg{supertabular} decides to break the tabular % environment in order to produce a new page. % \item The option \textsf{debugshow} also adds information about -% each line that is added to the tabular. +% each row that is added to the tabular. +% \item The option \textsf{estimate} (the default) has the package +% use the old estimation-based algortihm to establish the height +% of individual rows. +% \item The option \textsf{calculate} has the package use the new +% calculation-based algortihm to establish the height +% of individual rows. % \end{enumerate} % % Below is a description of the new commands and environments that @@ -172,15 +179,15 @@ % % \begin{itemize} % \item When the material of a normal entry (not a p-arg) becomes -% larger than the estimated |\ST@lineht|, overfull |\vbox|es -% will be produced at all. +% larger than the estimated |\ST@rowht|, overfull |\vbox|es +% will be produced. % \item When the last p-arg on a page gets more than 4 lines % (probably even more than 3 lines) it will result in an overfull % |\vbox|. Also some combinations of |\baselinestretch| -% |\arraystretch| and a large font may lead to one line too much. -% \item if accidentally the last line of the tabular produces a +% |\arraystretch| and a large font may lead to one row too much. +% \item if accidentally the last row of the tabular produces a % newpage, on the next page the tabletail will be written -% immediately after the tablehead. Depending on the contents this +% immediately after the tablehead. Depending on the contents, this % may result in an error message regarding misplaced |\noalign|. % % A quick but not very elegant solution: shrink the allowed height @@ -431,6 +438,36 @@ \DeclareOption{errorshow}{\c@tracingst\z@} \DeclareOption{pageshow}{\c@tracingst\thr@@} \DeclareOption{debugshow}{\c@tracingst5\relax} +% \end{macrocode} +% In version 4.1g a new way of determining the height of the +% average row was introduced. Instead of using an estimation, based +% on the value of |\baselineskip| a computation was introduced, +% based on the size of the |\strutbox|. The effect of this new +% method was that the parial tabulars fill the page better, so less +% \texttt{underfull vbox} message would appear. Unfortunately this +% had a negative effect on existing documents (that don;t come out +% like they used to) and especially when a very small font +% (|\tiny| or |\scriptsize| was chosen for the tabular and the +% cells contain subscripts or superscripts. It turned out that the +% heigth and depth of a formula like $5^5_5$ exceeds the size of +% |\strutbox|. The result is that the rows have more height (and/or +% depth) thatn what the algorithm computed. Hence, when more rows +% are added to the partial tabular than fit on the page. Especially +% on the first part thisis a probem as the partial tabular becomes +% too high and doesn't fit in the avialbale space. \TeX\ then +% decides to move it to the next page, resulting in two +% consecutive pages that have a lot of white space on them. +% \changes{v4.2a}{2020-06-27}{Two new options to choose the +% computation algorithhm} +% \begin{macrocode} +\DeclareOption{calculate}{\def\ST@calculate@rowht{\ST@compute@rowht}} +\DeclareOption{estimate}{\def\ST@calculate@rowht{\ST@estimate@rowht}} +%\def\ST@calculate@rowht{\ST@estimate@rowht} +% \end{macrocode} +% The default for the options is to only show errors and use the +% old estmation algorithm (so as not to break old documents). +% \begin{macrocode} +\ExecuteOptions{errorshow,estimate} \ProcessOptions % \end{macrocode} % @@ -510,7 +547,7 @@ % yet be visible in the amount of space occupoed on the page % sofar. Therefore we include the possibility to reduce the height % of the first part of the supertabular. In order to this we need a -% macro that indicates a aption has been put in front of the +% macro that indicates a caption has been put in front of the % table. We do this to reduce the risk that the first part of the % table is too high after all and is pushed onto the next page due % to an overfull |\vbox| condition. @@ -523,7 +560,7 @@ % \begin{macro}{\ST@caption} % This is a redefinition of LaTeX's |\@caption|, |\@makecaption| is % called within a group so as not to return to |\normalsize| -% globally. also a fix is made for the `feature' of the +% globally. Also a fix is made for the `feature' of the % |\@makecaption| of the document class \cls{article} and friends % that a caption \textbf{always} gets a |\vskip 10pt| at the top % and \textbf{none} at the bottom. If a user wants to precede his @@ -554,14 +591,19 @@ % to \cs{@tabularcr}} % \changes{v4.1b}{1997/10/08}{Not \cs{@tabularcr} but % \cs{org@tabularcr}} +% \changes{v4.2b}{2021-02-14}{When the argument is empty the internal +% macro \cs{@tablehead} needs to be empty as well.} % \begin{macrocode} \newcommand\tablehead[1]{% - \gdef\@tablehead{% - \noalign{% - \global\let\@savcr=\\ - \global\let\\=\org@tabularcr}% - #1% - \noalign{\global\let\\=\@savcr}}} + \def\@ST@arg{#1}% + \ifx\@ST@arg\@empty\gdef\@tablehead{}\else + \gdef\@tablehead{% + \noalign{% + \global\let\@savcr=\\ + \global\let\\=\org@tabularcr}% + #1% + \noalign{\global\let\\=\@savcr}}% + \fi} \tablehead{} % \end{macrocode} % It's possible to specify a different tablehead for the first @@ -571,17 +613,22 @@ % document. % \changes{v4.1f}{2019/01/12}{\cs{\@table@first@head} needs the same % definition as \cs{\@tablehead} (found by FMi)} +% \changes{v4.2b}{2021-02-14}{When the argument is empty the internal +% macro \cs{@table@first@head} needs to be empty as well.} % \begin{macrocode} \newcommand\tablefirsthead[1]{% - \gdef\@table@first@head{% - \noalign{% - \global\let\@savcr=\\ - \global\let\\=\org@tabularcr}% - #1% - \noalign{% - \global\let\\=\@savcr - \global\let\@table@first@head\undefined - }}} + \def\@ST@arg{#1}% + \ifx\@ST@arg\@empty\gdef\@table@first@head{}\else + \gdef\@table@first@head{% + \noalign{% + \global\let\@savcr=\\ + \global\let\\=\org@tabularcr}% + #1% + \noalign{% + \global\let\\=\@savcr + \global\let\@table@first@head\undefined + }}% + \fi} % \end{macrocode} % \end{macro} % \end{macro} @@ -598,14 +645,19 @@ % to \cs{@tabularcr}} % \changes{v4.1b}{1997/10/08}{Not \cs{@tabularcr} but % \cs{org@tabularcr}} +% \changes{v4.2b}{2021-02-14}{When the argument is empty the internal +% macro \cs{@tabletail} needs to be empty as well.} % \begin{macrocode} \newcommand\tabletail[1]{% - \gdef\@tabletail{% - \noalign{% - \global\let\@savcr=\\ - \global\let\\=\org@tabularcr}% - #1% - \noalign{\global\let\\=\@savcr}}} + \def\@ST@arg{#1}% + \ifx\@ST@arg\@empty\gdef\@tabletail{}\else + \gdef\@tabletail{% + \noalign{% + \global\let\@savcr=\\ + \global\let\\=\org@tabularcr}% + #1% + \noalign{\global\let\\=\@savcr}}% + \fi} \tabletail{} % \end{macrocode} % It's possible to specify a different tabletail for the last @@ -615,17 +667,22 @@ % document. % \changes{v4.1f}{2019/01/12}{\cs{\@table@last@tail} needs the same % definition as \cs{\@tabletail}} +% \changes{v4.2b}{2021-02-14}{When the argument is empty the internal +% macro \cs{@tabletail} needs to be empty as well.} % \begin{macrocode} \newcommand\tablelasttail[1]{% - \gdef\@table@last@tail{% - \noalign{% - \global\let\@savcr=\\ - \global\let\\=\org@tabularcr}% - #1% - \noalign{% - \global\let\\=\@savcr - \global\let\@table@last@tail\undefined - }}} + \def\@ST@arg{#1}% + \ifx\@ST@arg\@empty\gdef\@table@last@tail{}\else + \gdef\@table@last@tail{% + \noalign{% + \global\let\@savcr=\\ + \global\let\\=\org@tabularcr}% + #1% + \noalign{% + \global\let\\=\@savcr + \global\let\@table@last@tail\undefined + }}% + \fi} % \end{macrocode} % \end{macro} % \end{macro} @@ -660,7 +717,7 @@ % % \begin{macro}{\ST@trace@cr} % A variant of |\ST@trace| that can be called from within |\\| as -% that command is looking for an optional argument will end up +% that command is looking for an optional argument and will end up % scanning the next line. % \begin{macro}{\ST@save@lineno} % \changes{v4.1f}{2019/01/18}{Added a macro to save the current input @@ -752,25 +809,22 @@ % \changes{v4.0b}{1997/02/04}{Removed the use of \cs{ST@pboxcorr}, % correction seems to be no longer necessary} % -% \begin{macro}{\ST@lineht} +% \begin{macro}{\ST@rowht} % \begin{macro}{\ST@stretchht} % \changes{v4.0g}{1997/04/12}{Dimension register added} % \begin{macro}{\ST@prevht} % \changes{v4.0g}{1997/04/12}{Dimension register added} -% The estimated height of a normal line is stored in -% |\ST@lineht|. The dimension register |\ST@stretchht| is used to -% store the difference between the `normal' line height and the -% line height when |\arraystretch| has a non-standard value. This -% is used in the case where p-box entries are added to the -% tabular. The dimension register |\ST@prevht| is use to store the -% height of the previous line to use it as an estimate for the -% height of the next line. This is needed for a better estimate of +% The estimated height of a normal row is stored in +% |\ST@rowht|. The dimension register |\ST@stretchht| was used to +% store the difference between the `normal' row height and the +% row height when |\arraystretch| has a non-standard value. This +% was used in the case where p-box entries are added to the +% tabular. The dimension register |\ST@prevht| is used to store the +% height of the previous row, to use it as an estimate for the +% height of the next row. This is needed for a better estimate of % when to break the tabular. -% \changes{v4.1g}{2020/02/02}{\cs{ST@stretchht} is no longer needed, -% will be removed in a future release} % \begin{macrocode} -\newdimen\ST@lineht -%\newdimen\ST@stretchht +\newdimen\ST@rowht \newdimen\ST@prevht % \end{macrocode} % \end{macro} @@ -907,10 +961,12 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\ST@compute@lineht} -% \changes{v4.1g}{2020/02/02}{New macro \cs{ST@compute@lineht} to -% replacte \cs{estimate@lineht}} -% The height of a line in an array environemnt can be computed as: +% \begin{macro}{\ST@compute@rowht} +% \changes{v4.1g}{2020/02/02}{New macro \cs{ST@compute@rowht} to +% replace \cs{ST@estimate@rowht}} +% \changes{v4.2a}{2020-06-27}{Make sure that \cs{ST@rowht} is large +% enough to take subscripts and superscripts into account} +% The height of a row in an array environemnt can be computed as: % \begin{itemize} % \item the height of the strutbox |\ht\strutbox| (plus % |\extrarowheight| when the \pkg{array} package is loaded), @@ -919,34 +975,60 @@ % by |\arraystretch|. % \end{itemize} % \begin{macrocode} -\def\ST@compute@lineht{% - \ST@lineht=\ht\strutbox +\def\ST@compute@rowht{% +% \end{macrocode} +% Temporarily store a formula with superscript and subscript in a +% box in order to be able to measure its height and depth. +% \begin{macrocode} + \setbox\@tempboxa=\vbox{\@arrayparboxrestore $5^5_5$} +% \end{macrocode} +% Use the largest height of either |\@tempboxa| or |\strutbox|. +% \begin{macrocode} + \ifnum\ht\@tempboxa>\ht\strutbox + \ST@rowht=\ht\@tempboxa + \else + \ST@rowht=\ht\strutbox + \fi +% \end{macrocode} +% If the \textsf{array} pacakge is used we need to add the +% value of |\extrarowheight|. +% \begin{macrocode} \ifx\extrarowheight\undefined\else - \advance \ST@lineht by \extrarowheight + \advance \ST@rowht by \extrarowheight + \fi +% \end{macrocode} +% Also use the largest depth of either |\@tempboxa| or |\strutbox|. +% \begin{macrocode} + \ifnum\dp\@tempboxa>\dp\strutbox + \advance\ST@rowht \dp\@tempboxa + \else + \advance\ST@rowht \dp\strutbox \fi - \ST@lineht = \arraystretch\ST@lineht - \advance\ST@lineht \arraystretch\dp\strutbox - \ST@trace\tw@{Normal Line height: \the\ST@lineht}% +% \end{macrocode} +% And finally multiply by |\arraystretch|. +% \begin{macrocode} + \ST@rowht = \arraystretch\ST@rowht +% \end{macrocode} +% \begin{macrocode} + \ST@trace\tw@{Normal Row height: \the\ST@rowht}% } % \end{macrocode} % \end{macro} % -% \begin{macro}{\estimate@lineht} +% \begin{macro}{\ST@estimate@rowht} % Estimates the height of normal line taking |\arraystretch| into % account. Also computes the difference between a normal line and a % `stretched' one. % \changes{v4.0b}{1997/02/04}{Removed use of \cs{ST@pboxcorr}} % \changes{v4.0g}{1997/04/12}{Added the computation of % \cs{ST@stretchht}} -% This macro will be removed in a future release. +% \changes{v4.2a}{2020-06-27}{removed the computation of +% \cs{ST@stretchht} as it is no longer used} % \begin{macrocode} -\def\estimate@lineht{% - \ST@lineht=\arraystretch \baslineskp - \global\advance\ST@lineht by 1\p@ - \ST@stretchht\ST@lineht\advance\ST@stretchht-\baslineskp - \ifdim\ST@stretchht<\z@\ST@stretchht\z@\fi - \ST@trace\tw@{Average line height: \the\ST@lineht}% - \ST@trace\tw@{Stretched line height: \the\ST@stretchht}% +\def\ST@estimate@rowht{% + \ST@rowht=\arraystretch \baslineskp + \global\advance\ST@rowht by 1\p@ + \ST@trace\tw@{Average Row height: \the\ST@rowht}% } % \end{macrocode} % \end{macro} @@ -1071,23 +1153,23 @@ \ST@tailht=\ht\@tempboxa\advance\ST@tailht\dp\@tempboxa \fi % \end{macrocode} -% We add the average height of a line to this because when we +% We add the average height of a row to this because when we % decide to continue the tabular we need to have enough space left -% for one line and the tail. +% for one row \emph{and} the tail. % \begin{macrocode} - \advance\ST@tailht by \ST@lineht + \advance\ST@tailht by \ST@rowht \ST@trace\tw@{Height of tail: \the\ST@tailht}% \ST@trace\tw@{Maximum height of tabular: \the\ST@pageleft}% \@tempdima\ST@headht % \end{macrocode} % \changes{v4.0b}{1997/02/04}{Base the decision whether to start on a -% new page on the total of headheight, tailht and lineht} +% new page on the total of headheight, tailht and rowht} % Now we decide whether we can continue on the current page or % whether we need to start on a new page. We assume that the % minimum height of a tabular is the height of the head, the tail -% and one line of data. If that doesn't fit a new page is started. +% and one row of data. If that doesn't fit a new page is started. % \begin{macrocode} - \advance\@tempdima\ST@lineht + \advance\@tempdima\ST@rowht \advance\@tempdima\ST@tailht \ST@trace\tw@{Minimum height of tabular: \the\@tempdima}% \ifnum\@tempdima>\ST@pageleft @@ -1164,7 +1246,7 @@ \global\let\@oldcr=\\ % \end{macrocode} % Save the current value of |\baselineskip|, as we need it in the -% calculation of the average height of a line. +% calculation of the average height of a row. % \begin{macrocode} \def\baslineskp{\baselineskip}% % \end{macrocode} @@ -1174,9 +1256,9 @@ \ifx\undefined\@classix % \end{macrocode} % Save old |\@tabularcr| and insert the definition of +% |\ST@tabularcr|. % \changes{v4.1c}{1997/11/07}{For standard \LaTeX\ we need to change % \cs{@@startpbox}, \emph{not} \cs{@startpbox}} -% |\ST@tabularcr|. % \begin{macrocode} \let\org@tabularcr\@tabularcr \let\@tabularcr\ST@tabularcr @@ -1210,20 +1292,20 @@ \fi % \end{macrocode} % The first part of a supertabular may be moved on to the next page -% if it doesn't fit on the current page afterall. Subsequent parts +% if it doesn't fit on the current page after all. Subsequent parts % can not be moved; therefor we will have to switch the definition -% of |\ST@skippart| around. +% of |\ST@skippage| around. % \changes{v4.0e}{1997/04/09}{Make sure that only the first part of a % supertabular can be moved to the next page.} % \begin{macrocode} \let\ST@skippage\ST@skipfirstpart % \end{macrocode} -% Now we can estimate the average line height and the height of the +% Now we can estimate the average row height and the height of the % first page of the \Lenv{supertabular}. % \changes{v4.0i}{1997/09/18}{Added \cs{noindent}} -% \changes{v4.1g}{2020/02/02}{Now call \cs{ST@compute@lineht}} +% \changes{v4.1g}{2020/02/02}{Now call \cs{ST@calculate@rowht}} % \begin{macrocode} - \ST@compute@lineht + \ST@calculate@rowht \@calfirstpageht \noindent } @@ -1544,20 +1626,20 @@ % \begin{macrocode} \def\ST@cr{% \noalign{% - \ifnum\ST@pboxht<\ST@lineht + \ifnum\ST@pboxht<\ST@rowht % \end{macrocode} -% If there is a non-empty line, but an empty parbox, then -% |\ST@pboxht| might be non-zero, but too small thereby breaking -% the algorithm. Therefor we estimate the height of the line to be -% |\ST@lineht| in this case. +% If there is a non-empty row, but an empty parbox, then +% |\ST@pboxht| might be non-zero, but too small, thereby breaking +% the algorithm. Therefor we estimate the height of the row to be +% |\ST@rowht| in this case. % \begin{macrocode} - \global\advance\ST@pageleft -\ST@lineht + \global\advance\ST@pageleft -\ST@rowht % \end{macrocode} % And we store that fact in |\ST@prevht|. -% \changes{v4.0g}{1997/04/12}{store the height of the previous line in +% \changes{v4.0g}{1997/04/12}{store the height of the previous row in % \cs{ST@prevht}} % \begin{macrocode} - \global\ST@prevht\ST@lineht + \global\ST@prevht\ST@rowht \else % \end{macrocode} % When the parbox was not empty we take into account its height @@ -1605,11 +1687,11 @@ \else % \end{macrocode} % When there is not enough space left on the current page, we start -% a new page. To compute the amount of space need we use the -% height of the previous line (|\ST@prevht|) as an estimation of -% the height of the next line. If we are processing a +% a new page. To compute the amount of space needed we use the +% height of the previous row (|\ST@prevht|) as an estimation of +% the height of the next row. If we are processing a % \Lenv{mpsupertabular} we need to take the height of the footnotes -% into account. +% into account as well. % \changes{v4.0g}{1997/04/12}{Leave room for both \cs{ST@tailht} % \emph{and} \cs{ST@prevht}} % \changes{v4.1a}{1997/09/19}{Take care of space needed for @@ -1659,10 +1741,19 @@ % \begin{macrocode} \global\advance\ST@pageleft\pagetotal % \end{macrocode} -% Then we can set |\ST@pagesofar| to $0$ and start the new page. +% Then we can set |\ST@pagesofar| to $0$... % \begin{macrocode} \global\ST@pagesofar\z@ - \newpage +% \end{macrocode} +% ... and start the new page, but in this special case we need to +% trigger the output routine directly by issuing a |\penalty| +% rather than calling |\newpage| as that macro effectively issues a +% |\vskip-\maxdepth| which makes the first two rows of the tabular +% overlap. +% \changes{v4.2b}{2021-02-14}{Issue a \cs{penalty} instead of +% \cs{newpage} to trigger the output routine.} +% \begin{macrocode} + \penalty -\@M % \end{macrocode} % % Finally we make sure that this macro can only be executed once diff --git a/macros/latex/contrib/supertabular/supertabular.pdf b/macros/latex/contrib/supertabular/supertabular.pdf Binary files differindex 444cbfdcd7..a24a8c865c 100644 --- a/macros/latex/contrib/supertabular/supertabular.pdf +++ b/macros/latex/contrib/supertabular/supertabular.pdf diff --git a/macros/latex/contrib/tablvar/README.md b/macros/latex/contrib/tablvar/README.md index 565ed9c049..0be4d44111 100644 --- a/macros/latex/contrib/tablvar/README.md +++ b/macros/latex/contrib/tablvar/README.md @@ -6,8 +6,8 @@ - A complete and easy to use package for typesetting pretty tables of signs and variations according to French usage. - The syntax is similar to that of the array environment and uses intuitive position commands. - Arrows are automatically drawn (with PSTricks or TikZ). -- Macros are provided for drawing double bars, single bars crossing the zeros, intervals where a function is not defined or for placing special values. -- Several features of variations tables can be customized. +- Macros are provided for drawing double bars, single bars crossing zero values, intervals where a function is not defined or for placing special values. +- Many features of variations tables can be customized. ## Documentation @@ -18,7 +18,7 @@ The documentation is in French. ## Installation - run LaTeX on tablvar.ins, you obtain the file tablvar.sty, -- if then you run XeLaTeX or LaTeX + dvips + ps2pdf on tablvar.dtx you get the file tablvar.pdf which is also in the archive, +- if then you run LaTeX + dvips + ps2pdf on tablvar.dtx you get the file tablvar.pdf which is also in the archive, - put the files tablvar.sty and tablvar.pdf in your TeX Directory Structure. diff --git a/macros/latex/contrib/tablvar/tablvar.dtx b/macros/latex/contrib/tablvar/tablvar.dtx index afc47fc953..e39c2382f0 100644 --- a/macros/latex/contrib/tablvar/tablvar.dtx +++ b/macros/latex/contrib/tablvar/tablvar.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2018-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr> +% Copyright (C) 2018-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr> % % This file may be distributed and/or modified under the conditions of % the LaTeX Project Public License, either version 1.3 of this license @@ -22,11 +22,11 @@ %<*package> \NeedsTeXFormat{LaTeX2e}[2005/12/01] \ProvidesPackage{tablvar} - [2023/12/23 v2.0 .dtx tablvar file] + [2024/08/09 v2.1 Tables of signs and variations] %</package> %<*driver> \documentclass{ltxdoc} -\usepackage[utf8]{inputenc} +%\usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage{lmodern} @@ -38,10 +38,12 @@ \def\bbObrecht{\vrule\kern1pt\vrule} \let\bb\relax \let\variations\relax \usepackage{tkz-tab} +\usepackage{pstricks} +\usepackage{tableau} \usepackage[pstricks]{tablvar} \usepackage[style=french,font=fcm]{lgrmath} % pour un joli pi droit -\usepackage{hyperref} +\usepackage[hyperindex=false]{hyperref} \usepackage{sectsty} \usepackage{makecell} \usepackage{spacingtricks} @@ -58,6 +60,8 @@ \definecolor{darkbrown}{rgb}{0.5,0.1,0.1} \allsectionsfont{\color{darkbrown}} \hypersetup{% + bookmarksopen=true, + bookmarksopenlevel=2, colorlinks, linkcolor=blue, citecolor=red, @@ -76,7 +80,7 @@ %</driver> % \fi % -% \CheckSum{752} +% \CheckSum{828} % % \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 @@ -119,27 +123,21 @@ % \changes{v2.0}{16/12/2023}{Nouveau paramètre limsep} % \changes{v2.0}{20/12/2023}{Macro bas et mil valables pour un nb quelconque de lignes} % \changes{v2.0}{22/12/2023}{Macros @pos -> tv@pos, @@pos -> tv@@pos} +% \changes{v2.1}{23/07/2024}{ +% - Calcul de hauteur automatique de la colonne de légende : +% * nouveaux paramètres rowtopsep et rowbottomsep +% * tv@saveheight -> tv@setheight +% - option pstricks possible avec LuaLaTeX + luapstricks, +% - amélioration du calcul de position de la macro mil, +% - nouvelles macros limg*, limd* et bblim* +% - exemple plus sophistiqué pour bblim} % % \GetFileInfo{tablvar.sty} -% -% \DoNotIndex{\@@ZI,\tv@@pos,\tv@pos,\@ZI,\@arstrutbox,\@ifstar,\\} -% \DoNotIndex{\addtocounter,\advance,\arraybackslash} -% \DoNotIndex{\begin,\boolean,\centering,\color,\DeclareOption,\def} -% \DoNotIndex{\define@boolkey,\defin@key,\dp,\draw,\else,\empty,\end} -% \DoNotIndex{\fi,\fill,\global,\hspace,\ht} -% \DoNotIndex{\I,\if,\ifdim,\ifnum,\ifthenelse,\Ix,\Iy,\kern} -% \DoNotIndex{\makebox,\MessageBreak,\multido,\ncline,\newboolean,} -% \DoNotIndex{\newcommand,\newcounter,\newenvironment,\newlength,\newsavebox} -% \DoNotIndex{\node,\PackageWarningNoLine,\ProcessOptions,\psframe} -% \DoNotIndex{\raisebox,\relax,\renewcommand,\RequirePackage,\rnode} -% \DoNotIndex{\sbox,\setboolean,\setcounter,\setlength,\stepcounter} -% \DoNotIndex{\TikZ,\tvanchor,\usetikzlibrary,\value,\wd} -% \DoNotIndex{\ZIheight,\ZIheighti,\ZIheightii,\ZIheightiii,\ZIheightiv,\ZIdepth,\ZIwidth} % % \title{L'extension \textsf{tablvar}\thanks{Ce document -% correspond à \textsf{tablvar}~\fileversion, dernière modification le 23/12/2023.}} +% correspond à \textsf{tablvar}~\fileversion, dernière modification le 09/08/2024.}} % \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}} -% \date{23 décembre 2023} +% \date{9 août 2024} % \maketitle % \tableofcontents % @@ -175,8 +173,8 @@ % |pstricks| ou |tikz|, que l'on invoque dans le préambule à l'appel de l'extension : % |\usepackage[tikz]{tablvar}|. % Lorsque l'option n'est pas précisée, l'extension choisira \texttt{tikz} -% pour un compilateur PDF (comme pdf\LaTeX\ ou \LuaLaTeX), \texttt{pstricks} sinon -% (typiquement \LaTeX\ + dvips + ps2pdf ou \XeLaTeX). +% pour un mode de sortie PDF direct (avec pdf\LaTeX\ ou \LuaLaTeX), +% \texttt{pstricks} sinon (avec \LaTeX\ > dvips > ps2pdf ou \XeLaTeX). % Pour l'option |tikz|, il faut compiler \emph{deux fois}, % la première fois les flèches ne sont pas correctement dessinées % (un message de compilation le rappelle). @@ -189,9 +187,9 @@ % % \subsection{Tableaux de variations simples} % -% % \DescribeEnv{tablvar} +% \DescribeEnv{tablvar} % Un tableau de variations (ou de signes) se définit par un environnement |tablvar| -% qui \emph{doit être en mode mathématiques} (comme |array|). +% qui \emph{doit être en mode mathématique} (comme |array|). % % \medskip % Voici un premier tableau tout simple avec les commandes @@ -235,8 +233,8 @@ % Cette unité à l'avantage de s'ajuster lorsqu'on change de fonte % sans avoir besoin de modifier le code. L'unité de même type utilisée pour les hauteurs % est le \texttt{ex}, hauteur du \og x \fg.}. -% Les flèches ne sont pas contraintes à rester à l'intérieur des colonnes intervalles -% mais s'ajustent par rapport à la taille effective des valeurs qu'elles relient. +% La longueur des flèches s'ajuste en fonction de la taille des valeurs +% qu'elles relient et ne sont pas contraintes à rester à l'intérieur des colonnes intervalles. % Lorsqu'une valeur est trop large, elle déborde automatiquement % dans les colonnes intervalles sans altérer % les largeurs de colonne. @@ -314,7 +312,7 @@ % (voir section \ref{options} pour la liste détaillée des options). % % \DescribeMacro{\variations\oarg{nblignes}} -% C'est la commande |\variations| qui, se charge de la construction des flèches +% C'est la commande |\variations| qui se charge de la construction des flèches % en fonction du positionnement des valeurs. % Un paramètre optionnel permet de définir % un nombre arbitraire de lignes pour les variations (3 par défaut). @@ -418,7 +416,8 @@ % \mbox{Signe de }f'(x) & & - & \barre[0] & + & \barre[0] & - & \\ % \hline % \variations{ \mil{\makecell{\mbox{Variations} \\ \mbox{de }f}} & -% \haut{+\infty} && \bas{-14} && \haut{\frac{69}{4}} && \bas{-\infty} } +% \haut{+\infty} && \bas{-14} && \haut{\frac{69}{4}} && +% \bas{-\infty} } % \hline %\end{tablvar}\] % \end{verbatim} @@ -435,50 +434,57 @@ % % \medskip % Une première solution est d'interrompre la double barre pour placer -% les limites qui resteront alors centrées au milieu de la colonne (mais il faut aimer). +% les limites qui resteront alors centrées au milieu de la colonne +% (mais il faut aimer). %\[\begin{tablvar}{2} % \hline -% x & -\infty && 0 && +\infty \\ +% x & -\infty && 2 && +\infty \\ % \hline -% \variations{\mil{\e^{\frac{1}{x}}} & \haut{1} && -% \bas{0} \pos*{2}{\bb} \discont \haut{+\infty} && \bas{1} } +% \variations{\mil{\dfrac{1}{x-2}} & \pos{2}{0} && \bas{-\infty} +% \pos*{2}{\bb} \discont \haut{+\infty} && \pos{2}{0} } % \hline %\end{tablvar}\] -% La macro |\e| compose le nombre d'Euler $\e$ en romain (forme droite), -% comme c'est la règle pour les constantes mathématiques -% (cf. \textsf{mismath}~\cite{MIS} ou \textsf{frenchmath}~\cite{FR}). % \begin{verbatim} %\[\begin{tablvar}{2} % \hline -% x & -\infty && 0 && +\infty \\ +% x & -\infty && 2 && +\infty \\ % \hline -% \variations{\mil{\e^{\frac{1}{x}}} & \haut{1} && -% \bas{0} \pos*{2}{\bb} \discont \haut{+\infty} && \bas{1} } +% \variations{\mil{\dfrac{1}{x-2}} & \pos{2}{0} && \bas{-\infty} +% \pos*{2}{\bb} \discont \haut{+\infty} && \pos{2}{0} } % \hline %\end{tablvar}\] % \end{verbatim} % % \hypertarget{firstcolsep}{} % \DescribeMacro{\limg} \DescribeMacro{\limd} -% Les macros |\limg|\oarg{pos}\marg{ligne}\marg{valeur} -% et |\limd|\oarg{pos}\marg{ligne}\marg{valeur} +% Les macros |\limg|\oarg{pos}\marg{ligne}\marg{valeur} et +% |\limd|\oarg{pos}\marg{lgn}\marg{val} % offrent une solution plus élégante pour placer des limites à gauche ou à droite. % L'option de positionnement \meta{pos} correspond à celle de la macro |\pos| % (\texttt{c}, \texttt{t} ou \texttt{b}). +% +% \DescribeMacro{\limg*}\DescribeMacro{\limd*} +% Les variantes étoilées |\limg*| et |\limd*| sont des alias : +% |\limg*{+}| signifie |\limg{1}{+\infty}|, +% |\limg*{-}| correspond à |\limg{|$n$|}{-\infty}| +% (pour une partie variations sur $n$ lignes), +% de même pour |\limd*|. +% Tout autre argument que \texttt{+} ou \texttt{-} génère un message d'erreur. +% +% \DescribeMacro{firstcolsep} +% La colonne de légende peut être élargie en ajoutant de l'espace à ses extrémités +% avec l'option \texttt{firstcolsep} (dont la valeur par défaut est \texttt{5pt}). %\[\begin{tablvar}[firstcolsep=10pt,intervalwidth=4em]{2} % \hline % x & -\infty && 0 && +\infty \\ % \hline % -\frac{1}{x} & & + & \bb & - & \\ % \hline -% \variations{ \mil{\dfrac{1}{x^2}} & \bas{0} && \limg{1}{+\infty} \bb -% \discont \limd{1}{+\infty} && \bas{0} } +% \variations{ \mil{\e^{\frac{1}{x}}} & \haut{1} && \limg{3}{0} \bb +% \discont \limd*{+} && \bas{1} } % \hline %\end{tablvar}\] % -% \DescribeMacro{firstcolsep} -% Ci-dessus la colonne de légende a été élargie en ajoutant de l'espace à ses extrémités -% avec l'option \texttt{firstcolsep} (dont la valeur par défaut est \texttt{5pt}). % \begin{verbatim} %\[\begin{tablvar}[firstcolsep=10pt,intervalwidth=4em]{2} % \hline @@ -486,13 +492,18 @@ % \hline % -\frac{1}{x} & & + & \bb & - & \\ % \hline -% \variations{ \mil{\dfrac{1}{x^2}} & \bas{0} && \limg{1}{+\infty} \bb -% \discont \limd{1}{+\infty} && \bas{0} } +% \variations{ \mil{\e^{\frac{1}{x}}} & \haut{1} && \limg{3}{0} \bb +% \discont \limd*{+} && \bas{1} } % \hline %\end{tablvar}\] % \end{verbatim} +% \vspace{-2ex} +% La macro |\e| compose le nombre d'Euler $\e$ en romain, +% comme c'est la règle pour les constantes mathématiques +% (cf. \textsf{mismath}~\cite{MIS} ou \textsf{frenchmath}~\cite{FR}). % -% \DescribeMacro{\bblim} +% \bigskip +% \DescribeMacro{\bblim}\DescribeMacro{\bblim*} % Sauf sur les bords du tableau ou lorsqu'il y a une zone interdite, % les doubles barres sont en général accompagnées à la fois d'une limite à gauche % et d'une limite à droite. La commande |\bblim| permet alors d'alléger la syntaxe. @@ -502,24 +513,28 @@ % C'est un alias de % |\limg|\marg{ligne}\marg{valeur}|\bb\discont\limd|\marg{ligne}\marg{valeur}. % La seule différence est que |\bblim| ne possède pas d'option de positionnement -% des nœuds comme |\limg| et |\limd|. -%\[\begin{tablvar}{4} +% des nœuds comme |\limg| et |\limd|. La forme étoilée offre une syntaxe +% encore plus légère lorsque les deux limites sont infinies : +% |\bblim*{-}{+}| correspond à |\bblim{3}{-\infty}{1}{+\infty}| +% (lorsqu'il y a 3 lignes de variations). +% +%\[\begin{tablvar}{5} % \hline -% x & -\infty && -1 && 0 && 1 && +\infty \\ +% x & -\infty && -2 && 0 && 1 && 2 && +\infty \\ % \hline -% \variations{\mil{\dfrac{1}{1-x^2}} & \haut{0} && -% \bblim{3}{-\infty}{1}{+\infty} && \bas{1} && -% \bblim{1}{+\infty}{3}{-\infty} && \haut{0} } +% \variations{ \mil{\dfrac{\e^{\frac{1}{x}}}{x-2}} & \haut{0} && +% \bas{-\frac{1}{4}\e^{-\frac{1}{2}}} && \bblim{1}{0}{3}{-\infty} && +% \haut{-\e} && \bblim*{-}{+} && \bas{0} } % \hline %\end{tablvar}\] % \begin{verbatim} -%\[\begin{tablvar}{4} +%\[\begin{tablvar}{5} % \hline % x & -\infty && -1 && 0 && 1 && +\infty \\ % \hline -% \variations{\mil{\dfrac{1}{1-x^2}} & \haut{0} && -% \bblim{3}{-\infty}{1}{+\infty} && \bas{1} && -% \bblim{1}{+\infty}{3}{-\infty} && \haut{0} } +% \variations{ \mil{\dfrac{\e^{\frac{1}{x}}}{x-2}} & \haut{0} && +% \bas{-\frac{1}{4}\e^{-\frac{1}{2}}} && \bblim{1}{0}{3}{-\infty} && +% \haut{-\e} && \bblim*{-}{+} && \bas{0} } % \hline %\end{tablvar}\] % \end{verbatim} @@ -533,7 +548,7 @@ % sauf si on préfère plus de blanc. % On peut y compris leur donner des valeurs négatives si l'on veut s'approcher % davantage des filets verticaux, par exemple \texttt{limsep=-1.5pt} -% amène au contact de la double barre). +% amènerait au contact de la double barre). %\[\begin{tablvar}[bordercolsep=4pt,limsep=3pt]{3} % \hline % x & -\infty && 0 && 1 && +\infty \\ @@ -568,7 +583,7 @@ % \hline % x & 0 && 1 && +\infty \\ % \hline -% \variations{ \mil{\ln x -x} & \bb\limd{3}{-\infty} && \haut{-1} && +% \variations{ \mil{\ln x -x} & \bb\limd*{-} && \haut{-1} && % \bas{-\infty} } % \hline %\end{tablvar*} @@ -589,7 +604,7 @@ % \hline % x & 0 && 1 && +\infty \\ % \hline -% \variations{ \mil{\ln x -x} & \bb\limd{3}{-\infty} && \haut{-1} && +% \variations{ \mil{\ln x -x} & \bb\limd*{-} && \haut{-1} && % \bas{-\infty} } % \hline %\end{tablvar*} @@ -603,8 +618,8 @@ % \hline %\end{tablvar*}\] % \end{verbatim} -% \hypertarget{ext}{} % +% \hypertarget{ext}{} % \DescribeMacro{extleft}\DescribeMacro{extright} % Dans \texttt{tablvar*}, si, à une extrémité sans double barre, % les valeurs ont des largeurs vraiment différentes @@ -622,25 +637,25 @@ % pour éviter que le 1 ne soit collé au bord droit % et qu'il garde un bon centrage par rapport à $+\infty$. % -% \noindent\begin{minipage}[t]{7.7cm} +% \noindent\begin{minipage}[t]{7.4cm} % \begin{verbatim} -%\[\begin{tablvar}[extleft,intervalwidth=4em]{1} +%\[\begin{tablvar}[extleft]{1} % \hline % x & 0 && +\infty \\ % \hline -% \variations{ \mil{1-\dfrac{1}{x}} & \bb -% \limd{3}{-\infty} && \haut{1} } +% \variations[2]{ \mil{1-\dfrac{1}{x}} +% & \bb \limd*{-} && \haut{1} } % \hline %\end{tablvar}\] % \end{verbatim} % \end{minipage} % \begin{minipage}[t]{5cm} -%\[\begin{tablvar}[extleft,intervalwidth=4em]{1} +%\[\begin{tablvar}[extleft]{1} % \hline % x & 0 && +\infty \\ % \hline -% \variations{ \mil{1-\dfrac{1}{x}} & \bb -% \limd{3}{-\infty} && \haut{1} } +% \variations[2]{ \mil{1-\dfrac{1}{x}} +% & \bb \limd*{-} && \haut{1} } % \hline %\end{tablvar}\] % \end{minipage} @@ -661,14 +676,14 @@ % % Voici un exemple où la valeur remarquable % est placée dans la colonne intervalle.\\ -% \begin{minipage}[t]{7.7cm} +% \begin{minipage}[t]{7.4cm} % \begin{verbatim} %\[\begin{tablvar*}[6em]{1} % \hline % x & 0 & \vr{1} & +\infty \\ % \hline % \variations{ \mil{\ln x} & -% \bb \limd{3}{-\infty} & \vr{0} & +% \bb \limd*{-} & \vr{0} & % \pos[t]{1}{+\infty} } % \hline %\end{tablvar*}\] @@ -680,7 +695,7 @@ % x & 0 & \vr{1} & +\infty \\ % \hline % \variations{ \mil{\ln x} & -% \bb \limd{3}{-\infty} & \vr{0} & +% \bb \limd*{-} & \vr{0} & % \pos[t]{1}{+\infty} } % \hline %\end{tablvar*}\] @@ -702,8 +717,8 @@ % \hline % x & -\infty && \vr{0} && \vr{1} && +\infty \\ % \hline -% \variations[4]{ \mil{\exp x} & \haut{0} && -% \vr[3]{1} && \vr{\e} && \bas{+\infty} } +% \variations[4]{ \mil{\exp x} & \bas{0} && +% \vr[3]{1} && \vr{\e} && \haut{+\infty} } % \hline %\end{tablvar}\] % \end{verbatim} @@ -738,7 +753,7 @@ % \medskip % On peut préférer que les flèches de variations ne passent pas à travers % les valeurs remarquables (qui doivent alors être aussi des nœuds pour les flèches). -% L'exemple suivant présente un tableau utilisant simultanément +% L'exemple qui suit présente un tableau utilisant simultanément % les deux manières de traiter les valeurs remarquables. % La taille des flèches s'ajuste automatiquement. % Le second zéro correspond à la fois à un nœud pour les flèches @@ -767,6 +782,10 @@ % L'option |[t]| pour le max en ligne 1 % est ici combinée avec l'option |[b]| en ligne 3 et permet de conserver % un positionnement correct du 0 sur la flèche. +% +% Pour placer la dernière valeur, on aurait pu utiliser |\limg[b]{3}{-\infty}|, +% mais ici |\pos[b]{3}{-\infty}| convient aussi à cause de l'option \texttt{extright} +% qui produit un alignement au fer à droite de la dernière colonne. % \begin{verbatim} %\[\begin{tablvar}[extright,intervalwidth=2em]{4} % \hline @@ -782,7 +801,6 @@ %\end{tablvar}\] % \end{verbatim} % -% \vspace{-\baselineskip} % \DescribeMacro{\vrconnect} % C'est la macro graphique |\vrconnect| qui gère le tracé de ces traits pointillés. % Elle peut être redéfinie pour changer leur aspect @@ -802,7 +820,7 @@ % 0 &\mbox{si } x= 0 %\end{array} %\right. .\] -% \begin{minipage}[t]{6.5cm} +% \begin{minipage}[t]{6.7cm} % \begin{verbatim} %\[\begin{tablvar}{2} % \hline @@ -900,7 +918,7 @@ % \vspace{-\baselineskip} % Le |\hspace{-0.5em}| devant \texttt{+} a pour effet de décaler le $+$ affiché % vers la gauche afin de le recentrer. -% En effet, les macros |\limg| et |limd| placent les valeurs dans des boîtes de largeur +% En effet, les macros |\limg| et |\limd| placent les valeurs dans des boîtes de largeur % nulle (grâce à la commande |\zbox|, voir section \ref{cmd-pos}). % De ce fait, le contenu d'une colonne valeur (qui a une largeur fixe) % peut déborder en largeur @@ -926,8 +944,8 @@ % -\frac{x}{\strut\sqrt{x^2-1}^3} && + & \bb & \ZI & \bb & - & \\ % \hline % \variations{\pos*{2}{\dfrac{1}{\sqrt{x^2-1}}} & \bas{0} && -% \limg{1}{+\infty} \bb & \ZI & -% \bb \limd{1}{+\infty} && \bas{0} } +% \limg*{+} \bb & \ZI & +% \bb \limd*{+} && \bas{0} } % \hline %\end{tablvar}\] % @@ -943,8 +961,8 @@ % -\frac{x}{\strut\sqrt{x^2-1}^3} && + & \bb & \ZI & \bb & - & \\ % \hline % \variations{\pos*{2}{\dfrac{1}{\sqrt{x^2-1}}} & \bas{0} && -% \limg{1}{+\infty} \bb & \ZI & -% \bb \limd{1}{+\infty} && \bas{0} } +% \limg*{+} \bb & \ZI & +% \bb \limd*{+} && \bas{0} } % \hline %\end{tablvar}\] % \end{verbatim} @@ -961,7 +979,8 @@ % Il arrive que la compilation \LaTeX\ + dvips + ps2pdf % n'affiche pas cette transparence, % ce qui semble être dû à un bug dans certaines versions de Ghostscript. -% Dans ce cas la solution est de compiler avec \XeLaTeX. +% Dans ce cas une solution peut être de compiler avec \XeLaTeX\ ou \LuaLaTeX\ +% (si \textsf{luapstricks} est installé sur votre distribution). % La compilation pdf\LaTeX\ avec l'option \texttt{tikz} ne pose pas ce problème.} % %\[\begin{tablvar}[ZItype=c,ZIcolor=green,ZIaddwidth=1pt]{3} @@ -1000,17 +1019,18 @@ %\end{tablvar}\] % \end{verbatim} % -% Si des extrema de grande taille sont placés dans la partie variations, +% lorsque des extrema de grande taille sont placés dans la partie \emph{variations}, % il est nécessaire de modifier la hauteur des lignes, % pour éviter de toucher le filet horizontal (au-dessus ou en-dessous) -% \footnote{L'extension \textsf{tabularray}~\cite{TABUL} de Jianrui Lyu permettra -% éventuellement une gestion automatisée des hauteurs de ligne dans une version future.}. +% \footnote{L'extension \textsf{tabularray}~\cite{TABUL} de Jianrui Lyu permettrait +% éventuellement une gestion automatisée des hauteurs de ligne +% dans une possible version future.}. % Cette modification peut se faire -% avec \texttt{stretch} ou avec |\vstrut|\oarg{depth}\marg{height} -% \emph{qu'il faut placer dans la toute 1\iere colonne} pour +% avec l'option \texttt{stretch} ou avec |\vstrut|\oarg{depth}\marg{height} +% qu'il faut placer \emph{dans la colonne de légendes} pour % que |\ZI| prenne en compte sa hauteur. -% Dans l'exemple suivant, \texttt{stretch=2.2} aurait donné le même résultat pour -% les variations mais une ligne des $x$ plus haute. +% Dans l'exemple suivant, \texttt{stretch=2.2} aurait donné le même résultat +% mais une ligne des $x$ plus haute. % %\[\begin{tablvar}[4em]{4} % \hline @@ -1080,7 +1100,7 @@ % \DescribeMacro{\hachure} % Lorsque l'on dessine des zones interdites hachurées % sur plusieurs colonnes contiguës, -% les hachures seront en général discontinues. +% les hachures ne seront en général pas jointives. % Pour pallier cela, on peut % utiliser la primitive graphique |\hachure| % qui permet de définir manuellement le rectangle à hachurer. @@ -1090,16 +1110,16 @@ %\[ \begin{tablvar}[intervalwidth=1.8em,ZIaddwidth=1pt]{8} % \hline % x & -\infty && -2 && -\sqrt{\frac{5}{2}} && -1 -% && 0 && 1 && \sqrt{\frac{5}{2}} && 2 && +\infty \\ +% && 0 && 1 && \sqrt{\frac{5}{2}} && 2 && +\infty \\ % \hline % 2x & &-& \barre &-& \barre &-& \barre &-& \barre[0] &+& -% \barre &+& \barre &+& \barre &+& \\ +% \barre &+& \barre &+& \barre &+& \\ % \hline % 2x^2-5 & &+& \barre &+& \barre[0] &-& \barre &-& \barre &-& -% \barre &-& \barre[0] &+& \barre &+& \\ +% \barre &-& \barre[0] &+& \barre &+& \\ % \hline % f'(x) & &-& \bb & \ZI & \barre & \ZI & \bb &+& -% \barre[0] &-& \bb & & & & \bb & + & \\ +% \barre[0] &-& \bb & & & & \bb & + & \\ % \hline % \variations{\mil{f(x)} & \haut{+\infty} && \bas{0}\barre & \ZI & % \barre & \ZI & \bas{0}\barre && \haut{2} && \bas{0}\barre \discont @@ -1108,7 +1128,7 @@ % \hline %\end{tablvar} \] } % -% Pour hachurer une zone donnée, la commande |\hachure| peut être placée où l'on veut +% La commande |\hachure| peut être placée où l'on veut % dans le tableau, il suffit de donner les coordonnées du rectangle visé à % partir de la position courante (réglage manuel). % Dans la partie variations, il faut mettre la commande |\hachure| dans un |\pos*|, @@ -1119,16 +1139,16 @@ %\[ \begin{tablvar}[intervalwidth=1.8em,ZIaddwidth=1pt]{8} % \hline % x & -\infty && -2 && -\sqrt{\frac{5}{2}} && -1 -% && 0 && 1 && \sqrt{\frac{5}{2}} && 2 && +\infty \\ +% && 0 && 1 && \sqrt{\frac{5}{2}} && 2 && +\infty \\ % \hline % 2x & &-& \barre &-& \barre &-& \barre &-& \barre[0] &+& -% \barre &+& \barre &+& \barre &+& \\ +% \barre &+& \barre &+& \barre &+& \\ % \hline % 2x^2-5 & &+& \barre &+& \barre[0] &-& \barre &-& \barre &-& -% \barre &-& \barre[0] &+& \barre &+& \\ +% \barre &-& \barre[0] &+& \barre &+& \\ % \hline % f'(x) & &-& \bb & \ZI & \barre & \ZI & \bb &+& -% \barre[0] &-& \bb & & & & \bb & + & \\ +% \barre[0] &-& \bb & & & & \bb & + & \\ % \hline % \variations{\mil{f(x)} & \haut{+\infty} && \bas{0}\barre & \ZI & % \barre & \ZI & \bas{0}\barre && \haut{2} && \bas{0}\barre \discont @@ -1219,11 +1239,11 @@ % \medskip % \DescribeMacro{\tablvarset\marg{keyval}} % Mais les environnements \texttt{tablvar} et \texttt{tablvar*} possèdent également -% un jeu de paramètres qui peuvent être définis de manière globale -% (ou locale dans un environnement ou un groupe |{...}|), -% avec des variables spécifiques -% ou (depuis la version 2.0) avec la commande |\tablvarset|\marg{keyval}, -% utilisant le mécanisme \emph{clé=valeur}. +% un jeu de paramètres qui peuvent être définis de manière globale, +% ou locale dans un environnement (ou un groupe |{...}|), +% soit en utilisant des variables spécifiques, +% soit (depuis la version 2.0) avec la commande |\tablvarset|\marg{keyval}, +% basée sur le mécanisme \emph{clé=valeur}. % % \DescribeEnv{tablvar\oarg{keyval}}\DescribeEnv{tablvar*\oarg{keyval}} % Ces paramètres peuvent aussi être réglés localement, @@ -1280,12 +1300,12 @@ % \begin{description} % \item[stretch] qui est un facteur d'élasticité verticale agissant sur toutes % les lignes du tableau -% \footnote{Pour ajuster la hauteur d'une ligne particulière, on dispose de la -% macro \texttt{\textbackslash vstrut}\oarg{depth}\marg{height} +% \footnote{Pour augmenter la hauteur d'une ligne particulière, on pourra utiliser la +% commande \texttt{\textbackslash vstrut}\oarg{depth}\marg{height} % (du package \textsf{spacingtricks}~\cite{SPA}), % où \meta{depth} désigne la \emph{profondeur} et \meta{height} la \emph{hauteur} % minimales à atteindre par rapport à la ligne de \emph{base}, -% ou encore de \texttt{\bslash cstrut}\marg{height} qui garantit une hauteur minimale +% ou encore \texttt{\bslash cstrut}\marg{height} qui garantit une hauteur minimale % en-dessous et au-dessus de la ligne de centrage mathématique.} ; % une valeur de 1 correspond à la valeur standard % d'un environnement \texttt{array}. @@ -1322,7 +1342,7 @@ % % \medskip % Le rendu des commandes graphiques peut également être modifié, -% en redéfinissant ces commandes, en particulier |\fleche|, |vrconnect| et |\hachure| +% en redéfinissant ces commandes, en particulier |\fleche|, |\vrconnect| et |\hachure| % grâce aux nombreuses options offertes par PSTricks ou \TikZ. % C'est le cas aussi de l'aspect des filets et barres du tableau qui sont définis % par les commandes |\tvrulewidth| (\texttt{0.4pt} par défaut), @@ -1349,8 +1369,8 @@ % \hline % -\frac{x+2}{x^4} && - & \barre[0] & + & \bb & - & \\ % \hline -% \variations{\mil{\e^{\frac{x+1}{x^2}}} & \haut{1} && \bas{\e^{-\frac{1}{4}}} -% && \bblim{1}{+\infty}{1}{+\infty} && \bas{1} } +% \variations{\mil{\e^{\frac{x+1}{\vstrut{1.2ex} x^2}}} & \haut{1} && +% \bas{\e^{-\frac{1}{4}}} && \bblim*{+}{+} && \bas{1} } % \hline %\end{tablvar} \] % \begin{verbatim} @@ -1366,24 +1386,27 @@ % \hline % -\frac{x+2}{x^4} && - & \barre[0] & + & \bb & - & \\ % \hline -% \variations{\mil{\e^{\frac{x+1}{x^2}}} & \haut{1} && -% \bas{\e^{-\frac{1}{4}}} && \bblim{1}{+\infty}{1}{+\infty} && -% \bas{1} } +% \variations{\mil{\e^{\frac{x+1}{\vstrut{1.2ex} x^2}}} & \haut{1} && +% \bas{\e^{-\frac{1}{4}}} && \bblim*{+}{+} && \bas{1} } % \hline %\end{tablvar} \] % \end{verbatim} +% +% Enfin deux autres paramètres de type longueur |\rowtopsep| et |\rowbottomsep| +% garantissent un espace minimum (de \texttt{2pt} par défaut) +% entre les filets horizontaux et le contenu des cellules, pour la colonne des légendes. % -% \subsection{Nouveautés de la version 2.0} +% \subsection{Nouveautés depuis la version 2.0} % -% Cette version présente de nombreuses nouveautés : +% La version 2.0 présente de nombreuses nouveautés : % \begin{itemize} % \item \emph{Il n'y a plus d'option par défaut} à l'appel de l'extension. % C'était \texttt{pstricks} dans les versions précédentes. % Dorénavant, si aucune option n'est précisée, l'extension choisira elle-même -% en fonction du compilateur utilisé, donc \texttt{tikz} pour le moteur pdf\LaTeX\ +% en fonction du compilateur utilisé, donc \texttt{tikz} pour pdf\LaTeX\ % qui ne supporte pas le code PSTricks. % -% \item \emph{Les colonnes de valeurs ont des largeurs fixes (\texttt{2em} par défaut)} +% \item \emph{Les colonnes de valeurs ont des largeurs fixes} (\texttt{2em} \emph{par défaut)} % et non plus variables en fonction du contenu, comme c'était le cas jusqu'à la version % 1.2. L'avantage est d'améliorer le centrage pour les signes, % lorsque les colonnes de valeurs ont des largeurs très différentes, @@ -1395,7 +1418,7 @@ % et a été fixé à \texttt{0pt} car, en l'absence de filets verticaux, % il ne sert plus à rien avec les colonnes à largeur fixe. % Mais, en contrepartie, \emph{la valeur par défaut de} |\intervalwidth| -% \emph{a été augmentée de \texttt{2.5em} à \texttt{3em}}. +% \emph{a été augmentée de} \texttt{2.5em} \emph{à} \texttt{3em}. % % \item Les réglages peuvent désormais être effectués, % avec la syntaxe \emph{clé = valeur} et la commande |\tablvarset|, @@ -1446,12 +1469,26 @@ % De nouveaux types de colonnes ont été définis pour les valeurs et légendes, % mais sont également internes à l'environnement \texttt{tablvar}. % -% \item Les macros |\haut|, |\bas| et |\mil| peuvent à présent être utilisées +% \item Les macros |\bas| et |\mil| peuvent à présent être utilisées % même lorsque le nombre de lignes de variations est différent de 3. % Dans ce cas, commande |\mil| calcule automatiquement le décalage vertical ; % l'utilisateur n'a plus besoin d'un appel explicite à |\vdecal|. % \end{itemize} % +% Dans la version 2.1 : +% \begin{itemize} +% \item Ont été ajoutés deux nouveaux paramètres |\rowtopsep| et |\rowbottomsep| +% pour garantir un espace minimum (de \texttt{2pt} par défaut) +% entre les filets horizontaux et le contenu pour la colonne des légendes. +% \item +% Il est désormais possible d'utiliser l'option \texttt{pstricks} avec \LuaLaTeX, +% si \textsf{luapstricks} est installé sur votre distribution. +% \item Le calcul du décalage vertical de la commande |\mil| a été amélioré, +% dans le cas d'un nombre pair de lignes de variations. +% \item Les nouvelles commandes étoilées |\limg*|, |\limd*| et |\bblim*| +% permettent une écriture simplifiée de |\limg|, |\limd| et |\bblim|, +% pour des limites $\infty$. +% \end{itemize} % \medskip % Des problèmes de composition peuvent apparaître avec des tableaux % réalisés antérieurement à la version 2.0, en particulier @@ -1469,16 +1506,81 @@ % dans la rubrique \og Maths tabvar \fg. % Nous les décrivons ici brièvement. % \begin{description} -% \item[tableaux] de Nicolas Kisselhoff~\cite{TABL}. +% \item[tableaux] de Nicolas Kisselhoff~\cite{TABL}. % Propose un pseudo-code PSTricks, % certainement plus commode que d'écrire toutes les commandes PSTricks. - +% Attention l'extension doit être appelée avec |\usepackage{tableau}|, sans \texttt{x}. +% Voici un exemple repris de la doc de \textsf{tableaux} avec le code en suivant. +%\newpsstyle{hachured}{fillstyle=hlines,hatchwidth=0.2pt,hatchsep=2pt} +%\setlength{\TabTitreL}{1cm} +% +%\begin{MonTableau}{1}{9}{1.5} +%\psframe[style=hachured,linestyle=none](.3,1)(.45,0) +% +%\TabNewCol{0} +%\rTabPut{Br}{-.15}{.25}{$x$} +%\rTabPut{Br}{-.15}{.40}{$f(x)$} +% +%\TabNewCol{0} +%\rTabPut{Bl}{.15}{.25}{$0$} +%\rTabPut{Bl}{.15}{.60}{$\frac{3}{2}$} +% +%\TabNewCol{.30} +%\rTabPut{B}{0}{.25}{$1$} +%\rTabPut{Br}{-.15}{.80}{$+\infty$} +%\psline[style=TabDblBarre](.3,0)(.3,1) +% +%\TabNewCol{.45} +%\rTabPut{B}{0}{.25}{$\frac{3}{2}$} +%\rTabPut[2]{B}{0}{.10}{\TabZ} +% +%\TabNewCol{1} +%\rTabPut{Br}{-.15}{.25}{$+\infty$} +%\rTabPut{Br}{-.15}{.40}{$1$} +% +%\TabFleche{B1}{C1} +%\TabFleche{D1}{E1} +%\end{MonTableau} +% +% \begin{verbatim} +%\newpsstyle{hachured}{fillstyle=hlines,hatchwidth=0.2pt,hatchsep=2pt} +%\setlength{\TabTitreL}{1cm} +% +%\begin{MonTableau}{1}{9}{1.5} +%\psframe[style=hachured,linestyle=none](.3,1)(.45,0) +% +%\TabNewCol{0} +%\rTabPut{Br}{-.15}{.25}{$x$} +%\rTabPut{Br}{-.15}{.40}{$f(x)$} +% +%\TabNewCol{0} +%\rTabPut{Bl}{.15}{.25}{$0$} +%\rTabPut{Bl}{.15}{.60}{$\frac{3}{2}$} +% +%\TabNewCol{.30} +%\rTabPut{B}{0}{.25}{$1$} +%\rTabPut{Br}{-.15}{.80}{$+\infty$} +%\psline[style=TabDblBarre](.3,0)(.3,1) +% +%\TabNewCol{.45} +%\rTabPut{B}{0}{.25}{$\frac{3}{2}$} +%\rTabPut[2]{B}{0}{.10}{\TabZ} +% +%\TabNewCol{1} +%\rTabPut{Br}{-.15}{.25}{$+\infty$} +%\rTabPut{Br}{-.15}{.40}{$1$} +% +%\TabFleche{B1}{C1} +%\TabFleche{D1}{E1} +%\end{MonTableau} +% \end{verbatim} +% % \item[tabvar] de Daniel Flipo~\cite{TABV}, % l'auteur, entre-autres de \textsf{babel-french}, % extension bien connue de tous les utilisateurs francophones de \LaTeX. % Permet de réaliser des tableaux plutôt symboliques. % Voici un tableau simple et son code \textsf{tabvar}. \\ -% \begin{minipage}[t]{7cm} +% \begin{minipage}[t]{7.5cm} % \begin{verbatim} %\[\begin{tabvar}{|C|CCCCR|} % \hline @@ -1492,7 +1594,7 @@ %\end{tabvar}\] % \end{verbatim} % \end{minipage} -% \begin{minipage}[t]{5cm} +% \begin{minipage}[t]{4.2cm} %\[\begin{tabvar}{|C|CCCCR|} % \hline % x & 0 & & \frac{1}{2} & & 1 \\ @@ -1551,19 +1653,19 @@ % Une très belle extension qui fait a peu près tout ce que fait \textsf{tablvar} % et même un peu plus : par exemple tangentes horizontales sur les extrema, % cellules en couleur. -% Un de ses principaux avantages par rapport à \textsf{tablvar} est de ne pas nécessiter +% Un de ses principaux bénéfices par rapport à \textsf{tablvar} est de ne pas nécessiter % de double compilation % \footnote{La double compilation avec \textsf{tablvar} n'est cependant nécessaire % qu'avec l'option \texttt{tikz}.}. -% Signalons quelques différences avec \textsf{tablvar} : +% Signalons quand même quelques avantages de \textsf{tablvar} : % \begin{itemize} -% \item un tableau n'est pas globalement en mode mathématique, il faut donc mettre les -% \$ du mode math autour de chaque valeur, -% \item les hauteurs de ligne doivent être précisées de manière explicite et -% ne peuvent être données qu'en cm (unité fixe qui ne s'ajuste pas à la fonte), -% \item \textsf{tablvar} offre la possibilité de mettre des 0 par dessus les flèches, -% \item les double barres aux extrémités du tableau sont assez éloignées des filets, -% ce qui peut donc laisser un certain blanc sur les bords. +% \item avec \textsf{tkz-tab}, un tableau n'est pas globalement en mode mathématique, +% il faut donc mettre les |$| du mode math autour de chaque valeur, +% \item et les hauteurs de ligne doivent être précisées de manière explicite et +% uniquement cm (unité fixe qui ne s'ajuste pas à la fonte), +% \item \textsf{tablvar} offre la possibilité de mettre des valeurs par dessus les flèches, +% \item dans \textsf{tkz-tab}, les double barres aux extrémités du tableau +% sont assez éloignées des filets, ce qui laisse un blanc important sur les bords. % \end{itemize} % Voici un exemple illustrant ce dernier point, avec son code. % Pour comparer, le tableau obtenu avec \textsf{tablvar} @@ -1615,7 +1717,7 @@ \RequirePackage{ifthen} \RequirePackage{multido} \RequirePackage{xkeyval} -\RequirePackage{ifpdf} +\RequirePackage{iftex} \newif\iftv@tikz % false par défaut \DeclareOption{tikz}{\tv@tikztrue} @@ -1625,23 +1727,31 @@ \iftv@pstricks \ifpdf - \PackageError{tablvar}{Don't use the pstricks option with PDF engines}{} + \ifluatex + \PackageInfo{tablvar}{Option 'pstricks' works + with luapstricks} + \else + \PackageError{tablvar}{Don't use the 'pstricks' option with + PDF output mode}{Use 'tikz' option or change the engine} + \fi \else - \PackageInfo{tablvar}{PSTricks option is used} + \PackageInfo{tablvar}{Option 'pstricks' is used} \fi \else\iftv@tikz - \PackageInfo{tablvar}{tikz option is used. + \AtEndDocument{\PackageWarningNoLine{tablvar}{Option 'tikz' is used. \MessageBreak - Run twice to draw the arrows correctly} + Maybe rerun to draw the arrows correctly} + } \else\ifpdf - \PackageWarningNoLine{tablvar}{PDF engine is used, - I'm using the tikz option. + \AtEndDocument{\PackageWarningNoLine{tablvar}{Output is in PDF mode, + I'm using the 'tikz' option. \MessageBreak - Run twice to draw the arrows correctly} + Maybe rerun to draw the arrows correctly} + } \tv@tikztrue \else - \PackageWarningNoLine{tablvar}{PDF engines not used, - I'm using the pstricks option} + \PackageWarningNoLine{tablvar}{Output is in DVI mode, + I'm using the 'pstricks' option} \tv@pstrickstrue \fi\fi\fi @@ -1832,6 +1942,28 @@ % \end{macrocode} % \end{macro} +% \begin{macro}{\rowtopsep} +% Cette longueur définit l'espace minimal entre le filet vertical supérieur et le contenu, +% pour les cellules de la colonne des légendes. +% Elle ne s'applique pas pour les lignes de variations +% puisque, dans la colonne des légendes, seule la ligne +% \og milieu \fg est censée posséder un contenu. +% \begin{macrocode} +\newlength{\rowtopsep} +\setlength{\rowtopsep}{2pt} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\rowbottomsep} +% Cette longueur définit l'espace minimal entre le filet vertical inférieur et le contenu, +% pour les cellules de la colonne des légendes. +% Elle ne s'applique pas pour les lignes de variations. +% \begin{macrocode} +\newlength{\rowbottomsep} +\setlength{\rowbottomsep}{2pt} +% \end{macrocode} +% \end{macro} + % \subsection{Les commandes graphiques PSTricks/\TikZ} \label{graph} % % Nous présentons ici les commandes graphiques permettant le dessin @@ -1962,12 +2094,13 @@ } % \end{macrocode} -% La commande |\mil| positionne son contenu sur la colonne 2, -% mais réalise un décalage vertical si le nombre de lignes de variations diffère de 3. +% La commande |\mil| positionne son contenu sur la colonne |mil@row|, +% et réalise un décalage vertical de |\mil@shift| +% si le nombre de lignes de variations est pair. % Pour cela nous avons besoin d'une variable de dimension et d'un compteur. % \begin{macrocode} -\newlength\mil@heightshift -\newcounter{mil@rowshift} +\newlength\mil@shift +\newcounter{mil@row} % \end{macrocode} % Pour gérer correctement les zones interdites, avec la commande |\ZI|, @@ -2046,7 +2179,7 @@ % \end{macrocode} % \end{macro} -% \begin{macro}{\tv@saveheight} +% \begin{macro}{\tv@setheight} % Cette macro sert à calculer la hauteur et la profondeur d'une cellule, % qui seront enregistrées dans des variables globales afin que la commande |\ZI| % puisse les récupérer. @@ -2071,21 +2204,22 @@ % et le contenu de la cellule agrandie va toucher le filet horizontal. % La solution est alors de placer un |\vstrut| ou |\cstrut| dans la colonne % de légendes pour augmenter sa hauteur qui, de ce fait, sera bien enregistrée -% par |\tv@saveheight|. +% par |\tv@setheight|. % \begin{macrocode} -\newcommand\tv@saveheight{% - \tv@cellheight=0pt - \tv@celldepth=0pt - \ifdim \ht\tv@cellbox > \ht\@arstrutbox - \global\advance\tv@cellheight by \ht\tv@cellbox - \else - \global\advance\tv@cellheight by \ht\@arstrutbox +\newcommand\tv@setheight{% + \global\tv@cellheight=\ht\tv@cellbox + \ifthenelse{\value{var@ligne}=0}{ + \global\advance\tv@cellheight by \rowtopsep}{} + \ifdim \tv@cellheight < \ht\@arstrutbox + \global\tv@cellheight = \ht\@arstrutbox \fi - \ifdim \dp\tv@cellbox > \dp\@arstrutbox - \global\advance\tv@celldepth by \dp\tv@cellbox - \else - \global\advance\tv@celldepth by \dp\@arstrutbox + \global\tv@celldepth=\dp\tv@cellbox + \ifthenelse{\value{var@ligne}=0}{ + \global\advance \tv@celldepth by \rowbottomsep}{} + \ifdim \tv@celldepth < \dp\@arstrutbox + \global\tv@celldepth = \dp\@arstrutbox \fi + \vrule height \tv@cellheight depth \tv@celldepth width 0pt } % \end{macrocode} % \end{macro} @@ -2115,7 +2249,7 @@ >{\setcounter{tv@icol}{0}\stepcounter{tv@row}\begin{lrbox}% \tv@cellbox $}% c% - <{$\end{lrbox}\usebox{\tv@cellbox}\tv@saveheight}} + <{$\end{lrbox}\usebox{\tv@cellbox}\tv@setheight}} % type de colonne i pour les intervalles \newcolumntype{i}{>{\stepcounter{tv@icol} \centering\arraybackslash$}p{\intervalwidth}<{$}} @@ -2142,7 +2276,7 @@ % On commence par prendre en compte les options grâce à |\setkeys*| fourni par l'extension % \textsf{xkeyval}. La version étoilée de |\setkeys| % a l'avantage de ne pas produire d'erreur lorsqu'une clé n'est pas reconnue -% (celle-ci est passée à |XKV@rm|). On l'interprète +% (celle-ci est passée à |\XKV@rm|). On l'interprète % \footnote{Un message d'erreur de dimension erronée % peut donc signifier que l'on s'est trompé dans l'orthographe d'une clé.} % alors comme une dimension pour le paramètre |\intervalwidth|. @@ -2156,8 +2290,8 @@ \setkeys*{tablvar}{#1} % fourni par xkeyval \if\XKV@rm\empty \else \setlength{\intervalwidth}{#1} \fi \tvcoltypes - \ifextleft \newcolumntype{B}{v{l}} \else \newcolumntype{B}{v{c}} \fi - \ifextright \newcolumntype{E}{v{r}} \else \newcolumntype{E}{v{c}} \fi + \ifextleft\newcolumntype{B}{v{l}}\else\newcolumntype{B}{v{c}}\fi + \ifextright\newcolumntype{E}{v{r}}\else\newcolumntype{E}{v{c}}\fi \tablvarinit{#2} \ZIinit \begin{array}{% @@ -2228,11 +2362,12 @@ % Les flèches et pointillés sont dessinés à la fin, quand tous les nœuds sont créés, % mais il faut les tracer avant le |\\| final, sinon la compilation plante ! % Le compteur |var@ligne| doit être remis à 0 au cas où il y a plusieurs parties variations. +% Cette remise à zéro s'effectue à la fin au cas où on mettrait des lignes de signes +% après une ligne variations. % \begin{macrocode} \newcommand*{\variations}[2][3]{% #1=nblignes (3 par défaut) % (ré)initialisation des compteurs \setcounter{nbvarlignes}{#1} - \setcounter{var@ligne}{0} \setcounter{numdiscont}{0} \multido{\I=1+1}{\themaxdiscont}{\setcounter{discont\I}{0}} % boucle : on exécute le code #2 un nb de fois égal à (#1)-1 @@ -2259,6 +2394,7 @@ } % tracé des pointillés pour les valeurs remarquables \multido{\Ix=1+1}{\thenumvr}{\vrconnect{X\Ix}{Y\Ix}} + \setcounter{var@ligne}{0} \\ % dernier retour ligne du tableau } % \end{macrocode} @@ -2291,6 +2427,7 @@ % Place son contenu dans une boite de largeur nulle : affiche le contenu % mais considère que l'espace occupé est nul pour ne pas altérer le calcul de la % largeur de colonne. +% Cette macro est similaire à |\mathclap| de l'extension \textsf{mathtools}~\cite{TOOLS}. % Sa syntaxe est : % |\zbox|\oarg{pos}\marg{contenu} où \meta{opt} = |c| (par défaut), |l| (left) ou |r| (right). % \begin{macrocode} @@ -2367,24 +2504,31 @@ % \end{macro} % \begin{macro}{\mil} -% La commande |\mil|\marg{valeur} positionne \meta{valeur} sur la ligne 2 -% de la partie variations. Lorsqu'il y a 3 lignes de variations cela correspond bien -% au milieu, mais sinon on réalise un décalage vertical grâce à |\vdecal|. -% La formule de ce décalage est -% $(3- \mbox{nblignes}) \times (\mbox{hauteur de ligne})/2$. -% Le résultat de ce calcul est stocké dans la variable de dimension |\mil@heightshift|. -% Au cas où |\mil| ne donnerait pas un résultat parfait, on pourrait alors régler +% Pour un nombre $n$ impair de lignes de variations, +% la commande |\mil|\marg{valeur} positionne \meta{valeur} sur la ligne $\frac{n+1}{2}$ +% de la partie variations. Cela correspond bien à la ligne du milieu : +% ligne 2 lorsqu'il y a 3 lignes. +% Par contre si $n$ est pair, on place \meta{valeur} sur la ligne $\frac{n}{2}$ mais avec +% un décalage vertical négatif (vers le bas) grâce à |\vdecal|. +% Ce décalage correspond à une profondeur de cellule augmenté de \texttt{0.5ex} +% (écart entre la ligne de base du texte et la ligne de centrage mathématique). +% Le résultat de ce calcul est stocké dans la variable de dimension |\mil@shift|. +% Au cas où l'on ne serait pas satisfait du résultat de |\mil|, on pourrait alors régler % le décalage manuellement avec %|\pos*|\marg{ligne}|{\vdecal|\marg{decal}\marg{contenu}|}|. % \begin{macrocode} \newcommand*{\mil}[1]{% - \mil@heightshift = \ht\@arstrutbox - \advance\mil@heightshift by \dp\@arstrutbox - \divide\mil@heightshift by 2 - \setcounter{mil@rowshift}{3} - \addtocounter{mil@rowshift}{-\value{nbvarlignes}} - \multiply\mil@heightshift by \value{mil@rowshift} - \pos*{2}{\vdecal{\mil@heightshift}{#1}} + \setcounter{mil@row}{\value{nbvarlignes}} + \ifthenelse{\isodd{\value{nbvarlignes}}}{ + \addtocounter{mil@row}{1} + \divide\value{mil@row} by 2 + \pos*{\themil@row}{\smash{#1}} + }{ + \divide\value{mil@row} by 2 + \mil@shift = \dp\@arstrutbox + \advance\mil@shift by 0.5ex + \pos*{\themil@row}{\vdecal{-\mil@shift}{#1}} + } } % \end{macrocode} % \end{macro} @@ -2409,7 +2553,7 @@ % \begin{macro}{\bb} % La macro |\bb|, qui produit une double barre, -% reprend celle de l'extension \textsf{variations} de Christian Obrecht +% reprend celle de l'extension \mbox{\textsf{variations}} de Christian Obrecht : % |\def\bb{\vrule\kern1pt\vrule}|. % Nous avons ajouté \texttt{1.5pt} d'espace avant et après, afin d'aligner au mieux % la double barre avec un 0 sur la ligne des $x$, lorsque la double barre @@ -2423,14 +2567,38 @@ % \end{macro} % \DescribeMacro{\limg}\DescribeMacro{\limd} -% Les macros |\limg| et |limd| servent à positionner des limites à gauche \emph{ou} à droite, +% Les macros |\limg| et |\limd| servent à positionner des limites à gauche ou à droite, % en particulier aux bords des double barres. % Le premier paramètre, optionnel, précise l'option de positionnement (\texttt{c}, % \texttt{l} ou \texttt{r}) et le second \emph{obligatoire} et le numéro de ligne, % enfin le troisième est la valeur à placer. +% +% \DescribeMacro{\limg*}\DescribeMacro{\limd*} +% Les versions étoilées n'acceptent comme argument que \texttt{+} ou \texttt{-}, +% |\limg*{+}| correspond à |\limg{1}{+\infty}|, +% |\limg*{-}| correspond à |\limg{|$n$|}{-\infty}| (pour une partie variations +% sur $n$ lignes et de même pour |\limd*|. % \begin{macrocode} -\newcommand*{\limg}[3][c]{\zbox[r]{\valpos[#1]{#2}{#3\hspace{\limsep}}}} -\newcommand*{\limd}[3][c]{\zbox[l]{\valpos[#1]{#2}{\hspace{\limsep}#3}}} +\newcommand*{\@limg}[3][c]{% + \zbox[r]{\valpos[#1]{#2}{#3\hspace{\limsep}}}} +\newcommand*{\@limd}[3][c]{% + \zbox[l]{\valpos[#1]{#2}{\hspace{\limsep}#3}}} +\newcommand*{\@@limg}[1]{% + \ifthenelse{\equal{#1}{+}}{\@limg{1}{+\infty}}{ + \ifthenelse{\equal{#1}{-}}{\@limg{\value{nbvarlignes}}{-\infty}}{ + \PackageError{tablvar}{Invalid argument for \string\limg*} + {Only + or - are valid arguments for \string\limg*} + }} +} +\newcommand*{\@@limd}[1]{% + \ifthenelse{\equal{#1}{+}}{\@limd{1}{+\infty}}{ + \ifthenelse{\equal{#1}{-}}{\@limd{\value{nbvarlignes}}{-\infty}}{ + \PackageError{tablvar}{Invalid argument for \string\limd*} + {Only + or - are valid arguments for \string\limd*} + }} +} +\newcommand{\limg}{\@ifstar{\@@limg}{\@limg}} +\newcommand{\limd}{\@ifstar{\@@limd}{\@limd}} % \end{macrocode} % \begin{macro}{\discont} @@ -2458,16 +2626,19 @@ % \end{macrocode} % \end{macro} -% \begin{macro}{\bblim} -% Sert à positionner des limites à gauche \emph{et} à droite +% \DescribeMacro{\bblim}\DescribeMacro{\bblim*} +% Ces macros servent à positionner des limites à gauche \emph{et} à droite % d'une double barre. -% Cette macro trace la double barre, place les limites et appelle |\discont|. -% Sa syntaxe est : -% |\bblim|\marg{ligne gauche}\marg{limite gauche}\marg{ligne droite}\marg{limite droite}. +% Elles tracent la double barre, placent les limites et appellent |\discont|.\\ +% La syntaxe de |\bblim| est : \\ +% |\bblim|\marg{ligne gauche}\marg{limite gauche}\marg{ligne droite}\marg{limite droite}.\\ +% La syntaxe de|\bblim*| reprend celle de |\limg*| et |\limd*| : +% |\bblim*|\marg{+$\vert$-}\marg{+$\vert$-}. % \begin{macrocode} -\newcommand*{\bblim}[4]{\limg{#1}{#2}\bb\discont\limd{#3}{#4}} +\newcommand*{\@bblim}[4]{\limg{#1}{#2}\bb\discont\limd{#3}{#4}} +\newcommand*{\@@bblim}[2]{\limg*{#1}\bb\discont\limd*{#2}} +\newcommand*{\bblim}{\@ifstar{\@@bblim}{\@bblim}} % \end{macrocode} -% \end{macro} % \begin{macro}{\vr} % La commande |\vr| fabrique un nœud pour chaque valeur remarquable. @@ -2595,7 +2766,7 @@ % courante dans une des 4 variables de dimension |\ZIheighti|, \ldots, |\ZIheightiv| % correspondant à la zone interdite appelante. % On récupère hauteur et profondeur qui ont été enregistrés dans -% les variables globales |\tv@cellheight| et |\tv@cellheight|, +% les variables globales |\tv@cellheight| et |\tv@celldepth|, % par la colonne de légendes de la même ligne. % Le numéro de la ZI (son indice) est passé en argument. % \begin{macrocode} @@ -2711,18 +2882,18 @@ % \end{macrocode} % % \bigskip -% \begin{thebibliography}{14} +% \begin{thebibliography}{15} % \begin{raggedright} -% \bibitem{TABL} \emph{Tableaux}. Nicolas Kisselhoff, CTAN. -% \bibitem{TABV} \emph{Tableaux de variations : \textsf{‘tabvar’}}. Daniel Flipo, +% \bibitem{TABL} \emph{Tableaux}, Nicolas Kisselhoff, CTAN. +% \bibitem{TABV} \emph{Tableaux de variations : \textsf{‘tabvar’}}, Daniel Flipo, % CTAN, v1.8 16/07/2022. -% \bibitem{VARI} \emph{L'extension \textsf{variations}}. Christian Obrecht, +% \bibitem{VARI} \emph{L'extension \textsf{variations}}, Christian Obrecht, % CTAN, v0.3 13/09/2006. % \bibitem{TABLOR} \emph{\textsf{tablor.sty} La machine à créer des tableaux -% de signes et de variations}. Guillaume Connan, CTAN, v4.07 09/05/2010. +% de signes et de variations}, Guillaume Connan, CTAN, v4.07 09/05/2010. % \bibitem{VARMP} \emph{\textsf{tableauVariations} -- Variation tables in -% \textlogo{METAPOST}}. Frédéric Mazoit, CTAN, 2005. -% \bibitem{TKZ} \emph{\textsf{Tkz-Tab}}. Alain Matthes, CTAN, +% \textlogo{METAPOST}}, Frédéric Mazoit, CTAN, 2005. +% \bibitem{TKZ} \emph{\textsf{Tkz-Tab}}, Alain Matthes, CTAN, % v2.12c 29/04/2020. % \bibitem{ARRAY} \emph{A new implementation of LATEX’s \textsf{tabular} and \textsf{array} % environment}, Frank Mittelbach, David Carlisle, CTAN, v2.5g revised 16/10/2023. @@ -2734,12 +2905,14 @@ % v1.9.0 04/01/2022. % \bibitem{SPA} \emph{The \textsf{spacingtricks} package}, Antoine Missier, % CTAN, v1.7 28/07/2023. -% \bibitem{XKEY} \emph{The \textsf{xkeyval} package}. Hendri Adriaens, -% CTAN, v2.9, 16/06/2022. -% \bibitem{MIS} \emph{\textsf{mismath} -- Miscellaneous mathematical macros}, -% Antoine Missier, CTAN, v2.9 19/12/2023. -% \bibitem{FR} \emph{L'extension \textsf{frenchmath}}. Antoine Missier, -% CTAN, v2.7, 23/12/2023. +% \bibitem{XKEY} \emph{The \textsf{xkeyval} package}, Hendri Adriaens, +% CTAN, v2.9 16/06/2022. +% \bibitem{TOOLS} \emph{The \textsf{mathtools} package}, Morten Høgholm, Lars Madsen, +% CTAN, v1.23 17/01/2020. +% \bibitem{MIS} Miscellaneous mathematical macros -- The \emph{\textsf{mismath} package}, +% Antoine Missier, CTAN, v3.1 16/06/2024. +% \bibitem{FR} \emph{L'extension \textsf{frenchmath}}, Antoine Missier, +% CTAN, v3.1 07/05/2024. % \end{raggedright} % \end{thebibliography} % \Finale diff --git a/macros/latex/contrib/tablvar/tablvar.ins b/macros/latex/contrib/tablvar/tablvar.ins index 0280b61773..192a1eb6e8 100644 --- a/macros/latex/contrib/tablvar/tablvar.ins +++ b/macros/latex/contrib/tablvar/tablvar.ins @@ -1,5 +1,5 @@ %% -%% Copyright (C) 2018-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr> +%% Copyright (C) 2018-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr> %% %% This file may be distributed and/or modified under the conditions of %% the LaTeX Project Public License, either version 1.3 of this license @@ -21,7 +21,7 @@ This is a generated file. -Copyright (C) 2018-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr> +Copyright (C) 2018-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr> This file may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 of this license @@ -46,7 +46,7 @@ and version 1.3 or later is part of all distributions of LaTeX version \Msg{* tablvar.sty *} \Msg{* *} \Msg{* To produce the documentation run the file tablvar.dtx *} -\Msg{* through XeLaTeX or LaTeX + dvips + ps2pdf. *} +\Msg{* through LaTeX + dvips + ps2pdf. *} \Msg{* *} \Msg{* Happy TeXing! *} \Msg{* *} diff --git a/macros/latex/contrib/tablvar/tablvar.pdf b/macros/latex/contrib/tablvar/tablvar.pdf Binary files differindex 7f5962d8fc..d949a47be3 100644 --- a/macros/latex/contrib/tablvar/tablvar.pdf +++ b/macros/latex/contrib/tablvar/tablvar.pdf diff --git a/macros/latex/contrib/tagpdf/README.md b/macros/latex/contrib/tagpdf/README.md index 9602302c2a..edcdc6b5e6 100644 --- a/macros/latex/contrib/tagpdf/README.md +++ b/macros/latex/contrib/tagpdf/README.md @@ -1,6 +1,6 @@ #tagpdf — A package to create tagged pdf -Packageversion: 0.99c -Packagedate: 2024/06/20 +Packageversion: 0.99d +Packagedate: 2024/08/02 Author: Ulrike Fischer, LaTeX Project Team ## License diff --git a/macros/latex/contrib/tagpdf/ex-AF-file.pdf b/macros/latex/contrib/tagpdf/ex-AF-file.pdf index 37673eac26..9ba962e1e3 100644 --- a/macros/latex/contrib/tagpdf/ex-AF-file.pdf +++ b/macros/latex/contrib/tagpdf/ex-AF-file.pdf @@ -1,11 +1,11 @@ %PDF-2.0 % 22 0 obj -<< /Subtype /application#2Fx-tex/Type /EmbeddedFile /Params<</ModDate (D:20240620175033+02'00') /Size 151 /CheckSum (4C0D15859D9BA750E65BE6F420DEA972) >> /Length 151 >> +<< /Subtype /application#2Fx-tex/Type /EmbeddedFile /Params<</ModDate (D:20240802125547+02'00') /Size 151 /CheckSum (D4716966C44F441B4E4C1D2DD929683B) >> /Length 151 >> stream %% LaTeX2e file `example-input-file.tex' %% generated by the `filecontents' environment -%% from source `ex-AF-file' on 2024/06/20. +%% from source `ex-AF-file' on 2024/08/02. %% Additional info! @@ -15,7 +15,7 @@ endobj << /Type /Filespec /AFRelationship /Unspecified /F (example-input-file.tex) /UF <FEFF006500780061006D0070006C0065002D0069006E007000750074002D00660069006C0065002E007400650078> /EF<</F 22 0 R/UF 22 0 R>> >> endobj 25 0 obj -<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<</ModDate (D:20240620) >> /Length 19 >> +<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<</ModDate (D:20240802) >> /Length 19 >> stream Bär with teh shirt endstream @@ -24,7 +24,7 @@ endobj << /Type /Filespec /AFRelationship /Supplement /F (tag-AFfile1.txt) /UF <FEFF007400610067002D0041004600660069006C00650031002E007400780074> /EF<</F 25 0 R/UF 25 0 R>> >> endobj 28 0 obj -<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<</ModDate (D:20240620) >> /Length 4 >> +<< /Subtype /text#2Fplain/Type /EmbeddedFile /Params<</ModDate (D:20240802) >> /Length 4 >> stream Duck endstream @@ -242,17 +242,17 @@ stream </dc:language> <dc:date> <rdf:Seq> - <rdf:li>2024-06-20T17:50:54+02:00</rdf:li> + <rdf:li>2024-08-02T12:56:09+02:00</rdf:li> </rdf:Seq> </dc:date> <dc:format>application/pdf</dc:format> <dc:source>ex-AF-file.tex</dc:source> <xmp:CreatorTool>LaTeX</xmp:CreatorTool> - <xmp:CreateDate>2024-06-20T17:50:54+02:00</xmp:CreateDate> - <xmp:ModifyDate>2024-06-20T17:50:54+02:00</xmp:ModifyDate> - <xmp:MetadataDate>2024-06-20T17:50:54+02:00</xmp:MetadataDate> + <xmp:CreateDate>2024-08-02T12:56:09+02:00</xmp:CreateDate> + <xmp:ModifyDate>2024-08-02T12:56:09+02:00</xmp:ModifyDate> + <xmp:MetadataDate>2024-08-02T12:56:09+02:00</xmp:MetadataDate> <xmpMM:DocumentID>uuid:38d5a844-2217-4081-87cc-b2129dc357a6</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:9859f422-c856-46c6-8928-4dfab5f8790c</xmpMM:InstanceID> + <xmpMM:InstanceID>uuid:3ff2b426-7c06-4861-8f14-4e8e04ac9b4c</xmpMM:InstanceID> <prism:complianceProfile>three</prism:complianceProfile> <prism:pageCount>1</prism:pageCount> </rdf:Description> @@ -347,7 +347,7 @@ endobj << /Type /Namespace /NS (https://www.latex-project.org/ns/book/2022) /RoleMapNS 18 0 R >> endobj 19 0 obj -<< /Type /Namespace /NS (data:,15379C35-DB3-5B3E-89A5-42149DCFB2F) >> +<< /Type /Namespace /NS (data:,BBA64916-90D9-A0B9-F592-8E68FD20F532) >> endobj 8 0 obj [ 9 0 R 11 0 R 13 0 R 15 0 R 17 0 R 19 0 R ] @@ -449,7 +449,7 @@ endobj << /Type /Catalog /Pages 36 0 R /MarkInfo 37 0 R/Lang (de-DE)/Metadata 31 0 R/StructTreeRoot 5 0 R >> endobj 46 0 obj -<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175054+02'00')/ModDate (D:20240620175054+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> +<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125609+02'00')/ModDate (D:20240802125609+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> endobj xref 0 47 @@ -458,10 +458,10 @@ xref 0000000003 00000 f 0000000004 00000 f 0000000010 00000 f -0000016360 00000 n +0000016362 00000 n 0000013627 00000 n 0000013838 00000 n -0000015790 00000 n +0000015792 00000 n 0000014417 00000 n 0000000012 00000 f 0000014485 00000 n @@ -474,34 +474,34 @@ xref 0000015425 00000 n 0000015703 00000 n 0000000000 00000 f -0000015851 00000 n +0000015853 00000 n 0000000020 00000 n 0000000382 00000 n -0000015964 00000 n +0000015966 00000 n 0000000603 00000 n 0000000758 00000 n -0000016096 00000 n +0000016098 00000 n 0000000943 00000 n 0000001083 00000 n -0000016228 00000 n +0000016230 00000 n 0000001268 00000 n 0000013481 00000 n 0000013346 00000 n 0000012740 00000 n -0000020113 00000 n -0000020467 00000 n +0000020115 00000 n +0000020469 00000 n 0000013591 00000 n 0000013684 00000 n 0000013801 00000 n -0000016480 00000 n -0000018929 00000 n -0000016666 00000 n -0000019150 00000 n -0000020267 00000 n -0000020529 00000 n -0000020647 00000 n +0000016482 00000 n +0000018931 00000 n +0000016668 00000 n +0000019152 00000 n +0000020269 00000 n +0000020531 00000 n +0000020649 00000 n trailer -<< /Size 47 /Root 45 0 R /Info 46 0 R /ID [ <CB0601DB4D9A68774E7E29190E0D5823> <CB0601DB4D9A68774E7E29190E0D5823> ] >> +<< /Size 47 /Root 45 0 R /Info 46 0 R /ID [ <E2F9D94DBDFC11D2EE5801BA51FD5C99> <E2F9D94DBDFC11D2EE5801BA51FD5C99> ] >> startxref -20870 +20872 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf b/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf Binary files differindex 8bbbbcc16c..f64d4e66bf 100644 --- a/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf +++ b/macros/latex/contrib/tagpdf/ex-alt-actualtext.pdf diff --git a/macros/latex/contrib/tagpdf/ex-attribute.pdf b/macros/latex/contrib/tagpdf/ex-attribute.pdf index 172ce02990..feda9e252a 100644 --- a/macros/latex/contrib/tagpdf/ex-attribute.pdf +++ b/macros/latex/contrib/tagpdf/ex-attribute.pdf @@ -216,17 +216,17 @@ stream </dc:language> <dc:date> <rdf:Seq> - <rdf:li>2024-06-20T17:51:49+02:00</rdf:li> + <rdf:li>2024-08-02T12:57:08+02:00</rdf:li> </rdf:Seq> </dc:date> <dc:format>application/pdf</dc:format> <dc:source>ex-attribute.tex</dc:source> <xmp:CreatorTool>LaTeX</xmp:CreatorTool> - <xmp:CreateDate>2024-06-20T17:51:49+02:00</xmp:CreateDate> - <xmp:ModifyDate>2024-06-20T17:51:49+02:00</xmp:ModifyDate> - <xmp:MetadataDate>2024-06-20T17:51:49+02:00</xmp:MetadataDate> + <xmp:CreateDate>2024-08-02T12:57:08+02:00</xmp:CreateDate> + <xmp:ModifyDate>2024-08-02T12:57:08+02:00</xmp:ModifyDate> + <xmp:MetadataDate>2024-08-02T12:57:08+02:00</xmp:MetadataDate> <xmpMM:DocumentID>uuid:7a9cf910-1c19-429a-8f24-339c62d8a57f</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:d4b89449-5e1d-43cf-83af-3903105d1b3f</xmpMM:InstanceID> + <xmpMM:InstanceID>uuid:b262e437-7e89-4c42-8e29-bedae4c498b6</xmpMM:InstanceID> <prism:complianceProfile>three</prism:complianceProfile> <prism:pageCount>1</prism:pageCount> </rdf:Description> @@ -450,7 +450,7 @@ endobj << /Type /Catalog /Pages 26 0 R /MarkInfo 27 0 R/Lang (de_DE)/Metadata 21 0 R/StructTreeRoot 5 0 R >> endobj 38 0 obj -<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/Title (Title)/CreationDate (D:20240620175149+02'00')/ModDate (D:20240620175149+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> +<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/Title (Title)/CreationDate (D:20240802125708+02'00')/ModDate (D:20240802125708+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> endobj xref 0 39 @@ -494,7 +494,7 @@ xref 0000017721 00000 n 0000017839 00000 n trailer -<< /Size 39 /Root 37 0 R /Info 38 0 R /ID [ <658202793A4D39DC44497E1203173F04> <658202793A4D39DC44497E1203173F04> ] >> +<< /Size 39 /Root 37 0 R /Info 38 0 R /ID [ <2033D8BFB67E1F1EDFB190E1DEC10A2C> <2033D8BFB67E1F1EDFB190E1DEC10A2C> ] >> startxref 18076 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-formula-problem.pdf b/macros/latex/contrib/tagpdf/ex-formula-problem.pdf index 9ac7a851bc..637338d16f 100644 --- a/macros/latex/contrib/tagpdf/ex-formula-problem.pdf +++ b/macros/latex/contrib/tagpdf/ex-formula-problem.pdf @@ -239,17 +239,17 @@ stream </dc:language> <dc:date> <rdf:Seq> - <rdf:li>2024-06-20T17:52:18+02:00</rdf:li> + <rdf:li>2024-08-02T12:57:37+02:00</rdf:li> </rdf:Seq> </dc:date> <dc:format>application/pdf</dc:format> <dc:source>ex-formula-problem.tex</dc:source> <xmp:CreatorTool>LaTeX</xmp:CreatorTool> - <xmp:CreateDate>2024-06-20T17:52:18+02:00</xmp:CreateDate> - <xmp:ModifyDate>2024-06-20T17:52:18+02:00</xmp:ModifyDate> - <xmp:MetadataDate>2024-06-20T17:52:18+02:00</xmp:MetadataDate> + <xmp:CreateDate>2024-08-02T12:57:37+02:00</xmp:CreateDate> + <xmp:ModifyDate>2024-08-02T12:57:37+02:00</xmp:ModifyDate> + <xmp:MetadataDate>2024-08-02T12:57:37+02:00</xmp:MetadataDate> <xmpMM:DocumentID>uuid:8eb2ce1d-b2ec-440a-8bc2-73733eb3eeb0</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:b48ac58a-5b57-46ab-8ab8-087479364eeb</xmpMM:InstanceID> + <xmpMM:InstanceID>uuid:8fbc3896-5f57-401a-81d8-1fdb02abac8a</xmpMM:InstanceID> <prism:complianceProfile>three</prism:complianceProfile> <prism:pageCount>2</prism:pageCount> </rdf:Description> @@ -425,7 +425,7 @@ endobj << /Type /Catalog /Pages 16 0 R /MarkInfo 23 0 R/Lang (de-DE)/Metadata 19 0 R/StructTreeRoot 5 0 R >> endobj 33 0 obj -<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175218+02'00')/ModDate (D:20240620175218+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> +<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125737+02'00')/ModDate (D:20240802125737+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> endobj xref 0 34 @@ -464,7 +464,7 @@ xref 0000018886 00000 n 0000019004 00000 n trailer -<< /Size 34 /Root 32 0 R /Info 33 0 R /ID [ <4A2EBD4B9A1971E2BAF6A530303DF07B> <4A2EBD4B9A1971E2BAF6A530303DF07B> ] >> +<< /Size 34 /Root 32 0 R /Info 33 0 R /ID [ <84EDE341B761805B059537E407E8C0CD> <84EDE341B761805B059537E407E8C0CD> ] >> startxref 19227 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-list.pdf b/macros/latex/contrib/tagpdf/ex-list.pdf index 2346b0398a..381477d829 100644 --- a/macros/latex/contrib/tagpdf/ex-list.pdf +++ b/macros/latex/contrib/tagpdf/ex-list.pdf @@ -210,17 +210,17 @@ stream </dc:language> <dc:date> <rdf:Seq> - <rdf:li>2024-06-20T17:52:47+02:00</rdf:li> + <rdf:li>2024-08-02T12:58:08+02:00</rdf:li> </rdf:Seq> </dc:date> <dc:format>application/pdf</dc:format> <dc:source>ex-list.tex</dc:source> <xmp:CreatorTool>LaTeX</xmp:CreatorTool> - <xmp:CreateDate>2024-06-20T17:52:47+02:00</xmp:CreateDate> - <xmp:ModifyDate>2024-06-20T17:52:47+02:00</xmp:ModifyDate> - <xmp:MetadataDate>2024-06-20T17:52:47+02:00</xmp:MetadataDate> + <xmp:CreateDate>2024-08-02T12:58:08+02:00</xmp:CreateDate> + <xmp:ModifyDate>2024-08-02T12:58:08+02:00</xmp:ModifyDate> + <xmp:MetadataDate>2024-08-02T12:58:08+02:00</xmp:MetadataDate> <xmpMM:DocumentID>uuid:4c749825-1de7-414c-879f-29e4d0bef66e</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:843c5ce9-108a-49d8-86ef-881382f178ee</xmpMM:InstanceID> + <xmpMM:InstanceID>uuid:0803684d-fad7-4d08-8dc2-c5108f24d889</xmpMM:InstanceID> <prism:complianceProfile>three</prism:complianceProfile> <prism:pageCount>1</prism:pageCount> </rdf:Description> @@ -654,7 +654,7 @@ endobj << /Type /Catalog /Pages 54 0 R /MarkInfo 55 0 R/Lang (en)/Metadata 48 0 R/StructTreeRoot 5 0 R >> endobj 72 0 obj -<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175247+02'00')/ModDate (D:20240620175247+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> +<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125808+02'00')/ModDate (D:20240802125808+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> endobj xref 0 73 @@ -732,7 +732,7 @@ xref 0000029590 00000 n 0000029705 00000 n trailer -<< /Size 73 /Root 71 0 R /Info 72 0 R /ID [ <14B40F363BE2C4EFB96EAE91DC2CE4F7> <14B40F363BE2C4EFB96EAE91DC2CE4F7> ] >> +<< /Size 73 /Root 71 0 R /Info 72 0 R /ID [ <0EE2DD31789AD5C7E80F8407D72CF075> <0EE2DD31789AD5C7E80F8407D72CF075> ] >> startxref 29928 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf b/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf index 70cfe5e793..6d60e10736 100644 --- a/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf +++ b/macros/latex/contrib/tagpdf/ex-mc-manual-para-split-obsolete.pdf @@ -243,17 +243,17 @@ stream </dc:language> <dc:date> <rdf:Seq> - <rdf:li>2024-06-20T17:53:22+02:00</rdf:li> + <rdf:li>2024-08-02T12:58:35+02:00</rdf:li> </rdf:Seq> </dc:date> <dc:format>application/pdf</dc:format> <dc:source>ex-mc-manual-para-split-obsolete.tex</dc:source> <xmp:CreatorTool>LaTeX</xmp:CreatorTool> - <xmp:CreateDate>2024-06-20T17:53:22+02:00</xmp:CreateDate> - <xmp:ModifyDate>2024-06-20T17:53:22+02:00</xmp:ModifyDate> - <xmp:MetadataDate>2024-06-20T17:53:22+02:00</xmp:MetadataDate> + <xmp:CreateDate>2024-08-02T12:58:35+02:00</xmp:CreateDate> + <xmp:ModifyDate>2024-08-02T12:58:35+02:00</xmp:ModifyDate> + <xmp:MetadataDate>2024-08-02T12:58:35+02:00</xmp:MetadataDate> <xmpMM:DocumentID>uuid:c33d64b4-96ec-4e48-8f27-0b3edc831547</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:36712ce3-22f3-4c4a-8418-0427448d178a</xmpMM:InstanceID> + <xmpMM:InstanceID>uuid:075c36f4-757d-4e0f-8258-3c0a3e372d69</xmpMM:InstanceID> <prism:complianceProfile>three</prism:complianceProfile> <prism:pageCount>2</prism:pageCount> </rdf:Description> @@ -413,7 +413,7 @@ endobj << /Type /Catalog /Pages 14 0 R /Lang (de)/Metadata 15 0 R >> endobj 25 0 obj -<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175322+02'00')/ModDate (D:20240620175322+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> +<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125835+02'00')/ModDate (D:20240802125835+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> endobj xref 0 26 @@ -444,7 +444,7 @@ xref 0000023894 00000 n 0000023972 00000 n trailer -<< /Size 26 /Root 24 0 R /Info 25 0 R /ID [ <2A141E41EDA78C2ADA31A952D041C439> <2A141E41EDA78C2ADA31A952D041C439> ] >> +<< /Size 26 /Root 24 0 R /Info 25 0 R /ID [ <1A7EFBAD198841A82D20467F858B3B6C> <1A7EFBAD198841A82D20467F858B3B6C> ] >> startxref 24195 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-softhyphen.pdf b/macros/latex/contrib/tagpdf/ex-softhyphen.pdf index 5f96db2bdb..09a8d8aca0 100644 --- a/macros/latex/contrib/tagpdf/ex-softhyphen.pdf +++ b/macros/latex/contrib/tagpdf/ex-softhyphen.pdf @@ -210,17 +210,17 @@ stream </dc:language> <dc:date> <rdf:Seq> - <rdf:li>2024-06-20T17:53:55+02:00</rdf:li> + <rdf:li>2024-08-02T12:59:01+02:00</rdf:li> </rdf:Seq> </dc:date> <dc:format>application/pdf</dc:format> <dc:source>ex-softhyphen.tex</dc:source> <xmp:CreatorTool>LaTeX</xmp:CreatorTool> - <xmp:CreateDate>2024-06-20T17:53:55+02:00</xmp:CreateDate> - <xmp:ModifyDate>2024-06-20T17:53:55+02:00</xmp:ModifyDate> - <xmp:MetadataDate>2024-06-20T17:53:55+02:00</xmp:MetadataDate> + <xmp:CreateDate>2024-08-02T12:59:01+02:00</xmp:CreateDate> + <xmp:ModifyDate>2024-08-02T12:59:01+02:00</xmp:ModifyDate> + <xmp:MetadataDate>2024-08-02T12:59:01+02:00</xmp:MetadataDate> <xmpMM:DocumentID>uuid:aa82e685-4098-469d-861c-3c45dfc700c7</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:9c8a342f-f758-4367-8d05-7621809f3e05</xmpMM:InstanceID> + <xmpMM:InstanceID>uuid:994c7ab3-d509-4a5b-88b5-92bca5031c75</xmpMM:InstanceID> <prism:complianceProfile>three</prism:complianceProfile> <prism:pageCount>1</prism:pageCount> </rdf:Description> @@ -393,7 +393,7 @@ endobj << /Type /Catalog /Pages 19 0 R /MarkInfo 20 0 R/Lang (de)/Metadata 14 0 R/StructTreeRoot 5 0 R >> endobj 30 0 obj -<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175355+02'00')/ModDate (D:20240620175355+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> +<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125901+02'00')/ModDate (D:20240802125901+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> endobj xref 0 31 @@ -429,7 +429,7 @@ xref 0000018113 00000 n 0000018228 00000 n trailer -<< /Size 31 /Root 29 0 R /Info 30 0 R /ID [ <5BCC76B86A64606D9B117AF50FFA18AE> <5BCC76B86A64606D9B117AF50FFA18AE> ] >> +<< /Size 31 /Root 29 0 R /Info 30 0 R /ID [ <EECF5F575625EC21F0BEE870E572FEB1> <EECF5F575625EC21F0BEE870E572FEB1> ] >> startxref 18451 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf b/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf index 21b11b9346..35e1d0609a 100644 --- a/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf +++ b/macros/latex/contrib/tagpdf/ex-spaceglyph-listings.pdf @@ -210,17 +210,17 @@ stream </dc:language> <dc:date> <rdf:Seq> - <rdf:li>2024-06-20T17:54:22+02:00</rdf:li> + <rdf:li>2024-08-02T12:59:25+02:00</rdf:li> </rdf:Seq> </dc:date> <dc:format>application/pdf</dc:format> <dc:source>ex-spaceglyph-listings.tex</dc:source> <xmp:CreatorTool>LaTeX</xmp:CreatorTool> - <xmp:CreateDate>2024-06-20T17:54:22+02:00</xmp:CreateDate> - <xmp:ModifyDate>2024-06-20T17:54:22+02:00</xmp:ModifyDate> - <xmp:MetadataDate>2024-06-20T17:54:22+02:00</xmp:MetadataDate> + <xmp:CreateDate>2024-08-02T12:59:25+02:00</xmp:CreateDate> + <xmp:ModifyDate>2024-08-02T12:59:25+02:00</xmp:ModifyDate> + <xmp:MetadataDate>2024-08-02T12:59:25+02:00</xmp:MetadataDate> <xmpMM:DocumentID>uuid:acdc2435-bf29-4e54-8d09-1c9b6dc32038</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:ad8487cb-8dcc-4cab-8542-55106010deec</xmpMM:InstanceID> + <xmpMM:InstanceID>uuid:c59181fc-bb69-430b-8f90-90206d3ba579</xmpMM:InstanceID> <prism:complianceProfile>three</prism:complianceProfile> <prism:pageCount>1</prism:pageCount> </rdf:Description> @@ -354,7 +354,7 @@ endobj << /Type /Catalog /Pages 15 0 R /MarkInfo 16 0 R/Lang (de)/Metadata 10 0 R/StructTreeRoot 5 0 R >> endobj 26 0 obj -<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175422+02'00')/ModDate (D:20240620175422+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> +<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125925+02'00')/ModDate (D:20240802125925+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> endobj xref 0 27 @@ -386,7 +386,7 @@ xref 0000015485 00000 n 0000015600 00000 n trailer -<< /Size 27 /Root 25 0 R /Info 26 0 R /ID [ <50A5738B4CABF76A4CC27558811B7E58> <50A5738B4CABF76A4CC27558811B7E58> ] >> +<< /Size 27 /Root 25 0 R /Info 26 0 R /ID [ <EC0A5DEABF5EE1A293FAD60891A0BF63> <EC0A5DEABF5EE1A293FAD60891A0BF63> ] >> startxref 15823 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf b/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf index 7c9c135bf7..73ce1c0602 100644 --- a/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf +++ b/macros/latex/contrib/tagpdf/ex-structure-obsolete.pdf @@ -210,17 +210,17 @@ stream </dc:language> <dc:date> <rdf:Seq> - <rdf:li>2024-06-20T17:54:47+02:00</rdf:li> + <rdf:li>2024-08-02T12:59:50+02:00</rdf:li> </rdf:Seq> </dc:date> <dc:format>application/pdf</dc:format> <dc:source>ex-structure-obsolete.tex</dc:source> <xmp:CreatorTool>LaTeX</xmp:CreatorTool> - <xmp:CreateDate>2024-06-20T17:54:47+02:00</xmp:CreateDate> - <xmp:ModifyDate>2024-06-20T17:54:47+02:00</xmp:ModifyDate> - <xmp:MetadataDate>2024-06-20T17:54:47+02:00</xmp:MetadataDate> + <xmp:CreateDate>2024-08-02T12:59:50+02:00</xmp:CreateDate> + <xmp:ModifyDate>2024-08-02T12:59:50+02:00</xmp:ModifyDate> + <xmp:MetadataDate>2024-08-02T12:59:50+02:00</xmp:MetadataDate> <xmpMM:DocumentID>uuid:bf5e4a2b-cfa9-4fc5-878c-8f9d2ee95445</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:971e1e25-37c4-4af9-8523-72714a87dea7</xmpMM:InstanceID> + <xmpMM:InstanceID>uuid:2ccba557-e5ae-4703-80db-28b73a88c1cd</xmpMM:InstanceID> <prism:complianceProfile>three</prism:complianceProfile> <prism:pageCount>1</prism:pageCount> </rdf:Description> @@ -526,7 +526,7 @@ endobj << /Type /Catalog /Pages 26 0 R /MarkInfo 27 0 R/Lang (de)/Metadata 20 0 R/StructTreeRoot 5 0 R >> endobj 43 0 obj -<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175447+02'00')/ModDate (D:20240620175447+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> +<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802125950+02'00')/ModDate (D:20240802125950+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> endobj xref 0 44 @@ -575,7 +575,7 @@ xref 0000023423 00000 n 0000023538 00000 n trailer -<< /Size 44 /Root 42 0 R /Info 43 0 R /ID [ <ADB87D57539D5CE2A8FC3A4721B94DA0> <ADB87D57539D5CE2A8FC3A4721B94DA0> ] >> +<< /Size 44 /Root 42 0 R /Info 43 0 R /ID [ <AE5400E970AB8EBE6C04A229EBA70E89> <AE5400E970AB8EBE6C04A229EBA70E89> ] >> startxref 23761 %%EOF diff --git a/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf b/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf index 81423fede4..7147cd1e91 100644 --- a/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf +++ b/macros/latex/contrib/tagpdf/ex-tagpdf-template.pdf @@ -210,17 +210,17 @@ stream </dc:language> <dc:date> <rdf:Seq> - <rdf:li>2024-06-20T17:55:14+02:00</rdf:li> + <rdf:li>2024-08-02T13:00:16+02:00</rdf:li> </rdf:Seq> </dc:date> <dc:format>application/pdf</dc:format> <dc:source>ex-tagpdf-template.tex</dc:source> <xmp:CreatorTool>LaTeX</xmp:CreatorTool> - <xmp:CreateDate>2024-06-20T17:55:14+02:00</xmp:CreateDate> - <xmp:ModifyDate>2024-06-20T17:55:14+02:00</xmp:ModifyDate> - <xmp:MetadataDate>2024-06-20T17:55:14+02:00</xmp:MetadataDate> + <xmp:CreateDate>2024-08-02T13:00:16+02:00</xmp:CreateDate> + <xmp:ModifyDate>2024-08-02T13:00:16+02:00</xmp:ModifyDate> + <xmp:MetadataDate>2024-08-02T13:00:16+02:00</xmp:MetadataDate> <xmpMM:DocumentID>uuid:f320abfc-f6ab-4d12-8719-d176f4d947cf</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:898c4009-cc18-43c3-8fda-44ab8e28318c</xmpMM:InstanceID> + <xmpMM:InstanceID>uuid:3b4409f1-f3e5-4c01-86c4-a0bcea68ea38</xmpMM:InstanceID> <prism:complianceProfile>three</prism:complianceProfile> <prism:pageCount>1</prism:pageCount> </rdf:Description> @@ -307,7 +307,7 @@ endobj << /Type /Namespace /NS (https://www.latex-project.org/ns/book/2022) /RoleMapNS 18 0 R >> endobj 19 0 obj -<< /Type /Namespace /NS (data:,69C62BB9-6D5A-6FC9-FD75-56BC71E087F4) >> +<< /Type /Namespace /NS (data:,25352333-84F8-941A-42AB-414B46468294) >> endobj 8 0 obj [ 9 0 R 11 0 R 13 0 R 15 0 R 17 0 R 19 0 R ] @@ -399,7 +399,7 @@ endobj << /Type /Catalog /Pages 31 0 R /MarkInfo 32 0 R/Lang (en)/Metadata 26 0 R/StructTreeRoot 5 0 R >> endobj 42 0 obj -<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240620175514+02'00')/ModDate (D:20240620175514+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> +<< /Producer (luahbtex-1.18.0)/Creator (LaTeX)/CreationDate (D:20240802130016+02'00')/ModDate (D:20240802130016+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.18.0 (TeX Live 2024)) >> endobj xref 0 43 @@ -447,7 +447,7 @@ xref 0000017842 00000 n 0000017957 00000 n trailer -<< /Size 43 /Root 41 0 R /Info 42 0 R /ID [ <E36FE13F3FA0066C1F9796E38E50018C> <E36FE13F3FA0066C1F9796E38E50018C> ] >> +<< /Size 43 /Root 41 0 R /Info 42 0 R /ID [ <42D962292B4982520E998D32C837DE43> <42D962292B4982520E998D32C837DE43> ] >> startxref 18180 %%EOF diff --git a/macros/latex/contrib/tagpdf/link-figure-input.tex b/macros/latex/contrib/tagpdf/link-figure-input.tex index ef07c33e95..1a1036d282 100644 --- a/macros/latex/contrib/tagpdf/link-figure-input.tex +++ b/macros/latex/contrib/tagpdf/link-figure-input.tex @@ -27,7 +27,7 @@ \NewDocumentCommand\balloon{m}{% \node[fit={(pic cs:#1-first) (pic cs:#1-end) ([yshift=7pt]pic cs:#1-end)},balloon](#1){};} -\begin{tikzpicture}[overlay,remember picture] +\begin{tikzpicture}[overlay,remember picture,alt={Illustration of link annotation structure}] \balloon{link} \balloon{structparent} \balloon{OBJR} @@ -45,7 +45,7 @@ \draw[ref] (kid)--(OBJR); \draw[ref] (OBJR)--(linkref); \end{tikzpicture} -\begin{lstlisting}[name=OBJR] +\begin{taglstlisting}[name=OBJR] *\tikzmark{link-first}*18 0 obj*\tikzmark{link-end}* %Link Object << /Type /Annot /Subtype/Link /Rect [ 196.109 494.573 399.167 506.831 ] @@ -67,4 +67,4 @@ endobj}; << /Nums [... *\tikzmark{pnum-first}*16*\tikzmark{pnum-end}* *\tikzmark{pref-first}*17 0 R*\tikzmark{pref-end}* ...] >> endobj -\end{lstlisting} +\end{taglstlisting} diff --git a/macros/latex/contrib/tagpdf/pac2024-report.png b/macros/latex/contrib/tagpdf/pac2024-report.png Binary files differnew file mode 100644 index 0000000000..4474bc989f --- /dev/null +++ b/macros/latex/contrib/tagpdf/pac2024-report.png diff --git a/macros/latex/contrib/tagpdf/pac2024-version.png b/macros/latex/contrib/tagpdf/pac2024-version.png Binary files differnew file mode 100644 index 0000000000..1bc12bdafe --- /dev/null +++ b/macros/latex/contrib/tagpdf/pac2024-version.png diff --git a/macros/latex/contrib/tagpdf/tagpdf-backend.dtx b/macros/latex/contrib/tagpdf/tagpdf-backend.dtx index 7e19e1e90f..0ed233e2e0 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-backend.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-backend.dtx @@ -47,13 +47,13 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{implementation} % \begin{macrocode} %<@@=tag> %<*luatex> -\ProvidesExplFile {tagpdf-luatex.def} {2024-06-20} {0.99c} +\ProvidesExplFile {tagpdf-luatex.def} {2024-08-02} {0.99d} {tagpdf~driver~for~luatex} % \end{macrocode} % \section{Loading the lua} @@ -164,8 +164,8 @@ local ProvidesLuaModule = { name = "tagpdf", - version = "0.99c", --TAGVERSION - date = "2024-06-20", --TAGDATE + version = "0.99d", --TAGVERSION + date = "2024-08-02", --TAGDATE description = "tagpdf lua code", license = "The LATEX Project Public License 1.3c" } @@ -252,6 +252,12 @@ local iwfontattributeid = luatexbase.new_attribute ("g_@@_interwordfont_attr") local tagunmarkedbool= token.create("g_@@_tagunmarked_bool") local truebool = token.create("c_true_bool") % \end{macrocode} +% with this token we can query the state of the softhyphen boolean +% and so detect if hyphens from hyphenation should be replaced by soft-hyphens. +% \begin{macrocode} +local softhyphenbool = token.create("g_@@_softhyphen_bool") +% \end{macrocode} + % Now a number of local versions from global tables. % Not all is perhaps needed, most node variants were copied from lua-debug. % \begin{macrocode} @@ -286,6 +292,9 @@ local KERN = node.id("kern") local PENALTY = node.id("penalty") local LOCAL_PAR = node.id("local_par") local MATH = node.id("math") + +local explicit_disc = 1 +local regular_disc = 3 % \end{macrocode} % Now we setup the main table structure. ltx is used by other latex code too! % \begin{macrocode} @@ -1267,6 +1276,80 @@ function ltx.@@.func.output_parenttree (abspage) end % \end{macrocode} % \end{macro} +% +% \begin{macro} +% { +% process_softhyphen_pre +% process_softhyphen_post +% } +% First some local definitions. Since these are only needed locally everything gets wrapped into a block. +% \begin{macrocode} +do + local properties = node.get_properties_table() + local is_soft_hyphen_prop = 'tagpdf.rewrite-softhyphen.is_soft_hyphen' + local hyphen_char = 0x2D + local soft_hyphen_char = 0xAD +% \end{macrocode} +% +% A lookup table to test if the font supports the soft hyphen glyph. +% \begin{macrocode} + local softhyphen_fonts = setmetatable({}, {__index = function(t, fid) + local fdir = identifiers[fid] + local format = fdir and fdir.format + local result = (format == 'opentype' or format == 'truetype') + local characters = fdir and fdir.characters + result = result and (characters and characters[soft_hyphen_char]) ~= nil + t[fid] = result + return result + end}) +% \end{macrocode} +% +% A pre shaping callback to mark hyphens as being hyphenation hyphens. +% This runs before shaping to avoid affecting hyphens moved into +% discretionaries during shaping. +% \begin{macrocode} + local function process_softhyphen_pre(head, _context, _dir) + if softhyphenbool.mode ~= truebool.mode then return true end + for disc, sub in node.traverse_id(DISC, head) do + if sub == explicit_disc or sub == regular_disc then + for n, _ch, _f in node.traverse_char(disc.pre) do + local props = properties[n] + if not props then + props = {} + properties[n] = props + end + props[is_soft_hyphen_prop] = true + end + end + end + return true + end + +% \end{macrocode} +% +% Finally do the actual replacement after shaping. No checking for double processing here +% since the operation is idempotent. +% \begin{macrocode} + local function process_softhyphen_post(head, _context, _dir) + if softhyphenbool.mode ~= truebool.mode then return true end + for disc, sub in node.traverse_id(DISC, head) do + for n, ch, fid in node.traverse_glyph(disc.pre) do + local props = properties[n] + if softhyphen_fonts[fid] and ch == hyphen_char and props and props[is_soft_hyphen_prop] then + n.char = soft_hyphen_char + props.glyph_info = nil + end + end + end + return true + end + + luatexbase.add_to_callback('pre_shaping_filter', process_softhyphen_pre, 'tagpdf.rewrite-softhyphen') + luatexbase.add_to_callback('post_shaping_filter', process_softhyphen_post, 'tagpdf.rewrite-softhyphen') +end +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} %</lua> % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-checks.dtx b/macros/latex/contrib/tagpdf/tagpdf-checks.dtx index 345b2e35ba..3cbe3b141b 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-checks.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-checks.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{documentation} % \section{Commands} @@ -331,7 +331,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-checks-code} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-checks-code} {2024-08-02} {0.99d} {part of tagpdf - code related to checks, conditionals, debugging and messages} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-code.pdf b/macros/latex/contrib/tagpdf/tagpdf-code.pdf Binary files differindex 4dd216d1a9..76e839d0d5 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-code.pdf +++ b/macros/latex/contrib/tagpdf/tagpdf-code.pdf diff --git a/macros/latex/contrib/tagpdf/tagpdf-data.dtx b/macros/latex/contrib/tagpdf/tagpdf-data.dtx index f07e5db3ed..6417b44c40 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-data.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-data.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{documentation} % This files contains a various data files which are read in @@ -61,7 +61,7 @@ % latex-lab has also a namespace module, which takes precedence! % \begin{macrocode} %<*ns-latex> -%% \ProvidesExplFile {tagpdf-ns-latex.def} {2024-06-20} {0.99c} +%% \ProvidesExplFile {tagpdf-ns-latex.def} {2024-08-02} {0.99d} %% {latex} {https://www.latex-project.org/ns/dflt/2022}{} title, Title, pdf2, part, Title, pdf2, @@ -93,7 +93,7 @@ text, P, pdf2, % It is bound to change % \begin{macrocode} %<*ns-latex-book> -%% \ProvidesExplFile {tagpdf-ns-latex-book.def} {2024-06-20} {0.99c} +%% \ProvidesExplFile {tagpdf-ns-latex-book.def} {2024-08-02} {0.99d} %% {latex-book} {https://www.latex-project.org/ns/book/2022}{} chapter, H1,pdf2, section, H2,pdf2, @@ -107,7 +107,7 @@ subparagraph, H6,pdf2, % \section{The pdf namespace data} % \begin{macrocode} %<*ns-pdf> -%% \ProvidesExplFile {tagpdf-ns-pdf.def} {2024-06-20} {0.99c} +%% \ProvidesExplFile {tagpdf-ns-pdf.def} {2024-08-02} {0.99d} %% {pdf} {http://iso.org/pdf/ssn}{} StructTreeRoot,StructTreeRoot,pdf,D, Document,Document,pdf,D, @@ -175,7 +175,7 @@ Strong,Span,pdf,I, % \section{The pdf 2.0 namespace data} % \begin{macrocode} %<*ns-pdf2> -%% \ProvidesExplFile {tagpdf-ns-pdf2.def} {2024-06-20} {0.99c} +%% \ProvidesExplFile {tagpdf-ns-pdf2.def} {2024-08-02} {0.99d} %% {pdf2} {http://iso.org/pdf2/ssn}{} StructTreeRoot,StructTreeRoot,pdf2,D, Document,Document,pdf2,D, @@ -232,7 +232,7 @@ Strong,Strong,pdf2,I, % \section{The mathml namespace data} % \begin{macrocode} %<*ns-mathml> -%% \ProvidesExplFile {tagpdf-ns-mathml.def} {2024-06-20} {0.99c} +%% \ProvidesExplFile {tagpdf-ns-mathml.def} {2024-08-02} {0.99d} % {mathml}{http://www.w3.org/1998/Math/MathML}{} abs,abs,mathml, and,and,mathml, @@ -467,7 +467,7 @@ xor,xor,mathml, % This will perhaps change in future. % \begin{macrocode} %<*parent-child> -%% \ProvidesExplFile {tagpdf-parent-child.csv} {2024-06-20} {0.99c} +%% \ProvidesExplFile {tagpdf-parent-child.csv} {2024-08-02} {0.99d} ,,,StructTreeRoot,Document,Art,Part,Div,Sect,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,MC Document,both,document level,1,0..n,∅,‡,‡,∅,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅ Art,1.7,grouping,∅,0..n,∅,‡,‡,0..n,0..n,‡,∅,∅,∅,0..n,∅,0..n,∅,∅,∅,0..1,0..1,∅,∅,∅,0..n,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅,∅,0..n,0..n,∅,∅,∅,0..n,0..n,∅,∅ @@ -522,7 +522,7 @@ MC,both,---,∅,∅,∅,∅,∅,∅,0..n,‡,∅,∅,∅,0..n,0..n,0..n,0..n,0.. % This will perhaps change in future. % \begin{macrocode} %<*parent-child-2> -%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2024-06-20} {0.99c} +%% \ProvidesExplFile {tagpdf-parent-child-2.csv} {2024-08-02} {0.99d} ,,,StructTreeRoot,Document,DocumentFragment,Art,Part,Div,Sect,Aside,BlockQuote,NonStruct,TOC,TOCI,Index,Private,Title,Sub,Quote,Note,Reference,BibEntry,P,Hn,H,Lbl,Code,Em,Strong,Span,Link,Annot,Form,Ruby,RB,RT,RP,Warichu,WT,WP,FENote,L,LI,LBody,Table,TR,TH,TD,THead,TBody,TFoot,Caption,Figure,Formula,math,mathml,Artifact,MC Document,both,document level,1,0..n,0..n,∅,‡,‡,∅,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,0..n,∅ DocumentFragment,2.0,document level,∅,0..n,0..n,0..n,‡,‡,0..n,0..n,0..n,‡,∅,∅,∅,0..n,∅,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅*,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅,∅*,∅,∅,∅,∅,0..n,∅ diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx index 0cef27fd3b..ff036b5523 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-mc-generic.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{documentation} % \end{documentation} @@ -55,11 +55,11 @@ % \begin{macrocode} %<@@=tag> %<*generic> -\ProvidesExplPackage {tagpdf-mc-code-generic} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-mc-code-generic} {2024-08-02} {0.99d} {part of tagpdf - code related to marking chunks - generic mode} %</generic> %<*debug> -\ProvidesExplPackage {tagpdf-debug-generic} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-debug-generic} {2024-08-02} {0.99d} {part of tagpdf - debugging code related to marking chunks - generic mode} %</debug> % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx index 7dd309c5f5..3c2e91605e 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-mc-luacode.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{implementation} % The code is split into three parts: code shared by all engines, @@ -86,11 +86,11 @@ % \begin{macrocode} %<@@=tag> %<*luamode> -\ProvidesExplPackage {tagpdf-mc-code-lua} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-mc-code-lua} {2024-08-02} {0.99d} {tagpdf - mc code only for the luamode } %</luamode> %<*debug> -\ProvidesExplPackage {tagpdf-debug-lua} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-debug-lua} {2024-08-02} {0.99d} {part of tagpdf - debugging code related to marking chunks - lua mode} %</debug> % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx index c96fd8c4c8..5bfe0658d1 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-mc-shared.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{documentation} % \section{Public Commands} @@ -181,7 +181,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-mc-code-shared} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-mc-code-shared} {2024-08-02} {0.99d} {part of tagpdf - code related to marking chunks - code shared by generic and luamode } %</header> diff --git a/macros/latex/contrib/tagpdf/tagpdf-roles.dtx b/macros/latex/contrib/tagpdf/tagpdf-roles.dtx index 80f9da0f6b..fb5f1b77c9 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-roles.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-roles.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{documentation} % \begin{function} @@ -98,7 +98,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-roles-code} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-roles-code} {2024-08-02} {0.99d} {part of tagpdf - code related to roles and structure names} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-space.dtx b/macros/latex/contrib/tagpdf/tagpdf-space.dtx index a29c8f0fb3..5c8e007084 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-space.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-space.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{documentation} % \begin{function}{activate/space (setup-key),interwordspace (deprecated)} @@ -66,7 +66,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-space-code} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-space-code} {2024-08-02} {0.99d} {part of tagpdf - code related to real space chars} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-struct.dtx b/macros/latex/contrib/tagpdf/tagpdf-struct.dtx index 963852b1fc..6da5e48b18 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-struct.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-struct.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{documentation} % \section{Public Commands} @@ -285,7 +285,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-struct-code} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-struct-code} {2024-08-02} {0.99d} {part of tagpdf - code related to storing structure} %</header> % \end{macrocode} @@ -1937,7 +1937,7 @@ % \section{Attributes and attribute classes} % \begin{macrocode} %<*header> -\ProvidesExplPackage {tagpdf-attr-code} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-attr-code} {2024-08-02} {0.99d} {part of tagpdf - code related to attributes and attribute classes} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-tree.dtx b/macros/latex/contrib/tagpdf/tagpdf-tree.dtx index 04b9309597..f7ae6de996 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-tree.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-tree.dtx @@ -47,13 +47,13 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{implementation} % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-tree-code} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-tree-code} {2024-08-02} {0.99d} {part of tagpdf - code related to writing trees and dictionaries to the pdf} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf-user.dtx b/macros/latex/contrib/tagpdf/tagpdf-user.dtx index 916ff041d0..a4014b62e3 100644 --- a/macros/latex/contrib/tagpdf/tagpdf-user.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf-user.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Version 0.99c, released 2024-06-20} +% \date{Version 0.99d, released 2024-08-02} % \maketitle % \begin{documentation} % \section{Setup commands} @@ -309,7 +309,7 @@ % \begin{macrocode} %<@@=tag> %<*header> -\ProvidesExplPackage {tagpdf-user} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-user} {2024-08-02} {0.99d} {tagpdf - user commands} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/tagpdf/tagpdf.dtx b/macros/latex/contrib/tagpdf/tagpdf.dtx index e58570340e..b1d008a6e6 100644 --- a/macros/latex/contrib/tagpdf/tagpdf.dtx +++ b/macros/latex/contrib/tagpdf/tagpdf.dtx @@ -72,6 +72,12 @@ % marked up as artifact. The initial value is true. % \end{function} % +% \begin{function}{activate/softhyphen (setup-key)} +% This key allows to activates automatic handling of hyphens inserted +% by hyphenation. It only is used in luamode and replaces hyphens +% by U+00AD if the font supports this. +% \end{function} +% % \begin{function}{page/tabsorder (setup-key), tabsorder (deprecated)} % This sets the tabsorder on a page. The values are |row|, |column|, |structure| (default) % or |none|. Currently this is set more or less globally. More finer control can be @@ -87,7 +93,7 @@ % \begin{macrocode} %<@@=tag> %<*package> -\ProvidesExplPackage {tagpdf} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf} {2024-08-02} {0.99d} { A package to experiment with pdf tagging } \bool_if:nF @@ -113,7 +119,7 @@ % \end{macrocode} %<*debug> % \begin{macrocode} -\ProvidesExplPackage {tagpdf-debug} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-debug} {2024-08-02} {0.99d} { debug code for tagpdf } \@ifpackageloaded{tagpdf}{}{\PackageWarning{tagpdf-debug}{tagpdf~not~loaded,~quitting}\endinput} % \end{macrocode} @@ -136,7 +142,7 @@ % we define a base package with dummy functions % \begin{macrocode} %<*base> -\ProvidesExplPackage {tagpdf-base} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdf-base} {2024-08-02} {0.99d} {part of tagpdf - provide base, no-op versions of the user commands } %</base> % \end{macrocode} @@ -354,6 +360,13 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\g_@@_softhyphen_bool} +% This boolean controls if the code should try to automatically +% handle hyphens from hyphenation. It is currently only used in luamode. +% \begin{macrocode} +\bool_new:N \g_@@_softhyphen_bool +% \end{macrocode} +% \end{variable} % \section{Variants of l3 commands} % \begin{macrocode} \prg_generate_conditional_variant:Nnn \pdf_object_if_exist:n {e}{T,F,TF} @@ -648,6 +661,13 @@ tagunmarked .bool_gset:N = \g_@@_tagunmarked_bool, % \end{macrocode} % \end{macro} +% \begin{macro}{activate/softhyphen (setup-key)} +% This key activates (in luamode) the handling of soft hyphens. +% \begin{macrocode} + activate/softhyphen .bool_gset:N = \g_@@_softhyphen_bool, + activate/softhyphen .initial:n = true, +% \end{macrocode} +% \end{macro} % \begin{macro}{page/tabsorder (setup-key),tabsorder (deprecated)} % This sets the tabsorder on a page. The values are |row|, |column|, |structure| (default) % or |none|. Currently this is set more or less globally. More finer control can be diff --git a/macros/latex/contrib/tagpdf/tagpdf.pdf b/macros/latex/contrib/tagpdf/tagpdf.pdf Binary files differindex 04d46c2fbf..f7c6ea02a3 100644 --- a/macros/latex/contrib/tagpdf/tagpdf.pdf +++ b/macros/latex/contrib/tagpdf/tagpdf.pdf diff --git a/macros/latex/contrib/tagpdf/tagpdf.tex b/macros/latex/contrib/tagpdf/tagpdf.tex index ac1c33fa4a..10d36d09a0 100644 --- a/macros/latex/contrib/tagpdf/tagpdf.tex +++ b/macros/latex/contrib/tagpdf/tagpdf.tex @@ -16,8 +16,8 @@ } \DebugBlocksOff \makeatletter -\def\UlrikeFischer@package@version{0.99c} -\def\UlrikeFischer@package@date{2024-06-20} +\def\UlrikeFischer@package@version{0.99d} +\def\UlrikeFischer@package@date{2024-08-02} \makeatother \documentclass[bibliography=totoc,a4paper]{article} @@ -338,13 +338,15 @@ improvements and new features in the \LaTeX\ kernel, the latex-lab bundle and the \PDF\ management code and is now much better. Only a few structures---mostly some from currently unsupported packages--- still need manual tagging. But sadly the output of the validators don't quite reflect -the improvements. The documentation uses now \PDF~2.0 and PAC~2024 can't handle -this, it claims that the file is damaged. The Adobe validator has a bug and +the improvements. The documentation uses now \PDF~2.0 and while the newest +PAC~2024 can at least open the file it can not validate properly the file. For example +it complains about the tabular header cells as it doesn't follow attribute classes. +The Adobe validator has a bug and doesn't like the (valid) use of the \texttt{Lbl} tag for the section numbers (see figure~\ref{fig:adobe}). -But even if the documentation passed the tests of the validators: as +But even if the documentation would pass all the tests of the validators: as mentioned above passing a formal test doesn't mean that the content is really good and usable. The user commands used for the tagging and also some of the patches used are still rather crude. So there is lot space for improvement. @@ -354,8 +356,9 @@ Be aware that to create the tagged version a current lualatex-dev and a current version of the pdfmanagment-testphase package is needed. \end{tcolorbox} -\includegraphics[alt=PAC 3 report]{pac3} +\includegraphics[alt=PAC 2024 complains about PDF version]{pac2024-version} +\includegraphics[alt=PAC 2024 complains about table header cells]{pac2024-report} \begin{figure} @@ -504,6 +507,10 @@ The key-val list understands at least the following keys. More keys are defined least \PrintKeyName{activate/mc} has been used. The old name of the key |interwordspace| is still supported but deprecated. +\item[\PrintKeyName{activate/softhyphen}] Boolean. luamode only. + The key activates/deactivates the replacing of hard hyphens from hyphenation + by soft hyphens. By default this is activated. + \item[\PrintKeyName{role/new-tag}] Allows to define new tag names, see section \ref{sec:new-tag} for a description. @@ -721,11 +728,8 @@ To tag a \PDF{} three tasks must be carried out: \minisec{Page stream with marked content} -\tagpdfparaOff - -\tagstructbegin{tag=Figure,alt={Illustration of page stream with marked content},attribute=bbox}% -\tagmcbegin{tag=Figure}% -\begin{tikzpicture}[baseline=(a.north),node distance=2pt,remember picture] +\begin{tikzpicture}[baseline=(a.north),node distance=2pt,remember picture, +alt={Illustration of page stream with marked content}] \node(start){\ldots~\ldots~\ldots}; \node[draw,base right = of start](a) {mc-chunk 1}; \node[draw,base right = of a](b) {mc-chunk 2}; @@ -733,20 +737,13 @@ To tag a \PDF{} three tasks must be carried out: \node[draw,base right = of c](d) {mc-chunk 3}; \node[base right = of d] {\ldots~\ldots}; \end{tikzpicture} -\tagmcend\tagstructend - -\tagpdfparaOn \minisec{Structure} -\tagpdfparaOff \newlength\ydistance\setlength\ydistance{-0.8cm} -\tagstructbegin{tag=Figure,alt={Illustration of structure},attribute=bbox}% -\tagmcbegin{tag=Figure}% -\begin{tikzpicture}[remember picture,baseline=(root.north)] - +\begin{tikzpicture}[remember picture,baseline=(root.north),alt={Illustration of structure}] \node[draw,anchor=base west] (root) at (0,0) {Sect (start section)}; \node[draw,anchor=base west] at (0.3,\ydistance) {H (header section)}; \node[draw,anchor=base west](aref) at (0.6,2\ydistance){mc-chunk 1}; @@ -758,17 +755,12 @@ To tag a \PDF{} three tasks must be carried out: \node[draw,anchor=base west] at (0.3,8\ydistance){/P (end paragraph)}; \node[draw,anchor=base west] at (0,9\ydistance){/Sect (end section)}; \end{tikzpicture} - \begin{tikzpicture}[remember picture, overlay] \draw[->,red](aref)-|(a); \draw[->,red](bref)-|(b); \draw[->,red](cref)-|(c); \draw[->,red](dref)-|(d); - \end{tikzpicture} -\tagmcend\tagstructend - -\tagpdfparaOn \end{tcolorbox} @@ -1108,8 +1100,8 @@ the command, as the effect of the begin command ends with a new \begin{docCommands} { - {doc name=tagmcuse}, - {doc name=tag_mc_use:n} + {doc name=tagmcuse,doc parameter=\marg{label}}, + {doc name=tag_mc_use:n,doc parameter=\marg{label}} } \end{docCommands} @@ -1283,13 +1275,8 @@ add the needed code. \begin{figure} -\tagpdfparaOff -\tagstructbegin{tag=Figure,alt={Illustration of link annotation structure},attribute=bbox}\tagmcbegin{tag=Figure} -\tagstop \input{link-figure-input} -\tagstart -\tagmcend\tagstructend \caption{Structure needed for a link annotation}\label{fig:linkannot} @@ -2661,7 +2648,8 @@ already mentioned there are more requirements: is normally not a problem. With pdflatex it could need additional \verb+\pdfglyphtounicode+ commands. - \item Hard and soft hyphen must be distinct. + \item Hard and soft hyphen must be distinct. In luamode this is now handled through + the \texttt{activate/softhyphen} key. For pdftex no solution is known. \item Spaces between words should be space glyphs and not only a horizontal movement. See section~\ref{sec:spacechars}. @@ -3061,10 +3049,7 @@ examples and remarks easier to understand. \item[postfix notation] \PDF{} uses in various places postfix notation. This means that the operator is behind its arguments: -\tagpdfparaOff - -\tagstructbegin{tag=Figure,alt={Illustration of postfix notation},attribute=bbox}\tagmcbegin{tag=Figure} -\begin{tikzpicture}[baseline=(c.base)] +\begin{tikzpicture}[baseline=(c.base),alt={Illustration of postfix notation}] \node[arg](a1) {18}; \node[arg,right=of a1.east](a2) {0}; \node[operator,right= of a2.east](c) {obj}; @@ -3072,7 +3057,7 @@ examples and remarks easier to understand. \draw[->] (c.south) --++(0,-2mm) -| (a2); \end{tikzpicture} -\begin{tikzpicture}[baseline=(c.base)] +\begin{tikzpicture}[baseline=(c.base),alt={Illustration of postfix notation}] \node[arg](a1) {18}; \node[arg,right=of a1.east](a2) {0}; \node[operator,right= of a2.east](c) {R}; @@ -3081,7 +3066,7 @@ examples and remarks easier to understand. \end{tikzpicture} (a reference (operator R) to an object -\begin{tikzpicture}[baseline=(c.base)] +\begin{tikzpicture}[baseline=(c.base),alt={Illustration of postfix notation}] \node[arg](a1) {1}; \node[arg,right = of a1.east](a2) {0}; \node[arg,right = of a2.east](a3) {0}; @@ -3097,19 +3082,15 @@ examples and remarks easier to understand. \draw[->] (c.south) --++(0,-2mm) -|(a1); \end{tikzpicture} -\begin{tikzpicture}[baseline=(c.base)] +\begin{tikzpicture}[baseline=(c.base),alt={Illustration of postfix notation}] \node[arg](a1) {/P}; \node[arg,right = of a1.east](a2) {<</MCID 0>>}; \node[operator,right = of a2.east](c) {BDC}; \draw[->] (c.south) --++(0,-2mm) -| (a1); \draw[->] (c.south) --++(0,-2mm) -| (a2); \end{tikzpicture} -\tagmcend\tagstructend - -\tagpdfparaOn - \item[Names] \PDF{} knows a sort of variable called a \enquote{name}. Names start with a slash and may include any regular characters, but not delimiter or white-space characters. Uppercase @@ -3152,19 +3133,13 @@ examples and remarks easier to understand. \mbox{\texttt{[0 15 0 R (hello) <</Type /X>> [1 2 3]]}} -\tagpdfparaOff - - \tagstructbegin{tag=Figure,alt={Illustration of array},attribute=bbox}\tagmcbegin{tag=Figure} - \begin{tikzpicture}[baseline=(c.base)] + \begin{tikzpicture}[baseline=(c.base),alt={Illustration of array}] \node[arg](a1) {0}; \node[arg,right = of a1.east](a2) {15 0 R}; \node[arg,right = of a2.east](a3) {(hello)}; \node[arg,right = of a3.east](a4) {<</Type /X>>}; \node[arg,right = of a4.east](a5) {[1 2 3]}; \end{tikzpicture} -\tagmcend\tagstructend - -\tagpdfparaOn \item[Dictionaries] Dictionaries are enclosed by double angle diff --git a/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty index 936f8adacd..6ae5840b11 100644 --- a/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty +++ b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty @@ -1,5 +1,5 @@ %\RequirePackage[enable-debug]{expl3}[2018/06/14] -\ProvidesExplPackage {tagpdfdocu-patches} {2024-06-20} {0.99c} +\ProvidesExplPackage {tagpdfdocu-patches} {2024-08-02} {0.99d} {patches/commands for the tagpdf documentation} \RequirePackage{etoolbox,xpatch} @@ -82,10 +82,6 @@ % } \ExplSyntaxOff -% ======== tikzpicture ========== -% TODO this needs some investigation: it messes up the stack if one add paraOff - -\AddToHook{env/tikzpicture/begin}{} %======== tcolorbox ======== % We switch of paratagging at the begin and reenable it locally in before upper. @@ -138,22 +134,6 @@ % ======= footnote ======== % done in testphase code -% ======= bibliography ======== -% biblatex. Creates some empty mc-chunks. -% no internal patches, but redefining begentry/finentry is not safe. -% better hook is needed. - - -\def\blx@endbibliography{% - \csuse{blx@endenv@\blx@theenv}% - \blx@noitem - \blx@locallabelwidth@finish - \endgroup - \blx@bibnote\blx@thepostnote -% \endgroup - \expandafter\endgroup\if@endpe\@doendpe\fi -} - % ====== hyperref ======== % this should probably go into tagpdf, but it is related to % problem of pdf strings and context .... @@ -167,16 +147,147 @@ \let\tagstructend\relax }}{} -%====== picture ======= +%====== tikz picture ======= +% first draft to tag. The main problem is to handle paragraphs. One +\ExplSyntaxOn +\cs_new_protected:Npn\__tag_tikz_savepos:n #1 + { + \tex_savepos:D + \tikz@resetexpandcount% + \tikz@scan@one@point\pgfutil@firstofone(current~bounding~box.north~east)\relax + \pgf@pos@transform{\pgf@x}{\pgf@y}% + \property_record:nn{#1}{xpos,ypos,abspage} + \property_record:nn{#1-tr}{pgfx,pgfy} + \tikz@scan@one@point\pgfutil@firstofone(current~bounding~box.south~west)\relax + \pgf@pos@transform{\pgf@x}{\pgf@y}% + \property_record:nn{#1-bl}{pgfx,pgfy} + \tex_savepos:D + } +\cs_generate_variant:Nn \__tag_tikz_savepos:n {e} + +\NewProperty{pgfx}{now}{0} + { + \dim_compare:nNnTF {\dim_abs:n {\pgf@x}} > {15999pt} + { 0 } + { \dim_to_decimal_in_sp:n{\pgf@x} } + } +\NewProperty{pgfy}{now}{0} + { + \dim_compare:nNnTF {\dim_abs:n {\pgf@y}} > {15999pt} + { 0 } + { \dim_to_decimal_in_sp:n{\pgf@y} } + } + +\cs_new_protected:Npn \__tag_tikz_getbbox: + { + \int_gincr:N\g__tag_graphic_int + \tl_set:Ne\l__tag_graphic_currentlabel_tl {__tag_graphic_\int_use:N \g__tag_graphic_int} + \tl_gset:Ne\g__tag_graphic_lx_tl + { + \dim_to_decimal_in_bp:n + { \property_ref:een {\l__tag_graphic_currentlabel_tl}{xpos}{0}sp + + \property_ref:een {\l__tag_graphic_currentlabel_tl-bl}{pgfx}{0}sp + } + } + \tl_gset:Ne\g__tag_graphic_ly_tl + { + \dim_to_decimal_in_bp:n + { \property_ref:een {\l__tag_graphic_currentlabel_tl}{ypos}{0}sp + + \property_ref:een {\l__tag_graphic_currentlabel_tl-bl}{pgfy}{0}sp + } + } + \tl_gset:Ne\g__tag_graphic_ux_tl + { + \dim_to_decimal_in_bp:n + { \property_ref:een {\l__tag_graphic_currentlabel_tl}{xpos}{0}sp + + \property_ref:een {\l__tag_graphic_currentlabel_tl-tr}{pgfx}{0}sp + } + } + \tl_gset:Ne\g__tag_graphic_uy_tl + { + \dim_to_decimal_in_bp:n + { \property_ref:een {\l__tag_graphic_currentlabel_tl}{ypos}{0}sp + + \property_ref:een {\l__tag_graphic_currentlabel_tl-tr}{pgfy}{0}sp + } + } + } -% PAC3 complained that the BBox is missing, so we are cheating for now -% and add a fix size. -\tagpdfsetup - { - newattribute = - {bbox}{/O /Layout /BBox [0 0 100 100]} +\cs_new_protected:Npn \__tag_graphic_tikz_begin_picture: + { + \tag_mc_end_push: + \bool_if:NTF \l__tag_graphic_artifact_bool + { \tagmcbegin{artifact} } + { + \__tag_tikz_getbbox: + \tagstructbegin{tag=Figure,alt=\l__tag_graphic_alt_tl}\tagmcbegin{} + \__tag_prop_gput:cne + { g__tag_struct_\int_eval:n {\c@g__tag_struct_abs_int}_prop } + { A } + { + << + /O /Layout /BBox~ + [ + \g__tag_graphic_lx_tl\c_space_tl + \g__tag_graphic_ly_tl\c_space_tl + \g__tag_graphic_ux_tl\c_space_tl + \g__tag_graphic_uy_tl + ] + >> + } + \bool_if:NT\l__tag_graphic_debug_bool + { + \__tag_graphic_show_bbox:VVVVne + \g__tag_graphic_lx_tl + \g__tag_graphic_ly_tl + \g__tag_graphic_ux_tl + \g__tag_graphic_uy_tl + {red} + {\int_use:N\g__tag_graphic_int} + } + } + \SuspendTagging{tikz} } +\cs_new_protected:Npn \__tag_graphic_tikz_end_picture: + { + \ResumeTagging{tikz}\tagmcend + \bool_if:NF \l__tag_graphic_artifact_bool + { + \tagstructend + \__tag_tikz_savepos:e {__tag_graphic_\int_use:N \g__tag_graphic_int} + } + \tag_mc_begin_pop:n{} + } + +\tikzset + { + every~picture/.style= + { + artifact, + execute~at~begin~picture=\__tag_graphic_tikz_begin_picture:, + execute~at~end~picture=\__tag_graphic_tikz_end_picture: + } + } +\AddToHook{env/tikzpicture/before}{\leavevmode} + +\tikzset + { + alt/.code= + { + \bool_set_false:N \l__tag_graphic_artifact_bool + \tl_set:Nn \l__tag_graphic_alt_tl{#1} + } + } +\tikzset + { + artifact/.code= + \bool_set_true:N \l__tag_graphic_artifact_bool + } + +\ExplSyntaxOff + + + \endinput diff --git a/macros/latex/contrib/tagpdf/tagpdfsetup-keys.tex b/macros/latex/contrib/tagpdf/tagpdfsetup-keys.tex index 04f8b88aec..a02411c31f 100644 --- a/macros/latex/contrib/tagpdf/tagpdfsetup-keys.tex +++ b/macros/latex/contrib/tagpdf/tagpdfsetup-keys.tex @@ -12,7 +12,8 @@ new key name & old key name & value &type & defined in \\\midrul activate & activate & boolean &meta & tagpdf \\ activate/all & activate-all & boolean &meta & tagpdf\\ -activate/mc & activate-mc & boolean &bool & tagpdf\\ +activate/mc & activate-mc & boolean &bool & tagpdf\\ +activate/softhyphen & --- & boolean &bool & tagpdf \\ activate/spaces & interwordspace & boolean &code & tagpdf-space\\ activate/struct & activate-struct & boolean &bool & tagpdf\\ activate/struct-dest & no-struct-dest&boolean &bool & tagpdf\\ diff --git a/macros/latex/contrib/telprint/README.md b/macros/latex/contrib/telprint/README.md new file mode 100644 index 0000000000..de7d729ad6 --- /dev/null +++ b/macros/latex/contrib/telprint/README.md @@ -0,0 +1,13 @@ +# telprint package for LaTeX + +Version: 2024-07-26 v1.12 + +Format German phone numbers + +## Copyright (C) +* 1996, 1997, 2004-2008 Heiko Oberdiek +* 2016-2024 Oberdiek Package Support Group + + +## License +LATEX Project Public License, version 1.3c or later. diff --git a/macros/latex/contrib/oberdiek/telprint.dtx b/macros/latex/contrib/telprint/telprint.dtx index 57152c6651..74bb22ea8a 100644 --- a/macros/latex/contrib/oberdiek/telprint.dtx +++ b/macros/latex/contrib/telprint/telprint.dtx @@ -1,13 +1,13 @@ % \iffalse meta-comment % % File: telprint.dtx -% Version: 2016/05/16 v1.11 +% Version: 2024-07-26 v1.12 % Info: Format German phone numbers % % Copyright (C) % 1996, 1997, 2004-2008 Heiko Oberdiek -% 2016-2019 Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues +% 2016-2024 Oberdiek Package Support Group +% https://github.com/ho-tex/telprint/issues % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either @@ -23,7 +23,7 @@ % % The Current Maintainers of this work are % Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues +% https://github.com/ho-tex/telprint/issues % % The Base Interpreter refers to any `TeX-Format', % because some files are installed in TDS:tex/generic//. @@ -34,8 +34,8 @@ % telprint-test1.tex. % % Distribution: -% CTAN:macros/latex/contrib/oberdiek/telprint.dtx -% CTAN:macros/latex/contrib/oberdiek/telprint.pdf +% CTAN:macros/latex/contrib/telprint/telprint.dtx +% CTAN:macros/latex/contrib/telprint/telprint.pdf % % Unpacking: % (a) If telprint.ins is present: @@ -56,7 +56,7 @@ % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % -% Programm calls to get the documentation (example): +% Program calls to get the documentation (example): % pdflatex telprint.dtx % makeindex -s gind.ist telprint.idx % pdflatex telprint.dtx @@ -64,9 +64,9 @@ % pdflatex telprint.dtx % % Installation: -% TDS:tex/generic/oberdiek/telprint.sty -% TDS:doc/latex/oberdiek/telprint.pdf -% TDS:source/latex/oberdiek/telprint.dtx +% TDS:tex/generic/telprint/telprint.sty +% TDS:doc/latex/telprint/telprint.pdf +% TDS:source/latex/telprint/telprint.dtx % %<*ignore> \begingroup @@ -83,7 +83,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: telprint 2016/05/16 v1.11 Format German phone numbers (HO)} +\Msg{* Package: telprint 2024-07-26 v1.12 Format German phone numbers (HO)} \Msg{************************************************************************} \keepsilent @@ -95,11 +95,11 @@ This is a generated file. Project: telprint -Version: 2016/05/16 v1.11 +Version: 2024-07-26 v1.12 Copyright (C) 1996, 1997, 2004-2008 Heiko Oberdiek - 2016-2019 Oberdiek Package Support Group + 2016-2024 Oberdiek Package Support Group This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either @@ -115,7 +115,7 @@ This work has the LPPL maintenance status "maintained". The Current Maintainers of this work are Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues +https://github.com/ho-tex/telprint/issues The Base Interpreter refers to any `TeX-Format', @@ -132,9 +132,9 @@ and the derived files \generate{% \file{telprint.ins}{\from{telprint.dtx}{install}}% \file{telprint.drv}{\from{telprint.dtx}{driver}}% - \usedir{tex/generic/oberdiek}% + \usedir{tex/generic/telprint}% \file{telprint.sty}{\from{telprint.dtx}{package}}% -% \usedir{doc/latex/oberdiek/test}% +% \usedir{doc/latex/telprint/test}% % \file{telprint-test1.tex}{\from{telprint.dtx}{test1}}% } @@ -162,7 +162,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{telprint.drv}% - [2016/05/16 v1.11 Format German phone numbers (HO)]% + [2024-07-26 v1.12 Format German phone numbers (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2011/11/22] \usepackage[ngerman,english]{babel} @@ -177,9 +177,9 @@ and the derived files % \GetFileInfo{telprint.drv} % % \title{The \xpackage{telprint} package} -% \date{2016/05/16 v1.11} +% \date{2024-07-26 v1.12} % \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} +% {Please report any issues at \url{https://github.com/ho-tex/telprint/issues}}} % % \maketitle % @@ -397,7 +397,7 @@ and the derived files \fi \expandafter\x\csname ver@telprint.sty\endcsname \ProvidesPackage{telprint}% - [2016/05/16 v1.11 Format German phone numbers (HO)]% + [2024-07-26 v1.12 Format German phone numbers (HO)]% % \end{macrocode} % % \subsection{Catcodes} @@ -467,7 +467,11 @@ and the derived files % \begin{macro}{\telspace} % \begin{macrocode} \DeclareRobustCommand*{\telspace}[1]{\def\TELspace{#1}} -\telspace{{}$\,${}} +\ifcsname LaTeXReleaseInfo\endcsname + \telspace{\,} +\else + \telspace{{}$\,${}} +\fi % \end{macrocode} % \end{macro} % \begin{macro}{\telhyphen} @@ -615,30 +619,10 @@ and the derived files % \paragraph{Package.} This package is available on % CTAN\footnote{\CTANpkg{telprint}}: % \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/telprint.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/telprint.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] +% \item[\CTAN{macros/latex/contrib/telprint/telprint.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/telprint/telprint.pdf}] Documentation. % \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTANpkg{tds}). Directories -% with \xfile{texmf} in their name are usually organized this way. % -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} % % \subsection{Package installation} % @@ -655,9 +639,9 @@ and the derived files % \begin{quote} % \def\t{^^A % \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% telprint.sty & tex/generic/oberdiek/telprint.sty\\ -% telprint.pdf & doc/latex/oberdiek/telprint.pdf\\ -% telprint.dtx & source/latex/oberdiek/telprint.dtx\\ +% telprint.sty & tex/generic/telprint/telprint.sty\\ +% telprint.pdf & doc/latex/telprint/telprint.pdf\\ +% telprint.dtx & source/latex/telprint/telprint.dtx\\ % \end{tabular}^^A % }^^A % \sbox0{\t}^^A @@ -836,6 +820,9 @@ and the derived files % \item % Documentation updates. % \end{Version} +% \begin{Version}{2024-07-26 v1.12} +% \item Avoid math in \cs{telspace} for better tagging support. +% \end{Version} % \end{History} % % \PrintIndex diff --git a/macros/latex/contrib/oberdiek/telprint.pdf b/macros/latex/contrib/telprint/telprint.pdf Binary files differindex f8027491c8..49a2968f35 100644 --- a/macros/latex/contrib/oberdiek/telprint.pdf +++ b/macros/latex/contrib/telprint/telprint.pdf diff --git a/macros/latex/contrib/tkz/pgfornament/README.md b/macros/latex/contrib/tkz/pgfornament/README.md index 737ee2acc2..901d6554cc 100644 --- a/macros/latex/contrib/tkz/pgfornament/README.md +++ b/macros/latex/contrib/tkz/pgfornament/README.md @@ -1,6 +1,6 @@ # pgfornament – Drawing of Vectorian ornaments with PGF/TikZ -Release 1.2 2020/05/28 +Release 1.3 2024/08/14 ## Description @@ -55,6 +55,9 @@ your LaTeX document. Documentations for `pgfornament` and `tikzrput` are available on CTAN and in your TeX distribution. ## History + +- v 1.3 Correction of bug (spurious space) by Tibor Tómács and correction of the documentation. + - v 1.2 Correction of bug (spurious space) by LianTze Lim. - v 1.00 Add the Han ornanments and some new macros. Add some examples to the documentation. Thanks to Pablo Gonzáles L to help me with "Git". diff --git a/macros/latex/contrib/tkz/pgfornament/doc/ornaments.pdf b/macros/latex/contrib/tkz/pgfornament/doc/ornaments.pdf Binary files differindex 6486f4e253..46f3fe8fef 100644 --- a/macros/latex/contrib/tkz/pgfornament/doc/ornaments.pdf +++ b/macros/latex/contrib/tkz/pgfornament/doc/ornaments.pdf diff --git a/macros/latex/contrib/tkz/pgfornament/doc/ornaments.tex b/macros/latex/contrib/tkz/pgfornament/doc/ornaments.tex index c52dd63e91..2a7f4b0fc1 100644 --- a/macros/latex/contrib/tkz/pgfornament/doc/ornaments.tex +++ b/macros/latex/contrib/tkz/pgfornament/doc/ornaments.tex @@ -8,7 +8,7 @@ % of this license or (at your option) any later version and/or % 2. under the GNU Public License. %---------%---------%---------%---------%---------%---------%---------%--------- -% Version 1.2 2020/0 5/26 +% Version 1.3 2024/08/14 \RequirePackage{luatex85} \RequirePackage{silence} \WarningsOff[latex] @@ -137,7 +137,7 @@ urlcolor=orange} \bigskip -\noindent\pgfornament[width=0.75 cm]{152}\ (Version 1.2 2020/05/26) +\noindent\pgfornament[width=0.75 cm]{152}\ (Version 1.3 2024/08/14) \begin{abstract} This document describes the \LaTeX\ package \emph{\docpkg{pgfornament}} and presents the syntax and parameters of the macro "pgfornament". diff --git a/macros/latex/contrib/tkz/pgfornament/doc/usefulcommands.tex b/macros/latex/contrib/tkz/pgfornament/doc/usefulcommands.tex index 4af2421923..4a54f9ea45 100644 --- a/macros/latex/contrib/tkz/pgfornament/doc/usefulcommands.tex +++ b/macros/latex/contrib/tkz/pgfornament/doc/usefulcommands.tex @@ -5,11 +5,11 @@ \setlength{\@tempdimb}{\paperwidth-\@tempdima-1cm}% \setlength{\@tempdimc}{\paperheight-\@tempdima}% \put(\LenToUnit{\@tempdima},\LenToUnit{\@tempdimc}){% - \pgfornament[color=Maroon,anchor=north west,width=1cm]{39}} -\put(\LenToUnit{\@tempdima},\LenToUnit{\@tempdima}){% - \pgfornament[color=Maroon,anchor=south west,width=1cm,symmetry=h]{39}} + \pgfornament[color=Maroon,anchor=north west,width=1cm]{39}} \put(\LenToUnit{\@tempdimb},\LenToUnit{\@tempdimc}){% \pgfornament[color=Maroon,anchor=north east,width=1cm,symmetry=v]{39}} +\put(\LenToUnit{\@tempdima},\LenToUnit{\@tempdima}){% + \pgfornament[color=Maroon,anchor=south west,width=1cm,symmetry=h]{39}} \put(\LenToUnit{\@tempdimb},\LenToUnit{\@tempdima}){% \pgfornament[color=Maroon,anchor=south east,width=1cm,symmetry=c]{39}} \endgroup diff --git a/macros/latex/contrib/tkz/pgfornament/latex/pgfornament.sty b/macros/latex/contrib/tkz/pgfornament/latex/pgfornament.sty index 27406e8bbf..fad27cbb74 100644 --- a/macros/latex/contrib/tkz/pgfornament/latex/pgfornament.sty +++ b/macros/latex/contrib/tkz/pgfornament/latex/pgfornament.sty @@ -17,7 +17,7 @@ % Inspired from psvectorian P Fradin H Voss \NeedsTeXFormat{LaTeX2e} \RequirePackage{tikz,pgfopts} -\ProvidesPackage{pgfornament}[2020/05/26 v1.2 vector ornaments] +\ProvidesPackage{pgfornament}[2024/08/14 v1.3 vector ornaments] \gdef\pgfOrnamentsObject{pgflibraryvectorian.code.tex} \gdef\OrnamentsFamily{vectorian} \pgfkeys{% @@ -138,7 +138,7 @@ baseline={([yshift=\pgfornamentydelta]current bounding box.\pgfornamentanchor)}, \pgftransformscale{\pgfornamentscale}% \pgf@@ornament{#2}% \end{tikzpicture}% -\tikzset{pgfornamentstyle/.style={cm={1,0,0,1,(0,0)}}} +\tikzset{pgfornamentstyle/.style={cm={1,0,0,1,(0,0)}}}% }% end pgfornament \gdef\ornamenttopos{.5} @@ -180,8 +180,8 @@ baseline={([yshift=\pgfornamentydelta]current bounding box.\pgfornamentanchor)}, \pgfextractx{\pgf@x}{\pgfpointanchor{#2}{#3 west}} \pgf@xb=\pgf@x \advance\pgf@xb by -\pgf@xa -\node[inner sep=0pt] at ($(#1.#3 east)!.5!(#2.#3 west)$) {\pgfornament[width=\pgf@xb]{#4}} ; -} +\node[inner sep=0pt] at ($(#1.#3 east)!.5!(#2.#3 west)$) {\pgfornament[width=\pgf@xb]{#4}}; +}% \def\pgfornamentvline#1#2#3#4{% \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{south #3}} \pgf@ya=\pgf@y @@ -203,7 +203,7 @@ baseline={([yshift=\pgfornamentydelta]current bounding box.\pgfornamentanchor)}, \pgfmathsetmacro{#1}{atan2(\pgf@x,\pgf@y)}% }% \makeatother -\newcommand{\resetpgfornamentstyle}{\tikzset{pgfornamentstyle/.style={}}} +\newcommand{\resetpgfornamentstyle}{\tikzset{pgfornamentstyle/.style={}}}% % 2020 Changing vector objects \def\newpgfornamentfamily#1{% @@ -219,11 +219,10 @@ baseline={([yshift=\pgfornamentydelta]current bounding box.\pgfornamentanchor)}, /ornamentline/.search also={/tikz}} \def\pgfornamentline{\pgfutil@ifnextchar[{\pgf@ornamentline}{\pgf@ornamentline[]}}% \def\pgf@ornamentline[#1]#2#3#4#5{% - \pgfqkeys{/ornamentline}{#1}% \pgfmathsetmacro\nbo{#4} \path (#2) -- (#3) foreach \i in {0,...,\nbo} {coordinate[pos=\i/\nbo] (p\i)} [color=\ornamentcolor] foreach \i [count=\j] in {0,...,\number\numexpr\nbo-1} { (p\i) to [ornament=#5] (p\j)}; -} +}% \makeatother \endinput
\ No newline at end of file diff --git a/macros/latex/contrib/tramlines/README b/macros/latex/contrib/tramlines/README index b252d9323a..0dcd98c4a0 100644 --- a/macros/latex/contrib/tramlines/README +++ b/macros/latex/contrib/tramlines/README @@ -1,6 +1,6 @@ tramlines - make tramlines -version: 1.1.0 +version: 1.1.1 This package automatically creates tramlines (lines above and below a title used by lawyers in the UK and the Commonwealth). @@ -12,6 +12,9 @@ For suggestions, feature requests, and bug reports, please use the project's GitHub site: https://github.com/ezgranet/tramlines Version history: +18/07/2024: Change erroneous left alignment to centre alignment + + 29/01/2023: Updates to float composition and fixed bug with global commands. Thanks to GitHub user niruvt diff --git a/macros/latex/contrib/tramlines/tramlines-documentation.pdf b/macros/latex/contrib/tramlines/tramlines-documentation.pdf Binary files differindex e9d9c9d6d9..1ccb2be965 100644 --- a/macros/latex/contrib/tramlines/tramlines-documentation.pdf +++ b/macros/latex/contrib/tramlines/tramlines-documentation.pdf diff --git a/macros/latex/contrib/tramlines/tramlines-documentation.tex b/macros/latex/contrib/tramlines/tramlines-documentation.tex index f39e7ba70c..ba56009346 100644 --- a/macros/latex/contrib/tramlines/tramlines-documentation.tex +++ b/macros/latex/contrib/tramlines/tramlines-documentation.tex @@ -74,9 +74,9 @@ breaklines, firstnumber=last ] {latex} -\def\tramlinesversionnumber{1.1.0} +\def\tramlinesversionnumber{1.1.1} \ProvidesPackage{tramlines} -[2023/01/29\tramlinesversionnumber\ +[2024/07/18\tramlinesversionnumber\ Tramlines] % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3c @@ -112,7 +112,7 @@ firstnumber=last \centering {%notglobal \setlength\doublerulesep{\tramlinesep}% <-- set distance between double rule -\begin{tabular}[t]{l c c } +\begin{tabular}[t]{c c c } \toprule\toprule & #1 & \\ \bottomrule\bottomrule @@ -129,8 +129,19 @@ firstnumber=last %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%\end{minted} +\section{Version History} +\subsection*{\ttfamily 1.1.1} +\ttfamily 18 July 2024: Change erroneous left alignment to centre alignment +\subsection*{\ttfamily 1.1.0} + +\ttfamily 29 October 2023: Updates to float composition and fixed bug with global commands. Thanks to GitHub user `niruvt' + +\ttfamily 29/01/2023: Updates to float composition and fixed bug with global commands. Thanks to GitHub user niruvt + + \subsection*{\texttt{1.0.0}} + \ttfamily 27 January 2023: Package creation diff --git a/macros/latex/contrib/tramlines/tramlines.sty b/macros/latex/contrib/tramlines/tramlines.sty index f3288a8d1f..72878c423e 100644 --- a/macros/latex/contrib/tramlines/tramlines.sty +++ b/macros/latex/contrib/tramlines/tramlines.sty @@ -1,6 +1,6 @@ -\def\tramlinesversionnumber{1.1.0} +\def\tramlinesversionnumber{1.1.1} \ProvidesPackage{tramlines} -[2023/01/29\tramlinesversionnumber\ +[2024/07/18\tramlinesversionnumber\ Tramlines] % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3c @@ -36,7 +36,7 @@ \centering {%notglobal \setlength\doublerulesep{\tramlinesep}% <-- set distance between double rule -\begin{tabular}[t]{l c c } +\begin{tabular}[b]{c c c } \toprule\toprule & #1 & \\ \bottomrule\bottomrule diff --git a/macros/latex/contrib/univie-ling/README b/macros/latex/contrib/univie-ling/README index b90c86e8cc..c73460f0b4 100644 --- a/macros/latex/contrib/univie-ling/README +++ b/macros/latex/contrib/univie-ling/README @@ -97,6 +97,19 @@ also have a look at the example files. == CHANGES == +V. 2.7 (2024-07-23): + - univie-ling-wlg: Use proper spacing with covington's + reflist environment. + - univie-ling-poster: add smallmargins option. + - univie-ling-thesis: fix running headers in twoside mode. + - univie-ling-handout: + - univie-ling-expose: + - univie-ling-paper: + - univie-ling-thesis: + - univie-ling-wlg: + * Fix empty argument check in \weblink. + * Fix spacing after \weblink. + V. 2.6 (2024-06-27): - univie-ling-poster: add smallmargins option. - univie-ling-thesis: fix running headers in twoside mode. diff --git a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx index 43b942d15c..985dc19f98 100644 --- a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx +++ b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.bbx @@ -38,7 +38,7 @@ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\ProvidesFile{univie-ling.bbx}[2024/06/27 v.2.6 biblatex bibliography style] +\ProvidesFile{univie-ling.bbx}[2024/07/23 v.2.7 biblatex bibliography style] % Load base style (authoryear-comp) \RequireBibliographyStyle{authoryear-comp} diff --git a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx index 30064c8f91..7600056940 100644 --- a/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx +++ b/macros/latex/contrib/univie-ling/biblatex-univie-ling/univie-ling.cbx @@ -36,7 +36,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\ProvidesFile{univie-ling.cbx}[2024/06/27 v.2.6 biblatex citation style] +\ProvidesFile{univie-ling.cbx}[2024/07/23 v.2.7 biblatex citation style] \RequireCitationStyle{authoryear-comp} diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf Binary files differindex 1773af1838..8652b32a5b 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-expose-deutsch.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf Binary files differindex 2f632ebda3..a8ac59e821 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-expose-english.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf Binary files differindex 484e4365b5..48b41cac87 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-handout-deutsch.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf Binary files differindex b61d77074d..608e203154 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-handout-english.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf Binary files differindex 37e2bc3e00..5ac9aba1d1 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-paper-deutsch.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf Binary files differindex d4885d0743..49efca45fa 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-paper-english.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf Binary files differindex 76ab0629d5..f2260ffeb4 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-poster-deutsch.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf Binary files differindex 0b9643c0bd..b16ccfe334 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-poster-english.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf Binary files differindex 34ac74afc7..9673abfdb0 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.tex b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.tex index 527f8d0498..7b01c0a88f 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.tex +++ b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-deutsch.tex @@ -2,9 +2,7 @@ % Übersetzen mit pdflatex -- biber -- pdflatex % Verwende den vom Hochschulschriftenservice verlangten Standard PDF/A1-b % (siehe http://e-theses.univie.ac.at/elektronische_einreichung.html) -% pdfx is currently broken -%\documentclass[naustrian,pdfa]{univie-ling-thesis} -\documentclass[naustrian]{univie-ling-thesis} +\documentclass[naustrian,pdfa]{univie-ling-thesis} \usepackage{babel} diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf Binary files differindex 800946d7c8..0d550fa286 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.tex b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.tex index c2f7c5f4a0..0be7edb600 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.tex +++ b/macros/latex/contrib/univie-ling/doc/templates/template-thesis-english.tex @@ -2,9 +2,7 @@ % Run pdflatex -- biber -- pdflatex % Use the PDF/A1-b standard as required by the Hochschulschriften-Service % (see http://e-theses.univie.ac.at/elektronische_einreichung.html) -% pdfx is currently broken -%\documentclass[naustrian,english,pdfa]{univie-ling-thesis} -\documentclass[naustrian,english]{univie-ling-thesis} +\documentclass[naustrian,english,pdfa]{univie-ling-thesis} \usepackage{babel} diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf Binary files differindex b65b92ef1b..8a1d9155c6 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-article.pdf diff --git a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf Binary files differindex 2e8562ef5d..f811c049e4 100644 --- a/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf +++ b/macros/latex/contrib/univie-ling/doc/templates/template-wlg-review.pdf diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf Binary files differindex d47fcaaa0b..7efd2c2f36 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.pdf diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex index fcb89d9727..c3d1c66805 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-expose.tex @@ -63,7 +63,7 @@ \author{\texorpdfstring{Jrgen Spitzmller% \thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}} -\date{Version 2.6, 2024/06/27} +\date{Version 2.7, 2024/07/23} \maketitle @@ -370,6 +370,11 @@ Templates are provided as well: \section{Release History} \begin{itemize} + \item 2024/07/23 (v.\,2.7) + \begin{itemize} + \item Fix spacing after \jfcsmacro{weblink}. + \item Fix empty argument check in \jfcsmacro{weblink}. + \end{itemize} \item 2024/06/27 (v.\,2.6) \begin{itemize} \item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros. diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf Binary files differindex bb7dfd5c25..a253d4003e 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.pdf diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex index 8fbb627024..bdd72da44e 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-handout.tex @@ -63,7 +63,7 @@ \author{\texorpdfstring{Jrgen Spitzmller% \thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}} -\date{Version 2.6, 2024/06/27} +\date{Version 2.7, 2024/07/23} \maketitle @@ -415,6 +415,11 @@ Templates are provided as well: \section{Release History} \begin{description} + \item 2024/07/23 (v.\,2.7) + \begin{itemize} + \item Fix spacing after \jfcsmacro{weblink}. + \item Fix empty argument check in \jfcsmacro{weblink}. + \end{itemize} \item 2024/06/27 (v.\,2.6) \begin{itemize} \item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros. diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf Binary files differindex 9f7f328fbb..e04efcd52f 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.pdf diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex index 6ade5e4b72..d6f5293a89 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-paper.tex @@ -63,7 +63,7 @@ \author{\texorpdfstring{Jrgen Spitzmller% \thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}} -\date{Version 2.6, 2024/06/27} +\date{Version 2.7, 2024/07/23} \maketitle @@ -411,6 +411,11 @@ Templates are provided as well: \section{Release History} \begin{itemize} + \item 2024/07/23 (v.\,2.7) + \begin{itemize} + \item Fix spacing after \jfcsmacro{weblink}. + \item Fix empty argument check in \jfcsmacro{weblink}. + \end{itemize} \item 2024/06/27 (v.\,2.6) \begin{itemize} \item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros. diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf Binary files differindex 204245e59f..06d64c7638 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.pdf diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex index c8580538c3..1985658b78 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-poster.tex @@ -65,7 +65,7 @@ \author{\texorpdfstring{Jrgen Spitzmller% \thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}} -\date{Version 2.6, 2024/06/27} +\date{Version 2.7, 2024/07/23} \maketitle @@ -577,6 +577,11 @@ Templates are provided as well: \section{Release History} \begin{description} + \item 2024/07/23 (v.\,2.7) + \begin{itemize} + \item Fix spacing after \jfcsmacro{weblink}. + \item Fix empty argument check in \jfcsmacro{weblink}. + \end{itemize} \item 2024/06/27 (v.\,2.6) \begin{itemize} \item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros. diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf Binary files differindex 4c9fb2a37c..b77ad97265 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.pdf diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex index 92d06ea952..2feb157bce 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-thesis.tex @@ -59,7 +59,7 @@ \author{\texorpdfstring{Jrgen Spitzmller% \thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}} -\date{Version 2.6, 2024/06/27} +\date{Version 2.7, 2024/07/23} \maketitle @@ -433,6 +433,11 @@ Templates are provided as well: \section{Release History} \begin{itemize} + \item 2024/07/23 (v.\,2.7) + \begin{itemize} + \item Fix spacing after \jfcsmacro{weblink}. + \item Fix empty argument check in \jfcsmacro{weblink}. + \end{itemize} \item 2024/06/27 (v.\,2.6) \begin{itemize} \item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros. diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf Binary files differindex 6276518546..f2a5a48dc2 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.pdf diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex index a12fccdeac..6ca75cc0ed 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex +++ b/macros/latex/contrib/univie-ling/doc/univie-ling-wlg.tex @@ -59,7 +59,7 @@ \author{\texorpdfstring{Jrgen Spitzmller% \thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}} -\date{Version 2.6, 2024/06/27} +\date{Version 2.7, 2024/07/23} \maketitle @@ -263,6 +263,10 @@ If the class option \joption{biblatex=true} is set, the \uvlt\ class loads a bib \emph{Unified Style Sheet for Linguistics} of the LSA (\emph{Linguistic Society of America}). In order to conform to this style, the \uvlt\ class uses the \textsf{biblatex} package with the \textsf{univie-ling} style that is included in the \textsf{univie-ling} bundle. +If, for some reason, you do not want to use \textsf{biblatex} and prefer to have a manually constituted bibliography\footnote{A reason might be that you transform +a paper submitted in a an office file format to \LaTeX.}, use the \texttt{reflist} environment +and separate each entry by a blank line. Since this environment is provided by \textsf{covington}, the \joption{covington} options must not be \joption{false}. + \section{\LyX\ layouts and templates} A layout for \LyX\footnote{See \url{https://www.lyx.org}.}\ can be retrieved from \url{https://github.com/jspitz/univie-ling/raw/master/lyx/layouts/univie-ling-wlg.layout}. @@ -274,6 +278,12 @@ A template is provided as well: \url{https://github.com/jspitz/univie-ling/raw/m \raggedright \begin{itemize} + \item 2024/07/23 (v.\,2.7) + \begin{itemize} + \item Use proper spacing with \textsf{covington}'s \texttt{reflist} environment. + \item Fix spacing after \jfcsmacro{weblink}. + \item Fix empty argument check in \jfcsmacro{weblink}. + \end{itemize} \item 2024/06/27 (v.\,2.6) \begin{itemize} \item Provide \jcsmacro{weblink}, \jcsmacro{SetURLDate} and \jcsmacro{urldate} macros. diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling.pdf b/macros/latex/contrib/univie-ling/doc/univie-ling.pdf Binary files differindex b0f3e13826..394cddb692 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling.pdf +++ b/macros/latex/contrib/univie-ling/doc/univie-ling.pdf diff --git a/macros/latex/contrib/univie-ling/doc/univie-ling.tex b/macros/latex/contrib/univie-ling/doc/univie-ling.tex index 34435a3876..f88f1fcea4 100644 --- a/macros/latex/contrib/univie-ling/doc/univie-ling.tex +++ b/macros/latex/contrib/univie-ling/doc/univie-ling.tex @@ -42,7 +42,7 @@ \author{\texorpdfstring{Jrgen Spitzmller% \thanks{Please report issues via \protect\url{https://github.com/jspitz/univie-ling}.}}{Jrgen Spitzmller}} -\date{Version 2.6, 2024/06/27} +\date{Version 2.7, 2024/07/23} \maketitle diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls index b31ae0a4f7..f7ff0916f4 100644 --- a/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls +++ b/macros/latex/contrib/univie-ling/tex/univie-ling-expose.cls @@ -33,7 +33,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e}[2022/06/01] -\ProvidesPackage{univie-ling-expose}[2024/06/27 v.2.6 Univie Linguistic Exposes (JSp)] +\ProvidesPackage{univie-ling-expose}[2024/07/23 v.2.7 Univie Linguistic Exposes (JSp)] %% ============================================================ @@ -274,10 +274,10 @@ \NewDocumentCommand\weblink{mo}{% \url{#1}% \IfNoValueTF{#2}% - {\ifthenelse{\isempty{\wlg@urldate}}{}{% + {\ifx\wlg@urldate\empty\else% \ \urldate{\wlg@urldate}% - }}% - {\ \urldate{#2}} + \fi}% + {\ \urldate{#2}}% } } diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls index 01abf2e31c..73c5a325da 100644 --- a/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls +++ b/macros/latex/contrib/univie-ling/tex/univie-ling-handout.cls @@ -35,7 +35,7 @@ \NeedsTeXFormat{LaTeX2e}[2022/06/01] -\ProvidesClass{univie-ling-handout}[2024/06/27 v.2.6 Univie Ling handout class (JSp)] +\ProvidesClass{univie-ling-handout}[2024/07/23 v.2.7 Univie Ling handout class (JSp)] %% ============================================================ %% CLASS OPTIONS @@ -933,10 +933,10 @@ \NewDocumentCommand\weblink{mo}{% \url{#1}% \IfNoValueTF{#2}% - {\ifthenelse{\isempty{\wlg@urldate}}{}{% + {\ifx\wlg@urldate\empty\else% \ \urldate{\wlg@urldate}% - }}% - {\ \urldate{#2}} + \fi}% + {\ \urldate{#2}}% } } diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls index 88ec71a6fa..eda1430345 100644 --- a/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls +++ b/macros/latex/contrib/univie-ling/tex/univie-ling-paper.cls @@ -32,7 +32,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e}[2022/06/01] -\ProvidesPackage{univie-ling-paper}[2024/06/27 v.2.6 Univie Linguistic Papers (JSp)] +\ProvidesPackage{univie-ling-paper}[2024/07/23 v.2.7 Univie Linguistic Papers (JSp)] %% ============================================================ @@ -296,10 +296,10 @@ This includes all drawings, sketches, graphics and internet sources.} \NewDocumentCommand\weblink{mo}{% \url{#1}% \IfNoValueTF{#2}% - {\ifthenelse{\isempty{\wlg@urldate}}{}{% + {\ifx\wlg@urldate\empty\else% \ \urldate{\wlg@urldate}% - }}% - {\ \urldate{#2}} + \fi}% + {\ \urldate{#2}}% } } diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls index 9a354e25c7..87f5092d4c 100644 --- a/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls +++ b/macros/latex/contrib/univie-ling/tex/univie-ling-poster.cls @@ -34,7 +34,7 @@ \NeedsTeXFormat{LaTeX2e}[2022/06/01] -\ProvidesClass{univie-ling-poster}[2024/06/27 v.2.6 Univie Ling poster class (JSp)] +\ProvidesClass{univie-ling-poster}[2024/07/23 v.2.7 Univie Ling poster class (JSp)] %% ============================================================ %% CLASS OPTIONS @@ -909,10 +909,10 @@ \NewDocumentCommand\weblink{mo}{% \url{#1}% \IfNoValueTF{#2}% - {\ifthenelse{\isempty{\wlg@urldate}}{}{% + {\ifx\wlg@urldate\empty\else% \ \urldate{\wlg@urldate}% - }}% - {\ \urldate{#2}} + \fi}% + {\ \urldate{#2}}% } } diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls index 4813af3abc..91d34276a0 100644 --- a/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls +++ b/macros/latex/contrib/univie-ling/tex/univie-ling-thesis.cls @@ -33,7 +33,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e}[2022/06/01] -\ProvidesPackage{univie-ling-thesis}[2024/06/27 v.2.6 Univie Linguistic Theses (JSp)] +\ProvidesPackage{univie-ling-thesis}[2024/07/23 v.2.7 Univie Linguistic Theses (JSp)] %% ============================================================ @@ -288,10 +288,10 @@ This includes all drawings, sketches, graphics and internet sources.} \NewDocumentCommand\weblink{mo}{% \url{#1}% \IfNoValueTF{#2}% - {\ifthenelse{\isempty{\wlg@urldate}}{}{% + {\ifx\wlg@urldate\empty\else% \ \urldate{\wlg@urldate}% - }}% - {\ \urldate{#2}} + \fi}% + {\ \urldate{#2}}% } } diff --git a/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls b/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls index e85daaabe0..00deb089cc 100644 --- a/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls +++ b/macros/latex/contrib/univie-ling/tex/univie-ling-wlg.cls @@ -34,7 +34,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e}[2022/06/01] -\ProvidesPackage{univie-ling-wlg}[2024/06/27 v.2.6 Univie WLG journal layout (JSp)] +\ProvidesPackage{univie-ling-wlg}[2024/07/23 v.2.7 Univie WLG journal layout (JSp)] %% ============================================================ @@ -225,10 +225,10 @@ \NewDocumentCommand\weblink{mo}{% \url{#1}% \IfNoValueTF{#2}% - {\ifthenelse{\isempty{\wlg@urldate}}{}{% + {\ifx\wlg@urldate\empty\else% \ \urldate{\wlg@urldate}% - }}% - {\ \urldate{#2}} + \fi}% + {\ \urldate{#2}}% } } @@ -1043,6 +1043,8 @@ \if@wlg@covington \RequirePackage{covington} \renewcommand{\p@equation}[1]{(#1)} + \setlength\reflistindent{\parindent} + \setlength\reflistparsep{0pt} \fi diff --git a/macros/latex/contrib/ut-thesis/README b/macros/latex/contrib/ut-thesis/README index 785d74c606..ed1db06b9d 100644 --- a/macros/latex/contrib/ut-thesis/README +++ b/macros/latex/contrib/ut-thesis/README @@ -5,8 +5,8 @@ as of Fall 2020: [https://www.sgs.utoronto.ca/academic-progress/program-completion/formatting] Copyright (c) 1998-2013 Francois Pitt <fpitt@cs.utoronto.ca>, - 2020-2023 Jesse Knight <jesse.knight@mail.utoronto.ca> -last updated at 13:00 (EST) on Wed 08 Feb 2023 + 2020-2024 Jesse Knight <jesse.x.knight@protonmail.com> +last updated at 09:00 (BST) on Fri 26 July 2024 This work may be distributed and/or modified under the conditions of the LaTeX Project Public Licence, either version 1.3c of this licence @@ -22,7 +22,7 @@ and is not covered by the licence. This work has the LPPL maintenance status "maintained". The Current Maintainer of this work is -Jesse Knight <jesse.knight@mail.utoronto.ca>. +Jesse Knight <jesse.x.knight@protonmail.com>. This work consists of the files: - README @@ -31,12 +31,13 @@ This work consists of the files: - ut-thesis.pdf (derived user manual) - ut-thesis.cls (derived class file) -To generate ut-thesis.cls (class file), run: pdflatex ut-thesis.ins -To generate ut-thesis.pdf (documentation), run: pdflatex ut-thesis.dtx -To use the class, make ut-thesis.cls visible to your LaTeX distribution, -by placing ut-thesis.cls either in your working directory, -or in your texmf tree, perhaps: $texmf/tex/latex/ut-thesis/ut-thesis.cls -and the documentation: $texmf/doc/latex/ut-thesis/ut-thesis.pdf +Install ut-thesis from your favourite LaTeX distribution. +Alternatively, or to use the latest version: +- generate ut-thesis.cls (class file) using: pdflatex ut-thesis.ins + and copy to: $texmf/tex/latex/ut-thesis/ut-thesis.cls +- generate ut-thesis.pdf (documentation) using: pdflatex ut-thesis.dtx + and copy to: $texmf/doc/latex/ut-thesis/ut-thesis.pdf +or simply copy ut-thesis.cls to your working directory. See version history on GitHub: -[https://github.com/jessexknight/ut-thesis]
\ No newline at end of file +[https://github.com/jessexknight/ut-thesis] diff --git a/macros/latex/contrib/ut-thesis/ut-thesis.dtx b/macros/latex/contrib/ut-thesis/ut-thesis.dtx index 873f0bd2c5..9d6a704148 100644 --- a/macros/latex/contrib/ut-thesis/ut-thesis.dtx +++ b/macros/latex/contrib/ut-thesis/ut-thesis.dtx @@ -5,7 +5,7 @@ %<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<class>\ProvidesClass{ut-thesis} %<*class> -[2023/02/08 v3.1.7 University of Toronto thesis class] +[2024/07/26 v3.1.8 University of Toronto thesis class] %</class> % %<*driver> @@ -33,15 +33,15 @@ % \GetFileInfo{ut-thesis.dtx} % % \title{The \textit{ut-thesis} class -% \thanks{\fileversion~[\filedate] CTAN repository: -% \href{https://ctan.org/pkg/ut-thesis} -% {\texttt{https://ctan.org/pkg/ut-thesis}}}} +% \thanks{\fileversion~[\filedate]\hfill +% \href{https://ctan.org/pkg/ut-thesis}{\texttt{https://ctan.org/pkg/ut-thesis}}\hfill +% \href{https://github.com/jessexknight/ut-thesis}{\texttt{github.com/jessexknight/ut-thesis}}}} % \author{ % Francois Pitt, % Jesse Knight % \thanks{maintainer, contact: -% \href{mailto:jesse.knight@mail.utoronto.ca} -% {\texttt{jesse.knight@mail.utoronto.ca}}} +% \href{mailto:jesse.x.knight@protonmail.com} +% {\texttt{jesse.x.knight@protonmail.com}}} % } % % \maketitle @@ -79,7 +79,7 @@ % % The default options produce a final copy, ready for submission to % the University of Toronto School of Graduate Studies (SGS). -% Some examples are available on +% There is some example code on % \href{https://github.com/jessexknight/ut-thesis/tree/master/test}{GitHub}. % % \subsection{Options}\label{use:opt} @@ -616,4 +616,4 @@ \setlength\belowcaptionskip{1ex} % \end{macrocode} % -\endinput
\ No newline at end of file +\endinput diff --git a/macros/latex/contrib/ut-thesis/ut-thesis.ins b/macros/latex/contrib/ut-thesis/ut-thesis.ins index db35055115..80df67d81e 100644 --- a/macros/latex/contrib/ut-thesis/ut-thesis.ins +++ b/macros/latex/contrib/ut-thesis/ut-thesis.ins @@ -11,8 +11,8 @@ as of Fall 2020: [https://www.sgs.utoronto.ca/academic-progress/program-completion/formatting] Copyright (c) 1998-2013 Francois Pitt <fpitt@cs.utoronto.ca>, - 2020-2021 Jesse Knight <jesse.knight@mail.utoronto.ca> -last updated at 23:30 (EST) on Tue 20 July 2021 + 2020-2024 Jesse Knight <jesse.x.knight@protonmail.com> +last updated at 09:00 (BST) on Fri 26 July 2024 This work may be distributed and/or modified under the conditions of the LaTeX Project Public Licence, either version 1.3c of this licence @@ -28,7 +28,7 @@ and is not covered by the licence. This work has the LPPL maintenance status "maintained". The Current Maintainer of this work is -Jesse Knight <jesse.knight@mail.utoronto.ca>. +Jesse Knight <jesse.x.knight@protonmail.com>. This work consists of the files: - README @@ -37,12 +37,13 @@ This work consists of the files: - ut-thesis.pdf (derived user manual) - ut-thesis.cls (derived class file) -To generate ut-thesis.cls (class file), run: pdflatex ut-thesis.ins -To generate ut-thesis.pdf (documentation), run: pdflatex ut-thesis.dtx -To use the class, make ut-thesis.cls visible to your LaTeX distribution, -by placing ut-thesis.cls either in your working directory, -or in your texmf tree, perhaps: $texmf/tex/latex/ut-thesis/ut-thesis.cls -and the documentation: $texmf/doc/latex/ut-thesis/ut-thesis.pdf +Install ut-thesis from your favourite LaTeX distribution. +Alternatively, or to use the latest version: +- generate ut-thesis.cls (class file) using: pdflatex ut-thesis.ins + and copy to: $texmf/tex/latex/ut-thesis/ut-thesis.cls +- generate ut-thesis.pdf (documentation) using: pdflatex ut-thesis.dtx + and copy to: $texmf/doc/latex/ut-thesis/ut-thesis.pdf +or simply copy ut-thesis.cls to your working directory. See version history on GitHub: [https://github.com/jessexknight/ut-thesis] @@ -51,4 +52,4 @@ See version history on GitHub: \generate{\file{ut-thesis.cls}{\from{ut-thesis.dtx}{class}}} -\endbatchfile
\ No newline at end of file +\endbatchfile diff --git a/macros/latex/contrib/ut-thesis/ut-thesis.pdf b/macros/latex/contrib/ut-thesis/ut-thesis.pdf Binary files differindex 8f055d54d0..fdf74d5a9a 100644 --- a/macros/latex/contrib/ut-thesis/ut-thesis.pdf +++ b/macros/latex/contrib/ut-thesis/ut-thesis.pdf diff --git a/macros/latex/required/l3kernel/CHANGELOG.md b/macros/latex/required/l3kernel/CHANGELOG.md index c58c1a6188..76ee35a0f1 100644 --- a/macros/latex/required/l3kernel/CHANGELOG.md +++ b/macros/latex/required/l3kernel/CHANGELOG.md @@ -7,6 +7,17 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2024-07-20] + +### Fixed +- Implementation of deprecated `\tl_mixed_case:n(n)` +- Redo the fix for LaTeX2e key properties (issue latex3/latex2e\#1415) + +## [2024-06-19] + +### Fixed +- Avoid a low-level error when LaTeX2e key properties are given without a value + ## [2024-05-27] ### Added @@ -1742,7 +1753,9 @@ this project uses date-based 'snapshot' version identifiers. - Step functions have been added for dim variables, e.g. `\dim_step_inline:nnnn` -[Unreleased]: https://github.com/latex3/latex3/compare/2024-05-27...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2024-07-20...HEAD +[2024-07-20]: https://github.com/latex3/latex3/compare/2024-06-19...2024-07-20 +[2024-06-19]: https://github.com/latex3/latex3/compare/2024-05-27...2024-06-19 [2024-05-27]: https://github.com/latex3/latex3/compare/2024-05-08...2024-05-27 [2024-05-08]: https://github.com/latex3/latex3/compare/2024-04-11...2024-05-08 [2024-04-11]: https://github.com/latex3/latex3/compare/2024-03-14...2024-04-11 diff --git a/macros/latex/required/l3kernel/README.md b/macros/latex/required/l3kernel/README.md index 8946af1293..0afb38a9ba 100644 --- a/macros/latex/required/l3kernel/README.md +++ b/macros/latex/required/l3kernel/README.md @@ -1,7 +1,7 @@ LaTeX3 Programming Conventions ============================== -Release 2024-05-27 +Release 2024-07-20 Overview -------- diff --git a/macros/latex/required/l3kernel/expl3.dtx b/macros/latex/required/l3kernel/expl3.dtx index 4b4e61d3c8..64c65d0ff7 100644 --- a/macros/latex/required/l3kernel/expl3.dtx +++ b/macros/latex/required/l3kernel/expl3.dtx @@ -24,7 +24,7 @@ % %<*driver|generic|package|2ekernel> %</driver|generic|package|2ekernel> -\def\ExplFileDate{2024-05-27}% +\def\ExplFileDate{2024-07-20}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/expl3.pdf b/macros/latex/required/l3kernel/expl3.pdf Binary files differindex a6eca24ce4..650e6999f9 100644 --- a/macros/latex/required/l3kernel/expl3.pdf +++ b/macros/latex/required/l3kernel/expl3.pdf diff --git a/macros/latex/required/l3kernel/interface3.pdf b/macros/latex/required/l3kernel/interface3.pdf Binary files differindex 5c72322e35..1b89f2f257 100644 --- a/macros/latex/required/l3kernel/interface3.pdf +++ b/macros/latex/required/l3kernel/interface3.pdf diff --git a/macros/latex/required/l3kernel/interface3.tex b/macros/latex/required/l3kernel/interface3.tex index 62501cfa53..0219809dab 100644 --- a/macros/latex/required/l3kernel/interface3.tex +++ b/macros/latex/required/l3kernel/interface3.tex @@ -58,7 +58,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2024-05-27} +\date{Released 2024-07-20} \pagenumbering{roman} \maketitle diff --git a/macros/latex/required/l3kernel/l3basics.dtx b/macros/latex/required/l3kernel/l3basics.dtx index 69e4441580..ad15d79653 100644 --- a/macros/latex/required/l3kernel/l3basics.dtx +++ b/macros/latex/required/l3kernel/l3basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3bitset.dtx b/macros/latex/required/l3kernel/l3bitset.dtx index 4559b56fd3..2b62c68b4a 100644 --- a/macros/latex/required/l3kernel/l3bitset.dtx +++ b/macros/latex/required/l3kernel/l3bitset.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3bootstrap.dtx b/macros/latex/required/l3kernel/l3bootstrap.dtx index 861f0bb5a6..7f4eba752b 100644 --- a/macros/latex/required/l3kernel/l3bootstrap.dtx +++ b/macros/latex/required/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3box.dtx b/macros/latex/required/l3kernel/l3box.dtx index 808d22da23..532ec6a7d8 100644 --- a/macros/latex/required/l3kernel/l3box.dtx +++ b/macros/latex/required/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -906,9 +906,9 @@ % \begin{syntax} % \cs{box_set_trim:Nnnnn} \meta{box} \Arg{left} \Arg{bottom} \Arg{right} \Arg{top} % \end{syntax} -% Adjusts the bounding box of the \meta{box} \meta{left} is removed from +% Adjusts the bounding box of the \meta{box}: \meta{left} is removed from % the left-hand edge of the bounding box, \meta{right} from the right-hand -% edge and so fourth. All adjustments are \meta{dim exprs}. +% edge, and so forth. All adjustments are \meta{dim exprs}. % Material outside of the bounding box is still displayed in the output % unless \cs{box_set_clipped:N} is subsequently applied. % The updated \meta{box} is an diff --git a/macros/latex/required/l3kernel/l3cctab.dtx b/macros/latex/required/l3kernel/l3cctab.dtx index 4bf8db41a6..92f134aa93 100644 --- a/macros/latex/required/l3kernel/l3cctab.dtx +++ b/macros/latex/required/l3kernel/l3cctab.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3clist.dtx b/macros/latex/required/l3kernel/l3clist.dtx index 5adb01cffb..f8d1eeaea8 100644 --- a/macros/latex/required/l3kernel/l3clist.dtx +++ b/macros/latex/required/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -324,8 +324,10 @@ % { % \clist_remove_all:Nn, \clist_remove_all:cn, % \clist_remove_all:NV, \clist_remove_all:cV, +% \clist_remove_all:Ne, \clist_remove_all:ce, % \clist_gremove_all:Nn, \clist_gremove_all:cn, % \clist_gremove_all:NV, \clist_gremove_all:cV +% \clist_gremove_all:Ne, \clist_gremove_all:ce % } % \begin{syntax} % \cs{clist_remove_all:Nn} \meta{clist~var} \Arg{item} @@ -1429,13 +1431,15 @@ % \begin{macro} % { % \clist_remove_all:Nn, \clist_remove_all:cn, -% \clist_remove_all:NV, \clist_remove_all:cV +% \clist_remove_all:NV, \clist_remove_all:cV, +% \clist_remove_all:Ne, \clist_remove_all:ce % } % \UnitTested % \begin{macro} % { % \clist_gremove_all:Nn, \clist_gremove_all:cn, -% \clist_gremove_all:NV, \clist_gremove_all:cV +% \clist_gremove_all:NV, \clist_gremove_all:cV, +% \clist_gremove_all:Ne, \clist_gremove_all:ce % } % \UnitTested % \begin{macro}{\@@_remove_all:NNNn} @@ -1509,8 +1513,8 @@ \cs_new:Npn \@@_remove_all: { \exp_after:wN \@@_remove_all:w \@@_tmp:w , } \cs_new:Npn \@@_remove_all:w #1 , \s_@@_mark , #2 , { \exp_not:n {#1} } -\cs_generate_variant:Nn \clist_remove_all:Nn { c , NV , cV } -\cs_generate_variant:Nn \clist_gremove_all:Nn { c , NV , cV } +\cs_generate_variant:Nn \clist_remove_all:Nn { c , NV , cV , Ne , ce } +\cs_generate_variant:Nn \clist_gremove_all:Nn { c , NV , cV , Ne , ce } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/macros/latex/required/l3kernel/l3coffins.dtx b/macros/latex/required/l3kernel/l3coffins.dtx index 62dc5f92ad..afbd1bd394 100644 --- a/macros/latex/required/l3kernel/l3coffins.dtx +++ b/macros/latex/required/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3color.dtx b/macros/latex/required/l3kernel/l3color.dtx index b56fb9e0ac..117a468d21 100644 --- a/macros/latex/required/l3kernel/l3color.dtx +++ b/macros/latex/required/l3kernel/l3color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -103,7 +103,7 @@ % \begin{itemize} % \item \texttt{Gray} Grayscale color, with a single axis running from % $0$ (fully black) to $15$ (fully white) -% \item \texttt{hsb} Hue-saturation-brightness color, with three axes,all +% \item \texttt{hsb} Hue-saturation-brightness color, with three axes, all % real values in the range $[0,1]$ for hue saturation and brightness % \item \texttt{Hsb} Hue-saturation-brightness color, with three axes, integer % in the range $[0,360]$ for hue, real values in the range $[0,1]$ for @@ -406,20 +406,20 @@ % % \begin{function}{\color_export:nnN} % \begin{syntax} -% \cs{color_export:nnN} \Arg{color expression} \Arg{format} \Arg{tl} +% \cs{color_export:nnN} \Arg{color expression} \Arg{format} \meta{tl var} % \end{syntax} % Parses the \meta{color expression} as described earlier, % then converts to the \meta{format} specified and assigns the data to the -% \meta{tl}. +% \meta{tl var}. % \end{function} % % \begin{function}{\color_export:nnnN} % \begin{syntax} -% \cs{color_export:nnnN} \Arg{model} \Arg{value(s)} \Arg{format} \Arg{tl} +% \cs{color_export:nnnN} \Arg{model} \Arg{value(s)} \Arg{format} \meta{tl var} % \end{syntax} % Expresses the combination of \meta{model} and \meta{value(s)} in an % internal representation, then converts to the \meta{format} specified and -% assigns the data to the \meta{tl}. +% assigns the data to the \meta{tl var}. % \end{function} % % \section{Creating new color models} @@ -495,7 +495,7 @@ % % Color profiles are used to ensure color accuracy by linking to collaboration. % Applying a profile can be used to standardise color which is otherwise -% device-dependence. +% device-dependent. % % \begin{function}[added = 2021-02-23]{\color_profile_apply:nn} % \begin{syntax} @@ -697,14 +697,14 @@ % \begin{macro}{\@@_convert:nnnN, \@@_convert:nVnN, \@@_convert:nnVN} % \begin{macro}[EXP] % { -% \@@_convert_gray_gray:w -% \@@_convert_gray_rgb:w -% \@@_convert_gray_cmyk:w -% \@@_convert_cmyk_gray:w -% \@@_convert_cmyk_rgb:w -% \@@_convert_cmyk_cmyk:w -% \@@_convert_rgb_gray:w -% \@@_convert_rgb_rgb:w +% \@@_convert_gray_gray:w, +% \@@_convert_gray_rgb:w, +% \@@_convert_gray_cmyk:w, +% \@@_convert_cmyk_gray:w, +% \@@_convert_cmyk_rgb:w, +% \@@_convert_cmyk_cmyk:w, +% \@@_convert_rgb_gray:w, +% \@@_convert_rgb_rgb:w, % \@@_convert_rgb_cmyk:w % } % \begin{macro}[EXP]{\@@_convert_rgb_cmyk:nnn} diff --git a/macros/latex/required/l3kernel/l3debug.dtx b/macros/latex/required/l3kernel/l3debug.dtx index 21e6747a84..4e578ee9b6 100644 --- a/macros/latex/required/l3kernel/l3debug.dtx +++ b/macros/latex/required/l3kernel/l3debug.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -69,7 +69,7 @@ % % Standard file identification. % \begin{macrocode} -\ProvidesExplFile{l3debug.def}{2024-05-27}{}{L3 Debugging support} +\ProvidesExplFile{l3debug.def}{2024-07-20}{}{L3 Debugging support} % \end{macrocode} % % \begin{variable}{\s_@@_stop} diff --git a/macros/latex/required/l3kernel/l3deprecation.dtx b/macros/latex/required/l3kernel/l3deprecation.dtx index 5852205ddc..697f235311 100644 --- a/macros/latex/required/l3kernel/l3deprecation.dtx +++ b/macros/latex/required/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -505,10 +505,10 @@ { \text_uppercase:nn {#1} {#2} } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:n } \cs_new:Npn \tl_mixed_case:n #1 - { \text_titlecase_first:n {#1} } + { \text_titlecase_first:n { \text_lowercase:n {#1} } } \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:nn } \cs_new:Npn \tl_mixed_case:nn #1#2 - { \text_titlecase_first:nn {#1} {#2} } + { \text_titlecase_first:nn {#1} { \text_lowercase:n {#2} } } % \end{macrocode} % \end{macro} % @@ -571,7 +571,7 @@ % \char_lower_case:N, \char_upper_case:N, % \char_mixed_case:Nn, \char_fold_case:N, % \char_str_lower_case:N, \char_str_upper_case:N, -% \char_str_mixed_case:Nn, \char_str_fold_case:N, +% \char_str_mixed_case:N, \char_str_fold_case:N, % } % \begin{macrocode} \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_lowercase:n } diff --git a/macros/latex/required/l3kernel/l3doc.dtx b/macros/latex/required/l3kernel/l3doc.dtx index 43b719ce59..751d4f4e14 100644 --- a/macros/latex/required/l3kernel/l3doc.dtx +++ b/macros/latex/required/l3kernel/l3doc.dtx @@ -71,7 +71,7 @@ and all files in that bundle must be distributed together. % This isn't included in the typeset documentation because it's a bit % ugly: %<*class> -\ProvidesExplClass{l3doc}{2024-05-27}{} +\ProvidesExplClass{l3doc}{2024-07-20}{} {L3 Experimental documentation class} %</class> % \fi @@ -84,7 +84,7 @@ and all files in that bundle must be distributed together. % require you to do updates, if the class changes.}} % % \author{\Team} -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % \maketitle % \tableofcontents % diff --git a/macros/latex/required/l3kernel/l3doc.pdf b/macros/latex/required/l3kernel/l3doc.pdf Binary files differindex 42960f5e6f..0d5a3494c0 100644 --- a/macros/latex/required/l3kernel/l3doc.pdf +++ b/macros/latex/required/l3kernel/l3doc.pdf diff --git a/macros/latex/required/l3kernel/l3docstrip.dtx b/macros/latex/required/l3kernel/l3docstrip.dtx index fecb228324..199801ff3b 100644 --- a/macros/latex/required/l3kernel/l3docstrip.dtx +++ b/macros/latex/required/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3docstrip.pdf b/macros/latex/required/l3kernel/l3docstrip.pdf Binary files differindex efc8882c36..07f24848e3 100644 --- a/macros/latex/required/l3kernel/l3docstrip.pdf +++ b/macros/latex/required/l3kernel/l3docstrip.pdf diff --git a/macros/latex/required/l3kernel/l3expan.dtx b/macros/latex/required/l3kernel/l3expan.dtx index d13578bde1..499c94587e 100644 --- a/macros/latex/required/l3kernel/l3expan.dtx +++ b/macros/latex/required/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3file.dtx b/macros/latex/required/l3kernel/l3file.dtx index 546222711e..039c4eecb8 100644 --- a/macros/latex/required/l3kernel/l3file.dtx +++ b/macros/latex/required/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3flag.dtx b/macros/latex/required/l3kernel/l3flag.dtx index 88e726df35..690347426f 100644 --- a/macros/latex/required/l3kernel/l3flag.dtx +++ b/macros/latex/required/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-assign.dtx b/macros/latex/required/l3kernel/l3fp-assign.dtx index e6fa97423e..e1b3bc788b 100644 --- a/macros/latex/required/l3kernel/l3fp-assign.dtx +++ b/macros/latex/required/l3kernel/l3fp-assign.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % \maketitle % % \begin{documentation} diff --git a/macros/latex/required/l3kernel/l3fp-aux.dtx b/macros/latex/required/l3kernel/l3fp-aux.dtx index 1ad33e235e..4c39e81f46 100644 --- a/macros/latex/required/l3kernel/l3fp-aux.dtx +++ b/macros/latex/required/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-basics.dtx b/macros/latex/required/l3kernel/l3fp-basics.dtx index e2d93219b0..a93ff90291 100644 --- a/macros/latex/required/l3kernel/l3fp-basics.dtx +++ b/macros/latex/required/l3kernel/l3fp-basics.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-convert.dtx b/macros/latex/required/l3kernel/l3fp-convert.dtx index 4983a3dd1f..9b5b66f815 100644 --- a/macros/latex/required/l3kernel/l3fp-convert.dtx +++ b/macros/latex/required/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-expo.dtx b/macros/latex/required/l3kernel/l3fp-expo.dtx index 7577f640d4..e9dcdf6646 100644 --- a/macros/latex/required/l3kernel/l3fp-expo.dtx +++ b/macros/latex/required/l3kernel/l3fp-expo.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-extended.dtx b/macros/latex/required/l3kernel/l3fp-extended.dtx index 596dc86ef2..24f1e5c127 100644 --- a/macros/latex/required/l3kernel/l3fp-extended.dtx +++ b/macros/latex/required/l3kernel/l3fp-extended.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-functions.dtx b/macros/latex/required/l3kernel/l3fp-functions.dtx index b9e269b988..2c5eb9602f 100644 --- a/macros/latex/required/l3kernel/l3fp-functions.dtx +++ b/macros/latex/required/l3kernel/l3fp-functions.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-logic.dtx b/macros/latex/required/l3kernel/l3fp-logic.dtx index 486a3bc579..9d39f4f67e 100644 --- a/macros/latex/required/l3kernel/l3fp-logic.dtx +++ b/macros/latex/required/l3kernel/l3fp-logic.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-parse.dtx b/macros/latex/required/l3kernel/l3fp-parse.dtx index 7853c40132..191ab2755c 100644 --- a/macros/latex/required/l3kernel/l3fp-parse.dtx +++ b/macros/latex/required/l3kernel/l3fp-parse.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-random.dtx b/macros/latex/required/l3kernel/l3fp-random.dtx index ff999926ab..dd40704719 100644 --- a/macros/latex/required/l3kernel/l3fp-random.dtx +++ b/macros/latex/required/l3kernel/l3fp-random.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-round.dtx b/macros/latex/required/l3kernel/l3fp-round.dtx index 0d39b8a26a..ad20934215 100644 --- a/macros/latex/required/l3kernel/l3fp-round.dtx +++ b/macros/latex/required/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-symbolic.dtx b/macros/latex/required/l3kernel/l3fp-symbolic.dtx index 88e214f49e..8223419f66 100644 --- a/macros/latex/required/l3kernel/l3fp-symbolic.dtx +++ b/macros/latex/required/l3kernel/l3fp-symbolic.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-traps.dtx b/macros/latex/required/l3kernel/l3fp-traps.dtx index fec48bc163..7f22a2d137 100644 --- a/macros/latex/required/l3kernel/l3fp-traps.dtx +++ b/macros/latex/required/l3kernel/l3fp-traps.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % \maketitle % % \begin{documentation} diff --git a/macros/latex/required/l3kernel/l3fp-trig.dtx b/macros/latex/required/l3kernel/l3fp-trig.dtx index 7c40c6198f..b7b67c9445 100644 --- a/macros/latex/required/l3kernel/l3fp-trig.dtx +++ b/macros/latex/required/l3kernel/l3fp-trig.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp-types.dtx b/macros/latex/required/l3kernel/l3fp-types.dtx index e9269e1f03..d969f76bdc 100644 --- a/macros/latex/required/l3kernel/l3fp-types.dtx +++ b/macros/latex/required/l3kernel/l3fp-types.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3fp.dtx b/macros/latex/required/l3kernel/l3fp.dtx index d273b057ea..8e37a55799 100644 --- a/macros/latex/required/l3kernel/l3fp.dtx +++ b/macros/latex/required/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -773,7 +773,7 @@ % The result may contain other functions, which are % then replaced by their results if they have any. For instance, % \begin{quote} -% \cs{fp_new_function:n} |{ foo }| \\ +% \cs{fp_new_function:n} |{ npow }| \\ % \cs{fp_set_function:nnn} |{ npow } { a,b } { a**b }| \\ % \cs{fp_show:n} |{ npow(16,0.25) } }| % \end{quote} diff --git a/macros/latex/required/l3kernel/l3fparray.dtx b/macros/latex/required/l3kernel/l3fparray.dtx index f48de27af3..9592671ae3 100644 --- a/macros/latex/required/l3kernel/l3fparray.dtx +++ b/macros/latex/required/l3kernel/l3fparray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3int.dtx b/macros/latex/required/l3kernel/l3int.dtx index 45050964de..4b0d251cab 100644 --- a/macros/latex/required/l3kernel/l3int.dtx +++ b/macros/latex/required/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -100,21 +100,6 @@ % restricted-expandable functions can both be used, and \cs{exp_not:n} % and its variants have no effect while \cs{exp_not:N} may incorrectly % interrupt the expression. -% \begin{texnote} -% Exactly two expansions are needed to evaluate \cs{int_eval:n}. -% The result is \emph{not} an \meta{internal integer}, and therefore -% should be terminated by a space if used in \cs{int_value:w} or in -% a \TeX{}-style integer assignment. -% -% As all \TeX{} integers, integer operands can also be: -% \tn{value}\Arg{\LaTeXe{} counter}; dimension or skip variables, -% converted to integers in~\texttt{sp}; the character code of some -% character given as \texttt{`}\meta{char} or -% \texttt{`\textbackslash}\meta{char}; octal numbers given as -% \texttt{'} followed by digits from \texttt{0} to \texttt{7}; or -% hexadecimal numbers given as |"| followed by digits and upper case -% letters from \texttt{A} to~\texttt{F}. -% \end{texnote} % % \begin{function}[EXP]{\int_eval:n} % \begin{syntax} diff --git a/macros/latex/required/l3kernel/l3intarray.dtx b/macros/latex/required/l3kernel/l3intarray.dtx index aa49275e78..4be0ca6be6 100644 --- a/macros/latex/required/l3kernel/l3intarray.dtx +++ b/macros/latex/required/l3kernel/l3intarray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3kernel-functions.dtx b/macros/latex/required/l3kernel/l3kernel-functions.dtx index c3bb838acf..5d5758a6af 100644 --- a/macros/latex/required/l3kernel/l3kernel-functions.dtx +++ b/macros/latex/required/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3keys.dtx b/macros/latex/required/l3kernel/l3keys.dtx index 13772d1781..db580c525c 100644 --- a/macros/latex/required/l3kernel/l3keys.dtx +++ b/macros/latex/required/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -649,15 +649,13 @@ % { key } % Name of choice key % { choice-a , choice-b , choice-c } % Valid choices % { \exp_not:n {#1} } % Invalid choice given -% % -% % % } % \end{verbatim} % % Multiple choices are created in a very similar manner to mutually-exclusive % choices, using the properties \texttt{.multichoice:} and % \texttt{.multichoices:nn}. As with mutually exclusive choices, multiple -% choices are define as sub-keys. Thus both +% choices are defined as sub-keys. Thus both % \begin{verbatim} % \keys_define:nn { mymodule } % { @@ -1926,19 +1924,21 @@ % \end{macro} % % \begin{macro}{\@@_define_code:n} +% \begin{macro}[EXP]{\@@_define_code:nnn} % \begin{macro}[EXP]{\@@_define_code:w} % Two possible cases. If there is a value for the key, then just use % the function. If not, then a check to make sure there is no need for % a value with the property. If there should be one then complain, -% otherwise execute it. There is no need to check for a |:| as if it -% was missing the earlier tests would have failed. +% otherwise execute it. For a \LaTeXe{} property like |.code| which +% doesn't contain a |:|, treat it as having arity 1 and pass the +% (empty) value to it. % \begin{macrocode} \cs_new_protected:Npn \@@_define_code:n #1 { \bool_if:NTF \l_@@_no_value_bool { - \exp_after:wN \@@_define_code:w - \l_@@_property_str \s_@@_stop + \@@_define_code:nnn + { \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} } { \use:c { \c_@@_props_root_str \l_@@_property_str } } { \msg_error:nnee { keys } { property-requires-value } @@ -1947,12 +1947,31 @@ } { \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} } } -\exp_last_unbraced:NNNNo - \cs_new:Npn \@@_define_code:w #1 \c_colon_str #2 \s_@@_stop - { \tl_if_empty:nTF {#2} } +\cs_new:Npe \@@_define_code:nnn + { + \exp_not:N \exp_after:wN \exp_not:N \@@_define_code:w + \exp_not:N \l_@@_property_str + \c_colon_str \c_colon_str + \exp_not:N \s_@@_stop + } +\use:e + { + \cs_new:Npn \exp_not:N \@@_define_code:w + #1 \c_colon_str #2 \c_colon_str #3 \exp_not:N \s_@@_stop + } + { + \tl_if_empty:nTF {#3} + { \use_i:nnn } + { + \tl_if_empty:nTF {#2} + { \use_ii:nnn } + { \use_iii:nnn } + } + } % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} % % \subsection{Turning properties into actions} % diff --git a/macros/latex/required/l3kernel/l3legacy.dtx b/macros/latex/required/l3kernel/l3legacy.dtx index 4cfce5c5f1..b5ef896827 100644 --- a/macros/latex/required/l3kernel/l3legacy.dtx +++ b/macros/latex/required/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3luatex.dtx b/macros/latex/required/l3kernel/l3luatex.dtx index eb10d5aecc..aa7724a8ce 100644 --- a/macros/latex/required/l3kernel/l3luatex.dtx +++ b/macros/latex/required/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3msg.dtx b/macros/latex/required/l3kernel/l3msg.dtx index e901b07c06..66e7ac8282 100644 --- a/macros/latex/required/l3kernel/l3msg.dtx +++ b/macros/latex/required/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3names.dtx b/macros/latex/required/l3kernel/l3names.dtx index 5cdd1361e3..1cb0d132ae 100644 --- a/macros/latex/required/l3kernel/l3names.dtx +++ b/macros/latex/required/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3news.pdf b/macros/latex/required/l3kernel/l3news.pdf Binary files differindex 4b57ef41c8..eb4c42d8c5 100644 --- a/macros/latex/required/l3kernel/l3news.pdf +++ b/macros/latex/required/l3kernel/l3news.pdf diff --git a/macros/latex/required/l3kernel/l3news01.pdf b/macros/latex/required/l3kernel/l3news01.pdf Binary files differindex b5f45059d3..21997cf980 100644 --- a/macros/latex/required/l3kernel/l3news01.pdf +++ b/macros/latex/required/l3kernel/l3news01.pdf diff --git a/macros/latex/required/l3kernel/l3news02.pdf b/macros/latex/required/l3kernel/l3news02.pdf Binary files differindex 0ee8ffaf96..db1ac5b85b 100644 --- a/macros/latex/required/l3kernel/l3news02.pdf +++ b/macros/latex/required/l3kernel/l3news02.pdf diff --git a/macros/latex/required/l3kernel/l3news03.pdf b/macros/latex/required/l3kernel/l3news03.pdf Binary files differindex fef9bf3a7b..6630201b1f 100644 --- a/macros/latex/required/l3kernel/l3news03.pdf +++ b/macros/latex/required/l3kernel/l3news03.pdf diff --git a/macros/latex/required/l3kernel/l3news04.pdf b/macros/latex/required/l3kernel/l3news04.pdf Binary files differindex 0afbb9591e..c74f9f0a7c 100644 --- a/macros/latex/required/l3kernel/l3news04.pdf +++ b/macros/latex/required/l3kernel/l3news04.pdf diff --git a/macros/latex/required/l3kernel/l3news05.pdf b/macros/latex/required/l3kernel/l3news05.pdf Binary files differindex 0a44ce6811..18d4df3290 100644 --- a/macros/latex/required/l3kernel/l3news05.pdf +++ b/macros/latex/required/l3kernel/l3news05.pdf diff --git a/macros/latex/required/l3kernel/l3news06.pdf b/macros/latex/required/l3kernel/l3news06.pdf Binary files differindex 10cec7c17f..643b8f1f68 100644 --- a/macros/latex/required/l3kernel/l3news06.pdf +++ b/macros/latex/required/l3kernel/l3news06.pdf diff --git a/macros/latex/required/l3kernel/l3news07.pdf b/macros/latex/required/l3kernel/l3news07.pdf Binary files differindex 6bfbab4d96..b457fd6033 100644 --- a/macros/latex/required/l3kernel/l3news07.pdf +++ b/macros/latex/required/l3kernel/l3news07.pdf diff --git a/macros/latex/required/l3kernel/l3news08.pdf b/macros/latex/required/l3kernel/l3news08.pdf Binary files differindex a0130195cc..a5b4744d28 100644 --- a/macros/latex/required/l3kernel/l3news08.pdf +++ b/macros/latex/required/l3kernel/l3news08.pdf diff --git a/macros/latex/required/l3kernel/l3news09.pdf b/macros/latex/required/l3kernel/l3news09.pdf Binary files differindex 3616cc20ca..a2242937d2 100644 --- a/macros/latex/required/l3kernel/l3news09.pdf +++ b/macros/latex/required/l3kernel/l3news09.pdf diff --git a/macros/latex/required/l3kernel/l3news10.pdf b/macros/latex/required/l3kernel/l3news10.pdf Binary files differindex 00ec553d1c..1775167008 100644 --- a/macros/latex/required/l3kernel/l3news10.pdf +++ b/macros/latex/required/l3kernel/l3news10.pdf diff --git a/macros/latex/required/l3kernel/l3news11.pdf b/macros/latex/required/l3kernel/l3news11.pdf Binary files differindex 59a672d339..8e14906f03 100644 --- a/macros/latex/required/l3kernel/l3news11.pdf +++ b/macros/latex/required/l3kernel/l3news11.pdf diff --git a/macros/latex/required/l3kernel/l3news12.pdf b/macros/latex/required/l3kernel/l3news12.pdf Binary files differindex 9c4f937b00..15a8332f07 100644 --- a/macros/latex/required/l3kernel/l3news12.pdf +++ b/macros/latex/required/l3kernel/l3news12.pdf diff --git a/macros/latex/required/l3kernel/l3pdf.dtx b/macros/latex/required/l3kernel/l3pdf.dtx index 55f49476e3..34118c371a 100644 --- a/macros/latex/required/l3kernel/l3pdf.dtx +++ b/macros/latex/required/l3kernel/l3pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -70,8 +70,8 @@ % \cs{pdf_object_write:nnn} \Arg{object} \Arg{type} \Arg{content} % \end{syntax} % Writes the \meta{content} as content of the \meta{object}. Depending on the -% \meta{type} declared for the object, the format required for the -% \meta{data} will vary +% \meta{type} declared for the object, the format required for +% \meta{content} will vary: % \begin{itemize} % \item[\texttt{array}] A space-separated list of values % \item[\texttt{dict}] Key--value pairs in the form @@ -159,7 +159,7 @@ % \cs{pdf_object_unnamed_write:nn} \Arg{type} \Arg{content} % \end{syntax} % Writes the \meta{content} as content of an anonymous object. Depending on the -% \meta{type}, the format required for the \meta{data} will vary +% \meta{type}, the format required for \meta{content} will vary: % \begin{itemize} % \item[\texttt{array}] A space-separated list of values % \item[\texttt{dict}] Key--value pairs in the form @@ -251,9 +251,9 @@ % % \section{Destinations} % -% Destinations are the places a link jumped too. -% Unlike the name may suggest they don't described -% an exact location in the PDF. Instead a destination contains a reference to +% Destinations are the places a link jumped to. +% Unlike the name may suggest, they don't describe +% an exact location in the PDF. Instead, a destination contains a reference to % a page along with an instruction how to display this page. % The normally used \enquote{XYZ \textit{top left zoom}} for example instructs % the viewer to show the page with the given \textit{zoom} and diff --git a/macros/latex/required/l3kernel/l3prefixes.csv b/macros/latex/required/l3kernel/l3prefixes.csv index e85412b9d8..339f6625fd 100644 --- a/macros/latex/required/l3kernel/l3prefixes.csv +++ b/macros/latex/required/l3kernel/l3prefixes.csv @@ -26,6 +26,7 @@ block,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https: bool,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, box,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, bxjh,BXjaholiday,Takuto Asakura,https://github.com/wtsnjp/BXjaholiday,https://github.com/wtsnjp/BXjaholiday.git,https://github.com/wtsnjp/BXjaholiday/issues,2018-02-02,2019-02-02, +cal,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18, cascade,cascade,F. Pantigny,,,,2020-07-21,2020-07-21, catcode,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, cctab,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28, @@ -135,6 +136,7 @@ keys,"l3kernel,l3keys2e,ltkeys",The LaTeX Project,https://www.latex-project.org/ keyval,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, kgl,kantlipsum,Enrico Gregorio,,,,2013-03-16,2013-03-16, kivitendo,"kiviletter, kivitables",Marei Peischl for Kivitendo,https://www.kivitendo.de/,https://github.com/kivitendo/kivitendo-erp,https://forum.kivitendo.de/,2021-05-28,2021-05-28, +knot,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18, langsci,langscibook,Language Science Press,https://langsci-press.org,https://github.com/langsci/langscibook,https://github.com/langsci/langscibook/issues,2021-07-20,2021-07-21, left,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, liftarm,liftarm,Matthias Floré,,,,2024-05-25,2024-05-25, @@ -210,6 +212,7 @@ property,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,htt pseudo,pseudo,Magnus Lie Hetland,https://github.com/mlhetland/pseudo.sty,https://github.com/mlhetland/pseudo.sty.git,https://github.com/mlhetland/pseudo.sty/issues,2019-06-24,2019-06-24, ptex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28, ptxcd,ptxcd,Marei Peischl,,,,2020-07-27,2020-07-27,Used for specific corporate design templates +ptxtools,"depp, ptxtools",Marei Peischl,https://gitlab.com/islandoftex/texmf/depp,https://gitlab.com/islandoftex/texmf/depp.git,https://gitlab.com/islandoftex/texmf/depp,2024-07-09,2024-07-09, qrbill,qrbill,Marei Peischl,https://github.com/peiTeX/qrbill,https://github.com/peiTeX/qrbill.git,https://github.com/peiTeX/qrbill/issues,2020-06-27,2020-06-27, quark,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, rainbow,beamertheme-rainbow,samcarter,https://github.com/samcarter/beamertheme-rainbow,https://github.com/samcarter/beamertheme-rainbow,https://github.com/samcarter/beamertheme-rainbow/issues,2023-07-04,2023-07-04, @@ -239,6 +242,7 @@ slcd,se2thesis,Stephan Lukasczyk,https://github.com/se2p/se2thesis,https://githu socket,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2023-10-17,2023-10-17, sort,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2017-02-13, space,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, +spath,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18, starray,starray,Alceu Frigeri,https://github.com/alceu-frigeri/starray,https://github.com/alceu-frigeri/starray,https://github.com/alceu-frigeri/starray/issues,2023-05-15,2023-05-15, statistics,statistics,Julien Rivaud,https://gitlab.com/frnchfrgg-latex/statistics,https://gitlab.com/frnchfrgg-latex/statistics.git,https://gitlab.com/frnchfrgg-latex/statistics/issues,2018-06-25,2018-06-25, stm,lt3-stm,CV Radhakrishnan,http://www.cvr.cc/,,,2014-02-26,2014-02-26, @@ -258,6 +262,7 @@ tex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https:/ text,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-01-15,2020-01-15, tikzfill,tikzfill,Thomas F. Sturm,https://github.com/T-F-S/tikzfill,https://github.com/T-F-S/tikzfill.git,https://github.com/T-F-S/tikzfill/issues,2022-07-19,2022-07-19, tikzlings,tikzlings,samcarter,https://github.com/samcarter/tikzlings,git@github.com:samcarter/tikzlings.git,https://github.com/samcarter/tikzlings/issues,2023-02-17,2023-02-17, +tikzspath,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18, tikzsymbols,tikzsymbols,Ben Vitecek,https://github.com/Vidabe/tikzsymbols,https://github.com/Vidabe/tikzsymbols.git,https://github.com/Vidabe/tikzsymbols/issues,2018-09-26,2018-09-26, tilde,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, tl,"l3kernel,l3tl-build",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, @@ -288,6 +293,7 @@ xmarks,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https xparse,xparse,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, xpatch,"regexpatch,xpatch",Enrico Gregorio,,,,2013-03-16,2013-03-16, xpeek,xpeek,Joel C. Salomon,,,,2013-03-16,2013-03-16, +xpg,polyglossia,Jürgen Spitzmüller,https://github.com/reutenauer/polyglossia/,https://github.com/reutenauer/polyglossia/,https://github.com/reutenauer/polyglossia/issues,2024-07-02,2024-07-02, xpinyin,xpinyin,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-03-16,2013-05-26, xsb,xsavebox,Alexander Grahn,,https://gitlab.com/agrahn/xsavebox,https://gitlab.com/agrahn/xsavebox/issues,2016-02-26,2020-04-15, xsim,xsim,Clemens Niederberger,https://github.com/cgnieder/xsim/,https://github.com/cgnieder/xsim.git,https://github.com/cgnieder/xsim/issues,2020-04-14,2020-04-14, @@ -299,4 +305,5 @@ zhnum,zhnumber,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/ zrefcheck,zref-check,gusbrs,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check/issues,2021-08-05,2021-08-05, zrefclever,zref-clever,gusbrs,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever/issues,2021-11-29,2021-11-29, zrefvario,zref-vario,gusbrs,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario/issues,2022-02-02,2022-02-02, +zugferd,zugferd,Marei Peischl,https://github.com/TeXhackse/LaTeX-ZUGFeRD,https://github.com/TeXhackse/LaTeX-ZUGFeRD.git,https://github.com/TeXhackse/LaTeX-ZUGFeRD/issues,2024-07-09,2024-07-09, zxjt,zxjatype,Takayuki Yato,,,,2013-03-16,2013-03-16, diff --git a/macros/latex/required/l3kernel/l3prefixes.pdf b/macros/latex/required/l3kernel/l3prefixes.pdf Binary files differindex 602ccaaa59..ab4d18e916 100644 --- a/macros/latex/required/l3kernel/l3prefixes.pdf +++ b/macros/latex/required/l3kernel/l3prefixes.pdf diff --git a/macros/latex/required/l3kernel/l3prg.dtx b/macros/latex/required/l3kernel/l3prg.dtx index bec4e3a712..ac6131d6ff 100644 --- a/macros/latex/required/l3kernel/l3prg.dtx +++ b/macros/latex/required/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3prop.dtx b/macros/latex/required/l3kernel/l3prop.dtx index 21b8d03dd6..fd0d8e167d 100644 --- a/macros/latex/required/l3kernel/l3prop.dtx +++ b/macros/latex/required/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -181,11 +181,11 @@ % \prop_gset_from_keyval:Nn, \prop_gset_from_keyval:cn, % } % \begin{syntax} -% \cs{prop_set_from_keyval:Nn} \meta{property list} -% \{ -% \meta{key1} |=| \meta{value1} |,| -% \meta{key2} |=| \meta{value2} |,| \ldots{} -% \} +% \cs{prop_set_from_keyval:Nn} \meta{property list} \\ +% ~~\{ \\ +% ~~~~\meta{key1} |=| \meta{value1} |,| \\ +% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\ +% ~~\} % \end{syntax} % Sets \meta{property list} to contain key--value pairs given in the second % argument. If duplicate keys appear only the last of the values is kept. @@ -205,11 +205,11 @@ % \begin{function}[added = 2017-11-28, updated = 2021-11-07] % {\prop_const_from_keyval:Nn, \prop_const_from_keyval:cn} % \begin{syntax} -% \cs{prop_const_from_keyval:Nn} \meta{property list} -% \{ -% \meta{key1} |=| \meta{value1} |,| -% \meta{key2} |=| \meta{value2} |,| \ldots{} -% \} +% \cs{prop_const_from_keyval:Nn} \meta{property list} \\ +% ~~\{ \\ +% ~~~~\meta{key1} |=| \meta{value1} |,| \\ +% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\ +% ~~\} % \end{syntax} % Creates a new constant \enquote{flat} \meta{property list} or raises % an error if the @@ -224,11 +224,11 @@ % \begin{function}[added = 2024-02-12] % {\prop_const_linked_from_keyval:Nn, \prop_const_linked_from_keyval:cn} % \begin{syntax} -% \cs{prop_const_linked_from_keyval:Nn} \meta{prop~var} -% \{ -% \meta{key1} |=| \meta{value1} |,| -% \meta{key2} |=| \meta{value2} |,| \ldots{} -% \} +% \cs{prop_const_linked_from_keyval:Nn} \meta{prop~var} \\ +% ~~\{ \\ +% ~~~~\meta{key1} |=| \meta{value1} |,| \\ +% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\ +% ~~\} % \end{syntax} % Creates a new constant \enquote{linked} \meta{prop~var} or raises an % error if the @@ -347,11 +347,11 @@ % \prop_gput_from_keyval:Nn, \prop_gput_from_keyval:cn, % } % \begin{syntax} -% \cs{prop_put_from_keyval:Nn} \meta{property list} -% \{ -% \meta{key1} |=| \meta{value1} |,| -% \meta{key2} |=| \meta{value2} |,| \ldots{} -% \} +% \cs{prop_put_from_keyval:Nn} \meta{property list} \\ +% ~~\{ \\ +% ~~~~\meta{key1} |=| \meta{value1} |,| \\ +% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\ +% ~~\} % \end{syntax} % Updates the \meta{property list} by adding entries for each key--value % pair given in the second argument. The addition is done through diff --git a/macros/latex/required/l3kernel/l3quark.dtx b/macros/latex/required/l3kernel/l3quark.dtx index 136596a3fe..ad78a12bd2 100644 --- a/macros/latex/required/l3kernel/l3quark.dtx +++ b/macros/latex/required/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3regex.dtx b/macros/latex/required/l3kernel/l3regex.dtx index 6ca9c8eeed..c3d5de27cb 100644 --- a/macros/latex/required/l3kernel/l3regex.dtx +++ b/macros/latex/required/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3seq.dtx b/macros/latex/required/l3kernel/l3seq.dtx index 38fc9471a9..413e20f8ca 100644 --- a/macros/latex/required/l3kernel/l3seq.dtx +++ b/macros/latex/required/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3skip.dtx b/macros/latex/required/l3kernel/l3skip.dtx index 6e96b41326..9bea4c7b14 100644 --- a/macros/latex/required/l3kernel/l3skip.dtx +++ b/macros/latex/required/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3sort.dtx b/macros/latex/required/l3kernel/l3sort.dtx index 47cebcad25..a86f916d24 100644 --- a/macros/latex/required/l3kernel/l3sort.dtx +++ b/macros/latex/required/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3str-convert.dtx b/macros/latex/required/l3kernel/l3str-convert.dtx index baf705fe0c..4061895896 100644 --- a/macros/latex/required/l3kernel/l3str-convert.dtx +++ b/macros/latex/required/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3str.dtx b/macros/latex/required/l3kernel/l3str.dtx index f4f7b94b88..2be2b105ce 100644 --- a/macros/latex/required/l3kernel/l3str.dtx +++ b/macros/latex/required/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -757,7 +757,7 @@ % \item Case changing text for typesetting: see the % \cs[index=text_lowercase:n]{text_lowercase:n(n)}, % \cs[index=text_uppercase:n]{text_uppercase:n(n)} and -% \cs[index=text_titlecase_all:n]{text_titlecase_(all|once):n(n)} functions which +% \cs[index=text_titlecase_all:n]{text_titlecase_(all|first):n(n)} functions which % correctly deal with context-dependence and other factors appropriate % to text case changing. % \end{itemize} diff --git a/macros/latex/required/l3kernel/l3styleguide.pdf b/macros/latex/required/l3kernel/l3styleguide.pdf Binary files differindex 0113bac571..31ff7889ff 100644 --- a/macros/latex/required/l3kernel/l3styleguide.pdf +++ b/macros/latex/required/l3kernel/l3styleguide.pdf diff --git a/macros/latex/required/l3kernel/l3styleguide.tex b/macros/latex/required/l3kernel/l3styleguide.tex index bcea3de06e..985f20a68c 100644 --- a/macros/latex/required/l3kernel/l3styleguide.tex +++ b/macros/latex/required/l3kernel/l3styleguide.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2024-05-27} +\date{Released 2024-07-20} \begin{document} diff --git a/macros/latex/required/l3kernel/l3syntax-changes.pdf b/macros/latex/required/l3kernel/l3syntax-changes.pdf Binary files differindex 99e93c2ccc..515a9eb803 100644 --- a/macros/latex/required/l3kernel/l3syntax-changes.pdf +++ b/macros/latex/required/l3kernel/l3syntax-changes.pdf diff --git a/macros/latex/required/l3kernel/l3syntax-changes.tex b/macros/latex/required/l3kernel/l3syntax-changes.tex index 30d8d47747..b9ffcb011a 100644 --- a/macros/latex/required/l3kernel/l3syntax-changes.tex +++ b/macros/latex/required/l3kernel/l3syntax-changes.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2024-05-27} +\date{Released 2024-07-20} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/required/l3kernel/l3sys.dtx b/macros/latex/required/l3kernel/l3sys.dtx index b2228c7fd9..1db09f9550 100644 --- a/macros/latex/required/l3kernel/l3sys.dtx +++ b/macros/latex/required/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3term-glossary.pdf b/macros/latex/required/l3kernel/l3term-glossary.pdf Binary files differindex 01598ca79a..d1a2058e9f 100644 --- a/macros/latex/required/l3kernel/l3term-glossary.pdf +++ b/macros/latex/required/l3kernel/l3term-glossary.pdf diff --git a/macros/latex/required/l3kernel/l3term-glossary.tex b/macros/latex/required/l3kernel/l3term-glossary.tex index 141749aa6b..fca2886337 100644 --- a/macros/latex/required/l3kernel/l3term-glossary.tex +++ b/macros/latex/required/l3kernel/l3term-glossary.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2024-05-27} +\date{Released 2024-07-20} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/required/l3kernel/l3text-case.dtx b/macros/latex/required/l3kernel/l3text-case.dtx index 89cdb9e2b1..134e2508b7 100644 --- a/macros/latex/required/l3kernel/l3text-case.dtx +++ b/macros/latex/required/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3text-map.dtx b/macros/latex/required/l3kernel/l3text-map.dtx index 3573002244..e3586164c5 100644 --- a/macros/latex/required/l3kernel/l3text-map.dtx +++ b/macros/latex/required/l3kernel/l3text-map.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3text-purify.dtx b/macros/latex/required/l3kernel/l3text-purify.dtx index 35390811aa..d22ee1bc3e 100644 --- a/macros/latex/required/l3kernel/l3text-purify.dtx +++ b/macros/latex/required/l3kernel/l3text-purify.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3text.dtx b/macros/latex/required/l3kernel/l3text.dtx index bcfd15cb62..9a4c4f244e 100644 --- a/macros/latex/required/l3kernel/l3text.dtx +++ b/macros/latex/required/l3kernel/l3text.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % @@ -65,11 +65,11 @@ % \end{syntax} % Takes user input \meta{text} and expands the content. % Protected commands (typically -% formatting) are left in place, and no processing takes place of +% formatting) are left in place, and no processing of % math mode material (as delimited by pairs given in % \cs{l_text_math_delims_tl} or as the argument to commands listed -% in \cs{l_text_math_arg_tl}). Commands which are neither engine- -% nor \LaTeX{} protected are expanded exhaustively. +% in \cs{l_text_math_arg_tl}) takes place. Commands which are neither engine- +% nor \LaTeX{}-protected are expanded exhaustively. % Any commands listed in \cs{l_text_expand_exclude_tl} are excluded from % expansion, as are those in \cs{l_text_case_exclude_arg_tl} and % \cs{l_text_math_arg_tl}. @@ -114,8 +114,8 @@ % \end{function} % % Upper- and lowercase have the obvious meanings. Titlecasing may be regarded -% informally as converting the first character of the \meta{tokens} to -% uppercase. However, the process is more complex +% informally as converting the first \emph{non-space} character of the +% \meta{tokens} to uppercase. However, the process is more complex % than this as there are some situations where a single lowercase character % maps to a special form, for example \texttt{ij} in Dutch which becomes % \texttt{IJ}. There are two functions available for titlecasing: one which @@ -214,8 +214,8 @@ % \text_declare_uppercase_mapping:nnn % } % \begin{syntax} -% \cs{text_declare_lowercase_mapping:nn} \Arg{codeppoint} \Arg{replacement} -% \cs{text_declare_lowercase_mapping:nnn} \Arg{BCP-47} \Arg{codeppoint} \Arg{replacement} +% \cs{text_declare_lowercase_mapping:nn} \Arg{codepoint} \Arg{replacement} +% \cs{text_declare_lowercase_mapping:nnn} \Arg{BCP-47} \Arg{codepoint} \Arg{replacement} % \end{syntax} % Declares that the \meta{replacement} tokens should be used when case mapping % the \meta{codepoint}, rather than the standard mapping given in the diff --git a/macros/latex/required/l3kernel/l3tl-analysis.dtx b/macros/latex/required/l3kernel/l3tl-analysis.dtx index 4df9ee68a3..600da3985d 100644 --- a/macros/latex/required/l3kernel/l3tl-analysis.dtx +++ b/macros/latex/required/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3tl-build.dtx b/macros/latex/required/l3kernel/l3tl-build.dtx index 6cd9822ad2..e484c5b1c5 100644 --- a/macros/latex/required/l3kernel/l3tl-build.dtx +++ b/macros/latex/required/l3kernel/l3tl-build.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3tl.dtx b/macros/latex/required/l3kernel/l3tl.dtx index 71d68d532c..84f2c36798 100644 --- a/macros/latex/required/l3kernel/l3tl.dtx +++ b/macros/latex/required/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3token.dtx b/macros/latex/required/l3kernel/l3token.dtx index 03bf46b101..c028310326 100644 --- a/macros/latex/required/l3kernel/l3token.dtx +++ b/macros/latex/required/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/l3unicode.dtx b/macros/latex/required/l3kernel/l3unicode.dtx index 179817d490..532eb315d3 100644 --- a/macros/latex/required/l3kernel/l3unicode.dtx +++ b/macros/latex/required/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-05-27} +% \date{Released 2024-07-20} % % \maketitle % diff --git a/macros/latex/required/l3kernel/source3.pdf b/macros/latex/required/l3kernel/source3.pdf Binary files differindex 34279f9e00..26c62e620d 100644 --- a/macros/latex/required/l3kernel/source3.pdf +++ b/macros/latex/required/l3kernel/source3.pdf diff --git a/macros/latex/required/l3kernel/source3.tex b/macros/latex/required/l3kernel/source3.tex index 00095ad319..228d3ca93c 100644 --- a/macros/latex/required/l3kernel/source3.tex +++ b/macros/latex/required/l3kernel/source3.tex @@ -57,7 +57,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2024-05-27} +\date{Released 2024-07-20} \pagenumbering{roman} \maketitle |