[latex3-commits] [latex3/latex2e] encoding-subset: updating the TS1 sub-encoding declarations to match font changes (25a856d7)

github at latex-project.org github at latex-project.org
Sun Jan 28 12:29:25 CET 2024


Repository : https://github.com/latex3/latex2e
On branch  : encoding-subset
Link       : https://github.com/latex3/latex2e/commit/25a856d77c64c0da6884111bd952aabe50f3e64e

>---------------------------------------------------------------

commit 25a856d77c64c0da6884111bd952aabe50f3e64e
Author: Frank Mittelbach <frank.mittelbach at latex-project.org>
Date:   Sun Jan 28 12:29:25 2024 +0100

    updating the TS1 sub-encoding declarations to match font changes


>---------------------------------------------------------------

25a856d77c64c0da6884111bd952aabe50f3e64e
 base/build.lua        |   1 +
 base/changes.txt      |  11 +
 base/doc/ltnews39.tex | 112 ++++++++-
 base/format.ins       |  10 +-
 base/lttextcomp.dtx   | 671 ++++++++++++++++++++++++++++++++++++++++++++++----
 5 files changed, 754 insertions(+), 51 deletions(-)

diff --git a/base/build.lua b/base/build.lua
index 7e19abca..e715de81 100644
--- a/base/build.lua
+++ b/base/build.lua
@@ -26,6 +26,7 @@ installfiles   =
     "*.ltx",
     "*.lua",
     "*.sty",
+    "checkencodingsubset.tex",
     "docstrip.tex",
     "idx.tex",
     "lablst.tex",
diff --git a/base/changes.txt b/base/changes.txt
index d328fbda..e8083792 100644
--- a/base/changes.txt
+++ b/base/changes.txt
@@ -6,6 +6,17 @@ to completeness or accuracy and it contains some references to files that are
 not part of the distribution.
 ================================================================================
 
+2024-01-27  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* lttextcomp.dtx (section{Font family sub-encodings setup}):
+	Adjusted/corrected TS1 sub-encoding declarations for various families.
+	Some families have changed their names (due to licensing issues),
+	some got new glyphs added, and some were simply incorrectly categorized
+	(gh/1257)
+
+	* lttextcomp.dtx (section{The \texttt{checkencodingsubset.tex} file}):
+	Added check file for encoding subset
+
 2024-01-03  Phelype Oleinik  <phelype.oleinik at latex-project.org>
 	* lthooks.dtx:
 	Correct expansion of \@@_print_args:nn argument (gh/1221).
diff --git a/base/doc/ltnews39.tex b/base/doc/ltnews39.tex
index 4fcbeece..538e071c 100644
--- a/base/doc/ltnews39.tex
+++ b/base/doc/ltnews39.tex
@@ -239,6 +239,108 @@ the direct equivalent to \cs{newcommand} is \cs{NewExpandableDocumentCommand}.
 %
 \githubissue{1189}
 
+\subsection{Declaring appropriate sub-encodings for \texttt{TS1} symbol fonts}
+
+In 2020 we incorporated support for the \texttt{TS1} symbol encoding
+directly into the kernel and this way removed the need to load the
+\pkg{textcomp} package~\cite{39:ltnews31} to make commands such as
+\cs{texteuro} available.
+
+There is, however, a big problem with this \texttt{TS1} symbol
+encoding: only very few fonts can provide every glyph that is supposed
+to be part of \texttt{TS1}. This means that changing font families
+might result in certain symbols becoming unavailable. This can be a
+major disaster if, for example, the \cs{textteuro} (\texteuro) or the
+\cs{textohm} (\textohm) are no longer printed in your document, just
+because you altered your text font family.
+
+To mediate this problem, we also introduced in 2020 the declaration
+\cs{DeclareEncodingSubset}. This declaration is supposed to be used in
+font definition files for the \texttt{TS1} encoding to specify which
+subset (we have defined 10 common ones) a specific font implements. If
+such a declaration is used then missing symbols are automatically
+taking from a fallback font. While this is not perfect, it is the best
+you can do other than painstrickenly checking that your document only
+uses glyphs that the font supports and if necessary switch to a
+different font or avoid the missing symbols. See also the discussion
+in \cite{39:ltnews33}.
+
+To jumpstart the process we also added declarations to the \LaTeX{}
+kernel for most of the fonts found in \TeX{}Live at the time\Dash with
+the assumption that such declarations would over time be superseded by
+declarations in the \texttt{.fd} files. Unfortunately, this hasn't
+happened yet (or not often) and so many of the initial declarations
+went stale: several fonts got new glyphs added to them (so their
+sub-encoding should have been changed but didn't); others (mainly due
+to license issues) changed the family name and thus our declarations
+became useless and the renamed fonts (now without a declaration) ended
+up in the default sub-encoding which offers only few glyphs; yet
+others such as CharisSIL (which triggered the GitHub issue) were
+simply not around at the time.
+
+We have therefore, again attempted to provide the (currently) correct
+declarations, but it is obvious that this is not a workable
+process. As we do not maintain the fonts we do not have the
+information that something has changed, and to regularly check the
+ever growing font support bundles is simply not possible. It is
+therefore very important that maintainers of font packages to not only
+provide \texttt{.fd} files but also add such a declaration to every
+\texttt{TS1...fd} font definition file that they distribute.
+
+To simplify this process, we now provide a simple \LaTeX{} file
+(\texttt{checkencodingsubset.tex}) for determining the correct (safe)
+sub-encoding. If run, it asks for a font family and then outputs its
+findings, for example, for \texttt{AlgolRevived-TLF} you will get:
+\begin{verbatim}
+-----------------------------------------
+Testing font family AlgolRevived-TLF
+(currently TS1-sub-encoding 9)
+-----------------------------------------
+Some glyphs are missing from sub-encoding 8:
+   ==> \textcelsius (137) is missing
+   ==> \texttwosuperior (178) is missing
+   ==> \textthreesuperior (179) is missing
+   ==> \textonesuperior (185) is missing
+Some glyphs are missing from sub-encoding 7:
+   ==> \texteuro (191) is missing
+All glyphs between sub-encoding 6 and 7 exist
+All glyphs between sub-encoding 5 and 6 exist
+All glyphs between sub-encoding 4 and 5 exist
+Some glyphs are missing from sub-encoding 3:
+   ==> \textwon (142) is missing
+All glyphs between sub-encoding 2 and 3 exist
+Some glyphs are missing from sub-encoding 1:
+   ==> \textmho (77) is missing
+   ==> \textpertenthousand (152) is missing
+All glyphs between sub-encoding 0 and 1 exist
+All glyphs in core exist
+-----------------------------------------
+TS1 encoding subset for AlgolRevived-TLF (ok)
+Use sub-encoding 9
+-----------------------------------------
+\end{verbatim}
+This output is meant for human consumption, e.g., you see which glyphs
+are missing and why a certain sub-encoding is suggested, but it is not
+that hard to use it in a script and extract the suggested sub-encoding
+by grepping for the line starting with \texttt{Use sub-encoding}.
+
+Of course, this check will only work if the missing glyphs are really
+missing: some fonts placed \enquote{tofu}\footnote{Little squares to
+indicate a missing symbol.} into such slots and in this case it looks
+to \TeX{} as if the glyph is provided. For example, for the old
+Palatino fonts (family \texttt{ppl}) it would report
+\begin{verbatim}
+-----------------------------------------
+TS1 encoding subset for ppl (bad)
+Use sub-encoding 0 (not 5)
+-----------------------------------------
+\end{verbatim}
+i.e., all glyphs are provided, while in reality more than twenty are
+missing and sub-encoding 5 as declared in the kernel is correct.
+%
+\githubissue{1257}
+
+
 
 %\section{Bug fixes}
 
