diff options
author | Norbert Preining <norbert@preining.info> | 2023-03-10 03:04:05 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-03-10 03:04:05 +0000 |
commit | f6cb3d263826846efe7b926e6ad2092198db0522 (patch) | |
tree | 16abd399e7b120d3c3ac7d75efc4d04cf7bb022f /macros/latex | |
parent | 716c428e47ad2e893c0f970b9fa866d2a88f00e4 (diff) |
CTAN sync 202303100304
Diffstat (limited to 'macros/latex')
85 files changed, 532 insertions, 4155 deletions
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 a877bbe57c..dae1c3f742 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 f944831c59..584b8b980f 100644 --- a/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex +++ b/macros/latex/contrib/babel-contrib/french/frenchb-doc.tex @@ -121,7 +121,7 @@ \title{Mode d’emploi du module \ext{babel-french}} \author{\href{mailto:daniel.flipo@free.fr}{Daniel \textsc{Flipo}}} -\newcommand*{\latestversion}{3.5p} +\newcommand*{\latestversion}{3.5q} \date{Version {\latestversion} -- \today} \begin{document} @@ -158,8 +158,6 @@ \vspace{-\baselineskip}\noindent \descindentFB=0pt \begin{description} - \item[15 janvier 2017] La version~3.2f est compatible avec l’extension - \ext{icomma}. \item[30 janvier 2017] Le comportement par défaut de la commande |\frquote{}| sous LuaTeX est modifié, voir p.~\pageref{frquote}. \item[30 avril 2017] Utiliser |\frenchsetup{}| de préférence à @@ -182,8 +180,10 @@ \item[11 nov. 2022] Avec Lua(La)TeX le codage |«~abc~»| ne produit plus d’espace parasite. La redéfinition de |\shorthandoff{}|, |\shorthandon{}| sous LuaTeX/XeTeX est supprimée. - \item[3 janvier 2022] Modification de la commande |\DecimalMathComma|, + \item[3 janvier 2023] Modification de la commande |\DecimalMathComma|, voir p.~\pageref{decimalmathcomma}. + \item[8 mars 2023] Correction de bug dans les listes, + voir p.~\pageref{par-in-lists}. \end{description} \end{abstract} \egroup @@ -1579,6 +1579,14 @@ remarque de Fabrice Eudes : elle peut désormais être utilisée dans le préamb Voir section~\ref{decimalmathcomma} p.~\pageref{decimalmathcomma} pour plus de détails. +\vspace{\parskip} +La version 3.5q corrige un bug concernant les listes signalé par Denis Bitouzé : +les alinéas inclus dans une liste n’étaient pas distinguables. Dorénavant +|\listparindent| est défini comme |\parindent| et si|\parskip > 0|, |\parsep| +est défini comme |\parskip|. Il est possible de revenir à l’ancienne +présentation en ajoutant \emph{dans l’environnement de liste} les commandes +|\parskip=0pt| et |\parindent=0pt|.\hlabel{par-in-lists} + \subsection{Changements entre les versions 3.4d et 3.3d} \label{ssec:changes-3.4} diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.dtx b/macros/latex/contrib/babel-contrib/french/frenchb.dtx index 441b411aee..fa68afd071 100644 --- a/macros/latex/contrib/babel-contrib/french/frenchb.dtx +++ b/macros/latex/contrib/babel-contrib/french/frenchb.dtx @@ -11,7 +11,7 @@ %<frenchb>\ProvidesLanguage{frenchb} %<lua>--[[ %<lua> File `frenchb.lua’ generated from frenchb.dtx - [2023/01/02 v3.5p French support from the babel system] + [2023/03/08 v3.5q French support from the babel system] %<*internal> \iffalse %</internal> @@ -40,8 +40,7 @@ %% %</dtx> %<*filedriver> -\RequirePackage{pdfmanagement-testphase} -\DeclareDocumentMetadata{pdfstandard=A-2b, lang=en-US} +\DocumentMetadata{pdfstandard=A-2b, lang=en-US} \documentclass[a4paper]{ltxdoc} \usepackage[left=38mm,right=38mm,top=30mm,bottom=50mm]{geometry} \usepackage[dvipsnames]{xcolor} @@ -828,6 +827,13 @@ % Version 3.5n introduces a new command |\bname{}| (an alternative to % |\bsc{}|). % +% Version 3.5q corrects a bug in lists layout: |\listparindent| +% (formely 0pt) is defined as |\parindent| and if |\parskip > 0pt|, +% |\parsep| is now defined as |\parskip|. This ensures that +% paragraphs included in lists are now visible. The former behaviour +% can be recovered by adding |\parskip=0pt|, |\parindent=0pt| +% \emph{inside} the list environment. +% % \subsubsection*{What’s new in version 3.4?} % % Version 3.4a adds a new command |\frenchdate| (see @@ -5250,6 +5256,8 @@ return french_punctuation % An option for backward compatibility is provided.} % % \begin{macro}{\listFB} +% \changes{v3.5q}{2023/02/15}{Bug correction: \cs{parsep} should be +% related to \cs{parskip} and \cs{listparindent} to \cs{parindent}.} % \begin{macro}{\listORI} % \begin{macro}{\FB@listVsettings} % Vertical spacing in lists should be shorter in French texts than @@ -5274,20 +5282,31 @@ return french_punctuation % \begin{macrocode} \let\listORI\list \let\endlistORI\endlist +\newdimen\FB@parskip \def\FB@listVsettings{% - \setlength{\itemsep}{0.4ex plus 0.2ex minus 0.2ex}% - \setlength{\parsep}{0.4ex plus 0.2ex minus 0.2ex}% \setlength{\topsep}{0.8ex plus 0.4ex minus 0.4ex}% \setlength{\partopsep}{0.4ex plus 0.2ex minus 0.2ex}% % \end{macrocode} % |\parskip| is of type `skip’, its mean value only (\emph{not % the glue}) should be subtracted from |\topsep| and added to % |\partopsep|, so convert |\parskip| to a `dimen’ using -% |\@tempdima|. +% |\FB@parskip|. +% \begin{macrocode} + \FB@parskip=\parskip + \addtolength{\topsep}{-\FB@parskip}% + \addtolength{\partopsep}{\FB@parskip}% + \setlength{\itemsep}{0.4ex plus 0.2ex minus 0.2ex}% + \setlength{\parsep}{0.4ex plus 0.2ex minus 0.2ex}% +% \end{macrocode} +% (v3.5q) If |\parskip| is not null, |\parsep| is set to |\parskip|, +% so paragraphs inside items will be preceeded by the same vertical +% space as paragraphs located outside lists; the vertical skip before +% items (|\itemsep| + |\parsep|) doesn’t need to be enlarged. % \begin{macrocode} - \@tempdima=\parskip - \addtolength{\topsep}{-\@tempdima}% - \addtolength{\partopsep}{\@tempdima}% + \ifdim\FB@parskip>0pt + \setlength{\parsep}{\FB@parskip}% + \addtolength{\itemsep}{-\FB@parskip}% + \fi } \def\listFB#1#2{\listORI{#1}{\FB@listVsettings #2}} \let\endlistFB\endlistORI @@ -5387,7 +5406,7 @@ return french_punctuation \labelindentFB}% \else % \end{macrocode} -% Default layout: labels hanging into the left margin. +% Default layout: labels hanging into the list left margin. % \begin{macrocode} \leftmarginFB=\labelwidthFB \advance\leftmarginFB by \labelsep @@ -5395,6 +5414,11 @@ return french_punctuation {\csname leftmargin\romannumeral\FB@dp\endcsname = \leftmarginFB}% \advance\leftmargini by \listindentFB +% \end{macrocode} +% (v3.5q) Same `parindent’ for paragraphs in lists’ items (was null +% as in standard lists). +% \begin{macrocode} + \listparindent=\parindent \fi \leftmargin=\csname leftmargin% \ifnum\@listdepth=\@ne i\else ii\fi\endcsname @@ -5419,18 +5443,22 @@ return french_punctuation % unless option \fbo{StandardListSpacing} is set, then set horizontal % indentations according to |\FB@listHsettings| unless option % \fbo{ListOldLayout} is \fbo{true} (compatibility with lists -% up to v.~2.5k). +% up to v2.5k). % \begin{macrocode} \def\FB@itemizesettings{% \ifFBStandardListSpacing \else - \setlength{\itemsep}{\z@}% - \setlength{\parsep}{\z@}% \setlength{\topsep}{\z@}% \setlength{\partopsep}{\z@}% - \@tempdima=\parskip - \addtolength{\topsep}{-\@tempdima}% - \addtolength{\partopsep}{\@tempdima}% + \FB@parskip=\parskip + \addtolength{\topsep}{-\FB@parskip}% + \addtolength{\partopsep}{\FB@parskip}% + \setlength{\itemsep}{\z@}% + \setlength{\parsep}{\z@}% + \ifdim\FB@parskip>0pt + \setlength{\parsep}{\FB@parskip}% + \addtolength{\itemsep}{-\FB@parskip}% + \fi \fi \settowidth{\labelwidth}{\csname\@itemitem\endcsname}% \ifFBListOldLayout diff --git a/macros/latex/contrib/babel-contrib/french/frenchb.pdf b/macros/latex/contrib/babel-contrib/french/frenchb.pdf Binary files differindex 11268e191f..395080ae3f 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/genealogytree/CHANGES.md b/macros/latex/contrib/genealogytree/CHANGES.md index 186d064592..efae235b48 100644 --- a/macros/latex/contrib/genealogytree/CHANGES.md +++ b/macros/latex/contrib/genealogytree/CHANGES.md @@ -17,6 +17,23 @@ and this project adheres to +## [2.3.0] - 2023-03-09 + +### Added +- Catalan translation provided by Josep Tebé i Cetó +- Chinese translation provided by Chen Yanzheng +- Value `catalan` for option `language` +- Value `chinese` for option `language` + +### Fixed +- Option `autofill parents unspecific` was broken (issue #41) +- Internal documentation macro adapted to newer interal tcolorbox syntax +- Options `fill zoom DBimage` and `fill overzoom DBimage` adapted to be + compatible to the tikzfill package (expansion problem). + `\gtrincludeDBimage` also changed accordingly. + + + ## [2.2.0] - 2022-03-17 ### Added @@ -425,7 +442,7 @@ and this project adheres to - Pre publication development. - -[v2.1.0] https://github.com/T-F-S/genealogytree/compare/v2.01...2.1.0 +[v2.2.0] https://github.com/T-F-S/genealogytree/compare/v2.1.0...v2.2.0 +[v2.1.0] https://github.com/T-F-S/genealogytree/compare/v2.01...v2.1.0 [v2.01] https://github.com/T-F-S/genealogytree/compare/v2.00...v2.01 diff --git a/macros/latex/contrib/genealogytree/README.md b/macros/latex/contrib/genealogytree/README.md index 25c4d06ef4..c441228cfc 100644 --- a/macros/latex/contrib/genealogytree/README.md +++ b/macros/latex/contrib/genealogytree/README.md @@ -1,6 +1,6 @@ -# The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +# The LaTeX package genealogytree - version 2.3.0 (2023/03/09) -> Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +> Copyright (c) 2013-2023 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 diff --git a/macros/latex/contrib/genealogytree/genealogytree-example-1.pdf b/macros/latex/contrib/genealogytree/genealogytree-example-1.pdf Binary files differindex 0b893c644a..ab59ba00b9 100644 --- a/macros/latex/contrib/genealogytree/genealogytree-example-1.pdf +++ b/macros/latex/contrib/genealogytree/genealogytree-example-1.pdf diff --git a/macros/latex/contrib/genealogytree/genealogytree-example-2.pdf b/macros/latex/contrib/genealogytree/genealogytree-example-2.pdf Binary files differindex ec8a2ea0fc..b84b9ac1eb 100644 --- a/macros/latex/contrib/genealogytree/genealogytree-example-2.pdf +++ b/macros/latex/contrib/genealogytree/genealogytree-example-2.pdf diff --git a/macros/latex/contrib/genealogytree/genealogytree-example-3.pdf b/macros/latex/contrib/genealogytree/genealogytree-example-3.pdf Binary files differindex 8fa4eb74cc..6bbe1e3096 100644 --- a/macros/latex/contrib/genealogytree/genealogytree-example-3.pdf +++ b/macros/latex/contrib/genealogytree/genealogytree-example-3.pdf diff --git a/macros/latex/contrib/genealogytree/genealogytree-example-4.pdf b/macros/latex/contrib/genealogytree/genealogytree-example-4.pdf Binary files differindex 9995cbd07a..87dd10be43 100644 --- a/macros/latex/contrib/genealogytree/genealogytree-example-4.pdf +++ b/macros/latex/contrib/genealogytree/genealogytree-example-4.pdf diff --git a/macros/latex/contrib/genealogytree/genealogytree-languages.pdf b/macros/latex/contrib/genealogytree/genealogytree-languages.pdf Binary files differindex 58f985e5db..7307ad730d 100644 --- a/macros/latex/contrib/genealogytree/genealogytree-languages.pdf +++ b/macros/latex/contrib/genealogytree/genealogytree-languages.pdf diff --git a/macros/latex/contrib/genealogytree/genealogytree.pdf b/macros/latex/contrib/genealogytree/genealogytree.pdf Binary files differindex 9c75dfe74e..3d110c0514 100644 --- a/macros/latex/contrib/genealogytree/genealogytree.pdf +++ b/macros/latex/contrib/genealogytree/genealogytree.pdf diff --git a/macros/latex/contrib/genealogytree/genealogytree.sty b/macros/latex/contrib/genealogytree/genealogytree.sty index 8ab1ac5fd4..6704428ff3 100644 --- a/macros/latex/contrib/genealogytree/genealogytree.sty +++ b/macros/latex/contrib/genealogytree/genealogytree.sty @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% genealogytree.sty: genealogy trees (graphs) %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% ------------------------------------------------------------------------------------------- %% %% This work may be distributed and/or modified under the @@ -18,8 +18,8 @@ %% This work consists of all files listed in README %% \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{genealogytree}[2022/03/17 version 2.2.0 genealogy trees] -\def\gtr@version{2.2.0} +\ProvidesPackage{genealogytree}[2023/03/09 version 2.3.0 genealogy trees] +\def\gtr@version{2.3.0} \RequirePackage{expl3}[2020/02/25] \RequirePackage{xparse,xfp} @@ -134,6 +134,8 @@ \gtr@add@library{core.options}{gtrcore.options.code.tex} \gtr@add@library{core.symbols}{gtrcore.symbols.code.tex} +\gtr@add@library{lang.catalan}{gtrlang.catalan.code.tex} +\gtr@add@library{lang.chinese}{gtrlang.chinese.code.tex} \gtr@add@library{lang.danish}{gtrlang.danish.code.tex} \gtr@add@library{lang.dutch}{gtrlang.dutch.code.tex} \gtr@add@library{lang.english}{gtrlang.english.code.tex} diff --git a/macros/latex/contrib/genealogytree/gtrcore.contour.code.tex b/macros/latex/contrib/genealogytree/gtrcore.contour.code.tex index 1d2644f484..b70f50415c 100644 --- a/macros/latex/contrib/genealogytree/gtrcore.contour.code.tex +++ b/macros/latex/contrib/genealogytree/gtrcore.contour.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrcore.contour.code.tex: Contours %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} %%%%%%%%%%%%%%%%%%%%%%% %% Contour diff --git a/macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex b/macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex index effbc01f08..3f750e241b 100644 --- a/macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex +++ b/macros/latex/contrib/genealogytree/gtrcore.drawing.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrcore.drawing.code.tex: Drawing %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} %%%%%%%%%%%%%%%%%%%%%%% %% Auxiliary Tools diff --git a/macros/latex/contrib/genealogytree/gtrcore.node.code.tex b/macros/latex/contrib/genealogytree/gtrcore.node.code.tex index 2b6c7081cc..a7bd386551 100644 --- a/macros/latex/contrib/genealogytree/gtrcore.node.code.tex +++ b/macros/latex/contrib/genealogytree/gtrcore.node.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrcore.node.code.tex: Node Boxes %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} %%%%%%%%%%%%%% % Processors % @@ -1272,13 +1272,27 @@ \ifdefvoid{\gtrDBimage}{#2}{#1}% } -\def\gtrincludeDBimage#1{% - \begingroup\edef\x{\endgroup\noexpand\includegraphics[\gtrDBimageopt,#1]}\x{\gtrDBimage}% -} +\ExplSyntaxOn + +\NewDocumentCommand \gtrincludeDBimage { m } + { + \exp_last_unbraced:NNV \includegraphics [ \gtrDBimageopt, #1 ] { \gtrDBimage } + } + +\tikzset + { + fill@gtrDB@image@options/.code= + { + \tl_set:Nx \l_tmpa_tl { fill~image~options = { \exp_not:V \gtrDBimageopt } } + \pgfkeysalsofrom { \l_tmpa_tl } + } + } + +\ExplSyntaxOff \tikzset{% - fill overzoom DBimage/.style={fill image options=\gtrDBimageopt,fill overzoom image=\gtrDBimage},% - fill zoom DBimage/.style={fill image options=\gtrDBimageopt,fill zoom image=\gtrDBimage},% + fill overzoom DBimage/.style={fill@gtrDB@image@options,fill overzoom image=\gtrDBimage},% + fill zoom DBimage/.style={fill@gtrDB@image@options,fill zoom image=\gtrDBimage},% } \gtrset{% diff --git a/macros/latex/contrib/genealogytree/gtrcore.options.code.tex b/macros/latex/contrib/genealogytree/gtrcore.options.code.tex index cc06b0d245..30b96faa84 100644 --- a/macros/latex/contrib/genealogytree/gtrcore.options.code.tex +++ b/macros/latex/contrib/genealogytree/gtrcore.options.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrcore.options.code.tex: Options %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} %%%%%%%%%%%%%%%%%%%%%%% %% General handling @@ -458,7 +458,7 @@ \let\gtr@parent@@p\gtr@parent@@p@unspecific% }, autofill parents unspecific*/.default=5, - autofill parents unspecific/.code={% + autofill parents unspecific/.style={% autofill parents unspecific*={#1}, ignore level={\the\numexpr#1+1\relax}, }, diff --git a/macros/latex/contrib/genealogytree/gtrcore.parser.code.tex b/macros/latex/contrib/genealogytree/gtrcore.parser.code.tex index ae6c57edce..d8e44d1468 100644 --- a/macros/latex/contrib/genealogytree/gtrcore.parser.code.tex +++ b/macros/latex/contrib/genealogytree/gtrcore.parser.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrcore.parser.code.tex: Parser %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} %% (local) stack implementation \def\gtrnewstack#1{% diff --git a/macros/latex/contrib/genealogytree/gtrcore.processing.code.tex b/macros/latex/contrib/genealogytree/gtrcore.processing.code.tex index e2766e6db5..b00f9a7bce 100644 --- a/macros/latex/contrib/genealogytree/gtrcore.processing.code.tex +++ b/macros/latex/contrib/genealogytree/gtrcore.processing.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrcore.processing.code.tex: Processing %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} %%%%%%%%%%%%%%%%%%%%%%% %% Processing - common %%%%%%%%%%%%%%%%%%%%%%% diff --git a/macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex b/macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex index defe242cfd..526c998371 100644 --- a/macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex +++ b/macros/latex/contrib/genealogytree/gtrcore.symbols.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrcore.symbols.code.tex: Symbols %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} %%%%%%%%%%%%%%%%%%%%%%% %% Symbols diff --git a/macros/latex/contrib/genealogytree/gtrlang.catalan.code.tex b/macros/latex/contrib/genealogytree/gtrlang.catalan.code.tex new file mode 100644 index 0000000000..c101559106 --- /dev/null +++ b/macros/latex/contrib/genealogytree/gtrlang.catalan.code.tex @@ -0,0 +1,87 @@ +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) +%% gtrlang.catalan.code.tex: Catalan language +%% +%% ------------------------------------------------------------------------------------------- +%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Translation by Josep Tebe i Ceto <JosepTebe at proton dot me> +%% ------------------------------------------------------------------------------------------- +%% +%% 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 +%% +\gtr@set@library@version{2.3.0} + +\gtrset{language@/catalan/.code={% + \gtrset{symlang/.cd, + Born=nascut, + Bornoutofwedlock=nascut fora del matrimoni, + Stillborn=nascut mort, + Diedonbirthday=mort al n\'eixer, + Baptized=batejat, + Engaged=comprom\`es, + Married=casat, + Divorced=divorciat, + Partnership=uni\'o sense matrimoni, + Floruit=per\'iode d'activitat, + Died=mort, + Killed=mort en acci\'o, + Buried=enterrat, + Funeralurn=incinerat, + Female=dona, + Male=home, + Neuter=sexe desconegut + }% + \gtrset{% + month long/.cd, + 01/.initial=gener, + 02/.initial=febrer, + 03/.initial=mar\c{c}, + 04/.initial=abril, + 05/.initial=maig, + 06/.initial=juny, + 07/.initial=juliol, + 08/.initial=agost, + 09/.initial=setembre, + 10/.initial=octubre, + 11/.initial=novembre, + 12/.initial=desembre, + }% + \gtrset{% + month short/.cd, + 01/.initial=gen\protect\dot, + 02/.initial=feb\protect\dot, + 03/.initial=mar\protect\dot, + 04/.initial=abr\protect\dot, + 05/.initial=mai\protect\dot, + 06/.initial=jun\protect\dot, + 07/.initial=jul\protect\dot, + 08/.initial=ago\protect\dot, + 09/.initial=set\protect\dot, + 10/.initial=oct\protect\dot, + 11/.initial=nov\protect\dot, + 12/.initial=des\protect\dot, + }% + \gtrset{% + set@typical@date@format=d month yyyy, + calendar text for=AD is {}{ dC}, + calendar text for=BC is {}{ aC}, + calendar text for=GR is {}{\protect\textsuperscript{greg.}}, + calendar text for=JU is {}{\protect\textsuperscript{jul.}}, + calendar text for=caAD is {ca.~}{ dC}, + calendar text for=caBC is {ca.~}{ aC}, + calendar text for=ca is {ca.~}{}, + date range full={}{ a }{}, + date range before={abans de }{}, + date range after={despr\'es de }{}, + place text={a }{}, + }% +}} diff --git a/macros/latex/contrib/genealogytree/gtrlang.chinese.code.tex b/macros/latex/contrib/genealogytree/gtrlang.chinese.code.tex new file mode 100644 index 0000000000..cd32960c32 --- /dev/null +++ b/macros/latex/contrib/genealogytree/gtrlang.chinese.code.tex @@ -0,0 +1,94 @@ +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) +%% gtrlang.chinese.code.tex: Chinese language-Simplified +%% +%% ------------------------------------------------------------------------------------------- +%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Translation by Chen Yanzheng <snbcyz at mail dot ustc dot edu dot cn> +%% ------------------------------------------------------------------------------------------- +%% +%% 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 +%% +\gtr@set@library@version{2.3.0} + +\gtrset{language@/chinese/.code={% + \gtrset{symlang/.cd, + Born={出生}, + Bornoutofwedlock={é?žå©šç”Ÿ}, + Stillborn={æ»äº§}, + Diedonbirthday={出生当日æ»äº¡}, + Baptized={å?—æ´—}, + Engaged={订婚}, + Married={结婚}, + Divorced={离婚}, + Partnership={未婚伴侣}, + Floruit={在世时期}, + Died={æ»äº¡}, + Killed={阵亡}, + Buried={下葬}, + Funeralurn={ç?«åŒ–}, + Female={女性}, + Male={男性}, + Neuter={性别ä¸?详/ä¸æ€§} + }% + \gtrset{% + month long/.cd, + 01/.initial=1月, + 02/.initial=2月, + 03/.initial=3月, + 04/.initial=4月, + 05/.initial=5月, + 06/.initial=6月, + 07/.initial=7月, + 08/.initial=8月, + 09/.initial=9月, + 10/.initial=10月, + 11/.initial=11月, + 12/.initial=12月, + }% + \gtrset{% + month short/.cd, + 01/.initial=1\protect\dot, + 02/.initial=2\protect\dot, + 03/.initial=3\protect\dot, + 04/.initial=4\protect\dot, + 05/.initial=5\protect\dot, + 06/.initial=6\protect\dot, + 07/.initial=7\protect\dot, + 08/.initial=8\protect\dot, + 09/.initial=9\protect\dot, + 10/.initial=10\protect\dot, + 11/.initial=11\protect\dot, + 12/.initial=12\protect\dot, + }% + \gtrset{% + set@typical@date@format=yyyy-mm-dd, + calendar text for=AD is {公元}{}, + calendar text for=BC is {公元å‰?}{}, + calendar text for=GR is {æ ¼é‡Œé«˜åˆ©åŽ†}{}, + calendar text for=JU is {儒略历}{}, + calendar text for=caAD is {约公元}{}, + calendar text for=caBC is {约公元å‰?}{}, + calendar text for=ca is {约}{}, + date range full={自}{至}{}, + date range before={}{以å‰?}, + date range after={}{以å?Ž}, + place text={于}{}, + }% +}} +%SPECIAL NOTE:\usepackage{CJK} +%\begin{document} +%\begin{CJK*}{UTF8}{gbsn} +%gbsn IS THE FONT +%CONTENT +%\end{CJK*} +%\end{document} diff --git a/macros/latex/contrib/genealogytree/gtrlang.danish.code.tex b/macros/latex/contrib/genealogytree/gtrlang.danish.code.tex index 1d9a4e52a0..2eb28a73bb 100644 --- a/macros/latex/contrib/genealogytree/gtrlang.danish.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlang.danish.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlang.danish.code.tex: Danish language %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% Translation by Mikkel Eide Eriksen <mikkel dot eriksen at gmail dot com> %% ------------------------------------------------------------------------------------------- %% @@ -18,7 +18,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \gtrset{language@/danish/.code={% \gtrset{symlang/.cd, diff --git a/macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex b/macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex index d38f7791f7..9050865f5e 100644 --- a/macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlang.dutch.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlang.dutch.code.tex: Dutch language %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% Translation by Dirk Bosmans <onstrees at myonline be> %% ------------------------------------------------------------------------------------------- %% @@ -18,7 +18,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \gtrset{language@/dutch/.code={% \gtrset{symlang/.cd, diff --git a/macros/latex/contrib/genealogytree/gtrlang.english.code.tex b/macros/latex/contrib/genealogytree/gtrlang.english.code.tex index c13b2f4c69..6ab220e854 100644 --- a/macros/latex/contrib/genealogytree/gtrlang.english.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlang.english.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlang.english.code.tex: English language %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \gtrset{language@/english/.code={% \gtrset{symlang/.cd, diff --git a/macros/latex/contrib/genealogytree/gtrlang.french.code.tex b/macros/latex/contrib/genealogytree/gtrlang.french.code.tex index aceff41a25..9e8cdef2c8 100644 --- a/macros/latex/contrib/genealogytree/gtrlang.french.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlang.french.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlang.french.code.tex: French language %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% Translation by Denis Bitouze <denis dot bitouze at univ-littoral fr> %% ------------------------------------------------------------------------------------------- %% @@ -18,7 +18,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \gtrset{language@/french/.code={% \gtrset{symlang/.cd, diff --git a/macros/latex/contrib/genealogytree/gtrlang.german.code.tex b/macros/latex/contrib/genealogytree/gtrlang.german.code.tex index 4d0152a789..b43f8840a0 100644 --- a/macros/latex/contrib/genealogytree/gtrlang.german.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlang.german.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlang.german.code.tex: German language %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \gtrset{language@/german/.code={% \gtrset{symlang/.cd, diff --git a/macros/latex/contrib/genealogytree/gtrlang.italian.code.tex b/macros/latex/contrib/genealogytree/gtrlang.italian.code.tex index ed2b1def4f..9bc9f49725 100644 --- a/macros/latex/contrib/genealogytree/gtrlang.italian.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlang.italian.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlang.italian.code.tex: Italian language %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% Translation by Andrea Vaccari <ing dot andrea dot vaccari at gmail com> %% ------------------------------------------------------------------------------------------- %% @@ -18,7 +18,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \gtrset{language@/italian/.code={% \gtrset{symlang/.cd, diff --git a/macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex b/macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex index e67ffb84aa..1065f3bd9c 100644 --- a/macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlang.portuguese.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlang.portuguese.code.tex: Portuguese language %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% Translation by Natan de Almeida Laverde <natanlaverde at gmail dot com> %% ------------------------------------------------------------------------------------------- %% @@ -18,7 +18,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \gtrset{language@/portuguese/.code={% \gtrset{symlang/.cd, diff --git a/macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex b/macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex index d2a5bd45d8..358efdb818 100644 --- a/macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlang.spanish.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlang.spanish.code.tex: Spanish language %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% Translation by Francisco G. Perez Sanchez <ozo.froid at gmail dot com> %% ------------------------------------------------------------------------------------------- %% @@ -18,7 +18,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \gtrset{language@/spanish/.code={% \gtrset{symlang/.cd, diff --git a/macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex b/macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex index 18d3e10a63..cfcd43edaa 100644 --- a/macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlang.swedish.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlang.swedish.code.tex: Swedish language %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> %% Translation by Per Starbaeck <per at starback.se> %% ------------------------------------------------------------------------------------------- %% @@ -18,7 +18,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \gtrset{language@/swedish/.code={% \gtrset{symlang/.cd, diff --git a/macros/latex/contrib/genealogytree/gtrlib.debug.code.tex b/macros/latex/contrib/genealogytree/gtrlib.debug.code.tex index 80a7ee79ae..b1dfc8c329 100644 --- a/macros/latex/contrib/genealogytree/gtrlib.debug.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlib.debug.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlib.debug.code.tex: Debugger %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \RequirePackage{array,tabularx} \tcbuselibrary{breakable} diff --git a/macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex b/macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex index 8c09a9eb45..4aa2dac789 100644 --- a/macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlib.fanchart.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlib.fanchart.code.tex: Fancharts %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} \ExplSyntaxOn diff --git a/macros/latex/contrib/genealogytree/gtrlib.templates.code.tex b/macros/latex/contrib/genealogytree/gtrlib.templates.code.tex index b58ace1043..0bbfe4638c 100644 --- a/macros/latex/contrib/genealogytree/gtrlib.templates.code.tex +++ b/macros/latex/contrib/genealogytree/gtrlib.templates.code.tex @@ -1,8 +1,8 @@ -%% The LaTeX package genealogytree - version 2.2.0 (2022/03/17) +%% The LaTeX package genealogytree - version 2.3.0 (2023/03/09) %% gtrlib.templates.code.tex: Templates %% %% ------------------------------------------------------------------------------------------- -%% Copyright (c) 2013-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de> +%% Copyright (c) 2013-2023 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,7 +17,7 @@ %% %% This work consists of all files listed in README %% -\gtr@set@library@version{2.2.0} +\gtr@set@library@version{2.3.0} % Templates diff --git a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md index 8d789be01c..56f51f6f0d 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md +++ b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md @@ -5,6 +5,14 @@ first release 0.95a, 2021-02-23 will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), this project uses date-based 'snapshot' version identifiers. +## [2023-03-09] + +### Fixed + - regression data producer in xmp + +### Changed + - removed/reduced fontspec firstaid to avoid clash with new l3backend and with option parsing (issue #47) + ## [2023-02-20] ### Added diff --git a/macros/latex/contrib/pdfmanagement-testphase/README.md b/macros/latex/contrib/pdfmanagement-testphase/README.md index 427ecb77ed..4cf2155174 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/README.md +++ b/macros/latex/contrib/pdfmanagement-testphase/README.md @@ -1,6 +1,6 @@ # LaTeX PDF management testphase bundle -Version: 0.95w, 2023-02-20 +Version: 0.95x, 2023-03-09 This package is used during a test phase to load the new PDF management code of LaTeX. diff --git a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty index a91b8a348a..dcfba47cc0 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty @@ -24,7 +24,7 @@ %% This file has the LPPL maintenance status "maintained". %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{color-ltx}[2023-02-20 v0.95w +\ProvidesPackage{color-ltx}[2023-03-09 v0.95x Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)] \edef\Gin@codes{% \catcode`\noexpand\^^A\the\catcode`\^^A\relax diff --git a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty index c60ee84fcf..2b08ae1d80 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty @@ -19,7 +19,7 @@ % % for those people who are interested. \NeedsTeXFormat{LaTeX2e}[2020/10/01] -\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-02-20}{0.95w} +\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-03-09}{0.95x} {temporay patches to for the colorspace package to test pdfresource management ... UF} % colorspace can define more models, that l3color can't yet handle. diff --git a/macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty deleted file mode 100644 index 01f8530a65..0000000000 --- a/macros/latex/contrib/pdfmanagement-testphase/fontspec-luatex-tmp-ltx.sty +++ /dev/null @@ -1,3888 +0,0 @@ -%% -%% This is file `fontspec-luatex.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% fontspec.dtx (with options: `fontspec,LU') -%% fontspec-code-load.dtx (with options: `fontspec,LU') -%% fontspec-code-vars.dtx (with options: `fontspec,LU') -%% fontspec-code-msg.dtx (with options: `fontspec,LU') -%% fontspec-code-opening.dtx (with options: `fontspec,LU') -%% fontspec-code-fontload.dtx (with options: `fontspec,LU') -%% fontspec-code-interfaces.dtx (with options: `fontspec,LU') -%% fontspec-code-user.dtx (with options: `fontspec,LU') -%% fontspec-code-api.dtx (with options: `fontspec,LU') -%% fontspec-code-internal.dtx (with options: `fontspec,LU') -%% fontspec-code-opentype.dtx (with options: `fontspec,LU') -%% fontspec-code-graphite.dtx (with options: `fontspec,LU') -%% fontspec-code-keyval.dtx (with options: `fontspec,LU') -%% fontspec-code-feat-opentype.dtx (with options: `fontspec,LU') -%% fontspec-code-scripts.dtx (with options: `fontspec,LU') -%% fontspec-code-lang.dtx (with options: `fontspec,LU') -%% fontspec-code-feat-aat.dtx (with options: `fontspec,LU') -%% fontspec-code-enc.dtx (with options: `fontspec,LU') -%% fontspec-code-math.dtx (with options: `fontspec,LU') -%% fontspec-code-closing.dtx (with options: `fontspec,LU') -%% fontspec-code-xfss.dtx (with options: `fontspec,LU') -%% ------------------------------------------------ -%% The FONTSPEC package <wspr.io/fontspec> -%% ------------------------------------------------ -%% Copyright 2004-2017 Will Robertson, LPPL "maintainer" -%% Copyright 2009-2013 Khaled Hosny -%% ------------------------------------------------ -%% This package is free software and may be redistributed and/or modified under -%% the conditions of the LaTeX Project Public License, version 1.3c or higher -%% (your choice): <http://www.latex-project.org/lppl/>. -%% ------------------------------------------------ -%%^^A%% fontspec.dtx -- part of FONTSPEC <wspr.io/fontspec> -%%^^A%% Metadata for the package, including files and versioning - -\RequirePackage{xparse} -\ProvidesExplPackage{fontspec-luatex-tmp-ltx}% - {2022/01/15}{2023-02-20}{0.95w} - -%%^^A%% fontspec-code-load.dtx -- part of FONTSPEC <wspr.io/fontspec> -%%^^A%% fontspec-code-vars.dtx -- part of FONTSPEC <wspr.io/fontspec> -\bool_new:N \l__fontspec_firsttime_bool -\bool_new:N \l__fontspec_nobf_bool -\bool_new:N \l__fontspec_noit_bool -\bool_new:N \l__fontspec_nosc_bool -\bool_new:N \l__fontspec_check_bool -\bool_new:N \l__fontspec_tfm_bool -\bool_new:N \l__fontspec_atsui_bool -\bool_new:N \l__fontspec_ot_bool -\bool_new:N \l__fontspec_mm_bool -\bool_new:N \l__fontspec_harfbuzz_bool -\bool_new:N \l__fontspec_graphite_bool -\bool_new:N \l__fontspec_fontcfg_bool -\bool_set_true:N \l__fontspec_fontcfg_bool -\bool_new:N \g__fontspec_math_euler_bool -\bool_new:N \g__fontspec_math_lucida_bool -\bool_new:N \g__fontspec_pkg_euler_loaded_bool -\bool_new:N \g__fontspec_cfg_bool -\bool_new:N \g__fontspec_math_bool -\bool_new:N \g__fontspec_euenc_bool -\bool_new:N \l__fontspec_tmpa_bool -\bool_new:N \l__fontspec_disable_defaults_bool -\bool_new:N \l__fontspec_alias_bool -\bool_new:N \l__fontspec_external_bool -\bool_new:N \l__fontspec_defining_encoding_bool -\bool_new:N \l__fontspec_scriptlang_exist_bool -\bool_new:N \g__fontspec_em_normalise_slant_bool -\bool_new:N \l__fontspec_proceed_bool -\bool_new:N \l__fontspec_never_check_bool -\int_new:N \l__fontspec_script_int -\int_new:N \l__fontspec_language_int -\int_new:N \l__fontspec_strnum_int -\int_new:N \l__fontspec_tmp_int -\int_new:N \l__fontspec_tmpa_int -\int_new:N \l__fontspec_tmpb_int -\int_new:N \l__fontspec_tmpc_int -\int_new:N \l__fontspec_em_int -\int_new:N \l__fontspec_emdef_int -\int_new:N \l__fontspec_strong_int -\int_new:N \l__fontspec_strongdef_int -\fp_new:N \l__fontspec_tmpa_fp -\fp_new:N \l__fontspec_tmpb_fp -\dim_new:N \l__fontspec_tmpa_dim -\dim_new:N \l__fontspec_tmpb_dim -\dim_new:N \l__fontspec_tmpc_dim -\seq_new:N \l__fontspec_bf_series_seq -\clist_new:N \g__fontspec_default_fontopts_clist -\clist_new:N \g__fontspec_all_keyval_modules_clist -\clist_new:N \l__fontspec_sizefeat_clist -\clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} -\clist_new:N \l__fontspec_extensions_clist -\clist_new:N \l__fontspec_fontopts_clist -\clist_new:N \l__fontspec_family_fontopts_clist -\clist_new:N \l__fontspec_all_features_clist -\clist_new:N \l__fontspec_leftover_clist -\clist_new:N \l__fontspec_keys_leftover_clist -\clist_new:N \l__fontspec_sizing_leftover_clist -\clist_new:N \l__fontspec_fontfeat_clist -\clist_new:N \l__fontspec_fontfeat_curr_clist -\clist_new:N \l__fontspec_arg_clist -\clist_new:N \l__fontspec_this_feat_clist -\clist_new:N \l__fontspec_fontfeat_up_clist -\clist_new:N \l__fontspec_fontfeat_bf_clist -\clist_new:N \l__fontspec_fontfeat_it_clist -\clist_new:N \l__fontspec_fontfeat_bfit_clist -\clist_new:N \l__fontspec_fontfeat_sl_clist -\clist_new:N \l__fontspec_fontfeat_bfsl_clist -\clist_new:N \l__fontspec_fontfeat_sw_clist -\clist_new:N \l__fontspec_fontfeat_bfsw_clist -\clist_new:N \l__fontspec_fontfeat_sc_clist -\prop_new:N \g__fontspec_fontopts_prop -\prop_new:N \l__fontspec_nfss_prop -\prop_new:N \l__fontspec_nfssfont_prop -\prop_new:N \g__fontspec_OT_features_prop -\prop_new:N \g__fontspec_all_opentype_feature_names_prop -\prop_new:N \g__fontspec_em_prop -\prop_new:N \g__fontspec_strong_prop -\prop_new:N \g__fontspec_fontid_family_prop -\prop_new:N \g__fontspec_family_int_prop -\tl_new:N \l_fontspec_family_tl -\tl_new:N \g_fontspec_encoding_tl -\tl_new:N \l_fontspec_fontname_tl -\tl_clear_new:N \UTFencname -\tl_clear_new:N \cyrillicencoding -\tl_clear_new:N \latinencoding -\tl_new:N \l__fontspec_renderer_tl -\tl_new:N \l__fontspec_mode_tl -\tl_new:N \l__fontspec_shaper_tl -\tl_new:N \g__fontspec_defined_shapes_tl -\tl_new:N \g__fontspec_single_feat_tl -\tl_new:N \l__fontspec_basename_tl -\tl_new:N \g__fontspec_curr_series_tl -\tl_new:N \l__fontspec_curr_fontname_tl -\tl_new:N \l__fontspec_curr_bfname_tl -\tl_new:N \l__fontspec_ext_filename_tl -\tl_new:N \l__fontspec_extension_tl -\tl_new:N \l__fontspec_font_path_tl -\tl_new:N \l__fontspec_fontid_tl -\tl_new:N \l__fontspec_fontname_tl -\tl_new:N \l__fontspec_options_tl -\tl_new:N \l__fontspec_saved_fontname_tl -\tl_new:N \l__fontspec_prev_unicode_name_tl -\tl_new:N \g__fontspec_nfss_enc_tl -\tl_new:N \g__fontspec_nfss_family_tl -\tl_new:N \l__fontspec_nfss_sc_tl -\tl_new:N \l__fontspec_nfss_tl -\tl_new:N \l__fontspec_nfss_fam_tl -\tl_new:N \l__fontspec_size_tl -\tl_new:N \l__fontspec_sizedfont_tl -\tl_new:N \l__fontspec_this_font_tl -\tl_new:N \l__fontspec_ttc_index_tl -\tl_new:N \l__fontspec_smcp_shape_tl -\tl_new:N \l__fontspec_emshape_query_tl -\tl_new:N \l__fontspec_em_switch_tl -\tl_new:N \l__fontspec_strong_switch_tl -\tl_new:N \l__fontspec_tmp_tl -\tl_new:N \l__fontspec_tmpa_tl -\tl_new:N \l__fontspec_tmpb_tl -\tl_new:N \l__fontspec_em_tmp_tl -\tl_new:N \l__fontspec_strong_tmp_tl -\tl_new:N \g__fontspec_mathrm_tl -\tl_new:N \g__fontspec_bfmathrm_tl -\tl_new:N \g__fontspec_mathsf_tl -\tl_new:N \g__fontspec_mathtt_tl -\tl_gset:Nn \g__fontspec_mathrm_tl {\rmdefault} -\tl_gset:Nn \g__fontspec_mathsf_tl {\sfdefault} -\tl_gset:Nn \g__fontspec_mathtt_tl {\ttdefault} -\tl_new:N \l__fontspec_family_label_tl -\tl_new:N \l__fontspec_fake_slant_tl -\tl_new:N \l__fontspec_fake_embolden_tl -\tl_new:N \l__fontspec_fontname_up_tl -\tl_new:N \l__fontspec_fontname_bf_tl -\tl_new:N \l__fontspec_fontname_it_tl -\tl_new:N \l__fontspec_fontname_bfit_tl -\tl_new:N \l__fontspec_fontname_sl_tl -\tl_new:N \l__fontspec_fontname_bfsl_tl -\tl_new:N \l__fontspec_fontname_sw_tl -\tl_new:N \l__fontspec_fontname_bfsw_tl -\tl_new:N \l__fontspec_fontname_sc_tl -\tl_new:N \l__fontspec_script_tl -\tl_new:N \l__fontspec_script_name_tl -\tl_set:Nn \l__fontspec_script_name_tl {CustomDefault} -\tl_new:N \l__fontspec_lang_tl -\tl_new:N \l__fontspec_lang_name_tl -\tl_set:Nn \l__fontspec_lang_name_tl {Default} -\tl_new:N \l__fontspec_scale_tl -\tl_new:N \l__fontspec_hyphenchar_tl -\tl_new:N \l__fontspec_hexcol_tl -\tl_new:N \l__fontspec_opacity_tl -\tl_new:N \l__fontspec_optical_size_tl -\tl_new:N \l__fontspec_mapping_tl -\tl_new:N \l__fontspec_punctspace_adjust_tl -\tl_new:N \l__fontspec_wordspace_adjust_tl -\tl_new:N \l__fontspec_postadjust_tl -\tl_const:Nn \c__fontspec_hexcol_tl {000000} - \tl_const:Nn \c__fontspec_opacity_tl {} -\tl_const:Nn \c__fontspec_postadjust_tl { \l__fontspec_wordspace_adjust_tl \l__fontspec_punctspace_adjust_tl } -\tl_new:N \g__fontspec_rawfeatures_sclist -\tl_new:N \l__fontspec_pre_feat_sclist -\tl_new:N \l__fontspec_rmfamily_family_tl -\tl_new:N \l__fontspec_sffamily_family_tl -\tl_new:N \l__fontspec_ttfamily_family_tl -\tl_new:N \l__fontspec_rmfamily_encoding_tl -\tl_new:N \l__fontspec_sffamily_encoding_tl -\tl_new:N \l__fontspec_ttfamily_encoding_tl - -%%^^A%% fontspec-code-msg.dtx -- part of FONTSPEC <wspr.io/fontspec> -\cs_new:Npn \__fontspec_error:n { \msg_error:nn {fontspec} } -\cs_new:Npn \__fontspec_error:nn { \msg_error:nnn {fontspec} } -\cs_new:Npn \__fontspec_error:nx { \msg_error:nnx {fontspec} } -\cs_new:Npn \__fontspec_error:nxx { \msg_error:nnxx {fontspec} } -\cs_new:Npn \__fontspec_warning:n { \msg_warning:nn {fontspec} } -\cs_new:Npn \__fontspec_warning:nx { \msg_warning:nnx {fontspec} } -\cs_new:Npn \__fontspec_warning:nxx { \msg_warning:nnxx {fontspec} } -\cs_new:Npn \__fontspec_info:n { \msg_info:nn {fontspec} } -\cs_new:Npn \__fontspec_info:nx { \msg_info:nnx {fontspec} } -\cs_new:Npn \__fontspec_info:nxx { \msg_info:nnxx {fontspec} } -\cs_new:Npn \__fontspec_trace:n { \msg_trace:nn {fontspec} } -\cs_generate_variant:Nn \msg_new:nnn {nnx} -\cs_generate_variant:Nn \msg_new:nnnn {nnxx} -\cs_new:Nn \__fontspec_msg_new:nn - { \msg_new:nnx {fontspec} {#1} { \tl_trim_spaces:n {#2} } } -\cs_new:Nn \__fontspec_msg_new:nnn - { \msg_new:nnxx {fontspec} {#1} { \tl_trim_spaces:n {#2} } { \tl_trim_spaces:n {#3} } } -\char_set_catcode_space:n {32} -\__fontspec_msg_new:nn {only-inside-encdef} - { - \exp_not:N #1 can only be used in the second argument - to \string\DeclareUnicodeEncoding. - } -\__fontspec_msg_new:nn {no-size-info} - { - Size information must be supplied.\\ - For example, SizeFeatures={Size={8-12},...}. - } -\__fontspec_msg_new:nnn {font-not-found} - { - The font "#1" cannot be found. - } - { - A font might not be found for many reasons.\\ - Check the spelling, where the font is installed etc. etc.\\\\ - When in doubt, ask someone for help! - } -\__fontspec_msg_new:nnn {rename-feature-not-exist} - { - The feature #1 doesn't appear to be defined. - } - { - It looks like you're trying to rename a feature that doesn't exist. - } -\__fontspec_msg_new:nn {no-glyph} - { - '#1' does not contain glyph #2. - } -\__fontspec_msg_new:nnn {euler-too-late} - { - The euler package must be loaded BEFORE fontspec. - } - { - fontspec only overwrites euler's attempt to - define the maths text fonts if fontspec is - loaded after euler. Type <return> to proceed - with incorrect \string\mathit, \string\mathbf, etc. - } -\__fontspec_msg_new:nnn {no-xcolor} - { - Cannot load named colours without the xcolor package. - } - { - Sorry, I can't do anything to help. Instead of loading - the color package, use xcolor instead. - } -\__fontspec_msg_new:nnn {unknown-color-model} - { - Error loading colour `#1'; unknown colour model. - } - { - Sorry, I can't do anything to help. Please report this error - to my developer with a minimal example that causes the problem. - } -\__fontspec_msg_new:nnn {not-in-addfontfeatures} - { - The "#1" font feature cannot be used in \string\addfontfeatures. - } - { - This is due to how TeX loads fonts; such settings - are global so adding them mid-document within a group causes - confusion. You'll need to define multiple font families to achieve - what you want. - } -\__fontspec_msg_new:nn {tu-clash} - { - I have found the tuenc.def encoding definition file but the TU encoding is not - defined by the LaTeX2e kernel; attempting to correct but you really should update - to the latest version of LaTeX2e. - } -\__fontspec_msg_new:nn {tu-missing} - { - The TU encoding seems to be missing; please update to the latest version of LaTeX2e. - } -\__fontspec_msg_new:nn {addfontfeatures-ignored} - { - \string\addfontfeature (s) ignored \msg_line_context:; - it cannot be used with a font that wasn't selected by a fontspec command.\\ - \\ - The current font is "\use:c{font@name}".\\ - \int_compare:nTF { \clist_count:n {#1} = 1 } - { The requested feature is "#1". } - { The requested features are "#1". } - } -\__fontspec_msg_new:nn {feature-option-overwrite} - { - Option '#2' of font feature '#1' overwritten. - } -\__fontspec_msg_new:nn {ot-tag-too-long} - { - OpenType tag '#1' is too long; script, language, and feature tags must be four characters or fewer. - } -\__fontspec_msg_new:nn {aat-feature-not-exist} - { - '\l_keys_key_tl=\l_keys_value_tl' feature not supported - for AAT font '\l_fontspec_fontname_tl'. - } -\__fontspec_msg_new:nn {aat-feature-not-exist-in-font} - { - AAT feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available - in font '\l_fontspec_fontname_tl'. - } -\__fontspec_msg_new:nn {icu-feature-not-exist} - { - '\l_keys_key_tl=\l_keys_value_tl' feature not supported - for OpenType font '\l_fontspec_fontname_tl' - } -\__fontspec_msg_new:nn {icu-feature-not-exist-in-font} - { - OpenType feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available - for font '\l_fontspec_fontname_tl' - with script '\l__fontspec_script_name_tl' and language '\l__fontspec_lang_name_tl'. - } -\__fontspec_msg_new:nn {no-opticals} - { - '#1' doesn't appear to have an Optical Size axis. - } -\__fontspec_msg_new:nn {language-not-exist} - { - Language '#1' not available - for font '\l_fontspec_fontname_tl' - with script '\l__fontspec_script_name_tl'. - } -\__fontspec_msg_new:nn {only-xetex-feature} - { - Ignored XeTeX-only feature: '#1'. - } -\__fontspec_msg_new:nn {only-luatex-feature} - { - Ignored LuaTeX-only feature: '#1'. - } -\__fontspec_msg_new:nn {unknown-renderer} - { - Renderer '#1' unknown. Assuming Harfbuzz with 'shaper=#1'. - Please raise a fontspec issue to add this shaper to the interface. - } -\__fontspec_msg_new:nn {no-mapping} - { - Input mapping not supported in LuaTeX. - } -\__fontspec_msg_new:nn {no-mapping-ligtex} - { - Input mapping not supported in LuaTeX.\\ - Use "Ligatures=TeX" instead of "Mapping=tex-text". - } -\__fontspec_msg_new:nn {cm-default-obsolete} - { - The "cm-default" package option is obsolete. - } -\__fontspec_msg_new:nn {font-index-needs-ttc} - { - The "FontIndex" feature is only supported by TTC (TrueType Collection) fonts.\\ - Feature ignored. - } -\__fontspec_msg_new:nn {feat-cannot-remove} - { - The "#1" feature cannot be deactivated. Request ignored. - } -\__fontspec_msg_new:nn {defining-font} - { - Font family '\g__fontspec_nfss_family_tl' created for font '#2' - with options [\l__fontspec_all_features_clist].\\ - \\ - This font family consists of the following NFSS series/shapes:\\ - \g__fontspec_defined_shapes_tl - } -\__fontspec_msg_new:nn {no-font-shape} - { - Could not resolve font "#1" (it probably doesn't exist). - } -\__fontspec_msg_new:nn {set-scale} - { - \l_fontspec_fontname_tl\space scale = \l__fontspec_scale_tl. - } -\__fontspec_msg_new:nn {setup-math} - { - Adjusting the maths setup (use [no-math] to avoid this). - } -\__fontspec_msg_new:nn {no-script} - { - Font "#1" does not contain requested Script "#2". - } -\__fontspec_msg_new:nn {opa-twice} - { - Opacity set twice, in both Colour and Opacity.\\ - Using specification "Opacity=#1". - } -\__fontspec_msg_new:nn {opa-twice-col} - { - Opacity set twice, in both Opacity and Colour.\\ - Using an opacity specification in hex of "#1/FF". - } -\__fontspec_msg_new:nn {bad-colour} - { - Bad colour declaration "#1". - Colour must be one of:\\ - * a named xcolor colour\\ - * a six-digit hex colour RRGGBB\\ - * an eight-digit hex colour RRGGBBTT with opacity - } -\char_set_catcode_ignore:n {32} - -%%^^A%% fontspec-code-opening.dtx -- part of FONTSPEC <wspr.io/fontspec> -\DeclareOption{cm-default} - { - \__fontspec_warning:n {cm-default-obsolete} - } -\DeclareOption {math} { \bool_gset_true:N \g__fontspec_math_bool } -\DeclareOption {no-math} { \bool_gset_false:N \g__fontspec_math_bool } -\DeclareOption {config} { \bool_gset_true:N \g__fontspec_cfg_bool } -\DeclareOption {no-config}{ \bool_gset_false:N \g__fontspec_cfg_bool } -\DeclareOption {euenc} { \bool_gset_true:N \g__fontspec_euenc_bool } -\DeclareOption {tuenc} { \bool_gset_false:N \g__fontspec_euenc_bool } -\DeclareOption {quiet} - { - \msg_redirect_module:nnn { fontspec } { warning } { info } - \msg_redirect_module:nnn { fontspec } { info } { none } - } -\DeclareOption{silent} - { - \msg_redirect_module:nnn { fontspec } { warning } { none } - \msg_redirect_module:nnn { fontspec } { info } { none } - } -\ExecuteOptions{config,math,tuenc} -\ProcessOptions* -\bool_if:NF \g__fontspec_euenc_bool - { - \file_if_exist:nTF {tuenc.def} - { - \cs_if_exist:cF {T@TU} - { - \__fontspec_warning:n {tu-clash} - \DeclareFontEncoding{TU}{}{} - \DeclareFontSubstitution{TU}{lmr}{m}{n} - } - } - { - \__fontspec_warning:n {tu-missing} - \bool_gset_true:N \g__fontspec_euenc_bool - } - } -\bool_if:NTF \g__fontspec_euenc_bool - { - \tl_gset:Nn \g_fontspec_encoding_tl {EU2} - } - { \tl_gset:Nn \g_fontspec_encoding_tl { TU } } -\tl_set:Nn \rmdefault {lmr} -\tl_set:Nn \sfdefault {lmss} -\tl_set:Nn \ttdefault {lmtt} -\RequirePackage[\g_fontspec_encoding_tl]{fontenc} -\tl_set_eq:NN \UTFencname \g_fontspec_encoding_tl % for xunicode if needed -\tl_if_in:NnT \@filelist {.cls} { \normalsize } -\tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl -\tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl -\AtBeginDocument - { - \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl - \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl - } -\bool_if:NT \g__fontspec_euenc_bool - { - \cs_set_eq:NN \fontspec_tmp: \XeTeXpicfile - \cs_set:Npn \XeTeXpicfile {} - \RequirePackage{xunicode} - \cs_set_eq:NN \XeTeXpicfile \fontspec_tmp: - } -\cs_new:Npn \FontspecSetCheckBoolTrue { \bool_set_true:N \l__fontspec_check_bool } -\cs_new:Npn \FontspecSetCheckBoolFalse { \bool_set_false:N \l__fontspec_check_bool } -\cs_new:Nn \__fontspec_keys_set_known:nnN - { - \keys_set_known:nnN {#1} {#2} #3 - } -\cs_generate_variant:Nn \__fontspec_keys_set_known:nnN {nx} -\cs_new:Nn \__fontspec_int_mult_truncate:Nn - { - \int_set:Nn #1 { \__dim_eval:w #2 #1 \__dim_eval_end: } - } -\cs_set:Npn \__fontspec_lua_function:ne #1#2 { \lua_now:e { fontspec.#1 ("#2") } } -\cs_set:Npn \__fontspec_lua_function:nee #1#2#3 { \lua_now:e { fontspec.#1 ("#2","#3") } } -\cs_set:Npn \__fontspec_lua_function:neee #1#2#3#4 { \lua_now:e { fontspec.#1 ("#2","#3","#4") } } -\cs_set:Npn \__fontspec_lua_function:neeee #1#2#3#4#5 { \lua_now:e { fontspec.#1 ("#2","#3","#4","#5") } } -\cs_generate_variant:Nn \int_set:Nn {Nv} -\cs_generate_variant:Nn \keys_set:nn {nx} -\cs_generate_variant:Nn \keys_set_known:nnN {nx} -\cs_generate_variant:Nn \prop_put:Nnn {Nxx} -\cs_generate_variant:Nn \prop_put:Nnn {NxV} -\cs_generate_variant:Nn \prop_gput_if_new:Nnn {NxV} -\cs_generate_variant:Nn \prop_gput:Nnn {Nxn} -\cs_generate_variant:Nn \prop_get:NnNT {NxN} -\cs_generate_variant:Nn \prop_get:NnNTF {NxN} -\cs_generate_variant:Nn \str_if_eq:nnTF {nv} -\cs_generate_variant:Nn \tl_if_empty_p:n {e} -\cs_generate_variant:Nn \tl_if_empty:nTF {x} -\cs_generate_variant:Nn \tl_if_empty:nF {x} -\cs_generate_variant:Nn \tl_if_empty:nF {f} -\cs_generate_variant:Nn \tl_if_eq:nnT {ox} -\cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx} - -%%^^A%% fontspec-code-fontload.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\cs_set:Npn \__fontspec_primitive_font_set:Nnn #1#2#3 - { - \font #1 = #2 ~at~ \dim_eval:n {#3} \scan_stop: - } -\cs_set:Npn \__fontspec_primitive_font_gset:Nnn #1#2#3 - { - \global \font #1 = #2 ~at~ \dim_eval:n {#3} \scan_stop: - } -\cs_set:Npn \__fontspec_font_suppress_not_found_error: - { - \int_set:Nn \suppressfontnotfounderror {1} - } -\prg_set_conditional:Nnn \__fontspec_primitive_font_if_null:N {p,TF,T,F} - { - \ifx #1 \nullfont - \prg_return_true: - \else - \prg_return_false: - \fi - } -\prg_set_conditional:Nnn \__fontspec_primitive_font_set:Nnn {TF,T,F} - { - \__fontspec_primitive_font_set:Nnn #1 {#2} {#3} - \__fontspec_primitive_font_if_null:NTF #1 {\prg_return_false:} {\prg_return_true:} - } -\prg_set_conditional:Nnn \__fontspec_primitive_font_gset:Nnn {TF,T,F} - { - \__fontspec_primitive_font_gset:Nnn #1 {#2} {#3} - \__fontspec_primitive_font_if_null:NTF #1 {\prg_return_false:} {\prg_return_true:} - } -\cs_set:Npn \__fontspec_primitive_font_set:Onn { \exp_last_unbraced:No \__fontspec_primitive_font_set:Nnn } -\cs_set:Npn \__fontspec_primitive_font_set:OnnF { \exp_last_unbraced:No \__fontspec_primitive_font_set:NnnF } -\cs_set:Npn \__fontspec_primitive_font_gset:Onn { \exp_last_unbraced:No \__fontspec_primitive_font_gset:Nnn } -\cs_set:Npn \__fontspec_primitive_font_gset:OnnF { \exp_last_unbraced:No \__fontspec_primitive_font_gset:NnnF } -\prg_set_conditional:Nnn \__fontspec_primitive_font_if_exist:n {TF,T,F} - { - \group_begin: - \__fontspec_font_suppress_not_found_error: - \__fontspec_primitive_font_set:Nnn \l__fontspec_primitive_font {#1} { \f@size pt - 1sp } - \__fontspec_primitive_font_if_null:NTF \l__fontspec_primitive_font - { \group_end: \prg_return_false: } - { \group_end: \prg_return_true: } - } -\prg_new_conditional:Nnn \__fontspec_primitive_font_glyph_if_exist:Nn {p,TF,T,F} - { - \tex_iffontchar:D #1 #2 \scan_stop: - \prg_return_true: - \else: - \prg_return_false: - \fi: - } -\cs_new:Nn \__fontspec_primitive_font_set_hyphenchar:Nn - { - \tex_hyphenchar:D #1 = #2 \scan_stop: - } -\cs_new_eq:NN \__fontspec_primitive_font_get_name:N \fontname -\cs_new:Npn \__fontspec_primitive_font_current_name: - { - \__fontspec_primitive_font_get_name:N \tex_font:D - } - -%%^^A%% fontspec-code-interfaces.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\NewDocumentCommand \fontspec { O{} m O{} } - { - \__fontspec_main_fontspec:nn {#1,#3} {#2} - \ignorespaces - } -\NewDocumentCommand \setmainfont { O{} m O{} } - { - \__fontspec_main_setmainfont:nn {#1,#3} {#2} - \ignorespaces - } -\NewDocumentCommand \setsansfont { O{} m O{} } - { - \__fontspec_main_setsansfont:nn {#1,#3} {#2} - \ignorespaces - } -\NewDocumentCommand \setmonofont { O{} m O{} } - { - \__fontspec_main_setmonofont:nn {#1,#3} {#2} - \ignorespaces - } -\NewDocumentCommand \setmathrm { O{} m O{} } - { - \__fontspec_main_setmathrm:nn {#1,#3} {#2} - } -\NewDocumentCommand \setboldmathrm { O{} m O{} } - { - \__fontspec_main_setboldmathrm:nn {#1,#3} {#2} - } -\NewDocumentCommand \setmathsf { O{} m O{} } - { - \__fontspec_main_setmathsf:nn {#1,#3} {#2} - } -\NewDocumentCommand \setmathtt { O{} m O{} } - { - \__fontspec_main_setmathtt:nn {#1,#3} {#2} - } -\NewDocumentCommand \setromanfont { O{} m O{} } - { - \__fontspec_main_setmainfont:nn {#1,#3} {#2} - } -\NewDocumentCommand \newfontfamily { m O{} m O{} } - { - \__fontspec_main_newfontfamily:NnnN #1 {#2,#4} {#3} \NewDocumentCommand - } -\NewDocumentCommand \renewfontfamily { m O{} m O{} } - { - \__fontspec_main_newfontfamily:NnnN #1 {#2,#4} {#3} \RenewDocumentCommand - } -\NewDocumentCommand \setfontfamily { m O{} m O{} } - { - \__fontspec_main_newfontfamily:NnnN #1 {#2,#4} {#3} \DeclareDocumentCommand - } -\NewDocumentCommand \providefontfamily { m O{} m O{} } - { - \__fontspec_main_newfontfamily:NnnN #1 {#2,#4} {#3} \ProvideDocumentCommand - } -\NewDocumentCommand \newfontface { m O{} m O{} } - { - \__fontspec_main_newfontface:NnnN #1 {#2,#4} {#3} \NewDocumentCommand - } -\NewDocumentCommand \renewfontface { m O{} m O{} } - { - \__fontspec_main_newfontface:NnnN #1 {#2,#4} {#3} \RenewDocumentCommand - } -\NewDocumentCommand \setfontface { m O{} m O{} } - { - \__fontspec_main_newfontface:NnnN #1 {#2,#4} {#3} \DeclareDocumentCommand - } -\NewDocumentCommand \providefontface { m O{} m O{} } - { - \__fontspec_main_newfontface:NnnN #1 {#2,#4} {#3} \ProvideDocumentCommand - } -\NewDocumentCommand \defaultfontfeatures { t+ o m } - { - \IfNoValueTF {#2} - { \__fontspec_set_default_features:nn {#1} {#3} } - { \__fontspec_set_font_default_features:nnn {#1} {#2} {#3} } - \ignorespaces - } -\NewDocumentCommand \addfontfeatures {m} - { - \__fontspec_main_addfontfeatures:n {#1} - } -\NewDocumentCommand \addfontfeature {m} - { - \__fontspec_main_addfontfeatures:n {#1} - } -\NewDocumentCommand \newfontfeature {mm} - { - \__fontspec_main_newfontfeature:nn {#1} {#2} - } -\NewDocumentCommand \newAATfeature {mmmm} - { - \__fontspec_main_newAATfeature:nnnn {#1} {#2} {#3} {#4} - } -\NewDocumentCommand \newopentypefeature {mmm} - { - \__fontspec_main_newopentypefeature:nnn {#1} {#2} {#3} - } -\NewDocumentCommand \newICUfeature {mmm} - { - \__fontspec_main_newopentypefeature:nnn {#1} {#2} {#3} - } -\NewDocumentCommand \aliasfontfeature {mm} - { - \__fontspec_main_aliasfontfeature:nn {#1} {#2} - } -\NewDocumentCommand \aliasfontfeatureoption {mmm} - { - \__fontspec_main_aliasfontfeatureoption:nnn {#1} {#2} {#3} - } -\NewDocumentCommand \newfontscript {mm} - { - \fontspec_new_script:nn {#1} {#2} - } -\NewDocumentCommand \newfontlanguage {mm} - { - \fontspec_new_lang:nn {#1} {#2} - } -\NewDocumentCommand \DeclareFontExtensions {m} - { - \__fontspec_main_DeclareFontExtensions:n {#1} - } -\NewDocumentCommand \IfFontFeatureActiveTF {mmm} - { - \__fontspec_main_IfFontFeatureActiveTF:nnn {#1} {#2} {#3} - } -\AtBeginDocument - { - \RenewDocumentCommand \oldstylenums {m} - { - \__fontspec_main_oldstylenums:n {#1} - } - } -\NewDocumentCommand \liningnums {m} - { - \__fontspec_main_liningnums:n {#1} - } - -%%^^A%% fontspec-code-user.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\cs_new:Nn \__fontspec_main_fontspec:nn - { - \fontspec_set_family:Nnn \f@family {#1} {#2} - \fontencoding { \g__fontspec_nfss_enc_tl } - \selectfont - } -\cs_if_exist:NTF \@rmfamilyhook - { - \tl_put_right:Nn \@rmfamilyhook {\fontencoding \l__fontspec_rmfamily_encoding_tl} - \tl_put_right:Nn \@sffamilyhook {\fontencoding \l__fontspec_sffamily_encoding_tl} - \tl_put_right:Nn \@ttfamilyhook {\fontencoding \l__fontspec_ttfamily_encoding_tl} - } - { - \tl_replace_all:cnn { rmfamily~ } { \fontfamily } - { \fontencoding \l__fontspec_rmfamily_encoding_tl \fontfamily } - \tl_replace_all:cnn { sffamily~ } { \fontfamily } - { \fontencoding \l__fontspec_sffamily_encoding_tl \fontfamily } - \tl_replace_all:cnn { ttfamily~ } { \fontfamily } - { \fontencoding \l__fontspec_ttfamily_encoding_tl \fontfamily } - } -\tl_set:Nn \l__fontspec_rmfamily_encoding_tl { \encodingdefault } -\tl_set:Nn \l__fontspec_sffamily_encoding_tl { \encodingdefault } -\tl_set:Nn \l__fontspec_ttfamily_encoding_tl { \encodingdefault } -\cs_new:Nn \__fontspec_main_setmainfont:nn - { - \ifdefined\DeclareFontSeriesDefault - \DeclareFontSeriesDefault[rm]{bf}{\bfdefault} - \fi - \fontspec_set_family:Nnn \l__fontspec_rmfamily_family_tl {#1} {#2} - \tl_set_eq:NN \rmdefault \l__fontspec_rmfamily_family_tl - \tl_set_eq:NN \l__fontspec_rmfamily_encoding_tl \g__fontspec_nfss_enc_tl - \str_if_eq:eeT {\familydefault} {\rmdefault} - { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } - \__fontspec_setmainfont_hook:nn {#1} {#2} % for unicode-math only - \normalfont - } -\cs_new:Nn \__fontspec_main_setsansfont:nn - { - \ifdefined\DeclareFontSeriesDefault - \DeclareFontSeriesDefault[sf]{bf}{\bfdefault} - \fi - \fontspec_set_family:Nnn \l__fontspec_sffamily_family_tl {#1} {#2} - \tl_set_eq:NN \sfdefault \l__fontspec_sffamily_family_tl - \tl_set_eq:NN \l__fontspec_sffamily_encoding_tl \g__fontspec_nfss_enc_tl - \str_if_eq:eeT {\familydefault} {\sfdefault} - { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } - \__fontspec_setsansfont_hook:nn {#1} {#2} % for unicode-math only - \normalfont - } -\cs_new:Nn \__fontspec_main_setmonofont:nn - { - \ifdefined\DeclareFontSeriesDefault - \DeclareFontSeriesDefault[tt]{bf}{\bfdefault} - \fi - \fontspec_set_family:Nnn \l__fontspec_ttfamily_family_tl {#1} {#2} - \tl_set_eq:NN \ttdefault \l__fontspec_ttfamily_family_tl - \tl_set_eq:NN \l__fontspec_ttfamily_encoding_tl \g__fontspec_nfss_enc_tl - \str_if_eq:eeT {\familydefault} {\ttdefault} - { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } - \__fontspec_setmonofont_hook:nn {#1} {#2} % for unicode-math only - \normalfont - } -\cs_new:Nn \__fontspec_main_setmathrm:nn - { - \fontspec_gset_family:Nnn \g__fontspec_mathrm_tl {Renderer=Basic,#1} {#2} - \__fontspec_setmathrm_hook:nn {#1} {#2} % for unicode-math only - } -\cs_new:Nn \__fontspec_main_setboldmathrm:nn - { - \fontspec_gset_family:Nnn \g__fontspec_bfmathrm_tl {Renderer=Basic,#1} {#2} - \__fontspec_setboldmathrm_hook:nn {#1} {#2} % for unicode-math only - } -\cs_new:Nn \__fontspec_main_setmathsf:nn - { - \fontspec_gset_family:Nnn \g__fontspec_mathsf_tl {Renderer=Basic,#1} {#2} - \__fontspec_setmathsf_hook:nn {#1} {#2} % for unicode-math only - } -\cs_new:Nn \__fontspec_main_setmathtt:nn - { - \fontspec_gset_family:Nnn \g__fontspec_mathtt_tl {Renderer=Basic,#1} {#2} - \__fontspec_setmathtt_hook:nn {#1} {#2} % for unicode-math only - } -\cs_set_eq:NN \__fontspec_setmainfont_hook:nn \use_none:nn -\cs_set_eq:NN \__fontspec_setsansfont_hook:nn \use_none:nn -\cs_set_eq:NN \__fontspec_setmonofont_hook:nn \use_none:nn -\cs_set_eq:NN \__fontspec_setmathrm_hook:nn \use_none:nn -\cs_set_eq:NN \__fontspec_setmathsf_hook:nn \use_none:nn -\cs_set_eq:NN \__fontspec_setmathtt_hook:nn \use_none:nn -\cs_set_eq:NN \__fontspec_setboldmathrm_hook:nn \use_none:nn -\@onlypreamble\setmathrm -\@onlypreamble\setboldmathrm -\@onlypreamble\setmathsf -\@onlypreamble\setmathtt -\tl_gset:Nn \g__fontspec_mathrm_tl {\rmdefault} -\tl_gset:Nn \g__fontspec_mathsf_tl {\sfdefault} -\tl_gset:Nn \g__fontspec_mathtt_tl {\ttdefault} -\cs_new:Nn \__fontspec_main_newfontfamily:NnnN - { - \fontspec_set_family:cnn { l__fontspec_ \cs_to_str:N #1 _family_tl } {#2} {#3} - \use:x - { - \exp_not:N #4 \exp_not:N #1 {} - { - \exp_not:N \fontfamily { \use:c { l__fontspec_ \cs_to_str:N #1 _family_tl } } - \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } - \exp_not:N \selectfont - } - } - } -\cs_new:Nn \__fontspec_main_newfontface:NnnN - { - \__fontspec_main_newfontfamily:NnnN #1 { BoldFont={},ItalicFont={},SmallCapsFont={},#2 } {#3} #4 - } -\cs_new:Nn \__fontspec_set_default_features:nn - { - \IfBooleanTF {#1} \clist_gput_right:Nn \clist_gset:Nn - \g__fontspec_default_fontopts_clist {#2} - } -\cs_new:Nn \__fontspec_set_font_default_features:nnn - { - \clist_map_inline:nn {#2} - { - \tl_if_single:nTF {##1} - { \tl_set:No \l__fontspec_tmp_tl { \cs:w l__fontspec_ \cs_to_str:N ##1 _family_tl\cs_end: } } - { \__fontspec_sanitise_fontname:Nn \l__fontspec_tmp_tl {##1} } - - \IfBooleanTF {#1} - { - \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl - { \tl_clear:N \l__fontspec_tmpb_tl } - \tl_put_right:Nn \l__fontspec_tmpb_tl {#3,} - \prop_gput:NVV \g__fontspec_fontopts_prop \l__fontspec_tmp_tl \l__fontspec_tmpb_tl - } - { - \tl_if_empty:nTF {#3} - { \prop_gremove:NV \g__fontspec_fontopts_prop \l__fontspec_tmp_tl } - { \prop_gput:NVn \g__fontspec_fontopts_prop \l__fontspec_tmp_tl {#3,} } - } - } - } -\cs_new:Nn \__fontspec_main_addfontfeatures:n - { - \fontspec_if_fontspec_font:TF - { - \group_begin: - \keys_set_known:nnN {fontspec-addfeatures} {#1} \l__fontspec_tmp_tl - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {options} \l__fontspec_options_tl - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {fontname} \l__fontspec_fontname_tl - \bool_set_true:N \l__fontspec_disable_defaults_bool - \use:x - { - \__fontspec_select_font_family:nn - { \l__fontspec_options_tl , #1 } {\l__fontspec_fontname_tl} - } - \group_end: - \fontfamily \g__fontspec_nfss_family_tl \selectfont - } - { - \__fontspec_warning:nx {addfontfeatures-ignored} {#1} - } - \ignorespaces - } -\cs_new:Nn \__fontspec_main_newfontfeature:nn - { - \keys_define:nn { fontspec } - { - #1 .code:n = { \__fontspec_update_featstr:n {#2} } - } - } -\cs_new:Nn \__fontspec_main_newAATfeature:nnnn - { - \keys_if_exist:nnF { fontspec } {#1} - { \__fontspec_define_aat_feature_group:n {#1} } - - \keys_if_choice_exist:nnnT {fontspec} {#1} {#2} - { \__fontspec_warning:nxx {feature-option-overwrite} {#1} {#2} } - - \__fontspec_define_aat_feature:nnnn {#1}{#2}{#3}{#4} - } -\cs_new:Nn \__fontspec_main_newopentypefeature:nnn - { - \keys_if_exist:nnF { fontspec / options } {#1} - { \__fontspec_define_opentype_feature_group:n {#1} } - - \keys_if_choice_exist:nnnT {fontspec} {#1} {#2} - { \__fontspec_warning:nxx {feature-option-overwrite} {#1} {#2} } - - \exp_args:Nnnx \__fontspec_define_opentype_feature:nnnnn - {#1} {#2} { \__fontspec_strip_plus_minus:n {#3} } {#3} {} - } -\cs_new:Nn \__fontspec_strip_plus_minus:n { \__fontspec_strip_plus_minus_aux:Nq #1 \q_nil } -\cs_new:Npn \__fontspec_strip_plus_minus_aux:Nq #1#2 \q_nil - { - \str_case:nnF {#1} { {+} {#2} {-} {#2} } {#1#2} - } -\cs_new:Nn \__fontspec_main_aliasfontfeature:nn - { - \bool_set_false:N \l__fontspec_alias_bool - - \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist - { - \keys_if_exist:nnT {##1} {#1} - { - \bool_set_true:N \l__fontspec_alias_bool - \keys_define:nn {##1} - { #2 .code:n = { \keys_set:nn {##1} { #1 = {####1} } } } - } - } - - \bool_if:NF \l__fontspec_alias_bool - { \__fontspec_warning:nx {rename-feature-not-exist} {#1} } - } -\cs_new:Nn \__fontspec_main_aliasfontfeatureoption:nnn - { - \bool_set_false:N \l__fontspec_alias_bool - - \clist_map_inline:Nn \g__fontspec_all_keyval_modules_clist - { - \keys_if_exist:nnT { ##1 / #1 } {#2} - { - \bool_set_true:N \l__fontspec_alias_bool - \keys_define:nn { ##1 / #1 } - { #3 .code:n = { \keys_set:nn {##1} { #1 = {#2} } } } - } - - \keys_if_exist:nnT { ##1 / #1 } {#2Reset} - { - \keys_define:nn { ##1 / #1 } - { #3Reset .code:n = { \keys_set:nn {##1} { #1 = {#2Reset} } } } - } - - \keys_if_exist:nnT { ##1 / #1 } {#2Off} - { - \keys_define:nn { ##1 / #1 } - { #3Off .code:n = { \keys_set:nn {##1} { #1 = {#2Off} } } } - } - } - - \bool_if:NF \l__fontspec_alias_bool - { \__fontspec_warning:nx {rename-feature-not-exist} {#1/#2} } - } -\cs_new:Nn \__fontspec_main_DeclareFontExtensions:n - { - \clist_set:Nn \l__fontspec_extensions_clist { #1 } - } -\__fontspec_main_DeclareFontExtensions:n {.otf,.ttf,.OTF,.TTF,.ttc,.TTC,.dfont} -\cs_new:Nn \__fontspec_main_IfFontFeatureActiveTF:nnn - { - \__fontspec_if_font_feature:nTF {#1} {#2} {#3} - } -\prg_new_conditional:Nnn \__fontspec_if_font_feature:n {TF} - { - \tl_gclear:N \g__fontspec_single_feat_tl - \group_begin: - \__fontspec_font_suppress_not_found_error: - \__fontspec_init: - \bool_set_true:N \l__fontspec_ot_bool - \bool_set_true:N \l__fontspec_never_check_bool - \bool_set_false:N \l__fontspec_firsttime_bool - \clist_clear:N \l__fontspec_fontfeat_clist - \__fontspec_get_features:n {#1} - \group_end: - - - \tl_if_empty:NTF \g__fontspec_single_feat_tl { \prg_return_false: } - { - \exp_args:NV \fontspec_if_current_feature:nTF \g__fontspec_single_feat_tl - { \prg_return_true: } { \prg_return_false: } - } - } -\cs_new_protected:Nn \__fontspec_main_oldstylenums:n - { - \group_begin: - \addfontfeature{Numbers=OldStyle} - #1 - \group_end: - } -\cs_new_protected:Nn \__fontspec_main_liningnums:n - { - \group_begin: - \addfontfeature{Numbers=Lining} - #1 - \group_end: - } - -%%^^A%% fontspec-code-api.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\prg_new_conditional:Nnn \fontspec_if_fontspec_font: {TF,T,F} - { - \cs_if_exist:cTF {g__fontspec_fontinfo_ \f@family _prop} \prg_return_true: \prg_return_false: - } -\prg_new_conditional:Nnn \fontspec_if_aat_feature:nn {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_atsui_bool - { - \__fontspec_make_AAT_feature_string:NnnTF \font {#1} {#2} - \prg_return_true: \prg_return_false: - } - { - \prg_return_false: - } - } - { - \prg_return_false: - } - } -\prg_new_conditional:Nnn \fontspec_if_opentype: {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool \prg_return_true: \prg_return_false: - } - { - \prg_return_false: - } - } -\prg_new_conditional:Nnn \fontspec_if_feature:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-num} \l__fontspec_tmp_tl - \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl} - - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {lang-num} \l__fontspec_tmp_tl - \int_set:Nn \l__fontspec_language_int {\l__fontspec_tmp_tl} - - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l__fontspec_script_tl - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {lang-tag} \l__fontspec_lang_tl - - \__fontspec_check_ot_feat:NnTF \font {#1} {\prg_return_true:} {\prg_return_false:} - } - { - \prg_return_false: - } - } - { - \prg_return_false: - } - } -\prg_new_conditional:Nnn \fontspec_if_feature:nnn {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \__fontspec_check_ot_feat:NnnnTF \font {#3} {#2} {#1} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } -\prg_new_conditional:Nnn \fontspec_if_script:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \__fontspec_check_script:NnTF \font {#1} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } -\prg_new_conditional:Nnn \fontspec_if_language:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-num} \l__fontspec_tmp_tl - \int_set:Nn \l__fontspec_script_int {\l__fontspec_tmp_tl} - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l__fontspec_script_tl - - \__fontspec_check_lang:NnTF \font {#1} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } -\prg_new_conditional:Nnn \fontspec_if_language:nn {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \__fontspec_check_lang:NnnTF \font {#2} {#1} \prg_return_true: \prg_return_false: - } - { \prg_return_false: } - } - { \prg_return_false: } - } -\prg_new_conditional:Nnn \fontspec_if_current_script:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {script-tag} \l__fontspec_tmp_tl - \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl - {\prg_return_true:} {\prg_return_false:} - } - { \prg_return_false: } - } - { \prg_return_false: } - } -\prg_new_conditional:Nnn \fontspec_if_current_language:n {TF,T,F} - { - \fontspec_if_fontspec_font:TF - { - \__fontspec_set_font_type:N \font - \bool_if:NTF \l__fontspec_ot_bool - { - \prop_get:cnN {g__fontspec_fontinfo_ \f@family _prop} {lang-tag} \l__fontspec_tmp_tl - \str_if_eq:nVTF {#1} \l__fontspec_tmp_tl - {\prg_return_true:} {\prg_return_false:} - } - { \prg_return_false: } - } - { \prg_return_false: } - } -\cs_new:Nn \__fontspec_tl_new_if_free:N { \tl_if_exist:NF #1 { \tl_new:N #1 } } -\cs_new:Nn \__fontspec_set_family:NnnN - { - \tl_set:Nn \l__fontspec_fontface_cs_tl {\l_fontspec_font} % reset - \tl_set:Nn \l__fontspec_family_label_tl {#1} - \__fontspec_select_font_family:nn {#2} {#3} - \__fontspec_tl_new_if_free:N #1 - #4 #1 \l_fontspec_family_tl - \tl_set:Nn \l__fontspec_fontface_cs_tl {\l_fontspec_font} % reset - } -\cs_new:Nn \fontspec_gset_family:Nnn { \__fontspec_set_family:NnnN #1 {#2} {#3} \tl_gset_eq:NN } -\cs_new:Nn \fontspec_set_family:Nnn { \__fontspec_set_family:NnnN #1 {#2} {#3} \tl_set_eq:NN } -\cs_generate_variant:Nn \fontspec_set_family:Nnn {c} -\tl_new:N \l__fontspec_fontface_cs_tl -\tl_set:Nn \l__fontspec_fontface_cs_tl {\l_fontspec_font} -\cs_new:Nn \__fontspec_set_fontface:NNnnN - { - \tl_set:Nn \l__fontspec_fontface_cs_tl {#1} - \tl_set:Nn \l__fontspec_family_label_tl {#2} - \__fontspec_select_font_family:nn {#3} {#4} - #5 #2 \l_fontspec_family_tl - \tl_set:Nn \l__fontspec_fontface_cs_tl {\l_fontspec_font} % reset - } -\cs_new:Nn \fontspec_gset_fontface:NNnn { \__fontspec_set_fontface:NNnnN #1 #2 {#3} {#4} \tl_gset_eq:NN } -\cs_new:Nn \fontspec_set_fontface:NNnn { \__fontspec_set_fontface:NNnnN #1 #2 {#3} {#4} \tl_set_eq:NN } -\prg_new_conditional:Nnn \fontspec_font_if_exist:n {TF,T,F} - { - \group_begin: - \__fontspec_init: - \__fontspec_if_detect_external:nT {#1} { \__fontspec_font_is_file: } - \__fontspec_primitive_font_if_exist:nTF { \__fontspec_construct_font_call:nn {#1} {} } - { \group_end: \prg_return_true: } - { \group_end: \prg_return_false: } - } -\cs_set_eq:NN \IfFontExistsTF \fontspec_font_if_exist:nTF - -\prg_new_conditional:Nnn \fontspec_if_current_feature:n {TF,T,F} - { - \exp_args:Nxx \tl_if_in:nnTF - { \__fontspec_primitive_font_current_name: } { \tl_to_str:n {#1} } - { \prg_return_true: } { \prg_return_false: } - } -\prg_new_conditional:Nnn \fontspec_if_small_caps: {TF,T,F} - { - \__fontspec_if_merge_shape:nTF {sc} - { - \tl_set_eq:Nc \l__fontspec_smcp_shape_tl { \__fontspec_shape_merge:nn {\f@shape} {sc} } - } - { - \tl_set:Nn \l__fontspec_smcp_shape_tl {sc} - } - - \cs_if_exist:cTF { \f@encoding/\f@family/\f@series/\l__fontspec_smcp_shape_tl } - { - \tl_if_eq:ccTF - { \f@encoding/\f@family/\f@series/\l__fontspec_smcp_shape_tl } - { \f@encoding/\f@family/\f@series/\shapedefault } - { \prg_return_false: } - { \prg_return_true: } - } - { \prg_return_false: } - } - -%%^^A%% fontspec-code-internal.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\cs_new_protected:Nn \__fontspec_select_font_family:nn - { - \group_begin: - \__fontspec_font_suppress_not_found_error: - \__fontspec_init: - - \__fontspec_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2} - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_up_tl {#2} - \__fontspec_sanitise_fontname:Nn \l__fontspec_basename_tl {#2} - - \__fontspec_if_detect_external:nT {#2} - { \keys_set:nn {fontspec-preparse-external} {Path} } - - \keys_set_known:nn {fontspec-preparse-cfg} {#1} - - \__fontspec_init_ttc:n {#2} - \__fontspec_load_external_fontoptions:N \l_fontspec_fontname_tl - - \__fontspec_extract_all_features:n {#1} - \tl_set:Nx \l__fontspec_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l__fontspec_all_features_clist } - - - \__fontspec_preparse_features: - \__fontspec_load_font: - \__fontspec_set_scriptlang: - \__fontspec_get_features:n {} - \bool_set_false:N \l__fontspec_firsttime_bool - - \__fontspec_save_family_needed:nTF {#2} - { - \__fontspec_save_family:nn {#1} {#2} - } - { - } - \group_end: - - \tl_set_eq:NN \l_fontspec_family_tl \g__fontspec_nfss_family_tl - } -\cs_set_eq:NN \fontspec_select:nn \__fontspec_select_font_family:nn %% deprecated, for compatibility only -\cs_new:Nn \__fontspec_sanitise_fontname:Nn - { - \tl_set:Nx #1 {#2} - \tl_remove_all:Nn #1 {~} - \clist_map_inline:Nn \l__fontspec_extensions_clist - { - \tl_if_in:NnT #1 {##1} - { - \tl_remove_once:Nn #1 {##1} - \tl_set:Nn \l__fontspec_extension_tl {##1} - \clist_map_break: - } - } - } -\prg_new_conditional:Nnn \__fontspec_if_detect_external:n {T} - { - \clist_map_inline:Nn \l__fontspec_extensions_clist - { - \bool_set_false:N \l__fontspec_tmpa_bool - \exp_args:Nx % <- this should be handled earlier - \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string} - { \bool_set_true:N \l__fontspec_tmpa_bool \clist_map_break: } - } - \bool_if:NTF \l__fontspec_tmpa_bool \prg_return_true: \prg_return_false: - } -\cs_new:Nn \__fontspec_init_ttc:n - { - \str_if_eq:eeT { \str_lowercase:f {\l__fontspec_extension_tl} } {.ttc} - { - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_it_tl {#1} - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bf_tl {#1} - \__fontspec_sanitise_fontname:Nn \l__fontspec_fontname_bfit_tl {#1} - } - } -\cs_new:Nn \__fontspec_load_external_fontoptions:N - { - \bool_if:NT \l__fontspec_fontcfg_bool - { - \tl_set:Nx \l__fontspec_ext_filename_tl {#1.fontspec} - \tl_remove_all:Nn \l__fontspec_ext_filename_tl {~} - \prop_if_in:NVF \g__fontspec_fontopts_prop #1 - { - \exp_args:No \file_if_exist:nT { \l__fontspec_ext_filename_tl } - { \file_input:n { \l__fontspec_ext_filename_tl } } - } - } - } -\cs_new:Nn \__fontspec_extract_all_features:n - { - \bool_if:NTF \l__fontspec_disable_defaults_bool - { - \clist_set:Nx \l__fontspec_all_features_clist {#1} - } - { - \prop_get:NVNF \g__fontspec_fontopts_prop \l_fontspec_fontname_tl \l__fontspec_fontopts_clist - { \clist_clear:N \l__fontspec_fontopts_clist } - - \prop_get:NVNF \g__fontspec_fontopts_prop \l__fontspec_family_label_tl \l__fontspec_family_fontopts_clist - { \clist_clear:N \l__fontspec_family_fontopts_clist } - \tl_clear:N \l__fontspec_family_label_tl - - \clist_set:Nx \l__fontspec_all_features_clist - { - \g__fontspec_default_fontopts_clist, - \l__fontspec_family_fontopts_clist, - \l__fontspec_fontopts_clist, - #1 - } - } - } -\cs_new:Nn \__fontspec_preparse_features: - { - - \__fontspec_keys_set_known:nxN {fontspec-preparse-external} - { \l__fontspec_all_features_clist } - \l__fontspec_keys_leftover_clist - - \tl_set_eq:NN \l_fontspec_fontname_tl \l__fontspec_fontname_up_tl - \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_keys_leftover_clist} - \l__fontspec_keys_leftover_clist - \__fontspec_keys_set_known:nxN {fontspec-preparse} {\l__fontspec_keys_leftover_clist} - \l__fontspec_fontfeat_clist - } -\cs_new:Nn \__fontspec_load_font: - { - - \__fontspec_primitive_font_set:NnnF \l__fontspec_test_font - { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } { \l__fontspec_pre_feat_sclist } } - { \f@size pt - 2sp } - { \__fontspec_error:nx {font-not-found} {\l__fontspec_fontname_up_tl} } - - \__fontspec_set_font_type:N \l__fontspec_test_font - \__fontspec_primitive_font_gset:Onn \l__fontspec_fontface_cs_tl - { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } { \l__fontspec_pre_feat_sclist } } - { \f@size pt + 2sp } - - \l__fontspec_fontface_cs_tl % this is necessary for LuaLaTeX to check the scripts properly - - } -\cs_new:Nn \__fontspec_construct_font_call:nnnnnn - { - " \__fontspec_fontname_wrap:n { #1 #2 } #3 - #4 #5 - \str_if_eq:eeF {#6}{} {:#6} " - } -\cs_new:Nn \__fontspec_construct_font_call:nn - { - \__fontspec_construct_font_call:nnnnnn - {#1} - \l__fontspec_extension_tl - \l__fontspec_ttc_index_tl - \l__fontspec_renderer_tl - \l__fontspec_optical_size_tl - {#2} - } -\cs_new:Nn \__fontspec_font_is_name: - { - \cs_set_eq:NN \__fontspec_fontname_wrap:n \use:n - } -\cs_new:Nn \__fontspec_font_is_file: - { - \cs_set:Npn \__fontspec_fontname_wrap:n ##1 { [ \l__fontspec_font_path_tl ##1 ] } - } -\cs_new:Nn \__fontspec_set_scriptlang: - { - \bool_if:NT \l__fontspec_firsttime_bool - { - \tl_if_empty:NF \l__fontspec_script_name_tl - { - \keys_set:nx {fontspec-opentype} {Script=\l__fontspec_script_name_tl} - \keys_set:nx {fontspec-opentype} {Language=\l__fontspec_lang_name_tl} - } - } - } -\cs_new:Nn \__fontspec_get_features:n - { - \__fontspec_init_fontface: - \__fontspec_keys_set_known:nxN {fontspec-renderer} {\l__fontspec_fontfeat_clist,#1} - \l__fontspec_keys_leftover_clist - \__fontspec_keys_set_known:nxN {fontspec} {\l__fontspec_keys_leftover_clist} \l__fontspec_keys_leftover_clist - \keys_set:nV {fontspec-opentype} \l__fontspec_keys_leftover_clist - - \tl_if_empty:NF \l__fontspec_mapping_tl - { \__fontspec_update_featstr:n { mapping = \l__fontspec_mapping_tl } } - - \str_if_eq:eeF { \l__fontspec_hexcol_tl \l__fontspec_opacity_tl } - { \c__fontspec_hexcol_tl \c__fontspec_opacity_tl } - { \__fontspec_update_featstr:n { color = {\l__fontspec_hexcol_tl\l__fontspec_opacity_tl} } } - } -\prg_new_conditional:Nnn \__fontspec_save_family_needed:n { TF } - { - - - \tl_if_empty:NTF \l__fontspec_nfss_fam_tl - { - \prop_get:NVNTF \g__fontspec_fontid_family_prop \l__fontspec_fontid_tl \l__fontspec_tmp_tl - { - \tl_gset_eq:NN \g__fontspec_nfss_family_tl \l__fontspec_tmp_tl - \prg_return_false: - } - { - \tl_set:Nx \l__fontspec_tmp_tl {#1} - \tl_remove_all:Nn \l__fontspec_tmp_tl { ~ } - \__fontspec_save_fontid_family:VV \l__fontspec_fontid_tl \l__fontspec_tmp_tl - \prg_return_true: - } - } - { - \tl_gset_eq:NN \g__fontspec_nfss_family_tl \l__fontspec_nfss_fam_tl - \cs_undefine:c { g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop } - \prg_return_true: - } - } -\cs_new:Nn \__fontspec_save_fontid_family:nn - { - \prop_get:NnNTF \g__fontspec_family_int_prop {#2} \l__fontspec_tmp_tl - { - \tl_set:Nx \l__fontspec_tmp_tl - { \int_eval:n { \l__fontspec_tmp_tl + 1 } } - } - { \tl_set:Nn \l__fontspec_tmp_tl { 0 } } - \prop_gput:NnV \g__fontspec_family_int_prop {#2} \l__fontspec_tmp_tl - \tl_gset:Nx \g__fontspec_nfss_family_tl { #2 ( \l__fontspec_tmp_tl ) } - \prop_gput:NnV \g__fontspec_fontid_family_prop {#1} \g__fontspec_nfss_family_tl - } -\cs_generate_variant:Nn \__fontspec_save_fontid_family:nn { VV } -\cs_new:Nn \__fontspec_save_family:nn - { - \__fontspec_save_fontinfo:n {#2} - \__fontspec_find_autofonts: - \DeclareFontFamily{\g__fontspec_nfss_enc_tl}{\g__fontspec_nfss_family_tl}{} - \__fontspec_set_faces: - \__fontspec_info:nxx {defining-font} {#1} {#2} - } -\cs_new:Nn \__fontspec_save_fontinfo:n - { - \prop_new:c {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} - \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontname} { #1 } - \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {options} { \l__fontspec_all_features_clist } - \prop_gput:cnx {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {fontdef} - { - \__fontspec_construct_font_call:nn {\l_fontspec_fontname_tl} - { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist } - } - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-num} \l__fontspec_script_int - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-num} \l__fontspec_language_int - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {script-tag} \l__fontspec_script_tl - \prop_gput:cnV {g__fontspec_fontinfo_ \g__fontspec_nfss_family_tl _prop} {lang-tag} \l__fontspec_lang_tl - } -\cs_new:Nn \__fontspec_find_autofonts: - { - \bool_if:nF {\l__fontspec_noit_bool || \l__fontspec_nobf_bool} - { - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_it_tl} {/B} - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l__fontspec_fontname_bf_tl} {/I} - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI} - } - - \bool_if:NF \l__fontspec_nobf_bool - { - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bf_tl {\l_fontspec_fontname_tl} {/B} - } - - \bool_if:NF \l__fontspec_noit_bool - { - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_it_tl {\l_fontspec_fontname_tl} {/I} - } - - \__fontspec_set_autofont:Nnn \l__fontspec_fontname_bfsl_tl {\l__fontspec_fontname_sl_tl} {/B} - } -\cs_new:Nn \__fontspec_set_faces: - { - \__fontspec_add_nfssfont:nnnn \mddefault \shapedefault \l_fontspec_fontname_tl \l__fontspec_fontfeat_up_clist - \__fontspec_add_nfssfont:nnnn \bfdefault \shapedefault \l__fontspec_fontname_bf_tl \l__fontspec_fontfeat_bf_clist - \__fontspec_add_nfssfont:nnnn \mddefault \itdefault \l__fontspec_fontname_it_tl \l__fontspec_fontfeat_it_clist - \__fontspec_add_nfssfont:nnnn \mddefault \sldefault \l__fontspec_fontname_sl_tl \l__fontspec_fontfeat_sl_clist - \__fontspec_add_nfssfont:nnnn \mddefault \swdefault \l__fontspec_fontname_sw_tl \l__fontspec_fontfeat_sw_clist - \__fontspec_add_nfssfont:nnnn \bfdefault \itdefault \l__fontspec_fontname_bfit_tl \l__fontspec_fontfeat_bfit_clist - \__fontspec_add_nfssfont:nnnn \bfdefault \sldefault \l__fontspec_fontname_bfsl_tl \l__fontspec_fontfeat_bfsl_clist - \__fontspec_add_nfssfont:nnnn \bfdefault \swdefault \l__fontspec_fontname_bfsw_tl \l__fontspec_fontfeat_bfsw_clist - \prop_map_inline:Nn \l__fontspec_nfssfont_prop { \__fontspec_set_faces_aux:nnnnn ##2 } - } -\cs_new:Nn \__fontspec_set_faces_aux:nnnnn - { - \fontspec_complete_fontname:Nn \l__fontspec_curr_fontname_tl {#3} - \__fontspec_make_font_shapes:Nnnnn \l__fontspec_curr_fontname_tl {#1} {#2} {#4} {#5} - } -\cs_new:Nn \fontspec_complete_fontname:Nn - { - \tl_set:Nx #1 {#2} - \tl_replace_all:Nnx #1 {*} {\l__fontspec_basename_tl} - \tl_remove_all:Nn #1 {~} - } -\cs_new:Nn \__fontspec_add_nfssfont:nnnn - { - \tl_set:Nx \l__fontspec_this_font_tl {#3} - - \tl_if_empty:xTF {#4} - { \clist_set:Nn \l__fontspec_sizefeat_clist {Size={-}} } - { \__fontspec_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l__fontspec_tmp_tl } - - \tl_if_empty:NF \l__fontspec_this_font_tl - { - \prop_put:Nxx \l__fontspec_nfssfont_prop {#1/#2} - { {#1}{#2}{\l__fontspec_this_font_tl}{#4}{\l__fontspec_sizefeat_clist} } - } - } -\cs_new:Nn \__fontspec_set_font_type:N - { - \bool_set_true:N \l__fontspec_ot_bool - } -\cs_new:Nn \__fontspec_set_autofont:Nnn - { - \bool_if:NF \l__fontspec_external_bool - { - \tl_if_empty:xF {#2} - { - \tl_if_empty:NT #1 - { - \__fontspec_if_autofont:nnTF {#2} {#3} - { \tl_set:Nx #1 {#2#3} } - { \__fontspec_info:nx {no-font-shape} {#2#3} } - } - } - } - } -\prg_new_conditional:Nnn \__fontspec_if_autofont:nn {T,TF} - { - \group_begin: - \__fontspec_primitive_font_set:Nnn \l__fontspec_tmpa_font { \__fontspec_construct_font_call:nn {#1} { \l__fontspec_pre_feat_sclist } } { \f@size pt + 1sp } - \__fontspec_primitive_font_set:Nnn \l__fontspec_tmpb_font { \__fontspec_construct_font_call:nn {#1#2} { \l__fontspec_pre_feat_sclist } } { \f@size pt + 1sp } - \str_if_eq:eeTF { \__fontspec_primitive_font_get_name:N \l__fontspec_tmpa_font } { \__fontspec_primitive_font_get_name:N \l__fontspec_tmpb_font } - { \group_end: \prg_return_false: } - { \group_end: \prg_return_true: } - } -\cs_new:Nn \__fontspec_make_font_shapes:Nnnnn - { - \group_begin: - \__fontspec_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l__fontspec_leftover_clist - \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {#1} - \__fontspec_declare_shape:nnxx {#2} {#3} { \l__fontspec_fontopts_clist, \l__fontspec_leftover_clist } {#5} - \group_end: - } -\cs_new:Nn \__fontspec_load_fontname:Nn - { - \__fontspec_sanitise_fontname:Nn #1 {#2} - \__fontspec_load_external_fontoptions:N #1 - \prop_get:NVNF \g__fontspec_fontopts_prop #1 \l__fontspec_fontopts_clist - { \clist_clear:N \l__fontspec_fontopts_clist } - \keys_set_groups:nnV {fontspec/fontname} {getfontname} \l__fontspec_fontopts_clist - \__fontspec_primitive_font_set:OnnF \l__fontspec_fontface_cs_tl - { \__fontspec_construct_font_call:nn {#1} { \l__fontspec_pre_feat_sclist } } { \f@size pt + 2sp } - { \__fontspec_error:nx {font-not-found} {#2} } - } -\keys_define:nn {fontspec/fontname} - { - Font .tl_set:N = \l_fontspec_fontname_tl , - Font .groups:n = {getfontname} , - } -\cs_new:Nn \__fontspec_declare_shape:nnnn - { - \tl_build_begin:N \l__fontspec_nfss_tl - \tl_build_begin:N \l__fontspec_nfss_sc_tl - \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl - - \exp_args:Nx \clist_map_inline:nn {#4} { \__fontspec_setup_single_size:nn {#3} {##1} } - - \tl_build_end:N \l__fontspec_nfss_tl - \tl_build_end:N \l__fontspec_nfss_sc_tl - - \__fontspec_declare_shapes_normal:nn {#1} {#2} - \__fontspec_declare_shapes_smcaps:nn {#1} {#2} - \__fontspec_declare_shape_slanted:nn {#1} {#2} - \__fontspec_declare_shapes_bx:nn {#1} {#2} - \__fontspec_declare_shape_loginfo:nn {#1} {#2} - } -\cs_generate_variant:Nn \__fontspec_declare_shape:nnnn {nnxx} -\cs_new:Nn \__fontspec_setup_single_size:nn - { - \tl_clear:N \l__fontspec_size_tl - \tl_set_eq:NN \l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed - - \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n #2 } - \l__fontspec_sizing_leftover_clist - \tl_if_empty:NT \l__fontspec_size_tl { \__fontspec_error:n {no-size-info} } - - % "normal" - \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl} - \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_tl {#1} {\l__fontspec_sizing_leftover_clist} {} - - % small caps - \clist_set_eq:NN \l__fontspec_fontfeat_curr_clist \l__fontspec_fontfeat_sc_clist - - \bool_if:NF \l__fontspec_nosc_bool - { - \tl_if_empty:NTF \l__fontspec_fontname_sc_tl - { - \__fontspec_make_smallcaps:TF - { - \clist_put_left:Nn \l__fontspec_fontfeat_curr_clist {Letters=SmallCaps} - } - { - \bool_set_true:N \l__fontspec_nosc_bool - } - } - { \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_fontname_sc_tl} }% local for each size - } - - \bool_if:NF \l__fontspec_nosc_bool - { - \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_sc_tl - {#1} {\l__fontspec_sizing_leftover_clist} {\l__fontspec_fontfeat_curr_clist} - } - } -\cs_new:Nn \__fontspec_setup_nfss:Nnnn - { - - \__fontspec_get_features:n { #2 , #3 , #4 } - - \tl_if_empty:NF \l__fontspec_scale_tl - { - \tl_set:Nx \l__fontspec_scale_tl { s*[\l__fontspec_scale_tl] } - } - - \tl_build_put_right:Nx #1 - { - <\l__fontspec_size_tl> \l__fontspec_scale_tl - \__fontspec_construct_font_call:nn { \l_fontspec_fontname_tl } - { \l__fontspec_pre_feat_sclist \g__fontspec_rawfeatures_sclist } - } - } -\cs_new:Nn \__fontspec_declare_shapes_normal:nn - { - \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl} - {#1} {#2} {\l__fontspec_nfss_tl}{\l__fontspec_postadjust_tl} - } -\cs_new:Nn \__fontspec_declare_shapes_smcaps:nn - { - \tl_if_empty:NF \l__fontspec_nfss_sc_tl - { - \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl} {#1} - { \__fontspec_combo_sc_shape:n {#2} } {\l__fontspec_nfss_sc_tl} {\l__fontspec_postadjust_tl} - } - } -\cs_new:Nn \__fontspec_combo_sc_shape:n - { - \tl_if_exist:cTF { \__fontspec_shape_merge:nn {#1} {\scdefault} } - { \tl_use:c { \__fontspec_shape_merge:nn {#1} {\scdefault} } } - { \scdefault#1 } - } -\cs_new:Nn \__fontspec_DeclareFontShape:nnnnnn - { -\group_begin: -\normalsize -\cs_undefine:c {#1/#2/#3/#4/\f@size} -\group_end: -\DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6} - } -\cs_generate_variant:Nn \__fontspec_DeclareFontShape:nnnnnn {xxxxxx} -\cs_new:Nn \__fontspec_declare_shape_slanted:nn - { - \bool_if:nT - { - \str_if_eq_p:ee {#2} {\itdefault} && - !(\str_if_eq_p:ee {\itdefault} {\sldefault}) - } - { - \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl}{\g__fontspec_nfss_family_tl}{#1}{\sldefault} - {<->ssub*\g__fontspec_nfss_family_tl/#1/\itdefault}{\l__fontspec_postadjust_tl} - } - } -\cs_new:Nn \__fontspec_declare_shapes_bx:nn - { - \bool_if:nT - { - \str_if_eq_p:ee {#1} {\bfdefault} && - !(\str_if_eq_p:ee {\bfdefault} {bx}) - } - { - % bx/? - \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl} - {bx} {#2} - { <->ssub*\g__fontspec_nfss_family_tl/\bfdefault/#2 } - { \l__fontspec_postadjust_tl } - - % bx/sc -> b/sc - \tl_if_empty:NF \l__fontspec_nfss_sc_tl - { - \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl} - {bx} { \__fontspec_combo_sc_shape:n {#2} } - { <->ssub*\g__fontspec_nfss_family_tl/\bfdefault/#2 } - { \l__fontspec_postadjust_tl } - } - - % bx/sl -> bx/it - \bool_if:nT - { - \str_if_eq_p:ee {#2} {\itdefault} && - !(\str_if_eq_p:ee {\itdefault} {\sldefault}) - } - { - \__fontspec_DeclareFontShape:xxxxxx {\g__fontspec_nfss_enc_tl} {\g__fontspec_nfss_family_tl} - {bx} {\sldefault} - { <->ssub*\g__fontspec_nfss_family_tl/bx/\itdefault } - { \l__fontspec_postadjust_tl } - } - - } - } -\cs_new:Nn \__fontspec_declare_shape_loginfo:nn - { - \tl_gput_right:Nx \g__fontspec_defined_shapes_tl - { - \exp_not:n { \\ } - -~ \exp_not:N \str_case:nn {#1/#2} - { - {\mddefault/\shapedefault} {'normal'~} - {\bfdefault/\shapedefault} {'bold'~} - {\mddefault/\itdefault} {'italic'~} - {\mddefault/\sldefault} {'slanted'~} - {\mddefault/\swdefault} {'swash'~} - {\bfdefault/\itdefault} {'bold~ italic'~} - {\bfdefault/\sldefault} {'bold~ slanted'~} - {\bfdefault/\swdefault} {'bold~ swash'~} - } (#1/#2)~ - with~ NFSS~ spec.:~ - \l__fontspec_nfss_tl - \exp_not:n { \\ } - -~ \exp_not:N \str_case:nn { #1 / \__fontspec_combo_sc_shape:n {#2} } - { - {\mddefault/\scdefault} {'small~ caps'~} - {\bfdefault/\scdefault} {'bold~ small~ caps'~} - {\mddefault/\scitdefault} {'italic~ small~ caps'~} - {\bfdefault/\scitdefault} {'bold~ italic~ small~ caps'~} - {\mddefault/\scsldefault} {'slanted~ small~ caps'~} - {\bfdefault/\scsldefault} {'bold~ slanted~ small~ caps'~} - }~( #1 / \__fontspec_combo_sc_shape:n {#2} )~ - with~ NFSS~ spec.:~ - \l__fontspec_nfss_sc_tl - \tl_if_empty:fF {\l__fontspec_postadjust_tl} - { - \exp_not:N \\ and~ font~ adjustment~ code: - \exp_not:N \\ \l__fontspec_postadjust_tl - } - } - } -\tl_set:Nn \l__fontspec_pre_feat_sclist - { - mode = \l__fontspec_mode_tl ; - \tl_if_empty:NF \l__fontspec_shaper_tl { shaper = \l__fontspec_shaper_tl ; } - \tl_if_empty:NF \l__fontspec_script_tl { script = \l__fontspec_script_tl ; } - \tl_if_empty:NF \l__fontspec_lang_tl { language = \l__fontspec_lang_tl ; } - } -\cs_new:Nn \__fontspec_make_smallcaps:TF - { - \exp_args:No \__fontspec_check_ot_feat:NnTF \l__fontspec_fontface_cs_tl {smcp} {#1} {#2} - } -\cs_new:Nn \__fontspec_update_featstr:n - { - \bool_if:NF \l__fontspec_firsttime_bool - { - \tl_gset:Nx \g__fontspec_single_feat_tl { #1 } - \tl_gput_right:Nx \g__fontspec_rawfeatures_sclist {#1;} - } - } -\cs_new:Nn \__fontspec_remove_clashing_featstr:n - { - \clist_map_inline:nn {#1} - { - \tl_gremove_all:Nn \g__fontspec_rawfeatures_sclist {##1;} - } - } -\cs_generate_variant:Nn \__fontspec_remove_clashing_featstr:n {x} -\cs_set:Npn \__fontspec_init: - { - \bool_set_false:N \l__fontspec_ot_bool - \bool_set_true:N \l__fontspec_firsttime_bool - \__fontspec_font_is_name: - \tl_clear:N \l__fontspec_font_path_tl - \tl_clear:N \l__fontspec_optical_size_tl - \tl_clear:N \l__fontspec_ttc_index_tl - \tl_clear:N \l__fontspec_renderer_tl - \tl_gclear:N \g__fontspec_defined_shapes_tl - \tl_gclear:N \g__fontspec_curr_series_tl - \tl_gset_eq:NN \g__fontspec_nfss_enc_tl \g_fontspec_encoding_tl - \tl_set:Nn \l__fontspec_mode_tl {node} - \int_set:Nn \prehyphenchar { `\- } % fixme - \int_zero:N \posthyphenchar % fixme - \int_zero:N \preexhyphenchar % fixme - \int_zero:N \postexhyphenchar % fixme - } -\cs_new:Nn \__fontspec_init_fontface: - { - \tl_gclear:N \g__fontspec_rawfeatures_sclist - \tl_clear:N \l__fontspec_scale_tl - \tl_set_eq:NN \l__fontspec_opacity_tl \c__fontspec_opacity_tl - \tl_set_eq:NN \l__fontspec_hexcol_tl \c__fontspec_hexcol_tl - \tl_set_eq:NN \l__fontspec_postadjust_tl \c__fontspec_postadjust_tl - \tl_clear:N \l__fontspec_wordspace_adjust_tl - \tl_clear:N \l__fontspec_punctspace_adjust_tl - } -\cs_new_protected:Nn \__fontspec_ot_validate_tag:n - { - \__fontspec_ot_validate_tag:w #1 \q_nil - } -\cs_generate_variant:Nn \__fontspec_ot_validate_tag:n {x} -\cs_set:Npn \__fontspec_ot_validate_tag:w #1 #2 \q_nil - { - \bool_if:nTF { \str_if_eq_p:nn {#1} {+} || \str_if_eq_p:nn {#1} {-} } - { \__fontspec_ot_validate_tag_aux:w #2 \c_empty_tl \c_empty_tl \q_nil } - { \__fontspec_ot_validate_tag_aux:w #1#2 \c_empty_tl \c_empty_tl \q_nil } - } -\cs_set:Npn \__fontspec_ot_validate_tag_aux:w #1#2#3#4#5 \q_nil - { - \int_compare:nT { \tl_count:n {#5} > 2 } - { \__fontspec_error:nx {ot-tag-too-long} {#1#2#3#4#5} } - } - -%%^^A%% fontspec-code-opentype.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\cs_new:Nn \__fontspec_define_opentype_feature_group:n - { - \keys_define:nn {fontspec-opentype} { #1 .multichoice: , .groups:n = {opentype} } - } -\cs_new:Nn \__fontspec_feat_prop_add:nn - { - \tl_if_empty:nF {#1} - { - \prop_if_in:NnF \g__fontspec_OT_features_prop {#1} - { - \prop_gput:Nnn \g__fontspec_OT_features_prop {#1} {#2} - } - } - } -\cs_new:Nn \__fontspec_define_opentype_feature:nnnnn - { - \__fontspec_feat_prop_add:nn {#3} {#1\,=\,#2} - \tl_if_empty:nTF {#4} - { - \keys_define:nn {fontspec-opentype} - { - #1/#2 .code:n = - { \__fontspec_remove_clashing_featstr:n {#5} } , - #1/#2 .groups:n = {opentype} - } - } - { - \keys_define:nn {fontspec-opentype} - { - #1/#2 .code:n = - { - \__fontspec_make_OT_feature:nnn {#3} {#4} {#5} - } , - #1/#2 .groups:n = {opentype} - } - } - } -\cs_new:Nn \__fontspec_feat_off:n {#1Off} -\cs_new:Nn \__fontspec_feat_reset:n {#1Reset} -\cs_new:Nn \__fontspec_define_opentype_onoffreset:nnnnn - { - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5} - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_off:n {#2} } {#3} {-#4} {} - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {+#4,-#4} - } -\cs_new:Nn \__fontspec_define_opentype_onreset:nnnnn - { - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5} - \exp_args:Nnx \__fontspec_define_opentype_feature:nnnnn {#1} { \__fontspec_feat_reset:n {#2} } {} {} {#4} - } -\cs_new:Nn \__fontspec_make_OT_feature:nnn - { - - \bool_set_true:N \l__fontspec_proceed_bool - - \tl_if_empty:nF {#1} - { - \exp_args:No \__fontspec_check_ot_feat:NnF \l__fontspec_fontface_cs_tl {#1} - { - \__fontspec_warning:nx {icu-feature-not-exist-in-font} {#1} - \bool_set_false:N \l__fontspec_proceed_bool - } - } - - \__fontspec_remove_clashing_featstr:x { #2 , \__fontspec_swap_plus_minus:n {#2} , #3 } - - \bool_if:NT \l__fontspec_proceed_bool { \__fontspec_update_featstr:n {#2} } - } -\cs_generate_variant:Nn \__fontspec_make_OT_feature:nnn {xxx} -\cs_new:Nn \__fontspec_swap_plus_minus:n { \__fontspec_swap_plus_minus_aux:Nq #1 \q_nil } -\cs_new:Npn \__fontspec_swap_plus_minus_aux:Nq #1#2 \q_nil - { \str_case:nn {#1} { {+} {-#2} {-} {+#2} } } -\prg_new_conditional:Nnn \__fontspec_check_script:Nn {TF,T} - { - \bool_if:NTF \l__fontspec_never_check_bool - { \prg_return_true: } - { - \bool_if:nTF { \tl_if_empty_p:e {#2} } - { \prg_return_false: } - { - \__fontspec_ot_validate_tag:x {#2} - \cs_if_eq:NNTF #1 \font - { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} } - { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} } - \lua_now:e { fontspec.check_ot_script("\l__fontspec_tmp_tl", "#2") } - \bool_if:NTF \l__fontspec_check_bool - { - \prg_return_true: - } - { - \prg_return_false: - } - } - } - } -\prg_new_conditional:Nnn \__fontspec_check_lang:Nn {TF} - { - \__fontspec_check_lang:NnnTF #1 {#2} {\l__fontspec_script_tl} {\prg_return_true:} {\prg_return_false:} - } -\prg_new_conditional:Nnn \__fontspec_check_lang:Nnn {TF} - { - \bool_if:NTF \l__fontspec_never_check_bool - { \prg_return_true: } - { - \bool_if:nTF { \tl_if_empty_p:e {#3} } - { \prg_return_false: } - { - \__fontspec_ot_validate_tag:x {#2} - \__fontspec_ot_validate_tag:x {#3} - \cs_if_eq:NNTF #1 \font - { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} } - { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} } - \__fontspec_lua_function:neee {check_ot_lang} {\l__fontspec_tmp_tl} {#2} {#3} - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } - } - } -\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nn {TF,F} - { - \__fontspec_check_ot_feat:NnnnTF #1 {#2} {\l__fontspec_lang_tl} {\l__fontspec_script_tl} - {\prg_return_true:} {\prg_return_false:} - } -\prg_new_conditional:Nnn \__fontspec_check_ot_feat:Nnnn {TF,F} - { - \bool_if:NTF \l__fontspec_never_check_bool - { \prg_return_true: } - { - \bool_if:nTF { \tl_if_empty_p:e {#3} || \tl_if_empty_p:e {#4} } - { \prg_return_false: } - { - \__fontspec_ot_validate_tag:x {#2} - \__fontspec_ot_validate_tag:x {#3} - \__fontspec_ot_validate_tag:x {#4} - \cs_if_eq:NNTF #1 \font - { \tl_set:Nx \l__fontspec_tmp_tl {\curr@fontshape/\f@size} } - { \tl_set:Nx \l__fontspec_tmp_tl {\cs_to_str:N #1} } - \__fontspec_lua_function:neeee {check_ot_feat} {\l__fontspec_tmp_tl} {#2} {#3} {#4} - \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false: - } - } - } -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {aalt}{Access~All~Alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvf}{Above-base~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvm}{Above-base~Mark~Positioning} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {abvs}{Above-base~Substitutions} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {afrc}{Alternative~Fractions} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {akhn}{Akhands} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blwf}{Below-base~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blwm}{Below-base~Mark~Positioning} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {blws}{Below-base~Substitutions} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {calt}{Contextual~Alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {case}{Case-Sensitive~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ccmp}{Glyph~Composition~/~Decomposition} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cfar}{Conjunct~Form~After~Ro} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cjct}{Conjunct~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {clig}{Contextual~Ligatures} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cpct}{Centered~CJK~Punctuation} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cpsp}{Capital~Spacing} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cswh}{Contextual~Swash} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {curs}{Cursive~Positioning} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {cvNN}{Character~Variant~$N$} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {c2pc}{Petite~Capitals~From~Capitals} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {c2sc}{Small~Capitals~From~Capitals} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dist}{Distances} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dlig}{Discretionary~Ligatures} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dnom}{Denominators} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {dtls}{Dotless~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {expt}{Expert~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {falt}{Final~Glyph~on~Line~Alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fin2}{Terminal~Forms~\#2} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fin3}{Terminal~Forms~\#3} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fina}{Terminal~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {flac}{Flattened~accent~forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {frac}{Fractions} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {fwid}{Full~Widths} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {half}{Half~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {haln}{Halant~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {halt}{Alternate~Half~Widths} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hist}{Historical~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hkna}{Horizontal~Kana~Alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hlig}{Historical~Ligatures} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hngl}{Hangul} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hojo}{Hojo~Kanji~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {hwid}{Half~Widths} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {init}{Initial~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {isol}{Isolated~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ital}{Italics} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jalt}{Justification~Alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp78}{JIS78~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp83}{JIS83~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp90}{JIS90~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {jp04}{JIS2004~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {kern}{Kerning} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {lfbd}{Left~Bounds} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {liga}{Standard~Ligatures} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ljmo}{Leading~Jamo~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {lnum}{Lining~Figures} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {locl}{Localized~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ltra}{Left-to-right~alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ltrm}{Left-to-right~mirrored~forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mark}{Mark~Positioning} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {med2}{Medial~Forms~\#2} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {medi}{Medial~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mgrk}{Mathematical~Greek} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mkmk}{Mark~to~Mark~Positioning} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {mset}{Mark~Positioning~via~Substitution} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nalt}{Alternate~Annotation~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nlck}{NLC~Kanji~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {nukt}{Nukta~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {numr}{Numerators} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {onum}{Oldstyle~Figures} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {opbd}{Optical~Bounds} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ordn}{Ordinals} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ornm}{Ornaments} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {palt}{Proportional~Alternate~Widths} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pcap}{Petite~Capitals} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pkna}{Proportional~Kana} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pnum}{Proportional~Figures} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pref}{Pre-Base~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pres}{Pre-base~Substitutions} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pstf}{Post-base~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {psts}{Post-base~Substitutions} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {pwid}{Proportional~Widths} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {qwid}{Quarter~Widths} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rand}{Randomize} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rclt}{Required~Contextual~Alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rkrf}{Rakar~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rlig}{Required~Ligatures} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rphf}{Reph~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtbd}{Right~Bounds} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtla}{Right-to-left~alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rtlm}{Right-to-left~mirrored~forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ruby}{Ruby~Notation~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {rvrn}{Required~Variation~Alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {salt}{Stylistic~Alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {sinf}{Scientific~Inferiors} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {size}{Optical~size} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {smcp}{Small~Capitals} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {smpl}{Simplified~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ssNN}{Stylistic~Set~$N$} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {ssty}{Math~script~style~alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {stch}{Stretching~Glyph~Decomposition} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {subs}{Subscript} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {sups}{Superscript} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {swsh}{Swash} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {titl}{Titling} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tjmo}{Trailing~Jamo~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tnam}{Traditional~Name~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {tnum}{Tabular~Figures} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {trad}{Traditional~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {twid}{Third~Widths} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {unic}{Unicase} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {valt}{Alternate~Vertical~Metrics} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vatu}{Vattu~Variants} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vert}{Vertical~Writing} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vhal}{Alternate~Vertical~Half~Metrics} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vjmo}{Vowel~Jamo~Forms} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vkna}{Vertical~Kana~Alternates} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vkrn}{Vertical~Kerning} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vpal}{Proportional~Alternate~Vertical~Metrics} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vrt2}{Vertical~Alternates~and~Rotation} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {vrtr}{Vertical~Alternates~for~Rotation} -\prop_gput:Nnn \g__fontspec_all_opentype_feature_names_prop {zero}{Slashed~Zero} - -%%^^A%% fontspec-code-graphite.dtx -- part of FONTSPEC <wspr.io/fontspec> - - -%%^^A%% fontspec-code-keyval.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\clist_gset:Nn \g__fontspec_all_keyval_modules_clist - { - fontspec, fontspec-opentype, fontspec-aat, - fontspec-preparse, fontspec-preparse-cfg, fontspec-preparse-external, fontspec-preparse-nested, - fontspec-renderer - } -\cs_new:Nn \__fontspec_keys_define_code:nnn - { - \keys_define:nn {#1} { #2 .code:n = {#3} } - } -\cs_new:Nn \__fontspec_aff_error:n - { - \__fontspec_keys_define_code:nnn {fontspec-addfeatures} {#1} - { \__fontspec_error:nx {not-in-addfontfeatures} {#1} } - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-cfg} {IgnoreFontspecFile} - { - \bool_set_false:N \l__fontspec_fontcfg_bool - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {IgnoreFontspecFile} - { - \bool_set_false:N \l__fontspec_fontcfg_bool - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Path} - { - \bool_set_true:N \l__fontspec_nobf_bool - \bool_set_true:N \l__fontspec_noit_bool - \bool_set_true:N \l__fontspec_external_bool - \tl_set:Nn \l__fontspec_font_path_tl {#1} - \__fontspec_font_is_file: - } -\aliasfontfeature{Path}{ExternalLocation} -\__fontspec_keys_define_code:nnn {fontspec} {Path} {} -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {Extension} - { - \tl_set:Nn \l__fontspec_extension_tl {#1} - \bool_if:NF \l__fontspec_external_bool - { - \keys_set:nn {fontspec-preparse-external} {Path} - } - } -\tl_clear:N \l__fontspec_extension_tl -\__fontspec_keys_define_code:nnn {fontspec} {Extension} {} -\keys_define:nn {fontspec-renderer} - { - Renderer .choices:nn = - {Full,Node,Basic,Base,HarfBuzz,Harfbuzz,OpenType,AAT,Graphite} - { - \int_compare:nT {\l_keys_choice_int >= 5} { \bool_set_true:N \l__fontspec_harfbuzz_bool } - - \tl_set:Nx \l__fontspec_mode_tl - { - \int_case:nn \l_keys_choice_int { 1 {node} 2 {node} 3 {base} 4 {base} 5 {harf} 6 {harf} 7 {harf} 8 {harf} 9 {harf}} - } - - \tl_set:Nx \l__fontspec_shaper_tl - { - \int_case:nn \l_keys_choice_int { 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {ot} 8 {coretext_aat} 9 {graphite2} } - } - - - \tl_gset:Nx \g__fontspec_single_feat_tl - { - mode=\l__fontspec_mode_tl ; - \tl_if_empty:NF \l__fontspec_shaper_tl { shaper=\l__fontspec_shaper_tl} - } - } , - - Renderer unknown .code:n = - { - \bool_set_true:N \l__fontspec_harfbuzz_bool - \__fontspec_warning:nx {unknown-renderer} {#1} - \tl_set:Nn \l__fontspec_mode_tl {harf} - \tl_set:Nn \l__fontspec_shaper_tl {#1} - } , - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {Script} - { - \tl_set:Nn \l__fontspec_script_name_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {Language} - { - \tl_set:Nn \l__fontspec_lang_name_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {FontIndex} - { - \str_if_eq:eeF { \str_lowercase:f {\l__fontspec_extension_tl} } {.ttc} - { \__fontspec_warning:n {font-index-needs-ttc} } - \tl_set:Nn \l__fontspec_ttc_index_tl {(#1)} - } -\__fontspec_keys_define_code:nnn {fontspec} {FontIndex} - { - \tl_set:Nn \l__fontspec_ttc_index_tl {(#1)} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {UprightFont} - { - \fontspec_complete_fontname:Nn \l__fontspec_fontname_up_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {ItalicFont} - { - \tl_if_empty:nTF {#1} - { - \bool_set_true:N \l__fontspec_noit_bool - } - { - \bool_set_false:N \l__fontspec_noit_bool - \fontspec_complete_fontname:Nn \l__fontspec_fontname_it_tl {#1} - } - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {SlantedFont} - { - \fontspec_complete_fontname:Nn \l__fontspec_fontname_sl_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {SwashFont} - { - \fontspec_complete_fontname:Nn \l__fontspec_fontname_sw_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldFont} - { - \tl_if_empty:nTF {#1} - { - \bool_set_true:N \l__fontspec_nobf_bool - } - { - \bool_set_false:N \l__fontspec_nobf_bool - \fontspec_complete_fontname:Nn \l__fontspec_curr_bfname_tl {#1} - - \seq_if_empty:NT \l__fontspec_bf_series_seq - { - \tl_gset:Nx \g__fontspec_curr_series_tl {\bfdefault} - \seq_put_right:Nx \l__fontspec_bf_series_seq {\bfdefault} - } - - \tl_if_eq:oxT \g__fontspec_curr_series_tl {\bfdefault} - { - \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l__fontspec_curr_bfname_tl - } - - \prop_put:NxV \l__fontspec_nfss_prop {BoldFont-\g__fontspec_curr_series_tl} \l__fontspec_curr_bfname_tl - - - } - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldItalicFont} - { - \fontspec_complete_fontname:Nn \l__fontspec_fontname_bfit_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSlantedFont} - { - \fontspec_complete_fontname:Nn \l__fontspec_fontname_bfsl_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-external} {BoldSwashFont} - { - \fontspec_complete_fontname:Nn \l__fontspec_fontname_bfsw_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFont} - { - \tl_if_empty:nTF {#1} - { - \bool_set_true:N \l__fontspec_nosc_bool - } - { - \bool_set_false:N \l__fontspec_nosc_bool - \fontspec_complete_fontname:Nn \l__fontspec_fontname_sc_tl {#1} - } - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {UprightFeatures} - { - \clist_put_right:Nn \l__fontspec_fontfeat_up_clist {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldFeatures} - { - \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures} - { - \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures} - { - \clist_put_right:Nn \l__fontspec_fontfeat_bfit_clist {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures} - { - \clist_put_right:Nn \l__fontspec_fontfeat_sl_clist {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures} - { - \clist_put_right:Nn \l__fontspec_fontfeat_bfsl_clist {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {SwashFeatures} - { - \clist_put_right:Nn \l__fontspec_fontfeat_sw_clist {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {BoldSwashFeatures} - { - \clist_put_right:Nn \l__fontspec_fontfeat_bfsw_clist {#1} - } -\__fontspec_keys_define_code:nnn {fontspec} {SmallCapsFeatures} - { - \bool_if:NF \l__fontspec_firsttime_bool - { - \clist_put_right:Nn \l__fontspec_fontfeat_sc_clist {#1} - } - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {SizeFeatures} - { - \clist_set:Nn \l__fontspec_sizefeat_clist {#1} - \clist_put_right:Nn \l__fontspec_fontfeat_up_clist { SizeFeatures = {#1} } - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {SizeFeatures} - { - \clist_set:Nn \l__fontspec_sizefeat_clist {#1} - \tl_if_empty:NT \l__fontspec_this_font_tl - { \tl_set:Nn \l__fontspec_this_font_tl { -- } } % needs to be non-empty as a flag - } -\__fontspec_keys_define_code:nnn {fontspec-preparse-nested} {Font} - { - \tl_set:Nn \l__fontspec_this_font_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec} {SizeFeatures} - { - % dummy - } -\__fontspec_keys_define_code:nnn {fontspec} {Font} - { - % dummy - } -\__fontspec_keys_define_code:nnn {fontspec-sizing} {Size} - { - \tl_set:Nn \l__fontspec_size_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-sizing} {Font} - { - \fontspec_complete_fontname:Nn \l__fontspec_sizedfont_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-opentype} {UprightFont} {} -\__fontspec_keys_define_code:nnn {fontspec-opentype} {ItalicFont} {} -\__fontspec_keys_define_code:nnn {fontspec-opentype} {SlantedFont} {} -\__fontspec_keys_define_code:nnn {fontspec-opentype} {BoldFont} {} -\__fontspec_keys_define_code:nnn {fontspec-opentype} {BoldItalicFont} {} -\__fontspec_keys_define_code:nnn {fontspec-opentype} {BoldSlantedFont} {} -\__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSEncoding} - { - \tl_gset:Nx \g__fontspec_nfss_enc_tl { #1 } - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {NFSSFamily} - { - \tl_set:Nx \l__fontspec_nfss_fam_tl { #1 } - } -\__fontspec_keys_define_code:nnn {fontspec-preparse} {FontFace} - { - \tl_clear:N \l__fontspec_this_font_tl - \clist_set:No \l__fontspec_arg_clist { \use_iii:nnn #1 } - \clist_set_eq:NN \l__fontspec_this_feat_clist \l__fontspec_arg_clist - \int_compare:nT { \clist_count:N \l__fontspec_arg_clist = 1 } - { - \tl_if_in:NnF \l__fontspec_arg_clist {=} - { - \tl_set_eq:NN \l__fontspec_this_font_tl \l__fontspec_arg_clist - \tl_clear:N \l__fontspec_this_feat_clist - } - } - - \__fontspec_add_nfssfont:nnnn - {\use_i:nnn #1} {\use_ii:nnn #1} {\l__fontspec_this_font_tl} {\l__fontspec_this_feat_clist} - } -\__fontspec_keys_define_code:nnn {fontspec} {Scale} - { - \str_case:nnF {#1} - { - {MatchLowercase} { \__fontspec_calc_scale:n {5} } - {MatchUppercase} { \__fontspec_calc_scale:n {8} } - } - { \tl_set:Nx \l__fontspec_scale_tl {#1} } - } -\__fontspec_keys_define_code:nnn {fontspec} {ScaleAgain} - { - \tl_if_empty:NT \l__fontspec_scale_tl { \tl_set:Nn \l__fontspec_scale_tl {1} } - \tl_set:Nx \l__fontspec_scale_tl { \fp_eval:n { #1 * \l__fontspec_scale_tl } } - \__fontspec_info:n {set-scale} - } -\cs_new:Nn \__fontspec_calc_scale:n - { - \group_begin: - - \fontencoding { \encodingdefault } - \fontfamily { \familydefault } - \selectfont - - \__fontspec_set_font_dimen:NnN \l__fontspec_tmpa_dim {#1} \font - \__fontspec_set_font_dimen:NnN \l__fontspec_tmpb_dim {#1} \l__fontspec_fontface_cs_tl - - \tl_set:Nx \l__fontspec_scale_tl - { - \fp_eval:n { \dim_to_fp:n {\l__fontspec_tmpa_dim} / - \dim_to_fp:n {\l__fontspec_tmpb_dim} } - } - - \__fontspec_info:n {set-scale} - \exp_args:NNNx - \group_end: - \tl_set:Nx \l__fontspec_scale_tl { \l__fontspec_scale_tl } - } -\cs_new:Nn \__fontspec_set_font_dimen:NnN - { - \dim_set:Nn #1 { \fontdimen #2 #3 } - \dim_compare:nNnT #1 = {0pt} - { - \settoheight #1 - { - \str_if_eq:nnTF {#3} {\font} \rmfamily #3 - \int_case:nnF #2 - { - {5} {x} % x-height - {8} {X} % cap-height - } {?} % "else" clause; never reached. - } - } - } -\__fontspec_keys_define_code:nnn {fontspec} {WordSpace} - { - \bool_if:NF \l__fontspec_firsttime_bool - { \_fontspec_parse_wordspace:w #1,,,\q_stop } - } -\__fontspec_aff_error:n {WordSpace} -\cs_set:Npn \_fontspec_parse_wordspace:w #1,#2,#3,#4 \q_stop - { - \tl_if_empty:nTF {#4} - { - \tl_set:Nn \l__fontspec_wordspace_adjust_tl - { - \fontdimen 2 \font = #1 \fontdimen 2 \font - \fontdimen 3 \font = #1 \fontdimen 3 \font - \fontdimen 4 \font = #1 \fontdimen 4 \font - } - } - { - \tl_set:Nn \l__fontspec_wordspace_adjust_tl - { - \fontdimen 2 \font = #1 \fontdimen 2 \font - \fontdimen 3 \font = #2 \fontdimen 3 \font - \fontdimen 4 \font = #3 \fontdimen 4 \font - } - } - } -\__fontspec_keys_define_code:nnn {fontspec} {PunctuationSpace} - { - \str_case_e:nnF {#1} - { - {WordSpace} - { - \tl_set:Nn \l__fontspec_punctspace_adjust_tl - { \fontdimen 7 \font = 0 \fontdimen 2 \font } - } - {TwiceWordSpace} - { - \tl_set:Nn \l__fontspec_punctspace_adjust_tl - { \fontdimen 7 \font = 1 \fontdimen 2 \font } - } - } - { - \tl_set:Nn \l__fontspec_punctspace_adjust_tl - { \fontdimen 7 \font = #1 \fontdimen 7 \font } - } - } -\__fontspec_aff_error:n {PunctuationSpace} -\__fontspec_keys_define_code:nnn {fontspec} {FontAdjustment} - { - \tl_put_right:Nx \l__fontspec_postadjust_tl {#1} - } -\__fontspec_keys_define_code:nnn {fontspec} {LetterSpace} - { - \__fontspec_update_featstr:n {letterspace=#1} - } -\__fontspec_keys_define_code:nnn {fontspec} {HyphenChar} - { - \str_if_eq:nnTF {#1} {None} - { - \tl_put_right:Nn \l__fontspec_postadjust_tl - { \__fontspec_primitive_font_set_hyphenchar:Nn \font {-1} } - } - { - \__fontspec_warning:nx {only-xetex-feature} {HyphenChar} - - \tl_if_single:nTF {#1} - { \tl_set:Nn \l__fontspec_hyphenchar_tl {`#1} } - { \tl_set:Nn \l__fontspec_hyphenchar_tl { #1} } - - \exp_args:No \__fontspec_primitive_font_glyph_if_exist:NnTF \l__fontspec_fontface_cs_tl {\l__fontspec_hyphenchar_tl} - { - \tl_put_right:Nn \l__fontspec_postadjust_tl - { \__fontspec_primitive_font_set_hyphenchar:Nn \font { \l__fontspec_hyphenchar_tl } } - } - { \__fontspec_error:nxx {no-glyph}{\l_fontspec_fontname_tl}{#1} } - - } - } -\__fontspec_aff_error:n {HyphenChar} -\__fontspec_keys_define_code:nnn {fontspec} {Color} - { - \tl_set:Nn \l__fontspec_hexcol_tl {#1} - } -\cs_set:Npn \fontspec_parse_colour:viii #1#2#3#4#5#6#7#8 - { - \tl_set:Nn \l__fontspec_hexcol_tl {#1#2#3#4#5#6} - \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl - { - \bool_if:NF \l__fontspec_firsttime_bool - { \__fontspec_warning:nx {opa-twice-col} {#7#8} } - } - \tl_set:Nn \l__fontspec_opacity_tl {#7#8} - } -\aliasfontfeature{Color}{Colour} -\__fontspec_keys_define_code:nnn {fontspec} {Opacity} - { - \int_set:Nn \l__fontspec_tmp_int {255} - \__fontspec_int_mult_truncate:Nn \l__fontspec_tmp_int { #1 } - \tl_if_eq:NNF \l__fontspec_opacity_tl \c__fontspec_opacity_tl - { - \bool_if:NF \l__fontspec_firsttime_bool - { \__fontspec_warning:nx {opa-twice} {#1} } - } - \tl_set:Nx \l__fontspec_opacity_tl - { - , - \int_compare:nT { \l__fontspec_tmp_int <= "F } {0} % zero pad - \int_to_hex:n { \l__fontspec_tmp_int } - } - } -\__fontspec_keys_define_code:nnn {fontspec-opentype} {Mapping} - { - \str_if_eq:nnTF {#1} {tex-text} - { - \__fontspec_warning:n {no-mapping-ligtex} - \msg_redirect_name:nnn {fontspec} {no-mapping-ligtex} {none} - \keys_set:nn {fontspec-opentype} { Ligatures=TeX } - } - { \__fontspec_warning:n {no-mapping} } - } -\__fontspec_keys_define_code:nnn {fontspec} {Weight} - { - \__fontspec_update_featstr:n{weight=#1} - } -\__fontspec_keys_define_code:nnn {fontspec} {Width} - { - \__fontspec_update_featstr:n{width=#1} - } -\__fontspec_keys_define_code:nnn {fontspec} {OpticalSize} - { - \tl_set:Nn \l__fontspec_optical_size_tl {/ S = #1} - } -\keys_define:nn {fontspec} - { - FakeSlant .code:n = - { - \__fontspec_update_featstr:n {slant=#1} - }, - FakeSlant .default:n = {0.2} - } -\keys_define:nn {fontspec} - { - FakeStretch .code:n = - { - \__fontspec_update_featstr:n {extend=#1} - }, - FakeStretch .default:n = {1.2} - } -\keys_define:nn {fontspec} - { - FakeBold .code:n = - { - \__fontspec_update_featstr:n {embolden=#1} - }, - FakeBold .default:n = {1.5} - } -\keys_define:nn {fontspec} - { - AutoFakeSlant .code:n = - { - \bool_if:NT \l__fontspec_firsttime_bool - { - \tl_set:Nn \l__fontspec_fake_slant_tl {#1} - \clist_put_right:Nn \l__fontspec_fontfeat_it_clist {FakeSlant=#1} - \tl_set_eq:NN \l__fontspec_fontname_it_tl \l_fontspec_fontname_tl - \bool_set_false:N \l__fontspec_noit_bool - - \tl_if_empty:NF \l__fontspec_fake_embolden_tl - { - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist - {FakeBold=\l__fontspec_fake_embolden_tl} - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeSlant=#1} - \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl - } - } - }, - AutoFakeSlant .default:n = {0.2} - } -\keys_define:nn {fontspec} - { - AutoFakeBold .code:n = - { - \bool_if:NT \l__fontspec_firsttime_bool - { - \tl_set:Nn \l__fontspec_fake_embolden_tl {#1} - \clist_put_right:Nn \l__fontspec_fontfeat_bf_clist {FakeBold=#1} - \tl_set_eq:NN \l__fontspec_fontname_bf_tl \l_fontspec_fontname_tl - \bool_set_false:N \l__fontspec_nobf_bool - - \tl_if_empty:NF \l__fontspec_fake_slant_tl - { - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist - {FakeSlant=\l__fontspec_fake_slant_tl} - \clist_put_right:Nx \l__fontspec_fontfeat_bfit_clist {FakeBold=#1} - \tl_set_eq:NN \l__fontspec_fontname_bfit_tl \l_fontspec_fontname_tl - } - } - }, - AutoFakeBold .default:n = {1.5} - } -\__fontspec_keys_define_code:nnn {fontspec-opentype} {RawFeature} - { - \__fontspec_update_featstr:n {#1} - } -\__fontspec_keys_define_code:nnn {fontspec-aat} {RawFeature} - { - \__fontspec_update_featstr:n {#1} - } - -%%^^A%% fontspec-code-feat-opentype.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\__fontspec_feat_prop_add:nn {salt} { Alternate\,=\,$N$ } -\__fontspec_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ } -\__fontspec_feat_prop_add:nn {ornm} { Ornament\,=\,$N$ } -\__fontspec_feat_prop_add:nn {cvNN} { CharacterVariant\,=\,$N$:$M$ } -\__fontspec_feat_prop_add:nn {ssNN} { StylisticSet\,=\,$N$ } -\__fontspec_define_opentype_feature_group:n {Ligatures} -\__fontspec_define_opentype_feature:nnnnn {Ligatures} {ResetAll} {} {} - { - +dlig,-dlig,+rlig,-rlig,+liga,-liga,+dlig,-dlig,+clig,-clig,+hlig,-hlig, - +tlig,-tlig - } -\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Required} {rlig} {rlig} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Common} {liga} {liga} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Rare} {dlig} {dlig} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Discretionary} {dlig} {dlig} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Contextual} {clig} {clig} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {Historic} {hlig} {hlig} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Ligatures} {TeX} {} {tlig} {} -\__fontspec_define_opentype_feature_group:n {Letters} -\__fontspec_define_opentype_feature:nnnnn {Letters} {ResetAll} {} {} - { - +case,+smcp,+pcap,+c2sc,+c2pc,+unic,+rand, - -case,-smcp,-pcap,-c2sc,-c2pc,-unic,-rand - } -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {} -\__fontspec_define_opentype_feature_group:n {Numbers} -\__fontspec_define_opentype_feature:nnnnn {Numbers} {ResetAll} {} {} - { - +tnum,-tnum, - +pnum,-pnum, - +onum,-onum, - +lnum,-lnum, - +zero,-zero, - +anum,-anum, - } -\__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Monospaced} {tnum} {tnum} {+pnum,-pnum} -\__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Proportional} {pnum} {pnum} {+tnum,-tnum} -\__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Lowercase} {onum} {onum} {+lnum,-lnum} -\__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Uppercase} {lnum} {lnum} {+onum,-onum} -\__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {SlashedZero} {zero} {zero} {} -\aliasfontfeatureoption {Numbers} {Monospaced} {Tabular} -\aliasfontfeatureoption {Numbers} {Lowercase} {OldStyle} -\aliasfontfeatureoption {Numbers} {Uppercase} {Lining} - \__fontspec_define_opentype_onoffreset:nnnnn {Numbers} {Arabic} {anum} {anum} {} -\__fontspec_define_opentype_feature_group:n {VerticalPosition} -\__fontspec_define_opentype_feature:nnnnn {VerticalPosition} {ResetAll} {} {} - { - +sups,-sups, - +subs,-subs, - +ordn,-ordn, - +numr,-numr, - +dnom,-dnom, - +sinf,-sinf, - } -\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Superior} {sups} {sups} {+subs,+ordn,+numr,+dnom,+sinf} -\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Inferior} {subs} {subs} {+sups,+ordn,+numr,+dnom,+sinf} -\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Ordinal} {ordn} {ordn} {+sups,+subs,+numr,+dnom,+sinf} -\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Numerator} {numr} {numr} {+sups,+subs,+ordn,+dnom,+sinf} -\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {Denominator} {dnom} {dnom} {+sups,+subs,+ordn,+numr,+sinf} -\__fontspec_define_opentype_onoffreset:nnnnn {VerticalPosition} {ScientificInferior} {sinf} {sinf} {+sups,+subs,+ordn,+numr,+dnom} -\__fontspec_define_opentype_feature_group:n {Contextuals} -\__fontspec_define_opentype_feature:nnnnn {Contextuals} {ResetAll} {} {} - { - +cswh,-cswh, - +calt,-calt, - +init,-init, - +fina,-fina, - +falt,-falt, - +medi,-medi, - } -\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Swash} {cswh} {cswh} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Alternate} {calt} {calt} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {WordInitial} {init} {init} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {WordFinal} {fina} {fina} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {LineFinal} {falt} {falt} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Contextuals} {Inner} {medi} {medi} {} -\__fontspec_define_opentype_feature_group:n {Diacritics} -\__fontspec_define_opentype_feature:nnnnn {Diacritics} {ResetAll} {} {} - { - +mark,-mark, - +mkmk,-mkmk, - +abvm,-abvm, - +blwm,-blwm, - } -\__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToBase} {mark} {mark} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToMark} {mkmk} {mkmk} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {AboveBase} {abvm} {abvm} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Diacritics} {BelowBase} {blwm} {blwm} {} -\__fontspec_define_opentype_feature_group:n {Kerning} -\__fontspec_define_opentype_feature:nnnnn {Kerning} {ResetAll} {} {} - { - +cpsp,-cpsp, - +kern,-kern, - } -\__fontspec_define_opentype_onoffreset:nnnnn {Kerning} {Uppercase} {cpsp} {cpsp} {} -\__fontspec_define_opentype_feature:nnnnn {Kerning} {On} {kern} {+kern} {-kern} -\__fontspec_define_opentype_feature:nnnnn {Kerning} {Off} {kern} {-kern} {+kern} -\__fontspec_define_opentype_feature:nnnnn {Kerning} {Reset} {} {} {+kern,-kern} -\__fontspec_define_opentype_feature_group:n {Fractions} -\__fontspec_define_opentype_feature:nnnnn {Fractions} {ResetAll} {} {} - { - +frac,-frac, - +afrc,-afrc, - } -\__fontspec_define_opentype_feature:nnnnn {Fractions} {On} {frac} {+frac} {} -\__fontspec_define_opentype_feature:nnnnn {Fractions} {Off} {frac} {-frac} {} -\__fontspec_define_opentype_feature:nnnnn {Fractions} {Reset} {} {} {+frac,-frac} -\__fontspec_define_opentype_onoffreset:nnnnn {Fractions} {Alternate} {afrc} {afrc} {-frac} -\__fontspec_define_opentype_feature_group:n {LocalForms} -\__fontspec_define_opentype_feature:nnnnn {LocalForms} {On} {locl} {+locl} {} -\__fontspec_define_opentype_feature:nnnnn {LocalForms} {Off} {locl} {-locl} {} -\__fontspec_define_opentype_feature:nnnnn {LocalForms} {Reset} {} {} {+locl,-locl} - -\__fontspec_define_opentype_feature_group:n {Style} -\__fontspec_define_opentype_feature:nnnnn {Style} {ResetAll} {} {} - { - +salt,-salt, - +ital,-ital, - +ruby,-ruby, - +swsh,-swsh, - +hist,-hist, - +titl,-titl, - +hkna,-hkna, - +vkna,-vkna, - +ssty=0,-ssty=0, - +ssty=1,-ssty=1, - } -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Alternate} {salt} {salt} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Italic} {ital} {ital} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Ruby} {ruby} {ruby} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Swash} {swsh} {swsh} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Cursive} {swsh} {curs} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Historic} {hist} {hist} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Titling} {titl} {titl} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {} % backwards compat -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {HorizontalKana} {hkna} {hkna} {+vkna,+pkna} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {VerticalKana} {vkna} {vkna} {+hkna,+pkna} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {ProportionalKana} {pkna} {pkna} {+vkna,+hkna} -\__fontspec_define_opentype_feature:nnnnn {Style} {MathScript} {ssty} {+ssty=0} {+ssty=1} -\__fontspec_define_opentype_feature:nnnnn {Style} {MathScriptScript} {ssty} {+ssty=1} {+ssty=0} -\__fontspec_define_opentype_onoffreset:nnnnn {Style} {Uppercase} {case} {case} {} -\__fontspec_define_opentype_feature_group:n {CJKShape} -\__fontspec_define_opentype_feature:nnnnn {CJKShape} {ResetAll} {} {} - { - +trad,-trad, - +smpl,-smpl, - +jp78,-jp78, - +jp83,-jp83, - +jp90,-jp90, - +jp04,-jp04, - +expt,-expt, - +nlck,-nlck, - } -\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Traditional} {trad} {trad} {+smpl,+jp78,+jp83,+jp90,+jp04,+expt,+nlck} -\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Simplified} {smpl} {smpl} {+trad,+jp78,+jp83,+jp90,+jp04,+expt,+nlck} -\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1978} {jp78} {jp78} {+trad,+smpl,+jp83,+jp90,+jp04,+expt,+nlck} -\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1983} {jp83} {jp83} {+trad,+smpl,+jp78,+jp90,+jp04,+expt,+nlck} -\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1990} {jp90} {jp90} {+trad,+smpl,+jp78,+jp83,+jp04,+expt,+nlck} -\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {JIS2004} {jp04} {jp04} {+trad,+smpl,+jp78,+jp83,+jp90,+expt,+nlck} -\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {Expert} {expt} {expt} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+nlck} -\__fontspec_define_opentype_onoffreset:nnnnn {CJKShape} {NLC} {nlck} {nlck} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+expt} -\__fontspec_define_opentype_feature_group:n {CharacterWidth} -\__fontspec_define_opentype_feature:nnnnn {CharacterWidth} {ResetAll} {} {} - { - +pwid,-pwid, - +fwid,-fwid, - +hwid,-hwid, - +twid,-twid, - +qwid,-qwid, - +palt,-palt, - +halt,-halt, - } -\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Proportional} {pwid} {pwid} {+fwid,+hwid,+twid,+qwid,+palt,+halt} -\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Full} {fwid} {fwid} {+pwid,+hwid,+twid,+qwid,+palt,+halt} -\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Half} {hwid} {hwid} {+pwid,+fwid,+twid,+qwid,+palt,+halt} -\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Third} {twid} {twid} {+pwid,+fwid,+hwid,+qwid,+palt,+halt} -\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {Quarter} {qwid} {qwid} {+pwid,+fwid,+hwid,+twid,+palt,+halt} -\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateProportional} {palt} {palt} {+pwid,+fwid,+hwid,+twid,+qwid,+halt} -\__fontspec_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateHalf} {halt} {halt} {+pwid,+fwid,+hwid,+twid,+qwid,+palt} -\__fontspec_define_opentype_feature_group:n {Vertical} -\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {RotatedGlyphs} {vrt2} {vrt2} {+vrtr,+vert} -\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {AlternatesForRotation} {vrtr} {vrtr} {+vrt2} -\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {Alternates} {vert} {vert} {+vrt2} -\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {KanaAlternates} {vkna} {vkna} {+hkna} -\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {Kerning} {vkrn} {vkrn} {} -\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {AlternateMetrics} {valt} {valt} {+vhal,+vpal,+kern} -\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {HalfMetrics} {vhal} {vhal} {+valt,+vpal,+kern} -\__fontspec_define_opentype_onoffreset:nnnnn {Vertical} {ProportionalMetrics} {vpal} {vpal} {+valt,+vhal} -\__fontspec_define_opentype_feature_group:n {Alternate} -\keys_define:nn {fontspec-opentype} - { - Alternate .default:n = {0} , - Alternate .groups:n = {opentype}, - Alternate / unknown .code:n = - { - \clist_map_inline:nn {#1} - { \__fontspec_make_OT_feature:nnn {salt}{ +salt = ##1 }{} } - } - } -\keys_define:nn {fontspec-opentype} - { - Alternate / Random .code:n = - { \__fontspec_make_OT_feature:nnn {salt}{ +salt = random }{} } , - } -\aliasfontfeature{Alternate}{StylisticAlternates} -\__fontspec_define_opentype_feature_group:n {Variant} -\keys_define:nn {fontspec-opentype} - { - Variant .default:n = {0} , - Variant .groups:n = {opentype} , - Variant / unknown .code:n = - { - \clist_map_inline:nn {#1} - { - \__fontspec_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {} - } - } - } -\aliasfontfeature{Variant}{StylisticSet} -\__fontspec_define_opentype_feature_group:n {CharacterVariant} -\use:x - { - \cs_new:Npn \exp_not:N \fontspec_parse_cv:w - ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil - { - \__fontspec_make_OT_feature:xxx - { cv \exp_not:N \two@digits {##1} } - { +cv \exp_not:N \two@digits {##1} = ##2 } {} - } - \keys_define:nn {fontspec-opentype} - { - CharacterVariant / unknown .code:n = - { - \clist_map_inline:nn {##1} - { - \exp_not:N \fontspec_parse_cv:w - ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil - } - } - } - } -\__fontspec_define_opentype_feature_group:n {Annotation} -\keys_define:nn {fontspec-opentype} - { - Annotation .default:n = {0} , - Annotation .groups:n = {opentype}, - Annotation / unknown .code:n = - { - \__fontspec_make_OT_feature:nnn {nalt} {+nalt=#1} {} - } - } -\__fontspec_define_opentype_feature_group:n {Ornament} -\keys_define:nn {fontspec-opentype} - { - Ornament .default:n = {0} , - Ornament .groups:n = {opentype}, - Ornament / unknown .code:n = - { - \__fontspec_make_OT_feature:nnn {ornm} { +ornm=#1 } {} - } - } -\keys_define:nn {fontspec-opentype} - { - Script .choice: , - Script .groups:n = {opentype} , - } -\cs_new:Nn \fontspec_new_script:nn - { - \keys_define:nn {fontspec-opentype} { Script / #1 .code:n = - { - \bool_set_false:N \l__fontspec_scriptlang_exist_bool - \clist_map_inline:nn {#2} - { - \exp_args:No \__fontspec_check_script:NnT \l__fontspec_fontface_cs_tl {####1} - { - \tl_set:Nn \l__fontspec_script_name_tl {#1} - \tl_set:Nn \l__fontspec_script_tl {####1} - \int_set:Nn \l__fontspec_script_int {\l__fontspec_strnum_int} - \bool_set_true:N \l__fontspec_scriptlang_exist_bool - \tl_gset:Nx \g__fontspec_single_feat_tl { script=####1 } - \clist_map_break: - } - } - - \bool_if:NF \l__fontspec_scriptlang_exist_bool - { - \bool_if:nF { \str_if_eq_p:ee {#1} {CustomDefault} } - { - \tl_clear:N \l__fontspec_script_name_tl - \__fontspec_warning:nxx {no-script} {\l_fontspec_fontname_tl} {#1} - } - - \bool_if:nF - { - \str_if_eq_p:ee {#1} {Default} || - \str_if_eq_p:ee {#1} {Latin} || - \str_if_eq_p:ee {#1} {CustomDefault} - } - { - \keys_set:nn {fontspec-opentype} { Script = CustomDefault } - } - } - } - } - } -\keys_define:nn {fontspec-opentype} - { - Language .choice: , - Language .groups:n = {opentype} , - } -\cs_new:Nn \fontspec_new_lang:nn - { - \keys_define:nn {fontspec-opentype} { Language / #1 .code:n = - { - \bool_set_false:N \l__fontspec_scriptlang_exist_bool - \clist_map_inline:nn {#2} - { - \exp_args:No \__fontspec_check_lang:NnTF \l__fontspec_fontface_cs_tl {####1} - { - \tl_set:Nn \l__fontspec_lang_tl {####1} - \int_set:Nn \l__fontspec_language_int {\l__fontspec_strnum_int} - \tl_gset:Nx \g__fontspec_single_feat_tl { language=####1 } - \bool_set_true:N \l__fontspec_scriptlang_exist_bool - \clist_map_break: - } - } - \bool_if:NF \l__fontspec_scriptlang_exist_bool - { - \__fontspec_warning:nx {language-not-exist} {#1} - \keys_set:nn {fontspec-opentype} { Language = Default } - } - } - } - } -\__fontspec_keys_define_code:nnn {fontspec-opentype} { Language / Default } - { - \tl_set:Nn \l__fontspec_lang_tl {dflt} - \int_zero:N \l__fontspec_language_int - \tl_gset:Nn \g__fontspec_single_feat_tl { language=dflt } - } -\cs_new:Nn \__fontspec_ot_compat:nn - { - \aliasfontfeatureoption {#1} {#2Off} {No#2} - } -\__fontspec_ot_compat:nn {Ligatures} {Rare} -\__fontspec_ot_compat:nn {Ligatures} {Required} -\__fontspec_ot_compat:nn {Ligatures} {Common} -\__fontspec_ot_compat:nn {Ligatures} {Discretionary} -\__fontspec_ot_compat:nn {Ligatures} {Contextual} -\__fontspec_ot_compat:nn {Ligatures} {Historic} -\__fontspec_ot_compat:nn {Numbers} {SlashedZero} -\__fontspec_ot_compat:nn {Contextuals} {Swash} -\__fontspec_ot_compat:nn {Contextuals} {Alternate} -\__fontspec_ot_compat:nn {Contextuals} {WordInitial} -\__fontspec_ot_compat:nn {Contextuals} {WordFinal} -\__fontspec_ot_compat:nn {Contextuals} {LineFinal} -\__fontspec_ot_compat:nn {Contextuals} {Inner} -\__fontspec_ot_compat:nn {Diacritics} {MarkToBase} -\__fontspec_ot_compat:nn {Diacritics} {MarkToMark} -\__fontspec_ot_compat:nn {Diacritics} {AboveBase} -\__fontspec_ot_compat:nn {Diacritics} {BelowBase} - -%%^^A%% fontspec-code-scripts.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\newfontscript{Adlam}{adlm} -\newfontscript{Ahom}{ahom} -\newfontscript{Anatolian~Hieroglyphs}{hluw} -\newfontscript{Arabic}{arab} -\newfontscript{Armenian}{armn} -\newfontscript{Avestan}{avst} -\newfontscript{Balinese}{bali} -\newfontscript{Bamum}{bamu} -\newfontscript{Bassa~Vah}{bass} -\newfontscript{Batak}{batk} -\newfontscript{Bengali}{bng2,beng} -\newfontscript{Bhaiksuki}{bhks} -\newfontscript{Bopomofo}{bopo} -\newfontscript{Brahmi}{brah} -\newfontscript{Braille}{brai} -\newfontscript{Buginese}{bugi} -\newfontscript{Buhid}{buhd} -\newfontscript{Byzantine~Music}{byzm} -\newfontscript{Canadian~Syllabics}{cans} -\newfontscript{Carian}{cari} -\newfontscript{Caucasian~Albanian}{aghb} -\newfontscript{Chakma}{cakm} -\newfontscript{Cham}{cham} -\newfontscript{Cherokee}{cher} -\newfontscript{Chorasmian}{chrs} -\newfontscript{CJK~Ideographic}{hani} -\newfontscript{Coptic}{copt} -\newfontscript{Cypriot~Syllabary}{cprt} -\newfontscript{Cypro~Minoan}{cpmn} -\newfontscript{Cyrillic}{cyrl} -\newfontscript{Default}{DFLT} -\newfontscript{CustomDefault}{latn,DFLT} -\newfontscript{Deseret}{dsrt} -\newfontscript{Devanagari}{dev2,deva} -\newfontscript{Dives~Akuru}{diak} -\newfontscript{Dogra}{dogr} -\newfontscript{Duployan}{dupl} -\newfontscript{Egyptian~Hieroglyphs}{egyp} -\newfontscript{Elbasan}{elba} -\newfontscript{Elymaic}{elym} -\newfontscript{Ethiopic}{ethi} -\newfontscript{Georgian}{geor} -\newfontscript{Glagolitic}{glag} -\newfontscript{Gothic}{goth} -\newfontscript{Grantha}{gran} -\newfontscript{Greek}{grek} -\newfontscript{Gujarati}{gjr2,gujr} -\newfontscript{Gunjala~Gondi}{gong} -\newfontscript{Gurmukhi}{gur2,guru} -\newfontscript{Hangul~Jamo}{jamo} -\newfontscript{Hangul}{hang} -\newfontscript{Hanifi~Rohingya}{rohg} -\newfontscript{Hanunoo}{hano} -\newfontscript{Hatran}{hatr} -\newfontscript{Hebrew}{hebr} -\newfontscript{Hiragana~and~Katakana}{kana} -\newfontscript{Imperial~Aramaic}{armi} -\newfontscript{Inscriptional~Pahlavi}{phli} -\newfontscript{Inscriptional~Parthian}{prti} -\newfontscript{Javanese}{java} -\newfontscript{Kaithi}{kthi} -\newfontscript{Kannada}{knd2,knda} -\newfontscript{Kayah~Li}{kali} -\newfontscript{Kharosthi}{khar} -\newfontscript{Khitan~Small~Script}{kits} -\newfontscript{Khmer}{khmr} -\newfontscript{Khojki}{khoj} -\newfontscript{Khudawadi}{sind} -\newfontscript{Lao}{lao~} -\newfontscript{Latin}{latn} -\newfontscript{Lepcha}{lepc} -\newfontscript{Limbu}{limb} -\newfontscript{Linear~A}{lina} -\newfontscript{Linear~B}{linb} -\newfontscript{Lisu}{lisu} -\newfontscript{Lycian}{lyci} -\newfontscript{Lydian}{lydi} -\newfontscript{Mahajani}{mahj} -\newfontscript{Makasar}{maka} -\newfontscript{Malayalam}{mlm2,mlym} -\newfontscript{Mandaic}{mand} -\newfontscript{Manichaean}{mani} -\newfontscript{Marchen}{marc} -\newfontscript{Masaram Gondi}{gonm} -\newfontscript{Math}{math} -\newfontscript{Medefaidrin}{medf} -\newfontscript{Meitei~Mayek}{mtei} -\newfontscript{Mende~Kikakui}{mend} -\newfontscript{Meroitic~Cursive}{merc} -\newfontscript{Meroitic~Hieroglyphs}{mero} -\newfontscript{Miao}{plrd} -\newfontscript{Modi}{modi} -\newfontscript{Mongolian}{mong} -\newfontscript{Mro}{mroo} -\newfontscript{Multani}{mult} -\newfontscript{Musical~Symbols}{musc} -\newfontscript{Myanmar}{mym2,mymr} -\newfontscript{N'Ko}{nko~} -\newfontscript{Nabataean}{nbat} -\newfontscript{Nandinagari}{nand} -\newfontscript{Newa}{newa} -\newfontscript{Nushu}{nshu} -\newfontscript{Nyiakeng~Puachue~Hmong}{hmnp} -\newfontscript{Odia}{ory2,orya} -\newfontscript{Ogham}{ogam} -\newfontscript{Ol~Chiki}{olck} -\newfontscript{Old~Italic}{ital} -\newfontscript{Old~Hungarian}{hung} -\newfontscript{Old~North~Arabian}{narb} -\newfontscript{Old~Permic}{perm} -\newfontscript{Old~Persian~Cuneiform}{xpeo} -\newfontscript{Old~Sogdian}{sogo} -\newfontscript{Old~South~Arabian}{sarb} -\newfontscript{Old~Turkic}{orkh} -\newfontscript{Old~Uyghur}{ougr} -\newfontscript{Osage}{osge} -\newfontscript{Osmanya}{osma} -\newfontscript{Pahawh~Hmong}{hmng} -\newfontscript{Palmyrene}{palm} -\newfontscript{Pau~Cin~Hau}{pauc} -\newfontscript{Phags-pa}{phag} -\newfontscript{Phoenician}{phnx} -\newfontscript{Psalter~Pahlavi}{phlp} -\newfontscript{Rejang}{rjng} -\newfontscript{Runic}{runr} -\newfontscript{Samaritan}{samr} -\newfontscript{Saurashtra}{saur} -\newfontscript{Sharada}{shrd} -\newfontscript{Shavian}{shaw} -\newfontscript{Siddham}{sidd} -\newfontscript{Sign~Writing}{sgnw} -\newfontscript{Sinhala}{sinh} -\newfontscript{Sogdian}{sogd} -\newfontscript{Sora~Sompeng}{sora} -\newfontscript{Sumero-Akkadian~Cuneiform}{xsux} -\newfontscript{Sundanese}{sund} -\newfontscript{Syloti~Nagri}{sylo} -\newfontscript{Syriac}{syrc} -\newfontscript{Tagalog}{tglg} -\newfontscript{Tagbanwa}{tagb} -\newfontscript{Tai~Le}{tale} -\newfontscript{Tai~Lu}{talu} -\newfontscript{Tai~Tham}{lana} -\newfontscript{Tai~Viet}{tavt} -\newfontscript{Takri}{takr} -\newfontscript{Tamil}{tml2,taml} -\newfontscript{Tangsa}{tnsa} -\newfontscript{Tangut}{tang} -\newfontscript{Telugu}{tel2,telu} -\newfontscript{Thaana}{thaa} -\newfontscript{Thai}{thai} -\newfontscript{Tibetan}{tibt} -\newfontscript{Tifinagh}{tfng} -\newfontscript{Tirhuta}{tirh} -\newfontscript{Toto}{toto} -\newfontscript{Ugaritic~Cuneiform}{ugar} -\newfontscript{Vai}{vai~} -\newfontscript{Vithkuqi}{vith} -\newfontscript{Wancho}{wcho} -\newfontscript{Warang~Citi}{wara} -\newfontscript{Yezidi}{yezi} -\newfontscript{Yi}{yi~~} -\newfontscript{Zanabazar~Square}{zanb} -\newfontscript{CJK}{hani} -\newfontscript{Kana}{kana} -\newfontscript{Maths}{math} -\newfontscript{N'ko}{nko~} -\newfontscript{Oriya}{ory2,orya} - -%%^^A%% fontspec-code-lang.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\newfontlanguage{Abaza}{ABA} -\newfontlanguage{Abkhazian}{ABK} -\newfontlanguage{Adyghe}{ADY} -\newfontlanguage{Afrikaans}{AFK} -\newfontlanguage{Afar}{AFR} -\newfontlanguage{Agaw}{AGW} -\newfontlanguage{Altai}{ALT} -\newfontlanguage{Amharic}{AMH} -\newfontlanguage{Arabic}{ARA} -\newfontlanguage{Aari}{ARI} -\newfontlanguage{Arakanese}{ARK} -\newfontlanguage{Assamese}{ASM} -\newfontlanguage{Athapaskan}{ATH} -\newfontlanguage{Avar}{AVR} -\newfontlanguage{Awadhi}{AWA} -\newfontlanguage{Aymara}{AYM} -\newfontlanguage{Azeri}{AZE} -\newfontlanguage{Badaga}{BAD} -\newfontlanguage{Baghelkhandi}{BAG} -\newfontlanguage{Balkar}{BAL} -\newfontlanguage{Baule}{BAU} -\newfontlanguage{Berber}{BBR} -\newfontlanguage{Bench}{BCH} -\newfontlanguage{Bible~Cree}{BCR} -\newfontlanguage{Belarussian}{BEL} -\newfontlanguage{Bemba}{BEM} -\newfontlanguage{Bengali}{BEN} -\newfontlanguage{Bulgarian}{BGR} -\newfontlanguage{Bhili}{BHI} -\newfontlanguage{Bhojpuri}{BHO} -\newfontlanguage{Bikol}{BIK} -\newfontlanguage{Bilen}{BIL} -\newfontlanguage{Blackfoot}{BKF} -\newfontlanguage{Balochi}{BLI} -\newfontlanguage{Balante}{BLN} -\newfontlanguage{Balti}{BLT} -\newfontlanguage{Bambara}{BMB} -\newfontlanguage{Bamileke}{BML} -\newfontlanguage{Breton}{BRE} -\newfontlanguage{Brahui}{BRH} -\newfontlanguage{Braj~Bhasha}{BRI} -\newfontlanguage{Burmese}{BRM} -\newfontlanguage{Bashkir}{BSH} -\newfontlanguage{Beti}{BTI} -\newfontlanguage{Catalan}{CAT} -\newfontlanguage{Cebuano}{CEB} -\newfontlanguage{Chechen}{CHE} -\newfontlanguage{Chaha~Gurage}{CHG} -\newfontlanguage{Chattisgarhi}{CHH} -\newfontlanguage{Chichewa}{CHI} -\newfontlanguage{Chukchi}{CHK} -\newfontlanguage{Chipewyan}{CHP} -\newfontlanguage{Cherokee}{CHR} -\newfontlanguage{Chuvash}{CHU} -\newfontlanguage{Comorian}{CMR} -\newfontlanguage{Coptic}{COP} -\newfontlanguage{Cree}{CRE} -\newfontlanguage{Carrier}{CRR} -\newfontlanguage{Crimean~Tatar}{CRT} -\newfontlanguage{Church~Slavonic}{CSL} -\newfontlanguage{Czech}{CSY} -\newfontlanguage{Danish}{DAN} -\newfontlanguage{Dargwa}{DAR} -\newfontlanguage{Woods~Cree}{DCR} -\newfontlanguage{German}{DEU} -\newfontlanguage{Dogri}{DGR} -\newfontlanguage{Divehi}{DIV} -\newfontlanguage{Djerma}{DJR} -\newfontlanguage{Dangme}{DNG} -\newfontlanguage{Dinka}{DNK} -\newfontlanguage{Dungan}{DUN} -\newfontlanguage{Dzongkha}{DZN} -\newfontlanguage{Ebira}{EBI} -\newfontlanguage{Eastern~Cree}{ECR} -\newfontlanguage{Edo}{EDO} -\newfontlanguage{Efik}{EFI} -\newfontlanguage{Greek}{ELL} -\newfontlanguage{English}{ENG} -\newfontlanguage{Erzya}{ERZ} -\newfontlanguage{Spanish}{ESP} -\newfontlanguage{Estonian}{ETI} -\newfontlanguage{Basque}{EUQ} -\newfontlanguage{Evenki}{EVK} -\newfontlanguage{Even}{EVN} -\newfontlanguage{Ewe}{EWE} -\newfontlanguage{French~Antillean}{FAN} -\newfontlanguage{Farsi}{FAR} -\newfontlanguage{Parsi}{FAR} -\newfontlanguage{Persian}{FAR} -\newfontlanguage{Finnish}{FIN} -\newfontlanguage{Fijian}{FJI} -\newfontlanguage{Flemish}{FLE} -\newfontlanguage{Forest~Nenets}{FNE} -\newfontlanguage{Fon}{FON} -\newfontlanguage{Faroese}{FOS} -\newfontlanguage{French}{FRA} -\newfontlanguage{Frisian}{FRI} -\newfontlanguage{Friulian}{FRL} -\newfontlanguage{Futa}{FTA} -\newfontlanguage{Fulani}{FUL} -\newfontlanguage{Ga}{GAD} -\newfontlanguage{Gaelic}{GAE} -\newfontlanguage{Gagauz}{GAG} -\newfontlanguage{Galician}{GAL} -\newfontlanguage{Garshuni}{GAR} -\newfontlanguage{Garhwali}{GAW} -\newfontlanguage{Ge'ez}{GEZ} -\newfontlanguage{Gilyak}{GIL} -\newfontlanguage{Gumuz}{GMZ} -\newfontlanguage{Gondi}{GON} -\newfontlanguage{Greenlandic}{GRN} -\newfontlanguage{Garo}{GRO} -\newfontlanguage{Guarani}{GUA} -\newfontlanguage{Gujarati}{GUJ} -\newfontlanguage{Haitian}{HAI} -\newfontlanguage{Halam}{HAL} -\newfontlanguage{Harauti}{HAR} -\newfontlanguage{Hausa}{HAU} -\newfontlanguage{Hawaiin}{HAW} -\newfontlanguage{Hammer-Banna}{HBN} -\newfontlanguage{Hiligaynon}{HIL} -\newfontlanguage{Hindi}{HIN} -\newfontlanguage{High~Mari}{HMA} -\newfontlanguage{Hindko}{HND} -\newfontlanguage{Ho}{HO} -\newfontlanguage{Harari}{HRI} -\newfontlanguage{Croatian}{HRV} -\newfontlanguage{Hungarian}{HUN} -\newfontlanguage{Armenian}{HYE} -\newfontlanguage{Igbo}{IBO} -\newfontlanguage{Ijo}{IJO} -\newfontlanguage{Ilokano}{ILO} -\newfontlanguage{Indonesian}{IND} -\newfontlanguage{Ingush}{ING} -\newfontlanguage{Inuktitut}{INU} -\newfontlanguage{Irish}{IRI} -\newfontlanguage{Irish~Traditional}{IRT} -\newfontlanguage{Icelandic}{ISL} -\newfontlanguage{Inari~Sami}{ISM} -\newfontlanguage{Italian}{ITA} -\newfontlanguage{Hebrew}{IWR} -\newfontlanguage{Javanese}{JAV} -\newfontlanguage{Yiddish}{JII} -\newfontlanguage{Japanese}{JAN} -\newfontlanguage{Judezmo}{JUD} -\newfontlanguage{Jula}{JUL} -\newfontlanguage{Kabardian}{KAB} -\newfontlanguage{Kachchi}{KAC} -\newfontlanguage{Kalenjin}{KAL} -\newfontlanguage{Kannada}{KAN} -\newfontlanguage{Karachay}{KAR} -\newfontlanguage{Georgian}{KAT} -\newfontlanguage{Kazakh}{KAZ} -\newfontlanguage{Kebena}{KEB} -\newfontlanguage{Khutsuri~Georgian}{KGE} -\newfontlanguage{Khakass}{KHA} -\newfontlanguage{Khanty-Kazim}{KHK} -\newfontlanguage{Khmer}{KHM} -\newfontlanguage{Khanty-Shurishkar}{KHS} -\newfontlanguage{Khanty-Vakhi}{KHV} -\newfontlanguage{Khowar}{KHW} -\newfontlanguage{Kikuyu}{KIK} -\newfontlanguage{Kirghiz}{KIR} -\newfontlanguage{Kisii}{KIS} -\newfontlanguage{Kokni}{KKN} -\newfontlanguage{Kalmyk}{KLM} -\newfontlanguage{Kamba}{KMB} -\newfontlanguage{Kumaoni}{KMN} -\newfontlanguage{Komo}{KMO} -\newfontlanguage{Komso}{KMS} -\newfontlanguage{Kanuri}{KNR} -\newfontlanguage{Kodagu}{KOD} -\newfontlanguage{Korean~Old~Hangul}{KOH} -\newfontlanguage{Konkani}{KOK} -\newfontlanguage{Kikongo}{KON} -\newfontlanguage{Komi-Permyak}{KOP} -\newfontlanguage{Korean}{KOR} -\newfontlanguage{Komi-Zyrian}{KOZ} -\newfontlanguage{Kpelle}{KPL} -\newfontlanguage{Krio}{KRI} -\newfontlanguage{Karakalpak}{KRK} -\newfontlanguage{Karelian}{KRL} -\newfontlanguage{Karaim}{KRM} -\newfontlanguage{Karen}{KRN} -\newfontlanguage{Koorete}{KRT} -\newfontlanguage{Kashmiri}{KSH} -\newfontlanguage{Khasi}{KSI} -\newfontlanguage{Kildin~Sami}{KSM} -\newfontlanguage{Kui}{KUI} -\newfontlanguage{Kulvi}{KUL} -\newfontlanguage{Kumyk}{KUM} -\newfontlanguage{Kurdish}{KUR} -\newfontlanguage{Kurukh}{KUU} -\newfontlanguage{Kuy}{KUY} -\newfontlanguage{Koryak}{KYK} -\newfontlanguage{Ladin}{LAD} -\newfontlanguage{Lahuli}{LAH} -\newfontlanguage{Lak}{LAK} -\newfontlanguage{Lambani}{LAM} -\newfontlanguage{Lao}{LAO} -\newfontlanguage{Latin}{LAT} -\newfontlanguage{Laz}{LAZ} -\newfontlanguage{L-Cree}{LCR} -\newfontlanguage{Ladakhi}{LDK} -\newfontlanguage{Lezgi}{LEZ} -\newfontlanguage{Lingala}{LIN} -\newfontlanguage{Low~Mari}{LMA} -\newfontlanguage{Limbu}{LMB} -\newfontlanguage{Lomwe}{LMW} -\newfontlanguage{Lower~Sorbian}{LSB} -\newfontlanguage{Lule~Sami}{LSM} -\newfontlanguage{Lithuanian}{LTH} -\newfontlanguage{Luba}{LUB} -\newfontlanguage{Luganda}{LUG} -\newfontlanguage{Luhya}{LUH} -\newfontlanguage{Luo}{LUO} -\newfontlanguage{Latvian}{LVI} -\newfontlanguage{Majang}{MAJ} -\newfontlanguage{Makua}{MAK} -\newfontlanguage{Malayalam~Traditional}{MAL} -\newfontlanguage{Mansi}{MAN} -\newfontlanguage{Marathi}{MAR} -\newfontlanguage{Marwari}{MAW} -\newfontlanguage{Mbundu}{MBN} -\newfontlanguage{Manchu}{MCH} -\newfontlanguage{Moose~Cree}{MCR} -\newfontlanguage{Mende}{MDE} -\newfontlanguage{Me'en}{MEN} -\newfontlanguage{Mizo}{MIZ} -\newfontlanguage{Macedonian}{MKD} -\newfontlanguage{Male}{MLE} -\newfontlanguage{Malagasy}{MLG} -\newfontlanguage{Malinke}{MLN} -\newfontlanguage{Malayalam~Reformed}{MLR} -\newfontlanguage{Malay}{MLY} -\newfontlanguage{Mandinka}{MND} -\newfontlanguage{Mongolian}{MNG} -\newfontlanguage{Manipuri}{MNI} -\newfontlanguage{Maninka}{MNK} -\newfontlanguage{Manx~Gaelic}{MNX} -\newfontlanguage{Moksha}{MOK} -\newfontlanguage{Moldavian}{MOL} -\newfontlanguage{Mon}{MON} -\newfontlanguage{Moroccan}{MOR} -\newfontlanguage{Maori}{MRI} -\newfontlanguage{Maithili}{MTH} -\newfontlanguage{Maltese}{MTS} -\newfontlanguage{Mundari}{MUN} -\newfontlanguage{Naga-Assamese}{NAG} -\newfontlanguage{Nanai}{NAN} -\newfontlanguage{Naskapi}{NAS} -\newfontlanguage{N-Cree}{NCR} -\newfontlanguage{Ndebele}{NDB} -\newfontlanguage{Ndonga}{NDG} -\newfontlanguage{Nepali}{NEP} -\newfontlanguage{Newari}{NEW} -\newfontlanguage{Nagari}{NGR} -\newfontlanguage{Norway~House~Cree}{NHC} -\newfontlanguage{Nisi}{NIS} -\newfontlanguage{Niuean}{NIU} -\newfontlanguage{Nkole}{NKL} -\newfontlanguage{N'ko}{NKO} -\newfontlanguage{Dutch}{NLD} -\newfontlanguage{Nogai}{NOG} -\newfontlanguage{Norwegian}{NOR} -\newfontlanguage{Northern~Sami}{NSM} -\newfontlanguage{Northern~Tai}{NTA} -\newfontlanguage{Esperanto}{NTO} -\newfontlanguage{Nynorsk}{NYN} -\newfontlanguage{Oji-Cree}{OCR} -\newfontlanguage{Ojibway}{OJB} -\newfontlanguage{Oriya}{ORI} -\newfontlanguage{Oromo}{ORO} -\newfontlanguage{Ossetian}{OSS} -\newfontlanguage{Palestinian~Aramaic}{PAA} -\newfontlanguage{Pali}{PAL} -\newfontlanguage{Punjabi}{PAN} -\newfontlanguage{Palpa}{PAP} -\newfontlanguage{Pashto}{PAS} -\newfontlanguage{Polytonic~Greek}{PGR} -\newfontlanguage{Pilipino}{PIL} -\newfontlanguage{Palaung}{PLG} -\newfontlanguage{Polish}{PLK} -\newfontlanguage{Provencal}{PRO} -\newfontlanguage{Portuguese}{PTG} -\newfontlanguage{Chin}{QIN} -\newfontlanguage{Rajasthani}{RAJ} -\newfontlanguage{R-Cree}{RCR} -\newfontlanguage{Russian~Buriat}{RBU} -\newfontlanguage{Riang}{RIA} -\newfontlanguage{Rhaeto-Romanic}{RMS} -\newfontlanguage{Romanian}{ROM} -\newfontlanguage{Romany}{ROY} -\newfontlanguage{Rusyn}{RSY} -\newfontlanguage{Ruanda}{RUA} -\newfontlanguage{Russian}{RUS} -\newfontlanguage{Sadri}{SAD} -\newfontlanguage{Sanskrit}{SAN} -\newfontlanguage{Santali}{SAT} -\newfontlanguage{Sayisi}{SAY} -\newfontlanguage{Sekota}{SEK} -\newfontlanguage{Selkup}{SEL} -\newfontlanguage{Sango}{SGO} -\newfontlanguage{Shan}{SHN} -\newfontlanguage{Sibe}{SIB} -\newfontlanguage{Sidamo}{SID} -\newfontlanguage{Silte~Gurage}{SIG} -\newfontlanguage{Skolt~Sami}{SKS} -\newfontlanguage{Slovak}{SKY} -\newfontlanguage{Slavey}{SLA} -\newfontlanguage{Slovenian}{SLV} -\newfontlanguage{Somali}{SML} -\newfontlanguage{Samoan}{SMO} -\newfontlanguage{Sena}{SNA} -\newfontlanguage{Sindhi}{SND} -\newfontlanguage{Sinhalese}{SNH} -\newfontlanguage{Soninke}{SNK} -\newfontlanguage{Sodo~Gurage}{SOG} -\newfontlanguage{Sotho}{SOT} -\newfontlanguage{Albanian}{SQI} -\newfontlanguage{Serbian}{SRB} -\newfontlanguage{Saraiki}{SRK} -\newfontlanguage{Serer}{SRR} -\newfontlanguage{South~Slavey}{SSL} -\newfontlanguage{Southern~Sami}{SSM} -\newfontlanguage{Suri}{SUR} -\newfontlanguage{Svan}{SVA} -\newfontlanguage{Swedish}{SVE} -\newfontlanguage{Swadaya~Aramaic}{SWA} -\newfontlanguage{Swahili}{SWK} -\newfontlanguage{Swazi}{SWZ} -\newfontlanguage{Sutu}{SXT} -\newfontlanguage{Syriac}{SYR} -\newfontlanguage{Tabasaran}{TAB} -\newfontlanguage{Tajiki}{TAJ} -\newfontlanguage{Tamil}{TAM} -\newfontlanguage{Tatar}{TAT} -\newfontlanguage{TH-Cree}{TCR} -\newfontlanguage{Telugu}{TEL} -\newfontlanguage{Tongan}{TGN} -\newfontlanguage{Tigre}{TGR} -\newfontlanguage{Tigrinya}{TGY} -\newfontlanguage{Thai}{THA} -\newfontlanguage{Tahitian}{THT} -\newfontlanguage{Tibetan}{TIB} -\newfontlanguage{Turkish}{TRK,TUR} -\newfontlanguage{Turkmen}{TKM} -\newfontlanguage{Temne}{TMN} -\newfontlanguage{Tswana}{TNA} -\newfontlanguage{Tundra~Nenets}{TNE} -\newfontlanguage{Tonga}{TNG} -\newfontlanguage{Todo}{TOD} -\newfontlanguage{Tsonga}{TSG} -\newfontlanguage{Turoyo~Aramaic}{TUA} -\newfontlanguage{Tulu}{TUL} -\newfontlanguage{Tuvin}{TUV} -\newfontlanguage{Twi}{TWI} -\newfontlanguage{Udmurt}{UDM} -\newfontlanguage{Ukrainian}{UKR} -\newfontlanguage{Urdu}{URD} -\newfontlanguage{Upper~Sorbian}{USB} -\newfontlanguage{Uyghur}{UYG} -\newfontlanguage{Uzbek}{UZB} -\newfontlanguage{Venda}{VEN} -\newfontlanguage{Vietnamese}{VIT} -\newfontlanguage{Wa}{WA} -\newfontlanguage{Wagdi}{WAG} -\newfontlanguage{West-Cree}{WCR} -\newfontlanguage{Welsh}{WEL} -\newfontlanguage{Wolof}{WLF} -\newfontlanguage{Tai~Lue}{XBD} -\newfontlanguage{Xhosa}{XHS} -\newfontlanguage{Yakut}{YAK} -\newfontlanguage{Yoruba}{YBA} -\newfontlanguage{Y-Cree}{YCR} -\newfontlanguage{Yi~Classic}{YIC} -\newfontlanguage{Yi~Modern}{YIM} -\newfontlanguage{Chinese~Hong~Kong}{ZHH} -\newfontlanguage{Chinese~Phonetic}{ZHP} -\newfontlanguage{Chinese~Simplified}{ZHS} -\newfontlanguage{Chinese~Traditional}{ZHT} -\newfontlanguage{Zande}{ZND} -\newfontlanguage{Zulu}{ZUL} - -%%^^A%% fontspec-code-feat-aat.dtx -- part of FONTSPEC <wspr.io/fontspec> - - -%%^^A%% fontspec-code-enc.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\DeclareDocumentCommand \EncodingCommand { m O{} O{} m } - { - \bool_if:NF \l__fontspec_defining_encoding_bool - { \__fontspec_error:nn {only-inside-encdef} \EncodingCommand } - \DeclareTextCommand{#1}{\UnicodeEncodingName}[#2][#3]{#4} - } -\DeclareDocumentCommand \EncodingAccent {mm} - { - \bool_if:NF \l__fontspec_defining_encoding_bool - { \__fontspec_error:nn {only-inside-encdef} \EncodingAccent } - \DeclareTextCommand{#1}{\UnicodeEncodingName}{\add@unicode@accent{#2}} - } -\DeclareDocumentCommand \EncodingSymbol {mm} - { - \bool_if:NF \l__fontspec_defining_encoding_bool - { \__fontspec_error:nn {only-inside-encdef} \EncodingSymbol } - \DeclareTextSymbol{#1}{\UnicodeEncodingName}{#2} - } -\DeclareDocumentCommand \EncodingComposite {mmm} - { - \bool_if:NF \l__fontspec_defining_encoding_bool - { \__fontspec_error:nn {only-inside-encdef} \EncodingComposite } - \DeclareTextComposite{#1}{\UnicodeEncodingName}{#2}{#3} - } -\DeclareDocumentCommand \EncodingCompositeCommand {mmm} - { - \bool_if:NF \l__fontspec_defining_encoding_bool - { \__fontspec_error:nn {only-inside-encdef} \EncodingCompositeCommand } - \DeclareTextCompositeCommand{#1}{\UnicodeEncodingName}{#2}{#3} - } -\DeclareDocumentCommand \DeclareUnicodeEncoding {mm} - { - \DeclareFontEncoding{#1}{}{} - \DeclareFontSubstitution{#1}{lmr}{m}{n} - \DeclareFontFamily{#1}{lmr}{} - - \DeclareFontShape{#1}{lmr}{m}{n} - {<->\UnicodeFontFile{lmroman10-regular}{\UnicodeFontTeXLigatures}}{} - \DeclareFontShape{#1}{lmr}{m}{it} - {<->\UnicodeFontFile{lmroman10-italic}{\UnicodeFontTeXLigatures}}{} - \DeclareFontShape{#1}{lmr}{m}{sc} - {<->\UnicodeFontFile{lmromancaps10-regular}{\UnicodeFontTeXLigatures}}{} - \DeclareFontShape{#1}{lmr}{bx}{n} - {<->\UnicodeFontFile{lmroman10-bold}{\UnicodeFontTeXLigatures}}{} - \DeclareFontShape{#1}{lmr}{bx}{it} - {<->\UnicodeFontFile{lmroman10-bolditalic}{\UnicodeFontTeXLigatures}}{} - - \tl_set_eq:NN \l__fontspec_prev_unicode_name_tl \UnicodeEncodingName - \tl_set:Nn \UnicodeEncodingName {#1} - \bool_set_true:N \l__fontspec_defining_encoding_bool - #2 - \bool_set_false:N \l__fontspec_defining_encoding_bool - \tl_set_eq:NN \UnicodeEncodingName \l__fontspec_prev_unicode_name_tl - } -\DeclareDocumentCommand \UndeclareSymbol {m} - { - \bool_if:NF \l__fontspec_defining_encoding_bool - { \__fontspec_error:nn {only-inside-encdef} \UndeclareSymbol } - \UndeclareTextCommand {#1} {\UnicodeEncodingName} - } -\DeclareDocumentCommand \UndeclareAccent {m} - { - \bool_if:NF \l__fontspec_defining_encoding_bool - { \__fontspec_error:nn {only-inside-encdef} \UndeclareAccent } - \UndeclareTextCommand {#1} {\UnicodeEncodingName} - } -\DeclareDocumentCommand \UndeclareCommand {m} - { - \bool_if:NF \l__fontspec_defining_encoding_bool - { \__fontspec_error:nn {only-inside-encdef} \UndeclareCommand } - \UndeclareTextCommand {#1} {\UnicodeEncodingName} - } -\DeclareDocumentCommand \UndeclareComposite {mm} - { - \bool_if:NF \l__fontspec_defining_encoding_bool - { \__fontspec_error:nn {only-inside-encdef} \UndeclareComposite } - \cs_undefine:c - { \c_backslash_str \UnicodeEncodingName \token_to_str:N #1 - \tl_to_str:n {#2} } - } - -%%^^A%% fontspec-code-math.dtx -- part of FONTSPEC <wspr.io/fontspec> -\@ifpackageloaded{euler} - { \bool_gset_true:N \g__fontspec_pkg_euler_loaded_bool } - { \bool_gset_false:N \g__fontspec_pkg_euler_loaded_bool } -\cs_new:Nn \fontspec_setup_maths: - { - \@ifpackageloaded{euler} - { - \bool_if:NTF \g__fontspec_pkg_euler_loaded_bool - { \bool_gset_true:N \g__fontspec_math_euler_bool } - { \__fontspec_error:n {euler-too-late} } - } - {} - \@ifpackageloaded{lucbmath}{ \bool_gset_true:N \g__fontspec_math_lucida_bool }{} - \@ifpackageloaded{lucidabr}{ \bool_gset_true:N \g__fontspec_math_lucida_bool }{} - \@ifpackageloaded{lucimatx}{ \bool_gset_true:N \g__fontspec_math_lucida_bool }{} - \DeclareSymbolFont{legacymaths}{OT1}{cmr}{m}{n} - \SetSymbolFont{legacymaths}{bold}{OT1}{cmr}{bx}{n} - \DeclareMathAccent{\acute} {\mathalpha}{legacymaths}{19} - \DeclareMathAccent{\grave} {\mathalpha}{legacymaths}{18} - \DeclareMathAccent{\ddot} {\mathalpha}{legacymaths}{127} - \DeclareMathAccent{\tilde} {\mathalpha}{legacymaths}{126} - \DeclareMathAccent{\bar} {\mathalpha}{legacymaths}{22} - \DeclareMathAccent{\breve} {\mathalpha}{legacymaths}{21} - \DeclareMathAccent{\check} {\mathalpha}{legacymaths}{20} - \DeclareMathAccent{\hat} {\mathalpha}{legacymaths}{94} % too bad, euler - \DeclareMathAccent{\dot} {\mathalpha}{legacymaths}{95} - \DeclareMathAccent{\mathring}{\mathalpha}{legacymaths}{23} - \group_begin: - \mathchardef\@tempa="603A \relax - \ifx\colon\@tempa - \DeclareMathSymbol{\colon}{\mathpunct}{legacymaths}{58} - \fi - \group_end: - \bool_if:NF \g__fontspec_math_euler_bool - { - \DeclareMathSymbol{!}{\mathclose}{legacymaths}{33} - \DeclareMathSymbol{:}{\mathrel} {legacymaths}{58} - \DeclareMathSymbol{;}{\mathpunct}{legacymaths}{59} - \DeclareMathSymbol{?}{\mathclose}{legacymaths}{63} - \bool_if:NF \g__fontspec_math_lucida_bool - { - \DeclareMathSymbol{0}{\mathalpha}{legacymaths}{`0} - \DeclareMathSymbol{1}{\mathalpha}{legacymaths}{`1} - \DeclareMathSymbol{2}{\mathalpha}{legacymaths}{`2} - \DeclareMathSymbol{3}{\mathalpha}{legacymaths}{`3} - \DeclareMathSymbol{4}{\mathalpha}{legacymaths}{`4} - \DeclareMathSymbol{5}{\mathalpha}{legacymaths}{`5} - \DeclareMathSymbol{6}{\mathalpha}{legacymaths}{`6} - \DeclareMathSymbol{7}{\mathalpha}{legacymaths}{`7} - \DeclareMathSymbol{8}{\mathalpha}{legacymaths}{`8} - \DeclareMathSymbol{9}{\mathalpha}{legacymaths}{`9} - \DeclareMathSymbol{\Gamma}{\mathalpha}{legacymaths}{0} - \DeclareMathSymbol{\Delta}{\mathalpha}{legacymaths}{1} - \DeclareMathSymbol{\Theta}{\mathalpha}{legacymaths}{2} - \DeclareMathSymbol{\Lambda}{\mathalpha}{legacymaths}{3} - \DeclareMathSymbol{\Xi}{\mathalpha}{legacymaths}{4} - \DeclareMathSymbol{\Pi}{\mathalpha}{legacymaths}{5} - \DeclareMathSymbol{\Sigma}{\mathalpha}{legacymaths}{6} - \DeclareMathSymbol{\Upsilon}{\mathalpha}{legacymaths}{7} - \DeclareMathSymbol{\Phi}{\mathalpha}{legacymaths}{8} - \DeclareMathSymbol{\Psi}{\mathalpha}{legacymaths}{9} - \DeclareMathSymbol{\Omega}{\mathalpha}{legacymaths}{10} - \DeclareMathSymbol{+}{\mathbin}{legacymaths}{43} - \DeclareMathSymbol{=}{\mathrel}{legacymaths}{61} - \DeclareMathDelimiter{(}{\mathopen} {legacymaths}{40}{largesymbols}{0} - \DeclareMathDelimiter{)}{\mathclose}{legacymaths}{41}{largesymbols}{1} - \DeclareMathDelimiter{[}{\mathopen} {legacymaths}{91}{largesymbols}{2} - \DeclareMathDelimiter{]}{\mathclose}{legacymaths}{93}{largesymbols}{3} - \DeclareMathDelimiter{/}{\mathord}{legacymaths}{47}{largesymbols}{14} - \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths}{36} - \renewcommand{\hbar}{{\mathchar"AF\mkern-9mu h}}% TODO: test with other fonts - } - } - \DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\shapedefault - \SetSymbolFont{operators}{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\shapedefault - \DeclareSymbolFontAlphabet\mathrm{operators} - \SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\itdefault - \SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\shapedefault - \SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\mddefault\shapedefault - \SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\mddefault\shapedefault - \SetSymbolFont{operators}{bold}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\shapedefault - \tl_if_empty:NTF \g__fontspec_bfmathrm_tl - { - \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\itdefault - } - { - \SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\shapedefault - \SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\bfdefault\shapedefault - \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\itdefault - } - \SetMathAlphabet\mathsf{bold}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\bfdefault\shapedefault - \SetMathAlphabet\mathtt{bold}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\bfdefault\shapedefault - } -\cs_new:Nn \fontspec_maybe_setup_maths: - { - \@ifpackageloaded{anttor} - { - \ifx\define@antt@mathversions a\bool_gset_false:N \g__fontspec_math_bool\fi - }{} - \@ifpackageloaded{arevmath} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{eulervm} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{mathdesign} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{concmath} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{cmbright} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{mathesf} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{gfsartemisia} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{gfsneohellenic} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{iwona} - { - \ifx\define@iwona@mathversions a\bool_set_false:N \g__fontspec_math_bool\fi - }{} - \@ifpackageloaded{kpfonts}{\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{kmath} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{kurier} - { - \ifx\define@kurier@mathversions a\bool_set_false:N \g__fontspec_math_bool\fi - }{} - \@ifpackageloaded{fouriernc} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{fourier} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{lmodern} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{mathpazo} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{mathptmx} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{MinionPro} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{unicode-math} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{breqn} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{pxfonts} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{txfonts} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{newpxmath} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{newtxmath} {\bool_gset_false:N \g__fontspec_math_bool}{} - \@ifpackageloaded{mtpro2} {\bool_gset_false:N \g__fontspec_math_bool}{} - \bool_if:NT \g__fontspec_math_bool - { - \__fontspec_info:n {setup-math} - \fontspec_setup_maths: - } - } -\AtBeginDocument{\fontspec_maybe_setup_maths:} - -%%^^A%% fontspec-code-closing.dtx -- part of FONTSPEC <wspr.io/fontspec> -\bool_if:NT \g__fontspec_cfg_bool - { - \InputIfFileExists{fontspec.cfg} - {} - { \typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.} } - } - -%%^^A%% fontspec-code-xfss.dtx -- part of FONTSPEC <wspr.io/fontspec> - -\providecommand*\scitdefault{\scdefault\itdefault} -\providecommand*\scsldefault{\scdefault\sldefault} -\providecommand*\scswdefault{\scdefault\swdefault} -\cs_new:Nn \__fontspec_shape_merge:nn { c__fontspec_shape_#1_#2_tl } -\cs_new:Nn \__fontspec_merge_default_shapes: - { - \tl_const:cn { \__fontspec_shape_merge:nn \shapedefault\scdefault } {\scdefault} - \tl_const:cn { \__fontspec_shape_merge:nn \itdefault \scdefault } {\scitdefault} - \tl_const:cn { \__fontspec_shape_merge:nn \sldefault \scdefault } {\scsldefault} - \tl_const:cn { \__fontspec_shape_merge:nn \swdefault \scdefault } {\scswdefault} - \tl_const:cn { \__fontspec_shape_merge:nn \scdefault \itdefault } {\scitdefault} - \tl_const:cn { \__fontspec_shape_merge:nn \scdefault \sldefault } {\scsldefault} - \tl_const:cn { \__fontspec_shape_merge:nn \scdefault \swdefault } {\scswdefault} - \tl_const:cn { \__fontspec_shape_merge:nn \scsldefault \itdefault } {\scitdefault} - \tl_const:cn { \__fontspec_shape_merge:nn \scitdefault \sldefault } {\scsldefault} - \tl_const:cn { \__fontspec_shape_merge:nn \scitdefault \shapedefault } {\scdefault} - \tl_const:cn { \__fontspec_shape_merge:nn \scsldefault \shapedefault } {\scdefault} - } -\__fontspec_merge_default_shapes: -\prg_new_conditional:Nnn \__fontspec_if_merge_shape:n {TF} - { - \bool_lazy_and:nnTF - { \tl_if_exist_p:c { \__fontspec_shape_merge:nn {\f@shape} {#1} } } - { - \cs_if_exist_p:c - { - \f@encoding/\f@family/\f@series/ - \tl_use:c { \__fontspec_shape_merge:nn {\f@shape} {#1} } - } - } - \prg_return_true: \prg_return_false: - } -\cs_set_eq:NN \emfontdeclare \DeclareEmphSequence -\cs_set_protected:Npn \strongfontdeclare #1 - { - \prop_gclear:N \g__fontspec_strong_prop - \int_zero:N \l__fontspec_strongdef_int - - \group_begin: - \normalfont - \clist_map_inline:nn {\strongreset,#1} - { - ##1 - \prop_gput_if_new:NxV \g__fontspec_strong_prop { \f@series } { \l__fontspec_strongdef_int } - \prop_gput:Nxn \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strongdef_int } { ##1 } - \int_incr:N \l__fontspec_strongdef_int - } - \group_end: - } -\DeclareRobustCommand \strongenv - { - \@nomath\strongenv - - \prop_get:NxNT \g__fontspec_strong_prop { \f@series } \l__fontspec_strong_tmp_tl - { - \int_set:Nn \l__fontspec_strong_int { \l__fontspec_strong_tmp_tl } - } - - \int_incr:N \l__fontspec_strong_int - - \prop_get:NxNTF \g__fontspec_strong_prop { switch-\int_use:N \l__fontspec_strong_int } \l__fontspec_strong_switch_tl - { \l__fontspec_strong_switch_tl } - { - \int_zero:N \l__fontspec_strong_int - \strongreset - } - - } -\DeclareTextFontCommand{\strong}{\strongenv} -\cs_set:Npn \strongreset {} -\cs_set:Npn \reset@font - { - \normalfont - \int_zero:N \l__fontspec_strong_int - } -\cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l__fontspec_strong_int {#1} } -\strongfontdeclare{ \bfseries } diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx index 58851e7e5a..2e67737df9 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx @@ -82,7 +82,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -969,7 +969,7 @@ %<@@=hyp> % \end{macrocode} % \begin{macrocode} -\ProvidesFile{hgeneric-testphase.def}[2023-02-20 v0.95w % +\ProvidesFile{hgeneric-testphase.def}[2023-03-09 v0.95x % generic Hyperref driver for the LaTeX PDF management testphase bundle] \RequirePackage{etoolbox} %why? diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf Binary files differindex c5476881c0..306f715e8d 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx index e812e75256..94dddfa8ee 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx @@ -45,7 +45,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % @@ -56,27 +56,27 @@ % \begin{macrocode} %<drivers>\ProvidesExplFile %<*dvipdfmx> - {l3backend-testphase-dvipdfmx.def}{2023-02-20}{} + {l3backend-testphase-dvipdfmx.def}{2023-03-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx} %</dvipdfmx> %<*dvips> - {l3backend-testphase-dvips.def}{2023-02-20}{} + {l3backend-testphase-dvips.def}{2023-03-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvips} %</dvips> %<*dvisvgm> - {l3backend-testphase-dvisvgm.def}{2023-02-20}{} + {l3backend-testphase-dvisvgm.def}{2023-03-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm} %</dvisvgm> %<*luatex> - {l3backend-testphase-luatex.def}{2023-02-20}{} + {l3backend-testphase-luatex.def}{2023-03-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)} %</luatex> %<*pdftex> - {l3backend-testphase-pdftex.def}{2023-02-20}{} + {l3backend-testphase-pdftex.def}{2023-03-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)} %</pdftex> %<*xdvipdfmx> - {l3backend-testphase-xetex.def}{2023-02-20}{} + {l3backend-testphase-xetex.def}{2023-03-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX} %</xdvipdfmx> % \end{macrocode} @@ -1965,6 +1965,7 @@ \pdfmanagement_add:nnn{Info}{Creator}{(TeX)} %</drivers> %<*dvips> + \AddToHook{begindocument}{\pdfmanagement_add:nnn{Info}{Producer}{(pdfTeX+dvips)}} \__kernel_backend_literal:e{!~<</DocumentUUID~(DocumentUUID)>>~setpagedevice} \__kernel_backend_literal:e{!~<</InstanceUUID~(InstanceUUID)>>~setpagedevice} %</dvips> @@ -2006,6 +2007,7 @@ \AddToDocumentProperties[hyperref]{pdfmetadate}{D:20010101205959-00'00'} \AddToDocumentProperties[hyperref]{pdfdate}{D:20010101205959-00'00'} \AddToDocumentProperties[hyperref]{pdfinstanceid}{uuid:0a57c455-157a-4141-8c19-6237d832fc80} + \AddToDocumentProperties[hyperref]{pdfproducer}{\c_sys_engine_exec_str-NN.NN.NN} } %</drivers> % \end{macrocode} @@ -2024,29 +2026,98 @@ % an unnamed object so should be referenced directly with |\pdf_object_ref_last:| % \begin{macrocode} %<*luatex> -\cs_new_protected:Npn \__pdf_backend_metadata_stream:n #1 +\cs_new_protected:Npn \@@_backend_metadata_stream:n #1 { \tex_immediate:D \tex_pdfextension:D obj ~uncompressed~ - \__pdf_backend_object_write:nn {stream} {{/Type~/Metadata~/Subtype~/XML}{#1}} + \@@_backend_object_write:nn {stream} {{/Type~/Metadata~/Subtype~/XML}{#1}} } %</luatex> %<*pdftex> -\cs_new_protected:Npn \__pdf_backend_metadata_stream:n #1 +\cs_new_protected:Npn \@@_backend_metadata_stream:n #1 { \group_begin: \tex_pdfcompresslevel:D 0 \scan_stop: \tex_immediate:D \tex_pdfobj:D - \__pdf_backend_object_write:nn {stream} {{/Type~/Metadata~/Subtype~/XML}{#1}} + \@@_backend_object_write:nn {stream} {{/Type~/Metadata~/Subtype~/XML}{#1}} \group_end: } %</pdftex> %<*xdvipdfmx|dvipdfmx|dvips|dvisvgm> -\cs_new_protected:Npn \__pdf_backend_metadata_stream:n #1 +\cs_new_protected:Npn \@@_backend_metadata_stream:n #1 { \pdf_object_unnamed_write:nn {stream}{{/Type~/Metadata~/Subtype~/XML}{#1}} } %</xdvipdfmx|dvipdfmx|dvips|dvisvgm> % \end{macrocode} +% +% \subsection{Suppressing deprecated PDF features} +% +% \texttt{/ProcSet}, \texttt{/CharSet} and the \texttt{/Info} dictionary +% are deprecated in PDF 2.0. For the pdf/A-4 standard they must be suppressed. +% Not every engine is able to do this, but for pdfTeX and luatex we define suitable +% backend command. \texttt{/ProcSet} is suppressed automatically +% for pdf version 2.0 starting with in texlive 2023. +% \begin{macro}{\@@_backend_omit_charset:n} +% The option to omit /Charset exists already for quite some time for the two +% engines. +% \begin{macrocode} +%<*xdvipdfmx|dvipdfmx|dvips|dvisvgm> +\cs_new_protected:Npn \@@_backend_omit_charset:n #1 {} %#1 number +%</xdvipdfmx|dvipdfmx|dvips|dvisvgm> +%<*pdftex> +\cs_new_protected:Npn \@@_backend_omit_charset:n #1 %#1 number + { + \tex_pdfomitcharset:D = #1 \scan_stop: + } +%</pdftex> +%<*luatex> +\cs_new_protected:Npn \@@_backend_omit_charset:n #1 %#1 number + { + \tex_pdfvariable:D omitcharset = #1 \scan_stop: + } +%</luatex> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_backend_omit_info:n} +% The option to suppress the info dictionary will be available in +% texlive 2023. +% \begin{macrocode} +%<*xdvipdfmx|dvipdfmx|dvips|dvisvgm> +\cs_new_protected:Npn \@@_backend_omit_info:n #1 {} %#1 number +%</xdvipdfmx|dvipdfmx|dvips|dvisvgm> +%<*pdftex> +\bool_lazy_and:nnTF + { \int_compare_p:nNn {\tex_pdftexversion:D } > {139} } + { \int_compare_p:nNn {\tex_pdftexrevision:D } > {24} } + { + \cs_new_protected:Npn \@@_backend_omit_info:n #1 %#1 number + { + \pdfomitinfodict = #1 \scan_stop: + } + } + { + \cs_new_protected:Npn \@@_backend_omit_info:n #1 {}%#1 number + + } +%</pdftex> +%<*luatex> + \int_compare:nNnTF {\directlua{tex.print(status.list()["development_id"])} } > {7560} + { + \cs_new_protected:Npn \@@_backend_omit_info:n #1 %#1 number + { + \tex_pdfvariable:D omitinfodict = #1 \scan_stop: + } + } + { + \cs_new_protected:Npn \@@_backend_omit_info:n #1 {} %#1 number + } +%</luatex> +% \end{macrocode} +% \end{macro} +% + +% % \subsection{lua code for lualatex} % \begin{macrocode} %<*lua> diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf Binary files differindex 229895df9b..03c2cb4d73 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx index bd62c74dc4..761a2fef58 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -432,7 +432,7 @@ % \begin{macrocode} %<@@=pdfannot> %<*header> -\ProvidesExplPackage{l3pdfannot}{2023-02-20}{0.95w} +\ProvidesExplPackage{l3pdfannot}{2023-03-09}{0.95x} {PDF-annotations} \RequirePackage{l3pdfdict} %</header> diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf Binary files differindex c8d599d700..6efe0a3e81 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx index b46a87348e..4a6af666de 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -208,7 +208,7 @@ % \begin{macrocode} %<@@=pdfdict> %<*header> -\ProvidesExplPackage{l3pdfdict}{2023-02-20}{0.95w} +\ProvidesExplPackage{l3pdfdict}{2023-03-09}{0.95x} {Tools for PDF dictionaries (LaTeX PDF management testphase bundle)} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf Binary files differindex 30c708719d..277eda9a51 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx index f5f653cad7..0a3933eaca 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf Binary files differindex 1a07c64766..f3f2709d1c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx index 34e1d8b8e0..e5f0b33fed 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx @@ -64,7 +64,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf Binary files differindex 8b051f6999..c3a510d875 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx index 8a3711b797..b2920fcdc4 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf Binary files differindex 000a7452d5..c668f282fe 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx index f2df427ebf..5011ea4916 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx @@ -55,7 +55,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf Binary files differindex b9b7bbb303..e33b6a3598 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx index 423231bf7c..55a230c77e 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx @@ -83,7 +83,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf Binary files differindex c95db774a0..400c83654e 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx index d4a6011750..72f111d55a 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf Binary files differindex 608479e30b..98020b9fa2 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx index f972c7cf87..c9181a6ed8 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx @@ -69,7 +69,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -973,7 +973,7 @@ %<*package> %<@@=pdffield> \NeedsTeXFormat{LaTeX2e} -\ProvidesExplPackage{l3pdffield-testphase}{2023-02-20}{0.95w}% +\ProvidesExplPackage{l3pdffield-testphase}{2023-03-09}{0.95x}% {form fields} % \end{macrocode} % \subsection{hyperref specific command} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf Binary files differindex 63440cf172..35caa5b8db 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx index 4582d4a99d..fe3ffbd6ef 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -398,7 +398,7 @@ % % \begin{macrocode} %<*header> -\ProvidesExplPackage{l3pdffile}{2023-02-20}{0.95w} +\ProvidesExplPackage{l3pdffile}{2023-03-09}{0.95x} {embedding and referencing files in PDF---LaTeX PDF management testphase bundle} \RequirePackage{l3pdftools} %temporarly!! %</header> diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf Binary files differindex e06e86127d..c51b62daf8 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx index 4fffefa1d7..df5724be08 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx @@ -57,7 +57,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -632,7 +632,7 @@ %<@@=pdfmanagement> %<*header> % -\ProvidesExplPackage{l3pdfmanagement}{2023-02-20}{0.95w} +\ProvidesExplPackage{l3pdfmanagement}{2023-03-09}{0.95x} {Management of core PDF dictionaries (LaTeX PDF management testphase bundle)} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf Binary files differindex 54c1ccae90..fa89390e25 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx index ed08282b30..034cf6fd00 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -200,17 +200,18 @@ % tested from TeX, but in a current LaTeX normally ToUnicode are set for all fonts. % \item[|tagged|] that is set in A-2a and A-3a and means that the pdf must be % tagged. This is currently neither tested not enforced somewhere. +% \item[|no_CharSet|] CharSet is deprecated is pdf 2.0 and should not +% be used in A-4. l3pdfmeta will therefore suppress it for the +% engines pdftex and luatex (the other engines have no suitable option) % \item[|Trailer_no_Info|] The \texttt{Info} dictionary % has been deprecated since quite some time. Metadata should be set with % XMP-data instead. In PDF A-4 now the \texttt{Info} dictionary % shall not be present in the trailer dictionary at all % (unless there exists a PieceInfo entry in the Catalog). And if it is present -% it should only contain the \texttt{/ModDate} entry. The engines -% do not offer currently an option to suppress the dictionary completly, -% one can only give the entries the value null (it only works for all entries -% with lualatex and pdflatex). The next pdflatex will offer \cs{pdfomitinfodict}. -% Until then l3pdfmeta does nothing with this requirement. -% +% it should only contain the \texttt{/ModDate} entry. In +% texlive 2023 the engines pdftex and luatex have primitives +% to suppress the dictionary +% and l3pdfmeta will make use of it. % \end{description} % % \subsubsection{Tests with values and special handlers} @@ -562,7 +563,7 @@ % \begin{macrocode} %<@@=pdfmeta> %<*header> -\ProvidesExplPackage{l3pdfmeta}{2023-02-20}{0.95w} +\ProvidesExplPackage{l3pdfmeta}{2023-03-09}{0.95x} {PDF-Standards---LaTeX PDF management testphase bundle} %</header> % \end{macrocode} @@ -746,6 +747,10 @@ { \pdfmeta_standard_verify:nF { annot_flags } { \@@_verify_pdfa_annot_flags: } + \pdfmeta_standard_verify:nF { Trailer_no_Info } + { \__pdf_backend_omit_info:n {1} } + \pdfmeta_standard_verify:nF { no_CharSet } + { \__pdf_backend_omit_charset:n {1} } \pdfmeta_standard_verify:nnF { min_pdf_version } { \pdf_version: } { \msg_warning:nnxxx {pdf}{wrong-pdfversion} @@ -939,6 +944,8 @@ \prop_gput:cnn { g_@@_standard_pdf/A-4_prop }{year}{2020} \prop_gput:cnn + { g_@@_standard_pdf/A-4_prop }{no_CharSet}{} +\prop_gput:cnn { g_@@_standard_pdf/A-4_prop }{Trailer_no_Info}{} \prop_gremove:cn { g_@@_standard_pdf/A-4_prop }{conformance} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf Binary files differindex 2795c0188f..66e3bf0206 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx index d3ad09cbfb..8996d74131 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -211,7 +211,7 @@ % % \begin{macrocode} %<*header> -\ProvidesExplPackage{l3pdftools}{2023-02-20}{0.95w} +\ProvidesExplPackage{l3pdftools}{2023-03-09}{0.95x} {candidate commands for l3pdf---LaTeX PDF management testphase bundle} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf Binary files differindex e0b99f153f..633a4ef871 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx index c12604614d..4eeb9071ab 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -132,7 +132,7 @@ % \begin{macrocode} %<@@=pdf> %<*header> -\ProvidesExplPackage{l3pdfxform}{2023-02-20}{0.95w} +\ProvidesExplPackage{l3pdfxform}{2023-03-09}{0.95x} {command to create xforms (beta)---LaTeX PDF management testphase bundle} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf Binary files differindex b9261b84cb..4d0fb96e1f 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx index 5fbd9314e6..ba3473cb30 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -215,7 +215,7 @@ % \begin{macrocode} %<@@=pdfmanagement> %<*header> -\ProvidesExplPackage{ltdocinit}{2023-02-20}{0.95w} +\ProvidesExplPackage{ltdocinit}{2023-03-09}{0.95x} {Initialize document metadata} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf Binary files differindex d7311dddb1..963c915cca 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua b/macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua deleted file mode 100644 index 1d4eab4de1..0000000000 --- a/macros/latex/contrib/pdfmanagement-testphase/luaotfload-l3color-tmp.lua +++ /dev/null @@ -1,78 +0,0 @@ -if not luaotfload.set_transparent_colorstack then return end -local l = lpeg -local spaces = l.P' '^0 -local digit16 = l.R('09', 'af', 'AF') - -local octet = digit16 * digit16 / function(s) return string.format('%.3g ', tonumber(s, 16) / 255) end -local htmlcolor = l.Cs(octet * octet * octet * -1 * l.Cc'rg') -local color_export = { - token.create'endlocalcontrol', - token.create'tex_hpack:D', - token.new(0, 1), - token.create'color_export:nnN', - token.new(0, 1), - '', - token.new(0, 2), - token.new(0, 1), - 'backend', - token.new(0, 2), - token.create'l_tmpa_tl', - token.create'exp_after:wN', - token.create'__color_select:nn', - token.create'l_tmpa_tl', - token.new(0, 2), -} -local group_end = token.create'group_end:' -local value = (1 - l.P'}')^0 -luatexbase.add_to_callback('luaotfload.parse_color', function (value) - local html = htmlcolor:match(value) - if html then return html end - - tex.runtoks(function() - token.get_next() - color_export[6] = value - tex.sprint(-2, color_export) - end) - local list = token.scan_list() - if not list.head or list.head.next or list.head.subtype ~= node.subtype'pdf_colorstack' then - error'Unexpected backend behavior' - end - local cmd = list.head.data - node.free(list) - return cmd -end, 'l3color') - --- Let's also integrate l3opacity - -luaotfload.set_transparent_colorstack(token.create'c__opacity_backend_stack_int'.index) - -local transparent_register = { - token.create'pdfmanagement_add:nnn', - token.new(0, 1), - 'Page/Resources/ExtGState', - token.new(0, 2), - token.new(0, 1), - '', - token.new(0, 2), - token.new(0, 1), - '<</ca ', - '', - '/CA ', - '', - '>>', - token.new(0, 2), -} -luatexbase.add_to_callback('luaotfload.parse_transparent', function(value) - value = (octet * -1):match(value) - if not value then - tex.error'Invalid transparency value' - return - end - value = value:sub(1, -2) - local result = 'opacity' .. value - tex.runtoks(function() - transparent_register[6], transparent_register[10], transparent_register[12] = result, value, value - tex.sprint(-2, transparent_register) - end) - return '/' .. result .. ' gs' -end, 'l3opacity') diff --git a/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf b/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf Binary files differindex 891af85d6d..dc8d376f76 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/output-patches-tmp-ltx.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx index 2e40ed6814..23ce50f33d 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -63,7 +63,7 @@ % |debug={firstaidoff={name1,name2,...},...}|. % \begin{macrocode} %<*package> -\ProvidesExplPackage{pdfmanagement-firstaid}{2023-02-20}{0.95w} +\ProvidesExplPackage{pdfmanagement-firstaid}{2023-03-09}{0.95x} {LaTeX PDF management testphase bundle / firstaid-patches} %<@@=pdfmanagement> @@ -96,36 +96,21 @@ % \subsection{Fontspec} % When using luaLaTeX opacity is broken (issue \#30) as % fontspec/luaotfload doesn't use the pdfmanagement but write to ExtGState directly -% To repair this some new lua code is needed. This also -% improves the color parsing and allows to use cmyk and spot colors as font colors. -% It is also needed to use a patch version of \texttt{fontspec-luatex.sty} to -% slightly change the way how the Opacity and Color key are handled. -% The patch is only executed if luaotfload is new enough. +% To repair this some new lua code is needed. It also needs a new fontspec +% and a change in the color key. % \begin{macrocode} \sys_if_engine_luatex:T { - \lua_now:n - { - if~not~luaotfload.set_transparent_colorstack~ - then~ - tex.print("\\bool_gset_false:N\\g_@@_firstaid_fontspec_bool")~ - end - } \bool_if:NT \g_@@_firstaid_fontspec_bool { - \msg_info:nnn{pdfmanagement}{firstaid}{fontspec} - \file_if_exist:nT { luaotfload-l3color-tmp.lua } - { - \lua_load_module:n { luaotfload-l3color-tmp.lua } - } - - \declare@file@substitution{fontspec-luatex.sty}{fontspec-luatex-tmp-ltx.sty} - \AddToHook{package/fontspec/after} + \@ifpackagelater{fontspec}{2023-03-10} { - \str_if_eq:vnF{ver@fontspec.sty}{2022/01/15~v2.8a~Font~selection~for~XeLaTeX~and~LuaLaTeX} - {\msg_warn:nnn{pdfmanagement}{firstaid-changed}{fontspec}} - } - } + \__fontspec_keys_define_code:nnn {fontspec} {Color} + { + \tl_set:Nn \l__fontspec_hexcol_tl {#1} + } + }{} + } } % \end{macrocode} % \subsection{Output routine} diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf Binary files differindex 30aa895e05..05f5aeac65 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx index 7b8a19d4cb..15ee3c7d0c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95w, released 2023-02-20} +% \date{Version 0.95x, released 2023-03-09} % % \maketitle % \begin{documentation} @@ -386,7 +386,7 @@ % \begin{macrocode} %<@@=pdf> %<*package> -\ProvidesExplPackage{pdfmanagement-testphase}{2023-02-20}{0.95w} +\ProvidesExplPackage{pdfmanagement-testphase}{2023-03-09}{0.95x} {LaTeX PDF management testphase bundle} \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} \IfFormatAtLeastTF{2020-10-01}{}{ @@ -414,7 +414,7 @@ % to allow to set it in the document. % \begin{macrocode} %<*header> -\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-02-20}{0.95w} +\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-03-09}{0.95x} {PDF~management~code~(testphase)} %</header> %<*package> diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf Binary files differindex c4205bc6e4..7e40c5713c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty index 98baf67303..192e4b77a1 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty @@ -1,6 +1,6 @@ %% LaTeX2e file `xcolor-patches.sty' %% -\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-02-20 v0.95w patch xcolor for l3color] +\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-03-09 v0.95x patch xcolor for l3color] \@ifundefined{color_set:nn}{\RequirePackage{l3color}}{} \ExplSyntaxOn diff --git a/macros/latex/contrib/tugboat/NEWS b/macros/latex/contrib/tugboat/NEWS index 5f9b4fa553..aa1e53391e 100644 --- a/macros/latex/contrib/tugboat/NEWS +++ b/macros/latex/contrib/tugboat/NEWS @@ -1,7 +1,16 @@ -$Id: NEWS 458 2023-01-16 18:44:30Z karl $ +$Id: NEWS 463 2023-03-08 21:59:19Z karl $ This file records noteworthy changes. This file is public domain. ----------------- +2.29 (2023-03-08): + +ltugboat.cls: +- \url: the fallback definition now typesets (in tt) more special characters. +- omit TUG-specific doi when not typesetting in the production environment. + +tugboat.bst: abbreviate "chapter" to "ch." in tugboat.bst. + +----------------- 2.28 (2023-01-16): ltugboat.cls: diff --git a/macros/latex/contrib/tugboat/ltubguid.pdf b/macros/latex/contrib/tugboat/ltubguid.pdf Binary files differindex 4e9a95b979..3d39af7dad 100644 --- a/macros/latex/contrib/tugboat/ltubguid.pdf +++ b/macros/latex/contrib/tugboat/ltubguid.pdf diff --git a/macros/latex/contrib/tugboat/tugboat.bst b/macros/latex/contrib/tugboat/tugboat.bst index a64d28fd17..1129bb8ab5 100644 --- a/macros/latex/contrib/tugboat/tugboat.bst +++ b/macros/latex/contrib/tugboat/tugboat.bst @@ -1,4 +1,4 @@ -%%% $Id: tugboat.bst 457 2023-01-16 18:43:54Z karl $ +%%% $Id: tugboat.bst 462 2023-03-08 17:26:54Z karl $ %%% TUGboat changes are public domain. %%% %%% Modified for TUGboat from abbrvurl.bst: @@ -735,7 +735,7 @@ FUNCTION {format.chapter.pages} { chapter empty$ 'format.pages { type empty$ - { "chapter" } + { "ch." } { type "l" change.case$ } if$ chapter tie.or.space.connect @@ -972,7 +972,8 @@ FUNCTION {format.pubmed} % (aka the doiurl variable), and only add it if needed. % % This code is from https://tex.stackexchange.com/questions/119237 -% (thank you, mafp). +% (thank you, mafp). The original urlbst package solved the problem in a +% different (simpler) way in its 0.9.1 (January 2023) release. % % The "X Y contains" function checks if string Y is contained in X. % Although we only need to check if Y is at the beginning of X, diff --git a/macros/latex/contrib/tugboat/tugboat.dtx b/macros/latex/contrib/tugboat/tugboat.dtx index d205ab011d..ea7f22af77 100644 --- a/macros/latex/contrib/tugboat/tugboat.dtx +++ b/macros/latex/contrib/tugboat/tugboat.dtx @@ -1,5 +1,5 @@ % \iffalse (this is a meta-comment (so they say)) -% $Id: tugboat.dtx 459 2023-01-16 21:05:37Z karl $ +% $Id: tugboat.dtx 462 2023-03-08 17:26:54Z karl $ % tugboat.dtx - main source for LaTeX TUGboat classes. % % Copyright 1994-2023 TeX Users Group. @@ -28,7 +28,7 @@ %<ltugboatsty>\ProvidesPackage{ltugboat} %<ltugprocsty>\ProvidesPackage{ltugproc} %<ltugcomn> \ProvidesPackage{ltugcomn} - [2023-01-16 v2.28 + [2023-03-08 v2.29 %<ltugboatcls> TUGboat journal class% %<ltugproccls> TUG conference proceedings class% %<ltugboatsty|ltugprocsty> TUG compatibility package% @@ -1308,7 +1308,13 @@ \def\tburl{\url}% \def\tbsurl{\url}% no hyperref, so just \url is fine. \def\tbhurl{\url}% - \ifx\url\undefined \let\url\texttt \fi % er, make sure \url is defined + \ifx\url\undefined % make sure \url is defined + \def\url{\begingroup % might as well catch common special chars + \catcode`\#=12 \catcode`\$=12 \catcode`\%=12 \catcode`\^=12 + \catcode`\&=12 \catcode`\_=12 \catcode`\~=12 + \finish@tub@url} + \def\finish@tub@url#1{\tt #1\endgroup} + \fi \else % This hyperref hook-in is due to Ulrike Fischer. % \url{https://github.com/latex3/hyperref/issues/125}. @@ -3544,21 +3550,27 @@ \def\tubdoiprefix{10.47397/tb} % the number crossref assigned us \def\tubabovedoi{} % fudge spacing or whatever. % -\def\tubtypesetdoi{\iftubomitdoioption\else % if not explicit omission ... - \iftubfinaloption % do this if [final], even if pageno>900 - \vbox to 0pt{% don't impact normal layout - \edef\thedoi{\ifnum\count0>900 xnot\fi % but make url invalid if >900 - doi.org/\tubdoiprefix/\volno-\issno/\jobname}% - \scriptsize - \vskip\baselineskip - \tubabovedoi - \iftubsecondcolstart \moveright \tubcolwidthandgutter \fi - \rlap{\expandafter\tbsurl\expandafter{\thedoi}}% - \vss - }% +\def\tubtypesetdoi{% + \iftubomitdoioption\else % do if not explicit omission ... + \ifnum\volno>0 % and if being run for production ... + \iftubfinaloption % and if [final], even if pageno>900 + \vbox to 0pt{% don't impact normal layout + \edef\thedoi{% but make url invalid if >900 + \ifnum\count0>900 example.org% + \else doi.org\fi + /\tubdoiprefix/\volno-\issno/\jobname}% + \scriptsize + \vskip\baselineskip + \tubabovedoi + \iftubsecondcolstart \moveright \tubcolwidthandgutter \fi + \rlap{\expandafter\tbsurl\expandafter{\thedoi}}% + \vss + }% + \fi % tubfinaloption + \fi % volno>0 + \fi % !tubomitdoioption \global\let\tubtypesetdoi\@empty % only do it once, no matter what. - \fi -\fi} +} % % % \end{macrocode} diff --git a/macros/latex/contrib/tugboat/tugboat.pdf b/macros/latex/contrib/tugboat/tugboat.pdf Binary files differindex 611ea5fe18..fc6500607f 100644 --- a/macros/latex/contrib/tugboat/tugboat.pdf +++ b/macros/latex/contrib/tugboat/tugboat.pdf |