@@ -312,8 +414,16 @@ didn't get this treatment. This oversight has now been corrected.
 %\newblock Reprinted with corrections in 1996.
 %
 %
+\bibitem{39:ltnews31} \LaTeX{} Project Team.
+  \emph{\LaTeXe{} news 31}. February, 2020.
+  \url{https://latex-project.org/news/latex2e-news/ltnews31.pdf}
+
+\bibitem{39:ltnews33} \LaTeX{} Project Team.
+  \emph{\LaTeXe{} news 33}. June 2021.\\
+  \url{https://latex-project.org/news/latex2e-news/ltnews33.pdf}
+
 \bibitem{39:ltnews37} \LaTeX{} Project Team.
-  \emph{\LaTeXe{} news 37}.\\
+  \emph{\LaTeXe{} news 37}. June 2023.\\
   \url{https://latex-project.org/news/latex2e-news/ltnews37.pdf}
 
 %\bibitem{39:blueprint} Frank Mittelbach and Chris Rowley.
diff --git a/base/format.ins b/base/format.ins
index ba096500..0e295ed5 100644
--- a/base/format.ins
+++ b/base/format.ins
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2023
+%% Copyright (C) 1993-2024
 %% The LaTeX Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2023
+Copyright (C) 1993-2024
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -88,7 +88,7 @@ reports for it can be opened at https://latex-project.org/bugs.html
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 2015-2023
+Copyright (C) 2015-2024
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -123,7 +123,7 @@ extension .ins) which are part of the distribution.
 
 This is a generated file.
 
-Copyright (C) 1993-2023
+Copyright (C) 1993-2024
 The LaTeX Project and any individual authors listed elsewhere
 in this file.
 
@@ -228,6 +228,8 @@ the system are in the document `cfgguide.tex'.
           \from{lttextcomp.dtx}{TS1sty}}
    \file{textcomp-2018-08-11.sty}{%
           \from{lttextcomp.dtx}{TS1oldsty}}
+   \file{checkencodingsubset.tex}{%
+          \from{lttextcomp.dtx}{TS1check}}
   }
 
 \generateFile{oldlfont.sty}{t}{%
diff --git a/base/lttextcomp.dtx b/base/lttextcomp.dtx
index 3602e0a6..e5ed8630 100644
--- a/base/lttextcomp.dtx
+++ b/base/lttextcomp.dtx
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2019-2023
+% Copyright (C) 2019-2024
 % The LaTeX Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -37,7 +37,7 @@
 %
 %
 \ProvidesFile{lttextcomp.dtx}
-             [2022/08/07 v1.0g LaTeX Kernel (text companion symbols)]
+             [2024/01/27 v1.1a LaTeX Kernel (text companion symbols)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -163,11 +163,12 @@
 %
 %  \begin{macro}{\DeclareEncodingSubset}
 %
-%     The declaration takes 3 mandatory arguments: an \emph{encoding}
+%    The declaration takes 3 mandatory arguments: an \emph{encoding}
 %    for which a subsetting is wanted (currently always \texttt{TS1},
 %    and most likely forever), the \emph{font family} for which we
-%    declare the subset and finally the \emph{subset} number (between \texttt{0} (all
-%    of the encoding is supported) and \texttt{9} many glyphs are missing.
+%    declare the subset and finally the \emph{subset} number (between
+%    \texttt{0} (all of the encoding is supported) and \texttt{9} many
+%    glyphs are missing.
 %
 %    For \texttt{TS1} the numbers have been chosen in a way that most
 %    fonts can be fairly correctly categorized, but the default
@@ -950,6 +951,8 @@
 %    This first block contains the fonts that have been already
 %    supported by the \texttt{textcomp} package way back, i.e., the
 %    font families that have \TeX{} support since the mid-nineties.
+% \changes{v1.1a}{2024/01/27}{Adjusted/corrected TS1 sub-encoding
+%    declarations for various families (gh/1257)}
 %    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{ccr}     {0}
 \DeclareEncodingSubset{TS1}{cmbr}    {0}
@@ -981,16 +984,28 @@
 \DeclareEncodingSubset{TS1}{lmss}    {1}
 \DeclareEncodingSubset{TS1}{lmssq}   {1}
 \DeclareEncodingSubset{TS1}{lmvtt}   {1}
-\DeclareEncodingSubset{TS1}{lmtt}    {1} % missing TM, SM and
-                                         % pertenthousand for some reason
+%    \end{macrocode}
+%    The lmtt family is missing TM, SM, and perthausand for some
+%    reason, so the first safe sub-encoding would be 2, but that is
+%    then missing out a huge number of glyphs that are available, so
+%    we claim it is sub-encoding 1 even if this can lead to missing glyphs.s
+%    \begin{macrocode}
+\DeclareEncodingSubset{TS1}{lmtt}    {1} % missing TM, SM and pertenthousand
 %    \end{macrocode}
 %
+%    The next three families have been removed from TeX Live, but we
+%    keep the definitions
 %    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{ptmx}    {2}
 \DeclareEncodingSubset{TS1}{ptmj}    {2}
 \DeclareEncodingSubset{TS1}{ul8}     {2}
 %    \end{macrocode}
 %
+%    The next set are the early PostScript font implementations, these
+%    days there are better alternatives, but \ldots. Note that, their
+%    virtual fonts contain a lot of ``tofu'' in form of black squares,
+%    this they don't even give a missing character warning if you
+%    select such a glyph. This is why they are set as sub-encoding 5.
 %    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{bch} {5} % tofu for blank, ohm
 \DeclareEncodingSubset{TS1}{futj}{5} % tofu for blank, interrobang/down, ohm
@@ -1009,12 +1024,11 @@
 \DeclareEncodingSubset{TS1}{ul9} {5} % tofu for blank, interrobang/down, ohm
 %    \end{macrocode}
 %
+%    The next set suffers from the same problem and they contain even
+%    less real glyphs.
 %    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{dayroms}{6} % tofu for blank, interrobang/down, ohm
 \DeclareEncodingSubset{TS1}{dayrom} {6} % tofu for blank, interrobang/down, ohm
-%    \end{macrocode}
-%
-%    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{augie}{8} % really only missing euro
 \DeclareEncodingSubset{TS1}{put}  {8}
 \DeclareEncodingSubset{TS1}{uag}  {8} % probably (currently broken distrib)
@@ -1024,6 +1038,7 @@
 %    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{zi4}     {9}
 %    \end{macrocode}
+%
 %    LucidaBright (sold through TUG) probably not quite correct, I
 %    guess as I have the older fonts \ldots
 %    \begin{macrocode}
@@ -1041,44 +1056,72 @@
 %    Below are the newer fonts that have support files for
 %    \LaTeX{}. With very few exceptions the classifications are done
 %    so that all characters are correctly produced (either being
-%    available in the font or substituted.
+%    available in the font or substituted).
 %
 %    There are a few fonts that contain ``tofu'' squares in places
 %    (instead of a real glyph) and in a few cases some really seldom
 %    needed chars are unavailable, i.e., produce missing glyphs (to
 %    avoid that a large number of available chars are unnecessarily
-%    substituted.
+%    substituted).
 %
+%    Encoding declarations for those font family shouldn't really be
+%    in the kernel, but part of the \texttt{.fd} files for the
+%    family. When we introduced the concept in 2021 we had some hope
+%    that this would happen over time and that we could take the
+%    declarations out---after all it is nearly impossible to maintain
+%    it correctly in the kernel, given that fonts may get new glyphs
+%    added (happened for several of them in the recent year) which is
+%    something we wouldn't notice. However, so far this hasn't
+%    happened, so in 2024, I went through the current set and adjusted
+%    the declarations in several places.
+%
+%    Next four are wrong and still need adjustment:
 %    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{lato-*}       {0}  % with a bunch of tofu inside
 \DeclareEncodingSubset{TS1}{opensans-*}   {0}  % with a bunch of tofu inside
 \DeclareEncodingSubset{TS1}{cantarell-*}  {0}  % with a bunch of tofu inside
-\DeclareEncodingSubset{TS1}{fbb-*}        {0}  % missing centoldstyle
+\DeclareEncodingSubset{TS1}{tli}          {1}  % with lots of tofu inside
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\DeclareEncodingSubset{TS1}{tli}          {1}  % with lots of tofu inside
+\DeclareEncodingSubset{TS1}{fbb-*}        {2}  % missing centoldstyle
 %    \end{macrocode}
 %
+%
 %    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{Alegreya-*}               {2}
 \DeclareEncodingSubset{TS1}{AlegreyaSans-*}           {2}
+\DeclareEncodingSubset{TS1}{BaskervilleF-*}           {2}
 \DeclareEncodingSubset{TS1}{DejaVuSans-TLF}           {2}
 \DeclareEncodingSubset{TS1}{DejaVuSansCondensed-TLF}  {2}
+%    \end{macrocode}
+%    Next one is missing \cs{textfractionsolidus} but is otherwise
+%    completely sub-encoding 2 so we use that sub-encoding.
+%    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{DejaVuSansMono-TLF}       {2}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{EBGaramond-*}             {2}
+\DeclareEncodingSubset{TS1}{Merriwthr-OsF}            {2}
+\DeclareEncodingSubset{TS1}{MerriwthrSans-OsF}        {2}
+\DeclareEncodingSubset{TS1}{Montserrat-*}             {2}
+\DeclareEncodingSubset{TS1}{MontserratAlternates-*}   {2}
+\DeclareEncodingSubset{TS1}{NotoSansMono-TLF}         {2}
+\DeclareEncodingSubset{TS1}{NotoSansMono-TOsF}        {2}
 \DeclareEncodingSubset{TS1}{Tempora-TLF}              {2}
 \DeclareEncodingSubset{TS1}{Tempora-TOsF}             {2}
+\DeclareEncodingSubset{TS1}{XCharter-TLF}             {2}
+\DeclareEncodingSubset{TS1}{XCharter-TOsF}            {2}
+\DeclareEncodingSubset{TS1}{erewhon-*}                {2}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{Arimo-TLF}                {3}
-\DeclareEncodingSubset{TS1}{Carlito-*}                {3}
-\DeclareEncodingSubset{TS1}{FiraSans-*}               {3}
+\DeclareEncodingSubset{TS1}{Crlt-*}                   {3}
+\DeclareEncodingSubset{TS1}{IBMPlexMono-TLF}          {3}
 \DeclareEncodingSubset{TS1}{IBMPlexSans-TLF}          {3}
-\DeclareEncodingSubset{TS1}{Merriweather-OsF}         {3}
-\DeclareEncodingSubset{TS1}{Montserrat-*}             {3}
-\DeclareEncodingSubset{TS1}{MontserratAlternates-*}   {3}
+\DeclareEncodingSubset{TS1}{IBMPlexSerif-TLF}         {3}
 \DeclareEncodingSubset{TS1}{SourceCodePro-TLF}        {3}
 \DeclareEncodingSubset{TS1}{SourceCodePro-TOsF}       {3}
 \DeclareEncodingSubset{TS1}{SourceSansPro-*}          {3}
@@ -1096,6 +1139,7 @@
 \DeclareEncodingSubset{TS1}{CrimsonPro-*}             {4}
 \DeclareEncodingSubset{TS1}{FiraMono-TLF}             {4}
 \DeclareEncodingSubset{TS1}{FiraMono-TOsF}            {4}
+\DeclareEncodingSubset{TS1}{FiraSans-*}               {4}
 \DeclareEncodingSubset{TS1}{Go-TLF}                   {4}
 \DeclareEncodingSubset{TS1}{GoMono-TLF}               {4}
 \DeclareEncodingSubset{TS1}{InriaSans-*}              {4}
@@ -1108,7 +1152,6 @@
 \DeclareEncodingSubset{TS1}{LinguisticsPro-OsF}       {4}
 \DeclareEncodingSubset{TS1}{LinuxBiolinumT-*}         {4}
 \DeclareEncodingSubset{TS1}{LinuxLibertineT-*}        {4}
-\DeclareEncodingSubset{TS1}{MerriweatherSans-OsF}     {4}
 \DeclareEncodingSubset{TS1}{MintSpirit-*}             {4}
 \DeclareEncodingSubset{TS1}{MintSpiritNoTwo-*}        {4}
 \DeclareEncodingSubset{TS1}{PTMono-TLF}               {4}
@@ -1128,66 +1171,64 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\DeclareEncodingSubset{TS1}{Almendra-OsF}             {5}
+\DeclareEncodingSubset{TS1}{Almndr-OsF}               {5}
 \DeclareEncodingSubset{TS1}{Baskervaldx-*}            {5}
-\DeclareEncodingSubset{TS1}{BaskervilleF-*}           {5}
-\DeclareEncodingSubset{TS1}{Bitter-TLF}               {5}
+\DeclareEncodingSubset{TS1}{Bttr-TLF}                 {5}
 \DeclareEncodingSubset{TS1}{Cinzel-LF}                {5}
 \DeclareEncodingSubset{TS1}{CinzelDecorative-LF}      {5}
+\DeclareEncodingSubset{TS1}{Cochineal-*}              {5}
 \DeclareEncodingSubset{TS1}{DejaVuSerif-TLF}          {5}
 \DeclareEncodingSubset{TS1}{DejaVuSerifCondensed-TLF} {5}
 \DeclareEncodingSubset{TS1}{GilliusADF-LF}            {5}
 \DeclareEncodingSubset{TS1}{GilliusADFCond-LF}        {5}
 \DeclareEncodingSubset{TS1}{GilliusADFNoTwo-LF}       {5}
 \DeclareEncodingSubset{TS1}{GilliusADFNoTwoCond-LF}   {5}
-\DeclareEncodingSubset{TS1}{LobsterTwo-LF}            {5}
 \DeclareEncodingSubset{TS1}{OldStandard-TLF}          {5}
-\DeclareEncodingSubset{TS1}{PlayfairDisplay-TLF}      {5}
-\DeclareEncodingSubset{TS1}{PlayfairDisplay-TOsF}     {5}
+\DeclareEncodingSubset{TS1}{PlyfrDisplay-TLF}         {5}
+\DeclareEncodingSubset{TS1}{PlyfrDisplay-TOsF}        {5}
 \DeclareEncodingSubset{TS1}{TheanoDidot-TLF}          {5}
 \DeclareEncodingSubset{TS1}{TheanoDidot-TOsF}         {5}
 \DeclareEncodingSubset{TS1}{TheanoModern-TLF}         {5}
 \DeclareEncodingSubset{TS1}{TheanoModern-TOsF}        {5}
 \DeclareEncodingSubset{TS1}{TheanoOldStyle-TLF}       {5}
 \DeclareEncodingSubset{TS1}{TheanoOldStyle-TOsF}      {5}
+\DeclareEncodingSubset{TS1}{charssil-TLF}             {5}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{Crimson-TLF}              {6}
-\DeclareEncodingSubset{TS1}{IBMPlexMono-TLF}          {6}
-\DeclareEncodingSubset{TS1}{IBMPlexSerif-TLF}         {6}
-\DeclareEncodingSubset{TS1}{LibertinusMono-TLF}       {6}
 \DeclareEncodingSubset{TS1}{LibertinusSerifDisplay-LF}{6}
 \DeclareEncodingSubset{TS1}{LinuxLibertineDisplayT-*} {6}
 \DeclareEncodingSubset{TS1}{LinuxLibertineMonoT-LF}   {6}
 \DeclareEncodingSubset{TS1}{LinuxLibertineMonoT-TLF}  {6}
-\DeclareEncodingSubset{TS1}{Overlock-LF}              {6}
+\DeclareEncodingSubset{TS1}{Ovrlck-LF}                {6}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+\DeclareEncodingSubset{TS1}{ComicNeue-TLF}            {7}
+\DeclareEncodingSubset{TS1}{ComicNeueAngular-TLF}     {7}
 \DeclareEncodingSubset{TS1}{CormorantGaramond-*}      {7}
 \DeclareEncodingSubset{TS1}{Heuristica-TLF}           {7}
 \DeclareEncodingSubset{TS1}{Heuristica-TOsF}          {7}
 \DeclareEncodingSubset{TS1}{IMFELLEnglish-TLF}        {7}
-\DeclareEncodingSubset{TS1}{LibreBaskerville-TLF}     {7}
-\DeclareEncodingSubset{TS1}{LibreCaslon-*}            {7}
-\DeclareEncodingSubset{TS1}{Marcellus-LF}             {7}
+\DeclareEncodingSubset{TS1}{LibreBskrvl-TLF}          {7}
+\DeclareEncodingSubset{TS1}{LibreCsln-*}              {7}
+\DeclareEncodingSubset{TS1}{Lbstr-LF}                 {7}
+\DeclareEncodingSubset{TS1}{Mrcls-LF}                 {7}
+%    \end{macrocode}
+%    Strangely enough NotoSerif and NotoSans are sub-encoding 7 as
+%    they are missing \cs{textminus} and several other glyphs. In
+%    contrast the NotoSansMono is far more complete.
+%    \begin{macrocode}
 \DeclareEncodingSubset{TS1}{NotoSans-*}               {7}
-\DeclareEncodingSubset{TS1}{NotoSansMono-TLF}         {7}
-\DeclareEncodingSubset{TS1}{NotoSansMono-TOsF}        {7}
 \DeclareEncodingSubset{TS1}{NotoSerif-*}              {7}
-\DeclareEncodingSubset{TS1}{Quattrocento-TLF}         {7}
-\DeclareEncodingSubset{TS1}{QuattrocentoSans-TLF}     {7}
-\DeclareEncodingSubset{TS1}{XCharter-TLF}             {7}
-\DeclareEncodingSubset{TS1}{XCharter-TOsF}            {7}
-\DeclareEncodingSubset{TS1}{erewhon-*}                {7}
-\DeclareEncodingSubset{TS1}{ComicNeue-TLF}            {7}
-\DeclareEncodingSubset{TS1}{ComicNeueAngular-TLF}     {7}
-\DeclareEncodingSubset{TS1}{Forum-LF}      {7}  % the superiors are missing
+\DeclareEncodingSubset{TS1}{Quattro-LF}               {7}
+\DeclareEncodingSubset{TS1}{QuattroSans-LF}           {7}
+\DeclareEncodingSubset{TS1}{Frm-LF}                   {7}  % the superiors are missing
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\DeclareEncodingSubset{TS1}{Cochineal-*}              {8}
+\DeclareEncodingSubset{TS1}{LibertinusMono-TLF}       {8}
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -1481,7 +1522,6 @@
 %
 %
 %
-%
 % \section{The \texttt{textcomp} package}
 %
 %
@@ -2301,8 +2341,547 @@
 %    \begin{macrocode}
 %</TS1oldsty>
 %    \end{macrocode}
+%
+%
+%
+%
+% \section{The \texttt{checkencodingsubset.tex} file}
+%
+%    This is a simple file that asks for a name of a font family and
+%    then displays information about the TS1 encoding for this family
+%    and recommends the right encoding subset (to be used with
+%    \cs{DeclareEncodingsubset}) for this family.
+% \changes{v1.1a}{2024/01/27}{Added check file for encoding subset}
+%    \begin{macrocode}
+%<*TS1check>
+\Providesfile{checkencodingsubset.tex}
+ [2024/01/27 v0.5a Figure out safe TS1 encoding subsets]
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\let\typeoutdetails\typeout
+%\def\typeoutdetails#1{}     % alternative definition used below
+%    \end{macrocode}
+%
+%    For the purpose of this check a glyph exists if the font slot is
+%    occupied---to bad if that contains the wrong glyph or some tofu.
+%    If it ``exists'' we return 0 otherwise 1. This way we can call
+%    this macro several times in a row and obtain a number that is 0
+%    if all glyphs are existing or greater than 0 if any of them is
+%    missing.
+%
+%    The second argument (holding the command name for a symbol) is
+%    not used during tese tests.
+%    \begin{macrocode}
+\def\doesglyphexist#1#2{\iffontchar\testFont #1 0\else 1\relax \fi}
+%    \end{macrocode}
+%
+%    This macro also tests and outputs some information about the the
+%    symbol if it is missing. This time we make use of the second
+%    argument.
+%    \begin{macrocode}
+\def\glyphmissingdetails#1#2{\iffontchar\testFont #1 \else
+  \typeoutdetails{\space\space\space ==> \string#2 (#1) is missing}\fi}
+%    \end{macrocode}
+%    
+%    \begin{macrocode}
+\newif\ifsafesubencodingfound
+\newif\ifcoremisses
+%    \end{macrocode}
+%
+%    Testing a group of symbols that belong to one sub-encoding. More
+%    precisely, the symbols that become unavailable if you change from
+%    sub-encoding $x$ (\texttt{\#2}) to $x+1$ (\texttt{\#3}). As far
+%    as the code is concerned, the
+%    symbols that are supposed to be always available (the core)
+%    become available if we test the group \texttt{-1},\texttt{0}.
+%
+%    The first argument contains the testing code and is supposed to
+%    return a single number greater or equal to zero.
+%    \begin{macrocode}
+\def\testgroup#1#2#3{%
+  \ifnum 0 = #1%
+    \ifnum #2<0
+    \typeoutdetails{All glyphs in core exist}%
+    \else
+    \typeoutdetails{All glyphs between sub-encoding #2 and #3  exist}%
+    \fi
+  \else
+    \ifnum #2<0
+      \typeoutdetails{**********************************}%
+      \typeoutdetails{Some glyphs are missing from core:}%
+      \coremissestrue
+      \ifsafesubencodingfound \else
+        \def\subencodingresult{#2}%        
+      \fi
+    \else
+      \typeoutdetails{Some glyphs are missing from sub-encoding #2:}%
+      \ifsafesubencodingfound \else
+        \def\subencodingresult{#3}%        
+      \fi
+    \fi
+%    \end{macrocode}
+%    If some glyphs are missing, we rerun the test code but this time
+%    using \cs{glyphmissingdetails}.
+%    \begin{macrocode}
+    {\let\doesglyphexist \glyphmissingdetails #1}%
+%    \end{macrocode}
+%    And because we had misses we have definitely have found the subset.
+%    \begin{macrocode}
+    \safesubencodingfoundtrue
+  \fi
+}   
+%    \end{macrocode}
+%
+%    The currently defined subset for the family is either stored in
+%    \cs{TS1:}\meta{family} if it was declared, or it is the default
+%    subset which is stored in \cs{TS1:?}.
+%    \begin{macrocode}
+\def\currsubencoding#1{\csname TS1:\ifcsname TS1:#1\endcsname #1\else ?\fi\endcsname}
+%    \end{macrocode}
+%
+%    If a font family is not found when declaring it with
+%    \cs{DeclareFixedFont} we end up with the following font. This can
+%    then be used as a simple test if we failed loading the TS1 font.
+%    \begin{macrocode}
+\DeclareFixedFont\cmrFont{TS1}{cmr}{m}{n}{10pt}
+%    \end{macrocode}
+%
+%    Check for all glyphs in all encoding subsets \ldots
+%    \begin{macrocode}
+\def\testallgroups#1{%
+  \DeclareFixedFont\testFont{TS1}{#1}{m}{n}{10pt}%
+  \ifx\testFont\cmrFont
+    \typeout{***** Font family #1 not found ****}%
+  \else
+%    \end{macrocode}
+%    We haven't checked anything yet.
+%    \begin{macrocode}
+    \safesubencodingfoundfalse
+    \coremissesfalse
+    \typeoutdetails{^^J-----------------------------------------}%
+    \typeoutdetails{Testing font family #1^^J(currently TS1-sub-encoding
+      \currsubencoding{#1})}%
+    \typeout{-----------------------------------------}%
+%    \end{macrocode}
+%    Then we start testing the groups beginning with the glyphs
+%    between sub-encoding 8 and 9. If any of them is missing (checked
+%    with \cs{doesglyphexist}) then we already know that 9 is the
+%    correct answer.
+%    \begin{macrocode}
+    \testgroup{%
+       \doesglyphexist{21}{\texttwelveudash}%
+       \doesglyphexist{22}{\textthreequartersemdash}%
+       \doesglyphexist{134}{\textbardbl}%
+       \doesglyphexist{137}{\textcelsius}%
+       \doesglyphexist{178}{\texttwosuperior}%
+       \doesglyphexist{179}{\textthreesuperior}%
+       \doesglyphexist{185}{\textonesuperior}%
+    }{8}{9}%
+%    \end{macrocode}
+%    Nevertheless we go on with further groups so that the output
+%    lists all missing glyphs.
+%    \begin{macrocode}
+    \testgroup{%
+       \doesglyphexist{32}{\textblank}%
+       \doesglyphexist{148}{\textinterrobang}%
+       \doesglyphexist{149}{\textinterrobangdown}%
+       \doesglyphexist{191}{\texteuro}%
+    }{7}{8}%
+    \testgroup{%
+       \doesglyphexist{47}{\textfractionsolidus}%
+       \doesglyphexist{61}{\textminus}%
+       \doesglyphexist{87}{\textohm}%
+       \doesglyphexist{181}{\textmu}%
+    }{6}{7}%
+    \testgroup{%
+       \doesglyphexist{140}{\textflorin}%
+       \doesglyphexist{164}{\textcurrency}%
+    }{5}{6}%
+    \testgroup{%
+       \doesglyphexist{155}{\textnumero}%
+       \doesglyphexist{157}{\textestimated}%
+    }{4}{5}%
+    \testgroup{%
+       \doesglyphexist{24}{\textleftarrow}%
+       \doesglyphexist{25}{\textrightarrow}%
+       \doesglyphexist{94}{\textuparrow}%
+       \doesglyphexist{95}{\textdownarrow}%
+       \doesglyphexist{141}{\textcolonmonetary}%
+       \doesglyphexist{142}{\textwon}%
+       \doesglyphexist{146}{\textlira}%
+       \doesglyphexist{150}{\textdong}%
+    }{3}{4}%
+    \testgroup{%
+       \doesglyphexist{60}{\textlangle}%
+       \doesglyphexist{62}{\textrangle}%
+    }{2}{3}%
+    \testgroup{%
+       \doesglyphexist{0}{\capitalgrave}%
+       \doesglyphexist{1}{\capitalacute}%
+       \doesglyphexist{2}{\capitalcircumflex}%
+       \doesglyphexist{3}{\capitaltilde}%
+       \doesglyphexist{4}{\capitaldieresis}%
+       \doesglyphexist{5}{\capitalhungarumlaut}%
+       \doesglyphexist{6}{\capitalring}%
+       \doesglyphexist{7}{\capitalcaron}%
+       \doesglyphexist{8}{\capitalbreve}%
+       \doesglyphexist{9}{\capitalmacron}%
+       \doesglyphexist{10}{\capitaldotaccent}%
+       \doesglyphexist{11}{\capitalcedilla}%
+       \doesglyphexist{12}{\capitalogonek}%
+       \doesglyphexist{26}{\t}%
+       \doesglyphexist{27}{\capitaltie}%
+       \doesglyphexist{28}{\newtie}%
+       \doesglyphexist{29}{\capitalnewtie}%
+       \doesglyphexist{45}{\textdblhyphen}%
+       \doesglyphexist{48}{\textzerooldstyle}%
+       \doesglyphexist{49}{\textoneoldstyle}%
+       \doesglyphexist{50}{\texttwooldstyle}%
+       \doesglyphexist{51}{\textthreeoldstyle}%
+       \doesglyphexist{52}{\textfouroldstyle}%
+       \doesglyphexist{53}{\textfiveoldstyle}%
+       \doesglyphexist{54}{\textsixoldstyle}%
+       \doesglyphexist{55}{\textsevenoldstyle}%
+       \doesglyphexist{56}{\texteightoldstyle}%
+       \doesglyphexist{57}{\textnineoldstyle}%
+       \doesglyphexist{77}{\textmho}%
+       \doesglyphexist{79}{\textbigcircle}%
+       \doesglyphexist{91}{\textlbrackdbl}%
+       \doesglyphexist{93}{\textrbrackdbl}%
+       \doesglyphexist{96}{\textasciigrave}%
+       \doesglyphexist{98}{\textborn}%
+       \doesglyphexist{99}{\textdivorced}%
+       \doesglyphexist{100}{\textdied}%
+       \doesglyphexist{108}{\textleaf}%
+       \doesglyphexist{109}{\textmarried}%
+       \doesglyphexist{110}{\textmusicalnote}%
+       \doesglyphexist{126}{\texttildelow}%
+       \doesglyphexist{127}{\textdblhyphenchar}%
+       \doesglyphexist{128}{\textasciibreve}%
+       \doesglyphexist{129}{\textasciicaron}%
+       \doesglyphexist{175}{\textasciimacron}%
+       \doesglyphexist{130}{\textacutedbl}%
+       \doesglyphexist{131}{\textgravedbl}%
+       \doesglyphexist{138}{\textdollaroldstyle}%
+       \doesglyphexist{139}{\textcentoldstyle}%
+       \doesglyphexist{143}{\textnaira}%
+       \doesglyphexist{144}{\textguarani}%
+       \doesglyphexist{145}{\textpeso}%
+       \doesglyphexist{147}{\textrecipe}%
+       \doesglyphexist{152}{\textpertenthousand}%
+       \doesglyphexist{153}{\textpilcrow}%
+       \doesglyphexist{154}{\textbaht}%
+       \doesglyphexist{156}{\textdiscount}%
+       \doesglyphexist{158}{\textopenbullet}%
+       \doesglyphexist{159}{\textservicemark}%
+       \doesglyphexist{160}{\textlquill}%
+       \doesglyphexist{161}{\textrquill}%
+       \doesglyphexist{168}{\textasciidieresis}%
+       \doesglyphexist{171}{\textcopyleft}%
+       \doesglyphexist{173}{\textcircledP}%
+       \doesglyphexist{180}{\textasciiacute}%
+       \doesglyphexist{184}{\textreferencemark}%
+       \doesglyphexist{187}{\textsurd}%
+    }{1}{2}%
+%    \end{macrocode}
+%    All fonts (up to now) that belong to sub-encoding 1 do have the
+%    \cs{textcircled} glyph, but it is too small to be usable. So this
+%    test for this group currently doesn't do much good---but who
+%    knows maybe one day a font shows up in which this glyph is
+%    actually missing.
+%    \begin{macrocode}
+    \testgroup{%
+      \doesglyphexist{79}{\textcircled}%  this is not a proper test because the symbol is
+                                       %  usually available but not usable
+    }{0}{1}%
+    \testgroup{%
+       \doesglyphexist{13}{\textquotestraightbase}%
+       \doesglyphexist{18}{\textquotestraightdblbase}%
+       \doesglyphexist{23}{\textcapitalcompwordmark}%
+       \doesglyphexist{31}{\textascendercompwordmark}%
+       \doesglyphexist{36}{\textdollar}%
+       \doesglyphexist{39}{\textquotesingle}%
+       \doesglyphexist{42}{\textasteriskcentered}%
+       \doesglyphexist{132}{\textdagger}%
+       \doesglyphexist{133}{\textdaggerdbl}%
+       \doesglyphexist{135}{\textperthousand}%
+       \doesglyphexist{136}{\textbullet}%
+       \doesglyphexist{151}{\texttrademark}%
+       \doesglyphexist{162}{\textcent}%
+       \doesglyphexist{163}{\textsterling}%
+       \doesglyphexist{165}{\textyen}%
+       \doesglyphexist{166}{\textbrokenbar}%
+       \doesglyphexist{167}{\textsection}%
+       \doesglyphexist{169}{\textcopyright}%
+       \doesglyphexist{170}{\textordfeminine}%
+       \doesglyphexist{172}{\textlnot}%
+       \doesglyphexist{174}{\textregistered}%
+       \doesglyphexist{176}{\textdegree}%
+       \doesglyphexist{177}{\textpm}%
+       \doesglyphexist{182}{\textparagraph}%
+       \doesglyphexist{183}{\textperiodcentered}%
+       \doesglyphexist{186}{\textordmasculine}%
+       \doesglyphexist{188}{\textonequarter}%
+       \doesglyphexist{189}{\textonehalf}%
+       \doesglyphexist{190}{\textthreequarters}%
+       \doesglyphexist{214}{\texttimes}%
+       \doesglyphexist{246}{\textdiv}%
+    }{-1}{0}%
+%    \end{macrocode}
+%    If all groups have all glyphs then we have the full encoding
+%    (subset 0).
+%    \begin{macrocode}
+    \ifsafesubencodingfound\else
+      \def\subencodingresult{0}%
+    \fi
+%    \end{macrocode}
+%    If the font is missing some of the core glyphs we make a remark
+%    about this, because they will never display.
+%    \begin{macrocode}
+    \typeoutdetails{-----------------------------------------}%
+    \typeout{TS1 encoding subset for #1\ifcoremisses \space(ignoring core misses)\fi
+      \space (\ifnum\subencodingresult =
+      \currsubencoding{#1} ok\else bad\fi)}%
+    \typeout{Use sub-encoding \subencodingresult
+      \ifnum\subencodingresult = \currsubencoding{#1}\else
+        \space (not \currsubencoding{#1})\fi}
+    \typeout{-----------------------------------------^^J}%
+  \fi
+}
+%    \end{macrocode}
+%
+%    This tests all declarations (or most of them) that have been
+%    added to the kernel. It is called if no family is given interactively.
+%    \begin{macrocode}
+\long\def\testallkerneldefinedfamilies{%
+\testallgroups{ccr}%     {0}
+\testallgroups{cmbr}%    {0}
+%%\testallgroups{cmr}%   {0}  % don't test this one as it is the fallback
+                              % thus reports that the family is not found
+\testallgroups{cmss}%    {0}
+\testallgroups{cmtl}%    {0}
+\testallgroups{cmtt}%    {0}
+\testallgroups{cmvtt}%   {0}
+\testallgroups{pxr}%     {0}
+\testallgroups{pxss}%    {0}
+\testallgroups{pxtt}%    {0}
+\testallgroups{qag}%     {0}
+\testallgroups{qbk}%     {0}
+\testallgroups{qcr}%     {0}
+\testallgroups{qcs}%     {0}
+\testallgroups{qhvc}%    {0}
+\testallgroups{qhv}%     {0}
+\testallgroups{qpl}%     {0}
+\testallgroups{qtm}%     {0}
+\testallgroups{qzc}%     {0}
+\testallgroups{txr}%     {0}
+\testallgroups{txss}%    {0}
+\testallgroups{txtt}%    {0}
+%
+% Next would claim to be 0 (or 2)
+%
+%\testallgroups{lmr}%     {1}
+%\testallgroups{lmdh}%    {1}
+%\testallgroups{lmss}%    {1}
+%\testallgroups{lmssq}%   {1}
+%\testallgroups{lmvtt}%   {1}
+%\testallgroups{lmtt}%    {1} % missing TM, SM and pertenthousand so really 2
+%
+% these are no longer in TeX Live
+%
+%\testallgroups{ptmx}%    {2} % gone for a long time it seems
+%\testallgroups{ptmj}%    {2} % ditto
+%\testallgroups{ul8}%     {2} % ditto
+%
+% next block has tofu chars so results are wrong
+%
+%\testallgroups{bch}% {5} % tofu for blank, ohm
+%\testallgroups{futj}%{5} % tofu for blank, interrobang/down, ohm
+%\testallgroups{futs}%{5} % tofu for blank, ohm
+%\testallgroups{futx}%{5} % probably (currently broken distrib)
+%\testallgroups{pag}% {5} % tofu for blank, interrobang/down, ohm
+%\testallgroups{pbk}% {5} % tofu for blank, interrobang/down, ohm
+%\testallgroups{pcr}% {5} % tofu for blank, interrobang/down, ohm
+%\testallgroups{phv}% {5} % tofu for blank, interrobang/down, ohm
+%\testallgroups{pnc}% {5} % tofu for blank, interrobang/down, ohm
+%\testallgroups{pplj}%{5} % tofu for blank
+%\testallgroups{pplx}%{5} % tofu for blank
+%\testallgroups{ppl}% {5} % tofu for blank interrobang/down
+%\testallgroups{ptm}% {5} % tofu for blank, interrobang/down, ohm
+%\testallgroups{pzc}% {5} % tofu for blank, interrobang/down, ohm
+%\testallgroups{ul9}% {5} % tofu for blank, interrobang/down, ohm
+%\testallgroups{dayroms}%{6} % tofu for blank, interrobang/down, ohm
+%\testallgroups{dayrom}% {6} % tofu for blank, interrobang/down, ohm
+%\testallgroups{augie}%{8} % really only missing euro and full of tofu
+%\testallgroups{put}%  {8}
+%\testallgroups{uag}%  {8} % probably (currently broken distrib)
+%\testallgroups{ugq}%  {8}
+%
+\testallgroups{zi4}%  {9}
+%
+%% not installed normally
+%
+%\testallgroups{hls}%  {5}
+%\testallgroups{hlst}% {5}
+%\testallgroups{hlct}% {5}
+%\testallgroups{hlh}%  {5}
+%\testallgroups{hlx}%  {8}
+%\testallgroups{hlce}% {8}
+%\testallgroups{hlcn}% {8}
+%\testallgroups{hlcw}% {8}
+%\testallgroups{hlcf}% {8}
 
-
+\testallgroups{lato-LF}%   {0}  % with a bunch of tofu inside --- should probably be changed
+\testallgroups{opensans-TLF}%{0}  % with a bunch of tofu inside --- should probably be changed
+\testallgroups{cantarell-TLF}%  {0}  % with a bunch of tofu inside --- should probably be changed
+\testallgroups{fbb-LF}%     {0}  % missing centoldstyle ---> 2
+\testallgroups{tli}%       {1}  % with lots of tofu inside --- should probably be changed
+\testallgroups{Alegreya-OsF}%       {2}
+\testallgroups{AlegreyaSans-OsF}%   {2}
+\testallgroups{DejaVuSans-TLF}%     {2}
+\testallgroups{DejaVuSansCondensed-TLF}%  {2}
+\testallgroups{DejaVuSansMono-TLF}% {2} this is missing \textfractionsolidus which makes it 7 really
+\testallgroups{EBGaramond-LF}%      {2}
+\testallgroups{Tempora-TLF}%        {2}
+\testallgroups{Tempora-TOsF}%       {2}
+\testallgroups{Arimo-TLF}%          {3}
+\testallgroups{Crlt-TLF}%           {3}       changed from Carlito-
+\testallgroups{FiraSans-LF}%        {3}     should be 4
+\testallgroups{IBMPlexSans-TLF}%    {3}
+\testallgroups{Merriwthr-OsF}%   {3}         changed from Merriweather- and should be 2
+\testallgroups{Montserrat-LF}%      {3}     now 2
+\testallgroups{MontserratAlternates-LF}%{3}     now 2
+\testallgroups{SourceCodePro-TLF}%  {3}
+\testallgroups{SourceCodePro-TOsF}% {3}
+\testallgroups{SourceSansPro-OsF}%  {3}
+\testallgroups{SourceSerifPro-LF}%  {3}
+\testallgroups{Tinos-TLF}%          {3}
+\testallgroups{AccanthisADFStdNoThree-LF}%{4}
+\testallgroups{Cabin-TLF}%          {4}
+\testallgroups{Caladea-TLF}%        {4}
+\testallgroups{Chivo-LF}%           {4}
+\testallgroups{ClearSans-TLF}%      {4}
+\testallgroups{Coelacanth-LF}%      {4}
+\testallgroups{CrimsonPro-LF}%      {4}
+\testallgroups{FiraMono-TLF}%       {4}
+\testallgroups{FiraMono-TOsF}%      {4}
+\testallgroups{Go-TLF}%             {4}
+\testallgroups{GoMono-TLF}%         {4}
+\testallgroups{InriaSans-LF}%       {4}
+\testallgroups{InriaSerif-LF}%      {4}
+\testallgroups{LibertinusSans-LF}%  {4}
+\testallgroups{LibertinusSerif-LF}% {4}
+\testallgroups{LibreBodoni-TLF}%    {4}
+\testallgroups{LibreFranklin-TLF}%  {4}
+\testallgroups{LinguisticsPro-LF}%  {4}
+\testallgroups{LinguisticsPro-OsF}% {4}
+\testallgroups{LinuxBiolinumT-LF}%  {4}
+\testallgroups{LinuxLibertineT-LF}% {4}
+\testallgroups{MerriwthrSans-OsF}%  {4}          name change and now 2
+\testallgroups{MintSpirit-LF}%      {4}
+\testallgroups{MintSpiritNoTwo-LF}% {4}
+\testallgroups{PTMono-TLF}%         {4}
+\testallgroups{PTSans-TLF}%         {4}
+\testallgroups{PTSansCaption-TLF}%  {4}
+\testallgroups{PTSansNarrow-TLF}%   {4}
+\testallgroups{PTSerif-TLF}%        {4}
+\testallgroups{PTSerifCaption-TLF}% {4}
+\testallgroups{Raleway-TLF}%        {4}
+\testallgroups{Raleway-TOsF}%       {4}
+\testallgroups{Roboto-LF}%          {4}
+\testallgroups{RobotoMono-TLF}%     {4}
+\testallgroups{RobotoSlab-TLF}%     {4}
+\testallgroups{Rosario-LF}%         {4}
+\testallgroups{SticksTooText-LF}%   {4}
+\testallgroups{UniversalisADFStd-LF}%{4}
+\testallgroups{Almndr-OsF}%       {5}     name change
+\testallgroups{Baskervaldx-LF}%   {5}
+\testallgroups{BaskervilleF-LF}%  {5}   now 2
+\testallgroups{Bttr-TLF}%         {5}   name changed from Bitter-...
+\testallgroups{Cinzel-LF}%        {5}
+\testallgroups{CinzelDecorative-LF}%{5}
+\testallgroups{DejaVuSerif-TLF}%  {5}
+\testallgroups{DejaVuSerifCondensed-TLF}% {5}
+\testallgroups{GilliusADF-LF}%    {5}
+\testallgroups{charssil-TLF} %%  missing should be 5
+\testallgroups{GilliusADFCond-LF}%{5}
+\testallgroups{GilliusADFNoTwo-LF}%{5}
+\testallgroups{GilliusADFNoTwoCond-LF}%{5}
+\testallgroups{Lbstr-LF}%      {5}      name change  and should be 7
+\testallgroups{OldStandard-TLF}%  {5}
+\testallgroups{PlyfrDisplay-LF}%{5}       name change
+\testallgroups{PlyfrDisplay-OsF}% {5}       name change
+\testallgroups{TheanoDidot-TLF}%  {5}
+\testallgroups{TheanoDidot-TOsF}% {5}
+\testallgroups{TheanoModern-TLF}% {5}
+\testallgroups{TheanoModern-TOsF}%{5}
+\testallgroups{TheanoOldStyle-TLF}%{5}
+\testallgroups{TheanoOldStyle-TOsF}%{5}
+\testallgroups{Crimson-TLF}%      {6}
+\testallgroups{IBMPlexMono-TLF}%  {6}  now 3
+\testallgroups{IBMPlexSerif-TLF}% {6}  now 3
+\testallgroups{LibertinusMono-TLF}%{6}  should be 8
+\testallgroups{LibertinusSerifDisplay-LF}%{6}
+\testallgroups{LinuxLibertineDisplayT-LF}%{6}
+\testallgroups{LinuxLibertineMonoT-LF}%{6}
+\testallgroups{LinuxLibertineMonoT-TLF}%{6}
+\testallgroups{Ovrlck-LF}%       {6}     name changed
+\testallgroups{CormorantGaramond-LF}%{7}
+\testallgroups{Heuristica-TLF}%  {7}
+\testallgroups{Heuristica-TOsF}% {7}
+\testallgroups{IMFELLEnglish-TLF}%{7}
+\testallgroups{LibreBskvl-LF}%   {7}  %%  wrong name LibreBaskerville-TLF
+\testallgroups{LibreCsln-LF}%    {7}  changed from LibreCaslon-
+\testallgroups{Mrcls-LF}%        {7}       %%  wrong name Marcellus-LF
+\testallgroups{NotoSans-LF}%     {7}
+\testallgroups{NotoSansMono-TLF}%{7}  now 2
+\testallgroups{NotoSansMono-TOsF}%{7}  now 2
+\testallgroups{NotoSerif-LF}%    {7}
+\testallgroups{Quattro-LF}%      {7}  changed from Quattrocento-
+\testallgroups{QuattroSans-LF}%  {7}  changed from QuattrocentoSans-
+\testallgroups{XCharter-TLF}%    {7}  now 2
+\testallgroups{XCharter-TOsF}%   {7}  now 2
+\testallgroups{erewhon-LF}%      {7}  now 2
+\testallgroups{ComicNeue-TLF}%   {7}
+\testallgroups{ComicNeueAngular-TLF}%{7}
+\testallgroups{Frm-LF}%{7}  % the superiors are missing; name changed from Forum-LF
+\testallgroups{Cochineal-TLF}%   {8} now 5
+\testallgroups{AlgolRevived-TLF}%{9}
+}
+%    \end{macrocode}
+%
+%    There interaction with the user.
+%    \begin{macrocode}
+\typeout{^^J=====================================================================}
+\typeout{| Enter font family to check (or <enter> for kernel defined families)}
+\typeout{=====================================================================}
+\typein[\FontFamilyToCheck]{}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\if!\FontFamilyToCheck!
+  \typeout{=====================================================================}
+  \typeout{| Detailed output? (default no)}
+  \typeout{=====================================================================}
+  \typein[\Details]{}
+  \if!\Details!
+    \def\typeoutdetails#1{}
+  \else
+    \let\typeoutdetails\typeout
+  \fi
+  \testallkerneldefinedfamilies
+\else
+  \let\typeoutdetails\typeout
+  \testallgroups\FontFamilyToCheck
+\fi
+%    \end{macrocode}
+%    
+%    \begin{macrocode}
+\stop
+%</TS1check>
+%    \end{macrocode}
+%
 % \Finale
 %
 





More information about the latex3-commits mailing list.