texlive[69282] Master/texmf-dist/doc/latex/comprehensive:

commits+karl at tug.org commits+karl at tug.org
Wed Jan 3 22:18:06 CET 2024


Revision: 69282
          https://tug.org/svn/texlive?view=revision&revision=69282
Author:   karl
Date:     2024-01-03 22:18:06 +0100 (Wed, 03 Jan 2024)
Log Message:
-----------
comprehensive (3jan24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/comprehensive/README
    trunk/Master/texmf-dist/doc/latex/comprehensive/SYMLIST
    trunk/Master/texmf-dist/doc/latex/comprehensive/rawtables-a4.pdf
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/Makefile
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakestix
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeworldflags
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/makerawtables
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/symbols.ist
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/symbols.tex
    trunk/Master/texmf-dist/doc/latex/comprehensive/symbols-a4.pdf

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/makeREADME
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeasapsym
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakefigchild
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakelualatex
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeutfsym
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/maketitlepage
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/patch-idx
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-accents.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-arrows.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-brands.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-circles.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-cup-cap.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-delete.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-equals.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-flags.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-hands.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-harpoons.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-ineqs.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-integrals.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-letters.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-math-maps.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-merge.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-music.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-prec-succ.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-rewrite.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-rhombuses.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-see.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-sets.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-similar.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-squares.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-stars.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-triangles.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-turnstiles.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-wedges-vees.toml
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/renamed-overarrows.sty
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/unicode.txt

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/lightbulb.eps
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/lightbulb.map
    trunk/Master/texmf-dist/doc/latex/comprehensive/source/lightbulb10.pfb

Modified: trunk/Master/texmf-dist/doc/latex/comprehensive/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/README	2024-01-03 21:17:41 UTC (rev 69281)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/README	2024-01-03 21:18:06 UTC (rev 69282)
@@ -2,16 +2,16 @@
                  | THE COMPREHENSIVE LATEX SYMBOL LIST  |
                  | By Scott Pakin, scott+clsl at pakin.org |
                  |                                      |
-                 |             05 May 2021              |
+                 |            3 January 2024            |
                  +--------------------------------------+
 
-The Comprehensive LaTeX Symbol List is an organized list of over 18100
+The Comprehensive LaTeX Symbol List is an organized list of over 20300
 symbols commonly available to LaTeX users.  Some of these symbols are
 guaranteed to be available in every TeX distribution.  Others require
 font files that come with some, but not all, TeX distributions.  The
 rest require font files that must be downloaded explicitly from CTAN
 (http://www.ctan.org/) and installed.  The Comprehensive LaTeX Symbol
-List currently showcases symbols from 213 separate typefaces.
+List currently showcases symbols from 225 separate typefaces.
 
 The same directory that contains this README file also contains
 SYMLIST (an ASCII list of symbols that appear in the symbols list) and
@@ -24,17 +24,14 @@
 build.
 
 The prebuilt versions of the symbol list use primarily Type 1 fonts.
-Type 1 fonts are scalable and should look good at any resolution and
-on any output device.  However, some of the fonts used by symbols.tex
-are available only in a METAFONT-generated bitmap format.  The
-prebuilt symbol lists utilize 1200 DPI versions of all of the
-bitmapped fonts as 1200 DPI is a reasonably high printer resolution.
-Unfortunately, older (pre-6.0) versions of Adobe Acrobat render
-bitmapped fonts positively dreadfully on screen.  Nevertheless, all
-versions of Acrobat manage to *print* bitmapped fonts with no trouble.
+Type 1 fonts are scalable and should look good at any resolution and on
+any output device.  However, some of the fonts used by symbols.tex are
+available only in a METAFONT-generated bitmap format.  The prebuilt
+symbol lists utilize 1200 DPI versions of all of the bitmapped fonts as
+1200 DPI is a reasonably high printer resolution and therefore should
+obscure the artifacts of bitmap rendering.
 
-The bitmapped fonts used to prepare the PDF versions of the symbol
-list are the following:
+The following bitmapped fonts were used to typeset the symbol list:
 
     ark10.mf               astrosym.mf            bbm10.mf               
     bbm9.mf                bbmss10.mf             bbmtt10.mf             
@@ -50,27 +47,28 @@
     go2whi10.mf            greenpoint.mf          hands.mf               
     ifclk10.mf             ifgeo10.mf             ifsym10.mf             
     ifwea10.mf             igoblacki8.mf          igoblacki9.mf          
-    igoblackiii8.mf        igoblackiii9.mf        igowhitei8.mf          
-    igowhitei9.mf          igowhiteiii8.mf        igowhiteiii9.mf        
-    knot1.mf               knot2.mf               knot3.mf               
-    knot4.mf               knot5.mf               knot6.mf               
-    knot7.mf               lightbulb10.mf         magic.mf               
-    mbb10.mf               mbb9.mf                milstd.mf              
-    moonphase.mf           nkarta.mf              shuffle10.mf           
-    simpsons.mf            skull.mf               soyombo.mf             
-    soyombot.mf            trsy10.mf              ulsy10.mf              
-    wnr10.mf               wnr9.mf                wsuipa10.mf            
+    igoblackiii8.mf        igoblackiii9.mf        igowhitei9.mf          
+    igowhiteiii9.mf        knot1.mf               knot2.mf               
+    knot3.mf               knot4.mf               knot5.mf               
+    knot6.mf               knot7.mf               lightbulb10.mf         
+    magic.mf               mbb10.mf               mbb9.mf                
+    milstd.mf              moonphase.mf           nkarta.mf              
+    shuffle10.mf           simpsons.mf            skull.mf               
+    soyombo.mf             soyombot.mf            trsy10.mf              
+    ulsy10.mf              wnr10.mf               wsuipa10.mf            
     wsuipa9.mf             
 
-For completeness, these are the scalable fonts used in the PDF
-versions of the symbol list:
+For completeness, the following scalable fonts (some converted from
+OpenType to PostScript Type 1) were used to typeset the symbol list:
 
     ASCII.pfb              (ASCII)
     ArevSans-Roman.pfb     (Arev Sans)
     ArrowsADF.pfb          (Arrows ADF)
+    Asap-Symbol.pfb        (Asap Symbol)
     BulletsADF.pfb         (Bullets ADF)
     DSSerif-Bold.pfb       (Double Struck Serif Bold)
     DSSerif.pfb            (Double Struck Serif)
+    EBGaramond-Italic.pfb  (EB Garamond Italic)
     Epi-Olmec.pfb          (Epi-Olmce)
     FdSymbolA-Book.pfb     (FdSymbolA-Book)
     FdSymbolB-Book.pfb     (FdSymbolB-Book)
@@ -79,9 +77,13 @@
     FdSymbolD-Book.pfb     (FdSymbolD-Book)
     FdSymbolE-Book.pfb     (FdSymbolE-Book)
     FdSymbolF-Book.pfb     (FdSymbolF-Book)
-    FontAwesome.pfb        (FontAwesome)
+    FontAwesome5Brands-Reg (Font Awesome 5 Brands Regular)
+    FontAwesome5Free-Regul (Font Awesome 5 Free Regular)
+    FontAwesome5Free-Solid (Font Awesome 5 Free Solid)
+    HamNoSysUnicode.ttf    (Hamnosysunicode)
     LinearA.pfb            (LinearA)
     LinearACmplxSigns.pfb  (LinearACmplxSigns)
+    Logix.pfb              (Logix)
     MnSymbol10.pfb         (MnSymbol10)
     OrnementsADF.pfb       (Ornements ADF)
     SVRsymbols.pfb         (SVRsymbols)
@@ -88,6 +90,7 @@
     SkakNew-Diagram.pfb    (SkakNew-Diagram)
     SkakNew-Figurine.pfb   (SkakNew-Figurine)
     WebOMintsGD.pfb        (WebOMints GD)
+    academicons.ttf        (Academicons)
     ar10.pfb               (ar10)
     ar9.pfb                (ar9)
     arrow.pfb              (arrow)
@@ -119,8 +122,8 @@
     cmr5.pfb               (CMR5)
     cmr6.pfb               (CMR6)
     cmr7.pfb               (CMR7)
-    cmr8.pfb               (CMR8)
     cmr9.pfb               (CMR9)
+    cmrj.pfb               (Computer Modern Figured Bass)
     cmss10.pfb             (CMSS10)
     cmss17.pfb             (CMSS17)
     cmss8.pfb              (CMSS8)
@@ -133,10 +136,8 @@
     cmsy8.pfb              (CMSY8)
     cmsy9.pfb              (CMSY9)
     cmti10.pfb             (CMTI10)
-    cmti7.pfb              (CMTI7)
     cmti9.pfb              (CMTI9)
     cmtt10.pfb             (CMTT10)
-    cmtt12.pfb             (CMTT12)
     cmtt8.pfb              (CMTT8)
     cmtt9.pfb              (CMTT9)
     cmupint.pfb            (cmupint)
@@ -151,12 +152,12 @@
     eufm10.pfb             (EUFM10)
     eufm7.pfb              (EUFM7)
     eurm10.pfb             (EURM10)
-    eurm7.pfb              (EURM7)
     eusm10.pfb             (EUSM10)
     eusm7.pfb              (EUSM7)
     feymr10.pfb            (TeX feymr10 Regular)
     fgeit10.pfb            (fgeit10)
     fgerm10.pfb            (fgerm10)
+    font-mfizz.ttf         (font-mfizz)
     fourier-alt.pfb        (Fourier-Alternate-Roman)
     fourier-mcl.pfb        (Fourier-Math-Cal)
     fourier-mex.pfb        (Fourier-Math-Extension)
@@ -176,7 +177,6 @@
     linb10.pfb             (Archaic Linear B)
     line10.pfb             (LINE10)
     lmr10.pfb              (LMRoman10-Regular)
-    lmr9.pfb               (LMRoman9-Regular)
     logo10.pfb             (LOGO10)
     logo9.pfb              (LOGO9)
     logosl10.pfb           (LOGOSL10)
@@ -202,12 +202,11 @@
     msbm10.pfb             (MSBM10)
     msbm7.pfb              (MSBM7)
     msym10.pfb             (MSYM10)
-    musix11.pfb            (TeXMUSIX11-Regular)
-    musix13.pfb            (TeXMUSIX13-Regular)
-    musix16.pfb            (TeXMUSIX16-Regular)
-    musix20.pfb            (TeXMUSIX20-Regular)
+    musix11.pfb            (musix11)
+    musix13.pfb            (musix13)
+    musix16.pfb            (musix16)
+    musix20.pfb            (musix20)
     oasy10.pfb             (OAMathSymbols10)
-    oasy9.pfb              (OAMathSymbols9)
     phaistos.pfb           (phaistos)
     plimsoll.pfb           (Plimsoll)
     pmhg.pfb               (Archaic Poor Mans Hieroglyphs)
@@ -220,9 +219,13 @@
     rtcxr.pfb              (rtcxr)
     sarab10.pfb            (Archaic South Arabian)
     sfbx0700.pfb           (Computer Modern Bold Extended)
+    sfbx0800.pfb           (Computer Modern Bold Extended)
     sfbx1000.pfb           (Computer Modern Bold Extended)
     sfbx1200.pfb           (Computer Modern Bold Extended)
     sfbx1440.pfb           (Computer Modern Bold Extended)
+    sfbx2074.pfb           (Computer Modern Bold Extended)
+    sfbx2488.pfb           (Computer Modern Bold Extended)
+    sfcc0700.pfb           (Computer Modern Caps and Small Caps)
     sfcc0900.pfb           (Computer Modern Caps and Small Caps)
     sfcc1000.pfb           (Computer Modern Caps and Small Caps)
     sfrm0500.pfb           (Computer Modern Roman)
@@ -275,7 +278,10 @@
     txmia.pfb              (txmia)
     txsy.pfb               (txsy)
     txsyc.pfb              (txsyc)
+    typicons.ttf           (Typicons)
     uhvb8a.pfb             (Nimbus Sans L Bold)
+    uhvbo8a.pfb            (Nimbus Sans L Bold Italic)
+    uhvr8a.pfb             (Nimbus Sans L Regular)
     umranda.pfb            (umranda)
     umrandb.pfb            (umrandb)
     usyr.pfb               (Standard Symbols L)
@@ -284,12 +290,11 @@
     uzcmi8a.pfb            (URW Chancery L Medium Italic)
     uzdr.pfb               (Dingbats)
     vect10.pfb             (TeX vect10 Regular)
-    vect9.pfb              (TeX vect9 Regular)
     vnr10.pfb              (VNR10)
     vnr9.pfb               (VNR9)
     wasy10.pfb             (wasy10)
     wasy9.pfb              (wasy9)
-    xgreg20.pfb            (TeXXGREG20-Regular)
+    xgreg20.pfb            (xgreg20)
     yfrak.pfb              (Yannis Fraktur Regular)
     ygoth.pfb              (Yannis Gotisch Regular)
     yhcmex.pfb             (Yhcmex)

Modified: trunk/Master/texmf-dist/doc/latex/comprehensive/SYMLIST
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/SYMLIST	2024-01-03 21:17:41 UTC (rev 69281)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/SYMLIST	2024-01-03 21:18:06 UTC (rev 69282)
@@ -3,7 +3,9 @@
 *
 /
 <
+>
 [
+\
 \"
 \#
 \%
@@ -28,31 +30,92 @@
 {}
 }
 \$
-\a
-a
-\A
-A
+01}
+0M1}
+0mensural}
+0neomensural}
+1}
+{100}
+{101}
+{102}
+{103}
+{104}
+{105}
+{106}
+{107}
+{108}
+{109}
+11}
+{110}
+{111}
+{112}
+{113}
+{114}
+{115}
+{116}
+{117}
+{118}
+{119}
+{120}
+{121}
+{122}
+1f384}
+1M1}
+1mensural}
+1neomensural}
+2classical}
+2mensural}
+2neomensural}
+3mensural}
+3neomensural}
+{47}
+{48}
+{49}
+4mensural}
+4neomensural}
+{50}
+{51}
+{52}
+{53}
+{54}
+{55}
+{56}
+{57}
+{65}
+{66}
+{67}
+{68}
+{69}
+{70}
+{71}
+{72}
+{73}
+{74}
+{75}
+{76}
+{77}
+{78}
+{79}
+{80}
+{81}
+{82}
+{83}
+{84}
+{85}
+{86}
+{87}
+{88}
+{89}
+{90}
+{91}
+{93}
+{97}
+{98}
+{99}
 \aa
 \AA
-\AAaleph
-\AAayin
-\AAbeth
-\AAcht
-\AAdaleth
-\AAhe
-\AAhelmet
-\AAheth
-\AAkaph
-\AAlamed
-\Aaleph
-\AApe
-\AAqoph
-\AAresh
-\AAsade
-\Aayin
-\AAyod
-\AB
-\Abeth
+{\AA}land Islands}
+\AAnd
 \ac
 \AC
 \acarc
@@ -66,13 +129,9 @@
 \accordionPush
 \accordionStdBass
 \accurrent
-\Acht
-\AchtBL
-\AchtBR
 \acidfree
 \ACK
 \acontraction
-\AcPa
 \actuarial
 \actuarialangle
 \acute
@@ -92,7 +151,6 @@
 \acwsearcarrow
 \acwswarcarrow
 \acwunderarcarrow
-\Adaleth
 \adfarrow
 \adfarrowe1
 \adfarrowe2
@@ -267,34 +325,164 @@
 \adftripleflourishright
 \adfwavesleft
 \adfwavesright
-\adj
+{adhesive bandage}
 \Admetos
+{admission tickets}
 \adots
 \adsorbate
 \adsorbent
 \ae
 \AE
-\aeolicbii
-\aeolicbiii
-\aeolicbiv
+Africa}
 \agemO
-\Agimel
-\Ahe
-\Ahelmet
-\Aheth
+\aiAcademia
+\aiAcademiaSquare
+\aiAcclaim
+\aiAcclaimSquare
+\aiACM
+\aiACMDL
+\aiACMDLSquare
+\aiACMSquare
+\aiADS
+\aiADSSquare
+\aiAfricArXiv
+\aiAfricArXivSquare
+\aiArchive
+\aiArchiveSquare
+\aiarXiv
+\aiarXivSquare
+\aibioRxiv
+\aibioRxivSquare
+\aiCEUR
+\aiCEURSquare
+\aiCIENCIAVITAE
+\aiCIENCIAVITAESquare
+\aiClosedAccess
+\aiClosedAccessSquare
+\aiConversation
+\aiConversationSquare
+\aiCoursera
+\aiCourseraSquare
+\aiCrossref
+\aiCrossrefSquare
+\aiCV
+\aiCVSquare
+\aiDataCite
+\aiDataCiteSquare
+\aiDataverse
+\aiDataverseSquare
+\aidblp
+\aidblpSquare
+\aiDepsy
+\aiDepsySquare
+\aiDoi
+\aiDoiSquare
+\aiDryad
+\aiDryadSquare
+\aiElsevier
+\aiElsevierquare
+\aiFigshare
+\aiFigshareSquare
+\aiGoogleScholar
+\aiGoogleScholarSquare
+\aiHAL
+\aiHALSquare
+\aiHypothesis
+\aiHypothesisSquare
+\aiIDEASRePEc
+\aiIDEASRePEcSquare
+\aiIEEE
+\aiIEEESquare
+\aiImpactstory
+\aiImpactstorySquare
+\aiiNaturalist
+\aiiNaturalistSquare
+\aiINPN
+\aiINPNSquare
+\aiInspire
+\aiInspireSquare
+\aiISIDORE
+\aiISIDORESquare
+\aiJSTOR
+\aiJSTORSquare
+\aiLattes
+\aiLattesSquare
+\aiMathOverflow
+\aiMathOverflowSquare
+\aiMendeley
+\aiMendeleySquare
+\aiMoodle
+\aiMoodleSquare
+\aiMTMT
+\aiMTMTSquare
 \ain
+\aiNAKALA
+\aiNAKALASquare
+\aint
+\aiOBP
+\aiOBPSquare
+\aiOpenAccess
+\aiOpenAccessSquare
+\aiOpenData
+\aiOpenDataSquare
+\aiOpenEdition
+\aiOpenEditionSquare
+\aiOpenMaterials
+\aiOpenMaterialsSquare
+\aiOrcid
+\aiOrcidSquare
+\aiOSF
+\aiOSFSquare
+\aiOverleaf
+\aiOverleafSquare
+\aiPhilPapers
+\aiPhilPapersSquare
+\aiPiazza
+\aiPiazzaSquare
+\aiPreregistered
+\aiPreregisteredSquare
+\aiProtocols
+\aiProtocolsSquare
+\aiPsyArXiv
+\aiPsyArXivSquare
+\aiPublons
+\aiPublonsSquare
+\aiPubMed
+\aiPubMedSquare
+\aiPubPeer
+\aiPubPeerSquare
 \Air
-\Akaph
+\aiResearcherID
+\aiResearcherIDSquare
+\aiResearchGate
+\aiResearchGateSquare
+\aiROR
+\aiRORSquare
+{airplane arrival}
+{airplane departure}
+\aiSciHub
+\aiSciHubSquare
+\aiSciRate
+\aiSciRateSquare
+\aiScopus
+\aiScopusSquare
+\aiSemanticScholar
+\aiSemanticScholarSquare
+\aiSpringer
+\aiSpringerSquare
+\aiSSRN
+\aiSSRNSquare
+\aiStackOverflow
+\aiStackOverflowSquare
+\aiZenodo
+\aiZenodoSquare
+\aiZotero
+\aiZoteroSquare
 \alad
 \Alad
-\Alamed
 \alas
 \Alas
 \Albania
-\aldine
-\aldineleft
-\aldineright
-\aldinesmall
 \aleph
 \Alif
 \allabreve
@@ -304,20 +492,15 @@
 \Alt
 \AltGr
 \altoclef
-\AM
 \amalg
-\Amem
+{american football}
 \Amor
+\Ampersand
 \anaclasis
 \Anaclasis
-\anceps
-\ancepsdbrevis
+{anatomical heart}
 \anchor
-\ANDd
-\ANDl
 \Andorra
-\ANDr
-\ANDu
 \angdnr
 \angl
 \angle
@@ -326,13 +509,14 @@
 \angleubar
 \angln
 \anglr
+{angry face with horns}
 \Angstrom
 \angud
 \Angud
 \angus
 \Angus
+Animal
 \Ankh
-\Annoey
 \annuity
 \antidiple
 \antidiple*
@@ -352,10 +536,10 @@
 \antiquarku
 \antisigma
 \Antisigma
-\Anun
+{anxious face with sweat}
 \anyon
+\Aor
 \aoverbrace
-\Ape
 \APLbox
 \APLboxquestion
 \APLboxupcaret
@@ -377,6 +561,7 @@
 \APLuparrowbox
 \APLvert
 \Apollon
+\Append
 \applecmd
 \apprge
 \apprle
@@ -386,48 +571,130 @@
 \approxeq
 \approxeqq
 \approxident
-\Aqoph
 \aquarius
 \Aquarius
 \AR
 \arafamily
-\arccos
-\arccot
 \arceq
 \arcfamily
-\arcosh
-\arcoth
-\arcsch
-\arcsin
-\arctan
-\Aresh
-\arg
 \aries
 \Aries
 \arlfamily
 \armfamily
 \arnfamily
+arpeggio}
 \ArrowBoldDownRight
 \ArrowBoldRightCircled
 \ArrowBoldRightShort
 \ArrowBoldRightStrobe
 \ArrowBoldUpRight
+arrowboth}
 \arrowbullet
-\arrownot
-\Arrownot
+arrowdown}
 \arrowOver
 \ArrowOver
+arrowup}
 \arrowvert
 \Arrowvert
-\arsech
-\arsinh
-\artanh
 \artfamily
-\Asade
-\Asamekh
+{articulated lorry}
+\asapAirplaneLanding
+\asapAirplaneOverhead
+\asapAirplaneTakeoff
+\asapArrowCircleFillDown
+\asapArrowCircleFillLeft
+\asapArrowCircleFillRight
+\asapArrowCircleFillUp
+\asapArrowCircleOpenDown
+\asapArrowCircleOpenLeft
+\asapArrowCircleOpenRight
+\asapArrowCircleOpenUp
+\asapArrowDown
+\asapArrowDownLeft
+\asapArrowDownRight
+\asapArrowLeft
+\asapArrowRight
+\asapArrowUp
+\asapArrowUpLeft
+\asapArrowUpRight
+\asapAutomobile
+\asapAutomobileWithKey
+\asapBicycle
+\asapBoat
+\asapBook
+\asapBus
+\asapCigarette
+\asapCigaretteSign
+\asapCross
+\asapCycling
+\asapDog
+\asapDogSign
+\asapDollarSign
+\asapElevator
+\asapEmergencySign
+\asapEnvelope
+\asapEscalator
+\asapEscalatorDown
+\asapEscalatorUp
+\asapFemaleAdult
+\asapFemaleAtHelpDesk
+\asapFemaleChild
+\asapFemaleHoldingInfant
+\asapFemaleWalking
+\asapFemaleWalkingDog
+\asapFemaleWithChild
+\asapGift
+\asapGroupMeeting
+\asapHanger
+\asapHelicopter
+\asapHelpSign
+\asapHospitalSign
+\asapInfant
+\asapInformationSign
+\asapLocker
+\asapLostAndFound
+\asapMaleAdult
+\asapMaleAtHelpDesk
+\asapMaleChild
+\asapMaleDiscardingTrash
+\asapMaleHoldingInfant
+\asapMaleWalking
+\asapMaleWalkingDog
+\asapMaleWalkingStroller
+\asapMaleWithChild
+\asapMicroscope
+\asapMobilePhone
+\asapMobilePhoneSign
+\asapMonitor
+\asapMug
+\asapNotCigaretteSign
+\asapNotDogSign
+\asapNotDollarSign
+\asapNotEmergencySign
+\asapNotHelpSign
+\asapNotHospitalSign
+\asapNotInformationSign
+\asapNotMobilePhoneSign
+\asapNotParkingSign
+\asapNotSign
+\asapNotWalkSign
+\asapParkingSign
+\asapPhone
+\asapPregnant
+\asapStair
+\asapStairDown
+\asapStairUp
+\asapTablet
+\asapTaxi
+\asapTrain
+\asapUtensils
+\asapWaitingSeated
+\asapWalkingCane
+\asapWalkSign
+\asapWheelchairStationary
+asc}
 \ASC
 \ascnode
-\Ashin
 \assert
 \Assert
 \assumption
@@ -434,6 +701,7 @@
 \ast
 \asteq
 \asteraccent
+\Asterick
 \asteriscus
 \Asteriscus
 \asterisk
@@ -448,62 +716,58 @@
 \asymp
 \atan
 \ataribox
-\Atav
-\Ateth
 \AtForty
 \AtNinetyFive
 \atom
 \AtSixty
+aucta}
+auctum}
+augmentum}
 \aunderbrace
+Australia}
 \Austria
-\Aut
 \autoleftarrow
 \autoleftrightharpoons
 \autorightarrow
 \autorightleftharpoons
 \Autumntree
-\Avav
 \awint
 \awintsl
 \awintup
 \Ayn
-\Ayod
-\Azayin
 \b
-b
 \B
-B
-\Ba
 \babygamma
 \backapprox
 \backapproxeq
-\Backblech
 \backcong
 \backdprime
 \backepsilon
 \backeqsim
+{backhand index pointing down}
+{backhand index pointing left}
+{backhand index pointing right}
+{backhand index pointing up}
 \backneg
 \backprime
 \backpropto
+\BackQuote
 \backsim
 \backsimeq
 \backsimneqq
 \backslash
+backslash}
 \backslashdiv
 \backtriplesim
 \backtrprime
 \backturn
 \bagmember
-\Baii
-\Baiii
-\bakingplate
+{ballot box with ballot}
 \ballotcheck
 \ballotx
-\banceps
+bandage}
 \bar
 \barb
-\barbbrevis
-\barbrevis
 \barcap
 \barcirc
 \barcup
@@ -533,6 +797,7 @@
 \barsci
 \barscu
 \Bart
+ Barthélemy}
 \baru
 \baruparrow
 \barupharpoonleft
@@ -544,38 +809,24 @@
 \BasicTree
 \bassclef
 \Bat
-\Bau
 \baucircle
 \bauforms
 \bauhead
 \bausquare
 \bautriangle
-\bb
-\bB
-\Bb
-\BB
-\bba
+bayanbass}
 \bbalpha
 \bbar
-\bbb
 \bbbeta
 \Bbbk
 \Bbbsum
 \bbdollar
-\bbetter
 \bbeuro
 \bbfinalnun
 \bbgamma
-\bbm
-\bBm
-\Bbm
-\BBm
-\bbmb
-\bbmx
 \bbnabla
 \bbpe
 \bbqof
-\bbrevis
 \bbrktbrk
 \bbslash
 \bbyod
@@ -644,24 +895,17 @@
 \bcvaletcoeur
 \bcvelo
 \bcyin
-\Bda
-\Bde
-\bdecisive
-\Bdi
 \bdleftarcarrow
 \bdnearcarrow
 \bdnwarcarrow
-\Bdo
 \bdoverarcarrow
 \bdrightarcarrow
 \bdsearcarrow
 \bdswarcarrow
-\Bdu
 \bdunderarcarrow
-\Bdwe
-\Bdwo
-\Be
+{beach with umbrella}
 \Beam
+{beaming face with smiling eyes}
 \Bearing
 \because
 \Bed
@@ -674,7 +918,6 @@
 \Beta
 \betaup
 \beth
-\betteris
 \between
 \BGassert
 \BGconditional
@@ -681,7 +924,6 @@
 \BGcontent
 \BGnot
 \BGquant
-\Bi
 \bibridge
 \Bicycle
 \big
@@ -718,6 +960,7 @@
 \bigcirc
 \bigcircle
 \BigCircle
+\bigcircwedge
 \bigcoast
 \bigcomplementop
 \BigCross
@@ -728,11 +971,15 @@
 \bigcurlyveedot
 \bigcurlywedge
 \bigcurlywedgedot
+\bigdcup
 \BigDiamondshape
 \bigdoublecurlyvee
 \bigdoublecurlywedge
 \bigdoublevee
 \bigdoublewedge
+\bigdwedge
+\bigexists
+\bigforall
 \bigg
 \Bigg
 \biggassumption
@@ -811,29 +1058,50 @@
 \bigwith
 \binampersand
 \bindnasrepma
+\biNint
 \biohazard
-\Biohazard
-\bishoppair
-\Bja
-\Bje
-\Bjo
-\Bju
-\Bka
-\Bke
-\Bki
-\Bko
-\Bku
-\BL
+Bissau}
 \black
 \BlackBishopOnBlack
 \BlackBishopOnWhite
 \blackbowtie
+\BlackCircle
+\BlackCircleA
+\BlackCircleB
+\BlackCircleC
+\BlackCircleD
 \blackcircledownarrow
 \blackcircledrightdot
 \blackcircledtwodots
+\BlackCircleE
+\BlackCircleF
+\BlackCircleG
+\BlackCircleH
+\BlackCircleI
 \blackcircleulquadwhite
+\BlackCurvedDiamond
 \blackdiamond
+\BlackDiamond
+\BlackDiamondA
+\BlackDiamondB
+\BlackDiamondC
+\BlackDiamondD
 \blackdiamonddownarrow
+\BlackDiamondE
+\BlackDiamondF
+\BlackDiamondG
+\BlackDiamondH
+\BlackDiamondI
+\BlackDownTriangle
+\BlackDownTriangleA
+\BlackDownTriangleB
+\BlackDownTriangleC
+\BlackDownTriangleD
+\BlackDownTriangleE
+\BlackDownTriangleF
+\BlackDownTriangleG
+\BlackDownTriangleH
+\BlackDownTriangleI
 \BlackEmptySquare
 \blackhourglass
 \blackinwhitediamond
@@ -842,8 +1110,22 @@
 \BlackKingOnWhite
 \BlackKnightOnBlack
 \BlackKnightOnWhite
+{black large square}
+\BlackLeftArrowHead
 \blacklefthalfcircle
+\BlackLeftTriangle
+\BlackLeftTriangleA
+\BlackLeftTriangleB
+\BlackLeftTriangleC
+\BlackLeftTriangleD
+\BlackLeftTriangleE
+\BlackLeftTriangleF
+\BlackLeftTriangleG
+\BlackLeftTriangleH
+\BlackLeftTriangleI
 \blacklozenge
+\BlackLozenge
+{black medium square}
 \BlackPawnOnBlack
 \BlackPawnOnWhite
 \blackpointerleft
@@ -850,11 +1132,39 @@
 \blackpointerright
 \BlackQueenOnBlack
 \BlackQueenOnWhite
+\BlackReallySmallCircle
+\BlackReallySmallDiamond
+\BlackReallySmallSquare
+\BlackRightArrowHead
 \blackrighthalfcircle
+\BlackRightTriangle
+\BlackRightTriangleA
+\BlackRightTriangleB
+\BlackRightTriangleC
+\BlackRightTriangleD
+\BlackRightTriangleE
+\BlackRightTriangleF
+\BlackRightTriangleG
+\BlackRightTriangleH
+\BlackRightTriangleI
 \BlackRookOnBlack
 \BlackRookOnWhite
+\BlackSmallCircle
+{black small square}
 \blacksmiley
 \blacksquare
+\BlackSquare
+\BlackSquareA
+\BlackSquareB
+{black square button}
+\BlackSquareC
+\BlackSquareD
+\BlackSquareE
+\BlackSquareF
+\BlackSquareG
+\BlackSquareH
+\BlackSquareI
+\BlackSquareRoundCorners
 \blackstone
 \blacktriangle
 \blacktriangledown
@@ -861,9 +1171,20 @@
 \blacktriangleleft
 \blacktriangleright
 \blacktriangleup
+\BlackUpTriangle
+\BlackUpTriangleA
+\BlackUpTriangleB
+\BlackUpTriangleC
+\BlackUpTriangleD
+\BlackUpTriangleE
+\BlackUpTriangleF
+\BlackUpTriangleG
+\BlackUpTriangleH
+\BlackUpTriangleI
+\BlackVerySmallCircle
+\BlackVerySmallSquare
 \blackwhitespoon
 \Bleech
-\blender
 \blitza
 \blitzb
 \blitzc
@@ -871,29 +1192,32 @@
 \blitze
 \blkhorzoval
 \blkvertoval
+(blood type)}
 \bm
-\Bm
-\Bma
-\Bme
 \Bmesonminus
 \Bmesonnull
 \Bmesonplus
-\Bmi
-\Bmo
-\bmod
-\Bmu
-\Bna
 \BNc
+\BncBistab
 \BNcc
 \BNccc
 \BNcd
+\BnchExists
+\BnchForAll
+\BnchHdnExists
+\BnchHdnForAll
+\BnchJoin
+\BnchMeet
+\BnchNtExists
+\BnchUnique
 \BNcm
 \BNd
+\BndBar
 \BNdc
 \BNdcc
 \BNdccc
-\Bne
-\Bni
+\BndDot
+\BndMap
 \BNi
 \BNii
 \BNiii
@@ -904,20 +1228,16 @@
 \BNlxx
 \BNlxxx
 \BNm
-\Bno
 \bNot
-\Bnu
 \BNv
 \BNvi
 \BNvii
 \BNviii
-\Bnwa
 \BNx
 \BNxc
 \BNxl
 \BNxx
 \BNxxx
-\Bo
 \boldmath
 \boldsymbol
 \BOLogo
@@ -933,10 +1253,8 @@
 \botborder
 \botdoteq
 \botsemicircle
-\bottle
-\Bottomheat
+{bottle with popping cork}
 \Bouquet
-\bowl
 \bowtie
 \Bowtie
 \Box
@@ -974,113 +1292,22 @@
 \boxvert
 \boxvoid
 \boy
-\Bpa
-\Bpaiii
-\BPamphora
-\BParrow
-\BPbarley
-\BPbilly
-\BPboar
-\BPbronze
-\BPbull
-\BPcauldroni
-\BPcauldronii
-\BPchariot
-\BPchassis
-\BPcloth
-\BPcow
-\BPcup
-\Bpe
-\BPewe
-\BPfoal
-\BPgoat
-\BPgoblet
-\BPgold
-\BPhorse
-\Bpi
-\BPman
-\BPnanny
-\Bpo
-\BPolive
-\BPox
-\BPpig
-\BPram
-\BPsheep
-\BPsow
-\BPspear
-\BPsword
-\BPtalent
-\Bpte
-\Bpu
-\Bpuii
-\BPvola
-\BPvolb
-\BPvolcd
-\BPvolcf
-\BPwheat
-\BPwheel
-\BPwine
-\BPwineiih
-\BPwineiiih
-\BPwineivh
-\BPwoman
-\BPwool
-\BPwta
-\BPwtb
-\BPwtc
-\BPwtd
-\Bqa
-\Bqe
-\Bqi
-\Bqo
-\Bra
+\bra
 \braceld
 \bracerd
 \bracevert
-\Braii
-\Braiii
-\Bratpfanne
-\Bre
+\braket
+ Brazzaville}
 \Break
 \breve
-\brevis
-\Bri
-\Bro
-\Broii
 \brokenvert
-\Bru
 \BS
-\Bsa
-\Bse
-\BSEfree
-\Bsi
 \bsimilarleftarrow
 \bsimilarrightarrow
-\Bso
 \bsolhsub
 \BSpace
-\Bsu
-\Bswa
-\Bswi
-\Bta
-\Btaii
-\Bte
-\Bti
 \btimes
-\Bto
-\Btu
-\Btwe
-\Btwo
-\Bu
-\BUFd
-\BUFl
-\BUFr
-\BUFu
-\BUi
-\BUii
-\BUiii
-\BUiv
-\BUix
+{building construction}
 \Bulgaria
 bullenum
 \bullet
@@ -1090,28 +1317,25 @@
 \bumpeq
 \Bumpeq
 \bumpeqq
-\bupperhand
+(Burma)}
 \Burns
-\BusWidth
-\BUv
-\BUvi
-\BUvii
-\BUviii
-\BUx
-\BUxi
-\BUxii
-\Bwa
-\Bwe
-\Bwi
-\Bwo
-\BX
-\Bza
-\Bze
-\Bzo
+{bust in silhouette}
+{busts in silhouette}
 \c
+c}
 \C
-\Ca
+c1}
+c1_change}
+c2}
+c2_change}
+c3}
+c3_change}
+c4}
+c4_change}
+c5}
+c5_change}
 \caesura
+{camera with flash}
 \CAN
 \cancer
 \Cancer
@@ -1122,29 +1346,28 @@
 \capbarcup
 \capdot
 \capovercup
+capped mountain}
 \capplus
 \Capricorn
 \capricornus
-\capturesymbol
 \capwedge
+{card index dividers}
 \caretinsert
 \carriagereturn
-\castlingchar
-\castlinghyphen
-\Cat
-\catal
 \catalexis
 \Catalexis
+\Catenate
+{cat with tears of joy}
+{cat with wry smile}
+cavum}
 \cb
-\CB
 \cc
-\Cc
 \ccAttribution
 \ccby
 \ccbyncnd
-\Ccc
 \ccCopy
-\cChangey
+c_change}
+C_change}
 \ccLogo
 \ccnc
 \ccnd
@@ -1163,22 +1386,22 @@
 \cdot
 \cdotp
 \cdots
-\Ce
-\CE
+\CDots
 \celsius
 \Celtcross
 \cent
 \centerdot
 \centernot
-\centre
+cephalicus}
 \Ceres
-\CEsign
-\Cga
 \Chair
 \changenotsign
-\Changey
 \char
+{chart decreasing}
+{chart increasing}
+{chart increasing with yen}
 \check
+{check box with check}
 \checked
 \Checkedbox
 \CheckedBox
@@ -1185,20 +1408,27 @@
 \checkmark
 \Checkmark
 \CheckmarkBold
-\checksymbol
+{check mark button}
 \chemarrow
-\chesscomment
-\chessetc
-\chesssee
 \chi
 \Chi
+{children crossing}
 \Chiron
 \chiup
-\Ci
+\Choice
+\Choices
 \cirbot
 \circ
+\CircAsterick
+\CircDivd
+\CircDivide
 \circeq
+\CircEq
+\CircGr
+\CircGre
+\CircInvNt
 \Circle
+Circle
 \CIRCLE
 \circlearrowleft
 \circlearrowright
@@ -1254,10 +1484,29 @@
 \circleurquad
 \circleurquadblack
 \circlevertfill
+\CircLs
+\CircLse
+\CircMinus
+\CircMinusPlus
+\CircNand
+\CircNd
+\CircNgt
+\CircNor
+\CircNt
+\CircOr
 \Circpipe
+\CircPls
 \circplus
+\CircPlusMinus
+\CircSm
 \Circsteel
+\CircTimes
+Circular
+circulus}
+\Circumflex
 \circumflexus
+\circwedge
+\CircXor
 \cirE
 \cirfnint
 \cirfnintsl
@@ -1264,15 +1513,8 @@
 \cirfnintup
 \cirmid
 \cirscir
-\Cja
-\Cjo
-\Cka
-\Cke
-\Cki
-\Cko
-\Cku
-\Cla
-\Cle
+{cityscape at dusk}
+{classical building}
 \CleaningA
 \CleaningF
 \CleaningFF
@@ -1284,11 +1526,12 @@
 \clefFInline
 \clefG
 \clefGInline
-\Cli
 \clickb
 \clickc
 \clickt
-\Clo
+{clinking beer mugs}
+{clinking glasses}
+\Cln
 \clock
 \ClockFramefalse
 \ClockFrametrue
@@ -1295,9 +1538,12 @@
 \ClockLogo
 \ClockStyle
 \clocktime
+{clockwise vertical arrows}
 \closedcurlyvee
 \closedcurlywedge
 \closedequal
+{closed mailbox with lowered flag}
+{closed mailbox with raised flag}
 \closedniomega
 \closedprec
 \closedrevepsilon
@@ -1307,20 +1553,47 @@
 \closedvarcupsmashprod
 \closure
 \Cloud
-\Clu
+{cloud with lightning}
+{cloud with lightning and rain}
+\ClsAngl
+\ClsAnglBar
+\ClsArrwBrac
+\ClsBar
+\ClsBrac
+\ClsBracBar
+\ClsBrknBrac
+\ClsBrknBracBar
+\ClsBrknBrkt
+\ClsBrknBrktBar
+\ClsBrkt
+\ClsBrktBar
+\ClsCeil
+\ClsCircBrac
+\ClsCircBracBar
+\ClsCircBrkt
+\ClsCircBrktBar
+\ClsCrlyBrkt
+\ClsCrlyBrktBar
+\ClsCurvAngl
+\ClsDblAngl
+\ClsDblBar
+\ClsDblBrac
+\ClsDblCeil
+\ClsDblFloor
+\ClsDblGrp
+\ClsDblParn
+\ClsEquv
+\ClsFloor
+\ClsGrp
+\ClsImpl
+\ClsParn
+\ClsParnBar
+\ClsSqrParn
+\ClsTortoise
+\ClsTortoiseBar
+\ClsTrpBar
+\ClsTurn
 \clubsuit
-\Cma
-\Cme
-\Cmi
-\Cmo
-\Cmu
-\Cna
-\Cne
-\Cni
-\Cno
-\Cnu
-\Co
-\CO
 \coasterisk
 \coAsterisk
 \coda
@@ -1327,6 +1600,7 @@
 \Coda
 \Coffeecup
 \coh
+\Coh
 \colon
 \Colon
 \colonapprox
@@ -1344,12 +1618,13 @@
 \colonminus
 \colonsim
 \Colonsim
+\Coma
 \commaminus
-\compensation
 \complement
 \Complex
 \COMPLEX
 \ComputerMouse
+\Concat
 \concavediamond
 \concavediamondtickleft
 \concavediamondtickright
@@ -1362,40 +1637,30 @@
 \conjquant
 \conjunction
 \Conjunction
-\Conv
+\Conseq
+{construction worker}
+\constvec
+\Cont
+{convenience store}
 \convolution
-\cooker
-\Cooley
 \coppa
 \Coppa
 \coprod
 \copyright
 \corner
-\corona
-\coronainv
+Corners
 \corresponds
 \Corresponds
 \cos
-\cosh
-\cot
-\coth
-\counterplay
+{counterclockwise arrows button}
 \countriesofeuropefamily
-\cov
-\Cov
+{couple with heart}
 \covbond
-\Cpa
-\Cpe
-\Cpi
-\Cpo
-\Cpu
+\Cover
+\Cpyrght
 \cr
 \CR
-\Cra
-\Cre
 \crescHairpin
-\Cri
-\Cro
 \Croatia
 \cross
 \Cross
@@ -1405,9 +1670,22 @@
 \crossd
 \Crossedbox
 \CrossedBox
+\CrossedCircle
+\CrossedCurvedDiamond
+\CrossedDiamond
+\CrossedDownTriangle
+\CrossedLeftTriangle
+\CrossedLozenge
+\CrossedRightTriangle
+\CrossedSmallCircle
+\CrossedSquare
+\CrossedUpTriangle
+\CrossedVerySmallCircle
+\CrossedVerySmallSquare
 \crossh
 \crossing
 \CrossMaltese
+{cross mark button}
 \crossnilambda
 \CrossOpenShadow
 \CrossOutline
@@ -1420,29 +1698,14 @@
 \crotchetRest
 \crotchetRestDotted
 \crtilde
-\Cru
 \crux
 \Crux
-\CS
-\Csa
-\csc
-\csch
-\Cse
 \cshuffle
-\Csi
-\Cso
-\Csu
 \csub
 \csube
 \csup
 \csupe
-\Cta
-\Cte
-\Cti
-\Cto
 \Ctrl
-\Ctu
-\Cu
 \Cube
 \cup
 \Cup
@@ -1453,7 +1716,6 @@
 \cupovercap
 \cupplus
 \cupvee
-\curl
 \curlyc
 \curlyeqprec
 \curlyeqsucc
@@ -1469,6 +1731,7 @@
 \curlyyogh
 \curlyz
 \currency
+{currency exchange}
 \curvearrowbotleft
 \curvearrowbotleftright
 \curvearrowbotright
@@ -1484,22 +1747,19 @@
 \curvearrowsenw
 \curvearrowswne
 \curvearrowupdown
+curved}
 \CutLeft
 \CutRight
 \CuttingLine
-\Cwa
 \cwcirclearrow
 \cwcirclearrowdown
 \cwcirclearrowleft
 \cwcirclearrowright
 \cwcirclearrowup
-\Cwe
 \cwgapcirclearrow
-\Cwi
 \cwleftarcarrow
 \cwnearcarrow
 \cwnwarcarrow
-\Cwo
 \cwopencirclearrow
 \cwoverarcarrow
 \cwrightarcarrow
@@ -1507,28 +1767,40 @@
 \cwswarcarrow
 \cwunderarcarrow
 \cwundercurvearrow
-\Cxa
-\Cxe
-\Cya
-\Cyo
 \cyprfamily
 \CYRSH
-\Cza
 \Czechia
-\Czo
 \d
-d
 \D
-D
-\DA
+d0}
+d0fa}
+d1}
+d1do}
+d1fa}
+d1re}
+d1ti}
+d1triangle}
+d2}
+d2do}
+d2fa}
+d2kievan}
+d2re}
+d2ti}
+d2triangle}
+d3kievan}
+daccentus}
 \dag
 \dagger
+\Dagger
+\Daggerr
 \dalambert
 \daleth
 \danger
-\dAnnoey
+dark skin tone}
 \DArrow
 \dasharrow
+\DashArrowLeft
+\DashArrowRight
 \dashcolon
 \dasheddownarrow
 \dashedleftarrow
@@ -1551,11 +1823,11 @@
 \dashVdash
 \DashVDash
 \dashVv
+\DAsterisk
 \davidsstar
 \DavidStar
 \DavidStarSolid
 \dbar
-\dBar
 \dbend
 \dbkarow
 \dblcolon
@@ -1562,13 +1834,12 @@
 \DCa
 \DCb
 \DCc
-\dcChangey
 \DCd
-\dChangey
-\dCooley
-\DD
+\dcup
 \ddag
 \ddagger
+\Ddagger
+\Ddaggerr
 \ddashint
 \Ddashv
 \ddddot
@@ -1575,7 +1846,6 @@
 \dddot
 \dddtstile
 \ddigamma
-\DDohne
 \ddot
 \ddotdot
 \ddots
@@ -1585,7 +1855,6 @@
 \ddststile
 \ddtstile
 \ddttstile
-\DE
 \DeclareFontFamily
 \DeclareFontShape
 \DeclareMathOperator
@@ -1592,15 +1861,9 @@
 \DeclareMathOperator*
 \declareslashed
 \DeclareUnicodeCharacter
-\decofourleft
-\decofourright
-\decoone
-\decosix
-\decothreeleft
-\decothreeright
-\decotwo
 \decrescHairpin
-\deg
+default}
+\Defn
 \degree
 \Del
 \DEL
@@ -1609,8 +1872,6 @@
 \deltaup
 \demisemiquaver
 \demisemiquaverDotted
-\demisemiquaverDottedDouble
-\demisemiquaverDottedDoubleDown
 \demisemiquaverDottedDown
 \demisemiquaverDown
 \denarius
@@ -1617,10 +1878,19 @@
 \Denarius
 \Denmark
 \dental
+\DeoCont
+\DeoFutr
+\DeoNec
+\DeoNext
+\DeoNonCont
+\DeoPast
+\DeoPos
 \Dep
+{department store}
+desc}
 \descnode
-\det
-\devadvantage
+{desktop computer}
+dfermata}
 \dfourier
 \Dfourier
 \dft
@@ -1629,11 +1899,11 @@
 \DH
 \diaeresis
 \diagdown
-\diagonal
 \diagup
 \diameter
 \diamond
 \Diamond
+Diamond
 \diamondbackslash
 \diamondbar
 \Diamondblack
@@ -1671,6 +1941,7 @@
 \diamondtopblack
 \diamondtriangle
 \diamondvert
+{diamond with a dot}
 \diatop
 \diaunder
 \dicei
@@ -1681,7 +1952,6 @@
 \dicevi
 \digamma
 \Digamma
-\dim
 \ding
 \ding{100}
 \ding{101}
@@ -1872,7 +2142,6 @@
 \ding{99}
 \dingasterisk
 dingautolist
-\dInnocey
 \diple
 \diple*
 \Diple
@@ -1879,38 +2148,44 @@
 \Diple*
 \dipole
 \Direct
-\Dish
+{disappointed face}
+discant}
 \disin
 \disjquant
 \displaystyle
 \div
+\Divd
 \divdot
-\divg
+\Divide
 \divideontimes
 \divides
 \Divides
 \DividesNot
+\divs
 \divslash
 \dj
 \DJ
-\DL
-\dLaughey
 \dlbari
 \DLE
+dlongfermata}
 \dlsh
-\DM
+dmarcato}
 \Dmesonminus
 \Dmesonnull
 \Dmesonplus
+\DMinus
+\Dnd
 \dndtstile
-\dNeutrey
-\dNinja
 \dnststile
+\Dnt
 \dntstile
 \dnttstile
-\dNursey
-\Dohne
+do}
+do_change}
+\Dollar
+Donald Islands}
 \Dontwash
+\Dor
 \dot
 \dotarrow
 \dotcong
@@ -1920,6 +2195,7 @@
 \Doteq
 \doteqdot
 \dotequiv
+dotkievan}
 \dotmedvert
 \dotminus
 \dotplus
@@ -1933,11 +2209,28 @@
 \dotsm
 \dotsminusdots
 \dotso
+\DottedCircl
 \dottedcircle
+\DottedCurvedDiamond
+\DottedDiamond
+\DottedDownTriangle
+\DottedLeftArrowHead
+\DottedLeftTriangle
+\DottedLozenge
+\DottedRightArrowHead
+\DottedRightTriangle
+\DottedSmallCircle
 \dottedsquare
+\DottedSquare
+\DottedSquareRoundCorners
 \dottedtilde
+\DottedUpTriangle
+\DottedVerySmallCircle
+\DottedVerySmallSquare
 \dottimes
+dotvaticana}
 \double
+Double
 \doublebar
 \doublebarint
 \doublebarvee
@@ -1946,15 +2239,18 @@
 \doublecovbond
 \doublecross
 \doublecup
+{double curly loop}
 \doublecurlyvee
 \doublecurlywedge
 \doubledot
+{double exclamation mark}
 \doubleeye
 \doublefrown
 \doublefrowneq
-\doublepawns
 \doubleplus
+\DoubleQuote
 \doublesharp
+doublesharp}
 \doublesmile
 \doublesmileeq
 \doublesqcap
@@ -1964,6 +2260,8 @@
 \doubletilde
 \doublevee
 \doublewedge
+down}
+Down
 \downarrow
 \Downarrow
 \DOWNarrow
@@ -1976,10 +2274,13 @@
 \downblackarrow
 \downblackspoon
 \downbow
+downbow}
 \downbracketfill
+{downcast face with sweat}
 \downdasharrow
 \downdownarrows
 \downdownharpoons
+down face}
 \downfilledspoon
 \downfishtail
 \downfootline
@@ -1999,13 +2300,25 @@
 \Downmapsto
 \downmodels
 \downModels
+downmordent}
 \downp
 \downparenthfill
 \downpitchfork
+downprall}
 \downpropto
 \downrcurvearrow
 \downrightcurvedarrow
 \downrsquigarrow
+\DownSlashedCircle
+\DownSlashedCurvedDiamond
+\DownSlashedDiamond
+\DownSlashedDownTriangle
+\DownSlashedLeftTriangle
+\DownSlashedLozenge
+\DownSlashedRightTriangle
+\DownSlashedSmallCircle
+\DownSlashedSquare
+\DownSlashedUpTriangle
 \downslice
 \downspoon
 \downt
@@ -2022,71 +2335,64 @@
 \downvDash
 \downVdash
 \downVDash
+{downwards button}
 \downwavearrow
 \downwhitearrow
 \downY
 \downzigzagarrow
+\DoxCont
+\DoxFutr
+\DoxNec
+\DoxNext
+\DoxNonCont
+\DoxPast
+\DoxPos
+dpedalheel}
+dpedaltoe}
+\DPlus
+dportato}
 \dprime
-\DQ
 \dracma
 \draftingarrow
 \drbkarow
-\Dreizack
 \droang
 \drsh
 \drumclef
-\drWalley
 \ds
-\Ds
-\DS
-\dSadey
-\dsaeronautical
-\dsagricultural
-\dsarchitectural
-\dsbiological
 \DSC
-\dschemical
-\dscommercial
 \dsdtstile
-\dSey
-\dsheraldical
-\dsjuridical
-\dSleepey
-\dsliterary
-\dsmathematical
-\dsmedical
-\dSmiley
-\dsmilitary
+dsemicirculus}
+dshortfermata}
+dsignumcongruentiae}
 \dsol
-\dsrailways
 \dsststile
-\dstechnical
+dstaccatissimo}
 \dststile
 \dsttstile
 \dsub
+\Dt
 \dtdtstile
 \dtimes
-\dTongey
+\DTimes
+\DTrpTurn
 \dtststile
 \dttstile
 \dtttstile
-\DU
+\DTurnDWavy
+\DTurnWavy
 \dualmap
 \duevolte
-\dVomey
-\dWalley
-\dWinkey
-\dXey
+dverylongfermata}
+\dwedge
 \dz
 \e
-e
-E
 \earth
 \Earth
+{ear with hearing aid}
 \eastcross
 \EastPoint
 \Ecommerce
-\eggbeater
+EE}
 \egsdot
 \EightAsterisk
 \EightFlowerPetal
@@ -2095,7 +2401,6 @@
 \eighthNote
 \eighthNoteDotted
 \eighthNoteDottedDouble
-\eighthNoteDottedDoubleDown
 \eighthNoteDottedDown
 \eighthNoteDown
 \EightStar
@@ -2121,179 +2426,32 @@
 \emptysetoarrl
 \emptysetobar
 \emptysetocirc
-\EN
 \enclosecircle
 \enclosediamond
 \enclosesquare
 \enclosetriangle
 \End
-\ending
 \eng
 \engma
 \enleadertwodots
 \ENQ
+\Entail
+\EntailEquv
 \Enter
 enumerate
 \Envelope
+{envelope with arrow}
 \enya
-\EOafter
-\EOandThen
-\EOAppear
-\EOBeardMask
-\EOBedeck
-\EOBlood
-\EObrace
-\EObuilding
-\EOBundle
-\EOChop
-\EOChronI
-\EOCloth
-\EODealWith
-\EODeer
-\EOeat
-\EOflint
-\EOflower
-\EOFold
-\EOGod
-\EOGoUp
-\EOgovernor
-\EOGuise
-\EOHallow
 \EOi
 \EOii
 \EOiii
 \EOiv
 \EOix
-\EOja
-\EOjaguar
-\EOje
-\EOji
-\EOJI
-\EOjo
-\EOju
-\EOkak
-\EOke
-\EOki
-\EOkij
-\EOKing
-\EOknottedCloth
-\EOknottedClothStraps
-\EOko
-\EOku
-\EOkuu
-\EOLetBlood
-\EOloinCloth
-\EOlongLipII
-\EOLord
-\EOLose
-\EOma
-\EOmacaw
-\EOmacawI
-\EOme
-\EOmexNew
-\EOmi
-\EOMiddle
-\EOmonster
-\EOMountain
-\EOmuu
-\EOna
-\EOne
-\EOni
-\EOnow
-\EOnu
-\EOnuu
-\EOofficerI
-\EOofficerII
-\EOofficerIII
-\EOofficerIV
-\EOpa
-\EOpak
-\EOPatron
-\EOPatronII
-\EOpe
-\EOpenis
-\EOpi
-\EOPierce
-\EOPlant
-\EOPlay
-\EOpo
-\EOpriest
-\EOPrince
-\EOpu
-\EOpuu
-\EOpuuk
-\EORain
-\EOsa
-\EOSa
-\EOsacrifice
-\EOSaw
-\EOScorpius
-\EOset
-\EOsi
-\EOSi
-\EOsing
-\EOSini
-\EOskin
-\EOSky
-\EOskyAnimal
-\EOskyPillar
-\EOsnake
-\EOSo
-\EOSpan
-\EOSprinkle
-\EOstar
-\EOstarWarrior
-\EOStarWarrior
-\EOstep
-\EOsu
-\EOSu
-\EOsun
-\EOsuu
-\EOSuu
 \EOT
-\EOta
-\EOte
-\EOthrone
-\EOti
-\EOtime
-\EOTime
-\EOTitle
-\EOTitleII
-\EOTitleIV
-\EOto
-\EOtu
-\EOtuki
-\EOtukpa
-\EOturtle
-\EOtuu
-\EOtza
-\EOtze
-\EOtzetze
-\EOtzi
-\EOtzu
-\EOtzuu
-\EOundef
 \EOv
-\EOvarBeardMask
-\EOvarja
-\EOvarji
-\EOvarki
-\EOvarkuu
-\EOvarni
-\EOvarpa
-\EOvarsi
-\EOvarSi
-\EOvartza
-\EOvarwuu
-\EOvarYear
 \EOvi
 \EOvii
 \EOviii
-\EOwa
-\EOwe
-\EOwi
-\EOwo
-\EOwuu
 \EOx
 \EOxi
 \EOxii
@@ -2305,19 +2463,15 @@
 \EOxvii
 \EOxviii
 \EOxx
-\EOya
-\EOyaj
-\EOye
-\EOYear
-\EOyuu
 \EOzero
-\EP
 \eparsl
+epiphonus}
 \epsdice
 \epsi
 \epsilon
 \Epsilon
 \epsilonup
+\Eq
 \eqbump
 \eqbumped
 \eqcirc
@@ -2358,9 +2512,9 @@
 \equivDD
 \equivVert
 \equivVvert
+\Equv
 \eqvparsl
 \er
-\erf
 \Eros
 \errbarblackcircle
 \errbarblackdiamond
@@ -2372,7 +2526,6 @@
 \Esc
 \ESC
 \esh
-\Estatically
 \Estonia
 \eta
 \Eta
@@ -2392,27 +2545,49 @@
 \Euro
 \eurologo
 \EURtm
+evil monkey}
 \exciton
+\Exclaim
 \Exclam
+{exclamation question mark}
+\ExGrtFix
 \exists
-\exp
+\Exists
+\ExLstFix
 \experimentalsym
-\Explosionsafe
+{expressionless face}
 \externalsym
 \eye
+{eye in speech bubble}
+eyes}
 \EyesDollar
 \f
-f
-F
-\fa
+f}
+fa}
+\faAccessibleIcon
+\faAccusoft
+\faAd
+\faAddressBook
+\faAddressBook[regular]
+\faAddressCard
+\faAddressCard[regular]
 \faAdjust
 \faAdn
+\faAdversal
+\faAffiliatetheme
+\faAirbnb
+\faAirFreshener
+\faAlgolia
 \faAlignCenter
 \faAlignJustify
 \faAlignLeft
 \faAlignRight
+\faAlipay
+\faAllergies
 \faAmazon
+\faAmazonPay
 \faAmbulance
+\faAmilia
 \faAnchor
 \faAndroid
 \faAngellist
@@ -2424,114 +2599,242 @@
 \faAngleLeft
 \faAngleRight
 \faAngleUp
+\faAngry
+\faAngrycreative
+\faAngry[regular]
+\faAngular
+\faAnkh
+\faApper
 \faApple
+\faApple*
+\faApplePay
+\faAppStore
+\faAppStoreIos
 \faArchive
-\faAreaChart
+\faArchway
+\faArrowAltCircleDown
+\faArrowAltCircleLeft
+\faArrowAltCircleRight
+\faArrowAltCircleUp
 \faArrowCircleDown
 \faArrowCircleLeft
-\faArrowCircleODown
-\faArrowCircleOLeft
-\faArrowCircleORight
-\faArrowCircleOUp
 \faArrowCircleRight
 \faArrowCircleUp
 \faArrowDown
 \faArrowLeft
 \faArrowRight
-\faArrows
-\faArrowsAlt
-\faArrowsH
-\faArrowsV
+\faArrows*
+\faArrowsAltH
+\faArrowsAltV
 \faArrowUp
+\faArtstation
 \faAsterisk
+\faAsymmetrik
 \faAt
-\faAutomobile
+\faAtlas
+\faAtlassian
+\faAtom
+\faAudible
+\faAudioDescription
+\faAutoprefixer
+\faAvianex
+\faAviato
+\faAward
+\faAws
+\faBaby
+\faBabyCarriage
+\faBackspace
 \faBackward
+\faBacon
+\faBacteria
+\faBacterium
+\faBahai
 \faBalanceScale
+\faBalanceScaleLeft
+\faBalanceScaleRight
 \faBan
-\faBank
-\faBarChart
-\faBarChartO
+\faBandAid
+\faBandcamp
 \faBarcode
 \faBars
-\faBattery0
-\faBattery1
-\faBattery2
-\faBattery3
-\faBattery4
+\faBaseballBall
+\faBasketballBall
+\faBath
 \faBatteryEmpty
 \faBatteryFull
 \faBatteryHalf
 \faBatteryQuarter
 \faBatteryThreeQuarters
+\faBattleNet
 \faBed
 \faBeer
 \faBehance
 \faBehanceSquare
 \faBell
-\faBellO
+\faBell[regular]
 \faBellSlash
-\faBellSlashO
+\faBellSlash[regular]
+\faBezierCurve
+\faBible
 \faBicycle
+\faBiking
+\faBimobject
 \faBinoculars
+\faBiohazard
 \faBirthdayCake
 \faBitbucket
-\faBitbucketSquare
 \faBitcoin
+\faBity
+\faBlackberry
 \faBlackTie
+\faBlender
+\faBlenderPhone
+\faBlind
+\faBlog
+\faBlogger
+\faBloggerB
+\faBluetooth
+\faBluetoothB
 \faBold
 \faBolt
 \faBomb
+\faBone
+\faBong
 \faBook
+\faBookDead
 \faBookmark
-\faBookmarkO
+\faBookmark[regular]
+\faBookMedical
+\faBookOpen
+\faBookReader
+\faBootstrap
+\faBorderAll
+\faBorderNone
+\faBorderStyle
+\faBowlingBall
+\faBox
+\faBoxes
+\faBoxOpen
+\faBoxTissue
+\faBraille
+\faBrain
+\faBreadSlice
 \faBriefcase
+\faBriefcaseMedical
+\faBroadcastTower
+\faBroom
+\faBrush
 \faBtc
+\faBuffer
 \faBug
 \faBuilding
-\faBuildingO
+\faBuilding[regular]
 \faBullhorn
 \faBullseye
+\faBurn
+\faBuromobelexperte
 \faBus
+\faBus*
+\faBusinessTime
+\faBuyNLarge
 \faBuysellads
-\faCab
 \faCalculator
 \faCalendar
-\faCalendarCheckO
-\faCalendarMinusO
-\faCalendarO
-\faCalendarPlusO
-\faCalendarTimesO
+\faCalendar*
+\faCalendarCheck
+\faCalendarCheck[regular]
+\faCalendarDay
+\faCalendarMinus
+\faCalendarMinus[regular]
+\faCalendarPlus
+\faCalendarPlus[regular]
+\faCalendar*[regular]
+\faCalendar[regular]
+\faCalendarTimes
+\faCalendarTimes[regular]
+\faCalendarWeek
 \faCamera
 \faCameraRetro
+\faCampground
+\faCanadianMapleLeaf
+\faCandyCane
+\faCannabis
+\faCapsules
 \faCar
+\faCar*
+\faCaravan
+\faCarBattery
+\faCarCrash
 \faCaretDown
 \faCaretLeft
 \faCaretRight
-\faCaretSquareODown
-\faCaretSquareOLeft
-\faCaretSquareORight
-\faCaretSquareOUp
+\faCaretSquareDown
+\faCaretSquareLeft
+\faCaretSquareRight
+\faCaretSquareUp
+\faCaretSquareUp[regular]
 \faCaretUp
+\faCarrot
+\faCarSide
 \faCartArrowDown
 \faCartPlus
-\faCc
+\faCashRegister
+\faCat
+\faCcAmazonPay
 \faCcAmex
+\faCcApplePay
 \faCcDinersClub
 \faCcDiscover
 \faCcJcb
 \faCcMastercard
+\FacCont
 \faCcPaypal
 \faCcStripe
 \faCcVisa
+{face blowing a kiss}
+\faCentercode
+\faCentos
 \faCertificate
-\faChain
-\faChainBroken
+{face savoring food}
+{face screaming in fear}
+{face with hand over mouth}
+{face with medical mask}
+{face with monocle}
+{face with open mouth}
+{face without mouth}
+{face with raised eyebrow}
+{face with rolling eyes}
+{face with steam from nose}
+{face with symbols on mouth}
+{face with tears of joy}
+{face with thermometer}
+{face with tongue}
+\FacFutr
+\faChair
+\faChalkboard
+\faChalkboardTeacher
+fa_change}
+\faChargingStation
+\faChartArea
+\faChartBar
+\faChartBar[regular]
+\faChartLine
+\faChartPie
 \faCheck
 \faCheckCircle
-\faCheckCircleO
+\faCheckCircle[regular]
+\faCheckDouble
 \faCheckSquare
-\faCheckSquareO
+\faCheckSquare[regular]
+\faCheese
+\faChess
+\faChessBishop
+\faChessBoard
+\faChessKing
+\faChessKnight
+\faChessPawn
+\faChessQueen
+\faChessRook
 \faChevronCircleDown
 \faChevronCircleLeft
 \faChevronCircleRight
@@ -2542,338 +2845,856 @@
 \faChevronUp
 \faChild
 \faChrome
+\faChromecast
+\faChurch
+facing baby chick}
+facing fist}
 \faCircle
-\faCircleO
-\faCircleONotch
-\faCircleThin
+\faCircleNotch
+\faCircle[regular]
+\faCity
+\faClinicMedical
 \faClipboard
-\faClockO
+\faClipboardCheck
+\faClipboardList
+\faClipboard[regular]
+\faClock
+\faClock[regular]
 \faClone
-\faClose
+\faClone[regular]
+\faClosedCaptioning
 \faCloud
-\faCloudDownload
-\faCloudUpload
-\faCny
+\faCloudDownload*
+\faCloudflare
+\faCloudMeatball
+\faCloudMoon
+\faCloudMoonRain
+\faCloudRain
+\faCloudscale
+\faCloudShowersHeavy
+\faCloudsmith
+\faCloudSun
+\faCloudSunRain
+\faCloudUpload*
+\faCloudversify
+\FacNec
+\FacNext
+\FacNonCont
+\faCocktail
 \faCode
-\faCodeFork
+\faCodeBranch
 \faCodepen
+\faCodiepie
 \faCoffee
 \faCog
 \faCogs
+\faCoins
 \faColumns
 \faComment
-\faCommenting
-\faCommentingO
-\faCommentO
+\faComment*
+\faCommentDollar
+\faCommentDots
+\faCommentDots[regular]
+\faCommentMedical
+\faComment*[regular]
+\faComment[regular]
 \faComments
-\faCommentsO
+\faCommentsDollar
+\faCommentSlash
+\faComments[regular]
+\faCompactDisc
 \faCompass
+\faCompass[regular]
 \faCompress
+\faCompress*
+\faCompressArrows*
+\faConciergeBell
+\faConfluence
 \faConnectdevelop
 \faContao
 \Facontent
+\faCookie
+\faCookieBite
 \faCopy
+\faCopy[regular]
 \faCopyright
+\faCopyright[regular]
+\faCottonBureau
+\faCouch
+\faCpanel
+\FacPast
+\FacPos
 \faCreativeCommons
+\faCreativeCommonsBy
+\faCreativeCommonsNc
+\faCreativeCommonsNcEu
+\faCreativeCommonsNcJp
+\faCreativeCommonsNd
+\faCreativeCommonsPd
+\faCreativeCommonsPd*
+\faCreativeCommonsRemix
+\faCreativeCommonsSa
+\faCreativeCommonsShare
+\faCreativeCommonsZero
 \faCreditCard
+\faCreditCard[regular]
+\faCriticalRole
 \faCrop
+\faCrop*
+\faCross
 \faCrosshairs
+\faCrow
+\faCrown
+\faCrutch
 \faCss3
 \faCube
 \faCubes
 \faCut
-\faCutlery
-\faDashboard
+\faCuttlefish
+\faDailymotion
+\faDAndD
+\faDAndDBeyond
 \faDashcube
 \faDatabase
-\faDedent
+\faDeaf
+\faDeezer
 \faDelicious
+\faDemocrat
+\faDeploydog
+\faDeskpro
 \faDesktop
+\faDev
 \faDeviantart
-\faDiamond
+\faDharmachakra
+\faDhl
+\faDiagnoses
+\faDiaspora
+\faDice
+\faDiceD20
+\faDiceD6
+\faDiceFive
+\faDiceFour
+\faDiceOne
+\faDiceSix
+\faDiceThree
+\faDiceTwo
 \faDigg
-\faDollar
-\faDotCircleO
+\faDigitalOcean
+\faDigitalTachograph
+\faDirections
+\faDiscord
+\faDiscourse
+\faDisease
+\faDivide
+\faDizzy
+\faDizzy[regular]
+\faDna
+\faDochub
+\faDocker
+\faDog
+\faDollarSign
+\faDolly
+\faDollyFlatbed
+\faDonate
+\faDoorClosed
+\faDoorOpen
+\faDotCircle
+\faDotCircle[regular]
+\faDove
 \faDownload
+\faDraft2digital
+\faDraftingCompass
+\faDragon
+\faDrawPolygon
 \faDribbble
+\faDribbbleSquare
 \faDropbox
+\faDrum
+\faDrumSteelpan
+\faDrumstickBite
 \faDrupal
+\faDumbbell
+\faDumpster
+\faDumpsterFire
+\faDungeon
+\faDyalog
+\faEarlybirds
+\faEbay
+\faEdge
+\faEdgeLegacy
 \faEdit
+\faEdit[regular]
+\faEgg
 \faEject
+\faElementor
 \faEllipsisH
 \faEllipsisV
+\faEllo
+\faEmber
 \faEmpire
 \faEnvelope
-\faEnvelopeO
+\faEnvelopeOpen
+\faEnvelopeOpen[regular]
+\faEnvelopeOpenText
+\faEnvelope[regular]
 \faEnvelopeSquare
+\faEnvira
+\faEquals
 \faEraser
-\faEur
-\faEuro
-\faExchange
+\faErlang
+\faEthereum
+\faEthernet
+\faEtsy
+\faEuroSign
+\faEvernote
+\faExchange*
 \faExclamation
 \faExclamationCircle
 \faExclamationTriangle
 \faExpand
+\faExpand*
+\faExpandArrows*
 \faExpeditedssl
-\faExternalLink
-\faExternalLinkSquare
+\faExternalLink*
+\faExternalLinkSquare*
 \faEye
-\faEyedropper
+\faEyeDropper
+\faEye[regular]
 \faEyeSlash
+\faEyeSlash[regular]
 \faFacebook
 \faFacebookF
-\faFacebookOfficial
+\faFacebookMessenger
 \faFacebookSquare
+\faFan
+\faFantasyFlightGames
 \faFastBackward
 \faFastForward
+\faFaucet
 \faFax
-\faFeed
+\faFeather
+\faFeather*
+\faFedex
+\faFedora
 \faFemale
 \faFighterJet
+\faFigma
 \faFile
-\faFileArchiveO
-\faFileAudioO
-\faFileCodeO
-\faFileExcelO
-\faFileImageO
-\faFileMovieO
-\faFileO
-\faFilePdfO
-\faFilePhotoO
-\faFilePictureO
-\faFilePowerpointO
-\faFilesO
-\faFileSoundO
-\faFileText
-\faFileTextO
-\faFileVideoO
-\faFileWordO
-\faFileZipO
+\faFile*
+\faFileArchive
+\faFileArchive[regular]
+\faFileAudio
+\faFileAudio[regular]
+\faFileCode
+\faFileCode[regular]
+\faFileContract
+\faFileCsv
+\faFileDownload
+\faFileExcel
+\faFileExcel[regular]
+\faFileExport
+\faFileImage
+\faFileImage[regular]
+\faFileImport
+\faFileInvoice
+\faFileInvoiceDollar
+\faFileMedical
+\faFileMedical*
+\faFilePdf
+\faFilePdf[regular]
+\faFilePowerpoint
+\faFilePrescription
+\faFile*[regular]
+\faFile[regular]
+\faFileSignature
+\faFileUpload
+\faFileVideo
+\faFileVideo[regular]
+\faFileWord
+\faFileWord[regular]
+\faFill
+\faFillDrip
 \faFilm
 \faFilter
+\faFingerprint
 \faFire
+\faFire*
 \faFireExtinguisher
 \faFirefox
+\faFirefoxBrowser
+\faFirstAid
+\faFirstdraft
+\faFirstOrder
+\faFirstOrder*
+\faFish
+\faFistRaised
 \faFlag
 \faFlagCheckered
-\faFlagO
-\faFlash
+\faFlag[regular]
+\faFlagUsa
 \faFlask
 \faFlickr
-\faFloppyO
+\faFlipboard
+\faFlushed
+\faFlushed[regular]
+\faFly
 \faFolder
-\faFolderO
+\faFolderMinus
 \faFolderOpen
-\faFolderOpenO
+\faFolderOpen[regular]
+\faFolderPlus
+\faFolder[regular]
 \faFont
+\faFontAwesome
+\faFontAwesome*
+\faFontAwesomeFlag
 \faFonticons
+\faFonticonsFi
+\faFootballBall
+\faFortAwesome
+\faFortAwesome*
 \faForumbee
 \faForward
 \faFoursquare
-\faFrownO
-\faFutbolO
+\faFreebsd
+\faFreeCodeCamp
+\faFrog
+\faFrown
+\faFrownOpen
+\faFrownOpen[regular]
+\faFrown[regular]
+\faFulcrum
+\faFunnelDollar
+\faFutbol
+\faFutbol[regular]
+\faGalacticRepublic
+\faGalacticSenate
 \faGamepad
+\faGasPump
 \faGavel
-\faGbp
-\faGe
-\faGear
-\faGears
+\faGem
+\faGem[regular]
 \faGenderless
 \faGetPocket
 \faGg
 \faGgCircle
+\faGhost
 \faGift
+\faGifts
 \faGit
+\faGit*
 \faGithub
-\faGithubAlt
+\faGithub*
 \faGithubSquare
+\faGitkraken
+\faGitlab
 \faGitSquare
-\faGittip
-\faGlass
+\faGitter
+\faGlassCheers
+\faGlasses
+\faGlassMartini
+\faGlassMartini*
+\faGlassWhiskey
+\faGlide
+\faGlideG
 \faGlobe
+\faGlobeAfrica
+\faGlobeAmericas
+\faGlobeAsia
+\faGlobeEurope
+\faGofore
+\faGolfBall
+\faGoodreads
+\faGoodreadsG
 \faGoogle
+\faGoogleDrive
+\faGooglePay
+\faGooglePlay
 \faGooglePlus
+\faGooglePlusG
 \faGooglePlusSquare
 \faGoogleWallet
+\faGopuram
 \faGraduationCap
 \faGratipay
-\faGroup
+\faGrav
+\faGreaterThan
+\faGreaterThanEqual
+\faGrimace
+\faGrimace[regular]
+\faGrin
+\faGrin*
+\faGrinBeam
+\faGrinBeam[regular]
+\faGrinBeamSweat
+\faGrinBeamSweat[regular]
+\faGrinHearts
+\faGrinHearts[regular]
+\faGrin*[regular]
+\faGrin[regular]
+\faGrinSquint
+\faGrinSquint[regular]
+\faGrinSquintTears
+\faGrinStars
+\faGrinStars[regular]
+\faGrinTears
+\faGrinTears[regular]
+\faGrinTongue
+\faGrinTongue[regular]
+\faGrinTongueSquint
+\faGrinTongueWink
+\faGrinWink
+\faGrinWink[regular]
+\faGripfire
+\faGripHorizontal
+\faGripLines
+\faGripLinesVertical
+\faGripVertical
+\faGrunt
+\faGuilded
+\faGuitar
+\faGulp
 \faHackerNews
-\faHandGrabO
-\faHandLizardO
-\faHandODown
-\faHandOLeft
-\faHandORight
-\faHandOUp
-\faHandPaperO
-\faHandPeaceO
-\faHandPointerO
-\faHandRockO
-\faHandScissorsO
-\faHandSpockO
-\faHandStopO
-\faHddO
-\faHeader
+\faHackerNewsSquare
+\faHackerrank
+\faHamburger
+\faHammer
+\faHamsa
+\faHandHolding
+\faHandHoldingHeart
+\faHandHoldingMedical
+\faHandHoldingUsd
+\faHandHoldingWater
+\faHandLizard
+\faHandLizard[regular]
+\faHandMiddleFinger
+\faHandPaper
+\faHandPaper[regular]
+\faHandPeace
+\faHandPeace[regular]
+\faHandPointDown
+\faHandPointDown[regular]
+\faHandPointer
+\faHandPointer[regular]
+\faHandPointLeft
+\faHandPointLeft[regular]
+\faHandPointRight
+\faHandPointUp
+\faHandPointUp[regular]
+\faHandRock
+\faHandRock[regular]
+\faHands
+\faHandScissors
+\faHandScissors[regular]
+\faHandshake
+\faHandshakeAltSlash
+\faHandshake[regular]
+\faHandshakeSlash
+\faHandsHelping
+\faHandSparkles
+\faHandSpock
+\faHandSpock[regular]
+\faHandsWash
+\faHanukiah
+\faHardHat
+\faHashtag
+\faHatCowboy
+\faHatCowboySide
+\faHatWizard
+\faHdd
+\faHdd[regular]
+\faHeading
 \faHeadphones
+\faHeadphones*
+\faHeadset
+\faHeadSideCough
+\faHeadSideCoughSlash
+\faHeadSideMask
+\faHeadSideVirus
 \faHeart
 \faHeartbeat
-\faHeartO
+\faHeartBroken
+\faHeart[regular]
+\faHelicopter
+\faHighlighter
+\faHiking
+\faHippo
+\faHips
+\faHireAHelper
 \faHistory
+\faHive
+\faHockeyPuck
+\faHollyBerry
 \faHome
-\faHospitalO
+\faHooli
+\faHornbill
+\faHorse
+\faHorseHead
+\faHospital
+\faHospital*
+\faHospital[regular]
+\faHospitalSymbol
+\faHospitalUser
+\faHotdog
 \faHotel
+\faHotjar
+\faHotTub
 \faHourglass
 \faHourglassEnd
 \faHourglassHalf
-\faHourglassO
+\faHourglass[regular]
 \faHourglassStart
+\faHouseDamage
+\faHouseUser
 \faHouzz
+\faHryvnia
 \faHSquare
 \faHtml5
+\faHubspot
+\faIceCream
+\faIcicles
+\faIcon{500px}
+\faIcons
 \faICursor
-\faIls
+\faIdBadge
+\faIdBadge[regular]
+\faIdCard
+\faIdCard*
+\faIdCard[regular]
+\faIdeal
+\faIgloo
 \faImage
+\faImage[regular]
+\faImages
+\faImages[regular]
+\faImdb
 \faInbox
 \faIndent
 \faIndustry
+\faInfinity
 \faInfo
 \faInfoCircle
-\faInr
+\faInnosoft
 \faInstagram
-\faInstitution
+\faInstagramSquare
+\faInstalod
+\faIntercom
 \faInternetExplorer
-\faIntersex
+\faInvision
 \faIoxhost
 \faItalic
+\faItchIo
+\faItunes
+\faItunesNote
+\faJava
+\faJedi
+\faJediOrder
+\faJenkins
+\faJira
+\faJoget
+\faJoint
 \faJoomla
-\faJpy
+\faJournalWhills
+\faJs
 \faJsfiddle
+\faJsSquare
+\faKaaba
+\faKaggle
 \faKey
-\faKeyboardO
-\faKrw
+\faKeybase
+\faKeyboard
+\faKeyboard[regular]
+\faKeycdn
+\faKhanda
+\faKickstarter
+\faKickstarterK
+\faKiss
+\faKissBeam
+\faKissBeam[regular]
+\faKiss[regular]
+\faKissWinkHeart
+\faKissWinkHeart[regular]
+\faKiwiBird
+\faKorvue
+\faLandmark
 \faLanguage
 \faLaptop
+\faLaptopCode
+\faLaptopHouse
+\faLaptopMedical
+\faLaravel
 \faLastfm
 \faLastfmSquare
+\faLaugh
+\faLaughBeam
+\faLaughBeam[regular]
+\faLaugh[regular]
+\faLaughSquint
+\faLaughSquint[regular]
+\faLaughWink
+\faLaughWink[regular]
+\faLayerGroup
 \faLeaf
 \faLeanpub
-\faLegal
-\faLemonO
-\faLevelDown
-\faLevelUp
-\faLifeBouy
+\faLemon
+\faLemon[regular]
+\faLess
+\faLessThan
+\faLessThanEqual
+\faLevelDown*
+\faLevelUp*
 \faLifeRing
-\faLifeSaver
-\faLightbulbO
-\faLineChart
+\faLifeRing[regular]
+\faLightbulb
+\faLightbulb[regular]
+\faLine
 \faLink
 \faLinkedin
-\faLinkedinSquare
+\faLinkedinIn
+\faLinode
 \faLinux
+\faLiraSign
 \faList
-\faListAlt
+\faList*
 \faListOl
+\faList*[regular]
 \faListUl
 \fallingdotseq
-\FallingEdge
 \faLocationArrow
 \faLock
-\faLongArrowDown
-\faLongArrowLeft
-\faLongArrowRight
-\faLongArrowUp
+\faLockOpen
+\faLongArrowAltDown
+\faLongArrowAltLeft
+\faLongArrowAltRight
+\faLongArrowAltUp
+\faLowVision
+\False
+\faLuggageCart
+\faLungs
+\faLungsVirus
+\faLyft
+\faMagento
 \faMagic
 \faMagnet
-\faMailForward
-\faMailReply
-\faMailReplyAll
+\faMailBulk
+\faMailchimp
 \faMale
+\faMandalorian
 \faMap
+\faMapMarked
+\faMapMarked*
 \faMapMarker
-\faMapO
+\faMapMarker*
 \faMapPin
+\faMap[regular]
 \faMapSigns
+\faMarkdown
+\faMarker
 \faMars
 \faMarsDouble
 \faMarsStroke
 \faMarsStrokeH
 \faMarsStrokeV
+\faMask
+\faMastodon
 \faMaxcdn
-\faMeanpath
+\faMdb
+\faMedal
+\faMedapps
 \faMedium
+\faMediumM
 \faMedkit
-\faMehO
+\faMedrt
+\faMeetup
+\faMegaport
+\faMeh
+\faMehBlank
+\faMehBlank[regular]
+\faMeh[regular]
+\faMehRollingEyes
+\faMemory
+\faMendeley
+\faMenorah
 \faMercury
+\faMeteor
+\faMicroblog
+\faMicrochip
 \faMicrophone
+\faMicrophone*
+\faMicrophoneAltSlash
 \faMicrophoneSlash
+\faMicroscope
+\faMicrosoft
 \faMinus
 \faMinusCircle
 \faMinusSquare
-\faMinusSquareO
+\faMinusSquare[regular]
+\faMitten
+\faMix
+\faMixcloud
+\faMixer
+\faMizuni
 \faMobile
-\faMobilePhone
-\faMoney
-\faMoonO
-\faMortarBoard
+\faMobile*
+\faModx
+\faMonero
+\faMoneyBill
+\faMoneyBill*
+\faMoneyBill*[regular]
+\faMoneyBillWave
+\faMoneyBillWave*
+\faMoneyCheck
+\faMoneyCheck*
+\faMonument
+\faMoon
+\faMoon[regular]
+\faMortarPestle
+\faMosque
 \faMotorcycle
+\faMountain
+\faMouse
 \faMousePointer
+\faMugHot
 \faMusic
-\faNavicon
+\faNapster
 \Fancontent
+\faNeos
+\faNetworkWired
 \faNeuter
-\faNewspaperO
+\faNewspaper
+\faNewspaper[regular]
+\faNimblr
 \Fanncontent
 \Fannquant
 \Fannquantn
 \Fannquantnn
-\Fanoven
+\faNode
+\faNodeJs
+\faNotEqual
+\faNotesMedical
+\faNpm
 \Fanquant
 \Fanquantn
 \Fanquantnn
+\faNs8
+\faNutritionix
 \faObjectGroup
+\faObjectGroup[regular]
 \faObjectUngroup
+\faObjectUngroup[regular]
+\faOctopusDeploy
 \faOdnoklassniki
 \faOdnoklassnikiSquare
+\faOilCan
+\faOldRepublic
+\faOm
 \faOpencart
 \faOpenid
 \faOpera
 \faOptinMonster
+\faOrcid
+\faOsi
+\faOtter
 \faOutdent
+\faPage4
 \faPagelines
+\faPager
 \faPaintBrush
+\faPaintRoller
+\faPalette
+\faPalfed
+\faPallet
 \faPaperclip
 \faPaperPlane
-\faPaperPlaneO
+\faPaperPlane[regular]
+\faParachuteBox
 \faParagraph
+\faParking
+\faPassport
+\faPastafarianism
 \faPaste
+\faPatreon
 \faPause
+\faPauseCircle
+\faPauseCircle[regular]
 \faPaw
 \faPaypal
-\faPencil
-\faPencilSquare
-\faPencilSquareO
+\faPeace
+\faPen
+\faPen*
+\faPencil*
+\faPencilRuler
+\faPenFancy
+\faPenNib
+\faPennyArcade
+\faPenSquare
+\faPeopleArrows
+\faPeopleCarry
+\faPepperHot
+\faPerbyte
+\faPercent
+\faPercentage
+\faPeriscope
+\faPersonBooth
+\faPhabricator
+\faPhoenixFramework
+\faPhoenixSquadron
 \faPhone
+\faPhone*
+\faPhoneSlash
 \faPhoneSquare
-\faPhoto
-\faPictureO
-\faPieChart
+\faPhoneSquare*
+\faPhoneVolume
+\faPhotoVideo
+\faPhp
 \faPiedPiper
-\faPiedPiperAlt
+\faPiedPiper*
+\faPiedPiperHat
+\faPiedPiperPp
+\faPiedPiperSquare
+\faPiggyBank
+\faPills
 \faPinterest
 \faPinterestP
 \faPinterestSquare
+\faPizzaSlice
+\faPlaceOfWorship
 \faPlane
+\faPlaneArrival
+\faPlaneDeparture
+\faPlaneSlash
 \faPlay
 \faPlayCircle
-\faPlayCircleO
+\faPlayCircle[regular]
+\faPlaystation
 \faPlug
 \faPlus
 \faPlusCircle
 \faPlusSquare
-\faPlusSquareO
+\faPlusSquare[regular]
+\faPodcast
+\faPoll
+\faPollH
+\faPoo
+\faPoop
+\faPooStorm
+\faPortrait
+\faPoundSign
 \faPowerOff
+\faPray
+\faPrayingHands
+\faPrescription
+\faPrescriptionBottle
+\faPrescriptionBottle*
 \faPrint
+\faProcedures
+\faProductHunt
+\faProjectDiagram
+\faPumpMedical
+\faPumpSoap
+\faPushed
 \faPuzzlePiece
+\faPython
 \faQq
 \faQrcode
 \Faquant
@@ -2881,227 +3702,958 @@
 \Faquantnn
 \faQuestion
 \faQuestionCircle
+\faQuidditch
+\faQuinscape
+\faQuora
 \faQuoteLeft
 \faQuoteRight
-\faRa
+\faQuran
+\faRadiation
+\faRadiation*
+\faRainbow
 \faRandom
+\faRaspberryPi
+\faRavelry
+\faReact
+\faReacteurope
+\faReadme
 \faRebel
+\faReceipt
+\faRecordVinyl
 \faRecycle
 \faReddit
+\faRedditAlien
 \faRedditSquare
-\faRefresh
+\faRedhat
+\faRedo
+\faRedo*
+\faRedRiver
 \faRegistered
-\faRemove
+\faRegistered[regular]
+\faRemoveFormat
 \faRenren
-\faReorder
-\faRepeat
 \faReply
 \faReplyAll
+\faReplyd
+\faRepublican
+\faResearchgate
+\faResolving
+\faRestroom
 \faRetweet
-\faRmb
+\faRev
+\faRibbon
+\faRing
 \faRoad
+\faRobot
 \faRocket
-\faRotateLeft
-\faRotateRight
-\faRouble
+\faRocketchat
+\faRockrms
+\faRoute
+\faRProject
 \faRss
 \faRssSquare
-\faRub
-\faRuble
-\faRupee
+\faRubleSign
+\faRuler
+\faRulerCombined
+\faRulerHorizontal
+\faRulerVertical
+\faRunning
+\faRupeeSign
+\faRust
+\faSadCry
+\faSadCry[regular]
+\faSadTear
+\faSadTear[regular]
 \faSafari
+\faSalesforce
+\faSass
+\faSatellite
+\faSatelliteDish
 \faSave
-\faScissors
+\faSave[regular]
+\faSchlix
+\faSchool
+\faScrewdriver
+\faScribd
+\faScroll
+\faSdCard
 \faSearch
+\faSearchDollar
+\faSearchengin
+\faSearchLocation
 \faSearchMinus
 \faSearchPlus
+\faSeedling
+\faSellcast
 \faSellsy
-\faSend
-\faSendO
 \faServer
+\faServicestack
+\faShapes
 \faShare
-\faShareAlt
+\faShare*
 \faShareAltSquare
 \faShareSquare
-\faShareSquareO
-\faShekel
-\faSheqel
-\faShield
+\faShareSquare[regular]
+\faShekelSign
+\faShield*
+\faShieldVirus
 \faShip
+\faShippingFast
 \faShirtsinbulk
+\faShoePrints
+\faShopify
+\faShoppingBag
+\faShoppingBasket
 \faShoppingCart
+\faShopware
+\faShower
+\faShuttleVan
+\faSign
 \faSignal
-\faSignIn
-\faSignOut
+\faSignature
+\faSignIn*
+\faSignLanguage
+\faSignOut*
+\faSimCard
 \faSimplybuilt
+\faSink
+\faSistrix
 \faSitemap
+\faSith
+\faSkating
+\faSketch
+\faSkiing
+\faSkiingNordic
+\faSkull
+\faSkullCrossbones
 \faSkyatlas
 \faSkype
 \faSlack
-\faSliders
+\faSlackHash
+\faSlash
+\faSleigh
+\faSlidersH
 \faSlideshare
-\faSmileO
-\faSoccerBallO
+\faSmile
+\faSmileBeam
+\faSmileBeam[regular]
+\faSmile[regular]
+\faSmileWink
+\faSmileWink[regular]
+\faSmog
+\faSmoking
+\faSmokingBan
+\faSms
+\faSnapchat
+\faSnapchatGhost
+\faSnapchatSquare
+\faSnowboarding
+\faSnowflake
+\faSnowflake[regular]
+\faSnowman
+\faSnowplow
+\faSoap
+\faSocks
+\faSolarPanel
 \faSort
-\faSortAlphaAsc
-\faSortAlphaDesc
-\faSortAmountAsc
-\faSortAmountDesc
-\faSortAsc
-\faSortDesc
+\faSortAlphaDown
+\faSortAlphaDown*
+\faSortAlphaUp
+\faSortAlphaUp*
+\faSortAmountDown
+\faSortAmountDown*
+\faSortAmountUp
+\faSortAmountUp*
 \faSortDown
-\faSortNumericAsc
-\faSortNumericDesc
+\faSortNumericDown
+\faSortNumericDown*
+\faSortNumericUp
+\faSortNumericUp*
 \faSortUp
 \faSoundcloud
+\faSourcetree
+\faSpa
 \faSpaceShuttle
+\faSpeakap
+\faSpeakerDeck
+\faSpellCheck
+\faSpider
 \faSpinner
-\faSpoon
+\faSplotch
 \faSpotify
+\faSprayCan
 \faSquare
-\faSquareO
+\faSquareFull
+\faSquare[regular]
+\faSquareRoot*
+\faSquarespace
 \faStackExchange
 \faStackOverflow
+\faStackpath
+\faStamp
 \faStar
+\faStarAndCrescent
 \faStarHalf
-\faStarHalfEmpty
-\faStarHalfFull
-\faStarHalfO
-\faStarO
+\faStarHalf*
+\faStarHalf[regular]
+\faStarOfDavid
+\faStarOfLife
+\faStar[regular]
+\faStaylinked
+{fast down button}
 \faSteam
 \faSteamSquare
+\faSteamSymbol
 \faStepBackward
 \faStepForward
 \faStethoscope
+\faStickerMule
 \faStickyNote
-\faStickyNoteO
+\faStickyNote[regular]
 \faStop
+\faStopCircle
+\faStopCircle[regular]
+\faStore
+\faStore*
+\faStoreAltSlash
+\faStoreSlash
+\faStrava
+\faStream
 \faStreetView
+{fast reverse button}
 \faStrikethrough
+\faStripe
+\faStripeS
+\faStroopwafel
+\faStudiovinari
 \faStumbleupon
 \faStumbleuponCircle
 \faSubscript
 \faSubway
 \faSuitcase
-\faSunO
+\faSuitcaseRolling
+\faSun
+\faSun[regular]
+\faSuperpowers
 \faSuperscript
-\faSupport
+\faSupple
+\faSurprise
+\faSurprise[regular]
+\faSuse
+\faSwatchbook
+\faSwift
+\faSwimmer
+\faSwimmingPool
+\faSymfony
+\faSynagogue
+\faSync
+\faSync*
+\faSyringe
 \faTable
 \faTablet
-\faTachometer
+\faTablet*
+\faTableTennis
+\faTablets
+\faTachometer*
 \faTag
 \faTags
+\faTape
 \faTasks
 \faTaxi
 \fatbslash
-\faTelevision
+\faTeamspeak
+\faTeeth
+\faTeethOpen
+\faTelegram
+\faTelegramPlane
+\faTemperatureHigh
+\faTemperatureLow
 \faTencentWeibo
+\faTenge
 \faTerminal
 \faTextHeight
 \faTextWidth
 \faTh
+\faTheaterMasks
+\faThemeco
+\faThemeisle
+\faTheRedYeti
+\faThermometer
+\faThermometerEmpty
+\faThermometerFull
+\faThermometerHalf
+\faThermometerQuarter
+\faThinkPeaks
 \faThLarge
 \faThList
 \faThumbsDown
-\faThumbsODown
-\faThumbsOUp
+\faThumbsDown[regular]
 \faThumbsUp
-\faThumbTack
-\faTicket
+\faThumbsUp[regular]
+\faThumbtack
+\faTicket*
+\faTiktok
 \faTimes
 \faTimesCircle
-\faTimesCircleO
+\faTimesCircle[regular]
 \faTint
-\faToggleDown
-\faToggleLeft
+\faTintSlash
+\faTired
+\faTired[regular]
 \faToggleOff
 \faToggleOn
-\faToggleRight
-\faToggleUp
+\faToilet
+\faToiletPaper
+\faToiletPaperSlash
+\faToolbox
+\faTools
+\faTooth
+\faTorah
+\faToriiGate
+\faTractor
+\faTradeFederation
 \faTrademark
+\faTrafficLight
+\faTrailer
 \faTrain
+\faTram
 \faTransgender
-\faTransgenderAlt
+\faTransgender*
 \faTrash
-\faTrashO
+\faTrash*
+\faTrash*[regular]
+\faTrashRestore
+\faTrashRestore*
 \faTree
 \faTrello
-\faTripadvisor
 \faTrophy
 \faTruck
-\faTry
+\faTruckLoading
+\faTruckMonster
+\faTruckMoving
+\faTruckPickup
 \fatsemi
+\faTshirt
 \fatslash
 \faTty
 \faTumblr
 \faTumblrSquare
-\faTurkishLira
 \faTv
 \faTwitch
 \faTwitter
 \faTwitterSquare
+\faTypo3
+\faUber
+\faUbuntu
+\faUikit
+\faUmbraco
 \faUmbrella
+\faUmbrellaBeach
+\faUncharted
 \faUnderline
 \faUndo
+\faUndo*
+\faUniregistry
+\faUnity
+\faUniversalAccess
 \faUniversity
 \faUnlink
 \faUnlock
-\faUnlockAlt
-\faUnsorted
+\faUnlock*
+\faUnsplash
+\faUntappd
 \faUpload
-\faUsd
+\faUps
+\faUsb
 \faUser
+\faUser*
+\faUserAltSlash
+\faUserAstronaut
+\faUserCheck
+\faUserCircle
+\faUserCircle[regular]
+\faUserClock
+\faUserCog
+\faUserEdit
+\faUserFriends
+\faUserGraduate
+\faUserInjured
+\faUserLock
 \faUserMd
+\faUserMinus
+\faUserNinja
+\faUserNurse
 \faUserPlus
+\faUser[regular]
 \faUsers
+\faUsersCog
 \faUserSecret
+\faUserShield
+\faUserSlash
+\faUsersSlash
+\faUserTag
+\faUserTie
 \faUserTimes
+\faUsps
+\faUssunnah
+\faUtensils
+\faUtensilSpoon
+\faVaadin
+\faVectorSquare
 \faVenus
 \faVenusDouble
 \faVenusMars
+\faVest
+\faVestPatches
 \faViacoin
-\faVideoCamera
+\faViadeo
+\faViadeoSquare
+\faVial
+\faVials
+\faViber
+\faVideo
+\faVideoSlash
+\faVihara
 \faVimeo
 \faVimeoSquare
+\faVimeoV
 \faVine
+\faVirus
+\faViruses
+\faVirusSlash
 \faVk
+\faVnv
+\faVoicemail
+\faVolleyballBall
 \faVolumeDown
+\faVolumeMute
 \faVolumeOff
 \faVolumeUp
-\faWarning
-\faWechat
+\faVoteYea
+\faVrCardboard
+\faVuejs
+\faWalking
+\faWallet
+\faWarehouse
+\faWatchmanMonitoring
+\faWater
+\faWaveSquare
+\faWaze
+\faWeebly
 \faWeibo
+\faWeight
+\faWeightHanging
 \faWeixin
 \faWhatsapp
+\faWhatsappSquare
 \faWheelchair
-\faWifi
+\faWhmcs
 \faWikipediaW
+\faWind
+\faWindowClose
+\faWindowClose[regular]
+\faWindowMaximize
+\faWindowMinimize
+\faWindowRestore
+\faWindowRestore[regular]
 \faWindows
-\faWon
+\faWineBottle
+\faWineGlass
+\faWineGlass*
+\faWix
+\faWizardsOfTheCoast
+\faWodu
+\faWolfPackBattalion
+\faWonSign
 \faWordpress
+\faWordpressSimple
+\faWpbeginner
+\faWpexplorer
+\faWpforms
+\faWpressr
 \faWrench
 \fax
 \FAX
+\faXbox
 \faXing
 \faXingSquare
 \Faxmachine
+\faXRay
 \faYahoo
-\faYc
+\faYammer
+\faYandex
+\faYandexInternational
+\faYarn
 \faYCombinator
-\faYCombinatorSquare
-\faYcSquare
 \faYelp
-\faYen
+\faYenSign
+\faYinYang
+\faYoast
 \faYoutube
-\faYoutubePlay
 \faYoutubeSquare
+\faZhihu
 \fbowtie
+\fcAbajourA
+\fcAbajourB
+\fcAbajourC
+\fcAbajourD
+\fcAlarmClockA
+\fcAlarmClockB
+\fcAlligator
+\fcAlligatorA
+\fcAngel
+\fcAnt
+\fcAntA
+\fcAntelope
+\fcApple
+\fcAppleTree
+\fcArmadillo
+\fcBabe
+\fcBall
+\fcBallA
+\fcBallB
+\fcBallC
+\fcBalloon
+\fcBaloonsA
+\fcBaloonsB
+\fcBarbecue
+\fcBarquet
+\fcBaseballBat
+\fcBat
+\fcBear
+\fcBearA
+\fcBearB
+\fcBearC
+\fcBearD
+\fcBears
+\fcBed
+\fcBee
+\fcBeeA
+\fcBellA
+\fcBike
+\fcBinoculars
+\fcBird
+\fcBirdA
+\fcBirdB
+\fcBirdC
+\fcBirdD
+\fcBirdE
+\fcBoat
+\fcBonnet
+\fcBookA
+\fcBookB
+\fcBread
+\fcBroom
+\fcBrownie
+\fcBud
+\fcBull
+\fcBullet
+\fcBunnyA
+\fcBunnyB
+\fcBunnyC
+\fcBunnyD
+\fcBunnyE
+\fcBurrito
+\fcBus
+\fcButterfly
+\fcButterflyA
+\fcButterflyB
+\fcButterflyC
+\fcCabbage
+\fcCactoopuntia
+\fcCactusA
+\fcCactusB
+\fcCalf
+\fcCandle
+\fcCar
+\fcCarA
+\fcCarrot
+\fcCarrotA
+\fcCart
+\fcCartA
+\fcCashier
+\fcCat
+\fcCaterpillar
+\fcCatfish
+\fcCellPhone
+\fcCentipede
+\fcChairA
+\fcChairB
+\fcChairC
+\fcChairD
+\fcCheese
+\fcCherry
+\fcChick
+\fcChicken
+\fcChickenThigh
+\fcChicks
+\fcChristmasTree
+\fcChrysanthemum
+\fcCloud
+\fcCloudA
+\fcCloudB
+\fcCloudC
+\fcCoach
+\fcCobrabebe
+\fcComb
+\fcComputer
+\fcCow
+\fcCrabA
+\fcCrabB
+\fcCrane
+\fcCrownA
+\fcCucumber
+\fcCupcake
+\fcCupcakeA
+\fcCupcakeB
+\fcCushion
+\fcCuttingBoard
+\fcDaisy
+\fcDarts
+\fcData
 \fcdice
+\fcDinosaurA
+\fcDinosaurB
+\fcDinosaurC
+\fcDinosaurD
+\fcDinosaurE
+\fcDinosaurF
+\fcDinosaurG
+\fcDinosaurH
+\fcDinosaurI
+\fcDinosaurJ
+\fcDog
+\fcDolphin
+\fcDolphinA
+\fcDragonFly
+\fcDressingTable
+\fcDryer
+\fcDuck
+\fcDuckA
+\fcDuckB
+\fcDuckC
+\fcEar
+\fcEgg
+\fcEggA
+\fcEggB
+\fcEggplant
+\fcElephant
+\fcElephantA
+\fcElephantB
+\fcET
+\fcExcavator
+\fcEyebrows
+\fcEyes
+\fcFaceTowel
+\fcFan
+\fcFanA
+\fcFishA
+\fcFishB
+\fcFishC
+\fcFishD
+\fcFishE
+\fcFishF
+\fcFishG
+\fcFishH
+\fcFishI
+\fcFishK
+\fcFishL
+\fcFishM
+\fcFlamingo
+\fcFlamingoA
+\fcFlashlight
+\fcFlower
+\fcFlowerA
+\fcFlowerB
+\fcFlowerC
+\fcFlowerD
+\fcFlowerE
+\fcFlowerF
+\fcFlowerG
+\fcFlowerH
+\fcFlowerP
+\fcFlyingSaucer
+\fcFrenchFries
+\fcFridge
+\fcFrog
+\fcGhost
+\fcGiraffe
+\fcGiraffeA
+\fcGiraffeB
+\fcGiraffes
+\fcGlass
+\fcGloves
+\fcGnat
+\fcGoose
+\fchamburger
+\fcHand
+f_change}
+F_change}
+\fcHat
+\fcHatA
+\fcHelicopter
+\fcHerring
+\fcHippo
+\fcHorse
+\fcHorseA
+\fcHouse
+\fcHouseA
+\fcHouseB
+\fcHummingbird
+\fcIceCreamA
+\fcIceCreamB
+\fcIceCreamC
+\fcIceCreamD
+\fcIceCreamE
+\fcIceCreamF
+\fcIceCreamG
+\fcIceCreamH
+\fcJuicy
+\fcKetchup
+\fcKettle
+\fcKey
+\fcKite
+\fcKiteA
+\fcKittenA
+\fcKittenB
+\fcKittensA
+\fcKittensB
+\fcKnees
+\fcKnife
+\fcLadybirdA
+\fcLadybirdB
+\fcLadyBug
+\fcLamb
+\fcLamp
+\fcLanguage
+\fcLetterK
+\fcLetterL
+\fcLetterM
+\fcLetterN
+\fcLetterO
+\fcLetterP
+\fcLetterQ
+\fcLetterR
+\fcLetterS
+\fcLetterT
+\fcLetterU
+\fcLetterV
+\fcLetterW
+\fcLetterX
+\fcLetterY
+\fcLetterZ
+\fcLightBulb
+\fcLightning
+\fcLion
+\fcLionA
+\fcLittleBirds
+\fcLittleMouse
+\fcLocust
+\fcLouvadeus
+\fcLoveLetter
+\fcMacaw
+\fcMailbox
+\fcMailBoxA
+\fcMat
+\fcMeton
+\fcMill
+\fcMirror
+\fcMonkey
+\fcMonkeyA
+\fcMonster
+\fcMoonA
+\fcMoonB
+\fcMoonfish
+\fcMoose
+\fcMotorcycle
+\fcMotorcycleA
+\fcMouse
+\fcMouseA
+\fcMouseB
 \fcmp
+\fcMug
+\fcMushroom
+\fcMushroomA
+\fcMushroomB
+\fcNose
+\fcNuggets
+\fcNumberEight
+\fcNumberFive
+\fcNumberFour
+\fcNumberNine
+\fcNumberOne
+\fcNumberSeven
+\fcNumberSix
+\fcNumberTen
+\fcNumberThree
+\fcNumberTwo
+\fcOctopus
+\fcOctopusA
+\fcOnion
 \Fcontent
+\fcOrca
+\fcOstrich
+\fcOwl
+\fcOwlA
+\fcOwlB
+\fcOx
+\fcPalmTree
+\fcPanA
+\fcPanB
+\fcPandaBear
+\fcParrot
+\fcPassA
+\fcPassB
+\fcPeacock
+\fcPencil
+\fcPencilA
+\fcPenguin
+\fcPerch
+\fcPeruA
+\fcPeruB
+\fcPhone
+\fcPig
+\fcPigA
+\fcPigB
+\fcPigC
+\fcPigD
+\fcPigE
+\fcPimento
+\fcPineapple
+\fcpink
+\fcPlane
+\fcPlaneA
+\fcPlanetA
+\fcPlanetB
+\fcPlanetC
+\fcPlanetD
+\fcPlanetE
+\fcPlanetF
+\fcPlanetG
+\fcPlanets
+\fcPopsicle
+\fcPotato
+\fcPulse
+\fcPumpkinA
+\fcPuppy
+\fcPyramid
+\fcRabbit
+\fcRabbitA
+\fcRabbits
+\fcRaccoon
+\fcRake
+\fcRazor
+\fcRoastChicken
+\fcRobe
+\fcRocket
+\fcRocketA
+\fcRocketB
+\fcRocketC
+\fcRoller
+\fcSandal
+\fcSaturnA
+\fcSaturnB
+\fcScallion
+\fcScaredEgg
+\fcSchoolbag
+\fcScissors
+\fcScooter
 \fcscore
+\fcScorpion
+\fcSeahorse
+\fcSeeds
+\fcShark
+\fcSharpKnife
+\fcSheep
+\fcSheepA
+\fcSheepB
+\fcSheepC
+\fcSheet
+\fcsheetA
+\fcsheetB
+\fcShell
+\fcShip
+\fcShootingStar
+\fcShower
+\fcShrimp
+\fcSleepingBag
+\fcSnailA
+\fcSnailB
+\fcSnailC
+\fcSnowflake
+\fcSock
+\fcSofaA
+\fcSofaB
+\fcSpacecraftA
+\fcSpacecraftB
+\fcSpatulas
+\fcSpider
+\fcSpiderA
+\fcSpiderB
+\fcSpray
+\fcSquirrel
+\fcSquirrelA
+\fcStar
+\fcStarA
+\fcStarB
+\fcStars
+\fcSteak
+\fcSteamroller
+\fcStoolA
+\fcStoolB
+\fcStoolC
+\fcStrawberry
+\fcStrawberryA
+\fcSturgeon
+\fcSubmarineA
+\fcSugar
+\fcSun
+\fcSunA
+\fcSunB
+\fcTableLight
+\fcTelevision
+\fcTent
+\fcThermometerA
+\fcThermometerB
+\fcThroat
+\fcToiletPaper
+\fcTomato
+\fcTony
+\fcTornado
+\fcToucan
+\fcTractorA
+\fcTractorB
+\fcTrain
+\fcTree
+\fcTricycle
+\fcTruck
+\fcTruckA
+\fcTruckB
+\fcTruckC
+\fcTruckD
+\fcTruckE
+\fcTruckF
+\fcTruckG
+\fcTruckH
+\fcTrunk
+\fcTulip
+\fcTurtle
+\fcTurtleA
+\fcTurtleB
+\fcUmbrella
+\fcUrchin
+\fcVan
+\fcVase
+\fcWagon
+\fcWardrobe
+\fcWateringCan
+\fcWatermelon
+\fcWitchHat
+\fcYoyo
+\fcZebra
 \fdiagovnearrow
 \fdiagovrdiag
+fe0f}
 \female
 \Female
 \FEMALE
@@ -3164,10 +4716,14 @@
 \fgelb
 \fgeleftB
 \fgeleftC
+\fgeleftthree
+\fgelefttwo
+\fgemark
 \fgeN
 \fgeoverU
 \fgerightarrow
 \fgerightB
+\fgerighttwo
 \fges
 \fgestruckone
 \fgestruckzero
@@ -3174,7 +4730,6 @@
 \fgeU
 \fgeuparrow
 \fgeupbracket
-\file
 \FilledBigCircle
 \FilledBigDiamondshape
 \FilledBigSquare
@@ -3231,6 +4786,12 @@
 \fintup
 \Finv
 \Fire
+{fire extinguisher}
+{first quarter moon}
+{first quarter moon face}
+\FishArrowLeft
+\FishArrowRight
+{fish cake with swirl}
 \fisheye
 \fivedots
 \FiveFlowerOpen
@@ -3250,20 +4811,110 @@
 \fixedvdots
 \fj
 \fl
-\FL
 \Flag
+{flag: Afghanistan}
+{flag: American Samoa}
+{flag: Antarctica}
+{flag: Antigua \& Barbuda}
+{flag: Ascension Island}
+{flag: Azerbaijan}
+{flag: Bangladesh}
+{flag: Bosnia \& Herzegovina}
+{flag: Bouvet Island}
+{flag: British Indian Ocean Territory}
+{flag: British Virgin Islands}
+{flag: Burkina Faso}
+{flag: Canary Islands}
+{flag: Cape Verde}
+{flag: Caribbean Netherlands}
+{flag: Cayman Islands}
+{flag: Central African Republic}
+{flag: Ceuta \& Melilla}
+{flag: Christmas Island}
+{flag: Clipperton Island}
+{flag: Cook Islands}
+{flag: Costa Rica}
+{flag: Côte d'Ivoire}
+{flag: Diego Garcia}
+{flag: Dominican Republic}
+{flag: El Salvador}
+flageolet}
 \flageolett
+{flag: Equatorial Guinea}
+{flag: European Union}
+{flag: Falkland Islands}
+{flag: Faroe Islands}
+{flag: French Guiana}
+{flag: French Polynesia}
+{flag: French Southern Territories}
+{flag: Guadeloupe}
+{flag: Hong Kong SAR China}
+{flag: Isle of Man}
+{flag: Kazakhstan}
+{flag: Kyrgyzstan}
+{flag: Liechtenstein}
+{flag: Luxembourg}
+{flag: Macao SAR China}
+{flag: Madagascar}
+{flag: Marshall Islands}
+{flag: Martinique}
+{flag: Mauritania}
+{flag: Micronesia}
+{flag: Montenegro}
+{flag: Montserrat}
+{flag: Mozambique}
+{flag: Netherlands}
+{flag: New Caledonia}
+{flag: New Zealand}
+{flag: Norfolk Island}
+{flag: Northern Mariana Islands}
+{flag: North Korea}
+{flag: North Macedonia}
+{flag: Palestinian Territories}
+{flag: Papua New Guinea}
+{flag: Philippines}
+{flag: Pitcairn Islands}
+{flag: Puerto Rico}
+{flag: San Marino}
+{flag: São Tomé \& Príncipe}
+{flag: Saudi Arabia}
+{flag: Seychelles}
+{flag: Sierra Leone}
+{flag: Sint Maarten}
+{flag: Solomon Islands}
+{flag: South Africa}
+{flag: South Georgia \& South Sandwich Islands}
+{flag: South Korea}
+{flag: South Sudan}
+{flag: Svalbard \& Jan Mayen}
+{flag: Switzerland}
+{flag: Tajikistan}
+{flag: Trinidad \& Tobago}
+{flag: Tristan da Cunha}
+{flag: Turkmenistan}
+{flag: Turks \& Caicos Islands}
+{flag: United Arab Emirates}
+{flag: United Kingdom}
+{flag: United Nations}
+{flag: United States}
+{flag: Uzbekistan}
+{flag: Vatican City}
+{flag: Wallis \& Futuna}
+{flag: Western Sahara}
 \flap
 \flapr
-\Flasche
 \flat
+flat}
+\FlatArrowLeft
+\FlatArrowRight
 \flatflat
+flatflat}
 \Flatsteel
 \Florin
-\floweroneleft
-\floweroneright
+{flower playing cards}
 \fltns
-\FM
+\FncCnvrs
+\FncComp
 \Fncontent
 \Fnncontent
 \Fnnquant
@@ -3273,6 +4924,7 @@
 \Fnquantn
 \Fnquantnn
 \fnsymbol
+\FntSbset
 \Fog
 \font
 \fontencoding
@@ -3279,20 +4931,27 @@
 \fontsize
 \Football
 \forall
+\ForAll
 \Force
-\Fork
+\ForComp
+{fork and knife with plate}
+\ForkArrowLeft
+\ForkArrowRight
 \forks
 \forksnot
 \forkv
 \Fortune
 \Forward
+forward button}
 \ForwardToEnd
 \ForwardToIndex
+Fountain
 \FourAsterisk
 \FourClowerOpen
 \FourClowerSolid
 \fourier
 \Fourier
+{four leaf clover}
 \FourStar
 \FourStarOpen
 \fourth
@@ -3301,32 +4960,56 @@
 \Fquantnn
 \fracslash
 \France
+freebass}
 \frown
 \frowneq
 \frowneqsmile
 \frownie
+{frowning face with open mouth}
 \frownsmile
 \frownsmileeq
 \Frowny
-\fryingpan
+\FrstOrd
 \FS
 \fullmoon
 \fullnote
 \fullouterjoin
-g
+\Func
+Funk}
+\FunParInGndMul
+\FunParInGndOne
+\FunParInGndSng
+\FunParInMul
+\FunParInOne
+\FunParInSng
+\FunParOnGndMul
+\FunParOnGndOne
+\FunParOnGndSng
+\FunParOnMul
+\FunParOnOne
+\FunParOnSng
+\FunTotInGndMul
+\FunTotInGndOne
+\FunTotInGndSng
+\FunTotInMul
+\FunTotInOne
+\FunTotInSng
+\FunTotOnGndMul
+\FunTotOnGndOne
+\FunTotOnGndSng
+\FunTotOnMul
+\FunTotOnOne
+\FunTotOnSng
+\Futr
+g}
 \G
 \Game
 \gamma
 \Gamma
 \gammaup
-\Ganz
-\GaPa
-\garlicpress
-\Gasstove
-\gcd
-\GD
+g_change}
+G_change}
 \ge
-\GE
 \gemini
 \Gemini
 \geneuro
@@ -3360,9 +5043,10 @@
 \glE
 \gleichstark
 \glj
+{globe showing Americas}
+{globe with meridians}
 \glotstop
 \glottal
-\Gloves
 \gluon
 \Gluon
 \gnapprox
@@ -3369,14 +5053,13 @@
 \gneq
 \gneqq
 \gnsim
-\GO
 \Goofy
-\grad
+\Gr
 \graphene
-\grater
 \grave
 \gravis
 \graviton
+\Gre
 \GreatBritain
 \greatpumpkin
 \Greece
@@ -3384,6 +5067,12 @@
 \gregorianCclef
 \gregorianFclef
 \grimace
+{grinning cat with smiling eyes}
+{grinning face with big eyes}
+{grinning face with smiling eyes}
+{grinning face with sweat}
+{grinning squinting face}
+\GrtFix
 \GS
 \gsime
 \gsiml
@@ -3406,7 +5095,6 @@
 \gtrneqqless
 \gtrsim
 \gtrsimslant
-\GU
 \guillemetleft
 \guillemetright
 \guilsinglleft
@@ -3414,14 +5102,9 @@
 \gvcropped
 \gvertneqq
 \h
-h
 \H
-H
-\Ha
-\HA
 \Hades
 \Hail
-\Halb
 \HalfCircleLeft
 \HalfCircleRight
 \HalfFilledHut
@@ -3435,7 +5118,210 @@
 \halfNoteDown
 \halfNoteRest
 \halfNoteRestDotted
+halfopen}
+halfopenvertical}
 \HalfSun
+\hamalternatingmotion
+\hamarcd
+\hamarcl
+\hamarcr
+\hamarcu
+\hamarmextended
+\hambehind
+\hambelowstomach
+\hambetween
+\hambrushing
+\hamceeall
+\hamceeonetwo
+\hamceeopen
+\hamcheek
+\hamchest
+\hamchin
+\hamcircled
+\hamcircledi
+\hamcircledl
+\hamcircledo
+\hamcircledr
+\hamcirclei
+\hamcircleil
+\hamcircleir
+\hamcirclel
+\hamcircleo
+\hamcircleol
+\hamcircleor
+\hamcircler
+\hamcircleu
+\hamcircleui
+\hamcircleul
+\hamcircleuo
+\hamcircleur
+\hamclockd
+\hamclockdl
+\hamclockdr
+\hamclockfull
+\hamclockl
+\hamclockr
+\hamclocku
+\hamclockul
+\hamclockur
+\hamclose
+\hamcorefref
+\hamcoreftag
+\hamcross
+\hamdecreasing
+\hamdoublebent
+\hamdoublehooked
+\hamear
+\hamearlobe
+\hamelbow
+\hamelbowinside
+\hamellipseh
+\hamellipseul
+\hamellipseur
+\hamellipsev
+\hametc
+\hamextfingerd
+\hamextfingerdi
+\hamextfingerdl
+\hamextfingerdo
+\hamextfingerdr
+\hamextfingeri
+\hamextfingeril
+\hamextfingerir
+\hamextfingerl
+\hamextfingero
+\hamextfingerol
+\hamextfingeror
+\hamextfingerr
+\hamextfingeru
+\hamextfingerui
+\hamextfingerul
+\hamextfingeruo
+\hamextfingerur
+\hameyebrows
+\hameyes
+\hamfast
+\hamfingerbase
+\hamfingerbendmod
+\hamfingerhookmod
+\hamfingermidjoint
+\hamfingernail
+\hamfingerpad
+\hamfingerplay
+\hamfingerside
+\hamfingerstraightmod
+\hamfingertip
+\hamfingertwo
+\hamfingertwothree
+\hamfingertwothreefourfive
+\hamfingertwothreespread
+\hamfist
+\hamflathand
+\hamforehead
+\hamfusionbegin
+\hamfusionend
+\hamhalt
+\hamhandback
+\hamhead
+\hamheadtop
+\hamincreasing
+\hamindexfinger
+\haminterlock
+\hamlargemod
+\hamlips
+\hamlowerarm
+\hamlrat
+\hamlrbeside
+{hammer and wrench}
+\hammiddlefinger
+\hammime
+\hammovecross
+\hammoved
+\hammovedi
+\hammovedl
+\hammovedo
+\hammovedr
+\hammovei
+\hammoveil
+\hammoveir
+\hammovel
+\hammoveo
+\hammoveol
+\hammoveor
+\hammover
+\hammoveu
+\hammoveui
+\hammoveul
+\hammoveuo
+\hammoveur
+\hammoveX
+\hamneck
+\hamneutralspace
+\hamnodding
+\hamnomotion
+\hamnondominant
+\hamnonipsi
+\hamnose
+\hamnostrils
+\hamorirelative
+\hampalm
+\hampalmd
+\hampalmdl
+\hampalmdr
+\hampalml
+\hampalmr
+\hampalmu
+\hampalmul
+\hampalmur
+\hamparbegin
+\hamparend
+\hampinchall
+\hampinchonetwo
+\hampinchonetwoopen
+\hampinky
+\hampinkyside
+\hamplus
+\hamrepeatcontinue
+\hamrepeatcontinueseveral
+\hamrepeatfromstart
+\hamrepeatfromstartseveral
+\hamrepeatreverse
+\hamreplace
+\hamrest
+\hamringfinger
+\hamseqbegin
+\hamseqend
+\hamshoulders
+\hamshouldertop
+\hamslow
+\hamsmallmod
+\hamstirccw
+\hamstircw
+\hamstomach
+\hamswinging
+\hamsymmlr
+\hamsymmpar
+\hamteeth
+\hamtense
+\hamthumb
+\hamthumbacrossmod
+\hamthumbball
+\hamthumbopenmod
+\hamthumboutmod
+\hamthumbside
+\hamtongue
+\hamtouch
+\hamtwisting
+\hamunderchin
+\hamupperarm
+\hamwavy
+\hamwristback
+\hamwristpulse
+\hamwristtoback
+\hamwristtopinky
+\hamwristtopulse
+\hamwristtothumb
+\hamzigzag
 \HandCuffLeft
 \HandCuffLeftUp
 \HandCuffRight
@@ -3446,19 +5332,31 @@
 \HandRight
 \HandRightUp
 \Handwash
-\HaPa
+{hand with fingers splayed}
+\HarpoonDnLeft
+\HarpoonDnRight
+\HarpoonUpLeft
+\HarpoonUpRight
 \hash
 \hat
 \hatapprox
 \hat[ash]
 \hat[beret]
+\hat[birthday]
 \hat[cowboy]
 \hat[crown]
 \hat[dunce]
 \hateq
 \hat[fez]
+\hat[mortarboard]
+\hat[policeman]
 \hat[santa]
+\hat[scottish]
 \hat[sombrero]
+\hat[tile-blue]
+\hat[tile-gray]
+\hat[tile-light-blue]
+\hat[tile-white]
 \hat[tophat]
 \hat[witch]
 \hausab
@@ -3467,30 +5365,29 @@
 \hausaD
 \hausak
 \hausaK
-\Hb
-\HB
 \hbar
 \HBar
 \hbipropto
 \hbond
-\Hc
-\HC
 \hcrossing
-\HCthousand
-\Hd
-\HD
+\HdnExists
+\HdnForAll
 \hdotdot
 \hdots
-\Hdual
-\He
-\HE
+Head
 \Heart
 \heartctrbull
+{heart decoration}
+{heart exclamation}
 \heartsuit
+{heart with arrow}
+{heart with ribbon}
+{heavy dollar sign}
 \heavyqtleft
 \heavyqtright
+heeled shoe}
+ Helena}
 \hemiobelion
-\Herd
 \Hermaphrodite
 \HERMAPHRODITE
 \hermitmatrix
@@ -3511,29 +5408,13 @@
 \hexagonblack
 \Hexasteel
 \hexstar
-\Hf
 \HF
 \hfermion
 \hfil
-\Hg
-\HG
-\Hh
 \HH
-\Hhundred
-\Hi
-\HI
-\hiatus
-\Hibl
-\Hibp
-\Hibs
-\Hibw
 \Hidalgo
 \Higgsboson
 \hill
-\Hj
-\HJ
-\Hk
-\HK
 \hknearrow
 \hknwarrow
 \hksearow
@@ -3541,26 +5422,16 @@
 \hksqrt
 \hkswarow
 \hkswarrow
-\Hl
-\HL
-\Hm
-\HM
-\Hman
-\Hmillion
 \hmleftpitchfork
 \hmrightpitchfork
-\Hms
-\Hn
-\HN
-\Ho
-\HO
 \hole
 \HollowBox
+{hollow red circle}
 \holter
-\hom
 \Home
 \Homer
-\Hone
+\HookArrowLeft
+\HookArrowRight
 \hookb
 \hookd
 \hookdownarrow
@@ -3577,64 +5448,30 @@
 \hookswarrow
 \hookuparrow
 \hookupminus
+{horizontal traffic light}
 \hoshi
 \hourglass
+{hourglass not done}
 \house
-\Hp
-\HP
+{house with garden}
 \hpause
-\Hplural
-\Hplus
-\Hq
-\HQ
-\Hquery
-\Hr
-\HR
 \hrectangle
 \hrectangleblack
 \hs
-\Hs
-\HS
-\Hscribe
 \hslash
-\Hslash
-\Hsv
-\Ht
 \HT
-\Hten
-\Hthousand
-\Htongue
-\Hu
-\HU
 \Hungary
 \Hut
 \hv
-\Hv
-\HV
-\Hvbar
-\Hw
-\HW
-\Hx
-\HX
-\HXthousand
-\Hy
-\HY
 \Hygiea
 \hyphenbullet
-\Hz
-\HZ
 \hzigzag
 \i
-i
-I
 \ialign
-\IB
 \ibar
 \IC
 \Iceland
 \IceMountain
-\id
-\Id
 \iddots
 \idotsint
 \igocircle
@@ -3658,22 +5495,31 @@
 \Im
 \imageof
 \imath
+\Impl
 \in
+\In
+inclinatum}
 \incoh
+\InCoh
+{incoming envelope}
+Incorporated
 \increment
 \independent
+{index pointing up}
 \Industry
-\inf
+\InEquv
+\Infin
 \Info
 \infty
-\ing
-\Ing
-\ING
+\InImpl
+\iNint
 \inipartvoice
 \inipartvoiceless
-\injlim
-\Innocey
 \inplus
+\input
+{input latin letters}
+{input latin lowercase}
+{input latin uppercase}
 \Ins
 \int
 \intbar
@@ -3698,7 +5544,7 @@
 \intercal
 \interleave
 \internalsym
-\Interval
+Interpreting
 \intlarhk
 \intlarhksl
 \intlarhkup
@@ -3712,7 +5558,6 @@
 \inva
 \invamp
 \invbackneg
-\INVd
 \invdiameter
 \inve
 \inversebullet
@@ -3722,24 +5567,21 @@
 \invf
 \invglotstop
 \invh
-\INVl
 \invlazys
 \invlegr
 \invm
 \invneg
 \invnot
+\InvNt
 \invr
-\INVr
 \invscr
 \invscripta
 \invsmileface
-\INVu
 \invv
 \invw
 \invwhitelowerhalfcircle
 \invwhiteupperhalfcircle
 \invy
-\IO
 \ion
 \ionicbond
 \iota
@@ -3746,7 +5588,6 @@
 \Iota
 \iotaup
 \ipagamma
-\ipercatal
 \Ireland
 \IroningI
 \IroningII
@@ -3760,12 +5601,29 @@
 \ismodeledby
 \Italy
 \j
-j
-J
 \jAB
 \JackStar
 \JackStarBold
 \jAG
+{Japanese ``acceptable'' button}
+{Japanese ``application'' button}
+{Japanese ``bargain'' button}
+{Japanese ``congratulations'' button}
+{Japanese ``discount'' button}
+{Japanese ``free of charge'' button}
+{Japanese ``here'' button}
+{Japanese ``monthly amount'' button}
+{Japanese ``not free of charge'' button}
+{Japanese ``no vacancy'' button}
+{Japanese ``open for business'' button}
+{Japanese ``passing grade'' button}
+{Japanese post office}
+{Japanese ``prohibited'' button}
+{Japanese ``reserved'' button}
+{Japanese ``secret'' button}
+{Japanese ``service charge'' button}
+{Japanese symbol for beginner}
+{Japanese ``vacancy'' button}
 \jAR
 \jBC
 \jBH
@@ -3815,8 +5673,6 @@
 \jVN
 \jVS
 \k
-k
-\K
 \Kaonminus
 \Kaonnull
 \Kaonplus
@@ -3823,21 +5679,23 @@
 \kappa
 \Kappa
 \kappaup
-\ker
+(Keeling) Islands}
 \kernelcontraction
+\ket
 \Keyboard
 \keystroke
-\Knife
-\Knoblauchpresse
-\Kochtopf
+kievan}
+kievan1}
+ Kinshasa}
+{kissing face with closed eyes}
+{kissing face with smiling eyes}
+ Kitts \& Nevis}
 \koppa
 \Koppa
 \Kr
 \kreuz
 \Kronos
-\kside
 \l
-l
 \L
 \labdentalnas
 \labvel
@@ -3861,10 +5719,12 @@
 \largeblackcircle
 \largeblacksquare
 \largeblackstar
+{large blue diamond}
 \largecircle
 \largectrbull
 \largediamond
 \largelozenge
+{large orange diamond}
 \largepencil
 \largepentagram
 \LargerOrEqual
@@ -3878,17 +5738,31 @@
 \largewhitestar
 \LArrow
 \larrowfill
-\Laserbeam
+{last quarter moon}
+{last quarter moon face}
+{last track button}
 \lat
 \late
 \latfric
 \Latvia
-\Laughey
-\lb
-\LB
 \lbag
 \Lbag
 \lblackbowtie
+\LBlackCircle
+\LBlackCurvedDiamond
+\LBlackDiamond
+\LBlackDownTriangle
+\LBlackLeftArrowHead
+\LBlackLeftTriangle
+\LBlackLozenge
+\LBlackRightArrowHead
+\LBlackRightTriangle
+\LBlackSmallCircle
+\LBlackSquare
+\LBlackSquareRoundCorners
+\LBlackUpTriangle
+\LBlackVerySmallCircle
+\LBlackVerySmallSquare
 \lblkbrbrak
 \lbrace
 \lBrace
@@ -3902,6 +5776,7 @@
 \Lbrbrak
 \lceil
 \lCeil
+\LcgBistab
 \lcirclearrowdown
 \lcirclearrowleft
 \lcirclearrowright
@@ -3909,6 +5784,7 @@
 \lcircleleftint
 \lcirclerightint
 \lcm
+lcomma}
 \lcorners
 \lcurvearrowdown
 \lcurvearrowleft
@@ -3919,19 +5795,17 @@
 \lcurvearrowsw
 \lcurvearrowup
 \lcurvyangle
-\LD
 \ldbrack
 \ldotp
 \ldots
+\LDots
 \Ldsh
 \le
-\LE
 \leadsto
-\leafleft
-\leafNE
-\leafright
+{leaf fluttering in wind}
 \left
 \Left
+Left
 \leftarrow
 \Leftarrow
 \LEFTarrow
@@ -3939,6 +5813,7 @@
 \leftarrowapprox
 \leftarrowbackapprox
 \leftarrowbsimilar
+{left arrow curving right}
 \leftarrowless
 \leftarrowonoplus
 \leftarrowplus
@@ -3993,8 +5868,10 @@
 \leftmoon
 \leftouterjoin
 \leftp
+leftparen}
 \leftpitchfork
 \leftpointright
+\leftPP
 \leftpropto
 \leftrcurvearrow
 \leftrightarrow
@@ -4024,7 +5901,9 @@
 \leftrightwavearrow
 \leftrsquigarrow
 \LeftScissors
+\LeftSlash
 \leftslice
+{left speech bubble}
 \leftspoon
 \leftsquigarrow
 \leftt
@@ -4051,6 +5930,8 @@
 \legm
 \legr
 \length
+\LEntail
+\LEntailEquv
 \leo
 \Leo
 \leq
@@ -4061,6 +5942,7 @@
 \leqslant
 \leqslantdot
 \leqslcc
+\LEquv
 \lescc
 \lesdot
 \lesdoto
@@ -4081,6 +5963,7 @@
 \LessOrEqual
 \lesssim
 \lesssimslant
+Leste}
 \Letter
 \levaw
 \LF
@@ -4092,10 +5975,12 @@
 \lftbotcorner
 \lftimes
 \lfttopcorner
-\lg
-\LG
+\LFunc
 \lgblkcircle
 \lgblksquare
+\LgCircPlus
+\LgCircStar
+\LgCircTimes
 \lgE
 \lgroup
 \lgwhtcircle
@@ -4103,7 +5988,6 @@
 \lhd
 \LHD
 \lhdbend
-\lhook
 \lhookdownarrow
 \lhookleftarrow
 \lhooknearrow
@@ -4118,6 +6002,7 @@
 \lightbulb
 \lightning
 \Lightning
+light skin tone}
 \Lilith
 \lilyAccent
 \lilyDynamics{f}
@@ -4127,6 +6012,83 @@
 \lilyDynamics{s}
 \lilyDynamics{z}
 \lilyEspressivo
+\lilyGlyph{accordion.dot}
+\lilyGlyph{clefs.C}
+\lilyGlyph{clefs.F}
+\lilyGlyph{clefs.G}
+\lilyGlyph{clefs.tab}
+\lilyGlyph{comma}
+\lilyGlyph{dots.dot}
+\lilyGlyph{eight}
+\lilyGlyph{f}
+\lilyGlyph{five}
+\lilyGlyph{flags.d3}
+\lilyGlyph{flags.d4}
+\lilyGlyph{flags.d5}
+\lilyGlyph{flags.d6}
+\lilyGlyph{flags.d7}
+\lilyGlyph{flags.dgrace}
+\lilyGlyph{flags.u3}
+\lilyGlyph{flags.u4}
+\lilyGlyph{flags.u5}
+\lilyGlyph{flags.u6}
+\lilyGlyph{flags.u7}
+\lilyGlyph{flags.ugrace}
+\lilyGlyph{four}
+\lilyGlyph{hyphen}
+\lilyGlyph{m}
+\lilyGlyph{nine}
+\lilyGlyph{noteheads.dM2}
+\lilyGlyph{noteheads.s0}
+\lilyGlyph{noteheads.s1}
+\lilyGlyph{noteheads.s2}
+\lilyGlyph{noteheads.sM1}
+\lilyGlyph{noteheads.uM2}
+\lilyGlyph{one}
+\lilyGlyph{p}
+\lilyGlyph{pedal.*}
+\lilyGlyph{pedal..}
+\lilyGlyph{pedal.d}
+\lilyGlyph{pedal.e}
+\lilyGlyph{pedal.M}
+\lilyGlyph{pedal.P}
+\lilyGlyph{pedal.Ped}
+\lilyGlyph{period}
+\lilyGlyph{plus}
+\lilyGlyph{r}
+\lilyGlyph{rests.0}
+\lilyGlyph{rests.0o}
+\lilyGlyph{rests.1}
+\lilyGlyph{rests.1o}
+\lilyGlyph{rests.2}
+\lilyGlyph{rests.3}
+\lilyGlyph{rests.4}
+\lilyGlyph{rests.5}
+\lilyGlyph{rests.6}
+\lilyGlyph{rests.7}
+\lilyGlyph{rests.M1}
+\lilyGlyph{rests.M1o}
+\lilyGlyph{rests.M2}
+\lilyGlyph{rests.M3}
+\lilyGlyph{s}
+\lilyGlyph{scripts.coda}
+\lilyGlyph{scripts.espr}
+\lilyGlyph{scripts.ictus}
+\lilyGlyph{scripts.open}
+\lilyGlyph{scripts.prall}
+\lilyGlyph{scripts.segno}
+\lilyGlyph{scripts.thumb}
+\lilyGlyph{scripts.trill}
+\lilyGlyph{scripts.turn}
+\lilyGlyph{scripts.upbow}
+\lilyGlyph{seven}
+\lilyGlyph{six}
+\lilyGlyph{three}
+\lilyGlyph{timesig.C22}
+\lilyGlyph{timesig.C44}
+\lilyGlyph{two}
+\lilyGlyph{z}
+\lilyGlyph{zero}
 \lilyPrintMoreDots
 \lilyRF
 \lilyRFZ
@@ -4138,407 +6100,23 @@
 \lilyTimeSignature
 \lim
 \liminf
+\LImpl
 \limsup
 \linbfamily
-\LinearAC
-\LinearACC
-\LinearACCC
-\LinearACCCI
-\LinearACCCII
-\LinearACCCIII
-\LinearACCCIV
-\LinearACCCIX
-\LinearACCCL
-\LinearACCCLI
-\LinearACCCLII
-\LinearACCCLIII
-\LinearACCCLIV
-\LinearACCCLIX
-\LinearACCCLV
-\LinearACCCLVI
-\LinearACCCLVII
-\LinearACCCLVIII
-\LinearACCCLX
-\LinearACCCLXI
-\LinearACCCLXII
-\LinearACCCLXIII
-\LinearACCCLXIV
-\LinearACCCLXIX
-\LinearACCCLXV
-\LinearACCCLXVI
-\LinearACCCLXVII
-\LinearACCCLXVIII
-\LinearACCCLXX
-\LinearACCCLXXI
-\LinearACCCLXXII
-\LinearACCCLXXIII
-\LinearACCCLXXIV
-\LinearACCCLXXIX
-\LinearACCCLXXV
-\LinearACCCLXXVI
-\LinearACCCLXXVII
-\LinearACCCLXXVIII
-\LinearACCCLXXX
-\LinearACCCLXXXI
-\LinearACCCLXXXII
-\LinearACCCLXXXIII
-\LinearACCCLXXXIV
-\LinearACCCLXXXIX
-\LinearACCCLXXXV
-\LinearACCCLXXXVI
-\LinearACCCLXXXVII
-\LinearACCCLXXXVIII
-\LinearACCCV
-\LinearACCCVI
-\LinearACCCVII
-\LinearACCCVIII
-\LinearACCCX
-\LinearACCCXI
-\LinearACCCXII
-\LinearACCCXIII
-\LinearACCCXIV
-\LinearACCCXIX
-\LinearACCCXL
-\LinearACCCXLI
-\LinearACCCXLII
-\LinearACCCXLIII
-\LinearACCCXLIV
-\LinearACCCXLIX
-\LinearACCCXLV
-\LinearACCCXLVI
-\LinearACCCXLVII
-\LinearACCCXLVIII
-\LinearACCCXV
-\LinearACCCXVI
-\LinearACCCXVII
-\LinearACCCXVIII
-\LinearACCCXX
-\LinearACCCXXI
-\LinearACCCXXII
-\LinearACCCXXIII
-\LinearACCCXXIV
-\LinearACCCXXIX
-\LinearACCCXXV
-\LinearACCCXXVI
-\LinearACCCXXVII
-\LinearACCCXXVIII
-\LinearACCCXXX
-\LinearACCCXXXI
-\LinearACCCXXXII
-\LinearACCCXXXIII
-\LinearACCCXXXIV
-\LinearACCCXXXIX
-\LinearACCCXXXV
-\LinearACCCXXXVI
-\LinearACCCXXXVII
-\LinearACCCXXXVIII
-\LinearACCI
-\LinearACCII
-\LinearACCIII
-\LinearACCIV
-\LinearACCIX
-\LinearACCL
-\LinearACCLI
-\LinearACCLII
-\LinearACCLIII
-\LinearACCLIV
-\LinearACCLIX
-\LinearACCLV
-\LinearACCLVI
-\LinearACCLVII
-\LinearACCLVIII
-\LinearACCLX
-\LinearACCLXI
-\LinearACCLXII
-\LinearACCLXIII
-\LinearACCLXIV
-\LinearACCLXIX
-\LinearACCLXV
-\LinearACCLXVI
-\LinearACCLXVII
-\LinearACCLXVIII
-\LinearACCLXX
-\LinearACCLXXI
-\LinearACCLXXII
-\LinearACCLXXIII
-\LinearACCLXXIV
-\LinearACCLXXIX
-\LinearACCLXXV
-\LinearACCLXXVI
-\LinearACCLXXVII
-\LinearACCLXXVIII
-\LinearACCLXXX
-\LinearACCLXXXI
-\LinearACCLXXXII
-\LinearACCLXXXIII
-\LinearACCLXXXIV
-\LinearACCLXXXIX
-\LinearACCLXXXV
-\LinearACCLXXXVI
-\LinearACCLXXXVII
-\LinearACCLXXXVIII
-\LinearACCLXXXX
-\LinearACCV
-\LinearACCVI
-\LinearACCVII
-\LinearACCVIII
-\LinearACCX
-\LinearACCXCI
-\LinearACCXCII
-\LinearACCXCIII
-\LinearACCXCIV
-\LinearACCXCIX
-\LinearACCXCV
-\LinearACCXCVI
-\LinearACCXCVII
-\LinearACCXCVIII
-\LinearACCXI
-\LinearACCXII
-\LinearACCXIII
-\LinearACCXIV
-\LinearACCXIX
-\LinearACCXL
-\LinearACCXLI
-\LinearACCXLII
-\LinearACCXLIII
-\LinearACCXLIV
-\LinearACCXLIX
-\LinearACCXLV
-\LinearACCXLVI
-\LinearACCXLVII
-\LinearACCXLVIII
-\LinearACCXV
-\LinearACCXVI
-\LinearACCXVII
-\LinearACCXVIII
-\LinearACCXX
-\LinearACCXXI
-\LinearACCXXII
-\LinearACCXXIII
-\LinearACCXXIV
-\LinearACCXXIX
-\LinearACCXXV
-\LinearACCXXVI
-\LinearACCXXVII
-\LinearACCXXVIII
-\LinearACCXXX
-\LinearACCXXXI
-\LinearACCXXXII
-\LinearACCXXXIII
-\LinearACCXXXIV
-\LinearACCXXXIX
-\LinearACCXXXV
-\LinearACCXXXVI
-\LinearACCXXXVII
-\LinearACCXXXVIII
-\LinearACI
-\LinearACII
-\LinearACIII
-\LinearACIV
-\LinearACIX
-\LinearACL
-\LinearACLI
-\LinearACLII
-\LinearACLIII
-\LinearACLIV
-\LinearACLIX
-\LinearACLV
-\LinearACLVI
-\LinearACLVII
-\LinearACLVIII
-\LinearACLX
-\LinearACLXI
-\LinearACLXII
-\LinearACLXIII
-\LinearACLXIV
-\LinearACLXIX
-\LinearACLXV
-\LinearACLXVI
-\LinearACLXVII
-\LinearACLXVIII
-\LinearACLXX
-\LinearACLXXI
-\LinearACLXXII
-\LinearACLXXIII
-\LinearACLXXIV
-\LinearACLXXIX
-\LinearACLXXV
-\LinearACLXXVI
-\LinearACLXXVII
-\LinearACLXXVIII
-\LinearACLXXX
-\LinearACLXXXI
-\LinearACLXXXII
-\LinearACLXXXIII
-\LinearACLXXXIV
-\LinearACLXXXIX
-\LinearACLXXXV
-\LinearACLXXXVI
-\LinearACLXXXVII
-\LinearACLXXXVIII
-\LinearACLXXXX
-\LinearACV
-\LinearACVI
-\LinearACVII
-\LinearACVIII
-\LinearACX
-\LinearACXCI
-\LinearACXCII
-\LinearACXCIII
-\LinearACXCIV
-\LinearACXCIX
-\LinearACXCV
-\LinearACXCVI
-\LinearACXCVII
-\LinearACXCVIII
-\LinearACXI
-\LinearACXII
-\LinearACXIII
-\LinearACXIV
-\LinearACXIX
-\LinearACXL
-\LinearACXLI
-\LinearACXLII
-\LinearACXLIII
-\LinearACXLIV
-\LinearACXLIX
-\LinearACXLV
-\LinearACXLVI
-\LinearACXLVII
-\LinearACXLVIII
-\LinearACXV
-\LinearACXVI
-\LinearACXVII
-\LinearACXVIII
-\LinearACXX
-\LinearACXXI
-\LinearACXXII
-\LinearACXXIII
-\LinearACXXIV
-\LinearACXXIX
-\LinearACXXV
-\LinearACXXVI
-\LinearACXXVII
-\LinearACXXVIII
-\LinearACXXX
-\LinearACXXXI
-\LinearACXXXII
-\LinearACXXXIII
-\LinearACXXXIV
-\LinearACXXXIX
-\LinearACXXXV
-\LinearACXXXVI
-\LinearACXXXVII
-\LinearACXXXVIII
-\LinearAI
-\LinearAII
-\LinearAIII
-\LinearAIV
-\LinearAIX
-\LinearAL
-\LinearALI
-\LinearALII
-\LinearALIII
-\LinearALIV
-\LinearALIX
-\LinearALV
-\LinearALVI
-\LinearALVII
-\LinearALVIII
-\LinearALX
-\LinearALXI
-\LinearALXII
-\LinearALXIII
-\LinearALXIV
-\LinearALXIX
-\LinearALXV
-\LinearALXVI
-\LinearALXVII
-\LinearALXVIII
-\LinearALXX
-\LinearALXXI
-\LinearALXXII
-\LinearALXXIII
-\LinearALXXIV
-\LinearALXXIX
-\LinearALXXV
-\LinearALXXVI
-\LinearALXXVII
-\LinearALXXVIII
-\LinearALXXX
-\LinearALXXXI
-\LinearALXXXII
-\LinearALXXXIII
-\LinearALXXXIV
-\LinearALXXXIX
-\LinearALXXXV
-\LinearALXXXVI
-\LinearALXXXVII
-\LinearALXXXVIII
-\LinearALXXXX
-\LinearAV
-\LinearAVI
-\LinearAVII
-\LinearAVIII
-\LinearAX
-\LinearAXCI
-\LinearAXCII
-\LinearAXCIII
-\LinearAXCIV
-\LinearAXCIX
-\LinearAXCV
-\LinearAXCVI
-\LinearAXCVII
-\LinearAXCVIII
-\LinearAXI
-\LinearAXII
-\LinearAXIII
-\LinearAXIV
-\LinearAXIX
-\LinearAXL
-\LinearAXLI
-\LinearAXLII
-\LinearAXLIII
-\LinearAXLIV
-\LinearAXLIX
-\LinearAXLV
-\LinearAXLVI
-\LinearAXLVII
-\LinearAXLVIII
-\LinearAXV
-\LinearAXVI
-\LinearAXVII
-\LinearAXVIII
-\LinearAXX
-\LinearAXXI
-\LinearAXXII
-\LinearAXXIII
-\LinearAXXIV
-\LinearAXXIX
-\LinearAXXV
-\LinearAXXVI
-\LinearAXXVII
-\LinearAXXVIII
-\LinearAXXX
-\LinearAXXXI
-\LinearAXXXII
-\LinearAXXXIII
-\LinearAXXXIV
-\LinearAXXXIX
-\LinearAXXXV
-\LinearAXXXVI
-\LinearAXXXVII
-\LinearAXXXVIII
 \linefeed
 \lineh
 \Lineload
+lineprall}
+\LInEquv
 \linev
 \linevh
+\LInImpl
+{linked paperclips}
 \Lisa
 \Lithuania
 \lito
+{litter in bin sign}
 \lJoin
-\LK
 \ll
 \llangle
 \llap
@@ -4556,19 +6134,29 @@
 \lllnest
 \llparenthesis
 \lltriangle
+\LMapTo
 \LMex
 \lmoustache
-\ln
+\LMtEquv
+\LMtImpl
+\Lnand
 \lnapprox
 \lneq
 \lneqq
+\LngVrtBar
+\Lnor
 \lnot
 \lnsim
-\LO
 \log
+\LogCont
+\LogFutr
+\LogNec
+\LogNext
+\LogNonCont
 \logof
+\LogPast
+\LogPos
 \longa
-\longcastling
 \longdashv
 \longdivision
 \longhookrightarrow
@@ -4580,6 +6168,7 @@
 \longleftfootline
 \longleftharpoondown
 \longleftharpoonup
+\longleftPP
 \longleftrightarrow
 \Longleftrightarrow
 \longleftsquigarrow
@@ -4590,27 +6179,64 @@
 \Longmapsto
 \longoiint
 \longoint
-\LongPulseHigh
-\LongPulseLow
 \longrightarrow
 \Longrightarrow
 \longrightfootline
 \longrightharpoondown
 \longrightharpoonup
+\longrightPP
 \longrightsquigarrow
 \longrightwavearrow
+\longroundedarrow
 \longs
+\longsquaredarrow
+\longvarcircleleftarrow
+\longvarCircleleftarrow
+\longvarcirclerightarrow
+\longvarCirclerightarrow
+\longvardoubleleftarrow
+\longvardoublerightarrow
+\longvardownhookleftarrow
+\longvardownhookrightarrow
+\longvarleftarrow
+\longvarLeftarrow
+\longvarleftarrows
+\longvarleftharp
+\longvarleftrightarrow
+\longvarleftrightarrows
+\longvarleftrightharp
+\longvarLleftarrow
+\longvarLleftRrightarrow
+\longvarmapsfrom
+\longvarmapsto
+\longvarRibbonleftarrow
+\longvarRibbonrightarrow
+\longvarrightarrow
+\longvarRightarrow
+\longvarrightarrows
+\longvarrightharp
+\longvarrightleftarrows
+\longvarrightleftharp
+\longvarRrightarrow
+\longvarSquareleftarrow
+\longvarSquarerightarrow
+\longvaruphookleftarrow
+\longvaruphookrightarrow
 \looparrowdownleft
 \looparrowdownright
 \looparrowleft
+\LoopArrowLeft
 \looparrowright
+\LoopArrowRight
 \Loosebearing
 \lor
+{loudly crying face}
 \LowerDiamond
 \lowint
 \lowintsl
 \lowintup
 \lozenge
+Lozenge
 \lozengedot
 \lozengeminus
 \lparen
@@ -4618,6 +6244,8 @@
 \Lparen
 \Lparengtr
 \lparenless
+\LParFunc
+lpes}
 \lrarc
 \lrblacktriangle
 \lrcorner
@@ -4624,6 +6252,8 @@
 \lrtimes
 \lrtriangle
 \lrtriangleeq
+\Ls
+\Lse
 \lsem
 \lsf
 \lsfz
@@ -4632,6 +6262,7 @@
 \lsimg
 \lsqhook
 \Lsteel
+\LstFix
 \Lt
 \ltcc
 \ltcir
@@ -4640,9 +6271,11 @@
 \ltlarr
 \ltquest
 \ltriple
+\ltriple\vert
 \ltrivb
-\LU
 \Luxembourg
+lvarcomma}
+\lvecc
 \lvert
 \lVert
 \lvertneqq
@@ -4652,15 +6285,59 @@
 \lwave
 \lwavy
 \lWavy
+\LWhiteCircle
+\LWhiteCurvedDiamond
+\LWhiteDiamond
+\LWhiteDownTriangle
+\LWhiteLeftArrowHead
+\LWhiteLeftTriangle
+\LWhiteLozenge
+\LWhiteRightArrowHead
+\LWhiteRightTriangle
+\LWhiteSmallCircle
+\LWhiteSquare
+\LWhiteSquareRoundCorners
+\LWhiteUpTriangle
+\LWhiteVerySmallCircle
+\LWhiteVerySmallSquare
+\LWkEntail
+\LWkEntailEquv
+\LWkEquv
+\LWkImpl
+\LWkMtEquv
+\LWkMtImpl
 \lz
 \m
-m
 \M
-\ma
+M1}
+M1blackmensural}
+M1double}
+M1kievan}
+M1mensural}
+M1neomensural}
+M1semimensural}
+M2blackligmensural}
+M2blackmensural}
+M2kievan}
+M2ligmensural}
+M2mensural}
+M2neomensural}
+M2semiligmensural}
+M2semimensural}
+M3blackligmensural}
+M3blackmensural}
+M3ligmensural}
+M3mensural}
+M3neomensural}
+M3semiligmensural}
+M3semimensural}
 \Macedonia
 \macron
 \Maggie
+{magnifying glass tilted left}
+{magnifying glass tilted right}
 \magnon
+{mahjong red dragon}
 \makeatletter
 \makeatother
 \male
@@ -4670,50 +6347,99 @@
 \Malta
 \maltese
 \manboldkidney
+{man bouncing ball}
+{man cartwheeling}
 \manconcentriccircles
 \manconcentricdiamond
 \mancone
+{man construction worker}
 \mancube
 \manerrarrow
 \ManFace
+{man factory worker}
+{man feeding baby}
 \manfilledquartercircle
+{man gesturing NO}
+{man gesturing OK}
+{man getting haircut}
+{man getting massage}
+{man health worker}
 \manhpennib
 \manimpossiblecube
+{man in lotus position}
+{man in manual wheelchair}
+{man in motorized wheelchair}
+{man in steamy room}
 \mankidney
 \manlhpenkidney
+{man lifting weights}
+{man mountain biking}
+{man office worker}
 \manpenkidney
+{man playing handball}
+{man playing water polo}
+{man police officer}
 \manquadrifolium
 \manquartercircle
+{man raising hand}
 \manrotatedquadrifolium
 \manrotatedquartercircle
 \manstar
+{man supervillain}
+{man technologist}
+{mantelpiece clock}
 \mantiltpennib
+{man tipping hand}
 \mantriangledown
 \mantriangleright
 \mantriangleup
+{manual wheelchair}
 \manvpennib
-\mappedfromchar
-\Mappedfromchar
+{man wearing turban}
+{man with white cane}
+\MapComp
+\MapJoin
+\MapMeet
+\MapParInGndMul
+\MapParInGndOne
+\MapParInGndSng
+\MapParInMul
+\MapParInOne
+\MapParInSng
+\MapParOnGndMul
+\MapParOnGndOne
+\MapParOnGndSng
+\MapParOnMul
+\MapParOnOne
+\MapParOnSng
 \mapsdown
 \Mapsdown
 \mapsfrom
 \Mapsfrom
-\mapsfromchar
-\Mapsfromchar
 \mapsto
 \Mapsto
-\mapstochar
-\Mapstochar
 \mapsup
 \Mapsup
+\MapTo
+\MapTotInGndMul
+\MapTotInGndOne
+\MapTotInGndSng
+\MapTotInMul
+\MapTotInOne
+\MapTotInSng
+\MapTotOnGndMul
+\MapTotOnGndOne
+\MapTotOnGndSng
+\MapTotOnMul
+\MapTotOnOne
+\MapTotOnSng
 \marcato
 \marcatoDown
 \Marge
-\markera
-\markerb
 \mars
 \Mars
-\mate
+{martial arts uniform}
+ Martin}
 \mathaccent
 \mathbat
 \mathbb
@@ -4759,17 +6485,9 @@
 \mathvisiblespace
 \mathwitch
 \mathwitch*
-\max
 \maxima
 \maxwellDistrib
 \maya
-\mb
-\Mb
-\mbb
-\mbB
-\mBb
-\Mbb
-\mbbx
 \mbox
 \MC
 \mdblkcircle
@@ -4819,6 +6537,7 @@
 \medcirc
 \medcircle
 \meddiamond
+{medium skin tone}
 \medlozenge
 \medslash
 \medsquare
@@ -4831,6 +6550,44 @@
 \medvert
 \medvertdot
 \medwhitestar
+{men holding hands}
+mensural1}
+mensural22}
+mensural24}
+mensural32}
+mensural34}
+mensural44}
+mensural48}
+mensural64}
+mensural68}
+mensural68alt}
+mensural94}
+mensural98}
+mensurald03}
+mensurald04}
+mensurald05}
+mensurald06}
+mensurald13}
+mensurald14}
+mensurald15}
+mensurald16}
+mensurald23}
+mensurald24}
+mensurald25}
+mensurald26}
+mensuralu03}
+mensuralu04}
+mensuralu05}
+mensuralu06}
+mensuralu13}
+mensuralu14}
+mensuralu15}
+mensuralu16}
+mensuralu23}
+mensuralu24}
+mensuralu25}
+mensuralu26}
+{men with bunny ears}
 \mercury
 \Mercury
 \merge
@@ -4843,7 +6600,144 @@
 \meterO
 \meterplus
 \method
-metre
+\metre
+\mfAlpinelinux
+\mfAngular
+\mfAngularAlt
+\mfAntenna
+\mfApache
+\mfArchlinux
+\mfAws
+\mfAzure
+\mfBackbone
+\mfBlackberry
+\mfBomb
+\mfBootstrap
+\mfC
+\mfCassandra
+\mfCentos
+\mfClojure
+\mfCodeigniter
+\mfCodepen
+\mfCoffeeBean
+\mfCplusplus
+\mfCsharp
+\mfCss
+\mfCssthree
+\mfCssthreeAlt
+\mfDatabase
+\mfDatabaseAlt
+\mfDatabaseAlttwo
+\mfDebian
+\mfDocker
+\mfDreamhost
+\mfDthree
+\mfElixir
+\mfElm
+\mfErlang
+\mfExherbo
+\mfFedora
+\mfFireAlt
+\mfFreebsd
+\mfFreecodecamp
+\mfGentoo
+\mfGhost
+\mfGit
+\mfGnome
+\mfGo
+\mfGoAlt
+\mfGoogle
+\mfGoogleAlt
+\mfGoogleCode
+\mfGoogleDevelopers
+\mfGradle
+\mfGrails
+\mfGrailsAlt
+\mfGrunt
+\mfGulp
+\mfGulpAlt
+\mfHadoop
+\mfHaskell
+\mfHeroku
+\mfHtml
+\mfHtmlfive
+\mfHtmlfiveAlt
+\mfIphone
+\mfJava
+\mfJavaBold
+\mfJavaDuke
+\mfJavascript
+\mfJavascriptAlt
+\mfJetty
+\mfJquery
+\mfKde
+\mfLaravel
+\mfLineGraph
+\mfLinuxMint
+\mfLooking
+\mfMagento
+\mfMariadb
+\mfMaven
+\mfMicroscope
+\mfMobileDevice
+\mfMobilePhoneAlt
+\mfMobilePhoneBroadcast
+\mfMongodb
+\mfMssql
+\mfMysql
+\mfMysqlAlt
+\mfNetbsd
+\mfNginx
+\mfNginxAlt
+\mfNginxAlttwo
+\mfNodejs
+\mfNpm
+\mfObjc
+\mfOpenshift
+\mfOracle
+\mfOracleAlt
+\mfOsx
+\mfPerl
+\mfPhoneAlt
+\mfPhoneGap
+\mfPhoneRetro
+\mfPhp
+\mfPhpAlt
+\mfPlayframework
+\mfPlayframeworkAlt
+\mfPlone
+\mfPostgres
+\mfPostgresAlt
+\mfPython
+\mfRaspberrypi
+\mfReactjs
+\mfRedhat
+\mfRedis
+\mfRuby
+\mfRubyOnRails
+\mfRubyOnRailsAlt
+\mfRust
+\mfSass
+\mfSatellite
+\mfScala
+\mfScalaAlt
+\mfScript
+\mfScriptAlt
+\mfShell
+\mfSitefinity
+\mfSolaris
+\mfSplatter
+\mfSpring
+\mfSuse
+\mfSvg
+\mfSymfony
+\mfThreedprint
+\mfTomcat
+\mfUbuntu
+\mfUnity
+\mfWireless
+\mfWordpress
+\mfXeleven
 \mho
 \micro
 \mid
@@ -4863,6 +6757,7 @@
 \minimDottedDown
 \minimDown
 \minus
+\Minus
 \minuscolon
 \minuscoloncolon
 \minusdot
@@ -4870,33 +6765,49 @@
 \minushookdown
 \minushookup
 \minuso
+\MinusPlus
 \minusrdots
+Mirror}
+mirroredflat}
 \mlcp
-\mmappedfromchar
-\Mmappedfromchar
-\mmapstochar
-\Mmapstochar
+\Mnd
 \Moai
 \Mobilefone
-\mod
+{mobile phone off}
+{mobile phone with arrow}
+\Model
 \models
 \modtwosum
 \Moldova
+{money with wings}
 \Montenegro
 \moo
 \Moon
-\MoonPha
+\MoonPha{1}
+\MoonPha{2}
+\MoonPha{3}
+\MoonPha{4}
+{moon viewing ceremony}
+\Mor
 \mordent
+mordent}
 \Mordent
-\morepawns
-\moreroom
+{motorized wheelchair}
 \Mountain
+{mountain cableway}
+{mountain railway}
+mouth face}
 \MoveDown
 \moverlay
 \MoveUp
 \mp
+\MtEquv
+\MtImpl
 \mu
 \Mu
+\MulMap
+\MulMapDual
+\MulMapInv
 \multimap
 \multimapboth
 \multimapbothvert
@@ -4923,11 +6834,11 @@
 \musFusaDotted
 \musHalf
 \musHalfDotted
+{musical keyboard}
 \musMeter
 \musMinim
 \musMinimDotted
 \musNatural
-musNatural
 \musQuarter
 \musQuarterDotted
 \musSegno
@@ -4965,7 +6876,6 @@
 \MVThree
 \MVTwo
 \MVZero
-n
 \na
 \nabla
 \nacwcirclearrowdown
@@ -4983,10 +6893,7 @@
 \nacwswarcarrow
 \nacwunderarcarrow
 \NAK
-\NANDd
-\NANDl
-\NANDr
-\NANDu
+\Nand
 \napprox
 \napproxeq
 \napproxeqq
@@ -4997,6 +6904,7 @@
 \nasymp
 \Natal
 \natural
+natural}
 \Natural
 \NATURAL
 \nbackapprox
@@ -5055,6 +6963,7 @@
 \ncwsearcarrow
 \ncwswarcarrow
 \ncwunderarcarrow
+\Nd
 \ndasharrow
 \ndasheddownarrow
 \ndashedleftarrow
@@ -5077,6 +6986,7 @@
 \ndiagdown
 \ndiagup
 \ndivides
+\ndivs
 \ndoteq
 \nDoteq
 \ndoublefrown
@@ -5125,12 +7035,12 @@
 \ndttstile
 \ndualmap
 \ne
-\NE
 \nearrow
 \Nearrow
 \nearrowcorner
 \nearrowtail
 \nebkarrow
+\Nec
 \nefilledspoon
 \nefootline
 \nefree
@@ -5145,6 +7055,17 @@
 \nemodels
 \neModels
 \nenearrows
+neomensural22}
+neomensural24}
+neomensural32}
+neomensural34}
+neomensural44}
+neomensural48}
+neomensural64}
+neomensural68}
+neomensural68alt}
+neomensural94}
+neomensural98}
 \neovnwarrow
 \neovsearrow
 \nepitchfork
@@ -5180,17 +7101,19 @@
 \Netherlands
 \neuter
 \Neutral
-\Neutrey
 \neutrino
 \neutron
 \nevdash
 \neVdash
 \newextarrow
-\newmetrics
 \newmoon
+\newpgfornamentfamily
 \newtie
 \nexists
+\Next
+{next track button}
 \nfallingdotseq
+\NFalse
 \nforksnot
 \nfrown
 \nfrowneq
@@ -5213,6 +7136,7 @@
 \ngets
 \ngg
 \nggg
+\Ngt
 \ngtcc
 \ngtr
 \ngtrapprox
@@ -5249,10 +7173,10 @@
 \NibRight
 \NibSolidLeft
 \NibSolidRight
-\NiceReapey
 \nichi
 \niepsilon
 \nigamma
+{night with stars}
 \niiota
 \nilambda
 \nimageof
@@ -5395,7 +7319,6 @@
 \nmodels
 \nmultimap
 \nmultimapinv
-\NN
 \nndtstile
 \nnearrow
 \nNearrow
@@ -5468,12 +7391,13 @@
 \NoBleech
 \NoChemicalCleaning
 \NoIroning
-\NORd
+{no mobile phones}
+\NonCont
+{no one under eighteen}
+\Nor
 \norigof
-\NORl
-\NORr
+\Normal
 \NorthNode
-\NORu
 \Norway
 \NoSun
 \not
@@ -5482,19 +7406,131 @@
 \notbackslash
 \notbot
 \notchar
+\NotClsEquv
+\NotClsImpl
 \NotCongruent
+\NotConseq
 \notdivides
+\NotDTrpTurn
+\NotDTurnDWavy
+\NotDTurnWavy
+{notebook with decorative cover}
+\NotEntail
+\NotEntailEquv
+\NotEq
 \notequiv
+\NotEquv
+\NotFntSbset
+\NotGr
+\NotGre
+\NotImpl
 \notin
+\NotIn
+\NotInEquv
+\NotInImpl
+\NotLEntail
+\NotLEntailEquv
+\NotLEquv
+\NotLImpl
+\NotLInEquv
+\NotLInImpl
+\NotLMtEquv
+\NotLMtImpl
+\NotLs
+\NotLse
+\NotLWkEntail
+\NotLWkEntailEquv
+\NotLWkEquv
+\NotLWkImpl
+\NotLWkMtEquv
+\NotLWkMtImpl
+\NotModel
+\NotMtEquv
+\NotMtImpl
+\NotMulMap
+\NotMulMapDual
+\NotMulMapInv
 \notni
 \notowner
+\NotOwns
 \notperp
+\NotPre
+\NotPreq
+\NotRule
+\NotSbGr
+\NotSbGre
+\NotSbLs
+\NotSbLse
+\NotSbmap
+\NotSbnch
+\NotSbset
+\NotSEntail
+\NotSEntailEquv
+\NotSeq
+\NotSEquv
+\NotSImpl
+\NotSInEquv
+\NotSInImpl
 \notslash
+\NotSm
 \notsmallin
 \notsmallowns
+\NotSMtEquv
+\NotSMtImpl
+\NotStrctFntSbset
+\NotStrctSbmap
+\NotStrctSbnch
+\NotStrctSbset
+\NotStrctWkSbnch
+\NotSuc
+\NotSucq
+\NotSWkEntail
+\NotSWkEntailEquv
+\NotSWkEquv
+\NotSWkImpl
+\NotSWkMtEquv
+\NotSWkMtImpl
 \nottop
+\NotTrpTurn
+\NotTurn
+\NotTurnDWavy
+\NotTurnWavy
 \NoTumbler
-\novelty
+\NotVEntail
+\NotVEntailEquv
+\NotVEquv
+\NotVImpl
+\NotVInEquv
+\NotVInImpl
+\NotVMtEquv
+\NotVMtImpl
+\NotVWkEntail
+\NotVWkEntailEquv
+\NotVWkEquv
+\NotVWkImpl
+\NotVWkMtEquv
+\NotVWkMtImpl
+\NotWkEntail
+\NotWkEntailEquv
+\NotWkEquv
+\NotWkImpl
+\NotWkMtEquv
+\NotWkMtImpl
+\NotWkSbnch
+\NotXEntail
+\NotXEntailEquv
+\NotXEquv
+\NotXImpl
+\NotXInEquv
+\NotXInImpl
+\NotXMtEquv
+\NotXMtImpl
+\NotXWkEntail
+\NotXWkEntailEquv
+\NotXWkEquv
+\NotXWkImpl
+\NotXWkMtEquv
+\NotXWkMtImpl
 \noway
 \nowns
 \nparallel
@@ -5511,7 +7547,6 @@
 \npreceq
 \npreceqq
 \nprecsim
-\NR
 \nrcirclearrowdown
 \nrcirclearrowleft
 \nrcirclearrowright
@@ -5694,8 +7729,9 @@
 \nswswarrows
 \nswvdash
 \nswVdash
-\NT
+\Nt
 \ntdtstile
+\NtExists
 \nthickapprox
 \nto
 \ntriangleeq
@@ -5708,6 +7744,7 @@
 \ntriplefrown
 \ntriplesim
 \ntriplesmile
+\NTrue
 \ntststile
 \nttstile
 \ntttstile
@@ -5722,8 +7759,9 @@
 \nu
 \Nu
 \nucleus
-\Nudelholz
 \NUL
+\NullSet
+\Numbr
 \NumLock
 \nuparrow
 \nUparrow
@@ -5769,7 +7807,6 @@
 \nupVdash
 \nupVDash
 \nupwavearrow
-\Nursey
 \nuup
 \nUuparrow
 \nvardownwavearrow
@@ -5896,7 +7933,9 @@
 \oe
 \OE
 \oequal
-\Ofen
+\Of
+\OfCrse
+off calendar}
 \officialeuro
 \offinterlineskip
 \ogreaterthan
@@ -5915,6 +7954,7 @@
 \oiintctrclockwise
 \oiintsl
 \oiintup
+\oiNint
 \oint
 \ointclockwise
 \ointctrclockwise
@@ -5923,15 +7963,12 @@
 \ointsl
 \ointup
 \olcross
-\olddWinkey
 \oldGclef
 \oldIm
 \oldRe
 \oldstylenums
-\oldWinkey
 \oleft
 \olessthan
-\OM
 \omega
 \Omega
 \omegaup
@@ -5938,11 +7975,15 @@
 \omicron
 \Omicron
 \ominus
-\onlymove
+{oncoming automobile}
+{oncoming police car}
 \oo
 \ooalign
 \open
+{open file folder}
 \openJoin
+{open mailbox with lowered flag}
+{open mailbox with raised flag}
 \openo
 \opentimes
 \operp
@@ -5949,18 +7990,50 @@
 \oplus
 \opluslhrim
 \oplusrhrim
-\opposbishops
+\OpnAngl
+\OpnAnglBar
+\OpnArrwBrac
+\OpnBar
+\OpnBrac
+\OpnBracBar
+\OpnBrknBrac
+\OpnBrknBracBar
+\OpnBrknBrkt
+\OpnBrknBrktBar
+\OpnBrkt
+\OpnBrktBar
+\OpnCeil
+\OpnCircBrac
+\OpnCircBracBar
+\OpnCircBrkt
+\OpnCircBrktBar
+\OpnCrlyBrkt
+\OpnCrlyBrktBar
+\OpnCurvAngl
+\OpnDblAngl
+\OpnDblBar
+\OpnDblBrac
+\OpnDblCeil
+\OpnDblFloor
+\OpnDblGrp
+\OpnDblParn
+\OpnFloor
+\OpnGrp
+\OpnParn
+\OpnParnBar
+\OpnSqrParn
+\OpnTortoise
+\OpnTortoiseBar
+\OpnTrpBar
+\OpnTurn
 \opposition
 \Opposition
-\OR
+\Or
 \orbit
-\ORd
 \oright
 \origof
-\ORl
+oriscus}
 \OrnamentDiamondSolid
-\ORr
-\ORu
 \oslash
 \ostar
 \osum
@@ -5973,10 +8046,28 @@
 \otriangle
 \otriangleup
 \oturnedcomma
+out face}
+Outline
+\OutlineCircle
+\OutlineCurvedDiamond
+\OutlineDiamond
+\OutlineDownTriangle
+\OutlineLeftArrowHead
+\OutlineLeftTriangle
+\OutlineLozenge
+\OutlineRightArrowHead
+\OutlineRightTriangle
+\OutlineSmallCircle
+\OutlineSquare
+\OutlineUpTriangle
+\OutlineVerySmallCircle
+\OutlineVerySmallSquare
+ Outlying Islands}
 \ovee
-\oven
-\Oven
 \overarc
+\overarchedleftrightarrow
+\overbandedarrow
+\overbar
 \overbat
 \overbat*
 \overbrace
@@ -5989,8 +8080,12 @@
 \overleftharp
 \overleftharpdown
 \overleftharpoon
+\overleftharpoondown
+\overleftharpoonup
 \overleftpitchfork
 \overleftrightarrow
+\overleftrightharp
+\overleftrightvecc
 \overleftswishingghost
 \overleftwitchonbroom
 \overleftwitchonbroom*
@@ -6007,6 +8102,9 @@
 \overrightharp
 \overrightharpdown
 \overrightharpoon
+\overrightharpoondown
+\overrightharpoonup
+\overrightleftharp
 \overrightpitchfork
 \overrightswishingghost
 \overrightwitchonbroom
@@ -6023,15 +8121,13 @@
 \ovoid
 \owedge
 \owns
+\Owns
 \ownsbar
-\p
 \p@
-p
 \P
-P
 \PackingWaste
 \Pallas
-\pan
+{palms up together}
 \PaperLandscape
 \PaperPortrait
 \Paragraph
@@ -6040,8 +8136,10 @@
 \parallelogramblack
 \ParallelPort
 \parallelslant
+\ParFunc
 \parr
 \parsim
+{part alternation mark}
 \partial
 \partialmeetcontraction
 \partialslash
@@ -6070,15 +8168,15 @@
 \partof
 \partvoice
 \partvoiceless
-\passedpawn
+parvum}
+{passport control}
+\Past
 \pause
 \PAuse
 \PAUSe
-\PD
 \Peace
 \PeaceDove
 \Ped
-\peeler
 \pencil
 \PencilLeft
 \PencilLeftDown
@@ -6101,77 +8199,256 @@
 \pentagonblack
 \pentagram
 \Pentagram
-\pentam
 \pentdot
 \penteye
+{people holding hands}
+{people with bunny ears}
+{people wrestling}
+\Percnt
+percussion}
+percussion_change}
 \permil
 \perp
 \Perp
 \perps
+{persevering face}
+{person bouncing ball}
+{person cartwheeling}
+{person facepalming}
+{person feeding baby}
+{person gesturing NO}
+{person gesturing OK}
+{person getting haircut}
+{person getting massage}
+{person in lotus position}
+{person in manual wheelchair}
+{person in motorized wheelchair}
+{person in steamy room}
+{person in suit levitating}
+{person in tuxedo}
+{person lifting weights}
+{person mountain biking}
+{person playing handball}
+{person playing water polo}
+{person raising hand}
+{person rowing boat}
+{person shrugging}
+{person taking bath}
+{person tipping hand}
+{person wearing turban}
+{person with skullcap}
+{person with veil}
+{person with white cane}
 \perthousand
-\Pfanne
+Petal
 \Pfund
 \PgDown
+\pgfornament
+\pgfornament{1}
+\pgfornament{10}
+\pgfornament{100}
+\pgfornament{101}
+\pgfornament{102}
+\pgfornament{103}
+\pgfornament{104}
+\pgfornament{105}
+\pgfornament{106}
+\pgfornament{107}
+\pgfornament{108}
+\pgfornament{109}
+\pgfornament{11}
+\pgfornament{110}
+\pgfornament{111}
+\pgfornament{112}
+\pgfornament{113}
+\pgfornament{114}
+\pgfornament{115}
+\pgfornament{116}
+\pgfornament{117}
+\pgfornament{118}
+\pgfornament{119}
+\pgfornament{12}
+\pgfornament{120}
+\pgfornament{121}
+\pgfornament{122}
+\pgfornament{123}
+\pgfornament{124}
+\pgfornament{125}
+\pgfornament{126}
+\pgfornament{127}
+\pgfornament{128}
+\pgfornament{129}
+\pgfornament{13}
+\pgfornament{130}
+\pgfornament{131}
+\pgfornament{132}
+\pgfornament{133}
+\pgfornament{134}
+\pgfornament{135}
+\pgfornament{136}
+\pgfornament{137}
+\pgfornament{138}
+\pgfornament{139}
+\pgfornament{14}
+\pgfornament{140}
+\pgfornament{141}
+\pgfornament{142}
+\pgfornament{143}
+\pgfornament{144}
+\pgfornament{145}
+\pgfornament{146}
+\pgfornament{147}
+\pgfornament{148}
+\pgfornament{149}
+\pgfornament{15}
+\pgfornament{150}
+\pgfornament{151}
+\pgfornament{152}
+\pgfornament{153}
+\pgfornament{154}
+\pgfornament{155}
+\pgfornament{156}
+\pgfornament{157}
+\pgfornament{158}
+\pgfornament{159}
+\pgfornament{16}
+\pgfornament{160}
+\pgfornament{161}
+\pgfornament{162}
+\pgfornament{163}
+\pgfornament{164}
+\pgfornament{165}
+\pgfornament{166}
+\pgfornament{167}
+\pgfornament{168}
+\pgfornament{169}
+\pgfornament{17}
+\pgfornament{171}
+\pgfornament{172}
+\pgfornament{173}
+\pgfornament{174}
+\pgfornament{175}
+\pgfornament{176}
+\pgfornament{177}
+\pgfornament{178}
+\pgfornament{179}
+\pgfornament{18}
+\pgfornament{180}
+\pgfornament{181}
+\pgfornament{182}
+\pgfornament{183}
+\pgfornament{184}
+\pgfornament{185}
+\pgfornament{186}
+\pgfornament{187}
+\pgfornament{188}
+\pgfornament{189}
+\pgfornament{19}
+\pgfornament{190}
+\pgfornament{191}
+\pgfornament{192}
+\pgfornament{193}
+\pgfornament{194}
+\pgfornament{195}
+\pgfornament{196}
+\pgfornament{2}
+\pgfornament{20}
+\pgfornament{21}
+\pgfornament{22}
+\pgfornament{23}
+\pgfornament{24}
+\pgfornament{25}
+\pgfornament{26}
+\pgfornament{27}
+\pgfornament{28}
+\pgfornament{29}
+\pgfornament{3}
+\pgfornament{30}
+\pgfornament{31}
+\pgfornament{32}
+\pgfornament{33}
+\pgfornament{34}
+\pgfornament{35}
+\pgfornament{36}
+\pgfornament{37}
+\pgfornament{38}
+\pgfornament{39}
+\pgfornament{4}
+\pgfornament{40}
+\pgfornament{41}
+\pgfornament{42}
+\pgfornament{43}
+\pgfornament{44}
+\pgfornament{45}
+\pgfornament{46}
+\pgfornament{47}
+\pgfornament{48}
+\pgfornament{49}
+\pgfornament{5}
+\pgfornament{50}
+\pgfornament{51}
+\pgfornament{52}
+\pgfornament{53}
+\pgfornament{54}
+\pgfornament{55}
+\pgfornament{56}
+\pgfornament{57}
+\pgfornament{58}
+\pgfornament{59}
+\pgfornament{6}
+\pgfornament{60}
+\pgfornament{61}
+\pgfornament{62}
+\pgfornament{63}
+\pgfornament{64}
+\pgfornament{65}
+\pgfornament{66}
+\pgfornament{67}
+\pgfornament{68}
+\pgfornament{69}
+\pgfornament{7}
+\pgfornament{70}
+\pgfornament{71}
+\pgfornament{72}
+\pgfornament{73}
+\pgfornament{74}
+\pgfornament{75}
+\pgfornament{76}
+\pgfornament{77}
+\pgfornament{78}
+\pgfornament{79}
+\pgfornament{8}
+\pgfornament{81}
+\pgfornament{84}
+\pgfornament{87}
+\pgfornament{9}
+\pgfornament{90}
+\pgfornament{91}
+\pgfornament{92}
+\pgfornament{93}
+\pgfornament{94}
+\pgfornament{95}
+\pgfornament{96}
+\pgfornament{97}
+\pgfornament{98}
+\pgfornament{99}
 \PgUp
-\PHarrow
 \phase
-\PHbee
-\PHbeehive
-\PHboomerang
-\PHbow
-\PHbullLeg
-\PHcaptive
-\PHcarpentryPlane
-\PHcat
-\PHchild
-\PHclub
-\PHcolumn
-\PHcomb
-\PHdolium
-\PHdove
-\PHeagle
-\PHflute
-\PHgaunlet
-\PHgrater
-\PHhelmet
-\PHhide
-\PHhorn
 \phi
 \Phi
 \phimeson
 \phimesonnull
 \phiup
-\PHlid
-\PHlily
-\PHmanacles
-\PHmattock
 \phone
 \Phone
 \PhoneHandset
 \phonon
 \photon
-\PHoxBack
-\PHpapyrus
-\PHpedestrian
-\PHplaneTree
-\PHplumedHead
-\PHram
-\PHrosette
-\PHsaw
-\PHshield
-\PHship
-\PHsling
-\PHsmallAxe
-\PHstrainer
-\PHtattooedHead
-\PHtiara
-\PHtunny
-\PHvine
-\PHwavyBand
-\PHwoman
 \pi
 \Pi
 \Pickup
+piece swimsuit}
+ Pierre \& Miquelon}
 {\pigpenfont A}
 {\pigpenfont B}
 {\pigpenfont C}
@@ -6857,6 +9134,11 @@
 \Pisymbol{dingbat}{97}
 \Pisymbol{dingbat}{98}
 \Pisymbol{dingbat}{99}
+\Pisymbol{figbas}{50}
+\Pisymbol{figbas}{52}
+\Pisymbol{figbas}{53}
+\Pisymbol{figbas}{54}
+\Pisymbol{figbas}{57}
 \Pisymbol{fselch}{0}
 \Pisymbol{fselch}{1}
 \Pisymbol{fselch}{10}
@@ -7968,84 +10250,25 @@
 \Pisymbol{umrandb}{97}
 \Pisymbol{umrandb}{98}
 \Pisymbol{umrandb}{99}
-\Pisymbol{WebOMintsGD}{100}
-\Pisymbol{WebOMintsGD}{101}
-\Pisymbol{WebOMintsGD}{102}
-\Pisymbol{WebOMintsGD}{103}
-\Pisymbol{WebOMintsGD}{104}
-\Pisymbol{WebOMintsGD}{105}
-\Pisymbol{WebOMintsGD}{106}
-\Pisymbol{WebOMintsGD}{107}
-\Pisymbol{WebOMintsGD}{108}
-\Pisymbol{WebOMintsGD}{109}
-\Pisymbol{WebOMintsGD}{110}
-\Pisymbol{WebOMintsGD}{111}
-\Pisymbol{WebOMintsGD}{112}
-\Pisymbol{WebOMintsGD}{113}
-\Pisymbol{WebOMintsGD}{114}
-\Pisymbol{WebOMintsGD}{115}
-\Pisymbol{WebOMintsGD}{116}
-\Pisymbol{WebOMintsGD}{117}
-\Pisymbol{WebOMintsGD}{118}
-\Pisymbol{WebOMintsGD}{119}
-\Pisymbol{WebOMintsGD}{120}
-\Pisymbol{WebOMintsGD}{121}
-\Pisymbol{WebOMintsGD}{122}
-\Pisymbol{WebOMintsGD}{47}
-\Pisymbol{WebOMintsGD}{48}
-\Pisymbol{WebOMintsGD}{49}
-\Pisymbol{WebOMintsGD}{50}
-\Pisymbol{WebOMintsGD}{51}
-\Pisymbol{WebOMintsGD}{52}
-\Pisymbol{WebOMintsGD}{53}
-\Pisymbol{WebOMintsGD}{54}
-\Pisymbol{WebOMintsGD}{55}
-\Pisymbol{WebOMintsGD}{56}
-\Pisymbol{WebOMintsGD}{57}
-\Pisymbol{WebOMintsGD}{65}
-\Pisymbol{WebOMintsGD}{66}
-\Pisymbol{WebOMintsGD}{67}
-\Pisymbol{WebOMintsGD}{68}
-\Pisymbol{WebOMintsGD}{69}
-\Pisymbol{WebOMintsGD}{70}
-\Pisymbol{WebOMintsGD}{71}
-\Pisymbol{WebOMintsGD}{72}
-\Pisymbol{WebOMintsGD}{73}
-\Pisymbol{WebOMintsGD}{74}
-\Pisymbol{WebOMintsGD}{75}
-\Pisymbol{WebOMintsGD}{76}
-\Pisymbol{WebOMintsGD}{77}
-\Pisymbol{WebOMintsGD}{78}
-\Pisymbol{WebOMintsGD}{79}
-\Pisymbol{WebOMintsGD}{80}
-\Pisymbol{WebOMintsGD}{81}
-\Pisymbol{WebOMintsGD}{82}
-\Pisymbol{WebOMintsGD}{83}
-\Pisymbol{WebOMintsGD}{84}
-\Pisymbol{WebOMintsGD}{85}
-\Pisymbol{WebOMintsGD}{86}
-\Pisymbol{WebOMintsGD}{87}
-\Pisymbol{WebOMintsGD}{88}
-\Pisymbol{WebOMintsGD}{89}
-\Pisymbol{WebOMintsGD}{90}
-\Pisymbol{WebOMintsGD}{91}
-\Pisymbol{WebOMintsGD}{93}
-\Pisymbol{WebOMintsGD}{97}
-\Pisymbol{WebOMintsGD}{98}
-\Pisymbol{WebOMintsGD}{99}
 \pitchfork
 \piup
+{place of worship}
 \planck
 \Plane
 \plasmon
+{play or pause button}
+plica}
 \plimsoll
+\Pls
 \plus
 \Plus
+Plus
 \PlusCenterOpen
 \pluscirc
 \plusdot
 \pluseqq
 \plushat
+\PlusMinus
 \PlusOutline
 \plussim
 \plussubtwo
@@ -8055,7 +10278,7 @@
 \Pluto
 \pm
 \pmb
-\pmod
+pointed star}
 \pointer
 \PointingHand
 \pointint
@@ -8065,29 +10288,26 @@
 \Poland
 \polariton
 \polaron
+{police car light}
 \polishhook
 \polter
 \portato
 \portatoDown
 \Portugal
+\Pos
 \Poseidon
 \positron
 \postalmark
 \Postbox
-\pot
+potable water}
 \Pound
 \pounds
 \powerset
-\pp
-\Pp
-\ppm
-\ppp
-\Ppp
-\pppp
-\Pppp
-\ppppp
-\Ppppp
-\Pr
+pralldown}
+prallmordent}
+prallprall}
+prallup}
+\Pre
 \prec
 \Prec
 \precapprox
@@ -8100,6 +10320,7 @@
 \precneqq
 \precnsim
 \precsim
+\Preq
 \prime
 \Printer
 \prod
@@ -8108,7 +10329,8 @@
 \PRODI
 \profline
 \profsurf
-\projlim
+\proj
+\prood
 \PropertyLine
 \propfrom
 \propto
@@ -8117,30 +10339,25 @@
 \ProvidesPackage
 \PrtSc
 \prurel
-\ps
 \psi
 \Psi
 \psiup
 \Psyche
-\Pu
+pull}
 \pullback
-\PulseHigh
-\PulseLow
 \pumpkin
-\Purierstab
+punctum}
+push}
 \pushout
 \pwedge
-\pxp
-\Pxp
+\Qed
 \QED
 \qoppa
 \Qoppa
 \qp
 \qprime
-\QQ
 \qqs
 \qs
-\qside
 \quaddot
 \quadeye
 \quadrad
@@ -8148,6 +10365,14 @@
 \quadras
 \Quadras
 \quadrupole
+\QuantAAnd
+\QuantBnchJoin
+\QuantBnchMeet
+\QuantCon
+\QuantDis
+\QuantMor
+\QuantSetJoin
+\QuantSetMeet
 \quark
 \quarkb
 \quarkc
@@ -8155,13 +10380,25 @@
 \quarks
 \quarkt
 \quarku
+\QuartedLozenge
+\QuarteredCircle
+\QuarteredCurvedDiamond
+\QuarteredDiamond
+\QuarteredDownTriangle
+\QuarteredLeftTriangle
+\QuarteredRightTriangle
+\QuarteredSmallCircle
+\QuarteredSquare
+\QuarteredUpTriangle
+\QuarteredVerySmallCircle
+\QuarteredVerySmallSquare
 \quarternote
 \quarterNote
 \quarterNoteDotted
 \quarterNoteDottedDouble
-\quarterNoteDottedDoubleDown
 \quarterNoteDottedDown
 \quarterNoteDown
+Quarters
 \quaver
 \quaverDotted
 \quaverDottedDouble
@@ -8172,20 +10409,18 @@
 \quaverRestDotted
 \questeq
 \Question
+\Queston
+quilisma}
 \Quincunx
 \quotedblbase
 \quotesinglbase
 \r
-r
-\R
-R
 \radiation
 \Radiation
-\Radioactivity
 \Radix
 \Rain
 \RainCloud
-\RaisingEdge
+{raised back of hand}
 \rangle
 \rAngle
 \Rangle
@@ -8192,13 +10427,11 @@
 \ranglebar
 \rangledot
 \rangledownzigzagarrow
-\rank
 \RArrow
 \rarrowfill
 \ratio
 \Rational
 \RATIONAL
-\RB
 \rbag
 \Rbag
 \rblackbowtie
@@ -8222,6 +10455,7 @@
 \rcirclearrowup
 \rcircleleftint
 \rcirclerightint
+rcomma}
 \rcorners
 \rcurvearrowdown
 \rcurvearrowleft
@@ -8247,17 +10481,26 @@
 \Rectsteel
 \recycle
 \Recycling
+{recycling symbol}
+{red exclamation mark}
+{red paper lantern}
+{red question mark}
+{red triangle pointed down}
+{red triangle pointed up}
 \reference
 \reflectbox
-\Reibe
+[regular]
 \relationleftproject
 \relationlifting
 \relationrightproject
 \relbar
 \Relbar
+{repeat single button}
 \Request
+{rescue worker's helmet}
 \resistivity
 \resizebox
+\resmes
 \respondens
 \Respondens
 \restoresymbol
@@ -8285,9 +10528,11 @@
 \reversemathcloud
 \reversemathwitch
 \reversemathwitch*
+reverseturn}
 \revglotstop
 \revmeasuredangle
 \revnmid
+{revolving hearts}
 \revsphericalangle
 \Rewind
 \RewindToIndex
@@ -8316,7 +10561,6 @@
 \rhomesonminus
 \rhomesonnull
 \rhomesonplus
-\rhook
 \rhookdownarrow
 \rhookleftarrow
 \rhooknearrow
@@ -8327,11 +10571,14 @@
 \rhookuparrow
 \rhoup
 \right
+Right
+{right anger bubble}
 \rightangle
 \rightanglemdot
 \rightanglesqr
 \rightanglesquare
 \rightarrow
+right arrow}
 \Rightarrow
 \RIGHTarrow
 \rightarrowapprox
@@ -8339,6 +10586,9 @@
 \rightarrowbar
 \rightarrowbsimilar
 \rightarrowcircle
+{right arrow curving down}
+{right arrow curving left}
+{right arrow curving up}
 \rightarrowdiamond
 \rightarrowgtr
 \rightarrowonoplus
@@ -8401,11 +10651,13 @@
 \rightmoon
 \rightouterjoin
 \rightp
+rightparen}
 \rightpentagon
 \rightpentagonblack
 \rightpitchfork
 \rightpointleft
 \rightpointright
+\rightPP
 \rightpropto
 \rightrcurvearrow
 \rightrightarrows
@@ -8412,6 +10664,7 @@
 \rightrightharpoons
 \rightrsquigarrow
 \RightScissors
+\RightSlash
 \rightslice
 \rightspoon
 \rightsquigarrow
@@ -8441,13 +10694,11 @@
 \rip
 \risingdotseq
 \rJoin
-\RK
 \rlap
 \rmoustache
-\RO
-\rollingpin
+{roasted sweet potato}
+{rolling on the floor laughing}
 \Romania
-\rot
 \rotatebox
 \rotm
 \rotOmega
@@ -8455,6 +10706,7 @@
 \rotvara
 \rotw
 \roty
+\roundedarrow
 \RoundedLsteel
 \RoundedTsteel
 \RoundedTTsteel
@@ -8464,65 +10716,29 @@
 \Rparen
 \rparengtr
 \Rparenless
+\RplcAll
+\RplcAllBnd
+\RplcAllBndLeft
+\RplcAllBndRight
+\RplcAllLeft
+\RplcAllRight
+\RplcAny
+\RplcAnyLeft
+\RplcAnyRight
+\RplcEquv
+\RplcEquvLeft
+\RplcEquvRight
+\RplcFree
+\RplcFreeLeft
+\RplcFreeRight
 \rppolint
 \rppolintsl
 \rppolintup
 \rqm
-\RR
 \rrangle
 \rrbracket
 \rrceil
-\Rrelbar
-\RRelbar
 \rrfloor
-\rrhD
-\rrhDa
-\rrhDap
-\rrhDp
-\rrhDs
-\rrhDsp
-\rrhDw
-\rrhDwp
-\rrhE
-\rrhEp
-\rrhF
-\rrhFp
-\rrhFw
-\rrhFwp
-\rrhL
-\rrhLa
-\rrhLap
-\rrhLp
-\rrhLs
-\rrhLsp
-\rrhLw
-\rrhLwp
-\rrhM
-\rrhMp
-\rrhR
-\rrhRa
-\rrhRap
-\rrhRp
-\rrhRs
-\rrhRsp
-\rrhRw
-\rrhRwp
-\rrhSd
-\rrhSdp
-\rrhSl
-\rrhSlp
-\rrhSr
-\rrhSrp
-\rrhSu
-\rrhSup
-\rrhU
-\rrhUa
-\rrhUap
-\rrhUp
-\rrhUs
-\rrhUsp
-\rrhUw
-\rrhUwp
 \Rrightarrow
 \RRightarrow
 \rrparenthesis
@@ -8538,80 +10754,96 @@
 \rtimesblack
 \rtriltri
 \rtriple
+\rtriple\vert
 \rttopcorner
-\RU
+\Rule
 \ruledelayed
 \rupee
-\RV
+rvarcomma}
 \rvert
 \rVert
+rvirga}
 \rVvert
 \rvzigzag
 \Rvzigzag
-\rWalley
 \rwave
 \rwavy
 \rWavy
-\s
-s
 \S
-S
+s0blackmensural}
+s0blackpetrucci}
+s0cross}
+s0diamond}
+s0do}
+s0harmonic}
+s0kievan}
+s0la}
+s0mensural}
+s0mi}
+s0neomensural}
+s0petrucci}
+s0re}
+s0slash}
+s0sol}
+s0ti}
+s0triangle}
+s1blackpetrucci}
+s1cross}
+s1diamond}
+s1kievan}
+s1la}
+s1mensural}
+s1mi}
+s1neomensural}
+s1petrucci}
+s1slash}
+s1sol}
+s2blackpetrucci}
+s2cross}
+s2diamond}
+s2harmonic}
+s2la}
+s2mensural}
+s2mi}
+s2neomensural}
+s2petrucci}
+s2slash}
+s2sol}
+s2xcircle}
 \sA
-\SAa
-\SAb
-\SAd
-\SAdb
-\SAdd
-\Sadey
+{sad but relieved face}
 \sadface
-\SAf
-\Saftpresse
-\SAg
-\SAga
 \sagittarius
 \Sagittarius
-\SAh
-\SAhd
-\SAhu
-\SAk
-\SAl
-\SAlq
-\SAm
-\samebishops
 \sampi
 \Sampi
-\SAn
+Sampling
 \sansLmirrored
 \sansLturned
-\SAo
 \Sappho
-\SAq
-\SAr
 \sarabfamily
-\SAs
-\SAsa
-\SAsd
-\SAsv
-\SAt
-\SAtb
-\SAtd
+{satellite antenna}
 \satellitedish
 \saturn
 \Saturn
 \SavedStyle
 \savesymbol
-\SAw
-\SAy
-\SAz
-\SAzd
+\SbGr
+\SbGre
+\SbLs
+\SbLse
+\Sbmap
+\SbNand
+\Sbnch
+\SbNd
+\SbNor
+\SbOr
 \Sborder
+\Sbset
+\SbXor
 \scalebox
 \scd
 \scg
-\Schaler
-\Schneebesen
-\SchrodingersCat
-\Schussel
 \schwa
 \sci
 \ScissorHollowLeft
@@ -8624,6 +10856,7 @@
 \ScissorRightBrokenTop
 \scn
 \scoh
+\SCoh
 \scorpio
 \Scorpio
 \scpolint
@@ -8651,13 +10884,6 @@
 \Searrow
 \searrowtail
 \sebkarrow
-\sec
-\sech
-\Sech
-\SechBl
-\SechBL
-\SechBr
-\SechBR
 \second
 \secstress
 \SectioningDiamond
@@ -8671,7 +10897,6 @@
 \seharpooncw
 \seharpoonne
 \seharpoonsw
-\seight
 \selcurvearrow
 \selectfont
 \selsquigarrow
@@ -8678,10 +10903,10 @@
 \semapsto
 \semibreve
 \semibreveDotted
+\Semicln
 \semiquaver
 \semiquaverDotted
 \semiquaverDottedDouble
-\semiquaverDottedDoubleDown
 \semiquaverDottedDown
 \semiquaverDown
 \semiquaverRest
@@ -8690,14 +10915,16 @@
 \Semisquare
 \semodels
 \seModels
+\SEntail
+\SEntailEquv
 \senwarrows
 \senwcurvearrow
 \senwharpoons
 \seovnearrow
-\SePa
 \separated
 \sepitchfork
-\seppawns
+\Seq
+\SEquv
 \Serbia
 \sercurvearrow
 \SerialInterface
@@ -8707,14 +10934,15 @@
 \sespoon
 \Sesquiquadrate
 \setBold
+\SetJoin
+\SetMeet
 \setminus
+\SetSymDiff
 \sevdash
 \seVdash
 \Sextile
-\Sey
-\sfive
-\sfour
-\sgn
+sforzato}
+\SFunc
 \sh
 \shake
 \Shake
@@ -8722,20 +10950,24 @@
 \Shakene
 \Shakenw
 \Shakesw
+{shallow pan of food}
 \sharp
+sharp}
 \sharpArrowboth
 \sharpArrowdown
 \sharpArrowup
 \sharpSlashslashslashStem
-\sharpSlashslashslashStemstem
 \sharpSlashslashStem
-\sharpSlashslashStemstemstem
 \shfermion
+\Shfr
+\ShftAccent
+\ShftSubscr
+\ShftSuper
 \shift
 \Shift
 \Shilling
 \shneg
-\shortcastling
+short}
 \shortdownarrow
 \shortdowntack
 \ShortFifty
@@ -8742,27 +10974,55 @@
 \ShortForty
 \shortleftarrow
 \shortlefttack
+\shortlvecc
 \shortmid
 \ShortNinetyFive
+\shortoverleftharp
+\shortoverleftrightharp
+\shortoverleftrightvecc
+\shortoverrightharp
+\shortoverrightleftharp
 \shortparallel
-\ShortPulseHigh
-\ShortPulseLow
 \shortrightarrow
 \shortrightarrowleftarrow
 \shortrighttack
 \ShortSixty
+\shortstraightlvecc
+\shortstraightvecc
 \ShortThirty
+\shortunderleftharp
+\shortunderleftrightharp
+\shortunderleftrightvecc
+\shortunderlvecc
+\shortunderrightharp
+\shortunderrightleftharp
+\shortunderstraightlvecc
+\shortunderstraightvecc
+\shortundervecc
 \shortuparrow
 \shortuptack
+\shortvecc
 \showclock
 \shpos
 \shuffle
+{shuffle tracks button}
 \SI
-\Sieb
-\sieve
 \sigma
 \Sigma
 \sigmaup
+{sign of the horns}
+\sillystep{1}
+\sillystep{10}
+\sillystep{11}
+\sillystep{12}
+\sillystep{2}
+\sillystep{3}
+\sillystep{4}
+\sillystep{5}
+\sillystep{6}
+\sillystep{7}
+\sillystep{8}
+\sillystep{9}
 \sim
 \simbot
 \simcolon
@@ -8777,40 +11037,47 @@
 \simminussim
 \simneqq
 \simperp
+\SimPerp
+\SImpl
 \simplus
 \simrdots
-\sin
+\Since
 \sincoh
+\SInCoh
+\SInEquv
 \sinewave
-\sinh
+\SingleQuote
+\SInImpl
 \SixFlowerAlternate
 \SixFlowerAltPetal
 \SixFlowerOpenCenter
 \SixFlowerPetalDotted
 \SixFlowerPetalRemoved
-\SixFlowerRemovedOpenPetal
 \SixStar
 \SixteenStarLight
 \sixteenthnote
 \sixteenthNote
 \sixteenthNoteDotted
-\sixteenthNoteDottedDouble
-\sixteenthNoteDottedDoubleDown
 \sixteenthNoteDottedDown
 \sixteenthNoteDown
 \skull
+{skull and crossbones}
 \slash
+slash}
 \slashb
 \slashc
 \slashd
 \slashdiv
 \slashed
+slashslash}
 \slashu
-\Sleepey
 \Sleet
 \sliding
+{slightly frowning face}
+{slightly smiling face}
 \Slovakia
 \Slovenia
+\Sm
 \smallaltoclef
 \smallawint
 \smallawintsl
@@ -8825,6 +11092,7 @@
 \smallblacktriangleleft
 \smallblacktriangleright
 \smallblacktriangleup
+{small blue diamond}
 \smallbosonloop
 \smallbosonloopA
 \smallbosonloopV
@@ -8898,6 +11166,7 @@
 \smallointctrclockwiseup
 \smallointsl
 \smallointup
+{small orange diamond}
 \smallowns
 \smallpencil
 \smallpointint
@@ -8917,6 +11186,7 @@
 \smallsqintsl
 \smallsqintup
 \smallsquare
+small square}
 \SmallSquare
 \smallstar
 \smallsumint
@@ -8939,6 +11209,7 @@
 \smallvarointclockwiseup
 \SmallVBar
 \smallwhitestar
+\SMapTo
 \smartctrbull
 \smashtimes
 \smblkcircle
@@ -8945,6 +11216,9 @@
 \smblkdiamond
 \smblklozenge
 \smblksquare
+\SmCircPlus
+\SmCircStar
+\SmCircTimes
 \smeparsl
 \smile
 \smileeq
@@ -8954,13 +11228,22 @@
 \smilefrowneq
 \smiley
 \Smiley
+{smiling face with halo}
+{smiling face with hearts}
+{smiling face with horns}
+{smiling face with smiling eyes}
+{smiling face with sunglasses}
+{smiling face with tear}
 \smt
 \smte
+\SMtEquv
+\SMtImpl
 \smwhitestar
 \smwhtcircle
 \smwhtdiamond
 \smwhtlozenge
 \smwhtsquare
+snappizzicato}
 \sndtstile
 \Snow
 \SnowCloud
@@ -8968,6 +11251,7 @@
 \SnowflakeChevron
 \SnowflakeChevronBold
 \Snowman
+{snowman without snow}
 \SNPP
 \snststile
 \sntstile
@@ -8978,14 +11262,18 @@
 \solid
 \SouthNode
 \Soyombo
-\spa
 \Spacebar
 \spadesuit
 \Spain
+\SParFunc
 \Sparkle
 \SparkleBold
+{speaker high volume}
+{speaker low volume}
+{speaker medium volume}
 \SpecialForty
 \sPed
+speed train}
 \sphericalangle
 \sphericalangledown
 \sphericalangleleft
@@ -8995,9 +11283,11 @@
 \SpinDown
 \spinup
 \SpinUp
+\spiritusasper
 \spirituslenis
 \splitvert
-\Spoon
+spoked asterisk}
+{sport utility vehicle}
 \spreadlips
 \Springtree
 \sqbullet
@@ -9062,11 +11352,12 @@
 \squadlinevh
 \square
 \Square
+Square
 \squarebotblack
-\SquareCastShadowBottomRight
 \SquareCastShadowTopLeft
 \SquareCastShadowTopRight
 \squarecrossfill
+\squaredarrow
 \squaredots
 \squarehfill
 \squarehvfill
@@ -9094,7 +11385,6 @@
 \squareurquad
 \squarevfill
 \squarewithdots
-\squeezer
 \squigarrowdownup
 \squigarrowleftright
 \squigarrownesw
@@ -9103,14 +11393,14 @@
 \squigarrowsenw
 \squigarrowswne
 \squigarrowupdown
+{squinting face with tongue}
 \squoval
 \squplus
+sr1kievan}
 \ss
 \SS
 \ssdtstile
 \ssearrow
-\sseven
-\ssix
 \sslash
 \ssststile
 \sststile
@@ -9117,9 +11407,11 @@
 \ssttstile
 \sswarrow
 \staccatissimo
+staccato}
 \stackengine
 \stackrel
 \star
+{star and crescent}
 \stareq
 \starlet
 \starletcross
@@ -9133,86 +11425,30 @@
 \starletlinev
 \starletlinevh
 \starofdavid
-\starredbullet
 \stater
 \Station
-\staveI
-\staveII
-\staveIII
-\staveIV
-\staveIX
+{Statue of Liberty}
 \staveL
-\staveLI
-\staveLII
-\staveLIII
-\staveLIV
-\staveLIX
-\staveLV
-\staveLVI
-\staveLVII
-\staveLVIII
-\staveLX
-\staveLXI
-\staveLXII
-\staveLXIII
-\staveLXIV
-\staveLXV
-\staveLXVI
-\staveLXVII
-\staveLXVIII
-\staveV
-\staveVI
-\staveVII
-\staveVIII
-\staveX
-\staveXI
-\staveXII
-\staveXIII
-\staveXIV
-\staveXIX
-\staveXL
-\staveXLI
-\staveXLII
-\staveXLIII
-\staveXLIV
-\staveXLIX
-\staveXLV
-\staveXLVI
-\staveXLVII
-\staveXLVIII
-\staveXV
-\staveXVI
-\staveXVII
-\staveXVIII
-\staveXX
-\staveXXI
-\staveXXII
-\staveXXIII
-\staveXXIV
-\staveXXIX
-\staveXXV
-\staveXXVI
-\staveXXVII
-\staveXXVIII
-\staveXXX
-\staveXXXI
-\staveXXXII
-\staveXXXIII
-\staveXXXIV
-\staveXXXIX
-\staveXXXV
-\staveXXXVI
-\staveXXXVII
-\staveXXXVIII
+stdbass}
 \stdtstile
 \steaming
-\sthree
+stem}
+stemstem}
+Stemstem
+stemstemstem}
+Stemstemstem
 \stigma
 \Stigma
 \StoneMan
-\Stopsign
-\StopWatchEnd
-\StopWatchStart
+stopped}
+straight}
+\straightlvecc
+\straightvecc
+\StrctFntSbset
+\StrctSbmap
+\StrctSbnch
+\StrctSbset
+\StrctWkSbnch
 \stress
 \Strichmaxerl
 \strictfi
@@ -9227,10 +11463,14 @@
 \StrokeThree
 \strokethrough
 \StrokeTwo
+Stroller
+stropha}
 \stst
 \stststile
 \sttstile
 \stttstile
+{studio microphone}
+{stuffed flatbread}
 \STX
 \SUB
 \subcorner
@@ -9255,6 +11495,7 @@
 \subsim
 \subsub
 \subsup
+\Suc
 \succ
 \Succ
 \succapprox
@@ -9268,6 +11509,7 @@
 \succnsim
 \succsim
 \suchthat
+\Sucq
 \sum
 \sumint
 \sumintsl
@@ -9277,9 +11519,13 @@
 \SummitSign
 \sun
 \Sun
+{sun behind cloud}
+{sun behind large cloud}
+{sun behind rain cloud}
+{sun behind small cloud}
 \SunCloud
+{sunrise over mountains}
 \SunshineOpenCircled
-\sup
 \supdsub
 \supedot
 \suphsol
@@ -9303,6 +11549,8 @@
 \surd
 \surface
 \SurveySign
+{suspension railway}
+\suum
 \svrexample
 \svrphoton
 \swarrow
@@ -9318,6 +11566,12 @@
 \swharpoonnw
 \swharpoonse
 \Switzerland
+\SWkEntail
+\SWkEntailEquv
+\SWkEquv
+\SWkImpl
+\SWkMtEquv
+\SWkMtImpl
 \swlcurvearrow
 \swlsquigarrow
 \swmapsto
@@ -9349,11 +11603,11 @@
 \symrook
 \symUE
 \SYN
+Systems
 \t
-t
 \T
-T
 \Tab
+tab_change}
 \tabcolsep
 \tachyon
 \taild
@@ -9367,10 +11621,7 @@
 \Takt
 \talloblong
 \tally
-\tan
-\tanh
 \Tape
-\Taschenuhr
 \tau
 \Tau
 \tauleptonminus
@@ -9388,10 +11639,13 @@
 \tdststile
 \tdtstile
 \tdttstile
+{teacup without handle}
 \Telefon
 \Telephone
+{telephone receiver}
 \Tent
 \tenuto
+tenuto}
 \terminus
 \terminus*
 \Terminus
@@ -9445,7 +11699,6 @@
 \textbigcircle
 \textbktailgamma
 \textblank
-\textblock
 \textborn
 \textbottomtiebar
 \textbraceleft
@@ -9510,8 +11763,6 @@
 \textdiscount
 \textdiv
 \textdivorced
-\textdkshade
-\textdnblock
 \textdollar
 \textdollaroldstyle
 \textdong
@@ -9610,6 +11861,7 @@
 \textkappa
 \textKappa
 \textknit
+\textknit{!}
 \textknit{"}
 \textknit{(}
 \textknit{)}
@@ -9618,6 +11870,8 @@
 \textknit{:}
 \textknit{;}
 \textknit{<}
+\textknit{=}
+\textknit{>}
 \textknit{@}
 \textknit{[}
 \textknit{]}
@@ -9675,7 +11929,6 @@
 \textleftarrow
 \textlengthmark
 \textless
-\textlfblock
 \textlfishhookrlig
 \textlhdbend
 \textlhookfour
@@ -9696,7 +11949,6 @@
 \textltailm
 \textltailn
 \textltilde
-\textltshade
 \textlyoghlig
 \textmarried
 \textmho
@@ -9807,7 +12059,6 @@
 \textrtails
 \textrtailt
 \textrtailz
-\textrtblock
 \textrthook
 \textrthooklong
 \textRubikUa
@@ -9842,47 +12093,6 @@
 \textsection
 \textservicemark
 \textsevenoldstyle
-\textSFi
-\textSFii
-\textSFiii
-\textSFiv
-\textSFix
-\textSFl
-\textSFli
-\textSFlii
-\textSFliii
-\textSFliv
-\textSFv
-\textSFvi
-\textSFvii
-\textSFviii
-\textSFx
-\textSFxi
-\textSFxix
-\textSFxl
-\textSFxli
-\textSFxlii
-\textSFxliii
-\textSFxliv
-\textSFxlix
-\textSFxlv
-\textSFxlvi
-\textSFxlvii
-\textSFxlviii
-\textSFxx
-\textSFxxi
-\textSFxxii
-\textSFxxiii
-\textSFxxiv
-\textSFxxv
-\textSFxxvi
-\textSFxxvii
-\textSFxxviii
-\textSFxxxix
-\textSFxxxvi
-\textSFxxxvii
-\textSFxxxviii
-\textshade
 \textsigma
 \textSigma
 \textsixoldstyle
@@ -9963,7 +12173,6 @@
 \textuncrfemale
 \textunderscore
 \textuparrow
-\textupblock
 \textupfullarrow
 \textupsilon
 \textUpsilon
@@ -9984,6 +12193,8 @@
 \textzerooldstyle
 \textzeta
 \textZeta
+\TFBoth
+\TFNone
 \th
 \TH
 \therefore
@@ -9996,14 +12207,12 @@
 \thickapprox
 \thicksim
 \thickvert
+Thin}
 \ThinFog
 \thinstar
 \third
 \thirtysecondNote
 \thirtysecondNoteDotted
-\thirtysecondNoteDottedDouble
-\thirtysecondNoteDottedDoubleDown
-\thirtysecondNoteDottedDown
 \thirtysecondNoteDown
 \ThisStyle
 \thorn
@@ -10015,16 +12224,356 @@
 \threedangle
 \threedotcolon
 \threesim
+\Thus
+\tiAdjustBrightness
+\tiAdjustContrast
+\tiAnchor
+\tiAnchorOutline
+\tiArchive
+\tiArrowBack
+\tiArrowBackOutline
+\tiArrowDown
+\tiArrowDownOutline
+\tiArrowDownThick
+\tiArrowForward
+\tiArrowForwardOutline
+\tiArrowLeft
+\tiArrowLeftOutline
+\tiArrowLeftThick
+\tiArrowLoop
+\tiArrowLoopOutline
+\tiArrowMaximise
+\tiArrowMaximiseOutline
+\tiArrowMinimise
+\tiArrowMinimiseOutline
+\tiArrowMove
+\tiArrowMoveOutline
+\tiArrowRepeat
+\tiArrowRepeatOutline
+\tiArrowRight
+\tiArrowRightOutline
+\tiArrowRightThick
+\tiArrowShuffle
+\tiArrowSortedDown
+\tiArrowSortedUp
+\tiArrowSync
+\tiArrowSyncOutline
+\tiArrowUnsorted
+\tiArrowUp
+\tiArrowUpOutline
+\tiArrowUpThick
+\tiAt
+\tiAttachment
+\tiAttachmentOutline
+\tiBackspace
+\tiBackspaceOutline
+\tiBatteryCharge
+\tiBatteryFull
+\tiBatteryHigh
+\tiBatteryLow
+\tiBatteryMid
+\tiBeaker
+\tiBeer
+\tiBell
+\tiBook
+\tiBookmark
+\tiBriefcase
+\tiBrush
+\tiBusinessCard
+\tiCalculator
+\tiCalendar
+\tiCalendarOutline
+\tiCamera
+\tiCameraOutline
+\tiCancel
+\tiCancelOutline
+\tiChartArea
+\tiChartAreaOutline
+\tiChartBar
+\tiChartBarOutline
+\tiChartLine
+\tiChartLineOutline
+\tiChartPie
+\tiChartPieOutline
+\tiChevronLeft
+\tiChevronLeftOutline
+\tiChevronRight
+\tiChevronRightOutline
+tickmark}
+\tiClipboard
+\tiCloudStorage
+\tiCloudStorageOutline
+\tiCode
+\tiCodeOutline
+\tiCoffee
+\tiCog
+\tiCogOutline
+\tiCompass
+\tiContacts
+\tiCreditCard
+\tiCss
+\tiDatabase
+\tiDelete
+\tiDeleteOutline
+\tiDeviceDesktop
+\tiDeviceLaptop
+\tiDevicePhone
+\tiDeviceTablet
+\tiDirections
+\tiDivide
+\tiDivideOutline
+\tiDocument
+\tiDocumentAdd
+\tiDocumentDelete
+\tiDocumentText
+\tiDownload
+\tiDownloadOutline
+\tiDropbox
+\tiEdit
 \tieinfty
+\tiEject
+\tiEjectOutline
+\tiEquals
+\tiEqualsOutline
+\tiExport
+\tiExportOutline
+\tiEye
+\tiEyeOutline
+\tiFeather
+\tiFilm
+\tiFilter
+\tiFlag
+\tiFlagOutline
+\tiFlash
+\tiFlashOutline
+\tiFlowChildren
+\tiFlowMerge
+\tiFlowParallel
+\tiFlowSwitch
+\tiFolder
+\tiFolderAdd
+\tiFolderDelete
+\tiFolderOpen
+\tiGift
+\tiGlobe
+\tiGlobeOutline
+\tiGroup
+\tiGroupOutline
+\tiHeadphones
+\tiHeart
+\tiHeartFullOutline
+\tiHeartHalfOutline
+\tiHeartOutline
+\tiHome
+\tiHomeOutline
+\tiHtml
+\tiImage
+\tiImageOutline
+\tiInfinity
+\tiInfinityOutline
+\tiInfo
+\tiInfoLarge
+\tiInfoLargeOutline
+\tiInfoOutline
+\tiInputChecked
+\tiInputCheckedOutline
+\tiKey
+\tiKeyboard
+\tiKeyOutline
+\Tild
 \tilde
 \tildel
-\timelimit
+\tiLeaf
+\tiLightbulb
+\tiLink
+\tiLinkOutline
+\tiLocation
+\tiLocationArrow
+\tiLocationArrowOutline
+\tiLocationOutline
+\tiLockClosed
+\tiLockClosedOutline
+\tiLockOpen
+\tiLockOpenOutline
+\tiMail
+\tiMap
+\tiMediaEject
+\tiMediaEjectOutline
+\tiMediaFastForward
+\tiMediaPause
+\tiMediaPauseOutline
+\tiMediaPlay
+\tiMediaPlayOutline
+\tiMediaPlayReverse
+\tiMediaRecord
+\tiMediaRecordOutline
+\tiMediaRewind
+\tiMediaRewindOutline
+\tiMediaStop
+\tiMediaStopOutline
 \times
+\Times
 \timesbar
+\tiMessage
+\tiMessages
+\tiMessageTyping
+\tiMicrophone
+\tiMicrophoneOutline
+\tiMinus
+\tiMinusOutline
+\tiMortarBoard
+\tiNews
+\tiNotes
+\tiNotesOutline
+\tiPen
+\tiPencil
+\tiPhone
+\tiPhoneOutline
+\tiPi
+\tiPin
+\tiPinOutline
+\tiPiOutline
+\tiPipette
+\tiPlane
+\tiPlaneOutline
+\tiPlug
+\tiPlus
+\tiPlusOutline
+\tiPointOfInterest
+\tiPointOfInterestOutline
+\tiPower
+\tiPowerOutline
+\tiPrinter
+\tiPuzzle
+\tiPuzzleOutline
+\tiRadar
+\tiRadarOutline
+\tiRefresh
+\tiRefreshOutline
+\tiRss
+\tiRssOutline
+\tiScissors
+\tiScissorsOutline
+\tiShoppingBag
+\tiShoppingCart
+\tiSocialAtCircular
+\tiSocialDribbble
+\tiSocialDribbbleCircular
+\tiSocialFacebook
+\tiSocialFacebookCircular
+\tiSocialFlickr
+\tiSocialFlickrCircular
+\tiSocialGithub
+\tiSocialGithubCircular
+\tiSocialGooglePlus
+\tiSocialInstagram
+\tiSocialLastFm
+\tiSocialLastFmCircular
+\tiSocialLinkedin
+\tiSocialLinkedinCircular
+\tiSocialPinterest
+\tiSocialSkype
+\tiSocialSkypeOutline
+\tiSocialTumbler
+\tiSocialTumblerCircular
+\tiSocialTwitter
+\tiSocialTwitterCircular
+\tiSocialVimeo
+\tiSocialVimeoCircular
+\tiSocialYoutube
+\tiSocialYoutubeCircular
+\tiSortAlphabetically
+\tiSortNumerically
+\tiSortNumericallyOutline
+\tiSpanner
+\tiSpannerOutline
+\tiSpiral
+\tiStar
+\tiStarburst
+\tiStarburstOutline
+\tiStarFullOutline
+\tiStarHalf
+\tiStarHalfOutline
+\tiStarOutline
+\tiStopwatch
+\tiSupport
+\tiTabsOutline
+\tiTag
+\tiTags
+\tiThermometer
+\tiThLarge
+\tiThLargeOutline
+\tiThList
+\tiThListOutline
+\tiThMenu
+\tiThMenuOutline
+\tiThSmall
+\tiThSmallOutline
+\tiThumbsDown
+\tiThumbsOk
+\tiThumbsUp
+\tiTick
+\tiTicket
+\tiTickOutline
+\tiTime
+\tiTimes
+\tiTimesOutline
+\tiTrash
+\tiTree
+\tiUpload
+\tiUploadOutline
+\tiUser
+\tiUserAdd
+\tiUserAddOutline
+\tiUserDelete
+\tiUserDeleteOutline
+\tiUserOutline
+\tiVendorAndroid
+\tiVendorApple
+\tiVendorMicrosoft
+\tiVideo
+\tiVideoOutline
+\tiVolume
+\tiVolumeDown
+\tiVolumeMute
+\tiVolumeUp
+\tiWarning
+\tiWarningOutline
+\tiWatch
+\tiWaves
+\tiWavesOutline
+\tiWeatherCloudy
+\tiWeatherDownpour
+\tiWeatherNight
+\tiWeatherPartlySunny
+\tiWeatherShower
+\tiWeatherSnow
+\tiWeatherStormy
+\tiWeatherSunny
+\tiWeatherWindy
+\tiWeatherWindyCloudy
+\tiWiFi
+\tiWiFiOutline
+\tiWine
+\tiWorld
+\tiWorldOutline
+\tiZoom
+\tiZoomIn
+\tiZoomInOutline
+\tiZoomOut
+\tiZoomOutline
+\tiZoomOutOutline
 \Tmesonminus
 \Tmesonnull
 \Tmesonplus
 \tminus
+\TmpCont
+\TmpFutr
+\TmpNec
+\TmpNext
+\TmpNonCont
+\TmpPast
+\TmpPos
 \tndtstile
 \tnststile
 \tntstile
@@ -10034,27 +12583,27 @@
 \toea
 \tona
 \tone
-\Tongey
 \top
+\Top
 \topborder
 \topbot
-\Topbottomheat
 \topcir
 \topdoteq
 \topfork
-\Topheat
 \topsemicircle
 \tosa
 \ToTop
 \towa
 \tplus
-\tr
-\TR
 \TransformHoriz
 \TransformVert
+{transgender flag}
+{transgender symbol}
 \trapezium
+Trash
 \trebleclef
 \triangle
+Triangle
 \trianglecdot
 \triangledown
 \TriangleDown
@@ -10122,11 +12671,17 @@
 \triangletimes
 \triangleubar
 \TriangleUp
+{triangular ruler}
 \Tribar
-\trident
+trilelement}
 \trill
+trill_element}
 \Trine
 \triple
+\triple<
+\triple>
+\triple[
+\triple]
 \triplebar
 \triplecovbond
 \triplecross
@@ -10134,14 +12689,14 @@
 \tripleeye
 \triplefrown
 \tripleplus
+\TripleQuote
 \triplesim
 \triplesmile
 \trprime
+\TrpTurn
 \trslash
-\tsbm
+\True
 \tsdtstile
-\tsmb
-\tsmm
 \tsststile
 \Tsteel
 \tststile
@@ -10154,11 +12709,14 @@
 \ttttstile
 \Tumbler
 \turn
+\Turn
 \turnangle
+\TurnDWavy
 \turnedbackneg
 \turnediota
 \turnedneg
 \turnednot
+\TurnWavy
 \TwelweStar
 \twemoji
 \twemoji{1f1e6}
@@ -10187,30 +12745,6 @@
 \twemoji{1f1fd}
 \twemoji{1f1fe}
 \twemoji{1f1ff}
-\twemoji{1f468-1f3fb-200d-1f384}
-\twemoji{1f468-1f3fc-200d-1f384}
-\twemoji{1f468-1f3fd-200d-1f384}
-\twemoji{1f468-1f3fe-200d-1f384}
-\twemoji{1f468-1f3ff-200d-1f384}
-\twemoji{1f468-200d-1f384}
-\twemoji{1f469-1f3fb-200d-1f384}
-\twemoji{1f469-1f3fc-200d-1f384}
-\twemoji{1f469-1f3fd-200d-1f384}
-\twemoji{1f469-1f3fe-200d-1f384}
-\twemoji{1f469-1f3ff-200d-1f384}
-\twemoji{1f469-200d-1f384}
-\twemoji{1f574-1f3fb-200d-2640-fe0f}
-\twemoji{1f574-1f3fb-200d-2642-fe0f}
-\twemoji{1f574-1f3fc-200d-2640-fe0f}
-\twemoji{1f574-1f3fc-200d-2642-fe0f}
-\twemoji{1f574-1f3fd-200d-2640-fe0f}
-\twemoji{1f574-1f3fd-200d-2642-fe0f}
-\twemoji{1f574-1f3fe-200d-2640-fe0f}
-\twemoji{1f574-1f3fe-200d-2642-fe0f}
-\twemoji{1f574-1f3ff-200d-2640-fe0f}
-\twemoji{1f574-1f3ff-200d-2642-fe0f}
-\twemoji{1f574-fe0f-200d-2640-fe0f}
-\twemoji{1f574-fe0f-200d-2642-fe0f}
 \twemoji{1f576}
 \twemoji{1f6cf}
 \twemoji{1f6f0}
@@ -10224,34 +12758,23 @@
 \twemoji{2nd place medal}
 \twemoji{3rd place medal}
 \twemoji{abacus}
-\twemoji{AB button (blood type)}
-\twemoji{A button (blood type)}
 \twemoji{accordion}
-\twemoji{adhesive bandage}
-\twemoji{admission tickets}
 \twemoji{aerial tramway}
 \twemoji{airplane}
-\twemoji{airplane arrival}
-\twemoji{airplane departure}
 \twemoji{alarm clock}
 \twemoji{alembic}
 \twemoji{alien}
 \twemoji{alien monster}
 \twemoji{ambulance}
-\twemoji{american football}
 \twemoji{amphora}
-\twemoji{anatomical heart}
 \twemoji{anchor}
 \twemoji{anger symbol}
 \twemoji{angry face}
-\twemoji{angry face with horns}
 \twemoji{anguished face}
 \twemoji{ant}
 \twemoji{antenna bars}
-\twemoji{anxious face with sweat}
 \twemoji{Aquarius}
 \twemoji{Aries}
-\twemoji{articulated lorry}
 \twemoji{artist}
 \twemoji{artist palette}
 \twemoji{astonished face}
@@ -10268,10 +12791,6 @@
 \twemoji{baby chick}
 \twemoji{baby symbol}
 \twemoji{BACK arrow}
-\twemoji{backhand index pointing down}
-\twemoji{backhand index pointing left}
-\twemoji{backhand index pointing right}
-\twemoji{backhand index pointing up}
 \twemoji{backpack}
 \twemoji{bacon}
 \twemoji{badger}
@@ -10283,7 +12802,6 @@
 \twemoji{bald}
 \twemoji{ballet shoes}
 \twemoji{balloon}
-\twemoji{ballot box with ballot}
 \twemoji{banana}
 \twemoji{banjo}
 \twemoji{bank}
@@ -10295,9 +12813,6 @@
 \twemoji{bat}
 \twemoji{bathtub}
 \twemoji{battery}
-\twemoji{B button (blood type)}
-\twemoji{beach with umbrella}
-\twemoji{beaming face with smiling eyes}
 \twemoji{bear}
 \twemoji{beating heart}
 \twemoji{beaver}
@@ -10320,12 +12835,7 @@
 \twemoji{black circle}
 \twemoji{black flag}
 \twemoji{black heart}
-\twemoji{black large square}
-\twemoji{black medium-small square}
-\twemoji{black medium square}
 \twemoji{black nib}
-\twemoji{black small square}
-\twemoji{black square button}
 \twemoji{blossom}
 \twemoji{blowfish}
 \twemoji{blueberries}
@@ -10340,7 +12850,6 @@
 \twemoji{bookmark tabs}
 \twemoji{books}
 \twemoji{boomerang}
-\twemoji{bottle with popping cork}
 \twemoji{bouquet}
 \twemoji{bow and arrow}
 \twemoji{bowling}
@@ -10364,20 +12873,16 @@
 \twemoji{bubble tea}
 \twemoji{bucket}
 \twemoji{bug}
-\twemoji{building construction}
 \twemoji{bullet train}
 \twemoji{bullseye}
 \twemoji{burrito}
 \twemoji{bus}
 \twemoji{bus stop}
-\twemoji{bust in silhouette}
-\twemoji{busts in silhouette}
 \twemoji{butter}
 \twemoji{butterfly}
 \twemoji{cactus}
 \twemoji{call me hand}
 \twemoji{camera}
-\twemoji{camera with flash}
 \twemoji{camping}
 \twemoji{Cancer}
 \twemoji{candle}
@@ -10387,7 +12892,6 @@
 \twemoji{Capricorn}
 \twemoji{card file box}
 \twemoji{card index}
-\twemoji{card index dividers}
 \twemoji{carousel horse}
 \twemoji{carpentry saw}
 \twemoji{carp streamer}
@@ -10395,16 +12899,9 @@
 \twemoji{castle}
 \twemoji{cat2}
 \twemoji{cat face}
-\twemoji{cat with tears of joy}
-\twemoji{cat with wry smile}
 \twemoji{chains}
 \twemoji{chair}
-\twemoji{chart decreasing}
-\twemoji{chart increasing}
-\twemoji{chart increasing with yen}
-\twemoji{check box with check}
 \twemoji{check mark}
-\twemoji{check mark button}
 \twemoji{cheese wedge}
 \twemoji{chequered flag}
 \twemoji{cherries}
@@ -10413,7 +12910,6 @@
 \twemoji{chestnut}
 \twemoji{chicken}
 \twemoji{child}
-\twemoji{children crossing}
 \twemoji{chipmunk}
 \twemoji{chocolate bar}
 \twemoji{chopsticks}
@@ -10424,23 +12920,14 @@
 \twemoji{circled M}
 \twemoji{circus tent}
 \twemoji{cityscape}
-\twemoji{cityscape at dusk}
 \twemoji{clamp}
 \twemoji{clapper board}
 \twemoji{clapping hands}
-\twemoji{classical building}
 \twemoji{CL button}
-\twemoji{clinking beer mugs}
-\twemoji{clinking glasses}
 \twemoji{clipboard}
-\twemoji{clockwise vertical arrows}
 \twemoji{closed book}
-\twemoji{closed mailbox with lowered flag}
-\twemoji{closed mailbox with raised flag}
 \twemoji{closed umbrella}
 \twemoji{cloud}
-\twemoji{cloud with lightning}
-\twemoji{cloud with lightning and rain}
 \twemoji{cloud with rain}
 \twemoji{cloud with snow}
 \twemoji{clown face}
@@ -10463,9 +12950,7 @@
 \twemoji{confounded face}
 \twemoji{confused face}
 \twemoji{construction}
-\twemoji{construction worker}
 \twemoji{control knobs}
-\twemoji{convenience store}
 \twemoji{cook}
 \twemoji{cooked rice}
 \twemoji{cookie}
@@ -10473,9 +12958,7 @@
 \twemoji{COOL button}
 \twemoji{copyright}
 \twemoji{couch and lamp}
-\twemoji{counterclockwise arrows button}
 \twemoji{couplekiss}
-\twemoji{couple with heart}
 \twemoji{cow2}
 \twemoji{cowboy hat face}
 \twemoji{cow face}
@@ -10491,7 +12974,6 @@
 \twemoji{crossed flags}
 \twemoji{crossed swords}
 \twemoji{cross mark}
-\twemoji{cross mark button}
 \twemoji{crown}
 \twemoji{crying cat}
 \twemoji{crying face}
@@ -10502,7 +12984,6 @@
 \twemoji{curling stone}
 \twemoji{curly hair}
 \twemoji{curly loop}
-\twemoji{currency exchange}
 \twemoji{curry rice}
 \twemoji{custard}
 \twemoji{customs}
@@ -10519,16 +13000,12 @@
 \twemoji{deciduous tree}
 \twemoji{deer}
 \twemoji{delivery truck}
-\twemoji{department store}
 \twemoji{derelict house}
 \twemoji{desert}
 \twemoji{desert island}
-\twemoji{desktop computer}
 \twemoji{detective}
 \twemoji{diamond suit}
-\twemoji{diamond with a dot}
 \twemoji{dim button}
-\twemoji{disappointed face}
 \twemoji{disguised face}
 \twemoji{divide}
 \twemoji{diving mask}
@@ -10541,20 +13018,14 @@
 \twemoji{dollar banknote}
 \twemoji{dolphin}
 \twemoji{door}
-\twemoji{dotted six-pointed star}
-\twemoji{double curly loop}
-\twemoji{double exclamation mark}
 \twemoji{doughnut}
 \twemoji{dove}
 \twemoji{down arrow}
-\twemoji{downcast face with sweat}
 \twemoji{down-left arrow}
-\twemoji{down-right arrow}
-\twemoji{downwards button}
 \twemoji{dragon}
 \twemoji{dragon face}
 \twemoji{dress}
-\twemoji{dromedary\_camel}
+\twemoji{dromedary camel}
 \twemoji{drooling face}
 \twemoji{droplet}
 \twemoji{drop of blood}
@@ -10566,12 +13037,9 @@
 \twemoji{eagle}
 \twemoji{ear}
 \twemoji{ear of corn}
-\twemoji{ear with hearing aid}
 \twemoji{egg}
 \twemoji{eggplant}
 \twemoji{eight o'clock}
-\twemoji{eight-pointed star}
-\twemoji{eight-spoked asterisk}
 \twemoji{eight-thirty}
 \twemoji{eject button}
 \twemoji{electric plug}
@@ -10583,33 +13051,13 @@
 \twemoji{e-mail}
 \twemoji{END arrow}
 \twemoji{envelope}
-\twemoji{envelope with arrow}
 \twemoji{euro banknote}
 \twemoji{evergreen tree}
-\twemoji{exclamation question mark}
 \twemoji{exploding head}
-\twemoji{expressionless face}
 \twemoji{eye}
 \twemoji{eyeglasses}
-\twemoji{eye in speech bubble}
 \twemoji{eyes}
-\twemoji{face blowing a kiss}
-\twemoji{face savoring food}
-\twemoji{face screaming in fear}
 \twemoji{face vomiting}
-\twemoji{face with hand over mouth}
-\twemoji{face with head-bandage}
-\twemoji{face with medical mask}
-\twemoji{face with monocle}
-\twemoji{face with open mouth}
-\twemoji{face without mouth}
-\twemoji{face with raised eyebrow}
-\twemoji{face with rolling eyes}
-\twemoji{face with steam from nose}
-\twemoji{face with symbols on mouth}
-\twemoji{face with tears of joy}
-\twemoji{face with thermometer}
-\twemoji{face with tongue}
 \twemoji{factory}
 \twemoji{factory worker}
 \twemoji{fairy}
@@ -10617,9 +13065,6 @@
 \twemoji{fallen leaf}
 \twemoji{family}
 \twemoji{farmer}
-\twemoji{fast down button}
-\twemoji{fast-forward button}
-\twemoji{fast reverse button}
 \twemoji{fast up button}
 \twemoji{fax machine}
 \twemoji{fearful face}
@@ -10635,36 +13080,24 @@
 \twemoji{fire}
 \twemoji{firecracker}
 \twemoji{fire engine}
-\twemoji{fire extinguisher}
 \twemoji{firefighter}
 \twemoji{fireworks}
-\twemoji{first quarter moon}
-\twemoji{first quarter moon face}
 \twemoji{fish}
-\twemoji{fish cake with swirl}
 \twemoji{fishing pole}
 \twemoji{five o'clock}
 \twemoji{five-thirty}
-\twemoji{flag: Afghanistan}
-\twemoji{flag: Åland Islands}
 \twemoji{flag: Albania}
 \twemoji{flag: Algeria}
-\twemoji{flag: American Samoa}
 \twemoji{flag: Andorra}
 \twemoji{flag: Angola}
 \twemoji{flag: Anguilla}
-\twemoji{flag: Antarctica}
-\twemoji{flag: Antigua \& Barbuda}
 \twemoji{flag: Argentina}
 \twemoji{flag: Armenia}
 \twemoji{flag: Aruba}
-\twemoji{flag: Ascension Island}
 \twemoji{flag: Australia}
 \twemoji{flag: Austria}
-\twemoji{flag: Azerbaijan}
 \twemoji{flag: Bahamas}
 \twemoji{flag: Bahrain}
-\twemoji{flag: Bangladesh}
 \twemoji{flag: Barbados}
 \twemoji{flag: Belarus}
 \twemoji{flag: Belgium}
@@ -10673,38 +13106,19 @@
 \twemoji{flag: Bermuda}
 \twemoji{flag: Bhutan}
 \twemoji{flag: Bolivia}
-\twemoji{flag: Bosnia \& Herzegovina}
 \twemoji{flag: Botswana}
-\twemoji{flag: Bouvet Island}
 \twemoji{flag: Brazil}
-\twemoji{flag: British Indian Ocean Territory}
-\twemoji{flag: British Virgin Islands}
 \twemoji{flag: Brunei}
 \twemoji{flag: Bulgaria}
-\twemoji{flag: Burkina Faso}
 \twemoji{flag: Burundi}
 \twemoji{flag: Cambodia}
 \twemoji{flag: Cameroon}
 \twemoji{flag: Canada}
-\twemoji{flag: Canary Islands}
-\twemoji{flag: Cape Verde}
-\twemoji{flag: Caribbean Netherlands}
-\twemoji{flag: Cayman Islands}
-\twemoji{flag: Central African Republic}
-\twemoji{flag: Ceuta \& Melilla}
 \twemoji{flag: Chad}
 \twemoji{flag: Chile}
 \twemoji{flag: China}
-\twemoji{flag: Christmas Island}
-\twemoji{flag: Clipperton Island}
-\twemoji{flag: Cocos (Keeling) Islands}
 \twemoji{flag: Colombia}
 \twemoji{flag: Comoros}
-\twemoji{flag: Congo - Brazzaville}
-\twemoji{flag: Congo - Kinshasa}
-\twemoji{flag: Cook Islands}
-\twemoji{flag: Costa Rica}
-\twemoji{flag: Côte d'Ivoire}
 \twemoji{flag: Croatia}
 \twemoji{flag: Cuba}
 \twemoji{flag: Curaçao}
@@ -10711,28 +13125,18 @@
 \twemoji{flag: Cyprus}
 \twemoji{flag: Czechia}
 \twemoji{flag: Denmark}
-\twemoji{flag: Diego Garcia}
 \twemoji{flag: Djibouti}
 \twemoji{flag: Dominica}
-\twemoji{flag: Dominican Republic}
 \twemoji{flag: Ecuador}
 \twemoji{flag: Egypt}
-\twemoji{flag: El Salvador}
 \twemoji{flag: England}
-\twemoji{flag: Equatorial Guinea}
 \twemoji{flag: Eritrea}
 \twemoji{flag: Estonia}
 \twemoji{flag: Eswatini}
 \twemoji{flag: Ethiopia}
-\twemoji{flag: European Union}
-\twemoji{flag: Falkland Islands}
-\twemoji{flag: Faroe Islands}
 \twemoji{flag: Fiji}
 \twemoji{flag: Finland}
 \twemoji{flag: France}
-\twemoji{flag: French Guiana}
-\twemoji{flag: French Polynesia}
-\twemoji{flag: French Southern Territories}
 \twemoji{flag: Gabon}
 \twemoji{flag: Gambia}
 \twemoji{flag: Georgia}
@@ -10742,17 +13146,13 @@
 \twemoji{flag: Greece}
 \twemoji{flag: Greenland}
 \twemoji{flag: Grenada}
-\twemoji{flag: Guadeloupe}
 \twemoji{flag: Guam}
 \twemoji{flag: Guatemala}
 \twemoji{flag: Guernsey}
 \twemoji{flag: Guinea}
-\twemoji{flag: Guinea-Bissau}
 \twemoji{flag: Guyana}
 \twemoji{flag: Haiti}
-\twemoji{flag: Heard \& McDonald Islands}
 \twemoji{flag: Honduras}
-\twemoji{flag: Hong Kong SAR China}
 \twemoji{flag: Hungary}
 \twemoji{flag: Iceland}
 \twemoji{flag: India}
@@ -10761,7 +13161,6 @@
 \twemoji{flag: Iran}
 \twemoji{flag: Iraq}
 \twemoji{flag: Ireland}
-\twemoji{flag: Isle of Man}
 \twemoji{flag: Israel}
 \twemoji{flag: Italy}
 \twemoji{flag: Jamaica}
@@ -10768,12 +13167,10 @@
 \twemoji{flag: Japan}
 \twemoji{flag: Jersey}
 \twemoji{flag: Jordan}
-\twemoji{flag: Kazakhstan}
 \twemoji{flag: Kenya}
 \twemoji{flag: Kiribati}
 \twemoji{flag: Kosovo}
 \twemoji{flag: Kuwait}
-\twemoji{flag: Kyrgyzstan}
 \twemoji{flag: Laos}
 \twemoji{flag: Latvia}
 \twemoji{flag: Lebanon}
@@ -10780,59 +13177,35 @@
 \twemoji{flag: Lesotho}
 \twemoji{flag: Liberia}
 \twemoji{flag: Libya}
-\twemoji{flag: Liechtenstein}
 \twemoji{flag: Lithuania}
-\twemoji{flag: Luxembourg}
-\twemoji{flag: Macao SAR China}
-\twemoji{flag: Madagascar}
 \twemoji{flag: Malawi}
 \twemoji{flag: Malaysia}
 \twemoji{flag: Maldives}
 \twemoji{flag: Mali}
 \twemoji{flag: Malta}
-\twemoji{flag: Marshall Islands}
-\twemoji{flag: Martinique}
-\twemoji{flag: Mauritania}
 \twemoji{flag: Mauritius}
 \twemoji{flag: Mayotte}
 \twemoji{flag: Mexico}
-\twemoji{flag: Micronesia}
 \twemoji{flag: Moldova}
 \twemoji{flag: Monaco}
 \twemoji{flag: Mongolia}
-\twemoji{flag: Montenegro}
-\twemoji{flag: Montserrat}
 \twemoji{flag: Morocco}
-\twemoji{flag: Mozambique}
-\twemoji{flag: Myanmar (Burma)}
 \twemoji{flag: Namibia}
 \twemoji{flag: Nauru}
 \twemoji{flag: Nepal}
-\twemoji{flag: Netherlands}
-\twemoji{flag: New Caledonia}
-\twemoji{flag: New Zealand}
 \twemoji{flag: Nicaragua}
 \twemoji{flag: Niger}
 \twemoji{flag: Nigeria}
 \twemoji{flag: Niue}
-\twemoji{flag: Norfolk Island}
-\twemoji{flag: Northern Mariana Islands}
-\twemoji{flag: North Korea}
-\twemoji{flag: North Macedonia}
 \twemoji{flag: Norway}
 \twemoji{flag: Oman}
 \twemoji{flag: Pakistan}
 \twemoji{flag: Palau}
-\twemoji{flag: Palestinian Territories}
 \twemoji{flag: Panama}
-\twemoji{flag: Papua New Guinea}
 \twemoji{flag: Paraguay}
 \twemoji{flag: Peru}
-\twemoji{flag: Philippines}
-\twemoji{flag: Pitcairn Islands}
 \twemoji{flag: Poland}
 \twemoji{flag: Portugal}
-\twemoji{flag: Puerto Rico}
 \twemoji{flag: Qatar}
 \twemoji{flag: Réunion}
 \twemoji{flag: Romania}
@@ -10839,71 +13212,36 @@
 \twemoji{flag: Russia}
 \twemoji{flag: Rwanda}
 \twemoji{flag: Samoa}
-\twemoji{flag: San Marino}
-\twemoji{flag: São Tomé \& Príncipe}
-\twemoji{flag: Saudi Arabia}
 \twemoji{flag: Scotland}
 \twemoji{flag: Senegal}
 \twemoji{flag: Serbia}
-\twemoji{flag: Seychelles}
-\twemoji{flag: Sierra Leone}
 \twemoji{flag: Singapore}
-\twemoji{flag: Sint Maarten}
 \twemoji{flag: Slovakia}
 \twemoji{flag: Slovenia}
-\twemoji{flag: Solomon Islands}
 \twemoji{flag: Somalia}
-\twemoji{flag: South Africa}
-\twemoji{flag: South Georgia \& South Sandwich Islands}
-\twemoji{flag: South Korea}
-\twemoji{flag: South Sudan}
 \twemoji{flag: Spain}
 \twemoji{flag: Sri Lanka}
-\twemoji{flag: St. Barthélemy}
-\twemoji{flag: St. Helena}
-\twemoji{flag: St. Kitts \& Nevis}
 \twemoji{flag: St. Lucia}
-\twemoji{flag: St. Martin}
-\twemoji{flag: St. Pierre \& Miquelon}
-\twemoji{flag: St. Vincent \& Grenadines}
 \twemoji{flag: Sudan}
 \twemoji{flag: Suriname}
-\twemoji{flag: Svalbard \& Jan Mayen}
 \twemoji{flag: Sweden}
-\twemoji{flag: Switzerland}
 \twemoji{flag: Syria}
 \twemoji{flag: Taiwan}
-\twemoji{flag: Tajikistan}
 \twemoji{flag: Tanzania}
 \twemoji{flag: Thailand}
-\twemoji{flag: Timor-Leste}
 \twemoji{flag: Togo}
 \twemoji{flag: Tokelau}
 \twemoji{flag: Tonga}
-\twemoji{flag: Trinidad \& Tobago}
-\twemoji{flag: Tristan da Cunha}
 \twemoji{flag: Tunisia}
 \twemoji{flag: Turkey}
-\twemoji{flag: Turkmenistan}
-\twemoji{flag: Turks \& Caicos Islands}
 \twemoji{flag: Tuvalu}
 \twemoji{flag: Uganda}
 \twemoji{flag: Ukraine}
-\twemoji{flag: United Arab Emirates}
-\twemoji{flag: United Kingdom}
-\twemoji{flag: United Nations}
-\twemoji{flag: United States}
 \twemoji{flag: Uruguay}
-\twemoji{flag: U.S. Outlying Islands}
-\twemoji{flag: U.S. Virgin Islands}
-\twemoji{flag: Uzbekistan}
 \twemoji{flag: Vanuatu}
-\twemoji{flag: Vatican City}
 \twemoji{flag: Venezuela}
 \twemoji{flag: Vietnam}
 \twemoji{flag: Wales}
-\twemoji{flag: Wallis \& Futuna}
-\twemoji{flag: Western Sahara}
 \twemoji{flag: Yemen}
 \twemoji{flag: Zambia}
 \twemoji{flag: Zimbabwe}
@@ -10914,7 +13252,6 @@
 \twemoji{fleur-de-lis}
 \twemoji{flexed biceps}
 \twemoji{floppy disk}
-\twemoji{flower playing cards}
 \twemoji{flushed face}
 \twemoji{fly}
 \twemoji{flying disc}
@@ -10926,11 +13263,9 @@
 \twemoji{foot}
 \twemoji{footprints}
 \twemoji{fork and knife}
-\twemoji{fork and knife with plate}
 \twemoji{fortune cookie}
 \twemoji{fountain}
 \twemoji{fountain pen}
-\twemoji{four leaf clover}
 \twemoji{four o'clock}
 \twemoji{four-thirty}
 \twemoji{fox}
@@ -10939,9 +13274,7 @@
 \twemoji{french fries}
 \twemoji{fried shrimp}
 \twemoji{frog}
-\twemoji{front-facing baby chick}
 \twemoji{frowning face}
-\twemoji{frowning face with open mouth}
 \twemoji{fuel pump}
 \twemoji{full moon}
 \twemoji{full moon face}
@@ -10956,10 +13289,6 @@
 \twemoji{giraffe}
 \twemoji{girl}
 \twemoji{glass of milk}
-\twemoji{globe showing Americas}
-\twemoji{globe showing Asia-Australia}
-\twemoji{globe showing Europe-Africa}
-\twemoji{globe with meridians}
 \twemoji{gloves}
 \twemoji{glowing star}
 \twemoji{goal net}
@@ -10977,12 +13306,7 @@
 \twemoji{green square}
 \twemoji{grimacing face}
 \twemoji{grinning cat}
-\twemoji{grinning cat with smiling eyes}
 \twemoji{grinning face}
-\twemoji{grinning face with big eyes}
-\twemoji{grinning face with smiling eyes}
-\twemoji{grinning face with sweat}
-\twemoji{grinning squinting face}
 \twemoji{growing heart}
 \twemoji{guard}
 \twemoji{guide dog}
@@ -10990,38 +13314,26 @@
 \twemoji{hamburger}
 \twemoji{hammer}
 \twemoji{hammer and pick}
-\twemoji{hammer and wrench}
 \twemoji{hamster}
 \twemoji{handbag}
 \twemoji{handshake}
-\twemoji{hand with fingers splayed}
 \twemoji{hatching chick}
 \twemoji{headphones}
 \twemoji{headstone}
 \twemoji{health worker}
-\twemoji{hear-no-evil monkey}
-\twemoji{heart decoration}
-\twemoji{heart exclamation}
 \twemoji{heart suit}
-\twemoji{heart with arrow}
-\twemoji{heart with ribbon}
-\twemoji{heavy dollar sign}
 \twemoji{hedgehog}
 \twemoji{helicopter}
 \twemoji{herb}
 \twemoji{hibiscus}
-\twemoji{high-heeled shoe}
-\twemoji{high-speed train}
 \twemoji{high voltage}
 \twemoji{hiking boot}
 \twemoji{hindu temple}
 \twemoji{hippopotamus}
 \twemoji{hole}
-\twemoji{hollow red circle}
 \twemoji{honeybee}
 \twemoji{honey pot}
 \twemoji{hook}
-\twemoji{horizontal traffic light}
 \twemoji{horse face}
 \twemoji{horse racing}
 \twemoji{hospital}
@@ -11032,10 +13344,8 @@
 \twemoji{hot pepper}
 \twemoji{hot springs}
 \twemoji{hourglass done}
-\twemoji{hourglass not done}
 \twemoji{house}
 \twemoji{houses}
-\twemoji{house with garden}
 \twemoji{hugging face}
 \twemoji{hundred points}
 \twemoji{hushed face}
@@ -11046,37 +13356,13 @@
 \twemoji{ice skate}
 \twemoji{ID button}
 \twemoji{inbox tray}
-\twemoji{incoming envelope}
-\twemoji{index pointing up}
 \twemoji{infinity}
 \twemoji{information}
-\twemoji{input latin letters}
-\twemoji{input latin lowercase}
-\twemoji{input latin uppercase}
 \twemoji{input numbers}
 \twemoji{input symbols}
 \twemoji{jack-o-lantern}
-\twemoji{Japanese ``acceptable'' button}
-\twemoji{Japanese ``application'' button}
-\twemoji{Japanese ``bargain'' button}
 \twemoji{Japanese castle}
-\twemoji{Japanese ``congratulations'' button}
-\twemoji{Japanese ``discount'' button}
 \twemoji{Japanese dolls}
-\twemoji{Japanese ``free of charge'' button}
-\twemoji{Japanese ``here'' button}
-\twemoji{Japanese ``monthly amount'' button}
-\twemoji{Japanese ``not free of charge'' button}
-\twemoji{Japanese ``no vacancy'' button}
-\twemoji{Japanese ``open for business'' button}
-\twemoji{Japanese ``passing grade'' button}
-\twemoji{Japanese post office}
-\twemoji{Japanese ``prohibited'' button}
-\twemoji{Japanese ``reserved'' button}
-\twemoji{Japanese ``secret'' button}
-\twemoji{Japanese ``service charge'' button}
-\twemoji{Japanese symbol for beginner}
-\twemoji{Japanese ``vacancy'' button}
 \twemoji{jeans}
 \twemoji{joker}
 \twemoji{joystick}
@@ -11103,12 +13389,9 @@
 \twemoji{kiss}
 \twemoji{kissing cat}
 \twemoji{kissing face}
-\twemoji{kissing face with closed eyes}
-\twemoji{kissing face with smiling eyes}
 \twemoji{kitchen knife}
 \twemoji{kite}
 \twemoji{kiwi fruit}
-\twemoji{knocked-out face}
 \twemoji{knot}
 \twemoji{koala}
 \twemoji{lab coat}
@@ -11116,21 +13399,11 @@
 \twemoji{lacrosse}
 \twemoji{ladder}
 \twemoji{lady beetle}
-\twemoji{large blue diamond}
-\twemoji{large orange diamond}
-\twemoji{last quarter moon}
-\twemoji{last quarter moon face}
-\twemoji{last track button}
 \twemoji{latin cross}
-\twemoji{leaf fluttering in wind}
 \twemoji{leafy green}
 \twemoji{ledger}
 \twemoji{left arrow}
-\twemoji{left arrow curving right}
-\twemoji{left-facing fist}
 \twemoji{left luggage}
-\twemoji{left-right arrow}
-\twemoji{left speech bubble}
 \twemoji{leg}
 \twemoji{lemon}
 \twemoji{Leo}
@@ -11141,10 +13414,8 @@
 \twemoji{light rail}
 \twemoji{light skin tone}
 \twemoji{link}
-\twemoji{linked paperclips}
 \twemoji{lion}
 \twemoji{lipstick}
-\twemoji{litter in bin sign}
 \twemoji{lizard}
 \twemoji{llama}
 \twemoji{lobster}
@@ -11155,11 +13426,9 @@
 \twemoji{lollipop}
 \twemoji{long drum}
 \twemoji{lotion bottle}
-\twemoji{loudly crying face}
 \twemoji{loudspeaker}
 \twemoji{love hotel}
 \twemoji{love letter}
-\twemoji{love-you gesture}
 \twemoji{luggage}
 \twemoji{lungs}
 \twemoji{lying face}
@@ -11166,9 +13435,6 @@
 \twemoji{mage}
 \twemoji{magic wand}
 \twemoji{magnet}
-\twemoji{magnifying glass tilted left}
-\twemoji{magnifying glass tilted right}
-\twemoji{mahjong red dragon}
 \twemoji{male sign}
 \twemoji{mammoth}
 \twemoji{man}
@@ -11175,50 +13441,29 @@
 \twemoji{man artist}
 \twemoji{man astronaut}
 \twemoji{man biking}
-\twemoji{man bouncing ball}
 \twemoji{man bowing}
-\twemoji{man cartwheeling}
 \twemoji{man climbing}
-\twemoji{man construction worker}
 \twemoji{man cook}
 \twemoji{man dancing}
 \twemoji{man detective}
 \twemoji{man elf}
 \twemoji{man facepalming}
-\twemoji{man factory worker}
 \twemoji{man fairy}
 \twemoji{man farmer}
-\twemoji{man feeding baby}
 \twemoji{man firefighter}
 \twemoji{man frowning}
 \twemoji{man genie}
-\twemoji{man gesturing NO}
-\twemoji{man gesturing OK}
-\twemoji{man getting haircut}
-\twemoji{man getting massage}
 \twemoji{mango}
 \twemoji{man golfing}
 \twemoji{man guard}
-\twemoji{man health worker}
-\twemoji{man in lotus position}
-\twemoji{man in manual wheelchair}
-\twemoji{man in motorized wheelchair}
-\twemoji{man in steamy room}
 \twemoji{man in tuxedo}
 \twemoji{man judge}
 \twemoji{man juggling}
 \twemoji{man kneeling}
-\twemoji{man lifting weights}
 \twemoji{man mage}
 \twemoji{man mechanic}
-\twemoji{man mountain biking}
-\twemoji{man office worker}
 \twemoji{man pilot}
-\twemoji{man playing handball}
-\twemoji{man playing water polo}
-\twemoji{man police officer}
 \twemoji{man pouting}
-\twemoji{man raising hand}
 \twemoji{man rowing boat}
 \twemoji{man running}
 \twemoji{man scientist}
@@ -11228,23 +13473,15 @@
 \twemoji{man standing}
 \twemoji{man student}
 \twemoji{man superhero}
-\twemoji{man supervillain}
 \twemoji{man surfing}
 \twemoji{man swimming}
 \twemoji{man teacher}
-\twemoji{man technologist}
-\twemoji{mantelpiece clock}
-\twemoji{man tipping hand}
-\twemoji{manual wheelchair}
 \twemoji{man vampire}
 \twemoji{man walking}
-\twemoji{man wearing turban}
 \twemoji{man with veil}
-\twemoji{man with white cane}
 \twemoji{man zombie}
 \twemoji{maple leaf}
 \twemoji{map of Japan}
-\twemoji{martial arts uniform}
 \twemoji{mate}
 \twemoji{meat on bone}
 \twemoji{mechanic}
@@ -11251,15 +13488,10 @@
 \twemoji{mechanical arm}
 \twemoji{mechanical leg}
 \twemoji{medical symbol}
-\twemoji{medium-dark skin tone}
-\twemoji{medium-light skin tone}
-\twemoji{medium skin tone}
 \twemoji{megaphone}
 \twemoji{melon}
-\twemoji{men holding hands}
 \twemoji{menorah}
 \twemoji{men's room}
-\twemoji{men with bunny ears}
 \twemoji{men wrestling}
 \twemoji{mermaid}
 \twemoji{merman}
@@ -11276,26 +13508,18 @@
 \twemoji{minus}
 \twemoji{mirror}
 \twemoji{mobile phone}
-\twemoji{mobile phone off}
-\twemoji{mobile phone with arrow}
 \twemoji{money bag}
-\twemoji{money-mouth face}
-\twemoji{money with wings}
 \twemoji{monkey}
 \twemoji{monkey face}
 \twemoji{monorail}
 \twemoji{moon cake}
-\twemoji{moon viewing ceremony}
 \twemoji{mosque}
 \twemoji{mosquito}
 \twemoji{motor boat}
 \twemoji{motorcycle}
-\twemoji{motorized wheelchair}
 \twemoji{motor scooter}
 \twemoji{motorway}
 \twemoji{mountain}
-\twemoji{mountain cableway}
-\twemoji{mountain railway}
 \twemoji{mount fuji}
 \twemoji{mouse2}
 \twemoji{mouse face}
@@ -11306,7 +13530,6 @@
 \twemoji{Mrs. Claus}
 \twemoji{multiply}
 \twemoji{mushroom}
-\twemoji{musical keyboard}
 \twemoji{musical note}
 \twemoji{musical notes}
 \twemoji{musical score}
@@ -11325,9 +13548,7 @@
 \twemoji{new moon}
 \twemoji{new moon face}
 \twemoji{newspaper}
-\twemoji{next track button}
 \twemoji{NG button}
-\twemoji{night with stars}
 \twemoji{nine o'clock}
 \twemoji{nine-thirty}
 \twemoji{ninja}
@@ -11334,16 +13555,11 @@
 \twemoji{no bicycles}
 \twemoji{no entry}
 \twemoji{no littering}
-\twemoji{no mobile phones}
-\twemoji{non-potable water}
-\twemoji{no one under eighteen}
 \twemoji{no pedestrians}
 \twemoji{nose}
 \twemoji{no smoking}
 \twemoji{notebook}
-\twemoji{notebook with decorative cover}
 \twemoji{nut and bolt}
-\twemoji{O button (blood type)}
 \twemoji{octopus}
 \twemoji{oden}
 \twemoji{office building}
@@ -11358,21 +13574,15 @@
 \twemoji{old woman}
 \twemoji{olive}
 \twemoji{om}
-\twemoji{ON arrow}
-\twemoji{oncoming automobile}
+\twemoji{ON! arrow}
 \twemoji{oncoming bus}
 \twemoji{oncoming fist}
-\twemoji{oncoming police car}
 \twemoji{oncoming taxi}
 \twemoji{one o'clock}
-\twemoji{one-piece swimsuit}
 \twemoji{one-thirty}
 \twemoji{onion}
 \twemoji{open book}
-\twemoji{open file folder}
 \twemoji{open hands}
-\twemoji{open mailbox with lowered flag}
-\twemoji{open mailbox with raised flag}
 \twemoji{Ophiuchus}
 \twemoji{optical disk}
 \twemoji{orange book}
@@ -11391,7 +13601,6 @@
 \twemoji{pager}
 \twemoji{page with curl}
 \twemoji{paintbrush}
-\twemoji{palms up together}
 \twemoji{palm tree}
 \twemoji{pancakes}
 \twemoji{panda}
@@ -11398,11 +13607,9 @@
 \twemoji{paperclip}
 \twemoji{parachute}
 \twemoji{parrot}
-\twemoji{part alternation mark}
 \twemoji{partying face}
 \twemoji{party popper}
 \twemoji{passenger ship}
-\twemoji{passport control}
 \twemoji{pause button}
 \twemoji{paw prints}
 \twemoji{P button}
@@ -11415,55 +13622,24 @@
 \twemoji{pencil}
 \twemoji{penguin}
 \twemoji{pensive face}
-\twemoji{people holding hands}
 \twemoji{people hugging}
-\twemoji{people with bunny ears}
-\twemoji{people wrestling}
 \twemoji{performing arts}
-\twemoji{persevering face}
 \twemoji{person}
 \twemoji{person biking}
-\twemoji{person bouncing ball}
 \twemoji{person bowing}
-\twemoji{person cartwheeling}
 \twemoji{person climbing}
-\twemoji{person facepalming}
-\twemoji{person feeding baby}
 \twemoji{person fencing}
 \twemoji{person frowning}
-\twemoji{person gesturing NO}
-\twemoji{person gesturing OK}
-\twemoji{person getting haircut}
-\twemoji{person getting massage}
 \twemoji{person golfing}
 \twemoji{person in bed}
-\twemoji{person in lotus position}
-\twemoji{person in manual wheelchair}
-\twemoji{person in motorized wheelchair}
-\twemoji{person in steamy room}
-\twemoji{person in suit levitating}
-\twemoji{person in tuxedo}
 \twemoji{person juggling}
 \twemoji{person kneeling}
-\twemoji{person lifting weights}
-\twemoji{person mountain biking}
-\twemoji{person playing handball}
-\twemoji{person playing water polo}
 \twemoji{person pouting}
-\twemoji{person raising hand}
-\twemoji{person rowing boat}
 \twemoji{person running}
-\twemoji{person shrugging}
 \twemoji{person standing}
 \twemoji{person surfing}
 \twemoji{person swimming}
-\twemoji{person taking bath}
-\twemoji{person tipping hand}
 \twemoji{person walking}
-\twemoji{person wearing turban}
-\twemoji{person with skullcap}
-\twemoji{person with veil}
-\twemoji{person with white cane}
 \twemoji{petri dish}
 \twemoji{pick}
 \twemoji{pickup truck}
@@ -11484,15 +13660,12 @@
 \twemoji{Pisces}
 \twemoji{pizza}
 \twemoji{placard}
-\twemoji{place of worship}
 \twemoji{play button}
-\twemoji{play or pause button}
 \twemoji{pleading face}
 \twemoji{plunger}
 \twemoji{plus}
 \twemoji{polar bear}
 \twemoji{police car}
-\twemoji{police car light}
 \twemoji{police officer}
 \twemoji{poodle}
 \twemoji{pool 8 ball}
@@ -11533,7 +13706,6 @@
 \twemoji{railway track}
 \twemoji{rainbow}
 \twemoji{rainbow flag}
-\twemoji{raised back of hand}
 \twemoji{raised fist}
 \twemoji{raised hand}
 \twemoji{raising hands}
@@ -11542,47 +13714,30 @@
 \twemoji{razor}
 \twemoji{receipt}
 \twemoji{record button}
-\twemoji{recycling symbol}
 \twemoji{red apple}
 \twemoji{red circle}
 \twemoji{red envelope}
-\twemoji{red exclamation mark}
 \twemoji{red hair}
 \twemoji{red heart}
-\twemoji{red paper lantern}
-\twemoji{red question mark}
 \twemoji{red square}
-\twemoji{red triangle pointed down}
-\twemoji{red triangle pointed up}
 \twemoji{registered}
 \twemoji{relieved face}
 \twemoji{reminder ribbon}
 \twemoji{repeat button}
-\twemoji{repeat single button}
-\twemoji{rescue worker's helmet}
 \twemoji{restroom}
 \twemoji{reverse button}
-\twemoji{revolving hearts}
 \twemoji{rhinoceros}
 \twemoji{ribbon}
 \twemoji{rice ball}
 \twemoji{rice cracker}
-\twemoji{right anger bubble}
 \twemoji{right arrow}
-\twemoji{right arrow curving down}
-\twemoji{right arrow curving left}
-\twemoji{right arrow curving up}
-\twemoji{right-facing fist}
 \twemoji{ring}
 \twemoji{ringed planet}
-\twemoji{roasted sweet potato}
 \twemoji{robot}
 \twemoji{rock}
 \twemoji{rocket}
-\twemoji{rolled-up newspaper}
 \twemoji{roller coaster}
 \twemoji{roller skate}
-\twemoji{rolling on the floor laughing}
 \twemoji{roll of paper}
 \twemoji{rooster}
 \twemoji{rose}
@@ -11591,7 +13746,6 @@
 \twemoji{rugby football}
 \twemoji{running shirt}
 \twemoji{running shoe}
-\twemoji{sad but relieved face}
 \twemoji{safety pin}
 \twemoji{safety vest}
 \twemoji{Sagittarius}
@@ -11601,7 +13755,6 @@
 \twemoji{sandwich}
 \twemoji{Santa Claus}
 \twemoji{sari}
-\twemoji{satellite antenna}
 \twemoji{sauropod}
 \twemoji{saxophone}
 \twemoji{scarf}
@@ -11615,13 +13768,11 @@
 \twemoji{seal}
 \twemoji{seat}
 \twemoji{seedling}
-\twemoji{see-no-evil monkey}
 \twemoji{selfie}
 \twemoji{service dog}
 \twemoji{seven o'clock}
 \twemoji{seven-thirty}
 \twemoji{sewing needle}
-\twemoji{shallow pan of food}
 \twemoji{shamrock}
 \twemoji{shark}
 \twemoji{shaved ice}
@@ -11637,9 +13788,7 @@
 \twemoji{shorts}
 \twemoji{shower}
 \twemoji{shrimp}
-\twemoji{shuffle tracks button}
 \twemoji{shushing face}
-\twemoji{sign of the horns}
 \twemoji{singer}
 \twemoji{six o'clock}
 \twemoji{six-thirty}
@@ -11647,36 +13796,21 @@
 \twemoji{skier}
 \twemoji{skis}
 \twemoji{skull}
-\twemoji{skull and crossbones}
 \twemoji{skunk}
 \twemoji{sled}
 \twemoji{sleeping face}
 \twemoji{sleepy face}
-\twemoji{slightly frowning face}
-\twemoji{slightly smiling face}
 \twemoji{sloth}
 \twemoji{slot machine}
 \twemoji{small airplane}
-\twemoji{small blue diamond}
-\twemoji{small orange diamond}
-\twemoji{smiling cat with heart-eyes}
 \twemoji{smiling face}
-\twemoji{smiling face with halo}
-\twemoji{smiling face with heart-eyes}
-\twemoji{smiling face with hearts}
-\twemoji{smiling face with horns}
-\twemoji{smiling face with smiling eyes}
-\twemoji{smiling face with sunglasses}
-\twemoji{smiling face with tear}
 \twemoji{smirking face}
 \twemoji{snail}
 \twemoji{snake}
 \twemoji{sneezing face}
 \twemoji{snowboarder}
-\twemoji{snow-capped mountain}
 \twemoji{snowflake}
 \twemoji{snowman}
-\twemoji{snowman without snow}
 \twemoji{soap}
 \twemoji{soccer ball}
 \twemoji{socks}
@@ -11690,11 +13824,7 @@
 \twemoji{sparkler}
 \twemoji{sparkles}
 \twemoji{sparkling heart}
-\twemoji{speaker high volume}
-\twemoji{speaker low volume}
-\twemoji{speaker medium volume}
 \twemoji{speaking head}
-\twemoji{speak-no-evil monkey}
 \twemoji{speech balloon}
 \twemoji{speedboat}
 \twemoji{spider}
@@ -11705,17 +13835,13 @@
 \twemoji{sponge}
 \twemoji{spoon}
 \twemoji{sports medal}
-\twemoji{sport utility vehicle}
 \twemoji{spouting whale}
 \twemoji{squid}
-\twemoji{squinting face with tongue}
 \twemoji{stadium}
 \twemoji{star}
-\twemoji{star and crescent}
 \twemoji{star of David}
 \twemoji{star-struck}
 \twemoji{station}
-\twemoji{Statue of Liberty}
 \twemoji{steaming bowl}
 \twemoji{stethoscope}
 \twemoji{stop button}
@@ -11724,22 +13850,14 @@
 \twemoji{straight ruler}
 \twemoji{strawberry}
 \twemoji{student}
-\twemoji{studio microphone}
-\twemoji{stuffed flatbread}
 \twemoji{sun}
-\twemoji{sun behind cloud}
-\twemoji{sun behind large cloud}
-\twemoji{sun behind rain cloud}
-\twemoji{sun behind small cloud}
 \twemoji{sunflower}
 \twemoji{sunrise}
-\twemoji{sunrise over mountains}
 \twemoji{sunset}
 \twemoji{sun with face}
 \twemoji{superhero}
 \twemoji{supervillain}
 \twemoji{sushi}
-\twemoji{suspension railway}
 \twemoji{swan}
 \twemoji{sweat droplets}
 \twemoji{synagogue}
@@ -11752,13 +13870,10 @@
 \twemoji{Taurus}
 \twemoji{taxi}
 \twemoji{teacher}
-\twemoji{teacup without handle}
 \twemoji{teapot}
-\twemoji{tear-off calendar}
 \twemoji{technologist}
 \twemoji{teddy bear}
 \twemoji{telephone}
-\twemoji{telephone receiver}
 \twemoji{telescope}
 \twemoji{television}
 \twemoji{tennis}
@@ -11796,11 +13911,8 @@
 \twemoji{train2}
 \twemoji{tram}
 \twemoji{tram car}
-\twemoji{transgender flag}
-\twemoji{transgender symbol}
 \twemoji{T-Rex}
 \twemoji{triangular flag}
-\twemoji{triangular ruler}
 \twemoji{trident emblem}
 \twemoji{trolleybus}
 \twemoji{trophy}
@@ -11819,20 +13931,16 @@
 \twemoji{two o'clock}
 \twemoji{two-thirty}
 \twemoji{umbrella}
-\twemoji{umbrella on ground}
-\twemoji{umbrella with rain drops}
 \twemoji{unamused face}
 \twemoji{unicorn}
 \twemoji{unlocked}
 \twemoji{up arrow}
-\twemoji{UP button}
+\twemoji{UP! button}
 \twemoji{up-down arrow}
 \twemoji{up-left arrow}
 \twemoji{up-right arrow}
-\twemoji{upside-down face}
 \twemoji{upwards button}
 \twemoji{vampire}
-\twemoji{vertical traffic light}
 \twemoji{vibration mode}
 \twemoji{victory hand}
 \twemoji{video camera}
@@ -11845,8 +13953,6 @@
 \twemoji{VS button}
 \twemoji{vulcan salute}
 \twemoji{waffle}
-\twemoji{waning crescent moon}
-\twemoji{waning gibbous moon}
 \twemoji{warning}
 \twemoji{wastebasket}
 \twemoji{watch}
@@ -11857,27 +13963,17 @@
 \twemoji{water wave}
 \twemoji{waving hand}
 \twemoji{wavy dash}
-\twemoji{waxing crescent moon}
-\twemoji{waxing gibbous moon}
 \twemoji{weary cat}
 \twemoji{weary face}
 \twemoji{wedding}
 \twemoji{whale2}
-\twemoji{wheelchair symbol}
 \twemoji{wheel of dharma}
 \twemoji{white cane}
 \twemoji{white circle}
-\twemoji{white exclamation mark}
 \twemoji{white flag}
 \twemoji{white flower}
 \twemoji{white hair}
 \twemoji{white heart}
-\twemoji{white large square}
-\twemoji{white medium-small square}
-\twemoji{white medium square}
-\twemoji{white question mark}
-\twemoji{white small square}
-\twemoji{white square button}
 \twemoji{wilted flower}
 \twemoji{wind chime}
 \twemoji{wind face}
@@ -11884,57 +13980,31 @@
 \twemoji{window}
 \twemoji{wine glass}
 \twemoji{winking face}
-\twemoji{winking face with tongue}
 \twemoji{wolf}
 \twemoji{woman}
-\twemoji{woman and man holding hands}
 \twemoji{woman artist}
 \twemoji{woman astronaut}
 \twemoji{woman biking}
-\twemoji{woman bouncing ball}
 \twemoji{woman bowing}
-\twemoji{woman cartwheeling}
 \twemoji{woman climbing}
-\twemoji{woman construction worker}
 \twemoji{woman cook}
 \twemoji{woman dancing}
 \twemoji{woman detective}
 \twemoji{woman elf}
-\twemoji{woman facepalming}
-\twemoji{woman factory worker}
 \twemoji{woman fairy}
 \twemoji{woman farmer}
-\twemoji{woman feeding baby}
-\twemoji{woman firefighter}
 \twemoji{woman frowning}
 \twemoji{woman genie}
-\twemoji{woman gesturing NO}
-\twemoji{woman gesturing OK}
-\twemoji{woman getting haircut}
-\twemoji{woman getting massage}
 \twemoji{woman golfing}
 \twemoji{woman guard}
-\twemoji{woman health worker}
-\twemoji{woman in lotus position}
-\twemoji{woman in manual wheelchair}
-\twemoji{woman in motorized wheelchair}
-\twemoji{woman in steamy room}
 \twemoji{woman in tuxedo}
 \twemoji{woman judge}
 \twemoji{woman juggling}
 \twemoji{woman kneeling}
-\twemoji{woman lifting weights}
 \twemoji{woman mage}
 \twemoji{woman mechanic}
-\twemoji{woman mountain biking}
-\twemoji{woman office worker}
 \twemoji{woman pilot}
-\twemoji{woman playing handball}
-\twemoji{woman playing water polo}
-\twemoji{woman police officer}
 \twemoji{woman pouting}
-\twemoji{woman raising hand}
-\twemoji{woman rowing boat}
 \twemoji{woman running}
 \twemoji{woman's boot}
 \twemoji{woman scientist}
@@ -11946,22 +14016,14 @@
 \twemoji{woman standing}
 \twemoji{woman student}
 \twemoji{woman superhero}
-\twemoji{woman supervillain}
 \twemoji{woman surfing}
 \twemoji{woman swimming}
 \twemoji{woman teacher}
-\twemoji{woman technologist}
-\twemoji{woman tipping hand}
 \twemoji{woman vampire}
 \twemoji{woman walking}
-\twemoji{woman wearing turban}
-\twemoji{woman with headscarf}
 \twemoji{woman with veil}
-\twemoji{woman with white cane}
 \twemoji{woman zombie}
-\twemoji{women holding hands}
 \twemoji{women's room}
-\twemoji{women with bunny ears}
 \twemoji{women wrestling}
 \twemoji{wood}
 \twemoji{woozy face}
@@ -11981,7 +14043,6 @@
 \twemoji{yo-yo}
 \twemoji{zany face}
 \twemoji{zebra}
-\twemoji{zipper-mouth face}
 \twemoji{zombie}
 \twemoji{zzz}
 \twoBeamedQuavers
@@ -12006,23 +14067,33 @@
 \twonotes
 \typecolon
 \u
-u
 \U
-U
-\UA
+u0}
+u0fa}
+u1}
+u1do}
+u1fa}
+u1re}
+u1ti}
+u1triangle}
+u2}
+u2do}
+u2fa}
+u2kievan}
+u2re}
+u2ti}
+u2triangle}
+u3kievan}
+uaccentus}
 \UArrow
-\UB
 \ubar
-\ubarbbrevis
-\ubarbrevis
-\ubarsbrevis
 \ubrbrak
-\ubrevislonga
 \udesc
 \udot
 \udotdot
 \udots
 \udtimes
+ufermata}
 \uhorn
 \UHORN
 \ularc
@@ -12029,14 +14100,18 @@
 \ulblacktriangle
 \ulcorner
 \ullcorner
+ulongfermata}
 \ulrcorner
 \ultriangle
+umarcato}
+{umbrella on ground}
+{umbrella with rain drops}
 \Umd
 \uminus
-\unclear
 \underaccent
 \underarc
 \underarch
+\underbar
 \underbat
 \underbat*
 \underbrace
@@ -12049,8 +14124,12 @@
 \underleftharp
 \underleftharpdown
 \underleftharpoon
+\underleftharpoondown
+\underleftharpoonup
 \underleftpitchfork
 \underleftrightarrow
+\underleftrightharp
+\underleftrightvecc
 \underleftswishingghost
 \underleftwitchonbroom
 \underleftwitchonbroom*
@@ -12058,6 +14137,7 @@
 \underleftwitchonpitchfork*
 \underline
 \underlinesegment
+\underlvecc
 \underparen
 \underparenthesis
 \underrightarrow
@@ -12066,6 +14146,9 @@
 \underrightharp
 \underrightharpdown
 \underrightharpoon
+\underrightharpoondown
+\underrightharpoonup
+\underrightleftharp
 \underrightpitchfork
 \underrightswishingghost
 \underrightwitchonbroom
@@ -12073,15 +14156,20 @@
 \underrightwitchonpitchfork
 \underrightwitchonpitchfork*
 \underring
+\Underscore
 \underscriptleftarrow
 \underscriptleftrightarrow
 \underscriptrightarrow
 \underset
+\understraightlvecc
+\understraightvecc
 \undertilde
+\undervecc
 \underwedge
-\unitedpawns
+\Unique
 \unlhd
 \unrhd
+up}
 \upalpha
 \upand
 \uparrow
@@ -12122,7 +14210,10 @@
 \updownsquigarrow
 \updownwavearrow
 \updownwhitearrow
+upedalheel}
+upedaltoe}
 \upepsilon
+upes}
 \upeta
 \upfilledspoon
 \upfishtail
@@ -12154,10 +14245,13 @@
 \Upmapsto
 \upmodels
 \upModels
+upmordent}
 \upmu
+up newspaper}
 \upnu
 \upomega
 \Upomega
+uportato}
 \upp
 \upparenthfill
 \upphi
@@ -12165,6 +14259,7 @@
 \uppi
 \Uppi
 \uppitchfork
+upprall}
 \uppropto
 \uppsi
 \Uppsi
@@ -12178,6 +14273,18 @@
 \Upsilon
 \Upsilonmeson
 \upsilonup
+\UpSlashedCircle
+\UpSlashedCurvedDiamond
+\UpSlashedDiamond
+\UpSlashedDownTriangle
+\UpSlashedLeftTriangle
+\UpSlashedLozenge
+\UpSlashedRightTriangle
+\UpSlashedSmallCircle
+\UpSlashedSquare
+\UpSlashedUpTriangle
+\UpSlashedVerySmallCircle
+\UpSlashedVerySmallSquare
 \upslice
 \upspoon
 \upt
@@ -12213,12 +14320,69 @@
 \urcorner
 \urtriangle
 \US
+\usebox
+\usebox{\ande}
+\usebox{\andn}
+\usebox{\ands}
+\usebox{\andw}
+\usebox{\capew}
+\usebox{\capns}
+\usebox{\exore}
+\usebox{\exorn}
+\usebox{\exors}
+\usebox{\exorw}
+\usebox{\nande}
+\usebox{\nandn}
+\usebox{\nands}
+\usebox{\nandw}
+\usebox{\nexore}
+\usebox{\nexorn}
+\usebox{\nexors}
+\usebox{\nexorw}
+\usebox{\nfete}
+\usebox{\nfetn}
+\usebox{\nfets}
+\usebox{\nfetw}
+\usebox{\nore}
+\usebox{\norn}
+\usebox{\nors}
+\usebox{\norw}
+\usebox{\note}
+\usebox{\notn}
+\usebox{\nots}
+\usebox{\notw}
+\usebox{\ore}
+\usebox{\orn}
+\usebox{\ors}
+\usebox{\orw}
+\usebox{\ote}
+\usebox{\otn}
+\usebox{\ots}
+\usebox{\otw}
+\usebox{\pfete}
+\usebox{\pfetn}
+\usebox{\pfets}
+\usebox{\pfetw}
+\usebox{\resew}
+\usebox{\resns}
+\usebox{\tgateew}
+\usebox{\tgatens}
+\usebox{\tje}
+\usebox{\tjn}
+\usebox{\tjs}
+\usebox{\tjw}
+\usebox{\vddpin}
+\usebox{\vsspin}
+usemicirculus}
 \usepackage
 \usf
 \usfz
 \ushort
 \ushortdw
+ushortfermata}
 \ushortw
+usignumcongruentiae}
+ustaccatissimo}
 \usym
 \usym{1F000}
 \usym{1F001}
@@ -13692,11 +15856,10 @@
 \ut
 \utilde
 \utimes
-\UU
 \Uuparrow
 \UUparrow
+uverylongfermata}
 \v
-\Var
 \vara
 \varamalg
 \varangle
@@ -13708,9 +15871,13 @@
 \varcap
 \varCapricorn
 \varcarriagereturn
-\VarClock
+\varcircleleftarrow
+\varCircleleftarrow
+\varcirclerightarrow
+\varCirclerightarrow
 \varclub
 \varclubsuit
+varcoda}
 \varcoppa
 \varcoprod
 \varcup
@@ -13720,7 +15887,11 @@
 \vardiamondsuit
 \vardigamma
 \vardoublebarwedge
+\vardoubleleftarrow
+\vardoublerightarrow
 \vardownarrow
+\vardownhookleftarrow
+\vardownhookrightarrow
 \vardownwavearrow
 \varEarth
 \varepsilon
@@ -13749,17 +15920,21 @@
 \varinjlim
 \varint
 \varintercal
-\various
 \varisinobar
 \varisins
 \varkappa
 \varleftarrow
+\varLeftarrow
+\varleftarrows
+\varleftharp
 \varleftrightarrow
+\varleftrightarrows
+\varleftrightharp
 \varleftrightwavearrow
 \varleftwavearrow
 \varleq
-\varliminf
-\varlimsup
+\varLleftarrow
+\varLleftRrightarrow
 \varlongleftarrow
 \varlongleftrightarrow
 \varlongmapsfrom
@@ -13820,11 +15995,20 @@
 \varpropto
 \varrho
 \varrhoup
+\varRibbonleftarrow
+\varRibbonrightarrow
 \varrightarrow
+\varRightarrow
+\varrightarrows
+\varrightharp
+\varrightleftarrows
+\varrightleftharp
 \varrightwavearrow
+\varRrightarrow
 \varsampi
 \Varsampi
 \varsearrow
+varsegno}
 \varsigma
 \varsigmaup
 \varspade
@@ -13835,6 +16019,8 @@
 \varsqsubsetneqq
 \varsqsupsetneq
 \varsqsupsetneqq
+\varSquareleftarrow
+\varSquarerightarrow
 \varstar
 \varstigma
 \varsubsetneq
@@ -13845,7 +16031,6 @@
 \varsupsetneq
 \varsupsetneqq
 \varswarrow
-\VarTaschenuhr
 \varTerra
 \vartheta
 \varthetaup
@@ -13856,6 +16041,8 @@
 \varuparrow
 \varupdownarrow
 \varupdownwavearrow
+\varuphookleftarrow
+\varuphookrightarrow
 \varupwavearrow
 \varUranus
 \varv
@@ -13864,7 +16051,11 @@
 \varVdash
 \varveebar
 \varw
+\varwidecheck
+\varwidehat
+\varwidetilde
 \vary
+vaticana0}
 \vBar
 \Vbar
 \VBar
@@ -13881,7 +16072,9 @@
 \vDdash
 \vdotdot
 \vdots
+\VDots
 \vec
+\vecc
 \vectimes
 \vee
 \Vee
@@ -13889,12 +16082,18 @@
 \veedot
 \veedoublebar
 \veeeq
+\VeeJoin
+\VeeMeet
 \veemidvert
 \veeodot
 \veeonvee
 \veeonwedge
+\VEntail
+\VEntailEquv
 \venus
 \Venus
+vepiphonus}
+\VEquv
 \vernal
 \vert
 \Vert
@@ -13902,40 +16101,62 @@
 \vertbowtie
 \vertdiv
 \Vertex
+\VerticallyDividedCircle
+\VerticallyDividedDiamond
+\VerticallyDividedLozenge
+\VerticallyDividedSquare
+{vertical traffic light}
 \vertoverlay
 \Vesta
+\VFunc
 \VHF
-\Vier
 \viewdata
 \Village
+\VImpl
 \vin
-\ViPa
+ Vincent \& Grenadines}
+\VInEquv
+\VInImpl
+virga}
+ Virgin Islands}
 \virgo
 \Virgo
 \vlongdash
-\VM
+vlpes}
+\VMapTo
+\VMtEquv
+\VMtImpl
 \vod
 \voicedh
-\Vomey
-\vppm
-\vpppm
+\VoidBunch
+\VParFunc
+vplica}
 \vrectangle
 \vrectangleblack
 \vrule
 \VT
 \Vulkanus
+vupes}
 \vv
 \Vvdash
 \VvDash
 \Vvert
 \vvvert
+\VWkEntail
+\VWkEntailEquv
+\VWkEquv
+\VWkImpl
+\VWkMtEquv
+\VWkMtImpl
 \vysmblkcircle
 \vysmblksquare
 \vysmwhtcircle
 \vysmwhtsquare
 \vzigzag
-w
-\Walley
+Waiting
+Walker}
+{waning crescent moon}
+{waning gibbous moon}
 \warning
 \WashCotton
 \WashSynthetics
@@ -13949,15 +16170,16 @@
 \wasytherefore
 \water
 \Water
-\wbetter
+Waving
+\WavyArrowLeft
+\WavyArrowRight
+{waxing crescent moon}
+{waxing gibbous moon}
 \Wboson
 \Wbosonminus
 \Wbosonplus
-\wdecisive
-\weakpt
 \WeakRain
 \WeakRainCloud
-\Wecker
 \wedge
 \Wedge
 \wedgebar
@@ -13970,6 +16192,7 @@
 \westcross
 \wfermion
 \Wheelchair
+{wheelchair symbol}
 \whfermion
 \whistle
 \white
@@ -13980,12 +16203,58 @@
 \WhiteBishopOnBlack
 \WhiteBishopOnWhite
 \whiteblackspoon
+\WhiteCircle
+\WhiteCircleA
+\WhiteCircleB
+\WhiteCircleC
+\WhiteCircleD
+\WhiteCircleE
+\WhiteCircleF
+\WhiteCircleG
+\WhiteCircleH
+\WhiteCircleI
+\WhiteCurvedDiamond
+\WhiteDiamond
+\WhiteDiamondA
+\WhiteDiamondB
+\WhiteDiamondC
+\WhiteDiamondD
+\WhiteDiamondE
+\WhiteDiamondF
+\WhiteDiamondG
+\WhiteDiamondH
+\WhiteDiamondI
+\WhiteDownTriangle
+\WhiteDownTriangleA
+\WhiteDownTriangleB
+\WhiteDownTriangleC
+\WhiteDownTriangleD
+\WhiteDownTriangleE
+\WhiteDownTriangleF
+\WhiteDownTriangleG
+\WhiteDownTriangleH
+\WhiteDownTriangleI
 \WhiteEmptySquare
+{white exclamation mark}
 \whiteinwhitetriangle
 \WhiteKingOnBlack
 \WhiteKingOnWhite
 \WhiteKnightOnBlack
 \WhiteKnightOnWhite
+{white large square}
+\WhiteLeftArrowHead
+\WhiteLeftTriangle
+\WhiteLeftTriangleA
+\WhiteLeftTriangleB
+\WhiteLeftTriangleC
+\WhiteLeftTriangleD
+\WhiteLeftTriangleE
+\WhiteLeftTriangleF
+\WhiteLeftTriangleG
+\WhiteLeftTriangleH
+\WhiteLeftTriangleI
+\WhiteLozenge
+{white medium square}
 \WhitePawnOnBlack
 \WhitePawnOnWhite
 \whitepointerleft
@@ -13992,11 +16261,52 @@
 \whitepointerright
 \WhiteQueenOnBlack
 \WhiteQueenOnWhite
+{white question mark}
+\WhiteReallySmallCircle
+\WhiteReallySmallDiamond
+\WhiteReallySmallSquare
+\WhiteRightArrowHead
+\WhiteRightTriangle
+\WhiteRightTriangleA
+\WhiteRightTriangleB
+\WhiteRightTriangleC
+\WhiteRightTriangleD
+\WhiteRightTriangleE
+\WhiteRightTriangleF
+\WhiteRightTriangleG
+\WhiteRightTriangleH
+\WhiteRightTriangleI
 \WhiteRookOnBlack
 \WhiteRookOnWhite
+\WhiteSmallCircle
+{white small square}
+\WhiteSquare
+\WhiteSquareA
+\WhiteSquareB
+{white square button}
+\WhiteSquareC
+\WhiteSquareD
+\WhiteSquareE
+\WhiteSquareF
+\WhiteSquareG
+\WhiteSquareH
+\WhiteSquareI
+\WhiteSquareRoundCorners
 \whitesquaretickleft
 \whitesquaretickright
 \whitestone
+\WhiteUpTriangle
+\WhiteUpTriangleA
+\WhiteUpTriangleB
+\WhiteUpTriangleC
+\WhiteUpTriangleD
+\WhiteUpTriangleE
+\WhiteUpTriangleF
+\WhiteUpTriangleG
+\WhiteUpTriangleH
+\WhiteUpTriangleI
+\WhiteVerySmallCircle
+\WhiteVerySmallSquare
 \wholeNote
 \wholeNoteDotted
 \wholeNoteRest
@@ -14004,6 +16314,7 @@
 \wholeof
 \whthorzoval
 \whtvertoval
+\WhyNot
 \wideangledown
 \wideangleup
 \widearc
@@ -14018,17 +16329,63 @@
 \widetilde
 \widetriangle
 \wind
-\Winkey
-\wInnocey
+{winking face with tongue}
 \Wintertree
 \with
-\withattack
-\withidea
-\withinit
-\without
+\WkEntail
+\WkEntailEquv
+\WkEquv
+\WkImpl
+\WkMtEquv
+\WkMtImpl
+\WkSbnch
 \wn
+{woman and man holding hands}
+{woman bouncing ball}
+{woman cartwheeling}
+{woman construction worker}
 \WomanFace
+{woman facepalming}
+{woman factory worker}
+{woman feeding baby}
+{woman firefighter}
+{woman gesturing NO}
+{woman gesturing OK}
+{woman getting haircut}
+{woman getting massage}
+{woman health worker}
+{woman in lotus position}
+{woman in manual wheelchair}
+{woman in motorized wheelchair}
+{woman in steamy room}
+{woman lifting weights}
+{woman mountain biking}
+{woman office worker}
+{woman playing handball}
+{woman playing water polo}
+{woman police officer}
+{woman raising hand}
+{woman rowing boat}
+{woman supervillain}
+{woman technologist}
+{woman tipping hand}
+{woman wearing turban}
+{woman with headscarf}
+{woman with white cane}
+{women holding hands}
+{women with bunny ears}
 \worldflag
+\worldflag{0}
+\worldflag{1}
+\worldflag{2}
+\worldflag{3}
+\worldflag{4}
+\worldflag{5}
+\worldflag{6}
+\worldflag{7}
+\worldflag{8}
+\worldflag{9}
+\worldflag{A}
 \worldflag{Abkhazia}
 \worldflag{AD}
 \worldflag{AE}
@@ -14041,8 +16398,19 @@
 \worldflag{AR}
 \worldflag{Artsakh}
 \worldflag{AT}
+\worldflag{AT-B}
+\worldflag{AT-K}
+\worldflag{AT-N}
+\worldflag{AT-O}
+\worldflag{AT-S}
+\worldflag{AT-St}
+\worldflag{AT-T}
+\worldflag{AT-V}
+\worldflag{AT-W}
 \worldflag{AU}
+\worldflag{AX}
 \worldflag{AZ}
+\worldflag{B}
 \worldflag{BA}
 \worldflag{BB}
 \worldflag{BD}
@@ -14054,17 +16422,21 @@
 \worldflag{BJ}
 \worldflag{BN}
 \worldflag{BO}
+\worldflag{Bonaire}
 \worldflag{BR}
 \worldflag{BS}
 \worldflag{BT}
+\worldflag{Buddhism}
 \worldflag{BW}
 \worldflag{BY}
 \worldflag{BZ}
+\worldflag{C}
 \worldflag{CA}
 \worldflag{CD}
 \worldflag{CF}
 \worldflag{CG}
 \worldflag{CH}
+\worldflag{Christian}
 \worldflag{CI}
 \worldflag{CK}
 \worldflag{CL}
@@ -14076,6 +16448,7 @@
 \worldflag{CV}
 \worldflag{CY}
 \worldflag{CZ}
+\worldflag{D}
 \worldflag{DE}
 \worldflag{DJ}
 \worldflag{DK}
@@ -14082,6 +16455,7 @@
 \worldflag{DM}
 \worldflag{DO}
 \worldflag{DZ}
+\worldflag{E}
 \worldflag{EC}
 \worldflag{EE}
 \worldflag{EG}
@@ -14091,16 +16465,21 @@
 \worldflag{Esperanto}
 \worldflag{ET}
 \worldflag{EU}
+\worldflag{F}
 \worldflag{FI}
 \worldflag{FJ}
 \worldflag{FM}
+\worldflag{FO}
 \worldflag{FR}
+\worldflag{G}
 \worldflag{GA}
 \worldflag{GB}
 \worldflag{GD}
 \worldflag{GE}
 \worldflag{GF}
+\worldflag{GG}
 \worldflag{GH}
+\worldflag{GI}
 \worldflag{GL}
 \worldflag{GM}
 \worldflag{GN}
@@ -14109,22 +16488,28 @@
 \worldflag{GT}
 \worldflag{GW}
 \worldflag{GY}
+\worldflag{H}
 \worldflag{HN}
 \worldflag{HR}
 \worldflag{HT}
 \worldflag{HU}
+\worldflag{I}
 \worldflag{ID}
 \worldflag{IE}
 \worldflag{IL}
+\worldflag{IM}
 \worldflag{IN}
 \worldflag{IQ}
 \worldflag{IR}
 \worldflag{IS}
 \worldflag{IT}
+\worldflag{J}
+\worldflag{JE}
 \worldflag{JM}
 \worldflag{JO}
 \worldflag{JollyRoger}
 \worldflag{JP}
+\worldflag{K}
 \worldflag{KE}
 \worldflag{KG}
 \worldflag{KH}
@@ -14136,6 +16521,7 @@
 \worldflag{KR}
 \worldflag{KW}
 \worldflag{KZ}
+\worldflag{L}
 \worldflag{LA}
 \worldflag{LB}
 \worldflag{LC}
@@ -14147,6 +16533,7 @@
 \worldflag{LU}
 \worldflag{LV}
 \worldflag{LY}
+\worldflag{M}
 \worldflag{MA}
 \worldflag{MD}
 \worldflag{ME}
@@ -14164,6 +16551,7 @@
 \worldflag{MX}
 \worldflag{MY}
 \worldflag{MZ}
+\worldflag{N}
 \worldflag{NA}
 \worldflag{NATO}
 \worldflag{NE}
@@ -14175,8 +16563,10 @@
 \worldflag{NR}
 \worldflag{NU}
 \worldflag{NZ}
+\worldflag{O}
 \worldflag{Olympics}
 \worldflag{OM}
+\worldflag{P}
 \worldflag{PA}
 \worldflag{PE}
 \worldflag{PG}
@@ -14183,18 +16573,26 @@
 \worldflag{PH}
 \worldflag{PK}
 \worldflag{PL}
+\worldflag{PR}
 \worldflag{PS}
 \worldflag{PT}
 \worldflag{PW}
 \worldflag{PY}
+\worldflag{Q}
 \worldflag{QA}
+\worldflag{R}
 \worldflag{Rainbow}
+\worldflag{RE}
+\worldflag{RedCrescent}
 \worldflag{RedCross}
+\worldflag{RedCrystal}
 \worldflag{RO}
 \worldflag{RS}
 \worldflag{RU}
 \worldflag{RW}
+\worldflag{S}
 \worldflag{SA}
+\worldflag{Saba}
 \worldflag{SB}
 \worldflag{SC}
 \worldflag{SD}
@@ -14210,12 +16608,15 @@
 \worldflag{SR}
 \worldflag{SS}
 \worldflag{ST}
+\worldflag{StEustasius}
 \worldflag{SV}
 \worldflag{SY}
 \worldflag{SZ}
+\worldflag{T}
 \worldflag{TD}
 \worldflag{TG}
 \worldflag{TH}
+\worldflag{Tibet}
 \worldflag{TJ}
 \worldflag{TL}
 \worldflag{TM}
@@ -14227,20 +16628,28 @@
 \worldflag{TV}
 \worldflag{TW}
 \worldflag{TZ}
+\worldflag{U}
 \worldflag{UA}
 \worldflag{UG}
+\worldflag{UNESCO}
 \worldflag{UNO}
 \worldflag{US}
 \worldflag{UY}
 \worldflag{UZ}
+\worldflag{V}
 \worldflag{VA}
 \worldflag{VC}
 \worldflag{VE}
 \worldflag{VN}
 \worldflag{VU}
+\worldflag{W}
 \worldflag{WB}
+\worldflag{WHO}
 \worldflag{WS}
+\worldflag{X}
+\worldflag{Y}
 \worldflag{YE}
+\worldflag{Z}
 \worldflag{ZA}
 \worldflag{ZM}
 \worldflag{ZW}
@@ -14251,15 +16660,20 @@
 \wr
 \wreath
 \WritingHand
-\wupperhand
 \x
 \XBox
 \xbsol
-\Xey
+\XEntail
+\XEntailEquv
+\XEquv
+\XFunc
 \xhookleftarrow
 \xhookrightarrow
 \xi
 \Xi
+\XImpl
+\XInEquv
+\XInImpl
 \xint
 \xiup
 \xleftarrow
@@ -14285,7 +16699,11 @@
 \xlongrightarrow
 \xLongrightarrow
 \xmapsto
-\XQ
+\XMapTo
+\XMtEquv
+\XMtImpl
+\Xor
+\XParFunc
 \xrightarrow
 \xRightarrow
 \xrightbroom
@@ -14308,6 +16726,44 @@
 \xtofrom
 \xtwoheadleftarrow
 \xtwoheadrightarrow
+\xvarcircleleftarrow
+\xvarCircleleftarrow
+\xvarcirclerightarrow
+\xvarCirclerightarrow
+\xvardoubleleftarrow
+\xvardoublerightarrow
+\xvardownhookleftarrow
+\xvardownhookrightarrow
+\xvarleftarrow
+\xvarLeftarrow
+\xvarleftarrows
+\xvarleftharp
+\xvarleftrightarrow
+\xvarleftrightarrows
+\xvarleftrightharp
+\xvarLleftarrow
+\xvarLleftRrightarrow
+\xvarmapsfrom
+\xvarmapsto
+\xvarRibbonleftarrow
+\xvarRibbonrightarrow
+\xvarrightarrow
+\xvarRightarrow
+\xvarrightarrows
+\xvarrightharp
+\xvarrightleftarrows
+\xvarrightleftharp
+\xvarRrightarrow
+\xvarSquareleftarrow
+\xvarSquarerightarrow
+\xvaruphookleftarrow
+\xvaruphookrightarrow
+\XWkEntail
+\XWkEntailEquv
+\XWkEquv
+\XWkImpl
+\XWkMtEquv
+\XWkMtImpl
 \Ydown
 \yen
 \yinyang
@@ -14314,48 +16770,21 @@
 \Yinyang
 \Yleft
 \yogh
+you gesture}
 \Yright
 \Yup
-\ZA
-\ZB
 \Zbar
 \Zborder
 \Zboson
-\ZC
 \zcmp
-\ZD
-\ZE
 \zeta
 \Zeta
 \zetaup
 \Zeus
-\ZF
-\ZG
-\ZH
-\ZI
-\ZJ
-\ZK
-\ZL
-\ZM
-\ZN
-\ZO
+\ZigArrowLeft
+\ZigArrowRight
 \Zodiac
-\ZP
 \zpipe
 \zproject
-\ZQ
-\ZR
-\ZS
-\ZT
 \ztransf
 \Ztransf
-\Zu
-\ZU
-\zugzwang
-\ZV
-\ZW
-\Zwdr
-\ZwPa
-\ZX
-\ZY
-\ZZ

Modified: trunk/Master/texmf-dist/doc/latex/comprehensive/rawtables-a4.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/comprehensive/source/Makefile
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/Makefile	2024-01-03 21:17:41 UTC (rev 69281)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/Makefile	2024-01-03 21:18:06 UTC (rev 69282)
@@ -4,26 +4,50 @@
 #############################################
 
 # Define TARGETS as a list of all of the files we intend to generate.
-# TARGETS is categorized into TARGETS_SOURCE and TARGETS_DIST.
-# TARGETS_DIST comprise the prebuilt distribution of the Comprehensive
-# LaTeX Symbol List.  TARGETS_SOURCE are needed primarily to build
-# TARGETS_DIST, although they are also distributed (in a "source"
-# subdirectory).
-TARGETS = $(TARGETS_SOURCE) $(TARGETS_DIST)
-TARGETS_DIST = symbols-letter.pdf symbols-a4.pdf \
-	       rawtables-letter.pdf rawtables-a4.pdf \
-	       SYMLIST README
-TARGETS_SOURCE = lightbulb.eps lightbulb10.pfb lightbulb.map
+TARGETS = symbols-letter.pdf symbols-a4.pdf \
+	  rawtables-letter.pdf rawtables-a4.pdf \
+	  SYMLIST README
 
 # There are a few files that we didn't generate but that need to be
-# distributed.
+# included in a source distribution.
+PRUNETOML = \
+	prune-idx-delete.toml \
+	prune-idx-accents.toml \
+	prune-idx-arrows.toml \
+	prune-idx-brands.toml \
+	prune-idx-circles.toml \
+	prune-idx-cup-cap.toml \
+	prune-idx-equals.toml \
+	prune-idx-flags.toml \
+	prune-idx-hands.toml \
+	prune-idx-harpoons.toml \
+	prune-idx-ineqs.toml \
+	prune-idx-integrals.toml \
+	prune-idx-letters.toml \
+	prune-idx-math-maps.toml \
+	prune-idx-music.toml \
+	prune-idx-prec-succ.toml \
+	prune-idx-rhombuses.toml \
+	prune-idx-sets.toml \
+	prune-idx-similar.toml \
+	prune-idx-squares.toml \
+	prune-idx-stars.toml \
+	prune-idx-triangles.toml \
+	prune-idx-turnstiles.toml \
+	prune-idx-wedges-vees.toml \
+	prune-idx-rewrite.toml \
+	prune-idx-merge.toml \
+	prune-idx-see.toml
 EXTRADIST = symbols.tex lightbulb10.mf lightbulb.mf \
 	    symbols.ist fakego.sty unicode2eps.pe fakeold-arrows.sty \
 	    makefakeMnSymbol teubner-subset.sty fakemusixtex.sty \
 	    fakearevmath.sty fakedozenal.sty fakelatexsym.sty \
 	    makefakefdsymbol makefakeboisik fakearcs.sty fakeallrunes.sty \
-	    makefakestix makefakestarfont makerawtables makefakecmupint \
-	    makefakeworldflags Makefile
+	    renamed-overarrows.sty makefakestix makefakestarfont \
+	    makerawtables makefakecmupint makefakeworldflags \
+	    makefakelualatex makefakeasapsym makefakefigchild \
+	    patch-idx prune-idx $(PRUNETOML) \
+	    makefakeutfsym maketitlepage makeREADME unicode.txt Makefile
 
 # All formats of the symbol list depend upon the following files.
 COMMONDEPS = symbols.tex symbols.ist fakeMnSymbol.sty teubner-subset.sty \
@@ -32,7 +56,11 @@
 	     fakearevmath.sty fakedozenal.sty fakelatexsym.sty \
 	     fakestarfont.sty nonlatex versatim.tex junicode lilyglyphs \
 	     fakeallrunes.sty fakecmupint.sty fakeworldflags.sty \
-	     $(TARGETS_SOURCE)
+	     fakeacademicons.sty faketypicons.sty renamed-overarrows.sty \
+	     fakeasapsym.sty fakefontmfizz.sty fakehamnosys.sty \
+	     fakefigchild.sty fakeutfsym.sty fakelogix.sty \
+	     lightbulb.pdf lightbulb.eps lightbulb10.pfb lightbulb.map \
+	     patch-idx prune-idx $(PRUNETOML)
 
 # The following non-LaTeX files will be copied to the current
 # directory if they exist so LaTeX can find them.
@@ -40,17 +68,20 @@
 	   moonphase.mf dancers.mf smfpr10.mf umranda.mf umrandb.mf \
 	   cryst.mf dice3d.mf magic.mf fselch10.mf Junicode.ttf msym10.tfm \
 	   knot1.mf knot2.mf knot3.mf knot4.mf knot5.mf knot6.mf knot7.mf \
-	   endofproofwd.pdf
+	   endofproofwd.pdf cmrj.tfm
 
 # We need FontForge (or the older PfaEdit) to generate lightbulb10.pfb.
 FONTFORGE = fontforge
 
 # Specify how much process parallelism we should employ in xargs invocations.
-PARXARGS = 8
+PARXARGS = $(shell lscpu --parse=CPU | grep -Evc '^#')
 
 # The following should be overwritten in a recursive call to Make.
 SIZE = letter
 
+# The document builds properly only with pdflatex.
+LATEX = pdflatex
+
 # I've had some trouble using sh as the shell.  bash seems to work, though.
 SHELL = /bin/bash
 
@@ -57,46 +88,56 @@
 ###########################################################################
 
 # Build all specified formats in all specified paper sizes.
-all: check_version $(TARGETS_DIST)
+all: check_version $(TARGETS)
 
-.PHONY: all symbols check_version nonlatex dist clean mostlyclean
-
 ###########################################################################
 
-# Define generic rules for building pdf/dvi/ps in letter/a4 size.
-symbols: $(COMMONDEPS)
+# Define a generic rule for building the document for either U.S. Letter
+# or A4 paper.
+symbols symbols-$(SIZE)-full.ind &: $(COMMONDEPS)
+	# Remove old index files to speed up the first two passes.
+	# (Technically, only the .ind file needs to be removed.)
+	$(RM) symbols-$(SIZE).ind symbols-$(SIZE).idx symbols-$(SIZE).ilg symbols-$(SIZE)-full.ind symbols-$(SIZE)-full.idx
 	# Pass 1: Produce an initial build of the document.
 	$(LATEX) -jobname symbols-$(SIZE) '\PassOptionsToClass{$(SIZE)paper}{article}\input symbols'
-	# Pass 2a: Build a second time to produce a final page layout (one hopes).
+	# Pass 2: Perform multiple partial and one full build to generate
+	# a title page.
+	./patch-idx symbols-$(SIZE).idx
+	./maketitlepage symbols-$(SIZE).idx $(SIZE)
+	# Pass 3: Build again to produce a final page layout.
 	$(LATEX) -jobname symbols-$(SIZE) '\PassOptionsToClass{$(SIZE)paper}{article}\input symbols'
-	# Pass 2b: Create an index based on the current layout.  We do some
-	# preprocessing of the .idx file to improve the sorting order.
-	perl -ne 's/\{(\d+)\}=/sprintf " {%03d}=", $$1/ge; s/\(\\(\S+)\s*\)/\(\\$$1\)/; print' < symbols-$(SIZE).idx > symbols-$(SIZE).tmp
-	mv symbols-$(SIZE).tmp symbols-$(SIZE).idx
+	# Create an index based on the current layout.  We do some
+	# postprocessing of the .idx file to improve usability.  However,
+	# we back up the pre-pruned list so we later can get an accurate
+	# symbol count.
+	./patch-idx symbols-$(SIZE).idx
 	makeindex -s symbols.ist symbols-$(SIZE)
-	# Pass 3a: Build the document with the newly generated index.
+	cp symbols-$(SIZE).ind symbols-$(SIZE)-full.ind
+	./prune-idx symbols-$(SIZE).idx $(PRUNETOML)
+	makeindex -s symbols.ist symbols-$(SIZE)
+	# Pass 4: Build the document with the newly generated index.
+	# Afterward, the table of contents and PDF bookmarks files should
+	# point to the correct index pages, but these are not yet
+	# incorporated into the document.
 	$(LATEX) -jobname symbols-$(SIZE) '\PassOptionsToClass{$(SIZE)paper}{article}\input symbols'
-	# Pass 3b: Get a final symbol count, and put it in the .aux file.
-	# Also, patch the hyperlink bookmarks since we can't do that from
-	# within the document.
-	totalsymbols=`fgrep -c '\item \verb' symbols-$(SIZE).ind` ; \
+	# Get a final symbol count, and put it in the .aux file.
+	totalsymbols=`grep -E -c '\\\\item \\\\(sp)?verb' symbols-$(SIZE)-full.ind` ; \
 	  ( fgrep -v prevtotalsymbols symbols-$(SIZE).aux > symbols-$(SIZE).pts ; \
 	    echo "\\gdef\\prevtotalsymbols{$$totalsymbols}" ; \
 	    echo "\\gdef\\approxcount{}" ) >> symbols-$(SIZE).pts ; \
 	  mv symbols-$(SIZE).pts symbols-$(SIZE).aux
-	if [ -e symbols-$(SIZE).out ] ; then \
-	  cat symbols-$(SIZE).out | \
-	    perl -ne 's/\[[^\]]*\](?=\w)//g; print' > symbols-$(SIZE).tmp ; \
-	  mv symbols-$(SIZE).tmp symbols-$(SIZE).out ; \
-	fi
-	# Pass 4: Build the final document using the final symbol count
+	# Pass 5: Build the final document using the final symbol count
 	# and with the table of contents and PDF bookmarks correctly
-	# reflecting the index pages.  We don't use our custom latex
-	# format here because it interferes with cmap.sty.
-	$(LATEX) -jobname symbols-$(SIZE) '\PassOptionsToClass{$(SIZE)paper}{article}\input symbols'
+	# reflecting the index pages.
+	$(LATEX) -jobname symbols-$(SIZE) '\PassOptionsToClass{$(SIZE)paper}{article}\def\titlefile{title-$(SIZE)}\input symbols'
 	-@(grep --color -E "^.*multiply.defined.*" symbols-$(SIZE).log ; true)
 	-@(grep --color -E "^.*undefined.*" symbols-$(SIZE).log | grep -v U/stmry/b/n ; true)
 
+# Define a single-pass version of the above to reduce build time during
+# development work.
+fast-symbols: $(COMMONDEPS)
+	$(LATEX) -jobname symbols-$(SIZE) '\PassOptionsToClass{$(SIZE)paper}{article}\input symbols'
+
 check_version: symbols.tex
 	comment_ver=$$(perl -ne '/^\%\%\%\s+version\s+=\s+\"(\S+)\"/ && print "$$1\n"' symbols.tex) \
 	pdf_ver=$$(perl -ne '/pdfversionid\s*=\s*\{(\S+)\}/ && print "$$1\n"' symbols.tex) ; \
@@ -105,21 +146,28 @@
 ###########################################################################
 
 # Define specific rules for building with different pages sizes.
-symbols-a4.pdf symbols-a4.log symbols-a4.ind: $(COMMONDEPS)
-	$(MAKE) $(MAKEFLAGS) SIZE=a4 LATEX=pdflatex symbols
+symbols-a4.pdf symbols-a4.log &: $(COMMONDEPS)
+	if [ -z "$(FAST)" ] ; then \
+	    $(MAKE) $(MAKEFLAGS) SIZE=a4 symbols ; \
+	else \
+	    $(MAKE) $(MAKEFLAGS) SIZE=a4 fast-symbols ; \
+	fi
 
-symbols-letter.pdf symbols-letter.log symbols-letter.ind: $(COMMONDEPS)
-	$(MAKE) $(MAKEFLAGS) SIZE=letter LATEX=pdflatex symbols
+symbols-letter.pdf symbols-letter.log &: $(COMMONDEPS)
+	if [ -z "$(FAST)" ] ; then \
+	    $(MAKE) $(MAKEFLAGS) SIZE=letter symbols ; \
+	else \
+	    $(MAKE) $(MAKEFLAGS) SIZE=letter fast-symbols ; \
+	fi
 
+rawtables-letter.tex rawtables-letter.list testfont-letter.pdf testfont-letter.log &: makerawtables $(COMMONDEPS)
+	./makerawtables --paper=letter
 
-rawtables-letter.tex rawtables.list testfont.pdf testfont.log: makerawtables $(COMMONDEPS)
-	perl makerawtables --paper=letter
-
 rawtables-letter.pdf: rawtables-letter.tex
 	pdftex rawtables-letter.tex
 
-rawtables-a4.tex rawtables.list testfont.pdf testfont.log: makerawtables $(COMMONDEPS)
-	perl makerawtables --paper=a4
+rawtables-a4.tex rawtables-a4.list testfont-a4.pdf testfont-a4.log &: makerawtables $(COMMONDEPS)
+	./makerawtables --paper=a4
 
 rawtables-a4.pdf: rawtables-a4.tex
 	pdftex rawtables-a4.tex
@@ -126,11 +174,10 @@
 
 ###########################################################################
 
-# Define rules to produce a lightbulb proof figure.
-mfplain.mem:
-	mpost -ini '\input mfplain; dump'
+lightbulb.pdf: lightbulb.eps
+	ps2pdf -dEPSCrop lightbulb.eps
 
-lightbulb.eps: lightbulb10.mf lightbulb.mf mfplain.mem
+lightbulb.eps: lightbulb10.mf lightbulb.mf
 	mpost -mem=mfplain '\mode:=proof; prologues:=2; labelfont cmr17; input lightbulb10'
 	mv lightbulb10.65 lightbulb.eps
 
@@ -184,13 +231,17 @@
 # characters as graphical images.  This enables the font to work in
 # any TeX engine and without any helper .tfm or .enc files.
 junicode: unicode2eps.pe
-	test -e junicode || mkdir junicode
-	if [ "`kpsewhich Junicode.ttf`" ] ; then \
-	  cd junicode ; \
-	  $(FONTFORGE) -script ../unicode2eps.pe `kpsewhich Junicode.ttf` 0x2123 0x211F ; \
-	  ls *.eps | xargs -P$(PARXARGS) -t -i epstopdf '{}' ; \
-	  true ; \
-	fi
+	for jfont in Junicode-Regular.otf Junicode-Regular.ttf Junicode.otf Junicode.ttf JunicodeTwoBeta-Regular.otf ; do \
+	  if [ "`kpsewhich $$jfont`" ] ; then \
+	    jfont_full=$$(readlink -f $$(kpsewhich $$jfont)) ; \
+	    test -e junicode || mkdir junicode ; \
+	    cd junicode ; \
+	    $(FONTFORGE) -script ../unicode2eps.pe `kpsewhich $$jfont_full` 0x2123 0x211F ; \
+	    ls *.eps | xargs -P$(PARXARGS) -t -i epstopdf '{}' ; \
+	    true ; \
+            break ; \
+	  fi ; \
+        done
 
 # If we have knitting.sty, generate a truncated version that excludes
 # some catcode trickery which breaks mylatex.ltx.
@@ -252,14 +303,123 @@
 	fi
 
 # If we have worldflags.sty, generate a faked version that does not
-# declare any new math alphabets.
+# declare any short-named global symbols and that renders much faster.
 fakeworldflags.sty: makefakeworldflags
 	if [ "`kpsewhich worldflags.sty`" ] ; then \
 	  ./makefakeworldflags ; \
 	else \
-	  touch fakeworldflags.sty worldflag_GY.tex ; \
+	  touch fakeworldflags.sty ; \
 	fi
 
+# If we have academicons.sty, generate a faked version that works
+# with pdfLaTeX.
+FAKEACADEMICONS_GEN = \
+	fakeacademicons.sty \
+	fakeacademicons.enc \
+	fakeacademicons.tfm
+$(FAKEACADEMICONS_GEN) &: makefakelualatex
+	if [ "`kpsewhich academicons.sty`" ] ; then \
+	  ./makefakelualatex academicons academicons.ttf ; \
+	else \
+	  touch fakeacademicons.sty ; \
+	fi
+
+# If we have typicons.sty, generate a faked version that works
+# with pdfLaTeX.
+FAKETYPICONS_GEN = \
+	faketypicons.sty \
+	faketypiconsA.enc \
+	faketypiconsA.tfm \
+	faketypiconsB.enc \
+	faketypiconsB.tfm
+$(FAKETYPICONS_GEN) &: makefakelualatex
+	if [ "`kpsewhich typicons.sty`" ] ; then \
+	  ./makefakelualatex typicons typicons.ttf ; \
+	else \
+	  touch faketypicons.sty ; \
+	fi
+
+# If we have asapsym.sty, generate a faked version that works with
+# pdfLaTeX.
+FAKEASAPSYM_GEN = \
+	Asap-Symbol.pfb \
+	fakeasapsym.sty \
+	fakeasapsym.enc \
+	fakeasapsym.tfm
+$(FAKEASAPSYM_GEN) &: makefakeasapsym
+	if [ "`kpsewhich asapsym.sty`" ] ; then \
+	  ./makefakeasapsym ; \
+	else \
+	  touch fakeasapsym.sty ; \
+	fi
+
+# If we have fontmfizz.sty, generate a faked version that works
+# with pdfLaTeX.
+FAKEFONTMFIZZ_GEN = \
+	fakefontmfizz.sty \
+	fakefontmfizz.enc \
+	fakefontmfizz.tfm
+$(FAKEFONTMFIZZ_GEN) &: makefakelualatex
+	if [ "`kpsewhich fontmfizz.sty`" ] ; then \
+	  ./makefakelualatex fontmfizz font-mfizz.ttf ; \
+	else \
+	  touch fakefontmfizz.sty ; \
+	fi
+
+# If we have hamnosys.sty, generate a faked version that works
+# with pdfLaTeX.
+FAKEHAMNOSYS_GEN = \
+	fakehamnosys.sty \
+	fakehamnosys.enc \
+	fakehamnosys.tfm
+$(FAKEHAMNOSYS_GEN) &: makefakelualatex
+	if [ "`kpsewhich hamnosys.sty`" ] ; then \
+	  ./makefakelualatex --regexp='\\DeclareTextCommand\{\\(?P<sym>ham\w+)\}.*?\\char\s*\"(?P<hex>[0-9A-F]+)' hamnosys HamNoSysUnicode.ttf ; \
+	else \
+	  touch fakehamnosys.sty ; \
+	fi
+
+# If we have figchild.sty, generate a faked version that requires fewer TeX
+# resources.
+fakefigchild.sty: makefakefigchild
+	if [ "`kpsewhich figchild.sty`" ] ; then \
+	  ./makefakefigchild ; \
+	else \
+	  touch fakefigchild.sty ; \
+	fi
+
+# If we have utfsym.sty, generate a faked version that renders faster.
+fakeutfsym.sty: makefakeutfsym
+	if [ "`kpsewhich utfsym.sty`" ] ; then \
+	  ./makefakeutfsym ; \
+	else \
+	  touch fakeutfsym.sty ; \
+	fi
+
+# If we have logix.sty, generate a faked version that works with pdfLaTeX.
+FAKELOGIX_GEN = \
+	Logix.pfb \
+	fakelogix.sty \
+	fakelogixA.enc \
+	fakelogixA.tfm \
+	fakelogixB.enc \
+	fakelogixB.tfm \
+	fakelogixC.enc \
+	fakelogixC.tfm \
+	fakelogixD.enc \
+	fakelogixD.tfm \
+	fakelogixE.enc \
+	fakelogixE.tfm
+$(FAKELOGIX_GEN) &: makefakelualatex
+	if [ "`kpsewhich logix.sty`" ] ; then \
+	  ./makefakelualatex \
+	    --regexp='\\newcommand\s*\\(?P<sym>[A-Z]\w+)\s*\{\\lg[lrmx]\{(?P<hex>[0-9A-F]+)\}' \
+	    --regexp='\\defineDelimiter\s*\{(?P<sym>[A-Z]\w+)\}\s*\{(?P<hex>[0-9A-F]+)\} ; Big ; 0x2' \
+	    logix logix.otf ; \
+	else \
+	  touch fakelogix.sty ; \
+	fi
+
 # Generate a FontForge script that extracts all symbols from a font
 # into named, (rather than numbered, as does unicode2eps.pe) EPS
 # files.
@@ -285,19 +445,18 @@
 
 ###########################################################################
 
-# The index is needed to produce a list of symbols.  We arbitrarily
-# use the symbols-letter.ind version of the index.
-symbols.ind: symbols-letter.ind
-	cp symbols-letter.ind symbols.ind
+# Create a list of all symbols.  We arbitrarily choose the index from the
+# U.S. Letter-sized document to count symbols.
+SYMLIST: symbols-letter-full.ind
+	cat symbols-letter-full.ind | \
+	  perl -ne 's/.*\\(?:sp)?verb\+([^+]+)\+.*/$$1/g && print' | \
+	  sort -u > SYMLIST
 
-# Create a list of all symbols.
-SYMLIST: symbols.ind
-	cat symbols.ind | perl -ne 's/.*\\verb\+([^+]+)\+.*/$$1/g && print' | sort -u > SYMLIST
+# Create a README file.  We arbitrarily choose the index from the
+# U.S. Letter-sized document to count symbols.
+README: makeREADME symbols-letter.log symbols-letter-full.ind
+	./makeREADME symbols-letter.log symbols-letter-full.ind > README
 
-# Create a README file.
-README: makeREADME symbols-letter.log symbols.ind
-	./makeREADME symbols-letter.log symbols.ind > README
-
 # Prepare to timestamp the distributed symbols.tex file.
 TODAY = $(shell date +'%d %B %Y')
 NOW = $(shell date +'%T %Z')
@@ -307,16 +466,17 @@
 	$(RM) -r comprehensive
 	mkdir comprehensive
 	mkdir comprehensive/source
-	install -m 664 $(TARGETS_DIST) comprehensive
-	install -m 664 $(TARGETS_SOURCE) $(EXTRADIST) comprehensive/source
+	install -m 664 $(TARGETS) comprehensive
+	install -m 664 $(EXTRADIST) comprehensive/source
 	cat symbols.tex | \
 	  perl -ne 's/(date\s*=\s*)\"[^\"]*\"/$$1\"$(TODAY)\"/; print' | \
 	  perl -ne 's/(time\s*=\s*)\"[^\"]*\"/$$1\"$(NOW)\"/; print' | \
 	  checksum > comprehensive/source/symbols.tex
-	for fakes in MnSymbol fdsymbol boisik stix starfont cmupint ; do \
-	  chmod 755 comprehensive/source/makefake$$fakes ; \
+	for script in comprehensive/source/make* ; do \
+	  chmod 755 "$$script" ; \
 	done
-	chmod 755 comprehensive/source/makerawtables
+	chmod 755 comprehensive/source/patch-idx
+	chmod 755 comprehensive/source/prune-idx
 	chmod 664 comprehensive/source/symbols.tex
 	tar -czf comprehensive.tar.gz comprehensive
 	$(RM) -r comprehensive
@@ -324,10 +484,9 @@
 dist: comprehensive.tar.gz
 
 # Clean up our mess.
-clean:
+clean: mostlyclean
 	$(RM) -r comprehensive
 	$(RM) $(TARGETS)
-	$(RM) symbols*.{aux,dep,dvi,fmt,idx,ilg,inc,ind,log,out,pdf,pts,toc}
 	$(RM) $(NONLATEX)
 	for fname in $(NONLATEX) ; do \
 	  $(RM) `basename $$fname .mf`.*pk ; \
@@ -334,12 +493,31 @@
 	  $(RM) `basename $$fname .mf`.tfm ; \
 	done
 	$(RM) comprehensive.tar.gz
-	$(RM) -r junicode lilyglyphs
+	$(RM) -r junicode lilyglyphs figchild utfsym
 	$(RM) fakeMnSymbol.sty fakefdsymbol.sty fakeknitting.sty
 	$(RM) fakeboisik.sty fakestix.sty fakestarfont.sty fakecmupint.sty
-	$(RM) fakeworldflags.sty worldflag_GY.tex
+	$(RM) fakeworldflags.sty fakefigchild.sty fakeutfsym.sty
+	$(RM) $(FAKEACADEMICONS_GEN)
+	$(RM) $(FAKETYPICONS_GEN)
+	$(RM) $(FAKEASAPSYM_GEN)
+	$(RM) $(FAKEFONTMFIZZ_GEN)
+	$(RM) $(FAKEHAMNOSYS_GEN)
+	$(RM) $(FAKELOGIX_GEN)
 	$(RM) versatim.tex extract-by-name.pe
-	$(RM) mfplain.{log,mem}
-	$(RM) lightbulb10*pk lightbulb10.{tfm,log,pe,afm}
-	$(RM) lightbulb-eps-converted-to.pdf
-	$(RM) rawtables-*.{log,tex,pdf} rawtables.list testfont.{log,pdf}
+	$(RM) mfplain.log
+	$(RM) lightbulb10.*pk lightbulb10.{afm,log,pe,pfb,tfm}
+	$(RM) lightbulb.{eps,map,pdf}
+	$(RM) title-letter.tex title-a4.tex
+
+# Remove just the document itself and intermediate files used in the
+# creation of faked packages.
+mostlyclean:
+	$(RM) symbols-letter-full.ind symbols-a4-full.ind
+	$(RM) symbols*.{aux,dep,dvi,fmt,idx,ilg,inc,ind,log,out,pdf,pts,toc}
+	$(RM) rawtables-*.{log,tex,pdf} rawtables-letter.list rawtables-a4.list
+	$(RM) testfont-letter.{log,pdf} testfont-a4.{log,pdf}
+	for dir in worldflags utfsym figchild ; do \
+	  $(RM) $$dir/*.log $$dir/*.aux $$dir/*.tex $$dir/mylatex.fmt ; \
+	done
+
+.PHONY: all symbols fast-symbols check_version nonlatex dist clean mostlyclean

Deleted: trunk/Master/texmf-dist/doc/latex/comprehensive/source/lightbulb.eps
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/lightbulb.eps	2024-01-03 21:17:41 UTC (rev 69281)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/lightbulb.eps	2024-01-03 21:18:06 UTC (rev 69282)
@@ -1,100 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: -1 -37 180 259 
-%%HiResBoundingBox: -0.2 -36.06541 179.5271 258.43044 
-%%Creator: MetaPost 2.01
-%%CreationDate: 2021.05.05:1544
-%%Pages: 1
-%%DocumentResources: procset mpost-minimal
-%%+ font CMR17
-%%DocumentSuppliedResources: procset mpost-minimal
-%%DocumentNeededResources: font CMR17
-%%IncludeResource: font CMR17
-%%EndComments
-%%BeginProlog
-%%BeginResource: procset mpost-minimal
-/bd{bind def}bind def/fshow {exch findfont exch scalefont setfont show}bd
-/fcp{findfont dup length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall}bd
-/fmc{FontMatrix dup length array copy dup dup}bd/fmd{/FontMatrix exch def}bd
-/Amul{4 -1 roll exch mul 1000 div}bd/ExtendFont{fmc 0 get Amul 0 exch put fmd}bd
-/ScaleFont{dup fmc 0 get Amul 0 exch put dup dup 3 get Amul 3 exch put fmd}bd
-/SlantFont{fmc 2 get dup 0 eq{pop 1}if Amul FontMatrix 0 get mul 2 exch put fmd}bd
-%%EndResource
-%%EndProlog
-%%BeginSetup
- /cmr17 /CMR17 def
-%%EndSetup
-%%Page: 1 1
- 0.7 0.7 0.7 setrgbcolor 0 17.93271 dtransform truncate idtransform setlinewidth pop
- [] 0 setdash 1 setlinejoin 10 setmiterlimit
-newpath 89.66356 244.33316 moveto
-132.3908 244.94174 165.87755 208.3536 165.87755 164.75676 curveto
-165.87755 121.15993 132.3908 84.5718 89.66356 85.18037 curveto
-47.76907 85.7771 15.69113 122.03224 15.69113 164.75676 curveto
-15.69113 207.48131 47.76907 243.73645 89.66356 244.33316 curveto closepath stroke
- 1 setlinecap
-newpath 128.41212 95.85231 moveto
-128.41212 0 lineto
-116.14232 -4.44911 103.19072 -6.72478 90.13918 -6.72478 curveto
-77.08765 -6.72478 64.13605 -4.44911 51.86626 0 curveto
-51.86626 96.58183 lineto stroke
- 0 0 0 setrgbcolor 0.4 0 dtransform exch truncate exch idtransform pop setlinewidth
- 2 setlinecap
-newpath 0 -35.86542 moveto
-0 251.05794 lineto stroke
-newpath 8.96635 -35.86542 moveto
-8.96635 251.05794 lineto stroke
-newpath 89.66356 -35.86542 moveto
-89.66356 251.05794 lineto stroke
-newpath 170.36075 -35.86542 moveto
-170.36075 251.05794 lineto stroke
- 0 0.4 dtransform truncate idtransform setlinewidth pop
-newpath 0 0 moveto
-170.36075 0 lineto stroke
-newpath 0 -35.86542 moveto
-170.36075 -35.86542 lineto stroke
-newpath 0 164.75676 moveto
-170.36075 164.75676 lineto stroke
-newpath 0 251.05794 moveto
-170.36075 251.05794 lineto stroke
-85.71588 247.33316 moveto
-(1) cmr17 17.21544 fshow
- 0 3 dtransform truncate idtransform setlinewidth pop 1 setlinecap
-newpath 89.66356 244.33316 moveto 0 0 rlineto stroke
-161.92989 167.75676 moveto
-(2) cmr17 17.21544 fshow
-newpath 165.87755 164.75676 moveto 0 0 rlineto stroke
-85.71588 88.18037 moveto
-(3) cmr17 17.21544 fshow
-newpath 89.66356 85.18037 moveto 0 0 rlineto stroke
-11.74345 167.75676 moveto
-(4) cmr17 17.21544 fshow
-newpath 15.69113 164.75676 moveto 0 0 rlineto stroke
-124.46445 98.85231 moveto
-(5) cmr17 17.21544 fshow
-newpath 128.41212 95.85231 moveto 0 0 rlineto stroke
-124.46445 3 moveto
-(6) cmr17 17.21544 fshow
-newpath 128.41212 0 moveto 0 0 rlineto stroke
-82.24385 -3.72478 moveto
-(67) cmr17 17.21544 fshow
-newpath 90.13918 -6.72478 moveto 0 0 rlineto stroke
-47.91858 3 moveto
-(7) cmr17 17.21544 fshow
-newpath 51.86626 0 moveto 0 0 rlineto stroke
-47.91858 99.58183 moveto
-(8) cmr17 17.21544 fshow
-newpath 51.86626 96.58183 moveto 0 0 rlineto stroke
- 0 0.4 dtransform truncate idtransform setlinewidth pop 2 setlinecap
-newpath 0 0 moveto
-179.3271 0 lineto stroke
-newpath 0 251.05794 moveto
-179.3271 251.05794 lineto stroke
-newpath 0 -35.86542 moveto
-179.3271 -35.86542 lineto stroke
- 0.4 0 dtransform exch truncate exch idtransform pop setlinewidth
-newpath 0 -35.86542 moveto
-0 251.05794 lineto stroke
-newpath 179.3271 -35.86542 moveto
-179.3271 251.05794 lineto stroke
-showpage
-%%EOF

Deleted: trunk/Master/texmf-dist/doc/latex/comprehensive/source/lightbulb.map
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/lightbulb.map	2024-01-03 21:17:41 UTC (rev 69281)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/lightbulb.map	2024-01-03 21:18:06 UTC (rev 69282)
@@ -1 +0,0 @@
-lightbulb10 LightBulb10 <lightbulb10.pfb

Deleted: trunk/Master/texmf-dist/doc/latex/comprehensive/source/lightbulb10.pfb
===================================================================
(Binary files differ)

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makeREADME
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/makeREADME	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/makeREADME	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,231 @@
+#! /usr/bin/env perl
+
+################################################
+# Generate a README file for the Comprehensive #
+# LaTeX Symbol List.                           #
+#                                              #
+# Author: Scott Pakin <scott+clsl at pakin.org>   #
+################################################
+
+use POSIX;
+use warnings;
+use strict;
+
+###########################################################################
+
+# Center a string within a given field length.
+sub center_string ($$)
+{
+    my ($string, $fieldlen) = @_;
+    my $prespaces = int (($fieldlen - length($string)) / 2);
+    my $postspaces = $fieldlen - length($string) - $prespaces;
+
+    return (" " x $prespaces) . $string . (" " x $postspaces);
+}
+
+
+# Format a list to a given number of columns.
+sub format_list ($$@)
+{
+    my ($numcols, $textwidth, @list) = @_;
+    my $itemwidth = int (($textwidth-4) / $numcols);
+
+    my $col = 0;
+    foreach my $item (@list) {
+        print "    " if $col%$numcols==0;
+        printf "%-${itemwidth}.${itemwidth}s", $item;
+        print "\n" if ++$col%$numcols==0;
+    }
+    print "\n";
+}
+
+
+# Return the human-readable name of a PostScript font file.
+sub find_pfb_name ($)
+{
+    my $pfb = $_[0];
+    my $pfbfile = `kpsewhich $pfb`;
+    die "${0}: Failed to locate $pfb\n" if !defined $pfbfile;
+    chomp $pfbfile;
+    local $/ = undef;
+    open (PFBFILE, "<$pfbfile") || die "open(\"$pfbfile\"): $!\n";
+    my $entirefile = <PFBFILE>;
+    close PFBFILE or die "close(\"$pfbfile\"): $!\n";
+    my $fullname;
+    if ($entirefile =~ /FullName\s*\(([^\)]*)\)/) {
+        # Best choice: FullName
+        $fullname = $1;
+        $fullname =~ s/\\(\d\d\d)/chr(oct($1))/ge;
+        $fullname =~ s/^\s+//;
+        $fullname =~ s/\s+$//;
+    }
+    elsif ($entirefile =~ m,FontName\s*/(\S+),) {
+        # Tolerable: FontName
+        $fullname = $1;
+    }
+    else {
+        die "${pfbfile}: FullName not found\n";
+    }
+    return $fullname;
+}
+
+
+# Return the human-readable name of a TrueType font file.
+sub find_ttf_name ($)
+{
+    my $ttf = $_[0];
+    my $ttffile = `kpsewhich $ttf`;
+    die "${0}: Failed to locate $ttf\n" if !defined $ttffile;
+    chomp $ttffile;
+    my %key_value;
+    local $/ = "\n";
+    open(TTFFILE, "otfinfo --info $ttffile|") || die "open(\"$ttffile\"): $!\n";
+    while (my $ln = <TTFFILE>) {
+        chomp $ln;
+        next if $ln !~ /^([^:]+):\s*(.*)$/;
+        $key_value{$1} = $2;
+    }
+    close TTFFILE or die "close(\"$ttffile\"): $!\n";
+    foreach my $key ("Full name",
+                     "Preferred family",
+                     "Family",
+                     "PostScript name") {
+        my $val = $key_value{$key};
+        return $val if $val ne "";
+    }
+    die "${ttffile}: Font information not found\n";
+}
+
+
+# Output all PostScript and TrueType font files and their associated,
+# human-readable font name.
+sub format_scalable_list ($\@)
+{
+    my $itemwidth = $_[0];
+    foreach my $fname (@{$_[1]}) {
+        my $fullname;
+        if ($fname =~ /\.pfb$/) {
+            $fullname = find_pfb_name $fname;
+        }
+        elsif ($fname =~ /\.ttf$/) {
+            $fullname = find_ttf_name $fname;
+        }
+        else {
+            die "${0}: Unrecognized file type for $fname\n";
+        }
+        printf "    %-${itemwidth}.${itemwidth}s (%s)\n", $fname, $fullname;
+    }
+}
+
+
+# Sort a list and discard duplicates.
+sub sort_unique (@)
+{
+    my %uniq;
+    foreach my $e (@_) {
+        $uniq{$e} = 1;
+    }
+    return sort keys %uniq;
+}
+
+###########################################################################
+
+# Check the command-line arguments.
+die "Usage: $0 <.log file> <.ind file>\n" if $#ARGV<1;
+my ($logfilename, $indfilename) = @ARGV;
+
+# Get the symbol count from the index file.
+my $numsymbols = 0;
+open (INDFILE, "<$indfilename") || die "open(): $!\nStopped";
+while (<INDFILE>) {
+    /\\item \\(sp)?verb/ && $numsymbols++;
+}
+close INDFILE;
+my $roundnumsymbols = int($numsymbols/100) * 100;
+
+# Read an entire pdflatex log file.
+open (LOGFILE, "<$logfilename") || die "open(): $!\nStopped";
+undef $/;
+my $logfile = <LOGFILE>;
+$logfile =~ s/\n//g;
+close LOGFILE;
+
+# Get a list of .mf files (indirectly via corresponding .pk files), .pfb,
+# and .ttf files referenced by the log file.
+my @mffiles = sort_unique map {"$_.mf"} ($logfile =~ m!<(?:[^>]+/)?([^/<>.]+)\.\d+pk>!g);
+my @scalable_files = sort_unique ($logfile =~ m!<(?:[^>]+/)?([^/<>.]+\.(?:pfb|ttf))>!g);
+
+# Tally the number of unique typefaces in @mffiles and @scalable_files.
+my %allfonts;
+foreach (@mffiles, @scalable_files) {
+    my $fname = $_;
+    $fname =~ s/\.(ttf|pfb|mf)$//;
+    $fname =~ s/\d+$//;
+    $allfonts{$fname} = 1;
+}
+my $numtypefaces = keys %allfonts;
+
+# Write the README header.
+my $date = strftime "%d %B %Y", localtime;
+$date =~ s/\b0+/ /g;
+my $headerwidth = 40;
+my $linewidth = 75;
+my $centerspace = " " x int(($linewidth-$headerwidth)/2);
+printf "%s+-%s-+\n", $centerspace, ("-" x ($headerwidth-4));
+printf "%s| %s |\n",
+    $centerspace,
+    center_string("THE COMPREHENSIVE LATEX SYMBOL LIST", $headerwidth-4);
+printf "%s| %s |\n",
+    $centerspace,
+    center_string("By Scott Pakin, scott+clsl\@pakin.org", $headerwidth-4);
+printf "%s| %s |\n",
+    $centerspace,
+    center_string("", $headerwidth-4);
+printf "%s| %s |\n",
+    $centerspace,
+    center_string($date, $headerwidth-4);
+printf "%s+-%s-+\n", $centerspace, ("-" x ($headerwidth-4));
+
+# Output some text.
+print <<"EOF1";
+
+The Comprehensive LaTeX Symbol List is an organized list of over $roundnumsymbols
+symbols commonly available to LaTeX users.  Some of these symbols are
+guaranteed to be available in every TeX distribution.  Others require
+font files that come with some, but not all, TeX distributions.  The
+rest require font files that must be downloaded explicitly from CTAN
+(http://www.ctan.org/) and installed.  The Comprehensive LaTeX Symbol
+List currently showcases symbols from $numtypefaces separate typefaces.
+
+The same directory that contains this README file also contains
+SYMLIST (an ASCII list of symbols that appear in the symbols list) and
+prebuilt versions of the symbol list for both A4 and U.S. Letter sized
+paper.  If you'd like to build symbols.tex yourself (not recommended
+for normal use), a Makefile is provided.  symbols.tex tries to be
+smart about fonts; it omits tables of symbols that require (seemingly)
+unavailable fonts.  The "Document Characteristics" table at the end of
+the document lists the packages that were unavailable during the
+build.
+
+The prebuilt versions of the symbol list use primarily Type 1 fonts.
+Type 1 fonts are scalable and should look good at any resolution and on
+any output device.  However, some of the fonts used by symbols.tex are
+available only in a METAFONT-generated bitmap format.  The prebuilt
+symbol lists utilize 1200 DPI versions of all of the bitmapped fonts as
+1200 DPI is a reasonably high printer resolution and therefore should
+obscure the artifacts of bitmap rendering.
+
+The following bitmapped fonts were used to typeset the symbol list:
+
+EOF1
+
+format_list (3, $linewidth, @mffiles);
+
+print <<"EOF2";
+
+For completeness, the following scalable fonts (some converted from
+OpenType to PostScript Type 1) were used to typeset the symbol list:
+
+EOF2
+
+format_scalable_list (22, @scalable_files);


Property changes on: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makeREADME
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeasapsym
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeasapsym	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeasapsym	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,208 @@
+#! /usr/bin/env python
+
+##############################################
+# Generate a fakeasapsym.sty file that works #
+# with pdfLaTeX.                             #
+#                                            #
+# Author: Scott Pakin <scott.clsl at pakin.org  #
+##############################################
+
+import os
+import re
+import subprocess
+import sys
+
+
+def kpsewhich(fname):
+    'Find a filename in the TeX tree.'
+    proc = subprocess.run(['kpsewhich', fname], capture_output=True,
+                          check=True, encoding='utf-8')
+    return proc.stdout.strip()
+
+
+def parse_definitions(tex):
+    '''Parse a .tex file that defines ASAP symbols.  Return an ordered
+    association of macro names to glyph name.'''
+    # Define definition patterns.
+    set_re = re.compile(r'^\\asapsym at set\{([a-z]+)\}\{(\d+)\}')
+    mk_re = re.compile(r'^\\asapsym at mk([a-z])\{([A-Za-z]+)\}\{(\w+)\}')
+
+    # Map a category to a tag (hard-wired here rather than parsed from
+    # the file).
+    cat2tag = {
+        'a': 'arrow',
+        'e': 'elevator',
+        'o': 'object',
+        'p': 'people',
+        'd': 'people',
+        's': 'signal',
+        't': 'transport'
+    }
+
+    # I *really* don't understand where these special cases for arrows
+    # come from or how to automate the association with glyph names.
+    arrow_glyphs = [
+        'one.ss01',
+        'two.ss01',
+        'three.ss01',
+        'four.ss01',
+        'five.ss01',
+        'six.ss01',
+        'seven.ss01',
+        'eight.ss01',
+        'one.ss02',
+        'two.ss02',
+        'three.ss02',
+        'four.ss02',
+        'five.ss02',
+        'six.ss02',
+        'seven.ss02',
+        'eight.ss02',
+        'one.ss03',
+        'two.ss03',
+        'three.ss03',
+        'four.ss03',
+        'five.ss03',
+        'six.ss03',
+        'seven.ss03',
+        'eight.ss03'
+    ]
+    next_arrow = 0
+
+    # Process the file line-by-line.
+    tag2ss = {}       # Map from a tag to a stylistic-set 2-digit number
+    sym2glyph = {}    # Map from a symbol name to a glyph name
+    with open(tex) as r:
+        for ln in r:
+            # Process stylistic-set definitions.
+            match = set_re.match(ln)
+            if match is not None:
+                tag2ss[match[1]] = match[2]
+                continue
+
+            # Process symbol definitions.
+            match = mk_re.match(ln)
+            if match is None:
+                continue
+            cat, base, char = match.groups()
+            tag = cat2tag[cat]
+            if cat == 'a':
+                # Arrow
+                sym2glyph[f'Arrow{base}'] = arrow_glyphs[next_arrow]
+                next_arrow += 1
+            elif cat in ['e', 'o', 'p', 't']:
+                # Elevator, object, people, sign, or transport
+                sym2glyph[base] = '%s.ss%s' % (char, tag2ss[tag])
+            elif cat == 's':
+                # Sign
+                sym2glyph[f'{base}Sign'] = '%s.ss%s' % (char, tag2ss[tag])
+            elif cat == 'd':
+                # Both male and female people
+                sym2glyph[f'Male{base}'] = '%s.ss%s' % (char, tag2ss[tag])
+                sym2glyph[f'Female{base}'] = '%s.ss%s' % \
+                    (char.lower(), tag2ss[tag])
+
+    # Convert the map to a list to ensure that the ordering used in the
+    # .tfm file and the .sty file are consistent.
+    sym_glyphs = list(sym2glyph.items())
+    sym_glyphs.sort(key=lambda sg: sg[1][::-1])
+    return sym_glyphs
+
+
+def write_encoding(sym_glyphs):
+    'Generate an input encoding file.'
+    with open('fakeasapsym-in.enc', 'w') as w:
+        w.write('/FakeASAPSymEncoding [\n')
+        for g in [sg[1] for sg in sym_glyphs]:
+            w.write(f'  /{g}\n')
+        w.write(']\n')
+
+
+def generate_font_files(ttf):
+    '''Create fakeasapsym.enc, fakeasapsym.tfm, and Asap-Symbol.pfb files.
+    Return a map-file line.'''
+    # Create all the font files.
+    args = [
+        'otftotfm',
+        '--map-file=fakeasapsym.map',
+        '--no-updmap',
+        '--encoding=fakeasapsym-in.enc',
+        '--directory=' + os.getcwd(),
+        ttf,
+        'fakeasapsym']
+    sys.stderr.write('RUNNING: %s\n' % ' '.join(args))
+    subprocess.run(args, check=True, encoding='utf-8')
+
+    # To make cleanup easier for the Makefile, rename the generated
+    # a_<hash>.enc to fakeasapsym.enc.
+    with open('fakeasapsym.map') as r:
+        for ln in r:
+            fields = ln.split()
+            if len(fields) == 6 and fields[0] == 'fakeasapsym':
+                mapfields = fields
+    enc = mapfields[4][2:]
+    os.rename(enc, 'fakeasapsym.enc')
+
+    # Remove fakeasapsym.map as it is no longer needed.
+    os.remove('fakeasapsym.map')
+
+    # Return a map-file line that can be used in a .sty file.
+    mapfields[4] = mapfields[4][:2] + 'fakeasapsym.enc'
+    return ' '.join(mapfields)
+
+
+def write_style_file(sty, map_line, sym_glyphs):
+    'Derive fakeasapsym.sty from asapsym.sty.'
+    # Acquire the ProvidesPackage description from asapsym.sty.
+    with open(sty) as r:
+        all_sty = r.read()
+    provides_re = re.compile(r'\\ProvidesPackage\{asapsym\}\s*\[(.*?)\]',
+                             re.DOTALL)
+    desc = provides_re.search(all_sty)[1]
+
+    # Create fakeasapsym.sty.
+    with open('fakeasapsym.sty', 'w') as w:
+        # Package header
+        w.write('''\
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is a generated file.  DO NOT EDIT. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\\NeedsTeXFormat{LaTeX2e}
+''')
+        w.write('\\ProvidesPackage{fakeasapsym}[%s]\n\n' % desc)
+
+        # Font definition
+        w.write('\\pdfmapline{=%s}\n' % map_line)
+        w.write('\\font\\fakeasapsym=fakeasapsym at 10pt\n\n')
+
+        # Primitive symbol list
+        signs = []
+        for i, (sym, glyph) in enumerate(sym_glyphs):
+            w.write('\\DeclareRobustCommand*{\\asap%s}'
+                    '{{\\fakeasapsym\\char"%02X}}  %% %s\n' %
+                    (sym, i, glyph))
+            if sym[-4:] == 'Sign' and sym != 'NotSign':
+                signs.append(sym)
+        w.write('\n')
+
+        # Composed symbol list.
+        for sym in signs:
+            w.write('\\DeclareRobustCommand*{\\asapNot%s}'
+                    '{\\asap%s\\llap{\\asapNotSign}}\n' %
+                    (sym, sym,))
+        w.write('\n')
+
+        # Package trailed
+        w.write('\\endinput\n')
+
+
+# Generate a pdfLaTeX-compatible version of asamsym.sty.
+tex = kpsewhich('asapsym-generic.tex')
+sym_glyphs = parse_definitions(tex)
+write_encoding(sym_glyphs)
+ttf = kpsewhich('Asap-Symbol.otf')
+map_line = generate_font_files(ttf)
+os.remove('fakeasapsym-in.enc')
+sty = kpsewhich('asapsym.sty')
+write_style_file(sty, map_line, sym_glyphs)


Property changes on: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeasapsym
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakefigchild
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakefigchild	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakefigchild	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,152 @@
+#! /usr/bin/env python
+
+################################################
+# Convert each figchild picture to a PDF file. #
+#                                              #
+# Author: Scott Pakin <scott.clsl at pakin.org>   #
+################################################
+
+import concurrent.futures
+import os
+import re
+import subprocess
+import sys
+
+
+def kpsewhich(fname):
+    'Find a filename in the TeX tree.'
+    proc = subprocess.run(['kpsewhich', fname], capture_output=True,
+                          check=True, encoding='utf-8')
+    return proc.stdout.strip()
+
+
+# Extract all commands defined by figchild.sty and the package description.
+desc = None
+commands = []
+newcmd_re = re.compile(r'^\\newcommand{\\(fc\w+)\}')
+desc_re = re.compile(r'\\ProvidesPackage\{figchild\}\[(.*?)\]')
+sty = kpsewhich('figchild.sty')
+with open(sty) as r:
+    for ln in r:
+        # Extract the package description.
+        if desc is None:
+            match = desc_re.search(ln)
+            if match is not None:
+                desc = match[1]
+
+        # Extract a command.
+        match = newcmd_re.search(ln)
+        if match is None:
+            continue
+        if match[1] != 'fcAlligatorB':   # Undocumented and broken
+            commands.append(match[1])
+commands.sort(key=lambda s: s.lower())
+
+# Create a fakefigchild.sty file.
+with open('fakefigchild.sty', 'w') as w:
+    w.write('''\
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is a generated file.  DO NOT EDIT. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+''')
+    w.write('''\
+\\NeedsTeXFormat{LaTeX2e}
+\\ProvidesPackage{fakefigchild}[%s]
+\\RequirePackage{graphicx}
+
+''' % desc)
+    for cmd in commands:
+        ht = 20
+        if cmd == 'fcPencil':
+            # Special case for \fcPencil, which is abnormally wide and short.
+            ht = 5
+        w.write('\\DeclareRobustCommand{\\%s}{%%\n' % cmd)
+        w.write('  \\includegraphics[height=%dpt,keepaspectratio]'
+                '{figchild/%s}%%\n' % (ht, cmd))
+        w.write('}\n')
+    w.write('\n')
+    w.write('\\endinput\n')
+
+# Create and switch to a figchild subdirectory.
+try:
+    os.mkdir('figchild')
+except FileExistsError:
+    pass
+os.chdir('figchild')
+
+# For speed, dump a LaTeX format file with figchild preloaded.
+with open('preloaded.tex', 'w') as w:
+    w.write(r'''
+\documentclass{minimal}
+\usepackage[a2paper,landscape]{geometry}
+\usepackage{figchild}
+\usepackage{graphicx}
+\begin{document}
+\end{document}
+'''[1:])
+subprocess.run([
+    'pdflatex',
+    '--ini',
+    '&pdflatex',
+    'mylatex.ltx',
+    'preloaded.tex'
+],
+    check=True)
+
+
+def run_and_return_output(cmd_line):
+    'Run a command line and return its combined stdout + stderr.'
+    stdout = 'RUN: ' + ' '.join(cmd_line) + '\n'
+    proc = subprocess.run(cmd_line, check=True,
+                          stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    stdout += proc.stdout.decode('utf-8')
+    return stdout
+
+
+def generate_graphic(cmd):
+    'Generate a PDF file for a given figchild command.'
+    stdout = f'*** PROCESSING {cmd} ***\n\n'
+
+    # Create a LaTeX file.
+    stdout += f'CREATE: {cmd}.tex\n'
+    div = 48
+    if cmd == 'fcPencil':
+        # Special case for \fcPencil, which is abnormally wide and short.
+        div = 12
+    with open(cmd + '.tex', 'w') as w:
+        w.write(r'''
+\documentclass{minimal}
+\begin{document}
+
+\newsavebox{\fig}
+\savebox{\fig}{\%s{1}{black}{1}}
+\newlength{\figheight}
+\settoheight{\figheight}{\usebox{\fig}}
+
+\makeatletter
+\edef\figscale{\expandafter\strip at pt\dimexpr\figheight / %d\relax}
+\makeatother
+
+\%s{1}{black}{\figscale}
+\end{document}
+'''[1:] % (cmd, div, cmd))
+
+    # Compile the LaTeX file to PDF.
+    stdout += run_and_return_output(['pdflatex', '&mylatex', cmd + '.tex'])
+
+    # Crop the PDF file.
+    stdout += run_and_return_output(['pdfcrop', cmd + '.pdf'])
+
+    # Overwrite the original PDF file with the cropped version.
+    stdout += f'RUN: mv {cmd}-crop.pdf {cmd}.pdf\n'
+    os.rename(f'{cmd}-crop.pdf', f'{cmd}.pdf')
+
+    # Output the buffered output.
+    stdout += '\n'
+    print(stdout)
+
+
+# Concurrently process all figures.
+with concurrent.futures.ProcessPoolExecutor() as executor:
+    executor.map(generate_graphic, commands)


Property changes on: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakefigchild
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakelualatex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakelualatex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakelualatex	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,238 @@
+#! /usr/bin/env python
+
+##############################################
+# Convert LuaLaTeX symbol packages to a      #
+# faked version that works with pdfLaTeX.    #
+#                                            #
+# By Scott Pakin <scott.clsl at pakin.org>      #
+##############################################
+
+import argparse
+import os
+import re
+import string
+import subprocess
+import sys
+
+# Define a "do not edit" header string.
+do_not_edit = '''\
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is a generated file.  DO NOT EDIT. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+'''
+
+
+def kpsewhich(fname):
+    'Find a filename in the TeX tree.'
+    proc = subprocess.run(['kpsewhich', fname], capture_output=True,
+                          check=True, encoding='utf-8')
+    return proc.stdout.strip()
+
+
+class ParsingInfo():
+    '''Represent the information needed to parse one type of symbol from
+    the input LaTeX package.  Information is provided as a
+    semicolon-separated tuple {regexp, symbol suffix, hex increment}.'''
+
+    def __init__(self, info):
+        fields = info.split(' ; ')
+        if len(fields) == 0:
+            raise RuntimeError('failed to parse %s' % repr(info))
+        self.regexp = re.compile(fields[0], re.DOTALL)
+        self.suffix = ''
+        if len(fields) > 1:
+            self.suffix = fields[1]
+        self.increment = 0
+        if len(fields) > 2:
+            self.increment = int(fields[2], 0)
+
+
+class SubFont():
+    'Construct a sub-font containing up to 256 characters.'
+
+    def __init__(self, name, ttf, sym_num):
+        self.name = name
+        self.ttf = ttf
+        self.sym_num = sym_num
+
+    def _gen_encoding_file(self):
+        'Generate an input encoding file.'
+        enc_in = 'fake' + self.name + '-in.enc'
+        with open(enc_in, 'w') as w:
+            w.write(do_not_edit)
+            w.write(f'/{self.name} [\n')
+            for i, (sym, num) in enumerate(self.sym_num):
+                w.write('  /uni%04X  %% %3d: \\%s\n' % (num, i, sym))
+            w.write(']\n')
+        return enc_in
+
+    def _gen_font_files(self, enc_in):
+        'Generate a .tfm, .map, and .enc file from an input .enc file.'
+        args = ['otftotfm',
+                f'--map-file=fake{self.name}.map',
+                '--no-updmap',
+                f'--encoding={enc_in}',
+                '--directory=' + os.getcwd(),
+                ttf,
+                f'fake{self.name}']
+        sys.stderr.write('RUNNING: %s\n' % ' '.join(args))
+        subprocess.run(args, check=True, encoding='utf-8')
+
+    def _find_encoding_name(self):
+        'Return the name of the generated encoding file.'
+        # Read the .map file to find the encoding name.
+        map = 'fake' + self.name + '.map'
+        with open(map) as r:
+            for ln in r:
+                toks = ln.split()
+                if len(toks) == 6:
+                    return toks[4][2:]
+        raise Exception(f'failed to parse {map}')
+
+    def _rename_encoding(self, enc):
+        'Rename the encoding file and its reference in the map file.'
+        new_enc = 'fake' + self.name + '.enc'
+        os.rename(enc, new_enc)
+        map = 'fake' + self.name + '.map'
+        with open(map) as r:
+            all_map = r.readlines()
+        with open(map, 'w') as w:
+            for ln in all_map:
+                ln = ln.replace(enc, new_enc)
+                w.write(ln)
+
+    def generate(self):
+        enc_in = self._gen_encoding_file()
+        self._gen_font_files(enc_in)
+        enc = self._find_encoding_name()
+        self._rename_encoding(enc)
+        os.remove(enc_in)
+
+
+class LaTeXPackage():
+    'Generate a LaTeX package that provides access to multiple font files.'
+
+    def __init__(self, sty, base, names, sym_num):
+        self.sty = sty
+        self.base = base
+        self.names = names
+        self.sym_num = sym_num
+
+    def _provides_description(self):
+        '''Return the optional argument of the original package's
+        ProvidesPackage line.'''
+        with open(self.sty) as r:
+            all_sty = r.read()
+        provides_re = re.compile(r'\\ProvidesPackage\s*\{.*?\}\s*\[(.*?)\]',
+                                 re.DOTALL)
+        return provides_re.search(all_sty).group(1)
+
+    def _map_lines(self):
+        'Return the contents of all .map files.'
+        map_lines = []
+        for name in self.names:
+            with open(name + '.map') as r:
+                for ln in r:
+                    fields = ln.split()
+                    if len(fields) == 6:
+                        map_lines.append(ln.strip())
+        return map_lines
+
+    def generate(self):
+        'Generate a .sty file.'
+        with open(f'fake{self.base}.sty', 'w') as w:
+            # Write a header block.
+            w.write(do_not_edit)
+            w.write('\\NeedsTeXFormat{LaTeX2e}\n')
+            desc = self._provides_description()
+            w.write('\\ProvidesPackage{fake%s}[%s]\n' % (self.base, desc))
+            w.write('\n')
+
+            # Inline all map-file contents.
+            for name, ln in zip(self.names, self._map_lines()):
+                w.write('\\pdfmapline{=%s}\n' % ln)
+                w.write('\\font\\%s=%s at 10pt\n' % (name, name))
+            w.write('\n')
+
+            # Define all symbols.
+            idx = 0  # Index into self.names
+            ofs = 0  # Offset into the 256-character font
+            for sym, num in self.sym_num:
+                w.write('\\DeclareRobustCommand*{\\%s}{{\\%s\\char"%02X}}'
+                        '  %% "%04X\n' %
+                        (sym, self.names[idx], ofs, num))
+                ofs += 1
+                if ofs == 256:
+                    ofs = 0
+                    idx += 1
+            w.write('\n')
+
+            # Write a trailer line.
+            w.write('\\endinput\n')
+
+
+###########################################################################
+
+# Parse the command line.
+parser = argparse.ArgumentParser(description='Generate a pdfLaTeX-compatible'
+                                 ' interface to a LuaLaTeX package.')
+parser.add_argument('base',
+                    help='base name for files to read and write')
+parser.add_argument('in_font',
+                    help='name of underlying .ttf or .otf font file')
+parser.add_argument('--regexp', action='append',
+                    help='regular expression for extracting a LaTeX symbol'
+                    ' name (no slash) as "sym" and a hexadecimal code (no'
+                    ' prefix) as "hex".  Optionally followed by " ; " and'
+                    ' a symbol suffix and " ; " and a code increment')
+cl_args = parser.parse_args()
+base = cl_args.base
+in_font = cl_args.in_font
+if cl_args.regexp is None:
+    sym_hex_parsers = [ParsingInfo(r'\\symbol\{\"(?P<hex>[0-9A-F]+)\}.*?'
+                                   r'\\def\\(?P<sym>[A-Za-z]+)')]
+else:
+    sym_hex_parsers = [ParsingInfo(regexp) for regexp in cl_args.regexp]
+
+# Find the original package and font files.
+sty = kpsewhich(base + '.sty')
+ttf = kpsewhich(in_font)   # Misnomer; may be either TTF or OTF.
+
+# Read the entire package file into a single string.
+with open(sty) as r:
+    all_sty = r.read()
+
+# Construct a list of {symbol name, Unicode number} pairs.
+sym_num = []
+for shp in sym_hex_parsers:
+    for match in shp.regexp.finditer(all_sty):
+        sym, hex = match.group('sym'), match.group('hex')
+        sym_num.append((sym + shp.suffix, int(hex, 16) + shp.increment))
+if sym_num == []:
+    sys.exit('No {symbol, hex} pairs found')
+
+# Generate sub-fonts.
+if len(sym_num) <= 256:
+    # Single required font file
+    subfont = SubFont(base, ttf, sym_num)
+    subfont.generate()
+    names = ['fake' + base]
+else:
+    # Two or more required font files
+    names = []
+    sub_sym_num = sym_num
+    while sub_sym_num != []:
+        suffix = string.ascii_uppercase[len(names)]
+        names.append('fake' + base + suffix)
+        subfont = SubFont(base + suffix, ttf, sub_sym_num[:256])
+        subfont.generate()
+        sub_sym_num = sub_sym_num[256:]
+
+# Generate a LaTeX package.
+package = LaTeXPackage(sty, base, names, sym_num)
+package.generate()
+
+# Delete all map files now that they've been inlined.
+for name in names:
+    os.remove(name + '.map')


Property changes on: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakelualatex
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakestix
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakestix	2024-01-03 21:17:41 UTC (rev 69281)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakestix	2024-01-03 21:18:06 UTC (rev 69282)
@@ -242,8 +242,8 @@
 		   ["Arrowvert",   0x3D, 0x3D, 0x3D, 0x3D, -1, 20],
 
                    ["{LS2}{stixex}{m}{n}", -1, -1, -1, -1, -1, -1],
-                   ["lgroup",      0x69, 0x6E, -1, 0x6B, -2, 2],
-                   ["rgroup",      0x68, 0x6E, -1, 0x6A, -2, 2],
+                   ["rgroup",      0x69, 0x6E, -1, 0x6B, -2, 2],
+                   ["lgroup",      0x68, 0x6E, -1, 0x6A, -2, 2],
                    ["lmoustache",  0x68, 0x6E, -1, 0x6B, -2, 2],
                    ["rmoustache",  0x69, 0x6E, -1, 0x6A, -2, 2]) {
     my ($name, $top, $mid, $rep, $bot, $raise, $scale) = @$delim;

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeutfsym
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeutfsym	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeutfsym	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,127 @@
+#! /usr/bin/env python
+
+##############################################
+# Convert each utfsym picture to a PDF file. #
+#                                            #
+# Author: Scott Pakin <scott.clsl at pakin.org> #
+##############################################
+
+import concurrent.futures
+import glob
+import os
+import re
+import subprocess
+import sys
+
+
+def kpsewhich(fname):
+    'Find a filename in the TeX tree.'
+    proc = subprocess.run(['kpsewhich', fname], capture_output=True,
+                          check=True, encoding='utf-8')
+    return proc.stdout.strip()
+
+
+# Extract the package description from utfsym.sty.
+desc_re = re.compile(r'\\ProvidesExplPackage\{utfsym\}(\{.*\})$')
+sty = kpsewhich('utfsym.sty')
+with open(sty) as r:
+    for ln in r:
+        match = desc_re.search(ln)
+        if match is not None:
+            desc = match[1]
+            break
+
+# Acquire a list of all defined symbols.
+udir = os.path.dirname(kpsewhich('usym1F600.tikz'))
+tikz_files = glob.glob(os.path.join(udir, '*.tikz'))
+symbols = [os.path.splitext(os.path.basename(fn))[0] for fn in tikz_files]
+symbols.sort(key=lambda s: int(s[4:], 16))
+
+# Create a fakeutfsym.sty file.
+with open('fakeutfsym.sty', 'w') as w:
+    w.write('''\
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is a generated file.  DO NOT EDIT. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+''')
+    w.write('''\
+\\NeedsTeXFormat{LaTeX2e}
+\\ProvidesExplPackage{fakeutfsym}%s
+\\RequirePackage{graphicx}
+
+\\NewDocumentCommand{\\usym}{m}{\\includegraphics{utfsym/usym#1}}
+\\NewDocumentCommand{\\usymW}{m m}{\\includegraphics[width=#2]{utfsym/usym#1}}
+\\NewDocumentCommand{\\usymH}{m m}{\\includegraphics[height=#2]{utfsym/usym#1}}
+
+\\endinput
+''' % desc)
+
+# Create and switch to a utfsym subdirectory.
+try:
+    os.mkdir('utfsym')
+except FileExistsError:
+    pass
+os.chdir('utfsym')
+
+
+def run_and_return_output(cmd_line):
+    'Run a command line and return its combined stdout + stderr.'
+    stdout = 'RUN: ' + ' '.join(cmd_line) + '\n'
+    proc = subprocess.run(cmd_line, check=True,
+                          stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    stdout += proc.stdout.decode('utf-8')
+    return stdout
+
+
+# For speed, dump a LaTeX format file with utfsym preloaded.
+with open('preloaded.tex', 'w') as w:
+    w.write(r'''
+\documentclass{minimal}
+\usepackage{utfsym}
+\begin{document}
+\end{document}
+'''[1:])
+subprocess.run([
+    'pdflatex',
+    '--ini',
+    '&pdflatex',
+    'mylatex.ltx',
+    'preloaded.tex'
+],
+    check=True)
+
+
+def generate_graphic(sym):
+    'Generate a PDF file for a given utfsym symbol.'
+    stdout = f'*** PROCESSING {sym} ***\n\n'
+
+    # Create a LaTeX file.
+    stdout += f'CREATE: {sym}.tex\n'
+    with open(sym + '.tex', 'w') as w:
+        w.write(r'''
+\documentclass{minimal}
+\usepackage{utfsym}
+\begin{document}
+\usym{%s}
+\end{document}
+''' % sym[4:])
+
+    # Compile the LaTeX file to PDF.
+    stdout += run_and_return_output(['pdflatex', '&mylatex', sym + '.tex'])
+
+    # Crop the PDF file.
+    stdout += run_and_return_output(['pdfcrop', sym + '.pdf'])
+
+    # Overwrite the original PDF file with the cropped version.
+    stdout += f'RUN: mv {sym}-crop.pdf {sym}.pdf\n'
+    os.rename(f'{sym}-crop.pdf', f'{sym}.pdf')
+
+    # Output the buffered output.
+    stdout += '\n'
+    print(stdout)
+
+
+# Concurrently process all symbols.
+with concurrent.futures.ProcessPoolExecutor() as executor:
+    executor.map(generate_graphic, symbols)


Property changes on: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeutfsym
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeworldflags
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeworldflags	2024-01-03 21:17:41 UTC (rev 69281)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/makefakeworldflags	2024-01-03 21:18:06 UTC (rev 69282)
@@ -1,68 +1,126 @@
-#! /usr/bin/env perl
+#! /usr/bin/env python
 
-##########################################
-# Patch the worldflags package to reduce #
-# conflicts with other packages          #
-#                                        #
-# By Scott Pakin <scott.clsl at pakin.org>  #
-##########################################
+#################################################
+# Convert each worldflags symbol to a PDF file. #
+#                                               #
+# Author: Scott Pakin <scott.clsl at pakin.org>    #
+#################################################
 
-use warnings;
-use strict;
+import concurrent.futures
+import glob
+import os
+import re
+import subprocess
+import sys
 
-# ------------------ #
-# fakeworldflags.sty #
-# ------------------ #
 
-# Prepare to modify the worldflags.sty file into fakeworldflags.sty.
-my $styname = `kpsewhich worldflags.sty`;
-chomp $styname;
-die "${0}: Failed to find worldflags.sty\n" if !$styname;
-open(STY_IN, "<", $styname) || die "${0}: open failed ($!)\n";
-open(STY_OUT, ">", "fakeworldflags.sty") || die "${0}: open failed ($!)\n";
+def kpsewhich(fname):
+    'Find a filename in the TeX tree.'
+    proc = subprocess.run(['kpsewhich', fname], capture_output=True,
+                          check=True, encoding='utf-8')
+    return proc.stdout.strip()
 
-# Output some header boilerplate.
-print STY_OUT "\%" x 43, "\n";
-print STY_OUT "\% This is a generated file.  DO NOT EDIT. \%\n";
-print STY_OUT "\%" x 43, "\n";
-print STY_OUT "\n";
 
-# Apply a prefix to each of \b, \h, and \ifgrid.
-foreach my $ln (<STY_IN>) {
-    $ln =~ s/\\([bh])\b/\\wflags\@$1/g;
-    $ln =~ s/\\ifgrid\b/\\ifwflags\@grid/g;
-    $ln =~ s/\\grid(true|false)\b/\\wflags\@grid$1/g;
-    print STY_OUT $ln;
-}
+# Extract the package date from worldflags.sty.
+wfdate_re = re.compile(r'(\d\d\d\d)-(\d\d)-(\d\d)')
+sty = kpsewhich('worldflags.sty')
+with open(sty) as r:
+    for ln in r:
+        match = wfdate_re.search(ln)
+        if match is not None:
+            wfdate = match[1] + '/' + match[2] + '/' + match[3]
+            break
 
-# Finish the fakeworldflags.sty file.
-close STY_OUT or die "${0}: close failed ($!)\n";
-close STY_IN or die "${0}: close failed ($!)\n";
+# Acquire a list of all defined symbols.
+wfdir = os.path.dirname(kpsewhich('worldflag_US.tex'))
+tex_files = glob.glob(os.path.join(wfdir, '*.tex'))
+flags = [os.path.splitext(os.path.basename(fn))[0][10:] for fn in tex_files]
+flags.sort()
 
-# ---------------- #
-# worldflag_GY.tex #
-# ---------------- #
+# Create a fakeworldflags.sty file.
+with open('fakeworldflags.sty', 'w') as w:
+    w.write('''\
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is a generated file.  DO NOT EDIT. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-# Prepare to modify the worldflag_GY.tex file into the current directory.
-unlink "worldflag_GY.tex";  # Delete any existing version of the file.
-my $texname = `kpsewhich worldflag_GY.tex`;
-chomp $texname;
-die "${0}: Failed to find worldflag_GY.tex\n" if !$texname;
-open(TEX_IN, "<", $texname) || die "${0}: open failed ($!)\n";
-open(TEX_OUT, ">", "worldflag_GY.tex") || die "${0}: open failed ($!)\n";
+''')
+    w.write(r'''
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{fakeworldflags}[%s v0.0 Flags of the world]
+\RequirePackage{graphicx}
 
-# Output some header boilerplate.
-print TEX_OUT "\%" x 43, "\n";
-print TEX_OUT "\% This is a generated file.  DO NOT EDIT. \%\n";
-print TEX_OUT "\%" x 43, "\n";
-print TEX_OUT "\n";
+\newcommand*{\worldflag}[1]{\includegraphics{worldflags/flag_#1}}
 
-# Apply a prefix to \d.
-foreach my $ln (<TEX_IN>) {
-    $ln =~ s/\\d\b/\\wflagsD/g;
-    print TEX_OUT $ln;
-}
+\endinput
+'''[1:] % wfdate)
 
-# Finish the worldflag_GY.tex file.
-close TEX_OUT or die "${0}: close failed ($!)\n";
-close TEX_IN or die "${0}: close failed ($!)\n";
+# Create and switch to a worldflags subdirectory.
+try:
+    os.mkdir('worldflags')
+except FileExistsError:
+    pass
+os.chdir('worldflags')
+
+
+def run_and_return_output(cmd_line):
+    'Run a command line and return its combined stdout + stderr.'
+    stdout = 'RUN: ' + ' '.join(cmd_line) + '\n'
+    proc = subprocess.run(cmd_line, check=True,
+                          stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    stdout += proc.stdout.decode('utf-8')
+    return stdout
+
+
+# For speed, dump a LaTeX format file with worldflags preloaded.
+with open('preloaded.tex', 'w') as w:
+    w.write(r'''
+\documentclass{minimal}
+\usepackage{worldflags}
+\begin{document}
+\end{document}
+'''[1:])
+subprocess.run([
+    'pdflatex',
+    '--ini',
+    '&pdflatex',
+    'mylatex.ltx',
+    'preloaded.tex'
+],
+    check=True)
+
+
+def generate_graphic(flag):
+    'Generate a PDF file for a given worldflags flag.'
+    stdout = f'*** PROCESSING {flag} ***\n\n'
+
+    # Create a LaTeX file.
+    fbase = 'flag_' + flag
+    stdout += f'CREATE: {fbase}.tex\n'
+    with open(fbase + '.tex', 'w') as w:
+        w.write(r'''
+\documentclass{minimal}
+\usepackage{worldflags}
+\begin{document}
+\worldflag[width=9pt]{%s}
+\end{document}
+''' % flag)
+
+    # Compile the LaTeX file to PDF.
+    stdout += run_and_return_output(['pdflatex', '&mylatex', fbase + '.tex'])
+
+    # Crop the PDF file.
+    stdout += run_and_return_output(['pdfcrop', fbase + '.pdf'])
+
+    # Overwrite the original PDF file with the cropped version.
+    stdout += f'RUN: mv {fbase}-crop.pdf {fbase}.pdf\n'
+    os.rename(f'{fbase}-crop.pdf', f'{fbase}.pdf')
+
+    # Output the buffered output.
+    stdout += '\n'
+    print(stdout)
+
+
+# Concurrently process all symbols.
+with concurrent.futures.ProcessPoolExecutor() as executor:
+    executor.map(generate_graphic, flags)

Modified: trunk/Master/texmf-dist/doc/latex/comprehensive/source/makerawtables
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/makerawtables	2024-01-03 21:17:41 UTC (rev 69281)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/makerawtables	2024-01-03 21:18:06 UTC (rev 69282)
@@ -3,9 +3,9 @@
 #############################################
 # Create a massive table of every character #
 # in every font used in the Comprehensive   #
-# LaTeX Symbol List			    #
-#					    #
-# By Scott Pakin <scott+clsl at pakin.org>	    #
+# LaTeX Symbol List                         #
+#                                           #
+# By Scott Pakin <scott+clsl at pakin.org>     #
 #############################################
 
 use Getopt::Long;
@@ -24,7 +24,7 @@
 }
 elsif ($paper eq "a4") {
     $paperwidth = "210mm";
-    $paperheight = "297mm";    
+    $paperheight = "297mm";
 }
 else {
     die $usagestr;
@@ -36,19 +36,37 @@
     return lc($_[0]) cmp lc($_[1]) || $_[0] cmp $_[1];
 }
 
+# Given a base name for a font file, see if the corresponding .sty file
+# exists and includes one or more \pdfmapline lines.  If so, return the
+# concatenation of those lines.  Otherwise, return an empty string.  This
+# function is intended to be used for faked font files.
+sub find_map_line ($)
+{
+    my $mapline = "";
+    my $sty = $_[0];
+    $sty =~ s/[A-Z]$//;  # One .sty representing multiple .tfm files
+    $sty .= ".sty";
+    open(STY, "<", $sty) || return $mapline;
+    while (my $ln = <STY>) {
+        $mapline .= $& if $ln =~ /^\\pdfmapline.*\}$/o;
+    }
+    close STY;
+    return $mapline;
+}
+
 # Define a subroutine that returns a list of valid font names to process.
 sub find_valid_fonts ()
 {
     # Build the CLSL under strace to acquire a list of .tfm files.
     my %unique_tfms;
-    open(STRACE, "strace -e trace=open,openat -s 32768 -f pdflatex -jobname symbols-letter-pdf \"\\\\RequirePackage{snapshot}\\\\PassOptionsToClass{letterpaper}{article}\\\\input symbols\" 2>&1|") || die "open: $!\n";
+    open(STRACE, "strace -e trace=open,openat -s 32768 -f pdflatex -jobname symbols-letter-pdf \"\\\\PassOptionsToClass{letterpaper}{article}\\\\input symbols\" 2>&1|") || die "open: $!\n";
     while (my $oneline = <STRACE>) {
-	print $oneline;
-	next if $oneline !~ /open\(\"(.*?)\.tfm\",.*\)\s+=\s+(\S+)/ &&
-	    $oneline !~ /openat\(\w+, \"(.*?)\.tfm\",.*\)\s+=\s+(\S+)/;
-	my ($tfm, $retcode) = (basename($1), $2);
-	next if $retcode eq "-1";
-	$unique_tfms{$tfm} = 1;
+        next if $oneline !~ /open\(\"(.*?)\.tfm\",.*\)\s+=\s+(\S+)/ &&
+            $oneline !~ /openat\(\w+, \"(.*?)\.tfm\",.*\)\s+=\s+(\S+)/;
+        my ($tfm, $retcode) = (basename($1), $2);
+        next if $retcode eq "-1";
+        print defined $unique_tfms{$tfm} ? "$tfm (duplicate)\n" : "$tfm\n";
+        $unique_tfms{$tfm} = 1;
     }
     close STRACE || die;
     my @tfmlist = sort compare_names keys %unique_tfms;
@@ -56,45 +74,52 @@
     # Produce one table per font (overwriting as we go) to determine which
     # fonts are missing, then remove those from the TFM list.
     foreach my $tfm (@tfmlist) {
-	print "\n*** TESTING $tfm ***\n";
-	open(PDFTEX, "|pdftex testfont") || die "open: $!\n";
-	print PDFTEX $tfm, "\n";
-	print PDFTEX "\\table\n";
-	print PDFTEX "\\bye\n";
-	close PDFTEX || do {
-	    print "*** DISCARDING $tfm ***\n";
-	    delete $unique_tfms{$tfm};
-	};
+        print "\n*** TESTING $tfm ***\n";
+        my $mapline = substr($tfm, 0, 4) eq "fake" ? find_map_line($tfm) : "";
+        if ($mapline eq "") {
+            open(PDFTEX, "|pdftex -jobname=testfont-$paper testfont") || die "open: $!\n";
+        }
+        else {
+            open(PDFTEX, "|pdftex -jobname=testfont-$paper '$mapline\\input testfont'") || die "open: $!\n";
+        }
+        print PDFTEX $tfm, "\n";
+        print PDFTEX "\\table\n";
+        print PDFTEX "\\bye\n";
+        close PDFTEX || do {
+            print "*** DISCARDING $tfm ***\n";
+            delete $unique_tfms{$tfm};
+        };
     }
     @tfmlist = sort compare_names keys %unique_tfms;
 
-    # For fonts that come in multiple sizes, discard all but the closest to 10 pt.
+    # For fonts that come in multiple sizes, discard all but the closest to
+    # 10 pt.
     my %base2tfms;
     foreach my $tfm (@tfmlist) {
-	if ($tfm =~ /^(\D+)\d+$/) {
-	    push @{$base2tfms{$1}}, $tfm;
-	}
-	else {
-	    push @{$base2tfms{$tfm}}, $tfm;
-	}
+        if ($tfm =~ /^(\D+)\d+$/) {
+            push @{$base2tfms{$1}}, $tfm;
+        }
+        else {
+            push @{$base2tfms{$tfm}}, $tfm;
+        }
     }
     while (my ($base, $tfmref) = each %base2tfms) {
-	my @tfms = @$tfmref;
-	if ($#tfms == 0) {
-	    $base2tfms{$base} = $tfms[0];
-	    next;
-	}
-	my @sizes = map {/(\d+)/; $1 >= 100 ? $1/1000 : $1} @tfms;
-	my ($best_tfm, $least_badness) = (0, 2**30);
-	foreach my $i (0 .. $#sizes) {
-	    my $bad = ($sizes[$i] - 10)**2;
-	    if ($bad < $least_badness) {
-		$best_tfm = $tfms[$i];
-		$least_badness = $bad;
-	    }
-	}
-	print "*** RETAINING ONLY $best_tfm OUT OF [@tfms] ***\n";
-	$base2tfms{$base} = $best_tfm;
+        my @tfms = @$tfmref;
+        if ($#tfms == 0) {
+            $base2tfms{$base} = $tfms[0];
+            next;
+        }
+        my @sizes = map {/(\d+)/; $1 >= 100 ? $1/1000 : $1} @tfms;
+        my ($best_tfm, $least_badness) = (0, 2**30);
+        foreach my $i (0 .. $#sizes) {
+            my $bad = ($sizes[$i] - 10)**2;
+            if ($bad < $least_badness) {
+                $best_tfm = $tfms[$i];
+                $least_badness = $bad;
+            }
+        }
+        print "*** RETAINING ONLY $best_tfm OUT OF [@tfms] ***\n";
+        $base2tfms{$base} = $best_tfm;
     }
     @tfmlist = sort compare_names values %base2tfms;
     return @tfmlist;
@@ -103,8 +128,8 @@
 # Use the font list from a prior run if available.  Otherwise, process
 # symbols.tex to acquire a list of valid fonts.
 my @tfmlist;
-if (-e "rawtables.list") {
-    open(LIST, "<", "rawtables.list") || die "open: $!\n";
+if (-e "rawtables-$paper.list") {
+    open(LIST, "<", "rawtables-$paper.list") || die "open: $!\n";
     chomp(@tfmlist = <LIST>);
     close LIST;
 }
@@ -114,7 +139,7 @@
 
     # Dump the list of font names to disk to use for speeding up
     # subsequent runs.
-    open(LIST, ">", "rawtables.list") || die "open: $!\n";
+    open(LIST, ">", "rawtables-$paper.list") || die "open: $!\n";
     print LIST join("\n", @tfmlist), "\n";
     close LIST;
 }
@@ -203,7 +228,7 @@
 % \LaTeX typesets the LaTeX logogram in either roman or italic.  The
 % code was derived from the definition of \LaTeX in texnames.sty.
 \def\LaTeX{%
-  \ifdim\fontdimen1\font>0pt 
+  \ifdim\fontdimen1\font>0pt
     \bgroup
       \itshape
       L\kern-.36em\raise.3ex\hbox{\setfontsize{10pt}\itshape A}\kern-.23em\TeX
@@ -229,7 +254,7 @@
  \centerline{Scott Pakin, \textit{scott+clsl at pakin.org}}\par}
 \vskip10pt
 \centerline{%
-  \number\day \ 
+  \number\day \
   \ifcase\month
      \or January\or February\or March%
      \or April\or May\or June%
@@ -284,7 +309,7 @@
 }
 \def\cs#1{\hbox{\texttt{\expandafter\string\csname#1\endcsname}}}
 
-To put this means of character usage in contact, suppose we want to
+To put this means of character usage in context, suppose we want to
 typeset \cs{sqiiint} (``\sqiiint\kern3pt'') from the \textsf{txfonts}
 package.  \textsf{txfonts} is a large package that redefines all text
 and math fonts, which may not be desirable just to typeset a single
@@ -329,6 +354,12 @@
 Note that the \textsf{amstext} package's \cs{text} command is a useful
 mechanism for typesetting text characters in math mode.
 
+Fonts named ``\texttt{fake}\dots'' that appear in this document are
+generated from the corresponding non-\texttt{fake} font as a means of
+introducing pdf\LaTeX\ compatibility to fonts that otherwise lack it.  The
+character positions of a \texttt{fake}\dots\ font are meaningless and
+should be ignored.
+
 \vfill\eject
 
 % Use Knuth's testfont.tex to typeset a bunch of tables.
@@ -338,6 +369,10 @@
 ;#`
 foreach my $tfm (@tfmlist) {
     print "*** PRODUCING A TABLE FOR $tfm ***\n";
+    my $mapline = substr($tfm, 0, 4) eq "fake" ? find_map_line($tfm) : "";
+    if ($mapline ne "") {
+        print PDFTEX $mapline, "\n";
+    }
     printf PDFTEX "\\fonttable{%d}{%s}\n", $lettertally{uc(substr $tfm, 0, 1)}, $tfm;
 }
 print PDFTEX "\\bye\n";

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/maketitlepage
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/maketitlepage	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/maketitlepage	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,261 @@
+#! /usr/bin/env python
+
+##############################################
+# Generate a fancy title page.               #
+#                                            #
+# Author: Scott Pakin <scott.clsl at pakin.org> #
+##############################################
+
+import random
+import re
+import subprocess
+import sys
+
+
+def read_logos():
+    '''Read a list of logo symbols from symbols.tex.  Return a regular
+    expression that matches them.'''
+    # Prepare to match tables and symbols.
+    table_re = re.compile(r'^\\begin\{(?:long)?symtable}.*'
+                          r'(Brand Icons|Academic Profile Icons)\}')
+    logo_re = re.compile(r'\\K(\S+)')
+
+    # Read a list of logos from symbols.tex.
+    logo_icons = []
+    with open('symbols.tex') as r:
+        in_logo_table = False
+        for ln in r:
+            if in_logo_table:
+                # We're in a table of logos.
+                if '\\end{longsymtable}' in ln or '\\end{symtable}' in ln:
+                    # We reached the end of the table.
+                    in_logo_table = False
+                    continue
+                for m in logo_re.finditer(ln):
+                    # Store all brand-name symbols encountered.
+                    logo_icons.append(m[1])
+            elif table_re.match(ln) is not None:
+                # We weren't in a table of logos but are now.
+                in_logo_table = True
+
+    # Convert the list to a regular expression and return it.
+    esc_syms = [re.escape(b) for b in logo_icons]
+    return re.compile('^(%s)$' % '|'.join(esc_syms))
+
+
+def read_glyphs(fname):
+    'Return a set of glyphs read from an index file.'
+    # Define a list of symbols to ignore.
+    ignore = [
+        r'\pkgname',        # Not a symbol
+        r'\trysym',         # Not a symbol
+        r'$\neswarrow$',    # Not defined in the document's preamble
+        r'$\nwsearrow$',    # Not defined in the document's preamble
+        r'{\ndttstile}',    # I don't know why this fails.
+        r'\blackacc\actuarial',    # Not defined in the document's preamble
+        r'$\dashint$',      # Not defined in the document's preamble
+        r'$\ddashint$',     # Not defined in the document's preamble
+        r'$\independent$',  # Not defined in the document's preamble
+        r'\irony',          # Not defined in the document's preamble
+        r'$\topbot$',       # Not defined in the document's preamble
+        r'$\dotcup$',       # Not defined in the document's preamble
+        r'$\rqm$',          # Not defined in the document's preamble
+        r'$\threesim$',     # Not defined in the document's preamble
+        r'\AA',             # Font-encoding error (not sure why)
+        r'\aa',             # Font-encoding error (not sure why)
+        r'{\OGONk}',        # Font-encoding error (not sure why)
+        r'{\underparenthesis}',    # Not defined in the document's preamble
+        r'{\overparenthesis}',     # Not defined in the document's preamble
+        r'$\stst$',         # Not defined in the document's preamble
+        r'\DEDEwholeof',    # Not defined in the document's preamble
+        r'\DEDEpartof',     # Not defined in the document's preamble
+        r'$\suchthat$',     # Not defined in the document's preamble
+        r'\definitedescription',   # Not defined in the document's preamble
+        r'$\revddots$',     # Not defined in the document's preamble
+        r'$\barcirc$',      # Not defined in the document's preamble
+        r'$\bbar$',         # Not defined in the document's preamble
+        r'$\dbar$',         # Not defined in the document's preamble
+        r'\ismodeledby',    # Not defined in the document's preamble
+        r'\hksqrt',         # Not defined in the document's preamble
+        r'\asterism',       # Not defined in the document's preamble
+        r'\suchthat',       # Not defined in the document's preamble
+        r'\twemoji',        # Color; we want only black-and-white here
+        r'\worldflag',      # Color; we want only black-and-white here
+        r'\RHAT',           # Color; we want only black-and-white here
+        r'\euflag',         # Color; we want only black-and-white here
+        r'\spverb+(+',      # Single parenthesis confuses us
+    ]
+    smiley_re = re.compile(r'^\\d?([A-Z].*ey|Ninja)$')
+    tree_re = re.compile(r'^\\(Autumn|Summer|Worst|Spring|Winter)[Tt]ree$')
+    logos_re = read_logos()
+
+    # Extract a list of symbols from the index file.
+    glyphs = set()
+    glyph_re = re.compile(r'^\\indexentry\{.*\(([^)]*\\[^)]+)\)\|hyperpage')
+    with open(fname) as r:
+        for ln in r:
+            m = glyph_re.match(ln)
+            if m is not None:
+                g = m[1].strip()
+                if any([bad in g for bad in ignore]):
+                    continue
+                if g in [
+                        '}',   # Confusion from "\textknit{(}"
+                        '$',   # Confusion from "($($)"
+                        '}}',  # Confusion from "\ensuremath{...\char`(}}"
+                ]:
+                    continue
+                if g.startswith(r'\bc'):
+                    continue   # Color; we want only black-and-white here
+                if smiley_re.match(g) is not None:
+                    continue   # Color; we want only black-and-white here
+                if tree_re.match(g) is not None:
+                    continue   # Color; we want only black-and-white here
+                if logos_re.match(g) is not None:
+                    continue   # Don't give free advertising to organizations
+                glyphs.add(g)
+    return glyphs
+
+
+def write_latex_file(paper_size, glyphs, terminate_after=False):
+    'Write a .tex file suitable for inclusion in symbols.tex.'
+    tex_name = f'title-{paper_size}.tex'
+    with open(tex_name, 'w') as w:
+        # Output header boilerplate.
+        w.write(r'''
+% Show a glyph with some trailing stretchable space.  If the glyph is
+% too tall or too wide, shrink it to fit.  If the glyph is too deep,
+% discard it.
+\newlength{\symdim}
+\newsavebox{\symbox}
+\newcommand*{\maybeshow}[1]{%
+  \savebox{\symbox}{#1}%
+  \settoheight{\symdim}{\usebox{\symbox}}%
+  \ifdim\symdim>10pt\relax
+    \savebox{\symbox}{\resizebox{!}{10pt}{\usebox{\symbox}}}%
+  \fi
+  \settowidth{\symdim}{\usebox{\symbox}}%
+  \ifdim\symdim>10pt\relax
+    \savebox{\symbox}{\resizebox{10pt}{!}{\usebox{\symbox}}}%
+  \fi
+  \settodepth{\symdim}{\usebox{\symbox}}%
+  \ifdim\symdim<2pt\relax
+    \usebox{\symbox}%
+    \hskip 1.5pt plus 1pt\relax
+  \fi
+}
+
+% Define the title block.
+\makeatletter
+\let\todaysdate=\@date
+\makeatother
+\newsavebox{\titlebox}
+\begin{lrbox}{\titlebox}
+  \usefont{T1}{phv}{bx}{n}%
+  \begin{tabular}{@{}c@{}}
+    \\[20pt]
+    \fontsize{28}{30}\selectfont The Comprehensive \\[14pt]
+    \fontsize{28}{30}\selectfont \LaTeX\ Symbol List \\[3cm]
+    \fontsize{14}{18}\selectfont
+        Scott Pakin, \textit{scott-ctan at pakin.org} \\[1cm]
+    \fontsize{14}{18}\selectfont \todaysdate
+  \end{tabular}
+\end{lrbox}
+\renewcommand*{\windowpagestuff}{%
+  \centering\usebox{\titlebox}%
+}
+
+% Typeset the title page.
+''')
+
+        # Use the cutwin package to draw the title page.
+        top = 12 if paper_size == 'a4' else 10
+        margin = '2cm' if paper_size == 'a4' else '1in'
+        w.write('\\begin{cutout}{%d}{%s}{%s}{20}\n' % (top, margin, margin))
+        w.write(r'  \cutfuzz\parindent=0pt\parfillskip=0pt' + '\n')
+        for g in glyphs:
+            w.write(r'  \maybeshow{%s}%%' % g)
+            w.write('\n')
+        w.write('\\end{cutout}\n')
+        if terminate_after:
+            w.write('\n')
+            w.write('\\end{titlepage}\n')
+            w.write('\\end{document}\n')
+
+
+def build_latex_file(paper_size):
+    '''Run pdflatex on the title page as incorporated into the symbol
+    list.  Return the page count.'''
+    # Run pdflatex.
+    subprocess.run(['pdflatex',
+                    '-jobname',
+                    'symbols-' + paper_size,
+                    r'\PassOptionsToClass{%spaper}{article}' % paper_size +
+                    r'\def\titlefile{title-%s}\input symbols' % paper_size],
+                   check=True)
+
+    # Query the log file for the page count.
+    symbols_base = f'symbols-{paper_size}'
+    rerun = False
+    with open(f'{symbols_base}.log') as r:
+        for ln in r:
+            # Check if we need to re-run pdflatex.
+            if ln.startswith('LaTeX Warning: Temporary extra page added'
+                             ' at the end. Rerun to get it removed.'):
+                rerun = True
+                break
+
+            # Return the number of pages.
+            if ln.startswith(f'Output written on {symbols_base}.pdf'):
+                fields = ln.split()
+                return int(fields[4][1:])
+
+    # Try again if we got stuck with an extra page.
+    if rerun:
+        return build_latex_file(paper_size)
+    raise RuntimeError(f'unexpected contents of symbols-{paper_size}.log')
+
+
+def binary_search_num_glyphs(paper_size, glyphs, lb, ub):
+    '''Return the maximum number of glyphs that can fit on a single page.
+    The invariant is that lb glyphs fit on the page and ub glyphs do not.'''
+    # Handle the base case.
+    if lb == ub - 1:
+        sys.stderr.write(f'INFO: Binary search found {lb} symbols is'
+                         f' optimal for {paper_size} paper.\n')
+        return lb
+
+    # Build with the midpoint of lb and ub number of glyphs.
+    mb = (lb + ub)//2
+    write_latex_file(paper_size, glyphs[:mb], terminate_after=True)
+    npages = build_latex_file(paper_size)
+    sys.stderr.write(f'INFO: Binary search found that {mb} symbols produce' +
+                     (' 1 page' if npages == 1 else f' {npages} pages') +
+                     ' of output.\n')
+
+    # Narrow the range of glyphs and recursively try again.
+    if npages == 1:
+        return binary_search_num_glyphs(paper_size, glyphs, mb, ub)
+    else:
+        return binary_search_num_glyphs(paper_size, glyphs, lb, mb)
+
+
+###########################################################################
+
+# Parse the command line.
+try:
+    idx_name = sys.argv[1]
+    paper_size = sys.argv[2]
+except IndexError:
+    raise SystemExit('Usage: %s <file.idx> "a4"|"letter"' % sys.argv[0])
+
+# Acquire a list of glyphs and randomize their order.
+glyphs = list(read_glyphs(idx_name))
+random.shuffle(glyphs)
+
+# Determine the maximum number of glyphs that can fit on a page.
+nglyphs = binary_search_num_glyphs(paper_size, glyphs, 1000, 3000)
+
+# Perform a final build to leave LaTeX's auxiliary files as we found them.
+write_latex_file(paper_size, glyphs[:nglyphs])
+build_latex_file(paper_size)


Property changes on: trunk/Master/texmf-dist/doc/latex/comprehensive/source/maketitlepage
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/patch-idx
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/patch-idx	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/patch-idx	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,147 @@
+#! /usr/bin/env python
+
+##############################################
+# Patch a generatex .idx file to improve     #
+# index formatting.                          #
+#                                            #
+# Author: Scott Pakin <scott.clsl at pakin.org> #
+##############################################
+
+import re
+import sys
+
+
+def allow_breaks(s):
+    'Allow line breaks in long, verbatim strings.'
+    break_before = '[({'
+    break_after = '-.'
+    toks = [s[0]]
+    for c in s[1:]:
+        if c.isupper() and toks[-1].islower():
+            # Allow hyphenation between a lowercase letter and an
+            # uppercase letter.
+            toks.append('+\\-\\spverb+')
+        elif toks[-1] not in break_before and c in break_before:
+            # Allow a line break before certain characters.
+            toks.append('+\\linebreak[0]\\spverb+')
+        elif toks[-1] in break_after and c not in break_after:
+            # Allow a line break after certain characters.
+            toks.append('+\\linebreak[0]\\spverb+')
+        toks.append(c)
+    return ''.join(toks)
+
+
+# Map punctuation to names.
+punct2name = {
+    '\\{': 'lcurly',
+    '\\}': 'rcurly',
+    '\\|': 'Vert',
+    '|': 'vert',
+}
+
+# Define regular expressions to search for formatting that can be improved.
+magic_re = re.compile(r'^\\indexentry\{_=\\(magic[A-Za-z]+)')
+punct_re = re.compile(r'^\\indexentry{_=\\(?:sp)?verb\+([^+]+)\+')
+num_arg_re = re.compile(r'\{([0-9A-Fa-f]+)\}=')
+paren_spc_re = re.compile(r'\(\\(\S+)\s*\)')
+long_verb_re = re.compile(r'=\\spverb\+\\([^+]{25,})\+')
+dancers_re = re.compile(r'\(\\Pisymbol\s*\{dancers\}\{(\d+)\}\)')
+twemoji_flag_1_re = re.compile(r'=flag:\s+St\.\s+(.*?)\\\s+\(\\twemoji')
+twemoji_flag_2_re = re.compile(r'\{flag:\s+(.*?)'
+                               r'=flag:\s+(.*?)\\\s+\(\\twemoji')
+twemoji_flag_3_re = re.compile(r'\{(.*?)\s+flag=(.*?)\s+flag\\\s+\(\\twemoji')
+cs_space_re = re.compile(r'(\\[A-Za-z]+)\s+(?![A-Za-z\n])')
+sym_num_re = re.compile(r'^\\indexentry{([a-z][a-zA-Z]+\d)=\1(.*)$')
+extra_space_re = re.compile(r'\s{2,}')
+backslash_space_re = re.compile(r'(\w)\\\s+')
+curly_special_re = re.compile(r'\{([>={}!])\}')
+twemoji_bang_re = re.compile(r'([A-Z]{2,}!)')
+
+###########################################################################
+
+# Read the entire input file.
+if len(sys.argv) < 2:
+    sys.exit(f'Usage: {sys.argv[0]} <filename.idx>')
+with open(sys.argv[1]) as r:
+    all = r.readlines()
+
+# Process the file line-by-line.
+more = []
+for i in range(len(all)):
+    # Collapse multiple spaces into one and remove unnecessarily
+    # backslashed spaces.
+    all[i] = extra_space_re.sub(' ', all[i])
+    all[i] = backslash_space_re.sub(r'\1 ', all[i])
+
+    # Escape special characters.
+    all[i] = curly_special_re.sub(r'{!\1}', all[i])
+    special = all[i][12]
+    if special in '>=|{}' and all[i][13] == '=':
+        rest = all[i][14:]
+        if special not in '{}':
+            rest = rest.replace(f'{special}+', f'!{special}+')
+        all[i] = all[i][:12] + '!' + special + '=' + rest
+    all[i] = all[i].replace(r'verb+\|+', r'verb+\+\texttt{\char"7C}')
+
+    # Replace punctuation indexed under "_" with a "_" followed by a name.
+    match = punct_re.match(all[i])
+    if match is not None:
+        try:
+            all[i] = all[i][:13] + 'magic' + punct2name[match[1]] + all[i][13:]
+        except KeyError:
+            pass
+
+    # Consistently index "magic" punctuation.
+    match = magic_re.match(all[i])
+    if match is not None:
+        all[i] = all[i].replace('_', '_' + match[1], 1)
+
+    # Format numerical arguments (decimal or hexadecimal) to a fixed
+    # width of 5.
+    if "worldflag" not in all[i]:
+        all[i] = num_arg_re.sub(lambda m: '{%s}=' % m[1].rjust(5, '0'), all[i])
+
+    # Remove trailing spaces within parentheses to canonicalize formatting.
+    all[i] = paren_spc_re.sub(r'(\\\g<1>)', all[i])
+
+    # Remove spaces after control sequences to canonicalize formatting
+    # and improve typesetting.
+    all[i] = cs_space_re.sub(r'\1', all[i])
+
+    # Allow line breaks in long, control sequences typeset verbatim.
+    all[i] = long_verb_re.sub(lambda m: ('=\\spverb+\\' +
+                                         allow_breaks(m[1]) +
+                                         '+'),
+                              all[i])
+
+    # Insert space after each dancers symbol so the closing parenthesis
+    # doesn't overlap the symbol.
+    all[i] = dancers_re.sub(r'(\\Pisymbol{dancers}{\1}\\hspace{0.5em})',
+                            all[i])
+
+    # Re-index all twemoji flags as subentries under "flags".
+    all[i] = twemoji_flag_1_re.sub(r'=flag: St.\\ \1\\ (\\twemoji', all[i])
+    all[i] = twemoji_flag_2_re.sub(r'{flags>\1=\2 (\\twemoji', all[i])
+    if "mailbox" not in all[i]:
+        all[i] = twemoji_flag_3_re.sub(r'{flags>\1=\2 (\\twemoji', all[i])
+
+    # Remove "keycap:" from all tweomoji entries.
+    if '\\indexentry{keycap: ' in all[i]:
+        all[i] = all[i].replace('keycap: ', '')
+
+    # Remove numbers from numbered symbols (e.g., converting "dog2" to just
+    # "dog".
+    match = sym_num_re.match(all[i])
+    if match is not None:
+        sym = match[1][:-1]
+        all[i] = '\\indexentry{%s=%s%s\n' % (sym, sym, match[2])
+
+    # Double the "!" in emoji names containing that symbol such as "ON!
+    # arrow" and "UP! button".  "!" is the escape character in our
+    # Makeindex configuration.
+    all[i] = twemoji_bang_re.sub(r'\1!', all[i])
+
+# Overwrite the input file with the updates.
+with open(sys.argv[1], 'w') as w:
+    for ln in all + more:
+        w.write(ln)


Property changes on: trunk/Master/texmf-dist/doc/latex/comprehensive/source/patch-idx
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,1628 @@
+#! /usr/bin/env python
+
+##############################################
+# Remove unnecessary index entries and merge #
+# other index entries to improve index       #
+# usability.                                 #
+#                                            #
+# Author: Scott Pakin <scott.clsl at pakin.org> #
+##############################################
+
+import argparse
+import collections.abc
+import copy
+import multiprocessing
+import re
+import subprocess
+import sys
+import textwrap
+import toml
+from collections import defaultdict
+from dataclasses import dataclass
+
+
+class Subitem():
+    '''Represent an index key and an optional rendering of that key.
+    The rendering is split into a rendering of the key proper, an
+    optional rendering of the corresponding glyph, and optional
+    suffix material.'''
+
+    glyph_re = re.compile(r'^(.*?)\s+\((\S+)\)([^()]*)$')
+
+    def __init__(self, key, latex=None):
+        self.key = key
+        self.full_render = latex
+
+    @property
+    def full_render(self):
+        '''Return the render, glyph, and suffix as a single string or None
+        if no rendering is defined.'''
+        if self.render is None:
+            return None
+        if self.glyph is None:
+            return self.render
+        return '%s (%s)%s' % (self.render, self.glyph, self.suffix or '')
+
+    @full_render.setter
+    def full_render(self, latex):
+        'Parse LaTeX code into a render, glyph, and suffix.'
+        self.render = None
+        self.glyph = None
+        self.suffix = None
+        if latex is None:
+            return
+        match = self.glyph_re.match(latex)
+        if match is None:
+            self.render = latex
+        else:
+            self.render = match[1]
+            if match[2] != '':
+                self.glyph = match[2]
+                if match[3] != '':
+                    self.suffix = match[3]
+
+    def __repr__(self):
+        return repr((self.key, self.render, self.glyph, self.suffix))
+
+    def __str__(self):
+        if self.render is None:
+            return self.key
+        if self.glyph is None:
+            return f'{self.key}={self.render}'
+        return '%s=%s (%s)%s' % \
+            (self.key, self.render, self.glyph, self.suffix or '')
+
+
+class IndexEntry():
+    'Represent a single line of an .idx file.'
+
+    entry_re = re.compile(r'^\\indexentry\{(.*)\|(.*)\}\{(\d+)\}$')
+    item_re = re.compile(r'^([^=]+)(=.*)?$')
+    glyph_re = re.compile(r'^(.*?)\s+\((\S+)\)$')
+
+    def __init__(self, ln):
+        # Parse the line into an item, page-number formatting code, and the
+        # page number itself.  From the formatting code, extract a grouping
+        # code, which is either "(", ")", or None.
+        match = self.entry_re.match(ln)
+        if match is None:
+            raise ValueError('failed to parse %s' % repr(ln))
+        item_str = match[1]
+        self.group = None
+        self.format = match[2]
+        if self.format[0] in ['(', ')']:
+            self.group = self.format[0]
+            self.format = self.format[1:]
+        self.page = int(match[3])
+        self.trace = False   # Used only for debugging
+
+        # Parse the item into one or more sub-items.
+        sub_gt = '*GREATER-THAN*'   # Replacement for quoted ">" (i.e., "!>")
+        item_str = item_str.replace('!>', sub_gt)
+        subitems = [it.replace(sub_gt, '!>') for it in item_str.split('>')]
+
+        # Convert each sub-item into a Subitem object.
+        self.subitems = []
+        for si in subitems:
+            match = self.item_re.match(si)
+            if match is None:
+                raise ValueError('failed to parse %s' % repr(ln))
+            render = match[2]
+            if render is not None:
+                render = render[1:]   # Drop the "=".
+            self.subitems.append(Subitem(match[1], render))
+
+        # To help with debugging, save the original version of the object
+        # before rewrites.
+        self.original = copy.deepcopy(self)
+
+    def __repr__(self):
+        return repr(([repr(si) for si in self.subitems],
+                     self.group, self.format, self.page))
+
+    def __str__(self):
+        toks = []
+        toks.append('\\indexentry{')
+        toks.append('>'.join([str(si) for si in self.subitems]))
+        toks.append('|')
+        if self.group is not None:
+            toks.append(self.group)
+        toks.append(self.format)
+        toks.append('}{%d}' % self.page)
+        return ''.join(toks)
+
+    def prioritization_key(self):
+        'Return a key for use in sorting entries in priority order.'
+        # The key first prioritizes entries using a small set of glyphs
+        # known to look nicer than the first occurring glyph for the same
+        # item.  Then, it prioritizes all non-None glyphs.  Finally, it
+        # prioritizes all non-None renderings.
+        subitemN = self.subitems[-1]
+        n_subs = len(self.subitems)
+        if all([si.render is None for si in self.subitems]):
+            # Subitem tally, normal priority glyph, no glyph, no rendering.
+            return (n_subs, 0, True, True)
+        if all([si.glyph is None for si in self.subitems]):
+            # Subitem tally, normal priority glyph, no glyph, rendering.
+            return (n_subs, 0, True, False)
+        for code in [
+                # Nicer-looking variants
+                r'$\forall$',
+                r'\ABXwidering',
+                r'\worldflag{',
+                r'\FDSYMrightangle',
+                r'\sphericalangle',
+                r'\Opn',               # logix open delimiter
+                r'\twemoji{27a1}',     # "right arrow"
+                r'\MNSbrace',
+                r'\overbracket',
+                r'\leftrightarrow',
+                r'\FDSYMoverbrace',
+                r'\FDSYMunderbrace',
+                r'\overbracket',
+                r'\underbracket',
+                r'\overparenthesis',
+                r'\underparenthesis',
+                r'\shortunderlvecc',
+                r'\shortundervecc',
+                r'\shortvecc',
+                r'\shortlvecc',
+                r'\FDSYMnsubset',
+                r'\FDSYMnsupset',
+                r'\FDSYMnsqsubset',
+                r'\FDSYMnsqsupset',
+                r'\FDSYMnSqsubset',
+                r'\FDSYMnSqsupset',
+                r'\FiveStar',
+                r'\officialeuro',
+                r'\mfWireless',
+                r'\bcfeutricolore',
+                r'\squadlineh',
+                r'\squadlinev',
+                r'\squadcross',
+                r'\squaddot',
+                r'\SquareCastShadowBottomRight',
+                r'\WhiteSquareG',
+                r'\BlackSquareG',
+                r'\FDSYMemptyset',
+                r'\STIXAngstrom',
+                r'\textregistered',
+                r'\texttrademark',
+                r'\neg',
+                r'\exists',
+                r'\times',
+                r'\invamp',
+                r'\igoblackstone',
+                r'\MNSrightfree',
+                r'\MNSnrightfree',
+                r'$\prod$',
+                r'\MVLeftBracket',
+                r'\faQuestionCircle[regular]',
+                r'\BlackCircleG',
+                r'\FDSYMmedblackdiamond',
+                r'\musSegno',
+                r'\MNStbigostar',
+                r'\faUserCircle[regular]',
+
+                # Squares and rhombuses with arrows
+                r'$\boxRight',
+                r'$\boxright',
+                r'$\boxdotRight',
+                r'$\boxdotright',
+                r'$\DiamondRight',
+                r'$\Diamondright',
+                r'$\DiamonddotRight',
+                r'$\Diamonddotright',
+
+                # Chess pieces
+                r'\symbishop',
+                r'\symking',
+                r'\symknight',
+                r'\sympawn',
+                r'\symqueen',
+                r'\symrook',
+
+                # Halloween math
+                r'\overrightwitchonbroom',
+                r'\underrightwitchonbroom',
+                r'\overrightwitchonpitchfork',
+                r'\underrightwitchonpitchfork',
+                r'\overrightswishingghost',
+                r'\underrightswishingghost',
+                r'\mathbat',
+
+                # Harpoons
+                r'\rightharpoonup',
+                r'\STIXbarrightharpoonup',
+                r'\STIXrightharpoonupbar',
+                r'\ABXrightbarharpoon',
+                r'\MNSnleftrightharpoonupdown',
+                r'\MNSnleftrightharpoons',
+                r'\MTOOLSxrightharpoonup',
+                r'\longvarrightharp',
+                r'\FDSYMnrightharpoonup',
+                r'\ABXrightrightharpoons',
+
+                # Corners
+                r'\GOlftbotcorner',
+                r'\GOlfttopcorner',
+                r'\GOrtbotcorner',
+                r'\GOrttopcorner',
+
+                # Basic Greek letters with no embellishments.
+                r'$\alpha$', r'$\beta$', r'$\gamma$', r'$\delta$',
+                r'$\epsilon$', r'$\zeta$', r'$\eta$', r'$\theta$',
+                r'$\iota$', r'$\kappa$', r'$\lambda$', r'$\mu$', r'$\nu$',
+                r'$\xi$', r'$\omicron$', r'$\pi$', r'$\rho$', r'$\sigma$',
+                r'$\tau$', r'$\upsilon$', r'$\phi$', r'$\chi$', r'$\psi$',
+                r'$\omega$', r'\textAlpha', r'\textBeta', r'\textGamma',
+                r'\textDelta', r'\textEpsilon', r'\textZeta', r'\textEta',
+                r'\textTheta', r'\textIota', r'\textKappa', r'\textLambda',
+                r'\textMu', r'\textNu', r'\textXi', r'\textOmicron',
+                r'\textPi', r'\textRho', r'\textSigma', r'\textTau',
+                r'\textUpsilon', r'\textPhi', r'\textChi', r'\textPsi',
+                r'\textOmega',
+        ]:
+            if code in subitemN.glyph:
+                # Subitem tally, high priority glyph, glyph, rendering.
+                return (n_subs, -1, False, False)
+        glyphN_lower = subitemN.glyph.lower()
+        if 'arrow' in glyphN_lower and 'right' in glyphN_lower and \
+           'left' not in glyphN_lower:
+            # Subitem tally, high priority glyph, glyph, rendering.
+            return (n_subs, -1, False, False)
+        if 'triangle' in glyphN_lower and 'down' not in glyphN_lower and \
+           'left' not in glyphN_lower:
+            if 'up' in glyphN_lower or 'right' not in glyphN_lower:
+                # Subitem tally, high priority glyph, glyph, rendering.
+                return (n_subs, -1, False, False)
+            else:
+                # Subitem tally, medium priority glyph, glyph, rendering.
+                return (n_subs, 0, False, False)
+        if '\\usym{' in glyphN_lower:
+            # Subitem tally, low priority glyph, glyph, rendering.
+            return (n_subs, +1, False, False)
+        # Subitem tally, normal priority glyph, glyph, rendering
+        return (n_subs, 0, False, False)
+
+
+class EntryToTag(collections.abc.Mapping):
+    "Map an entry's glyph to a unique tag."
+
+    def __init__(self):
+        self.glyph2tag = {}
+
+    def __getitem__(self, e):
+        'Given an entry, return an associated tag.'
+        # Use an existing tag if available.  Otherwise create a new one.
+        subitemN = e.subitems[-1]
+        glyph = subitemN.glyph
+        try:
+            tag = self.glyph2tag[glyph]
+        except KeyError:
+            # Create a tag of the form "!dummy-<page>-<glyph_hash>".  The
+            # leading "!" ensures that Makeindex will sort "TAG=SYM" ahead
+            # of "ITEM (SYM)".  For example, under "man", a basic man
+            # symbol should precede "getting haircut (<glyph>)."
+            h = '%019x' % hash(glyph)
+            tag = '!!dummy-%04d-%s' % \
+                (e.page, h[-6:])  # Escape the "!" with a second "!".
+            self.glyph2tag[glyph] = tag
+        return tag
+
+    def __iter__():
+        return iter(self.glyph2tag)
+
+    def __len__():
+        return len(self.glyph2tag)
+
+
+class EntryMatcher():
+    'Represent a rule for matching an IndexEntry.'
+
+    def __init__(self, rule):
+        # Initialize object variables.
+        self.compare_lowercase = rule.get('compare_lowercase', False)
+        self.consider_all_entries = rule.get('consider_all_entries', False)
+        self.trace = rule.get('trace', False)
+        self.rule_type = None   # Overridden by a child class
+        self.re_match = None
+        have_regex = False
+
+        # Initialize additional object variables used only for debugging.
+        self.rule = rule
+        self.triggered = False
+        mrule = rule.get('matches', [])
+        if isinstance(mrule, str):
+            self.remaining_matches = set([mrule])
+        else:
+            self.remaining_matches = set(mrule)
+
+        # Define a function for all other keys.  For example, define
+        # self.not_prefix_fail as self._make_not_contain_failure_func
+        # applied to rule['not_prefix'].
+        self.subject_to_function = defaultdict(lambda: [])
+        for adverb in [None, 'not']:
+            for subject in [
+                    None,
+                    'render',
+                    'top',
+                    'format'
+            ]:
+                for verb in ['matches', 'contains', 'prefix', 'regex']:
+                    toml_key = '_'.join([c
+                                         for c in [adverb, subject, verb]
+                                         if c is not None])
+                    try:
+                        toml_value = rule[toml_key]
+                        factory_name = '_make_%s_failure_func' % \
+                            '_'.join([c
+                                      for c in [adverb, verb]
+                                      if c is not None])
+                        factory = getattr(self, factory_name)
+                        func = factory(toml_value)
+                        self.subject_to_function[subject].append(func)
+                        if verb == 'regex':
+                            if have_regex:
+                                raise RuntimeError('more than one regex'
+                                                   ' was used in rule %s' %
+                                                   rule)
+                            have_regex = True
+                    except KeyError:
+                        pass
+
+        # Abort the program if there is not at least one function in the list.
+        if len(self.subject_to_function) == 0:
+            raise RuntimeError('no matching patterns found in rule %s' % rule)
+
+    @staticmethod
+    def _succeed(item):
+        '''Return a function that itself always returns False (no match
+        failure).'''
+        return False
+
+    @staticmethod
+    def _make_matches_failure_func(pattern):
+        'Return a function that itself returns True on a match failure.'
+        if pattern is None:
+            return lambda item: False
+        elif isinstance(pattern, str):
+            return lambda item: item != pattern
+        else:
+            pattern = set(pattern)
+            return lambda item: all([item != p for p in pattern])
+
+    @staticmethod
+    def _make_not_matches_failure_func(pattern):
+        'Return a function that itself returns False on a match failure.'
+        if pattern is None:
+            return lambda item: False
+        elif isinstance(pattern, str):
+            return lambda item: item == pattern
+        else:
+            pattern = set(pattern)
+            return lambda item: any([item == p for p in pattern])
+
+    @staticmethod
+    def _make_contains_failure_func(pattern):
+        '''Return a function that itself returns True on a containing
+        failure.'''
+        if pattern is None:
+            return lambda item: False
+        elif isinstance(pattern, str):
+            return lambda item: pattern not in item
+        else:
+            return lambda item: all([p not in item for p in pattern])
+
+    @staticmethod
+    def _make_not_contains_failure_func(pattern):
+        '''Return a function that itself returns False on a containing
+        failure.'''
+        if pattern is None:
+            return lambda item: False
+        elif isinstance(pattern, str):
+            return lambda item: pattern in item
+        else:
+            return lambda item: any([p in item for p in pattern])
+
+    @staticmethod
+    def _make_prefix_failure_func(pattern):
+        'Return a function that itself returns True on a prefix failure.'
+        if pattern is None:
+            return lambda item: False
+        elif isinstance(pattern, str):
+            return lambda item: not item.startswith(pattern)
+        else:
+            return lambda item: all([not item.startswith(p) for p in pattern])
+
+    @staticmethod
+    def _make_not_prefix_failure_func(pattern):
+        'Return a function that itself returns False on a prefix failure.'
+        if pattern is None:
+            return lambda item: False
+        elif isinstance(pattern, str):
+            return lambda item: item.startswith(pattern)
+        else:
+            return lambda item: any([item.startswith(p) for p in pattern])
+
+    def _make_regex_failure_func(self, pattern):
+        '''Return a function that itself returns True on a regular-expression
+        match failure.'''
+        if pattern is None:
+            return lambda item: False
+        elif isinstance(pattern, str):
+            regex = re.compile(pattern)
+            return lambda item: (setattr(self, 're_match', regex.search(item)),
+                                 self.re_match is None)[1]
+        else:
+            raise ValueError('lists of regular expressions are not supported')
+
+    def _make_not_regex_failure_func(self, pattern):
+        '''Return a function that itself returns False on a regular-expression
+        match failure.'''
+        if pattern is None:
+            return lambda item: False
+        elif isinstance(pattern, str):
+            regex = re.compile(pattern)
+            return lambda item: (setattr(self, 're_match', regex.search(item)),
+                                 self.re_match is not None)[1]
+        else:
+            raise ValueError('lists of regular expressions are not supported')
+
+    def matches_pattern(self, entry):
+        'Return True if the entry matches the pattern.'
+        # Extract the first item, final item, and final rendering code.
+        top_item = entry.subitems[0].key
+        item = entry.subitems[-1].key
+        try:
+            full_render = entry.subitems[-1].full_render or ''
+        except IndexError:
+            full_render = ''
+        if self.compare_lowercase:
+            top_item = top_item.lower()
+            item = item.lower()
+            full_render = full_render.lower()
+        format = entry.format or ''
+
+        # Ignore non-symbol entries unless consider_all_entries is True.
+        if not self.consider_all_entries:
+            if format.startswith('hyperindexformat'):
+                # "see" and "see also"
+                return False
+            if '\\href' in full_render:
+                # Package or other hyperlink
+                return False
+
+        # Return False if we do not match the IndexEntry.
+        for subject, arg in [
+                (None, item),
+                ('render', full_render),
+                ('top', top_item),
+                ('format', format)
+        ]:
+            for match_func in self.subject_to_function[subject]:
+                if match_func(arg):
+                    return False
+
+        # The rule matched the IndexEntry.  Provide trace output if
+        # requested for either the entry or the rule.
+        if entry.trace or self.trace:
+            sys.stderr.write('=== Trace ===\n')
+            if entry.trace:
+                sys.stderr.write('Trigger: entry\n')
+            else:
+                sys.stderr.write('Trigger: rule\n')
+            sys.stderr.write('Entry:\n    %s\n' % str(entry))
+            sys.stderr.write('Rule:\n')
+            rule_str = '[[%s]]\n' % self.rule_type
+            rule_str += toml.dumps(self.rule)
+            sys.stderr.write(textwrap.indent(rule_str, '    '))
+
+        # As a special case for simple matches, discard the alternative
+        # that matched.
+        self.remaining_matches.discard(item)
+
+        # Return True, and record that the rule was triggered.
+        self.triggered = True
+        return True
+
+
+class EntryTracer(EntryMatcher):
+    'Represent a single rule for tracing an IndexEntry.'
+
+    def __init__(self, rule):
+        super().__init__(rule)
+        self.rule_type = 'trace'
+
+
+class EntryDeleter(EntryMatcher):
+    'Represent a single rule for deleting an IndexEntry.'
+
+    def __init__(self, rule):
+        super().__init__(rule)
+        self.rule_type = 'delete'
+
+
+class EntryRewriter(EntryMatcher):
+    'Represent a single rule for rewriting an IndexEntry.'
+
+    # Split a string into up to 10 fields.  The 11th group contains all
+    # remaining fields.
+    fields_re = re.compile(r'(\S+)' + r'((?:\s+)\S+)?'*9 + r'(.*)$')
+
+    def __init__(self, rule):
+        super().__init__(rule)
+        self.rule_type = 'rewrite'
+        self.item = rule.get('item', None)
+        self.word = rule.get('word', None)
+        self.render = rule.get('render', None)
+        self.lowercase_item = rule.get('lowercase_item', False)
+        self.lowercase_word = rule.get('lowercase_word', False)
+        self.uppercase_word = rule.get('uppercase_word', False)
+        self.capitalize_word = rule.get('capitalize_word', False)
+        self.pluralize_word = rule.get('pluralize_word', False)
+        self.preserve_escapes = rule.get('preserve_escapes', False)
+        if sum([int(e) for e in [self.lowercase_word,
+                                 self.uppercase_word,
+                                 self.capitalize_word]]) > 1:
+            raise ValueError('lowercase_word, uppercase_word, and'
+                             ' capitalize_word are mutually exclusive')
+        self.format = rule.get('format', None)
+        self.see = rule.get('see', None)
+        self.seealso = rule.get('seealso', None)
+        self.stop_on_match = not rule.get('continue', False)
+        self.convert_numbers = rule.get('convert_numbers', False)
+        self.number_words = self.construct_number_words()
+        if sum([int(e is not None) for e in [self.format,
+                                             self.see,
+                                             self.seealso]]) > 1:
+            raise ValueError('format, see, and seealso are mutually exclusive')
+
+    @staticmethod
+    def construct_number_words(number_words=[]):
+        '''Construct names for numbers 0-99 as a reverse-sorted list of
+        {number, name} tuples.'''
+        # If we were called previously, return the list from before.
+        if number_words != []:
+            return number_words
+
+        # Define base names.
+        units = [
+            "zero", "one", "two", "three", "four", "five", "six", "seven",
+            "eight", "nine"
+        ]
+        specials = [
+            "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
+            "sixteen", "seventeen", "eighteen", "nineteen"
+        ]
+        tens = [
+                "twenty", "thirty", "forty", "fifty", "sixty",
+                "seventy", "eighty", "ninety"
+        ]
+        roman_units = [
+            "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix"
+        ]
+        roman_tens = [
+            "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc"
+        ]
+        roman_hundreds = [
+            "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm", "m"
+        ]
+
+        # Construct names for various Roman numerals.
+        number_words.extend(zip([str(d) for d in range(1, 10)], roman_units))
+        number_words.extend(zip([str(d) for d in range(11, 20)],
+                                ['x' + r for r in roman_units]))
+        number_words.extend(zip([str(d*10) for d in range(1, 10)], roman_tens))
+        number_words.extend(zip([str(d*100) for d in range(1, 11)],
+                                roman_hundreds))
+
+        # Construct names for the numbers 0-99.
+        number_words.extend(zip([str(d) for d in range(20)], units + specials))
+        num = 19
+        for t in tens:
+            num += 1
+            number_words.append((str(num), t))
+            for u in units[1:]:
+                num += 1
+                number_words.append((str(num), t + u))
+
+        # Reverse the list so longer matches occur first.
+        number_words.reverse()
+        return number_words
+
+    def _maybe_lowercase_subitem(self, si):
+        'Conditionally lowercase a subitem.'
+        if self.lowercase_item:
+            return si.lower()
+        return si
+
+    def _expand_back_refs(self, entry, s):
+        '''Expand "\1", "\2", etc. within a string based on the current
+        regular-expression match.'''
+        'Provide different means of expanding back references.'
+        # If preserve_escapes is True, return the string unmodified.
+        if self.preserve_escapes:
+            return s
+
+        # If the TOML regex key was not used and no back references are
+        # present, return the string unmodified.
+        re_match = self.re_match
+        if re_match is None and '\\' not in s:
+            return s
+
+        # If the TOML regex key was not used and back references may be
+        # present, construct a regular expression that maps back
+        # references to space-separated item fields, numbered starting from
+        # 1 and with 0 representing the entire item string.
+        if re_match is None:
+            item = entry.subitems[-1].key
+            re_match = self.fields_re.match(item)
+
+        # Expand back references in the given string.
+        try:
+            return re_match.expand(s)
+        except re.error:
+            raise RuntimeError('rule %s failed on entry %s' %
+                               (self.rule, entry))
+
+    @staticmethod
+    def _clean_whitespace(s):
+        'Remove leading, trailing, and extra internal spaces.'
+        return ' '.join(s.split())
+
+    def _words_to_numbers(self, s):
+        'Replace number words with numbers.'
+        # Split the string based on \1.  Ignore implicit matches; require
+        # explicit regex matches.
+        if self.re_match[1] == self.re_match[0]:
+            return s
+        if s in ["Epi-Olmec", "Linear B"]:
+            return s  # Ignore words containing "i" (Roman numeral 1).
+        before, target, after = s.rpartition(self.re_match[1])
+
+        # Replace the target string with a number it matches a spelled-out
+        # number or Roman numerals.
+        target = target.lower()
+        for num, word in self.number_words:
+            if word == target:
+                target = num
+                break
+        return before + target + after
+
+    def rewrite(self, entry):
+        '''Rewrite a single IndexEntry in place.  Return True if the entry
+        matched the pattern.'''
+        # Return False if we can't rewrite the IndexEntry.
+        if not self.matches_pattern(entry):
+            return False
+
+        # Point to the final subitem.
+        subitemN = entry.subitems[-1]
+
+        # Rewrite the IndexEntry.  In this context, "word" corresponds to
+        # Subitem.render -- the rendering of the item's key, excluding the
+        # glyph and suffix.
+        if self.format is not None:
+            entry.format = self._expand_back_refs(entry, self.format)
+        elif self.see is not None:
+            entry.format = 'hyperindexformat{\\see{%s}}' % \
+                self._expand_back_refs(entry, self.see)
+        elif self.seealso is not None:
+            entry.format = 'hyperindexformat{\\seealso{%s}}' % \
+                self._expand_back_refs(entry, self.seealso)
+        word = self.word
+
+        def maybe_words_to_numbers(s):
+            return self._words_to_numbers(s) if self.convert_numbers else s
+
+        if self.item is not None:
+            if isinstance(self.item, str):
+                # Replace the final subitem's key.
+                item = self._clean_whitespace(self.item)
+                subitemN.key = \
+                    maybe_words_to_numbers(
+                        self._maybe_lowercase_subitem(
+                            self._expand_back_refs(entry, item)
+                        )
+                    )
+            else:
+                # Replace all subitems, retaining the final glyph and suffix.
+                full_render = subitemN.full_render
+                entry.subitems = [
+                    Subitem(
+                        self._clean_whitespace(
+                            maybe_words_to_numbers(
+                                self._maybe_lowercase_subitem(
+                                    self._expand_back_refs(entry, k)
+                                )
+                            )
+                        )
+                    )
+                    for k in self.item
+                ]
+                subitemN = entry.subitems[-1]
+                subitemN.full_render = full_render
+            if word is None:
+                # Specified item but unspecified word: use the final
+                # subitem's key as the word.
+                word = subitemN.key
+        if word is not None:
+            word = self._clean_whitespace(self._expand_back_refs(entry, word))
+            word = maybe_words_to_numbers(word)
+            if self.lowercase_word:
+                word = word.lower()
+            if self.uppercase_word:
+                word = word.upper()
+            if self.capitalize_word:
+                word = word.title()
+            if self.pluralize_word:
+                word = word + 'es' if word[-1] == 's' else word + 's'
+            if self.item is None:
+                # Specified word but unspecified item: use word as the key
+                # for the final subitem.
+                subitemN.key = word
+        if self.render is not None:
+            # Specified full rendering: ignore word and use that instead.
+            subitemN.full_render = self.render
+        elif word is not None:
+            # Specified word but unspecified rendering: use word but
+            # preserve glyph and suffix.
+            subitemN.render = word
+        return self.stop_on_match
+
+
+class EntryMerger(EntryMatcher):
+    'Represent a single rule for merging IndexEntry objects.'
+
+    merge_marker = '\\textcolor{Green}{$^+$}'  # Marker for merged symbols
+
+    def __init__(self, state, rule):
+        super().__init__(rule)
+        self.rule_type = 'merge'
+        self.state = state    # Map from item to representative entry
+
+    def prepare_to_merge(self, entry):
+        '''Prepare to rewrite an entry to use the same glyph as other entries
+        named with the same item.'''
+        # Return False if we can't merge the IndexEntry.
+        if not self.matches_pattern(entry):
+            return False
+
+        # Merging two or more entries requires identical subitems matched
+        # by the same rule.
+        key = tuple([id(self)] + [si.key for si in entry.subitems])
+
+        # Append the current entry to the list associated with the
+        # current key.
+        if entry.subitems[-1].suffix is not None:
+            return True
+        try:
+            self.state[key].append(entry)
+        except KeyError:
+            self.state[key] = [entry]
+        return True
+
+    @classmethod
+    def perform_all_merges(self, state):
+        '''Perform all merges based on information gathered by
+        prepare_to_merge.  This method should be called only once.'''
+        # For any key with more than two non-")" entries, mark all entries
+        # with a "merged" suffix.
+        for key, entries in state.items():
+            # The merge must be of two or more symbols, excluding ends of
+            # ranges.
+            no_close_entries = [e for e in entries if e.group != ')']
+            if len(no_close_entries) < 2:
+                continue
+
+            # Find the first non-")" entry to use as the exemplar.
+            for e in entries:
+                if e.group == ')':
+                    continue
+                e.subitems[-1].suffix = self.merge_marker
+                full_render = e.subitems[-1].full_render
+                break
+
+            # Copy the rendering used by the exemplar to all other entries.
+            for e in entries:
+                e.subitems[-1].full_render = full_render
+
+
+class EntryCreator(EntryRewriter):
+    '''Represent a single rule for generating new entries from existing
+    entries.  This class is just like EntryRewriter except it first
+    duplicates the entry.'''
+
+    def __init__(self, rule):
+        super().__init__(rule)
+        self.rule_type = 'create'
+
+    def create(self, entry):
+        'Given an entry, return a new entry or None.'
+
+        # Return None if we don't match the IndexEntry.
+        if not self.matches_pattern(entry):
+            return None
+
+        # Create a new IndexEntry to return.
+        new_entry = copy.deepcopy(entry)
+        if not self.rewrite(new_entry):
+            raise RuntimeError(f'failed to rewrite entry {new_entry}')
+        return new_entry
+
+
+ at dataclass
+class Rules():
+    'Represent a collection of rules of different types.'
+
+    tracers:   list
+    deleters:  list
+    rewriters: list
+    creators:  list
+    mergers:   list
+
+    def __post_init__(self):
+        self.merge_state = {}
+
+
+###########################################################################
+
+def process_delimiters(all_entries):
+    '''Given a list of entries, return a list of rewriting rules and a list
+    of deleting rules.'''
+    # Map left delimiters to right delimiters and descriptions.
+    delimiter_info = {
+        '(': (')', 'parenthesis'),
+        '[': (']', 'square brackets'),
+        'alas': ('alad', 'curly brace'),
+        'Alas': ('Alad', 'curly brace'),
+        'angus': ('angud', 'angle bracket'),
+        'Angus': ('Angud', 'angle bracket'),
+        'langlebar': ('ranglebar', 'angle bracket with bar'),
+        'langledot': ('rangledot', 'angle bracket with dot'),
+        'langle': ('rangle', 'angle bracket'),
+        'lAngle': ('rAngle', 'double angle bracket'),
+        'lbag': ('rbag', 'bag'),
+        'Lbag': ('Rbag', 'bag'),
+        'lblkbrbrak': ('rblkbrbrak', 'tortoise shell, filled'),
+        'lbrace': ('rbrace', 'curly brace'),
+        'lBrace': ('rBrace', 'curly brace with bar'),
+        'lbracklltick': ('rbracklrtick', 'square bracket with lower tick'),
+        'lbrack': ('rbrack', 'square bracket'),
+        'lBrack': ('rBrack', 'square bracket with bar'),
+        'lbrackubar': ('rbrackubar', 'square bracket with underbar'),
+        'lbrackultick': ('rbrackurtick', 'square bracket with upper tick'),
+        'lbrbrak': ('rbrbrak', 'tortoise shell'),
+        'Lbrbrak': ('Rbrbrak', 'tortoise shell with bar'),
+        'lceil': ('rceil', 'ceiling'),
+        'lCeil': ('rCeil', 'double ceiling'),
+        'lcorners': ('rcorners', 'corners'),
+        'lcurvyangle': ('rcurvyangle', 'curved angle bracket'),
+        'ldbrack': ('rdbrack', 'bracket with bar'),
+        'leftevaw': ('leftevaw', 'wavy line'),
+        'leftwave': ('leftwave', 'wavy line'),
+        'levaw': ('revaw', 'wavy line'),
+        'lfilet': ('rfilet', 'wavy line'),
+        'lFloor': ('rFloor', 'double floor'),
+        'lfloor': ('rfloor', 'floor'),
+        'lgroup': ('rgroup', 'group brace'),
+        'llangle': ('rrangle', 'angle bracket with bar'),
+        'llbracket': ('rrbracket', 'bracket with bar'),
+        'llceil': ('rrceil', 'double ceiling'),
+        'llcorner': ('lrcorner', 'lower corners'),
+        'llfloor': ('rrfloor', 'double floor'),
+        'llparenthesis': ('rrparenthesis', 'double parenthesis'),
+        'lmoustache': ('rmoustache', 'moustache'),
+        'Lparengtr': ('Rparenless',
+                      'double parenthesis with greater/less than'),
+        'lparenless': ('rparengtr', 'parenthesis with less/greater than'),
+        'lparen': ('rparen', 'parenthesis'),
+        'lParen': ('rParen', 'parenthesis with bar'),
+        'Lparen': ('Rparen', 'parenthesis with bar'),
+        'lsem': ('rsem', 'bracket with bar'),
+        'ltriplevert': ('rtriplevert', 'triple vertical bar'),
+        'lVert': ('rVert', 'double vertical bar'),
+        'lvert': ('rvert', 'vertical bar'),
+        'lVvert': ('rVvert', 'triple vertical bar'),
+        'Lvzigzag': ('Rvzigzag', 'double zigzag'),
+        'lvzigzag': ('rvzigzag', 'zigzag'),
+        'lwave': ('rwave', 'wavy line'),
+        'lWavy': ('rWavy', 'double wavy line'),
+        'lwavy': ('rwavy', 'wavy line'),
+        'niv': ('vin', 'lower corners'),
+        'quadras': ('quadrad', 'square bracket with bar'),
+        'Quadras': ('Quadrad', 'square bracket with bar'),
+        'textlangle': ('textrangle', 'angle bracket'),
+        'textlbrackdbl': ('textrbrackdbl', 'square bracket with bar'),
+        'textlquill': ('textrquill', 'quill'),
+        'thickvert': ('thickvert', 'vertical bar'),
+        'triple<': ('triple!>', 'triple angle bracket'),
+        'triple[': ('triple]', 'triple square bracket'),
+        'ulcorner': ('urcorner', 'upper corners'),
+        'vert': ('vert', 'vertical bar'),
+        'Vert': ('Vert', 'double bar'),
+        'VERT': ('VERT', 'triple vertical bar'),
+        'Vvert': ('Vvert', 'triple vertical bar'),
+        'vvvert': ('vvvert', 'triple vertical bar'),
+    }
+
+    # Iterate over all entries in search of delimiters.
+    rewrites = []
+    deletes = []
+    display_re = re.compile('^(.*)(MNS|FDSYM|STIX)d(.*)$')
+    for e in all_entries:
+        # Extract the key and glyph.
+        subitemN = e.subitems[-1]
+        glyphN = subitemN.glyph
+        if glyphN is None:
+            continue
+        lKey = subitemN.key
+
+        # Perform the substitution.
+        rule = {}
+        try:
+            rKey, desc = delimiter_info[lKey]
+            if lKey == 'llangle':
+                # Special case for MnSymbol's \llangle, which is doubled,
+                # not barred.
+                if 'MNSdllangle' in glyphN:
+                    desc = 'double angle bracket'
+                    glyphN = '\\MNStllangle'
+                rule['render_contains'] = glyphN
+        except KeyError:
+            continue
+        lGlyph = display_re.sub(r'\1\2t\3', glyphN)
+        rGlyph = lGlyph.replace(lKey, rKey)
+        rGlyph = rGlyph.replace(r'\nathtriple\langle', r'\nathtriple\rangle')
+        rule.update({
+            'matches': lKey,
+            'item': ['delimiters', desc],
+            'render': '%s (%s\\graybox %s)' % (desc, lGlyph, rGlyph),
+            'autogenerated': True,
+        })
+        rewrites.append(EntryRewriter(rule))
+        if rKey != lKey:
+            deletes.append(EntryDeleter({
+                'matches': rKey,
+                'autogenerated': True,
+            }))
+    return rewrites, deletes
+
+
+def read_logix_rewrites():
+    '''Map logix symbol names to symbol replacements by parsing the logix
+    documentation.  Return a list of EntryRewriters or an empty list on
+    error.'''
+    # Find the logix.tex file.
+    proc = subprocess.run(['kpsewhich', '--format=doc', 'logix.tex'],
+                          capture_output=True, encoding='utf-8')
+    if proc.returncode != 0:
+        return []
+    logix_tex = proc.stdout.strip()
+    space_slash_re = re.compile(r'\s+/\s+')
+
+    def patch_desc(desc):
+        'Modify the item or word.'
+        desc = desc.lower()
+        if desc.split()[0] in ['lblack', 'lwhite']:  # Non-word
+            desc = desc[1:]
+        desc = desc.replace('finte', 'finite')       # Typo, I assume
+        desc = desc.replace('asterick', 'asterisk')  # Spelling error
+        desc = desc.replace('long ', '')             # Unnecessary
+        desc = desc.replace('short ', '')            # Unnecessary
+        desc = desc.replace('very ', '')             # Unnecessary
+        desc = desc.replace('extra ', '')            # Unnecessary
+        desc = desc.replace(' (rule)', '')           # Unnecessary
+        desc = space_slash_re.sub('/', desc)         # Nicer-looking
+        desc = desc.replace('plus/minus', 'plus or minus')   # Nicer-looking
+        desc = desc.replace('minus/plus', 'minus or plus')   # Nicer-looking
+        return desc
+
+    # Parse the logix.tex file.
+    rules = []
+    with open(logix_tex) as r:
+        for ln in r:
+            # Map a LaTeX command to a description.
+            fields = [f.strip() for f in ln.split('&')]
+            if len(fields) != 3:
+                continue
+            item = fields[1][16:]   # Ignore "{\textbackslash}".
+            desc = fields[0]
+            if ' em ' in desc:
+                continue
+            if 'End Law' in desc:
+                continue      # Don't rename *all* \End symbols to "end law".
+            desc = patch_desc(desc)
+
+            # Create an EntryRewriter corresponding to the mapping from
+            # command to description.
+            desc_fields = desc.split()
+            if desc_fields[0] == 'circled':
+                # Special case for circled symbols
+                rules.append(EntryRewriter({
+                    'matches': item,
+                    'item': ['circled symbols', ' '.join(desc_fields[1:])],
+                    'continue': True,
+                    'autogenerated': True
+                }))
+            elif desc_fields[0] == 'open':
+                # Special case for open/close delimiters
+                phrase = ' '.join(desc_fields[1:])
+                cls_item = 'Cls' + item[3:]
+                rules.append(EntryRewriter({
+                    'matches': item,
+                    'item': ['delimiters', phrase],
+                    'render': '%s (\\%s \\graybox \\%s)' %
+                    (phrase, item, cls_item),
+                    'autogenerated': True
+                }))
+            else:
+                # Common case
+                rules.append(EntryRewriter({
+                    'matches': item,
+                    'word': desc,
+                    'continue': 'true',
+                    'autogenerated': True
+                }))
+    return rules
+
+
+def read_unicode_names():
+    'Return a mapping from hexadecimal code to Unicode name'
+    hex2name = {}
+    with open('unicode.txt') as r:
+        for ln in r:
+            fields = ln.strip().split(None, 1)
+            hex2name[fields[0]] = fields[1]
+    return hex2name
+
+
+def auto_merge_man_woman(state, entries):
+    '''Return a list of EntryMerger objects that merge "man..." and
+    "woman..." emoji.'''
+    # Construct a mapping from a noun to the entries that present "man" and
+    # "woman" versions of that noun.
+    noun2entries = defaultdict(lambda: [])
+    for e in entries:
+        # Consider only twemoji symbols.
+        subitemN = e.subitems[-1]
+        if subitemN.glyph is None:
+            continue
+        if 'twemoji' not in subitemN.glyph:
+            continue
+
+        # Consider only "man NOUN" and "woman NOUN" constructs.
+        fields = subitemN.key.split()
+        if len(fields) != 2:
+            continue
+        if fields[0] not in ['man', 'woman']:
+            continue
+        noun2entries[fields[1]].append(e)
+
+    # Create a new EntryMerger for all entries containing exactly one "man"
+    # and one "woman" glyph.
+    new_merges = []
+    for noun, ents in noun2entries.items():
+        glyphs = set([e.subitems[-1].glyph for e in ents])
+        if len(glyphs) != 2:
+            continue
+        if "biking" in noun:
+            # Other entries will be merged into these.
+            continue
+        genders = set([e.subitems[-1].key.split()[0] for e in ents])
+        if 'man' in genders and 'woman' in genders:
+            new_merges.append(EntryMerger(state, {
+                'autogenerated': True,
+                'matches': noun,
+            }))
+    return new_merges
+
+
+def merge_top_levels(entries):
+    'Merge "ITEM (SYM)" into "ITEM" at the top level when SYM is unique.'
+    # Group all entries by top-level key.
+    key2entries = defaultdict(lambda: [])
+    for e in entries:
+        if e.subitems[0].glyph == 'package':
+            # Ignore package names.
+            continue
+        key2entries[e.subitems[0].key].append(e)
+
+    # For each key associated with a unique glyph, assign that glyph
+    # to all top-level subitems.
+    for key, es in key2entries.items():
+        # Reject certain cases.
+        if len(es) == 1:
+            continue     # Nothing to merge
+        hyperindex, hyperpage = False, False
+        for e in es:
+            if len(e.subitems) != 1:
+                continue    # Consider only entries with no subentries.
+            if e.format.startswith('hyperpage'):
+                hyperpage = True
+            elif e.format.startswith('hyperindexformat'):
+                hyperindex = True
+
+        # Determine if there is a unique glyph.
+        glyphs_sfxs = set()   # Pairs of {glyph, suffix}
+        for e in es:
+            glyph = e.subitems[0].glyph
+            sfx = e.subitems[0].suffix
+            if glyph is not None:
+                glyphs_sfxs.add((glyph, sfx))
+        if len(glyphs_sfxs) != 1:
+            continue    # Glyph is not unique.
+        glyph, sfx = list(glyphs_sfxs)[0]
+        if '\\' not in glyph:
+            continue    # Glyph is not a control word.
+
+        # Find the entry whose rendering matches the unique glyph.
+        for e in es:
+            if e.subitems[0].glyph == glyph and e.subitems[0].suffix == sfx:
+                full_render = e.subitems[0].full_render
+                break
+
+        # Assign the same rendering to each entry.
+        for e in es:
+            e.subitems[0].full_render = full_render
+
+
+def reformat_same_item_different_glyphs(entries):
+    '''Rewrite "ITEM=ITEM (SYM1)" and "ITEM=ITEM (SYM2)" as "ITEM" with
+    subitems "SYM1" and "SYM1".'''
+    # Bin entries by item name.
+    unmodified_entries = []     # Entries to leave alone
+    normalized_entries = []     # Entries updated from "ITEM" to "ITEM=ITEM"
+    key2entries = defaultdict(lambda: [])
+    for e in entries:
+        if len(e.subitems) != 1:
+            unmodified_entries.append(e)
+            continue
+        subitemN = e.subitems[-1]
+        if subitemN.render is None:
+            subitemN.render = subitemN.key
+            normalized_entries.append(e)
+            continue
+        if 'href' in subitemN.render:
+            unmodified_entries.append(e)
+            continue
+        if subitemN.glyph is None:
+            unmodified_entries.append(e)
+            continue
+        key2entries[subitemN.key].append(e)
+
+    # Discard entries that should not be merged.
+    for item, ents in key2entries.copy().items():
+        # Ignore items that repeat a single glyph.
+        unique_glyphs = set([e.subitems[-1].glyph
+                             for e in ents
+                             if e.subitems[-1].glyph is not None])
+        if len(unique_glyphs) < 2:
+            unmodified_entries.extend(ents)
+            del key2entries[item]
+            continue
+
+        # Ignore items with different renderings, excluding the glyph.
+        common_rendering = [si.render for si in ents[0].subitems]
+        for e in ents:
+            rendering = [si.render for si in e.subitems]
+            if rendering != common_rendering:
+                unmodified_entries.extend(ents)
+                del key2entries[item]
+                break
+
+    # Rewrite the remaining entries as "ITEM>TAG=SYM" with a per-glyph TAG.
+    ent2tag = EntryToTag()
+    for item, ents in key2entries.items():
+        for e in ents:
+            # Delete the glyph from the final subitem then append TAG as a
+            # new subitem with rendering SYM.
+            subitemN = e.subitems[-1]
+            glyph = subitemN.glyph
+            suffix = subitemN.suffix or ''
+            subitemN.glyph = None
+            tag = ent2tag[e]
+            e.subitems.append(Subitem(tag, glyph + suffix))
+
+    # Return the concatenation of the modified and unmodified index entries.
+    new_entries = []
+    for ents in key2entries.values():
+        new_entries.extend(ents)
+    return new_entries + normalized_entries + unmodified_entries
+
+
+def fix_overlapping_ranges(entries):
+    "Ensure that page ranges don't overlap."
+    clean_entries = []
+    range_state = {}    # Map from an item to its most recent entry.
+    for e in all_entries:
+        # Discard items that are not part of a page range.
+        if len(e.subitems) != 1:
+            clean_entries.append(e)
+            continue
+        if e.group is None:
+            clean_entries.append(e)
+            continue
+
+        # Prevent adjacent open and adjacent close ranges.
+        range_key = '>'.join([str(si) for si in e.subitems])
+        if e.group == '(':
+            # Keep the oldest open range.
+            try:
+                prev_entry = range_state[range_key]
+                if prev_entry.group == '(':
+                    # Keep the previous (open) entry; discard the current
+                    # (open) entry.
+                    pass
+                elif prev_entry.group == ')':
+                    # Keep both the previous (open) and current (closed)
+                    # entries.  Remember the current entry.
+                    clean_entries.append(e)
+                    range_state[range_key] = e
+            except KeyError:
+                # First time encountering this item.
+                clean_entries.append(e)
+                range_state[range_key] = e
+        elif e.group == ')':
+            # Keep the newest close range.
+            try:
+                prev_entry = range_state[range_key]
+                if prev_entry.group == '(':
+                    # Keep both the previous (open) and current (close)
+                    # entry.  Remember the current entry.
+                    clean_entries.append(e)
+                    range_state[range_key] = e
+                elif prev_entry.group == ')':
+                    # Overwrite the previous (close) entry's page number
+                    # with the current (close) entry's page number.
+                    prev_entry.page = e.page
+            except KeyError:
+                # First time encountering this item, but it's erroneous
+                # (close with no open) so we discard it.
+                pass
+    return clean_entries
+
+
+def split_second_levels(entries):
+    '''If "ITEM1>ITEM2 (G1)" and "ITEM1>ITEM2 (G2)" are both encountered,
+    replace them with "ITEM1>ITEM2>G1" and "ITEM1<ITEM2>G2".'''
+    # Group all entries by the first two keys.  Ignore entries without
+    # exactly two levels.
+    keys2entries = defaultdict(lambda: [])
+    for e in entries:
+        if len(e.subitems) != 2:
+            continue
+        keys2entries[(e.subitems[0].key, e.subitems[1].key)].append(e)
+
+    # Introduce a new level if and only if more than two entries associated
+    # with a pair of keys have a parenthesized glyph.
+    for entries in keys2entries.values():
+        # Discard entries we can't split.
+        if len(entries) == 1:
+            continue
+        unique_glyphs = set()
+        for e in entries:
+            glyph = e.subitems[-1].glyph
+            if glyph is not None:
+                unique_glyphs.add(glyph)
+        if len(unique_glyphs) < 2:
+            continue
+
+        # Add a level to each entry containing just the glyph.
+        ent2tag = EntryToTag()
+        for e in entries:
+            if e.subitems[-1].glyph is None:
+                continue
+            tag = ent2tag[e]
+            render = e.subitems[1].glyph
+            if e.subitems[1].suffix is not None:
+                render += e.subitems[1].suffix
+            si2 = Subitem(tag, render)
+            e.subitems[1].full_render = None
+            e.subitems.append(si2)
+
+
+def mark_all_items(entries):
+    '''Globally replace "WORD=ITEM..." with
+    "WORD=\\markboth{WORD}{WORD}ITEM...".'''
+    for e in entries:
+        key = e.subitems[0].key
+        for si in e.subitems:
+            if si.render is None or si.render == '':
+                si.render = si.key
+            si.render = '%s\\markboth{%s}{%s}' % (si.render, key, key)
+
+
+def parse_rules_from_files(toml_fnames):
+    'Process all TOML files into a Rules object.'
+
+    # Read a list of actions from each TOML-format file.
+    toml_data = {
+        'trace': [],
+        'delete': [],
+        'rewrite': [],
+        'create': [],
+        'merge': [],
+    }
+    for fn in toml_fnames:
+        print('Parsing', fn)
+        new_data = toml.load(fn)
+        for key in toml_data:
+            try:
+                toml_data[key].extend(new_data[key])
+            except KeyError:
+                pass
+    rules = Rules([], [], [], [], [])
+
+    # Convert each trace entry to an EntryMatcher.
+    try:
+        for t in toml_data['trace']:
+            rules.tracers.append(EntryTracer(t))
+    except KeyError:
+        pass
+
+    # Convert each delete entry to an EntryDeleter.
+    try:
+        for d in toml_data['delete']:
+            rules.deleters.append(EntryDeleter(d))
+    except KeyError:
+        pass
+
+    # Convert each rewrite entry to an EntryRewriter.
+    try:
+        for rw in toml_data['rewrite']:
+            rules.rewriters.append(EntryRewriter(rw))
+    except KeyError:
+        pass
+
+    # Convert each create entry to an EntryCreator.
+    try:
+        for cr in toml_data['create']:
+            rules.creators.append(EntryCreator(cr))
+    except KeyError:
+        pass
+
+    # Convert each merge entry to an EntryMerger.
+    try:
+        for m in toml_data['merge']:
+            rules.mergers.append(EntryMerger(rules.merge_state, m))
+    except KeyError:
+        pass
+
+    # Return the collection of rules.
+    return rules
+
+
+def report_unused(rules):
+    'Report all unused rules, excluding autogenerated ones.'
+    for r in rules:
+        if r.rule.get('autogenerated', False):
+            continue
+        if r.triggered and r.remaining_matches != set():
+            sys.stderr.write('=== Partially triggered ===\n')
+            sys.stderr.write('Rule:\n')
+            rule_str = '[[%s]]\n' % r.rule_type
+            rule_str += toml.dumps(r.rule)
+            sys.stderr.write(textwrap.indent(rule_str, '    '))
+            sys.stderr.write('Remaining:\n')
+            rem_str = ',\n'.join([repr(m)
+                                  for m in sorted(r.remaining_matches)]) + '\n'
+            sys.stderr.write(textwrap.indent(rem_str, '    '))
+            continue
+        if not r.triggered:
+            sys.stderr.write('=== Untriggered ===\n')
+            sys.stderr.write('Rule:\n')
+            rule_str = '[[%s]]\n' % r.rule_type
+            rule_str += toml.dumps(r.rule)
+            sys.stderr.write(textwrap.indent(rule_str, '    '))
+
+
+###########################################################################
+
+if __name__ == '__main__':
+    # Parse the command line.
+    parser = argparse.ArgumentParser(
+        prog='prune-idx',
+        description='Delete, merge, and rewrite index entries.')
+    parser.add_argument('index_file', help='.idx file to modify')
+    parser.add_argument('toml_files', nargs='+',
+                        help='one or more TOML files of modification rules')
+    parser.add_argument('--report-unused', action='store_true',
+                        help='report rules that never triggered')
+    cl_args = parser.parse_args()
+
+    # Parse the index file into a list of IndexEntry objects.
+    all_entries = []
+    with open(cl_args.index_file) as r:
+        for ln in r:
+            all_entries.append(IndexEntry(ln))
+
+    # Read a list of actions from all of the TOML files.
+    rules = parse_rules_from_files(cl_args.toml_files)
+
+    # Prepend logix symbols to the rewriters.  Other rewriters will rewrite
+    # some of these.
+    rules.rewriters = read_logix_rewrites() + rules.rewriters
+
+    # Automatically merge "man" and "woman" emoji because they tend to look
+    # extremely similar.
+    rules.mergers.extend(auto_merge_man_woman(rules.merge_state, all_entries))
+
+    # Handle delimiters specially.
+    all_entries.sort(key=lambda e: e.prioritization_key())
+    print('Preparing to process %d index entries' % len(all_entries))
+    more_rewriters, more_deleters = process_delimiters(all_entries)
+    rules.rewriters.extend(more_rewriters)
+    rules.deleters.extend(more_deleters)
+
+    def apply_tracers(entry):
+        '''Apply trace-creation rules until one succeeds.  In that case, set
+        the entry's trace flag to True.  Otherwise return the entry
+        unmodified.'''
+        for t in rules.tracers:
+            if t.matches_pattern(entry):
+                entry.trace = True
+                return entry
+        return entry
+
+    # Trace entries for debug purposes.
+    print('Applying [[trace]] rules (%d)' % len(rules.tracers))
+    with multiprocessing.Pool() as pool:
+        all_entries = pool.map(apply_tracers, all_entries)
+
+    def apply_deleters(entry):
+        '''Apply entry-deleting rules until one succeeds.  In that case return
+        None.  Otherwise return the entry unmodified.'''
+        for d in rules.deleters:
+            if d.matches_pattern(entry):
+                return None
+        return entry
+
+    # Delete uninteresting entries.
+    print('Applying [[delete]] rules (%d)' % len(rules.deleters))
+    if cl_args.report_unused:
+        # Sequential but allowing rule updates
+        pruned_entries = [apply_deleters(e) for e in all_entries]
+        report_unused(rules.deleters)
+    else:
+        # Parallel but with read-only rules
+        with multiprocessing.Pool() as pool:
+            pruned_entries = pool.map(apply_deleters, all_entries)
+    all_entries = [e for e in pruned_entries if e is not None]
+
+    def apply_rewriters(entry):
+        'Apply entry-rewriting rules until one succeeds.'
+        for rw in rules.rewriters:
+            if rw.rewrite(entry):
+                return entry
+        return entry
+
+    # Rewrite utfsym symbols in place.  This is faster than appending
+    # EntryRewriters to the rewriters list.
+    print('Applying [[rewrite]] rules (%d)' % len(rules.rewriters))
+    hex2name = read_unicode_names()
+    utfsym_re = re.compile(r'^usym\{([0-9A-F]+)\}$')
+    for e in all_entries:
+        key = e.subitems[0].key
+        match = utfsym_re.match(key)
+        if match is None:
+            continue
+        cp = match[1].lstrip('0')
+        name = hex2name[cp]
+        e.subitems[0].key = name
+        e.subitems[0].full_render = '%s (\\usym{%s})' % (name, cp)
+
+    # Apply the rewriting actions to each entry, stopping on the first match.
+    if cl_args.report_unused:
+        # Sequential but allowing rule updates
+        all_entries = [apply_rewriters(e) for e in all_entries]
+        report_unused(rules.rewriters)
+    else:
+        # Parallel but with read-only rules
+        with multiprocessing.Pool() as pool:
+            all_entries = pool.map(apply_rewriters, all_entries)
+
+    # Rewrite "NUM..." to use only "NUM" as the key.  Doing so indexes
+    # terms like "8 ball" under Numbers instead of Symbols.
+    initial_num_re = re.compile(r'^(\d+)(\D.*)$')
+    for e in all_entries:
+        match = initial_num_re.match(e.subitems[0].key)
+        if match is None:
+            continue
+        e.subitems.insert(0, Subitem(match[1]))
+
+    def apply_creators(entry):
+        'Apply all entry-creating rules to the current entry.'
+        new_entries = []
+        for cr in rules.creators:
+            e = cr.create(entry)
+            if e is not None:
+                new_entries.append(e)
+        return new_entries
+
+    # Apply the creating actions to each entry, stopping on the first match.
+    print('Applying [[create]] rules (%d)' % len(rules.creators))
+    if cl_args.report_unused:
+        # Sequential but allowing rule updates
+        all_entries.extend([e
+                            for es in [apply_creators(entry)
+                                       for entry in all_entries]
+                            for e in es])
+        report_unused(rules.creators)
+    else:
+        # Parallel but with read-only rules
+        with multiprocessing.Pool() as pool:
+            all_entries.extend([e
+                                for es in pool.map(apply_creators, all_entries)
+                                for e in es])
+
+    # The next few stanzas all pertain to merging.
+    print('Applying [[merge]] rules (%d)' % len(rules.mergers))
+
+    # Move index entries with no specified glyph or rendering to the end of
+    # the list so merges see any glyphs first.  Also, move certain entries
+    # to the beginning of the list so their glyphs are used instead of the
+    # glyph that appears first in the document.
+    all_entries.sort(key=lambda e: e.prioritization_key())
+
+    # Remove duplicates before merging.  Otherwise, duplicate entries will
+    # be marked as having multiple glyphs when they in fact have only one.
+    entries_seen = set()
+    unique_entries = []
+    for e in all_entries:
+        e_str = str(e)
+        if e_str in entries_seen:
+            continue
+        unique_entries.append(e)
+        entries_seen.add(e_str)
+    all_entries = unique_entries
+
+    # Merge glyphs that are essentially just font variants, stopping on the
+    # first match for each entry.
+    for e in all_entries:
+        for m in rules.mergers:
+            if m.prepare_to_merge(e):
+                break
+    if cl_args.report_unused:
+        report_unused(rules.mergers)
+    EntryMerger.perform_all_merges(rules.merge_state)
+
+    # Replace top-level "ITEM" entries with "ITEM (SYM)" when both exist
+    # and SYM is unique.
+    merge_top_levels(all_entries)
+
+    # The next few stanzas all pertain to cleanup.
+    print('Cleaning up the index')
+
+    # Use subitems for different glyphs corresponding to the same item.
+    all_entries = reformat_same_item_different_glyphs(all_entries)
+
+    # Clean up the index by simplifying "ITEM=ITEM" to just "ITEM".  In many
+    # cases this enables Makeindex to merge entries with and without subitems.
+    for e in all_entries:
+        for si in e.subitems:
+            if si.key == si.full_render:
+                si.full_render = None
+
+    # Clean up the index by making all "see" and "see also" entries point
+    # to the same page (0).  The prevents Makeindex from generating
+    # multiple "see" or "see also" entries per entry.
+    for e in all_entries:
+        if e.format.startswith("hyperindexformat{\\see"):
+            e.page = 0
+
+    # Fix overlapping page ranges.
+    all_entries = fix_overlapping_ranges(all_entries)
+
+    # Split repeated second-level terms into third levels.
+    split_second_levels(all_entries)
+
+    # Insert a \markboth{...}{...} into every entry.
+    mark_all_items(all_entries)
+
+    # Overwrite the input file with all remaining entries.
+    print('Writing %d entries' % len(all_entries))
+    with open(cl_args.index_file, 'w') as w:
+        for e in all_entries:
+            w.write('%s\n' % str(e))


Property changes on: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-accents.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-accents.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-accents.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,802 @@
+################################################################
+# Rewrite entries for all accents to put them under "accents". #
+# Author: Scott Pakin <scott+clsl at pakin.org>                   #
+################################################################
+
+# ---------------------- accents with an argument ----------------------
+
+# This entry must appear before other "\|" entries.
+# What is this accent actually called?
+[[rewrite]]
+render_contains = '\encfour{\blackacchack{\FCbar}}'
+item = ["accents", "fang"]
+
+# This entry must appear before other "ring" entries.
+[[rewrite]]
+render_contains = [
+    '\blackacc{\ABXwidering}',
+    '\blackacc{\FOURmathring}',
+    '\blackacc{\FOURwidering}',
+    '\blackacc{\YHwidering}'
+]
+item = ["accents", "combination ring and arc"]
+
+[[rewrite]]
+matches = "`"
+item = ["accents", "grave"]
+
+[[rewrite]]
+matches = "."
+render_contains = "blackacc"
+item = ["accents", "dot"]
+
+[[rewrite]]
+render_contains = [
+    '\blackacc{\STIXdot}',
+    '\blackacc{\dot}'
+]
+item = ["accents", "dot"]
+
+[[rewrite]]
+matches = ["acutus", "'"]
+item = ["accents", "acute"]
+
+[[rewrite]]
+matches = "APLcirc"
+item = ["accents", "circle overlay"]
+
+[[rewrite]]
+matches = ["APLnot", "textsuperimposetilde"]
+item = ["accents", "tilde overlay"]
+
+[[rewrite]]
+matches = "APLvert"
+item = ["accents", "vertical line overlay"]
+
+[[rewrite]]
+matches = "asteraccent"
+item = ["accents", "asterisk"]
+
+[[rewrite]]
+matches = ["bar", "_magicequalname"]
+render_contains = "blackacc"
+item = ["accents", "macron"]
+
+[[rewrite]]
+matches = "bibridge"
+item = ["accents", "bridge above and below"]
+
+[[rewrite]]
+matches = ["b", "underbar", "ushort", "ushortw"]
+render_contains = "blackacc"
+item = ["accents", "bar below"]
+
+[[rewrite]]
+matches = "c"
+render_contains = "blackacc"
+item = ["accents", "cedilla"]
+
+[[rewrite]]
+matches = "C"
+render_contains = "blackacc"
+item = ["accents", "grave, double"]
+
+[[rewrite]]
+matches = "crtilde"
+item = ["accents", "tilde, crossed"]
+
+[[rewrite]]
+matches = "candra"
+item = ["accents", "candrabindu"]
+
+[[rewrite]]
+matches = "cb"
+render_contains = "blackacc"
+item = ["accents", "comma below"]
+
+[[rewrite]]
+matches = ["check", "v", "varwidecheck", "widecheck"]
+item = ["accents", "caron"]
+
+[[rewrite]]
+matches = ["circumflexus", "~", "Umd", "varwidetilde"]
+item = ["accents", "tilde"]
+
+[[rewrite]]
+matches = "closure"
+render_contains = "blackacc"
+item = ["accents", "macron"]
+
+[[rewrite]]
+matches = "Cyrillic breve"
+item = ["accents", "breve, Cyrillic"]
+
+[[rewrite]]
+matches = "dental"
+item = ["accents", "bridge below"]
+
+[[rewrite]]
+matches = "d"
+render_contains = "blackacc"
+item = ["accents", "dot below"]
+
+[[rewrite]]
+matches = "ddot"
+item = ["accents", "dot, double"]
+
+[[rewrite]]
+matches = "dddot"
+item = ["accents", "dot, triple"]
+
+[[rewrite]]
+matches = "ddddot"
+item = ["accents", "dot, quadruple"]
+
+[[rewrite]]
+matches = "droang"
+item = ["accents", "angle, left"]
+
+[[rewrite]]
+matches = "mathring"
+item = ["accents", "ring"]
+
+[[rewrite]]
+matches = "dottedtilde"
+item = ["accents", "homothetic"]
+
+[[rewrite]]
+matches = "doubletilde"
+item = ["accents", "almost equal to"]
+
+[[rewrite]]
+preserve_escapes = true
+matches = ["diaeresis", '"']
+item = ["accents", "diaeresis"]
+word = 'di{\ae}resis'
+
+[[rewrite]]
+matches = ["D", "td", "textsubumlaut"]
+render_contains = "blackacc"
+preserve_escapes = true
+item = ["accents", "diaeresis below"]
+word = 'di{\ae}resis below'
+
+[[rewrite]]
+matches = [
+    "f",
+    "inverted breve",
+    "newtie",
+    "ohill",
+    "Cyrillic flex",
+    "textroundcap"
+]
+render_contains = "blackacc"
+item = ["accents", "breve, inverted"]
+
+[[rewrite]]
+matches = "finpartvoice"
+item = ["accents", "voiced consonant, final partial"]
+
+[[rewrite]]
+matches = "finpartvoiceless"
+item = ["accents", "voiceless consonant, final partial"]
+
+[[rewrite]]
+matches = ["G", "textdoublegrave", "Cyrillic umlaut"]
+render_contains = "blackacc"
+item = ["accents", "grave, double"]
+
+[[rewrite]]
+matches = ["grave", "gravis"]
+item = ["accents", "grave"]
+
+[[rewrite]]
+matches = "H"
+render_contains = "blackacc"
+item = ["accents", "acute, double"]
+
+[[rewrite]]
+matches = "h"
+render_contains = "blackacc"
+item = ["accents", "hook"]
+
+[[rewrite]]
+matches = ["hat", "^", "varwidehat", "widehat"]
+render_contains = "blackacc"
+item = ["accents", "circumflex"]
+
+[[rewrite]]
+matches = "hat"
+render_matches = ""
+item = ["accents", "circumflex"]
+
+[[rewrite]]
+matches = ["hill", "textsubarch", "underarch"]
+item = ["accents", "breve below, inverted"]
+
+[[rewrite]]
+matches = "inipartvoice"
+item = ["accents", "voiced consonant, initial partial"]
+
+[[rewrite]]
+matches = "inipartvoiceless"
+item = ["accents", "voiceless consonant, initial partial"]
+
+[[rewrite]]
+matches = "k"
+render_contains = "blackacc"
+item = ["accents", "ogonek"]
+
+[[rewrite]]
+matches = "middlebar"
+item = ["accents", "macron overlay"]
+
+[[rewrite]]
+matches = ["middleslash", "Ohne"]
+item = ["accents", "solidus overlay"]
+
+[[rewrite]]
+matches = "ocommatopright"
+item = ["accents", "comma"]
+
+[[rewrite]]
+matches = "od"
+item = ["accents", "ring below"]
+
+[[rewrite]]
+matches = "oturnedcomma"
+item = ["accents", "comma, inverted"]
+
+[[rewrite]]
+regex = '^(?:a)?over(arc|bar|brace|bracket|bridge|group|parenthesis)\*?$'
+item = ["accents", '\1']
+
+[[rewrite]]
+regex = '^over(left|right)(pitchfork|broom)$'
+item = ["accents", '\2, \1']
+
+[[rewrite]]
+regex = '^(left|right)arrowaccent$'
+item = ["accents", 'arrow, \1']
+
+[[rewrite]]
+regex = '^(left|right)harpoonaccent$'
+item = ["accents", 'harpoon, \1 up']
+
+[[rewrite]]
+regex = '^(?:short)?over(left|right)harp(?:oon)?(up|down)$'
+item = ["accents", 'harpoon, \1 \2']
+
+[[rewrite]]
+matches = ["overrightharp", "overrightharpoon", "shortoverrightharp"]
+item = ["accents", "harpoon, right up"]
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = '\FDSYMoverleftharpoon'
+item = ["accents", "harpoon, left down"]
+
+[[rewrite]]
+matches = ["overleftharp", "overleftharpoon", "shortoverleftharp"]
+item = ["accents", "harpoon, left up"]
+
+[[rewrite]]
+matches = ["overrightleftharp", "shortoverrightleftharp"]
+item = ["accents", "harpoon, right up, left down"]
+
+[[rewrite]]
+matches = ["overleftrightharp", "shortoverleftrightharp"]
+item = ["accents", "harpoon, left up, right down"]
+
+[[rewrite]]
+matches = ["overleftrightvecc", "shortoverleftrightvecc"]
+item = ["accents", "arrow, double-ended"]
+
+[[rewrite]]
+matches = "overline"
+item = ["accents", "bar"]
+
+[[rewrite]]
+matches = "overlinesegment"
+item = ["accents", "line segment"]
+
+[[rewrite]]
+matches = ["overparen", "texttoptiebar", "wideparen"]
+item = ["accents", "parenthesis"]
+
+[[rewrite]]
+matches = "ovhook"
+item = ["accents", "hook"]
+
+[[rewrite]]
+matches = "partvoice"
+item = ["accents", "voiced consonant, partial"]
+
+[[rewrite]]
+matches = "partvoiceless"
+item = ["accents", "voiceless consonant, partial"]
+
+[[rewrite]]
+matches = ["r", "ring"]
+render_contains = "blackacc"
+item = ["accents", "ring"]
+
+[[rewrite]]
+matches = "rc"
+item = ["accents", "cedilla, reversed"]
+
+[[rewrite]]
+matches = ["shortunderleftrightvecc", "spreadlips", "underleftrightvecc"]
+item = ["accents", "arrow below, double-ended"]
+
+[[rewrite]]
+regex = '^(short)?(straight)?lvecc$'
+item = ["accents", "arrow, left"]
+
+[[rewrite]]
+regex = '^(short)?(straight)?vecc$'
+item = ["accents", "arrow, right"]
+
+[[rewrite]]
+regex = '^(short)?under(straight)?lvecc$'
+item = ["accents", "arrow below, left"]
+
+[[rewrite]]
+regex = '^(short)?under(straight)?vecc$'
+item = ["accents", "arrow below, right"]
+
+[[rewrite]]
+matches = "sliding"
+item = ["accents", "arrow below, right"]
+
+[[rewrite]]
+matches = "spiritusasper"
+item = ["accents", "spiritus asper"]
+
+[[rewrite]]
+matches = "spirituslenis"
+item = ["accents", "spiritus lenis"]
+
+[[rewrite]]
+matches = "subcorner"
+item = ["accents", "angle below, left"]
+
+[[rewrite]]
+matches = "strokethrough"
+item = ["accents", "solidus overlay"]
+
+[[rewrite]]
+matches = ["subdoublebar", "ushortdw"]
+item = ["accents", "bar below, double"]
+
+[[rewrite]]
+matches = "subdoublevert"
+item = ["accents", "vertical line below, double"]
+
+[[rewrite]]
+matches = "sublptr"
+item = ["accents", "arrowhead below, left"]
+
+[[rewrite]]
+matches = "subrptr"
+item = ["accents", "arrowhead below, right"]
+
+[[rewrite]]
+matches = ["syl", "textsyllabic"]
+item = ["accents", "vertical line below"]
+
+[[rewrite]]
+matches = "t"
+render_contains = "blackacc"
+item = ["accents", "tie"]
+
+[[rewrite]]
+regex = '^text(acute|breve|grave|ring|tilde)(dot|macron)$'
+item = ["accents", 'combination \1 and \2']
+
+[[rewrite]]
+matches = "textacutewedge"
+item = ["accents", "combination acute and caron"]
+
+[[rewrite]]
+matches = "textadvancing"
+item = ["accents", "tack below, left"]
+
+[[rewrite]]
+matches = "textbottomtiebar"
+item = ["accents", "arc below, inverted"]
+
+[[rewrite]]
+regex = '^textcircum(acute|dot)$'
+item = ["accents", 'combination circumflex and \1']
+
+[[rewrite]]
+regex = '^textdot(acute|breve)$'
+item = ["accents", 'combination dot and \1']
+
+[[rewrite]]
+matches = "textdoublevbaraccent"
+item = ["accents", "vertical line, double"]
+
+[[rewrite]]
+matches = "textfallrise"
+item = ["accents", "falling and rising tone"]
+
+[[rewrite]]
+matches = "textgravecircum"
+item = ["accents", "combination grave and circumflex"]
+
+[[rewrite]]
+matches = "textgravemid"
+item = ["accents", "combination grave and macron"]
+
+[[rewrite]]
+matches = "texthighrise"
+item = ["accents", "high rising tone"]
+
+[[rewrite]]
+matches = "textinvsubbridge"
+item = ["accents", "bridge below, inverted"]
+
+[[rewrite]]
+matches = "textlowering"
+item = ["accents", "tack below, down"]
+
+[[rewrite]]
+matches = "textlowrise"
+item = ["accents", "low rising tone"]
+
+[[rewrite]]
+matches = "textmidacute"
+item = ["accents", "combination macron and acute"]
+
+[[rewrite]]
+matches = "textovercross"
+item = ["accents", "X"]
+
+[[rewrite]]
+matches = "textoverw"
+item = ["accents", "arch, inverted double"]
+
+[[rewrite]]
+matches = "textpolhook"
+item = ["accents", "hook below, inverted and reversed"]
+
+[[rewrite]]
+matches = "textraising"
+item = ["accents", "tack below, up"]
+
+[[rewrite]]
+matches = "textretracting"
+item = ["accents", "tack below, right"]
+
+[[rewrite]]
+matches = "textrisefall"
+item = ["accents", "rising and falling tone"]
+
+[[rewrite]]
+matches = "textseagull"
+item = ["accents", "seagull below"]
+
+[[rewrite]]
+matches = "textsubcircum"
+item = ["accents", "circumflex below"]
+
+[[rewrite]]
+matches = "textsublhalfring"
+item = ["accents", "half ring below, left"]
+
+[[rewrite]]
+matches = "textsubrhalfring"
+item = ["accents", "half ring below, right"]
+
+[[rewrite]]
+regex = '^textsub(acute|grave)$'
+item = ["accents", '\1 below, inverted']
+
+[[rewrite]]
+regex = '^textsub(bar|bridge|dot|plus|ring|square|tilde)$'
+item = ["accents", '\1 below']
+
+[[rewrite]]
+matches = "textsubw"
+item = ["accents", "arch below, inverted double"]
+
+[[rewrite]]
+matches = "textsubwedge"
+item = ["accents", "caron below"]
+
+[[rewrite]]
+matches = "textvbaraccent"
+item = ["accents", "vertical line"]
+
+[[rewrite]]
+matches = "u"
+render_contains = "blackacchack"
+item = ["accents", "breve"]
+
+[[rewrite]]
+matches = "U"
+render_contains = '\blackacchack{\smtrU}'
+item = ["accents", "breve, below"]
+
+# What is this accent actually called?
+[[rewrite]]
+matches = "U"
+render_contains = '\encfour{\blackacchack{\U}}'
+item = ["accents", "fang, double"]
+
+[[rewrite]]
+matches = "U"
+render_contains = '\enctwoA{\blackacchack{\U}}'
+item = ["accents", "breve, Cyrillic"]
+
+[[rewrite]]
+regex = '^(?:a)?under(arc|brace|bracket|group|parenthesis)$'
+item = ["accents", '\1 below, inverted']
+
+[[rewrite]]
+regex = '^under(left|right)(pitchfork|broom)$'
+item = ["accents", '\2 below, \1']
+
+[[rewrite]]
+matches = "underline"
+render_contains = "blackacc"
+item = ["accents", "bar below"]
+
+[[rewrite]]
+matches = "underparen"
+item = ["accents", "parenthesis below, inverted"]
+
+[[rewrite]]
+regex = '^(?:short)?under(left|right)harp(?:oon)?(?:up|down)$'
+item = ["accents", 'harpoon below, \1 down']
+
+[[rewrite]]
+matches = ["underleftharp", "underleftharpoon", "shortunderleftharp"]
+item = ["accents", "harpoon below, left up"]
+
+[[rewrite]]
+matches = ["underrightharp", "underrightharpoon", "shortunderrightharp"]
+item = ["accents", "harpoon below, right up"]
+
+[[rewrite]]
+matches = ["underleftrightharp", "shortunderleftrightharp"]
+item = ["accents", "harpoon below, left up, right down"]
+
+[[rewrite]]
+matches = ["underrightleftharp", "shortunderrightleftharp"]
+item = ["accents", "harpoon below, right up, left down"]
+
+[[rewrite]]
+matches = "underlinesegment"
+item = ["accents", "line segment below"]
+
+[[rewrite]]
+matches = ["ut", "utilde"]
+item = ["accents", "tilde below"]
+
+[[rewrite]]
+matches = ["vec", "vv"]
+item = ["accents", "arrow, right"]
+
+[[rewrite]]
+regex = '^wide(arc|bar|ring|tilde|triangle)$'
+item = ["accents", '\1']
+
+[[rewrite]]
+matches = "whistle"
+item = ["accents", "arrow below, up"]
+
+[[rewrite]]
+matches = "widebridgeabove"
+item = ["accents", "bridge"]
+
+[[rewrite]]
+matches = "wideOarc"
+item = ["accents", "arrow, curved right"]
+
+[[rewrite]]
+regex = '^double\s+(.*)$'
+render_contains = "blackacc"
+item = ["accents", '\1, double']
+
+[[rewrite]]
+matches = ["Fermi", "Ferli"]
+item = ["accents", "fermata"]
+
+[[rewrite]]
+matches = [
+    "acute",
+    "breve",
+    "macron",
+    "tilde"
+]
+render_contains = "blackacc"
+item = ["accents", '\g<0>']
+
+# ... halloweenmath accents ...
+
+# Here we lump together various halloweenmath decorative accents that
+# aren't particularly useful individually.
+
+[[rewrite]]
+regex = '^over.*(bat|ghost)\*?'
+item = ["accents", '\1']
+
+[[rewrite]]
+regex = '^over(?:left|right)witchon(broom|pitchfork)\*?$'
+item = ["accents", 'witch on \1']
+
+[[rewrite]]
+regex = '^under.*(bat|ghost)\*?'
+item = ["accents", '\1 below']
+
+[[rewrite]]
+regex = '^under(?:left|right)witchon(broom|pitchfork)\*?$'
+item = ["accents", 'witch on \1 below']
+
+# --------------- diacritics (accents with no argument) ----------------
+
+[[rewrite]]
+matches = "underwedge"
+item = ["diacritics", "wedge below"]
+
+[[rewrite]]
+regex = '^text(acute|grave)dbl$'
+item = ["diacritics", '\1, double']
+
+[[rewrite]]
+matches = "textdownstep"
+item = ["diacritics", "arrow down"]
+
+# I'm just guessing what "celtpal" means.
+[[rewrite]]
+matches = "textceltpal"
+item = ["diacritics", "Celtic palatal"]
+
+[[rewrite]]
+matches = "textupstep"
+item = ["diacritics", "arrow up"]
+
+[[rewrite]]
+matches = "texthalflength"
+item = ["diacritics", "half-length vowel"]
+
+[[rewrite]]
+matches = "texthooktop"
+item = ["diacritics", "hook"]
+
+[[rewrite]]
+matches = "textlptr"
+item = ["diacritics", "less than"]
+
+[[rewrite]]
+matches = "textrptr"
+item = ["diacritics", "greater than"]
+
+[[rewrite]]
+matches = ["textpalhook", "textpalhookvar", "textpalhooklong"]
+item = ["diacritics", "palatal hook"]
+
+[[rewrite]]
+matches = "textprimstress"
+item = ["diacritics", "primary stress"]
+
+[[rewrite]]
+matches = "textsecstress"
+item = ["diacritics", "secondary stress"]
+
+[[rewrite]]
+matches = "textrectangle"
+item = ["diacritics", "rectangle"]
+
+[[rewrite]]
+matches = "textretractingvar"
+item = ["diacritics", "retracting"]
+
+[[rewrite]]
+matches = "textrevapostrophe"
+item = ["diacritics", "apostrophe, reversed"]
+
+[[rewrite]]
+matches = "textrthook"
+item = ["diacritics", "hook right"]
+
+[[rewrite]]
+matches = "textrthooklong"
+item = ["diacritics", "hook right, long"]
+
+[[rewrite]]
+matches = "textrhoticity"
+item = ["diacritics", "rhoticity"]
+
+[[rewrite]]
+matches = "undertilde"
+item = ["diacritics", "tilde below"]
+
+[[rewrite]]
+matches = "textasciidieresis"
+item = ["diacritics", "diaeresis"]
+word = 'di{\\ae}resis'
+
+[[rewrite]]
+matches = "textasciicircum"
+item = ["diacritics", "circumflex"]
+
+[[rewrite]]
+render_contains = '(\^{})'
+item = ["diacritics", "circumflex"]
+
+[[rewrite]]
+render_contains = '(\corner)'
+item = ["diacritics", "corner"]
+
+[[rewrite]]
+matches = [
+    "open",
+    "stress",
+    "syllabic"
+]
+item = ["diacritics", '\1']
+
+[[rewrite]]
+regex = '^(up|down|left|right)t$'
+item = ["diacritics", 'tack \1']
+
+[[rewrite]]
+regex = '^(up|down|left|right)p$'
+item = ["diacritics", 'pointer \1']
+
+[[rewrite]]
+regex = '^under(dots|ring|tilde|wedge)$'
+item = ["diacritics", '\1 below']
+
+[[rewrite]]
+matches = "overring"
+item = ["diacritics", "ring"]
+
+[[rewrite]]
+matches = "ain"
+item = ["diacritics", "apostrophe, reversed"]
+
+[[rewrite]]
+matches = "polishhook"
+item = ["diacritics", "Polish hook"]
+
+[[rewrite]]
+matches = "secstress"
+item = ["diacritics", "secondary stress"]
+
+[[rewrite]]
+matches = "midtilde"
+item = ["diacritics", "tilde, middle"]
+
+[[rewrite]]
+matches = "halflength"
+item = ["diacritics", "half length"]
+
+[[rewrite]]
+matches = "obrbrak"
+item = ["diacritics", "down bracket, below"]
+
+[[rewrite]]
+matches = "ubrbrak"
+item = ["diacritics", "up bracket, above"]
+
+[[rewrite]]
+matches = ["barOver", "BarOver"]
+item = ["diacritics", "macron"]
+
+[[rewrite]]
+render_contains = '(\magicequal{})'
+item = ["diacritics", "macron"]
+
+[[rewrite]]
+render_contains = '(\~{})'
+item = ["diacritics", "tilde"]
+
+# This rule should appear near the end of this section.
+[[rewrite]]
+regex = '^textascii(.+)$'
+item = ["diacritics", '\1']

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-arrows.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-arrows.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-arrows.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,494 @@
+##############################################
+# Categorize arrow symbols.                  #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ------------------------ early special cases -------------------------
+
+[[rewrite]]
+contains = "arrow"
+render_contains = "blackacc"
+item = ["arrow", "accents"]
+render = ""
+
+[[rewrite]]
+contains = "threearrows"
+item = ["arrow", "three"]
+
+[[rewrite]]
+matches = [
+   "envelope with arrow",
+   "envelope with downwards arrow above"
+]
+item = ["envelope", "with downward arrow"]
+
+[[rewrite]]
+render_contains = ["{1f519}", "{1F519}"]
+item = "BACK with arrow"
+
+[[rewrite]]
+render_contains = ["{1f51a}", "{1F51A}"]
+item = "END with arrow"
+
+[[rewrite]]
+render_contains = ["{1f51b}", "{1F51B}"]
+item = "ON!! with arrow"
+
+[[rewrite]]
+render_contains = ["{1f51c}", "{1F51C}"]
+item = "SOON with arrow"
+
+[[rewrite]]
+render_contains = ["{1f51d}", "{1F51D}"]
+item = "TOP with arrow"
+
+[[rewrite]]
+matches = "heart with arrow"
+item = ["heart", "with arrow"]
+
+# ----------------------------- arrowheads -----------------------------
+
+[[rewrite]]
+matches = "arrowheads"
+item = "arrowhead"
+
+[[rewrite]]
+regex = '^outline.*arrow head$'
+item = ["arrowhead", "outlined"]
+
+[[rewrite]]
+regex = '^black.*arrow head$'
+item = ["arrowhead", "filled"]
+
+[[rewrite]]
+render_contains = '\usym{27A4}'
+item = ["arrowhead", "filled"]
+
+[[rewrite]]
+regex = '^white.*arrow head$'
+item = ["arrowhead", "hollow"]
+
+[[rewrite]]
+regex = '^dotted.*arrow head$'
+item = ["arrowhead", "dotted"]
+
+[[rewrite]]
+compare_lowercase = true
+contains = ["arrowhead", "arrowbullet"]
+item = ["arrowhead", "half filled"]
+
+# ----------------------------- non-arrows -----------------------------
+
+# This rule should appear early in the arrows section because we're
+# *not* categorizing keyboard symbols as arrows.
+[[rewrite]]
+matches = "UArrow"
+item = ["keyboard symbols", "up arrow"]
+
+# This rule should appear early in the arrows section because we're
+# *not* categorizing keyboard symbols as arrows.
+[[rewrite]]
+matches = "DArrow"
+item = ["keyboard symbols", "down arrow"]
+
+# This rule should appear early in the arrows section because we're
+# *not* categorizing keyboard symbols as arrows.
+[[rewrite]]
+matches = "LArrow"
+item = ["keyboard symbols", "left arrow"]
+
+# This rule should appear early in the arrows section because we're
+# *not* categorizing keyboard symbols as arrows.
+[[rewrite]]
+matches = "RArrow"
+item = ["keyboard symbols", "right arrow"]
+
+[[rewrite]]
+matches = "people with arrows"
+item = ["people", "with arrows"]
+
+# This rule ideally belongs in prune-idx-triangles, but arrows are
+# processed first so it has to be handled here.
+[[rewrite]]
+matches = [
+    "DOWNarrow",
+    "LEFTarrow",
+    "RIGHTarrow",
+    "UParrow"
+]
+item = ["triangle", "filled"]
+
+# This rule ideally belongs in prune-idx-harpoons, but arrows are
+# processed first so it has to be handled here.
+[[rewrite]]
+matches = [
+    "left harpoon down arrow",
+    "left harpoon up arrow",
+    "right harpoon down arrow",
+    "right harpoon up arrow"
+]
+item = "harpoon"
+
+[[rewrite]]
+regex = '^mobile phone with.*arrow'
+item = ["cell phone", "with arrow"]
+
+# ------------------------------- arrows -------------------------------
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = '\faArrows*'
+item = ["arrow", "crossing, dingbat"]
+
+# This rule should precede the generic "arrows" rule.
+[[rewrite]]
+consider_all_entries = true
+top_matches = "arrows"
+matches = "double-headed, diagonal"
+item = ["arrow", "double headed"]
+
+# This rule should precede the following one.
+[[rewrite]]
+top_matches = "arrows"
+matches = "arrows"
+item = ["arrow"]
+
+[[rewrite]]
+top_matches = "arrows"
+regex = '^(.+)$'
+item = ["arrow", '\1']
+
+[[rewrite]]
+regex = 'arrow.*arrow'
+item = ["arrow", "two"]
+
+[[rewrite]]
+matches = "xtofrom"
+item = ["arrow", "two, extensible"]
+
+# This rule should appear before the following rule.
+[[rewrite]]
+render_regex = '\\usym\{1F5(0[0-4]|D8)\}'
+item = ["arrow", "two, filled"]
+
+# This rule should appear early in the arrows section.
+[[rewrite]]
+contains = "arrows"
+not_contains = ["curvearrows", "arrowsub", "arrowsup"]
+not_render_contains = [
+    "faArrows",
+    "pkgname",
+    "twemoji"
+]
+item = ["arrow", "two"]
+
+# This rule should appear early in the arrows section.
+[[rewrite]]
+regex = '^(.*)arow(.*)$'
+word = '\1arrow\2'
+continue = true
+
+[[rewrite]]
+matches = [
+    "to",
+    "gets",
+    "CAN",
+    "EM",
+    "SUB",
+    "ESC"
+]
+not_render_contains = '\EOto'
+item = "arrow"
+
+[[rewrite]]
+matches = ["nto", "ngets"]
+item = ["arrow", "negated"]
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = '(LLeft|RRight|UUp|DDown).*arrow'
+item = ["arrow", "triple bodied"]
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = '(Lleft|Rright|Uup|Ddown).*arrow'
+item = ["arrow", "triple bodied"]
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = '(Leftright|Updown|Nesw|Nwse|Longleftright).*arrow'
+item = ["arrow", "double ended, double bodied"]
+
+[[rewrite]]
+regex = '(Left|Right|Up|Down|Long|Ne|Nw|Se|Sw).*arrow'
+item = ["arrow", "double bodied"]
+
+[[rewrite]]
+regex = '(twohead|double).*arrow'
+item = ["arrow", "double headed"]
+
+[[rewrite]]
+render_contains = "BParrow"
+item = ["arrow", "double tailed"]
+
+# This rule must precede the generic "heavy.*arrow" rule.
+[[rewrite]]
+matches = [
+    "fgerightarrow",
+    "wedge-tailed rightwards arrow",
+    "heavy wedge-tailed rightwards arrow"
+]
+item = ["arrow", "fletched"]
+
+[[rewrite]]
+regex = 'feathered.*arrow'
+item = ["arrow", "fletched"]
+
+[[rewrite]]
+regex = 'shad.*arrow'   # "shadowed" or "shaded"
+item = ["arrow", "shadowed"]
+
+[[rewrite]]
+contains = "arrowon"
+item = ["arrow", "overlaid on a circle"]
+
+[[rewrite]]
+regex = 'circleon.*arrow'
+item = ["arrow", "circle centered"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(hook|hk).*arrow'
+item = ["arrow", "hooked"]
+
+# This rule must precede the "curve...arrow" rule.
+[[rewrite]]
+matches = [
+    "ArrowBoldDownRight",
+    "ArrowBoldRightShort",
+    "ArrowBoldUpRight",
+    "ArrowBoldRightCircled",
+    "ArrowBoldRightStrobe",
+    "MVRightArrow",
+    "heavy black curved downwards and rightwards arrow",
+    "heavy black curved upwards and rightwards arrow"
+]
+item = ["arrow", "dingbat"]
+
+[[rewrite]]
+regex = '(curve|(?<!v)arc).*arrow'
+item = ["arrow", "curved"]
+
+[[rewrite]]
+matches = ["Lefttorque", "Righttorque"]
+item = ["arrow", "curved"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = 'loop.*arrow'
+item = ["arrow", "looped"]
+
+[[rewrite]]
+regex = 'ov.*arrow'
+not_contains = "barover"
+item = ["arrow", "crossing"]
+
+[[rewrite]]
+regex = '^to[nsew]a$'
+item = ["arrow", "crossing"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = 'white.*arrow'
+item = ["arrow", "outlined"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = 'black.*arrow'
+not_matches = "blackcircledownarrow"
+item = ["arrow", "filled"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = 'zig.*arrow'
+item = ["arrow", "zigzagged"]
+
+[[rewrite]]
+compare_lowercase = true
+contains = "arrowtriangle"
+item = ["arrow", "triangle headed"]
+
+[[rewrite]]
+matches = "triangle-headed rightwards arrow"
+item = ["arrow", "triangle headed"]
+
+[[rewrite]]
+contains = 'arrowtail'
+item = ["arrow", "with tail"]
+
+[[rewrite]]
+render_contains = [
+    '$\curlyveedownarrow$',
+    '$\curlywedgeuparrow$',
+    '\BSKcurlywedgedownarrow',
+    '\BSKcurlywedgeuparrow'
+]
+item = ["arrow", "joined"]
+
+[[rewrite]]
+render_contains = [
+    '$\curlyveeuparrow$',
+    '$\curlywedgedownarrow$',
+    '\BSKcurlyveedownarrow',
+    '\BSKcurlyveeuparrow'
+]
+item = ["arrow", "forked"]
+
+[[rewrite]]
+render_contains = 'twemoji'
+regex = '(up|down|left|right|clockwise).*?\s+arrow'
+item = ["arrow", "buttons"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = 'ribbon.*arrow'
+item = ["arrow", "ribbon"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(squig|wav[ey]).*arrow'
+item = ["arrow", "wavy"]
+
+[[rewrite]]
+matches = ["leadsto", "longleadsto"]
+item = ["arrow", "wavy"]
+
+# This rule must follow the "dashed" rule.
+[[rewrite]]
+matches = [
+    "dashed triangle-headed rightwards arrow",
+    "heavy dashed triangle-headed rightwards arrow"
+]
+item = ["arrow", "dingbat"]
+
+# I think "bk" is short for "broken".
+[[rewrite]]
+compare_lowercase = true
+regex = '(dash|bk).*arrow'
+item = ["arrow", "dashed"]
+
+[[rewrite]]
+regex = 'dot.*arrow'
+item = ["arrow", "dotted"]
+
+[[rewrite]]
+regex = 'Square.*arrow'
+item = ["arrow", "with rectangular body"]
+
+# This rule must precede the other "circle...arrow" rules.
+[[rewrite]]
+regex = 'circle(left|right)arrow'
+item = ["arrow", "with circular tail"]
+
+[[rewrite]]
+regex = 'Circle.*arrow'
+item = ["arrow", "with rounded body"]
+
+[[rewrite]]
+regex = '(circle|lefttoright|righttoleft|uptodown|downtoup).*arrow'
+not_contains = ["blackcircledownarrow", "circleon"]
+item = ["arrow", "circular"]
+
+[[rewrite]]
+matches = ["leftturn", "rightturn"]
+item = ["arrow", "circular"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^[dlr]+sh$'
+item = ["arrow", "bent"]
+
+[[rewrite]]
+contains = "fork arrow"
+item = ["arrow", "fork tailed"]
+
+[[rewrite]]
+contains = "fish arrow"
+item = ["arrow", "fish headed"]
+
+[[rewrite]]
+regex = '^heavy.*arrow$'
+item = ["arrow", "dingbat"]
+
+[[rewrite]]
+matches = [
+    "drafting point rightwards arrow",
+    "open-outlined rightwards arrow",
+    "teardrop-barbed rightwards arrow"
+]
+item = ["arrow", "dingbat"]
+
+[[rewrite]]
+matches = [
+    "shpos",
+    "shneg",
+    "shift for subscripts",
+    "shift for superscripts"
+]
+item = ["arrow"]
+
+[[rewrite]]
+matches = [
+    "shift",
+    "shift for accents",
+    "DCb",
+    "GS"
+]
+item = ["arrow", "double ended"]
+
+[[rewrite]]
+matches = "ETB"
+item = ["arrow", "double ended, bar under"]
+
+[[rewrite]]
+contains = "flat arrow"
+item = ["arrow", "flat"]
+
+[[rewrite]]
+matches = "pointer"
+item = ["arrow", "hollow"]
+
+# Explicitly ignore more non-arrows.
+[[rewrite]]
+contains = [
+    " arrow",      # Various emoji arrows
+    "arrowbullet",
+    "wheelbarrow"
+]
+
+# This rule should appear late in the arrows section.
+[[rewrite]]
+compare_lowercase = true
+regex = '(updown|downup|leftright|rightleft|(ne|nw|se|sw){2})arrow'
+item = ["arrow", "double ended"]
+
+# This rule should appear late in the arrows section.
+[[rewrite]]
+compare_lowercase = true
+regex = '^n(?!n?[ew]).*(arrow|leadsto)'
+item = ["arrow", "negated"]
+
+# This rule should appear last in the arrows section.
+[[rewrite]]
+compare_lowercase = true
+contains = ["arrow", "textglob"]
+not_contains = [
+    "geneuronarrow",
+    "cupleftarrow",
+    "leftarrowsubset",
+    "rightarrowsupset"
+]
+not_regex = '(black|white)(circle|diamond)downarrow'
+not_render_contains = ["textsf", "pkgname"]
+item = "arrow"
+render = 'arrow ($\rightarrow$)'

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-brands.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-brands.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-brands.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,563 @@
+########################################################################
+# Discard brand names from the index if they are preceding by a prefix #
+# like "ti" or "fa".  (The non-prefixed versions are retained.)        #
+#                                                                      #
+# Author: Scott Pakin <scott+clsl at pakin.org>                           #
+########################################################################
+
+[[delete]]
+regex = '''^..(\
+AccessibleIcon|\
+Accusoft|\
+AcquisitionsIncorporated|\
+Adn|\
+Adversal|\
+Affiliatetheme|\
+Airbnb|\
+Algolia|\
+Alipay|\
+Alpinelinux|\
+Amazon|\
+AmazonPay|\
+Amilia|\
+Android|\
+Angellist|\
+Angrycreative|\
+Angular|\
+AngularAlt|\
+Apache|\
+Apper|\
+Apple|\
+ApplePay|\
+AppStore|\
+AppStoreIos|\
+Archlinux|\
+Artstation|\
+Asymmetrik|\
+Atlassian|\
+Audible|\
+Autoprefixer|\
+Avianex|\
+Aviato|\
+Aws|\
+Azure|\
+Backbone|\
+Bandcamp|\
+BattleNet|\
+Behance|\
+BehanceSquare|\
+Bimobject|\
+Bitbucket|\
+Bitcoin|\
+Bity|\
+Blackberry|\
+BlackTie|\
+Blogger|\
+BloggerB|\
+Bluetooth|\
+BluetoothB|\
+Bootstrap|\
+Buffer|\
+Buromobelexperte|\
+BuyNLarge|\
+Buysellads|\
+C|\
+CanadianMapleLeaf|\
+Cassandra|\
+CcAmazonPay|\
+CcAmex|\
+CcApplePay|\
+CcDinersClub|\
+CcDiscover|\
+CcJcb|\
+CcMastercard|\
+CcPaypal|\
+CcStripe|\
+CcVisa|\
+Centercode|\
+Centos|\
+Chrome|\
+Chromecast|\
+Clojure|\
+Cloudflare|\
+Cloudscale|\
+Cloudsmith|\
+Cloudversify|\
+Codeigniter|\
+Codepen|\
+Codiepie|\
+CoffeeBean|\
+Confluence|\
+Connectdevelop|\
+Contao|\
+CottonBureau|\
+Cpanel|\
+Cplusplus|\
+CriticalRole|\
+Csharp|\
+Css|\
+Cssthree|\
+CssthreeAlt|\
+Cuttlefish|\
+Dailymotion|\
+DAndD|\
+DAndDBeyond|\
+Dashcube|\
+Debian|\
+Deezer|\
+Delicious|\
+Deploydog|\
+Deskpro|\
+Dev|\
+Deviantart|\
+Dhl|\
+Diaspora|\
+Digg|\
+DigitalOcean|\
+Discord|\
+Discourse|\
+Dochub|\
+Docker|\
+Draft|\
+Dreamhost|\
+Dropbox|\
+Drupal|\
+Dthree|\
+Dyalog|\
+Earlybirds|\
+Ebay|\
+Edge|\
+EdgeLegacy|\
+Elementor|\
+Elixir|\
+Ello|\
+Elm|\
+Ember|\
+Empire|\
+Envira|\
+Erlang|\
+Ethereum|\
+Etsy|\
+Evernote|\
+Exherbo|\
+Expeditedssl|\
+Facebook|\
+FacebookF|\
+FacebookMessenger|\
+FacebookSquare|\
+FantasyFlightGames|\
+Fedex|\
+Fedora|\
+Figma|\
+FireAlt|\
+Firefox|\
+FirefoxBrowser|\
+Firstdraft|\
+FirstOrder*|\
+Flickr|\
+Flipboard|\
+Fly|\
+FontAwesome*|\
+FontAwesomeFlag|\
+Fonticons|\
+FonticonsFi|\
+FortAwesome*|\
+Forumbee|\
+Foursquare|\
+Freebsd|\
+Freecodecamp|\
+FreeCodeCamp|\
+Fulcrum|\
+GalacticRepublic|\
+GalacticSenate|\
+Gentoo|\
+GetPocket|\
+Gg|\
+GgCircle|\
+Git|\
+Github*|\
+GithubSquare|\
+Gitkraken|\
+Gitlab|\
+GitSquare|\
+Gitter|\
+Glide|\
+GlideG|\
+Gnome|\
+Go|\
+GoAlt|\
+Gofore|\
+Goodreads|\
+GoodreadsG|\
+Google|\
+GoogleAlt|\
+GoogleCode|\
+GoogleDevelopers|\
+GoogleDrive|\
+GooglePay|\
+GooglePlay|\
+GooglePlus|\
+GooglePlusG|\
+GooglePlusSquare|\
+GoogleWallet|\
+Gradle|\
+Grails|\
+GrailsAlt|\
+Gratipay|\
+Grav|\
+Gripfire|\
+Grunt|\
+Guilded|\
+Gulp|\
+GulpAlt|\
+HackerNews|\
+HackerNewsSquare|\
+Hackerrank|\
+Hadoop|\
+Haskell|\
+Heroku|\
+Hips|\
+HireAHelper|\
+Hive|\
+Hooli|\
+Hornbill|\
+Hotjar|\
+Houzz|\
+Html|\
+Htmlfive|\
+HtmlfiveAlt|\
+Hubspot|\
+Icon|\
+Ideal|\
+Imdb|\
+Innosoft|\
+Instagram|\
+InstagramSquare|\
+Instalod|\
+Intercom|\
+InternetExplorer|\
+Invision|\
+Ioxhost|\
+ItchIo|\
+Itunes|\
+ItunesNote|\
+Java|\
+JavaBold|\
+JavaDuke|\
+Javascript|\
+JavascriptAlt|\
+Jedi|\
+JediOrder|\
+Jenkins|\
+Jetty|\
+Jira|\
+Joget|\
+Joomla|\
+Jquery|\
+Js|\
+Jsfiddle|\
+JsSquare|\
+Kaggle|\
+Kde|\
+Keybase|\
+Keycdn|\
+Kickstarter|\
+KickstarterK|\
+Korvue|\
+Laravel|\
+Lastfm|\
+LastfmSquare|\
+Leanpub|\
+Less|\
+Line|\
+Linkedin|\
+LinkedinIn|\
+Linode|\
+Linux|\
+LinuxMint|\
+Looking|\
+Lyft|\
+Magento|\
+Mailchimp|\
+Mandalorian|\
+Mariadb|\
+Markdown|\
+Mastodon|\
+Maven|\
+Maxcdn|\
+Mdb|\
+Medapps|\
+Medium|\
+MediumM|\
+Medrt|\
+Meetup|\
+Megaport|\
+Mendeley|\
+Microblog|\
+Microsoft|\
+Mix|\
+Mixcloud|\
+Mixer|\
+Mizuni|\
+Modx|\
+Monero|\
+Mongodb|\
+Mssql|\
+Mysql|\
+MysqlAlt|\
+Napster|\
+Neos|\
+Netbsd|\
+Nginx|\
+NginxAlt|\
+NginxAlttwo|\
+Nimblr|\
+Node|\
+Nodejs|\
+NodeJs|\
+Npm|\
+Ns|\
+Nutritionix|\
+Objc|\
+OctopusDeploy|\
+Odnoklassniki|\
+OdnoklassnikiSquare|\
+OldRepublic|\
+Opencart|\
+Openid|\
+Openshift|\
+Opera|\
+OptinMonster|\
+Oracle|\
+OracleAlt|\
+Orcid|\
+Osi|\
+Osx|\
+Page|\
+Pagelines|\
+Palfed|\
+Patreon|\
+Paypal|\
+PennyArcade|\
+Perbyte|\
+Periscope|\
+Perl|\
+Phabricator|\
+PhoenixFramework|\
+PhoenixSquadron|\
+Php|\
+PhpAlt|\
+PiedPiper*|\
+PiedPiperHat|\
+PiedPiperPp|\
+PiedPiperSquare|\
+Pinterest|\
+PinterestP|\
+PinterestSquare|\
+Playframework|\
+PlayframeworkAlt|\
+Playstation|\
+Plone|\
+Postgres|\
+PostgresAlt|\
+ProductHunt|\
+Pushed|\
+Python|\
+Qq|\
+Quinscape|\
+Quora|\
+Raspberrypi|\
+RaspberryPi|\
+Ravelry|\
+React|\
+Reacteurope|\
+Reactjs|\
+Readme|\
+Rebel|\
+Reddit|\
+RedditAlien|\
+RedditSquare|\
+Redhat|\
+Redis|\
+RedRiver|\
+Renren|\
+Replyd|\
+Researchgate|\
+Resolving|\
+Rev|\
+Rocketchat|\
+Rockrms|\
+RProject|\
+Ruby|\
+RubyOnRails|\
+RubyOnRailsAlt|\
+Rust|\
+Safari|\
+Salesforce|\
+Sass|\
+Satellite|\
+Scala|\
+ScalaAlt|\
+Schlix|\
+Scribd|\
+Searchengin|\
+Sellcast|\
+Sellsy|\
+Servicestack|\
+Shirtsinbulk|\
+Shopify|\
+Shopware|\
+Simplybuilt|\
+Sistrix|\
+Sitefinity|\
+Sith|\
+Sketch|\
+Skyatlas|\
+Skype|\
+Slack|\
+SlackHash|\
+Slideshare|\
+Snapchat|\
+SnapchatGhost|\
+SnapchatSquare|\
+SocialAtCircular|\
+SocialDribbble|\
+SocialDribbbleCircular|\
+SocialFacebook|\
+SocialFacebookCircular|\
+SocialFlickr|\
+SocialFlickrCircular|\
+SocialGithub|\
+SocialGithubCircular|\
+SocialGooglePlus|\
+SocialGooglePlusCircular|\
+SocialInstagram|\
+SocialInstagramCircular|\
+SocialLastFm|\
+SocialLastFmCircular|\
+SocialLinkedin|\
+SocialLinkedinCircular|\
+SocialPinterest|\
+SocialPinterestCircular|\
+SocialSkype|\
+SocialSkypeOutline|\
+SocialTumbler|\
+SocialTumblerCircular|\
+SocialTwitter|\
+SocialTwitterCircular|\
+SocialVimeo|\
+SocialVimeoCircular|\
+SocialYoutube|\
+SocialYoutubeCircular|\
+Solaris|\
+Soundcloud|\
+Sourcetree|\
+Speakap|\
+SpeakerDeck|\
+Spotify|\
+Spring|\
+Squarespace|\
+StackExchange|\
+StackOverflow|\
+Stackpath|\
+Staylinked|\
+Steam|\
+SteamSquare|\
+SteamSymbol|\
+StickerMule|\
+Strava|\
+Stripe|\
+StripeS|\
+Studiovinari|\
+Stumbleupon|\
+StumbleuponCircle|\
+Superpowers|\
+Supple|\
+Suse|\
+Svg|\
+Swift|\
+Symfony|\
+Teamspeak|\
+Telegram|\
+TelegramPlane|\
+TencentWeibo|\
+Themeco|\
+Themeisle|\
+TheRedYeti|\
+ThinkPeaks|\
+Threedprint|\
+Tiktok|\
+Tomcat|\
+TradeFederation|\
+Trello|\
+Tumblr|\
+TumblrSquare|\
+Twitch|\
+Twitter|\
+TwitterSquare|\
+Typo|\
+Uber|\
+Ubuntu|\
+Uikit|\
+Umbraco|\
+Uncharted|\
+Uniregistry|\
+Unity|\
+Unsplash|\
+Untappd|\
+Ups|\
+Usb|\
+Usps|\
+Ussunnah|\
+Vaadin|\
+VendorAndroid|\
+VendorApple|\
+VendorMicrosoft|\
+Viacoin|\
+Viadeo|\
+ViadeoSquare|\
+Viber|\
+Vimeo|\
+VimeoSquare|\
+VimeoV|\
+Vine|\
+Vk|\
+Vnv|\
+Vuejs|\
+WatchmanMonitoring|\
+Waze|\
+Weebly|\
+Weibo|\
+Weixin|\
+Whatsapp|\
+WhatsappSquare|\
+Whmcs|\
+WikipediaW|\
+Windows|\
+Wix|\
+WizardsOfTheCoast|\
+Wodu|\
+WolfPackBattalion|\
+Wordpress|\
+WordpressSimple|\
+Wpbeginner|\
+Wpexplorer|\
+Wpforms|\
+Wpressr|\
+Xbox|\
+Xeleven|\
+Xing|\
+XingSquare|\
+Yahoo|\
+Yammer|\
+Yandex|\
+YandexInternational|\
+Yarn|\
+YCombinator|\
+Yelp|\
+Yoast|\
+Youtube|\
+YoutubeSquare|\
+Zhihu\
+)$'''
+not_matches = "ESC"

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-circles.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-circles.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-circles.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,253 @@
+##############################################
+# Categorize circles.                        #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ------------------------------ circles -------------------------------
+
+[[rewrite]]
+matches = "circles"
+item = "circle"
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = "CIRCLE"
+item = ["circle", "filled"]
+
+[[rewrite]]
+compare_lowercase = true
+matches = [
+    "bigcirc",
+    "medcirc",
+    "textbigcircle",
+    "varbigcirc",
+    "ovoid",
+    "bigovoid",
+    "circlet",
+    "circle",
+    "bigcircle",
+    "largecircle",
+    "medcircle",
+    "smallcircle"
+]
+item = "circle"
+
+[[rewrite]]
+matches = ["HT", "SO"]
+item = "circle"
+
+[[rewrite]]
+prefix = "WhiteCircle"
+item = "circle"
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(small|sm|md|med|lg|large)(wht|white)circle[a-z]?$'
+item = "circle"
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(blue|brown|green|orange|purple|red|yellow)\s+circle$'
+item = ["circle", '\1']
+
+# This rule should precede other "white circle" rules.
+[[rewrite]]
+render_contains = '\twemoji{26aa}'
+item = ["circle", "white"]
+
+[[rewrite]]
+matches = [
+    "white circle",
+    "white small circle",
+    "white really small circle"
+]
+item = "circle"
+
+# This rule should precede other "black circle" rules.
+[[rewrite]]
+render_contains = '\twemoji{26ab}'
+item = ["circle", "black"]
+
+[[rewrite]]
+matches = [
+    "baucircle",
+    "black circle",
+    "black small circle",
+    "black really small circle",
+    "CircleSolid",
+    "circletfill"
+]
+item = ["circle", "filled"]
+
+[[rewrite]]
+regex = '^(Filled|Black).*Circle'
+item = ["circle", "filled"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(sm|small|md|med|lg|large)(blk|black)circle[a-z]?$'
+item = ["circle", "filled"]
+
+[[rewrite]]
+matches = [
+    "dotted circle",
+    "dotted small circle",
+    "circletdot"
+]
+item = ["circle", "dotted"]
+
+[[rewrite]]
+matches = "dottedcircle"
+item = ["circle", "of dots"]
+
+[[rewrite]]
+matches = ["enclosecircle", "textcircled", "Kr"]
+item = ["circle", "enclosing"]
+
+[[rewrite]]
+matches = ["barcirc", "circlehbar"]
+item = ["circle", "horizontally divided"]
+
+[[rewrite]]
+matches = "cirE"
+item = ["circle", "equals"]
+
+[[rewrite]]
+matches = "cirscir"
+item = ["circle", "with small circle"]
+
+[[rewrite]]
+matches = "blackcircledownarrow"
+item = ["circle", "filled, arrow"]
+
+[[rewrite]]
+matches = ["circleleft", "circleright"]
+item = ["circle", "arrow"]
+
+[[rewrite]]
+matches = "errbarblackcircle"
+item = ["circle", "filled, error bars"]
+
+[[rewrite]]
+matches = "errbarcircle"
+item = ["circle", "error bars"]
+
+[[rewrite]]
+regex = '^HalfCircle(Left|Right)$'
+item = ["circle", "filled, half"]
+
+[[rewrite]]
+matches = [
+    "LEFTCIRCLE",
+    "RIGHTCIRCLE",
+    "blacklefthalfcircle",
+    "blackrighthalfcircle"
+]
+item = ["circle", "filled, half"]
+
+[[rewrite]]
+matches = ["LEFTcircle", "RIGHTcircle"]
+item = ["circle", "half filled"]
+
+[[rewrite]]
+regex = '^circle(top|bottom|left|right)halfblack$'
+item = ["circle", "half filled"]
+
+[[rewrite]]
+regex = '^circletfillh[ablr]$'
+item = ["circle", "half filled"]
+
+[[rewrite]]
+matches = ["Leftcircle", "Rightcircle"]
+item = ["circle", "half"]
+
+[[rewrite]]
+matches = [
+    "shadowed white circle",
+    "upper right shadowed white circle",
+    "lower right shadowed white circle",
+    "CircleShadow"
+]
+item = ["circle", "shadowed"]
+
+[[rewrite]]
+matches = [
+    "white circle containing black circle",
+    "white small circle containing black circle"
+]
+item = ["circle", "containing filled circle"]
+
+[[rewrite]]
+matches = "manfilledquartercircle"
+item = ["circle", "filled, quarter"]
+
+[[rewrite]]
+matches = "manconcentriccircles"
+item = ["circle", "concentric"]
+
+[[rewrite]]
+matches = [
+    "outline circle",
+    "outline small circle"
+]
+item = ["circle", "outlined"]
+
+[[rewrite]]
+regex = '''
+^(hollow red|\
+horizontally divided|\
+vertically divided|\
+quartered)\
+\s+(small\s+)?circle$\
+'''
+item = ["circle", '\1']
+
+[[rewrite]]
+matches = "circletlineh"
+item = ["circle", "horizontally divided"]
+
+[[rewrite]]
+matches = "circletlinev"
+item = ["circle", "vertically divided"]
+
+[[rewrite]]
+matches = "circletlinevh"
+item = ["circle", "quartered"]
+
+# I don't know what "logof" is supposed to represent, so I'm calling
+# it a circle divided into fifths.
+[[rewrite]]
+matches = "logof"
+item = ["circle", "fifths"]
+
+[[rewrite]]
+matches = "circletcross"
+item = ["circle", "crossed"]
+
+[[rewrite]]
+regex = '^circle[ul][lr]quad$'
+item = ["circle", "quarter marked"]
+
+[[rewrite]]
+regex = '^circle[ul][lr]quadblack$'
+item = ["circle", "quarter filled"]
+
+[[rewrite]]
+regex = '^blackcircle[ul][lr]quadwhite'
+item = ["circle", "three quarters filled"]
+
+[[rewrite]]
+matches = ["inversewhitecircle", "LF"]
+item = ["circle", "white on black"]
+
+[[rewrite]]
+regex = '^inv(erse)?white(lower|upper)halfcircle$'
+item = ["circle", "white on black, half"]
+
+[[rewrite]]
+regex = '^large (blue|red) circle$'
+item = ["circle", "striped"]    # utfsym is black-and-white.
+
+[[rewrite]]
+matches = "circlevertfill"
+item = ["circle", "striped"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-cup-cap.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-cup-cap.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-cup-cap.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,234 @@
+##############################################
+# Categorize unions and intersections.       #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ------------------------------- unions -------------------------------
+
+# ... rounded ...
+
+[[rewrite]]
+matches = [
+    "cup",
+    "bigcup",
+    "varcup",
+    "set union",
+    "set union quantifier"
+]
+not_render_contains = '\BPcup'
+item = "union"
+
+[[rewrite]]
+matches = [
+    "Cup",
+    "doublecup"
+]
+item = ["union", "double"]
+
+[[rewrite]]
+matches = [
+    "cupdot",
+    "bigcupdot",
+    "dcup",
+    "bigdcup",
+    "dotcup",
+    "dotted union"
+]
+item = ["union", "dotted"]
+
+[[rewrite]]
+matches = "barcup"
+item = ["union", "bar"]
+
+[[rewrite]]
+matches = [
+    "cupplus",
+    "bigcupplus",
+    "uplus",
+    "biguplus"
+]
+item = ["union", "plus"]
+
+[[rewrite]]
+matches = "upin"
+item = ["union", "vertical line"]
+
+[[rewrite]]
+matches = "closedvarcup"
+item = ["union", "closed"]
+
+[[rewrite]]
+matches = "closedvarcupsmashprod"
+item = ["union", "closed, smash product"]
+
+[[rewrite]]
+matches = "cupbarcap"
+item = ["union", "bar, intersection"]
+
+[[rewrite]]
+matches = "cupovercap"
+item = ["union", "over intersection"]
+
+[[rewrite]]
+matches = "cupleftarrow"
+item = ["union", "left arrow"]
+
+[[rewrite]]
+matches = "cupvee"
+item = ["union", "vee"]
+
+[[rewrite]]
+matches = "twocups"
+item = ["union", "two adjacent"]
+
+# ... square ...
+
+[[rewrite]]
+matches = [
+    "bigsqcup",
+    "sqcup",
+    "varsqcup",
+    "bunch join",
+    "bunch join quantifier",
+    "map join"
+]
+item = ["union", "square"]
+
+[[rewrite]]
+matches = [
+    "doublesqcup",
+    "Sqcup",
+    "sqdoublecup"
+]
+item = ["union", "square, double"]
+
+[[rewrite]]
+matches = [
+    "bigsqcupdot",
+    "sqcupdot"
+]
+item = ["union", "square, dotted"]
+
+[[rewrite]]
+matches = [
+    "bigsqcupplus",
+    "sqcupplus",
+    "bigsquplus",
+    "squplus"
+]
+item = ["union", "square, plus"]
+
+[[rewrite]]
+matches = [
+    "lefthalfcup",
+    "righthalfcup"
+]
+item = ["union", "square, half"]
+
+# --------------------------- intersections ----------------------------
+
+# ... rounded ...
+
+[[rewrite]]
+matches = [
+    "cap",
+    "bigcap",
+    "varcap",
+    "set intersection",
+    "set intersection quantifier"
+]    
+not_render_contains = '\fcBonnet'
+item = "intersection"
+
+[[rewrite]]
+matches = [
+    "Cap",
+    "doublecap"
+]
+item = ["intersection", "double"]
+
+[[rewrite]]
+matches = "barcap"
+item = ["intersection", "bar"]
+
+[[rewrite]]
+matches = [
+    "capdot",
+    "bigcapdot"
+]
+item = ["intersection", "dotted"]
+
+[[rewrite]]
+matches = "mlcp"
+item = ["intersection", "vertical line"]
+
+[[rewrite]]
+matches = [
+    "capplus",
+    "bigcapplus",
+    "bignplus",
+    "nplus"
+]
+item = ["intersection", "plus"]
+
+[[rewrite]]
+matches = "capbarcup"
+item = ["intersection", "bar, union"]
+
+[[rewrite]]
+matches = "capovercup"
+item = ["intersection", "over union"]
+
+[[rewrite]]
+matches = "capwedge"
+item = ["intersection", "wedge"]
+
+[[rewrite]]
+matches = "closedvarcap"
+item = ["intersection", "closed"]
+
+[[rewrite]]
+matches = [
+    "lefthalfcap",
+    "righthalfcap"
+]
+item = ["intersection", "square, half"]
+
+[[rewrite]]
+matches = "twocaps"
+item = ["intersection", "two adjacent"]
+
+# ... square ...
+
+[[rewrite]]
+matches = [
+    "sqcap",
+    "bigsqcap",
+    "varsqcap",
+    "bunch meet",
+    "bunch meet quantifier",
+    "map meet"
+]
+item = ["intersection", "square"]
+
+[[rewrite]]
+matches = [
+    "doublesqcap",
+    "Sqcap",
+    "sqdoublecap"
+]
+item = ["intersection", "square, double"]
+
+[[rewrite]]
+matches = [
+    "sqcapdot",
+    "bigsqcapdot"
+]
+item = ["union", "square, dotted"]
+
+[[rewrite]]
+matches = [
+    "sqcapplus",
+    "bigsqcapplus"
+]
+item = ["intersection", "square, plus"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-delete.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-delete.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-delete.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,743 @@
+#################################################################
+# Specify index entries to delete, generally due to redundancy. #
+# Author: Scott Pakin <scott+clsl at pakin.org>                    #
+#################################################################
+
+[[delete]]
+# Example: "1f468-1f3fb-200d-1f384"
+regex = '^[-0-9a-f]{4,}$'
+not_matches = ["babe", "deaf", "face"]
+
+[[delete]]
+# Example: "twemoji{sun behind large cloud}"
+regex = '^[A-Za-z]+\{[^\}]+\}$'
+not_prefix = ["worldflag{", "usym{", "MoonPha{"]
+not_contains = "square button"
+
+[[delete]]
+# Example: "\aiStackOverflow", which already is indexed under "StackOverflow"
+regex = '^ai([A-Z]|iNaturalist|arXiv|bioRxiv|dblp)'
+
+[[delete]]
+# Example: "\fcDinosaurB", which already is indexed under "dinosaur"
+regex = '^fc([A-Z]|hamburger|pink|sheet)'
+
+[[delete]]
+# Example: "\tiSocialGithub", which already is indexed under "GitHub"
+regex = '^ti(Social|Vendor|Dropbox)'
+
+[[delete]]
+# Example: "\jBV"
+regex = '^j[A-Z][A-Z]$'
+
+[[delete]]
+# Example: "\Fanquantnn", which is subsumed by "Frege logic symbols"
+regex = '^F[an]*(content|quant)'
+
+[[delete]]
+# Example 1: "\Pisymbol{nkarta}{38}"
+# Example 2: "{\pigpenfont A}"
+prefix = ["Pisymbol{", "pigpenfont"]
+not_render_contains = '\Pisymbol{nkarta}{119}'  # hammer and sickle
+
+[[delete]]
+# Example 1: "\asapFemaleAtDrinkingFountain", which already is indexed
+# under "female at drinking fountain"
+# Example 2: "\mfMobilePhoneBroadcast", which already is indexed under
+# "mobile phone"
+# Example 3: "\tiPointOfInterestOutline", which is indexed already under
+# "point of interest"
+# Example 4: "\faBriefcase", which is indexed already under "briefcase"
+# Example 5: "\staveXLVIII"
+# Example 6: "lilyTimeSignature", which is subsumed by "musical symbols"
+regex = '^(asap|mf|ti|fa|stave|lily)[A-Z]'
+not_contains = [  # The following index entries will be rewritten later.
+    "Angry",
+    "Bomb",
+    "Calendar",
+    "Check",
+    "Chess",
+    "Copyright",
+    "CreativeCommons",
+    "Device",
+    "Dizzy",
+    "Equal",
+    "Fast",
+    "faUser",
+    "Fist",
+    "Frown",
+    "Globe",
+    "GraduationCap",
+    "Greater",
+    "Grin",
+    "Hand",
+    "Hat",
+    "Hourglass",
+    "Keyboard",
+    "Kiss",
+    "Laugh",
+    "Leaf",
+    "Less",
+    "Media",
+    "Meh",
+    "Minus",
+    "Peace",
+    "Question",
+    "Quote",
+    "Sad",
+    "Suitcase",
+    "Stop",
+    "Thumbs",
+    "TimeC",
+    "Times",
+    "Trademark",
+    "Tree",
+    "Water"
+]
+not_prefix = ["tiPen", "faPen", "faHighlight", "faMarker"]
+
+[[delete]]
+# Example: "\mfMobileDevice", which already is indexed under "mobile
+# devices".
+matches = "mfMobileDevice"
+
+[[delete]]
+# Example: "\adfflourishleftdouble", which already is indexed under
+# "flourishes"
+prefix = "adf"
+not_contains = "leaf"
+
+[[delete]]
+# Example: "\APLboxupcaret", which is subsumed by "APL symbols"
+prefix = "APL"
+not_matches = ["APLcirc", "APLnot", "APLvert"]
+
+[[delete]]
+# Example: "\bcvaletcoeur", which is indexed already under "jack of
+# hearts"
+prefix = "bc"
+not_matches = "bcontraction"
+
+[[delete]]
+# Example: "\hamrepeatfromstartseveral", which is subsumed by "Hamburg
+# Notation System"
+prefix = "ham"
+render_contains = "verb"
+
+[[delete]]
+# Example: "\LBlackVerySmallLozenge", which already is indexed under
+# "circles"
+compare_lowercase = true
+regex = '^(blk|wht|black|white|lblack|lwhite|dotted|filled)'
+contains = ["lozenge", "pointer"]
+
+[[delete]]
+# Example: "folder delete", which already is indexed under "folder
+# symbols"
+compare_lowercase = true
+contains = "folder"
+not_matches = "folder symbols"
+
+[[delete]]
+# Example: "blitzd", whch already is indexed under both "lightning"
+# and "contradiction symbols"
+prefix = "blitz"
+
+[[delete]]
+# Example: "alla breve...see musical symbols", as this is rendered when
+# possible.
+consider_all_entries = true
+format_contains = "musical symbols"
+
+[[delete]]
+# Example 1: "dangerous bend symbols", which is redundant with
+# individual "dangerous bend" entries
+# Example 2: "fltns", which already is indexed under "polygons"
+# Example 3: "bombs", which is redundant with individual "bomb" entries.
+matches = ["dangerous bend symbols", "fltns", "bombs"]
+
+[[delete]]
+# Example: "\fgeleftB", which already is indexed under "Frege logic
+# symbols"
+prefix = "fge"
+not_matches = ["fgerightarrow", "fgeleftarrow"]
+
+[[delete]]
+# Example: "\hat[cowboy]", which already is indexed under "cowboy hat"
+contains = "hat["
+
+[[delete]]
+# Example: "\arnfamily"
+regex = 'ar.family'
+
+[[delete]]
+# Example: "\partialvartlcirclerightint", which is used only to construct
+# other symbols.
+regex = '^partial.*int$'
+
+[[delete]]
+# Example: "\actuarial" and "\angl", which are subsumed by "actuarial symbols"
+matches = ["actuarial", "angl", "angln", "anglr"]
+
+[[delete]]
+# Example: "smartctrbull=\textsf{smartctrbull} (\pkgname [index!=false]{bullcntr} package option)"
+render_contains = "package option)"
+
+[[delete]]
+# Example: "\renderCLOCK{3}{f}", because it's unlikely anyone will care to
+# use a clock without a frame.
+render_regex = '\\renderCLOCK\{\d\}\{f\}'
+
+[[delete]]
+# Example: "\Arrowvert", because such symbols are arrow bodies without
+# a head or tail.
+compare_lowercase = true
+matches = "arrowvert"
+
+[[delete]]
+# Example: "\bbslash", which is subsumed by "blackboard bold"
+prefix = ["bb", "Bb"]
+not_contains = [
+    "package",
+    "Bbbk",
+    "bbdollar",
+    "bbeuro"
+]
+
+[[delete]]
+# Example: "\ClsBrknBracBar", which is subsumed by "delimiters"
+prefix = "Cls"
+
+[[delete]]
+# Example: "\diceiv", which is subsumed by "dice"
+regex = '^dice[iv]+$'
+
+[[delete]]
+# Example: "dot (__ or __)", which is subsumed by "accents>dot" and
+# "accents>dot below".
+matches = "dot"
+render_contains = " or "
+
+[[delete]]
+# Example: "\rightevaw", which is a faked right symbol subsumed by
+# "delimiters".
+matches = ["rightevaw", "rightwave"]
+
+[[delete]]
+# Example: "\PAUSe", which is subsumed by "musical symbols".
+render_contains = ['\MSXPAUSe', '\MSXPAuse', '\MSXpause']
+
+[[delete]]
+# Example: "stars>Jewish" and "stars>with crescent", which will be
+# rewritten later.
+top_matches = "stars"
+matches = ["Jewish", "with crescent"]
+
+[[delete]]
+# Example: "\circleddot...see \odot", which is unnecessary to index.
+consider_all_entries = true
+regex = '^circled?(dot|minus|plus|slash|times)(left|right)?$'
+format_contains = "hyperindexformat"
+
+[[delete]]
+# Example "\Circle (O vs. o)", which is unnecessary to index.
+render_contains = '\Circle+ (\trysym{'
+
+[[delete]]
+# Example: "see...does not exist", which will be replaced by actual symbols.
+consider_all_entries = true
+matches = ["does not divide", "does not exist"]
+
+[[delete]]
+# Example: "null set", which will be replaced with a reference to "empty set".
+consider_all_entries = true
+matches = "null set"
+
+[[delete]]
+# Example: "dollar sign...see \$", which will be replaced with inlined
+# dollar-sign symbols.
+consider_all_entries = true
+matches = ["dollar sign", "dollar", "Cedi", "sterling"]
+format_contains = "hyperindexformat"
+
+[[delete]]
+# Example: "\dotsb", which already is indexed under both "ellipses
+# (dots)" and "dots (ellipses)".
+regex = '^dots[bcimo]?$'
+
+[[delete]]
+# Example: "ellipsis", which already is indexed under both "ellipses
+# (dots)" and "dots (ellipses)".
+matches = "ellipsis"
+
+[[delete]]
+# Example: "Celtcross", which is redundant with "Celtic cross".
+# Example: "menorahs", which is redundant with "menorah".
+matches = ["Celtcross", "menorahs"]
+
+[[delete]]
+# Example: "keys, computer", which will be replaced by "see...keyboard symbols".
+matches = ["keys, computer", "computer keys"]
+
+[[delete]]
+# Example: "clubs", which will be replaced with "club...see playing
+# cards, club".
+matches = ["clubs", "spades"]
+
+[[delete]]
+# Example: "hands", which will contain the glyphs.  "fists", "printer's
+# fists", "manicules", and "pointing finger" will all point to "hand".
+consider_all_entries = true
+matches = ["hands", "pointing finger", "printer's fist"]
+
+[[delete]]
+# Example: "\textara" and other commands for which which readers are
+# unlikely to search.
+prefix = "text"
+render_contains = 'verb+\text'
+not_render_contains = "("
+
+[[delete]]
+# Example: "\mathbold" and other commands for which which readers are
+# unlikely to search.
+prefix = "math"
+render_contains = 'verb+\math'
+not_render_contains = "("
+
+[[delete]]
+# Example: "\DeclareFontFamily" and other commands for which which readers
+# are unlikely to search.
+compare_lowercase = true
+prefix = "declare"
+not_contains = "declaremathoperator"
+
+[[delete]]
+# Example: "customs control", which is redundant with existing symbols.
+consider_all_entries = true
+matches = "customs control"
+
+[[delete]]
+# Example: "\xleftwitchonbroom*", for which readers are unlikely to search.
+regex = '^x(left|right).*(bat|broom|ghost|witch)'
+
+[[delete]]
+# Example: "tacks", which will be replaced with actual symbols.
+matches = "tacks"
+
+[[delete]]
+# Example: "\Relbar", which is used only to construct extensible symbols.
+compare_lowercase = true
+matches = "relbar"
+
+[[delete]]
+# Example: "\resmes", which already is indexed under "restriction of a
+# measure".
+matches = "resmes"
+
+[[delete]]
+# Example: "\downparenthfill", which is unlikely to be a search term.
+render_regex = '^\\(sp)?verb\+\\[A-Za-z]+fill\+$'
+
+[[delete]]
+# Example: "lightbulb10.2602gf (file)", which is unlikely to be a search term.
+prefix = "lightbulb10"
+
+[[delete]]
+# Example: "\countriesofeuropefamily", which is unlikely to be a search term.
+regex = 'family$'
+
+[[delete]]
+# Example: "\m", which is unlikely to be a search term.
+render_contains = '+\m+'
+
+[[delete]]
+# Example: "transforms", which will be replaced with actual symbols".
+consider_all_entries = true
+matches = "transforms"
+
+[[delete]]
+# Example: "\BGconditional", which already is covered by
+# "Begriffsschrift symbols".
+prefix = "BG"
+
+[[delete]]
+# Example: "\RRelbar", which is unlikely to be a search term.
+compare_lowercase = true
+contains = "relbar"
+
+[[delete]]
+# Example "space>visible", which will be replaced with actual symbols.
+consider_all_entries = true
+top_matches = "space"
+matches = "visible"
+
+[[delete]]
+# Example: "\leftdbltail", which is used primarily to construct other
+# symbols.
+regex = '^(left|right)(dbl)?tail$'
+
+[[delete]]
+# Example: "\cos", which is an atomic math object, not a symbol.
+matches = [
+    "atan",
+    "cos",
+    "lcm",
+    "lim",
+    "liminf",
+    "limsup",
+    "log",
+    "min",
+    "varinjlim",
+    "varprojlim"
+]
+
+[[delete]]
+# Example: "\longrightPP".  I have no idea what this symbol represents
+# or how to refer to it in the index.
+regex = '^(long)?(left|right)PP$'
+
+[[delete]]
+# Example: "\textknit{=}", which is unlikely to be a search term.
+prefix = "textknit"
+
+[[delete]]
+# Example 1: "\,", which already is indexed under "space, thin".
+# Example 2: "\-", which already is indexed under "hyphen, discretionary".
+# Example 3: "\\", which does not render a symbol.
+render_contains = ['+\,+', '+\-+', '+\\+']
+
+[[delete]]
+# Example: "operators, logical...see logical operators", which is a
+# dangling link.
+consider_all_entries = true
+top_matches = "operators"
+matches = ["logical", "unary"]
+
+[[delete]]
+# Example 1: "dots (ellipses)", which will be replaced with various
+# dot patterns.
+# Example 2: "actuarial symbols", which is redundant with "actuarial angle".
+# Example 3: "clothing", which is redundant with "clothes".
+# Example 4: "Laplacian", which will be replaced with actual symbols.
+# Example 5: "set operators>intersection", which is redundant with "set
+# intersection".
+# Example 6: "word balloons", which will be replaced with "see...speech
+# bubble".
+# Example 7: "Go board", which will be replaced with actual symbols.
+# Example 8: "independence>statistical", which will be replaced with actual
+# symbols.
+# Example 9: "logical operators>xor", which follows all of the
+# "logical _____" entries with symbols.
+# Example 10: "lozenges...see rhombuses", which will be replaced with
+# actual symbols.
+# Example 11: "angles>measured", which already is indexed under
+# "angle>measured".
+# Example 11: "product integrals", which already is indexed under
+# "integral>product".
+# Example 12: "inequalities", which is less specific than "greater than"
+# and "less than".
+# Example 13: "hammer and sickle", which will be replaced with an actual
+# symbol.
+# Example 14: "quasi-quotation marks", which will be redirected to a
+# rewritten symbol name
+# Example 15: "Angstrom unit", which will be replaced with a "see..." to
+# a non-control sequence.
+# Example 16: "dominance", which will be replaced with "see..."s to
+# non-control sequences.
+consider_all_entries = true
+top_matches = [
+    "dots (ellipses)",
+    "actuarial symbols",
+    "clothing",
+    "independence",
+    "Laplacian",
+    "logical operators",
+    "lozenges",
+    "set operators",
+    "word balloons",
+    "Go boards",
+    "angles",
+    "product integrals",
+    "inequalities",
+    "hammer and sickle",
+    "quasi-quotation marks",
+    "Angstrom unit",
+    "dominance"
+]
+not_render_contains = '\STIXangles'
+
+[[delete]]
+# Example: "\textRubikUa", which is unlikely to be a search term.
+matches = [
+    "acarc",
+    "acbar",
+    "accentset",
+    "acontraction",
+    "BasicTree",
+    "bcontraction",
+    "big",
+    "Big",
+    "bigg",
+    "Bigg",
+    "black",
+    "blackstone",
+    "bm",
+    "boldmath",
+    "boldsymbol",
+    "braceld",
+    "bracerd",
+    "bracevert",
+    "bullenum",
+    "changenotsign",
+    "ClockFramefalse",
+    "ClockFrametrue",
+    "ClockStyle",
+    "clocktime",
+    "constvec",
+    "cr",
+    "CR",
+    "diatop",
+    "diaunder",
+    "does not imply",
+    "double",
+    "Goofy",
+    "gvcropped",
+    "heartctrbull",
+    "hfil",
+    "HH",
+    "holter",
+    "hpause",
+    "ialign",
+    "IC",
+    "input",
+    "joinrel",
+    "labvel",
+    "land",
+    "largectrbull",
+    "left",
+    "Left",
+    "llangle",
+    "LMex",
+    "lor",
+    "lsf",
+    "ltriple",
+    "makeatletter",
+    "makeatother",
+    "maya",
+    "mbox",
+    "MC",
+    "metre",
+    "moverlay",
+    "musMeter",
+    "NBSP",
+    "offinterlineskip",
+    "oldstylenums",
+    "ooalign",
+    "overset",
+    "p@",
+    "pgfornament",
+    "pmb",
+    "polter",
+    "probabilistic independence",
+    "relations",
+    "reveject",
+    "right",
+    "rrangle",
+    "rtriple",
+    "SavedStyle",
+    "selectfont",
+    "setBold",
+    "Shilling",      # I can find no evidence of this symbol representing a shilling.
+    "showclock",
+    "slashed",
+    "smallctrbull",
+    "smartctrbull",
+    "stackengine",
+    "statistical independence",
+    "Strichmaxerl",
+    "SYN",
+    "tabcolsep",
+    "Takt",
+    "textdblhyphenchar",
+    "textRubikUa",
+    "Thermo",
+    "ThisStyle",
+    "tone",
+    "triple",
+    "upbar",
+    "uplett",
+    "usebox",
+    "usepackage",
+    "users",
+    "usf",
+    "usfz",
+    "usymH",
+    "usymW",
+    "varmathbb",
+    "vcenter",
+    "vrule",
+    "white",
+    "whitestone",
+    "worldflag",
+    "Zodiac"
+]
+
+[[delete]]
+# Example: "bullseye...see \textbullseye", which will be replaced with
+# actual symbols.
+consider_all_entries = true
+matches = [
+    "absolute value",
+    "abzuglich",
+    "adjoint",
+    "advancing",
+    "alternative denial",
+    "ampersand",
+    "and",
+    "asterisks",
+    "better",
+    "biconditional",
+    "blank",
+    "born",
+    "bullseye",
+    "cardinality",
+    "caret",
+    "carriage return",
+    "Cartesian product",
+    "centigrade",
+    "cents",
+    "congruent",
+    "conjunction, logical",
+    "converse implication",
+    "converse nonimplication",
+    "cross ratio",
+    "curly pi",
+    "cutoff subtraction",
+    "d'Alembert operator",
+    "dasharrow",
+    "degrees",
+    "Deleatur",
+    "derivative, partial",
+    "Descartes's equal sign",
+    "diamonds",
+    "died",
+    "differential, inexact",
+    "discount",
+    "disjunction",
+    "ditto marks",
+    "division times",
+    "divorced",
+    "doublecap",
+    "doublecup",
+    "element of",
+    "entails",
+    "equilibrium",
+    "equivalence",
+    "estimated",
+    "eszett",
+    "evaluated at",
+    "exclusive disjunction",
+    "ezh",
+    "falsum",
+    "feet",
+    "fish hook",
+    "florin",
+    "gaffing hook",
+    "ge",
+    "gets",
+    "gggtr",
+    "greater-than signs",
+    "greatest lower bound",
+    "Green Dot",
+    "Grune Punkt",
+    "guillemotleft",
+    "guillemotright",
+    "hash mark",
+    "iff",
+    "impliedby",
+    "implies",
+    "inches",
+    "inexact differential",
+    "infimum",
+    "interior",
+    "intersection",
+    "joint denial",
+    "Kronecker product",
+    "Kronecker sum",
+    "land",
+    "le",
+    "leaf",
+    "less-than signs",
+    "llless",
+    "lnot",
+    "lor",
+    "lowering",
+    "lrJoin",
+    "lsemantic",
+    "married",
+    "material biconditional",
+    "material conditional",
+    "material equivalence",
+    "material implication",
+    "material nonimplication",
+    "Maxwell-Stefan diffusion coefficient",
+    "membership",
+    "micro",
+    "millesimal sign",
+    "minus, double-dotted",
+    "monus",
+    "multiplicative disjunction",
+    "ne",
+    "negation",
+    "nibar",
+    "norm",
+    "not",
+    "notowns",
+    "nuclear power plant",
+    "number sign",
+    "or",
+    "orthogonal to",
+    "owns",
+    "par",
+    "paragraph mark",
+    "parallel lines, slanted",
+    "parts per thousand",
+    "percent sign",
+    "pilcrow",
+    "pipe",
+    "plus-or-minus sign",
+    "pomega",
+    "power set",
+    "proper subset/superset",
+    "Quine corners",
+    "raising",
+    "rationalized Planck constant",
+    "recipe",
+    "reduced quadrupole moment",
+    "retracting",
+    "reverse solidus",
+    "ring equal to",
+    "ring in equal to",
+    "ring sum",
+    "rsemantic",
+    "satisfies",
+    "seagull",
+    "section mark",
+    "set interior",
+    "stochastic independence",
+    "strict implication",
+    "supremum",
+    "swung dash",
+    "tailed z",
+    "tautology",
+    "tensor product",
+    "thousandths",
+    "to",
+    "transversal intersection",
+    "union",
+    "vinculum",
+    "Weierstrass p function",
+    "won",
+    "xor"
+]
+format_contains = "hyperindexformat"

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-equals.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-equals.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-equals.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,244 @@
+##############################################
+# Categorize equality symbols.               #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ---------------------------- equal signs -----------------------------
+
+# ... regular ...
+
+# This rule should precede the generic "equals" rule.
+[[rewrite]]
+render_contains = '\tiEqualsOutline'
+item = ["equal", "hollow"]
+
+[[rewrite]]
+matches = ["equals", "equal"]
+item = "equal"
+
+[[rewrite]]
+render_contains = [
+    '($\ABXeqcolon$)',
+    '(\FDSYMeqcolon)',
+    '(\STIXeqcolon'
+]
+item = ["equal", "colon"]
+
+[[rewrite]]
+matches = ["eqcolon", "eqcolon", "eqqcolon", "equalscolon"]
+item = ["equal", "colon"]
+
+[[rewrite]]
+matches = ["Eqqcolon", "equalscoloncolon", "Eqcolon"]
+item = ["equal", "colon, double"]
+
+[[rewrite]]
+regex = '^eq(?:ual)?(dot|closed|parallel)$'
+item = ["equal", '\1']
+
+[[rewrite]]
+regex = '^(arc|dot|hat|closed|parallel|star|triangle)(?:eq|equal)$'
+item = ["equal", '\1']
+
+[[rewrite]]
+matches = "triangleq"
+item = ["equal", "triangle"]
+
+[[rewrite]]
+matches = "eparsl"
+item = ["equal", "parallel slanted"]
+
+[[rewrite]]
+matches = "smeparsl"
+item = ["equal", "parallel slanted, similar"]
+
+[[rewrite]]
+regex = '^[Bb]ump(?:ed)?eqq?$'
+item = ["equal", "bump"]
+
+[[rewrite]]
+matches = ["eqbump", "eqbumped"]
+item = ["equal", "bump"]
+
+[[rewrite]]
+matches = ["eqcirc", "circeq"]
+item = ["equal", "ring"]
+
+[[rewrite]]
+matches = ["botdoteq", "topdoteq"]
+item = ["equal", "dot"]
+
+[[rewrite]]
+matches = [
+    "Doteq",
+    "doteqdot",
+    "ddotseq",
+    "dotseq"
+]
+item = ["equal", "dots"]
+
+[[rewrite]]
+matches = "eqdef"
+item = ["equal", "by definition"]
+
+[[rewrite]]
+matches = "eqeq"
+item = ["equal", "double"]
+
+[[rewrite]]
+matches = "eqeqeq"
+item = ["equal", "triple"]
+
+[[rewrite]]
+matches = "fallingdotseq"
+item = ["equal", "dots, falling"]
+
+[[rewrite]]
+matches = "risingdotseq"
+item = ["equal", "dots, rising"]
+
+[[rewrite]]
+matches = "measeq"
+item = ["equal", "measure"]
+
+[[rewrite]]
+matches = "questeq"
+item = ["equal", "question mark"]
+
+[[rewrite]]
+matches = "veeeq"
+item = ["equal", "V"]
+
+[[rewrite]]
+matches = "wedgeq"
+item = ["equal", "wedge"]
+
+[[rewrite]]
+matches = "asteq"
+item = ["equal", "asterisk"]
+
+[[rewrite]]
+matches = ["eqsim", "eqqsim", "backeqsim"]
+item = ["equal", "similar"]
+
+[[rewrite]]
+matches = "xlongequal"
+item = ["equal", "extensible"]
+
+[[rewrite]]
+matches = [
+    "eqless",
+    "eqqless",
+    "eqqslantless",
+    "eqslantless"
+]
+item = ["equal", "or less than"]
+
+[[rewrite]]
+matches = [
+    "eqgtr",
+    "eqqgtr",
+    "eqqslantgtr",
+    "eqslantgtr"
+]
+item = ["equal", "or greater than"]
+
+[[rewrite]]
+matches = "egsdot"
+item = ["equal", "or greater than, dotted"]
+
+[[rewrite]]
+matches = "elsdot"
+item = ["equal", "or less than, dotted"]
+
+[[rewrite]]
+matches = ["faEquals", "tiEquals"]
+item = ["equal", "decorative"]
+
+[[rewrite]]
+matches = "asymp"
+item = ["equal", "asymptotically"]
+
+[[rewrite]]
+matches = "curlyeqprec"
+item = ["equal", "or precedes"]
+
+[[rewrite]]
+matches = "curlyeqsucc"
+item = ["equal", "or succeeds"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = [
+    "not equal",
+    "nequal",
+    "neq",
+    "ne"
+]
+not_render_contains = '\EOne' 
+item = ["equal", "negated"]
+
+[[rewrite]]
+matches = ["neqcirc", "ncirceq"]
+item = ["equal", "ring, negated"]
+
+[[rewrite]]
+regex = '^n[Bb]umpeqq?$'
+item = ["equal", "bump, negated"]
+
+[[rewrite]]
+regex = '^n(?:eq|equal)?(arc|bump|closed|dot|hat|triangle)(?:eq|equal)?$'
+item = ["equal", '\1, negated']
+
+[[rewrite]]
+matches = "nDoteq"
+item = ["equal", "dots, negated"]
+
+[[rewrite]]
+matches = "nfallingdotseq"
+item = ["equal", "dots, falling, negated"]
+
+[[rewrite]]
+matches = "nrisingdotseq"
+item = ["equal", "dots, rising, negated"]
+
+[[rewrite]]
+matches = "nstareq"
+item = ["equal", "star, negated"]
+
+[[rewrite]]
+matches = "nveeeq"
+item = ["equal", "V, negated"]
+
+[[rewrite]]
+matches = "nwedgeq"
+item = ["equal", "wedge, negated"]
+
+[[rewrite]]
+matches = ["neqsim", "nbackeqsim"]
+item = ["equal", "similar, negated"]
+
+[[rewrite]]
+matches = "neqslantgtr"
+item = ["equal", "or greater than, negated"]
+
+[[rewrite]]
+matches = "neqslantless"
+item = ["equal", "or less than, negated"]
+
+[[rewrite]]
+matches = "faNotEqual"
+item = ["equal", "decorative, negated"]
+
+[[rewrite]]
+matches = ["nasymp", "notasymp"]
+item = ["equal", "asymptotically, negated"]
+
+[[rewrite]]
+matches = "ncurlyeqprec"
+item = ["equal", "or precedes, negated"]
+
+[[rewrite]]
+matches = "ncurlyeqsucc"
+item = ["equal", "or succeeds, negated"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-flags.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-flags.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-flags.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,1069 @@
+##############################################
+# Categorize flag symbols.                   #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ------------------ generic and miscellaneous flags -------------------
+
+[[rewrite]]
+prefix = "triangular flag"
+item = "flag"
+
+[[rewrite]]
+matches = [
+    "Flag",
+    "VarFlag",
+    "waving black flag",
+    "waving white flag",
+    "black flag",
+    "white flag"
+]
+item = "flag"
+
+[[rewrite]]
+matches = ["chequered flag", "faFlagCheckered"]
+item = ["flag", "checkered"]
+
+[[rewrite]]
+matches = "crossed flags"
+item = ["flag", "multiple, crossed"]
+
+[[rewrite]]
+matches = "euflag"
+item = ["flag", "European Union"]
+
+[[rewrite]]
+matches = "pirate flag"
+item = ["flag", "Jolly Roger"]
+
+[[rewrite]]
+regex = '^(rainbow|transgender)\s+flag$'
+item = ["flag", '\1']
+
+[[rewrite]]
+matches = "flag in hole"
+item = "golf hole with flag"
+
+# This rule must precede the worldflags section.
+[[rewrite]]
+matches = "worldflag{Rainbow}"
+item = ["flag", "rainbow"]
+
+[[rewrite]]
+consider_all_entries = true
+top_matches = "flags"
+regex = '^(.*)$'
+item = ["flag", '\1']
+
+[[rewrite]]
+matches = ["white pennant", "black pennant"]
+item = "flag"
+
+# ------------------------------ worldflags ------------------------------
+
+[[rewrite]]
+matches = "worldflag{AD}"
+item = ["flag", "Andorra"]
+
+[[rewrite]]
+matches = "worldflag{AE}"
+item = ["flag", "United Arab Emirates"]
+
+[[rewrite]]
+matches = "worldflag{AF}"
+item = ["flag", "Afghanistan"]
+
+[[rewrite]]
+matches = "worldflag{AG}"
+item = ["flag", "Antigua and Barbuda"]
+
+[[rewrite]]
+matches = "worldflag{AL}"
+item = ["flag", "Albania"]
+
+[[rewrite]]
+matches = "worldflag{AM}"
+item = ["flag", "Armenia"]
+
+[[rewrite]]
+matches = "worldflag{AO}"
+item = ["flag", "Angola"]
+
+[[rewrite]]
+matches = "worldflag{AQ}"
+item = ["flag", "Antarctica"]
+
+[[rewrite]]
+matches = "worldflag{AR}"
+item = ["flag", "Argentina"]
+
+[[rewrite]]
+matches = "worldflag{AT}"
+item = ["flag", "Austria"]
+
+[[rewrite]]
+matches = "worldflag{AT-B}"
+item = ["flag", "Burgenland"]
+
+[[rewrite]]
+matches = "worldflag{AT-K}"
+item = ["flag", "Carinthia"]
+
+[[rewrite]]
+matches = "worldflag{AT-N}"
+item = ["flag", "Lower Austria"]
+
+[[rewrite]]
+matches = "worldflag{AT-O}"
+item = ["flag", "Upper Austria"]
+
+[[rewrite]]
+matches = "worldflag{AT-S}"
+item = ["flag", "Salzburg"]
+
+[[rewrite]]
+matches = "worldflag{AT-St}"
+item = ["flag", "Styria"]
+
+[[rewrite]]
+matches = "worldflag{AT-T}"
+item = ["flag", "The Tyrol"]
+
+[[rewrite]]
+matches = "worldflag{AT-V}"
+item = ["flag", "Vorarlberg"]
+
+[[rewrite]]
+matches = "worldflag{AT-W}"
+item = ["flag", "Vienna"]
+
+[[rewrite]]
+matches = "worldflag{AU}"
+item = ["flag", "Australia"]
+
+[[rewrite]]
+matches = "worldflag{AX}"
+item = ["flag", "AAland"]
+word = '{\AA}land'
+preserve_escapes = true
+
+[[rewrite]]
+matches = "worldflag{AZ}"
+item = ["flag", "Azerbaijan"]
+
+[[rewrite]]
+matches = "worldflag{BA}"
+item = ["flag", "Bosnia and Herzegovina"]
+
+[[rewrite]]
+matches = "worldflag{BB}"
+item = ["flag", "Barbados"]
+
+[[rewrite]]
+matches = "worldflag{BD}"
+item = ["flag", "Bangladesh"]
+
+[[rewrite]]
+matches = "worldflag{BE}"
+item = ["flag", "Belgium"]
+
+[[rewrite]]
+matches = "worldflag{BF}"
+item = ["flag", "Burkina Faso"]
+
+[[rewrite]]
+matches = "worldflag{BG}"
+item = ["flag", "Bulgaria"]
+
+[[rewrite]]
+matches = "worldflag{BH}"
+item = ["flag", "Bahrain"]
+
+[[rewrite]]
+matches = "worldflag{BI}"
+item = ["flag", "Burundi"]
+
+[[rewrite]]
+matches = "worldflag{BJ}"
+item = ["flag", "Benin"]
+
+[[rewrite]]
+matches = "worldflag{BN}"
+item = ["flag", "Brunei"]
+
+[[rewrite]]
+matches = "worldflag{BO}"
+item = ["flag", "Bolivia"]
+
+[[rewrite]]
+matches = "worldflag{BR}"
+item = ["flag", "Brazil"]
+
+[[rewrite]]
+matches = "worldflag{BS}"
+item = ["flag", "Bahamas"]
+
+[[rewrite]]
+matches = "worldflag{BT}"
+item = ["flag", "Bhutan"]
+
+[[rewrite]]
+matches = "worldflag{BW}"
+item = ["flag", "Botswana"]
+
+[[rewrite]]
+matches = "worldflag{BY}"
+item = ["flag", "Belarus"]
+
+[[rewrite]]
+matches = "worldflag{BZ}"
+item = ["flag", "Belize"]
+
+[[rewrite]]
+matches = "worldflag{CA}"
+item = ["flag", "Canada"]
+
+[[rewrite]]
+matches = "worldflag{CD}"
+item = ["flag", "Congo Brazzaville"]
+word = "Congo--Brazzaville"
+
+[[rewrite]]
+matches = "worldflag{CF}"
+item = ["flag", "Central African Republic"]
+
+[[rewrite]]
+matches = "worldflag{CG}"
+item = ["flag", "Congo Kinshasa"]
+word = "Congo--Kinshasa"
+
+[[rewrite]]
+matches = "worldflag{CH}"
+item = ["flag", "Switzerland"]
+
+[[rewrite]]
+matches = "worldflag{CI}"
+item = ["flag", "Cote d'Ivoire"]
+word = "C\\^ote d'Ivoire"
+
+[[rewrite]]
+matches = "worldflag{CK}"
+item = ["flag", "Cook Islands"]
+
+[[rewrite]]
+matches = "worldflag{CL}"
+item = ["flag", "Chile"]
+
+[[rewrite]]
+matches = "worldflag{CM}"
+item = ["flag", "Cameroon"]
+
+[[rewrite]]
+matches = "worldflag{CN}"
+item = ["flag", "China"]
+
+[[rewrite]]
+matches = "worldflag{CO}"
+item = ["flag", "Colombia"]
+
+[[rewrite]]
+matches = "worldflag{CR}"
+item = ["flag", "Costa Rica"]
+
+[[rewrite]]
+matches = "worldflag{CU}"
+item = ["flag", "Cuba"]
+
+[[rewrite]]
+matches = "worldflag{CV}"
+item = ["flag", "Cape Verde"]
+
+[[rewrite]]
+matches = "worldflag{CY}"
+item = ["flag", "Cyprus"]
+
+[[rewrite]]
+matches = "worldflag{CZ}"
+item = ["flag", "Czech Republic"]
+
+[[rewrite]]
+matches = "worldflag{DE}"
+item = ["flag", "Germany"]
+
+[[rewrite]]
+matches = "worldflag{DJ}"
+item = ["flag", "Djibouti"]
+
+[[rewrite]]
+matches = "worldflag{DK}"
+item = ["flag", "Denmark"]
+
+[[rewrite]]
+matches = "worldflag{DM}"
+item = ["flag", "Dominica"]
+
+[[rewrite]]
+matches = "worldflag{DO}"
+item = ["flag", "Dominican Republic"]
+
+[[rewrite]]
+matches = "worldflag{DZ}"
+item = ["flag", "Algeria"]
+
+[[rewrite]]
+matches = "worldflag{EC}"
+item = ["flag", "Ecuador"]
+
+[[rewrite]]
+matches = "worldflag{EE}"
+item = ["flag", "Estonia"]
+
+[[rewrite]]
+matches = "worldflag{EG}"
+item = ["flag", "Egypt"]
+
+[[rewrite]]
+matches = "worldflag{EH}"
+item = ["flag", "Western Sahara"]
+
+[[rewrite]]
+matches = "worldflag{ER}"
+item = ["flag", "Eritrea"]
+
+[[rewrite]]
+matches = "worldflag{ES}"
+item = ["flag", "Spain"]
+
+[[rewrite]]
+matches = "worldflag{ET}"
+item = ["flag", "Ethiopia"]
+
+[[rewrite]]
+matches = "worldflag{EU}"
+item = ["flag", "European Union"]
+
+[[rewrite]]
+matches = "worldflag{FI}"
+item = ["flag", "Finland"]
+
+[[rewrite]]
+matches = "worldflag{FJ}"
+item = ["flag", "Fiji"]
+
+[[rewrite]]
+matches = "worldflag{FM}"
+item = ["flag", "Micronesia, Federated States of"]
+
+[[rewrite]]
+matches = "worldflag{FO}"
+item = ["flag", "Faroe Islands"]
+
+[[rewrite]]
+matches = "worldflag{FR}"
+item = ["flag", "France"]
+
+[[rewrite]]
+matches = "worldflag{GA}"
+item = ["flag", "Gabon"]
+
+[[rewrite]]
+matches = "worldflag{GB}"
+item = ["flag", "United Kingdom"]
+
+[[rewrite]]
+matches = "worldflag{GD}"
+item = ["flag", "Grenada"]
+
+[[rewrite]]
+matches = "worldflag{GE}"
+item = ["flag", "Georgia"]
+
+[[rewrite]]
+matches = "worldflag{GF}"
+item = ["flag", "French Guiana"]
+
+[[rewrite]]
+matches = "worldflag{GG}"
+item = ["flag", "Guernsey"]
+
+[[rewrite]]
+matches = "worldflag{GH}"
+item = ["flag", "Ghana"]
+
+[[rewrite]]
+matches = "worldflag{GI}"
+item = ["flag", "Gibraltar"]
+
+[[rewrite]]
+matches = "worldflag{GL}"
+item = ["flag", "Greenland"]
+
+[[rewrite]]
+matches = "worldflag{GM}"
+item = ["flag", "Gambia"]
+
+[[rewrite]]
+matches = "worldflag{GN}"
+item = ["flag", "Guinea"]
+
+[[rewrite]]
+matches = "worldflag{GQ}"
+item = ["flag", "Equatorial Guinea"]
+
+[[rewrite]]
+matches = "worldflag{GR}"
+item = ["flag", "Greece"]
+
+[[rewrite]]
+matches = "worldflag{GT}"
+item = ["flag", "Guatemala"]
+
+[[rewrite]]
+matches = "worldflag{GW}"
+item = ["flag", "Guinea-Bissau"]
+
+[[rewrite]]
+matches = "worldflag{GY}"
+item = ["flag", "Guyana"]
+
+[[rewrite]]
+matches = "worldflag{HN}"
+item = ["flag", "Honduras"]
+
+[[rewrite]]
+matches = "worldflag{HR}"
+item = ["flag", "Croatia"]
+
+[[rewrite]]
+matches = "worldflag{HT}"
+item = ["flag", "Haiti"]
+
+[[rewrite]]
+matches = "worldflag{HU}"
+item = ["flag", "Hungary"]
+
+[[rewrite]]
+matches = "worldflag{ID}"
+item = ["flag", "Indonesia"]
+
+[[rewrite]]
+matches = "worldflag{IE}"
+item = ["flag", "Ireland"]
+
+[[rewrite]]
+matches = "worldflag{IL}"
+item = ["flag", "Israel"]
+
+[[rewrite]]
+matches = "worldflag{IM}"
+item = ["flag", "Isle of Man"]
+
+[[rewrite]]
+matches = "worldflag{IN}"
+item = ["flag", "India"]
+
+[[rewrite]]
+matches = "worldflag{IQ}"
+item = ["flag", "Iraq"]
+
+[[rewrite]]
+matches = "worldflag{IR}"
+item = ["flag", "Iran"]
+
+[[rewrite]]
+matches = "worldflag{IS}"
+item = ["flag", "Iceland"]
+
+[[rewrite]]
+matches = "worldflag{IT}"
+item = ["flag", "Italy"]
+
+[[rewrite]]
+matches = "worldflag{JE}"
+item = ["flag", "Jersey"]
+
+[[rewrite]]
+matches = "worldflag{JM}"
+item = ["flag", "Jamaica"]
+
+[[rewrite]]
+matches = "worldflag{JO}"
+item = ["flag", "Jordan"]
+
+[[rewrite]]
+matches = "worldflag{JP}"
+item = ["flag", "Japan"]
+
+[[rewrite]]
+matches = "worldflag{KE}"
+item = ["flag", "Kenya"]
+
+[[rewrite]]
+matches = "worldflag{KG}"
+item = ["flag", "Kyrgyzstan"]
+
+[[rewrite]]
+matches = "worldflag{KH}"
+item = ["flag", "Cambodia"]
+
+[[rewrite]]
+matches = "worldflag{KI}"
+item = ["flag", "Kiribati"]
+
+[[rewrite]]
+matches = "worldflag{KM}"
+item = ["flag", "Comoros"]
+
+[[rewrite]]
+matches = "worldflag{KN}"
+item = ["flag", "Saint Kitts and Nevis"]
+
+[[rewrite]]
+matches = "worldflag{KO}"
+item = ["flag", "Kosovo"]
+
+[[rewrite]]
+matches = "worldflag{KP}"
+item = ["flag", "North Korea"]
+
+[[rewrite]]
+matches = "worldflag{KR}"
+item = ["flag", "South Korea"]
+
+[[rewrite]]
+matches = "worldflag{KW}"
+item = ["flag", "Kuwait"]
+
+[[rewrite]]
+matches = "worldflag{KZ}"
+item = ["flag", "Kazakhstan"]
+
+[[rewrite]]
+matches = "worldflag{LA}"
+item = ["flag", "Laos"]
+
+[[rewrite]]
+matches = "worldflag{LB}"
+item = ["flag", "Lebanon"]
+
+[[rewrite]]
+matches = "worldflag{LC}"
+item = ["flag", "Saint Lucia"]
+
+[[rewrite]]
+matches = "worldflag{LI}"
+item = ["flag", "Liechtenstein"]
+
+[[rewrite]]
+matches = "worldflag{LK}"
+item = ["flag", "Sri Lanka"]
+
+[[rewrite]]
+matches = "worldflag{LR}"
+item = ["flag", "Liberia"]
+
+[[rewrite]]
+matches = "worldflag{LS}"
+item = ["flag", "Lesotho"]
+
+[[rewrite]]
+matches = "worldflag{LT}"
+item = ["flag", "Lithuania"]
+
+[[rewrite]]
+matches = "worldflag{LU}"
+item = ["flag", "Luxembourg"]
+
+[[rewrite]]
+matches = "worldflag{LV}"
+item = ["flag", "Latvia"]
+
+[[rewrite]]
+matches = "worldflag{LY}"
+item = ["flag", "Libya"]
+
+[[rewrite]]
+matches = "worldflag{MA}"
+item = ["flag", "Morocco"]
+
+[[rewrite]]
+matches = "worldflag{MD}"
+item = ["flag", "Moldova"]
+
+[[rewrite]]
+matches = "worldflag{ME}"
+item = ["flag", "Montenegro"]
+
+[[rewrite]]
+matches = "worldflag{MG}"
+item = ["flag", "Madagascar"]
+
+[[rewrite]]
+matches = "worldflag{MH}"
+item = ["flag", "Marshall Islands"]
+
+[[rewrite]]
+matches = "worldflag{MK}"
+item = ["flag", "North Macedonia"]
+
+[[rewrite]]
+matches = "worldflag{ML}"
+item = ["flag", "Mali"]
+
+[[rewrite]]
+matches = "worldflag{MM}"
+item = ["flag", "Myanmar"]
+
+[[rewrite]]
+matches = "worldflag{MN}"
+item = ["flag", "Mongolia"]
+
+[[rewrite]]
+matches = "worldflag{MR}"
+item = ["flag", "Mauritania"]
+
+[[rewrite]]
+matches = "worldflag{MT}"
+item = ["flag", "Malta"]
+
+[[rewrite]]
+matches = "worldflag{MU}"
+item = ["flag", "Mauritius"]
+
+[[rewrite]]
+matches = "worldflag{MV}"
+item = ["flag", "Maldives"]
+
+[[rewrite]]
+matches = "worldflag{MW}"
+item = ["flag", "Malawi"]
+
+[[rewrite]]
+matches = "worldflag{MX}"
+item = ["flag", "Mexico"]
+
+[[rewrite]]
+matches = "worldflag{MY}"
+item = ["flag", "Malaysia"]
+
+[[rewrite]]
+matches = "worldflag{MZ}"
+item = ["flag", "Mozambique"]
+
+[[rewrite]]
+matches = "worldflag{NA}"
+item = ["flag", "Namibia"]
+
+[[rewrite]]
+matches = "worldflag{NE}"
+item = ["flag", "Niger"]
+
+[[rewrite]]
+matches = "worldflag{NG}"
+item = ["flag", "Nigeria"]
+
+[[rewrite]]
+matches = "worldflag{NI}"
+item = ["flag", "Nicaragua"]
+
+[[rewrite]]
+matches = "worldflag{NL}"
+item = ["flag", "Netherlands"]
+
+[[rewrite]]
+matches = "worldflag{NO}"
+item = ["flag", "Norway"]
+
+[[rewrite]]
+matches = "worldflag{NP}"
+item = ["flag", "Nepal"]
+
+[[rewrite]]
+matches = "worldflag{NR}"
+item = ["flag", "Nauru"]
+
+[[rewrite]]
+matches = "worldflag{NU}"
+item = ["flag", "Niue"]
+
+[[rewrite]]
+matches = "worldflag{NZ}"
+item = ["flag", "New Zealand"]
+
+[[rewrite]]
+matches = "worldflag{OM}"
+item = ["flag", "Oman"]
+
+[[rewrite]]
+matches = "worldflag{PA}"
+item = ["flag", "Panama"]
+
+[[rewrite]]
+matches = "worldflag{PE}"
+item = ["flag", "Peru"]
+
+[[rewrite]]
+matches = "worldflag{PG}"
+item = ["flag", "Papua New Guinea"]
+
+[[rewrite]]
+matches = "worldflag{PH}"
+item = ["flag", "Philippines"]
+
+[[rewrite]]
+matches = "worldflag{PK}"
+item = ["flag", "Pakistan"]
+
+[[rewrite]]
+matches = "worldflag{PL}"
+item = ["flag", "Poland"]
+
+[[rewrite]]
+matches = "worldflag{PR}"
+item = ["flag", "Puerto Rico"]
+
+[[rewrite]]
+matches = "worldflag{PS}"
+item = ["flag", "Palestinian Territories"]
+
+[[rewrite]]
+matches = "worldflag{PT}"
+item = ["flag", "Portugal"]
+
+[[rewrite]]
+matches = "worldflag{PW}"
+item = ["flag", "Palau"]
+
+[[rewrite]]
+matches = "worldflag{PY}"
+item = ["flag", "Paraguay"]
+
+[[rewrite]]
+matches = "worldflag{QA}"
+item = ["flag", "Qatar"]
+
+[[rewrite]]
+matches = "worldflag{RE}"
+item = ["flag", "Reunion"]
+word = "R\\'eunion"
+
+[[rewrite]]
+matches = "worldflag{RO}"
+item = ["flag", "Romania"]
+
+[[rewrite]]
+matches = "worldflag{RS}"
+item = ["flag", "Serbia"]
+
+[[rewrite]]
+matches = "worldflag{RU}"
+item = ["flag", "Russian Federation"]
+
+[[rewrite]]
+matches = "worldflag{RW}"
+item = ["flag", "Rwanda"]
+
+[[rewrite]]
+matches = "worldflag{SA}"
+item = ["flag", "Saudi Arabia"]
+
+[[rewrite]]
+matches = "worldflag{SB}"
+item = ["flag", "Solomon Islands"]
+
+[[rewrite]]
+matches = "worldflag{SC}"
+item = ["flag", "Seychelles"]
+
+[[rewrite]]
+matches = "worldflag{SD}"
+item = ["flag", "Sudan"]
+
+[[rewrite]]
+matches = "worldflag{SE}"
+item = ["flag", "Sweden"]
+
+[[rewrite]]
+matches = "worldflag{SG}"
+item = ["flag", "Singapore"]
+
+[[rewrite]]
+matches = "worldflag{SI}"
+item = ["flag", "Slovenia"]
+
+[[rewrite]]
+matches = "worldflag{SK}"
+item = ["flag", "Slovakia"]
+
+[[rewrite]]
+matches = "worldflag{SL}"
+item = ["flag", "Sierra Leone"]
+
+[[rewrite]]
+matches = "worldflag{SM}"
+item = ["flag", "San Marino"]
+
+[[rewrite]]
+matches = "worldflag{SN}"
+item = ["flag", "Senegal"]
+
+[[rewrite]]
+matches = "worldflag{SO}"
+item = ["flag", "Somalia"]
+
+[[rewrite]]
+matches = "worldflag{SR}"
+item = ["flag", "Suriname"]
+
+[[rewrite]]
+matches = "worldflag{SS}"
+item = ["flag", "South Sudan"]
+
+[[rewrite]]
+matches = "worldflag{ST}"
+item = ["flag", "Sao Tome and Principe"]
+word = "S\\~ao Tom\\'e and Pr\\'incipe"
+
+[[rewrite]]
+matches = "worldflag{SV}"
+item = ["flag", "El Salvador"]
+
+[[rewrite]]
+matches = "worldflag{SY}"
+item = ["flag", "Syria"]
+
+[[rewrite]]
+matches = "worldflag{SZ}"
+item = ["flag", "Swaziland"]
+
+[[rewrite]]
+matches = "worldflag{StEustasius}"
+item = ["flag", "Saint Eustasius"]
+
+[[rewrite]]
+matches = "worldflag{TD}"
+item = ["flag", "Chad"]
+
+[[rewrite]]
+matches = "worldflag{TG}"
+item = ["flag", "Togo"]
+
+[[rewrite]]
+matches = "worldflag{TH}"
+item = ["flag", "Thailand"]
+
+[[rewrite]]
+matches = "worldflag{TJ}"
+item = ["flag", "Tajikistan"]
+
+[[rewrite]]
+matches = "worldflag{TL}"
+item = ["flag", "Timor-Leste"]
+
+[[rewrite]]
+matches = "worldflag{TM}"
+item = ["flag", "Turkmenistan"]
+
+[[rewrite]]
+matches = "worldflag{TN}"
+item = ["flag", "Tunisia"]
+
+[[rewrite]]
+matches = "worldflag{TO}"
+item = ["flag", "Tonga"]
+
+[[rewrite]]
+matches = "worldflag{TR}"
+item = ["flag", "Turkey"]
+
+[[rewrite]]
+matches = "worldflag{TT}"
+item = ["flag", "Trinidad and Tobago"]
+
+[[rewrite]]
+matches = "worldflag{TV}"
+item = ["flag", "Tuvalu"]
+
+[[rewrite]]
+matches = "worldflag{TW}"
+item = ["flag", "Taiwan"]
+
+[[rewrite]]
+matches = "worldflag{TZ}"
+item = ["flag", "Tanzania"]
+
+[[rewrite]]
+matches = "worldflag{UA}"
+item = ["flag", "Ukraine"]
+
+[[rewrite]]
+matches = "worldflag{UG}"
+item = ["flag", "Uganda"]
+
+[[rewrite]]
+matches = "worldflag{UNO}"
+item = ["flag", "United Nations"]
+
+[[rewrite]]
+matches = "worldflag{US}"
+item = ["flag", "United States of America"]
+
+[[rewrite]]
+matches = "worldflag{UY}"
+item = ["flag", "Uruguay"]
+
+[[rewrite]]
+matches = "worldflag{UZ}"
+item = ["flag", "Uzbekistan"]
+
+[[rewrite]]
+matches = "worldflag{VA}"
+item = ["flag", "Holy See"]
+
+[[rewrite]]
+matches = "worldflag{VC}"
+item = ["flag", "Saint Vincent and Grenadines"]
+
+[[rewrite]]
+matches = "worldflag{VE}"
+item = ["flag", "Venezuela"]
+
+[[rewrite]]
+matches = "worldflag{VN}"
+item = ["flag", "Vietnam"]
+
+[[rewrite]]
+matches = "worldflag{VU}"
+item = ["flag", "Vanuatu"]
+
+[[rewrite]]
+matches = "worldflag{WB}"
+item = ["flag", "Wieselburger Bier"]
+
+[[rewrite]]
+matches = "worldflag{WHO}"
+item = ["flag", "World Health Organization"]
+
+[[rewrite]]
+matches = "worldflag{WS}"
+item = ["flag", "Samoa"]
+
+[[rewrite]]
+matches = "worldflag{YE}"
+item = ["flag", "Yemen"]
+
+[[rewrite]]
+matches = "worldflag{ZA}"
+item = ["flag", "South Africa"]
+
+[[rewrite]]
+matches = "worldflag{ZM}"
+item = ["flag", "Zambia"]
+
+[[rewrite]]
+matches = "worldflag{ZW}"
+item = ["flag", "Zimbabwe"]
+
+# Non-country-code flags follow.
+
+[[rewrite]]
+regex = 'worldflag\{Red(.*)\}'
+item = ["flag", 'Red \1']
+word = 'Red \1'
+
+[[rewrite]]
+matches = "worldflag{JollyRoger}"
+item = ["flag", "Jolly Roger"]
+
+[[rewrite]]
+regex = '^worldflag{(.*)\}$'
+item = ["flag", '\1']
+
+# ------------------------------- twemoji --------------------------------
+
+[[rewrite]]
+contains = 'flag: {\AA}land Islands'
+item = ["flag", "AAland"]
+word = '{\AA}land'
+preserve_escapes = true
+
+[[rewrite]]
+regex = '^flag:.*Ivoire$'
+item = ["flag", "Cote d'Ivoire"]
+word = "C\\^ote d'Ivoire"
+
+[[rewrite]]
+regex = 'flag:\s+(.+)'
+item = ["flag", '\1']
+continue = true
+
+[[rewrite]]
+top_matches = "flag"
+regex = '^St\.\s+(.*)$'
+item = 'Saint \1'
+word = 'Saint \1'
+continue = true
+
+[[rewrite]]
+top_matches = "flag"
+regex = '^(.*?)\s+(\\?&)\s+(.*)$'
+word = '\1 and \3'
+continue = true
+
+[[rewrite]]
+top_matches = "flag"
+prefix = "Cocos"
+word = "Cocos Islands"
+
+[[rewrite]]
+top_matches = "flag"
+regex = '^Congo - (.*)$'
+item = 'Congo \1'
+word = 'Congo--\1'
+
+[[rewrite]]
+top_matches = "flag"
+matches = "Czechia"
+item = "Czech Republic"
+
+[[rewrite]]
+top_matches = "flag"
+matches = "Micronesia"
+word = "Micronesia, Federated States of"
+
+[[rewrite]]
+top_matches = "flag"
+prefix = "Myanmar"
+word = "Myanmar"
+
+[[rewrite]]
+top_matches = "flag"
+matches = "Russia"
+word = "Russian Federation"
+
+[[rewrite]]
+top_matches = "flag"
+regex = '^R.*union$'
+item = "Reunion"
+word = "R\\'eunion"
+
+[[rewrite]]
+top_matches = "flag"
+regex = 'S.*o Tom.*and Pr.*cipe'
+item = "Sao Tome and Principe"
+word = "S\\~ao Tom\\'e and Pr\\'incipe"
+
+[[rewrite]]
+top_matches = "flag"
+matches = "U.S. Outlying Islands"
+word = "United States Minor Outlying Islands"
+
+[[rewrite]]
+top_matches = "flag"
+matches = "U.S. Virgin Islands"
+word = "United States Virgin Islands"
+
+[[rewrite]]
+top_matches = "flag"
+matches = "United States"
+word = "United States of America"

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-hands.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-hands.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-hands.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,226 @@
+##############################################
+# Categorize hand symbols.                   #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ... single hand ...
+
+# Caution: some hand symbols use "left" to mean "left hand" while
+# others use it to mean "left pointing".
+
+[[rewrite]]
+matches = ["fists", "raised hand"]
+item = "hand"
+
+[[rewrite]]
+matches = [
+    "faFistRaised",
+    "fisted hand sign",
+    "raised fist",
+    "oncoming fist",
+    "left-facing fist",
+    "right-facing fist"
+]
+item = ["hand", "fist"]
+
+[[rewrite]]
+regex = '^(?:left|right)point(left|right)$'
+item = ["hand", 'pointing \1']
+
+[[rewrite]]
+regex = '^(?:left|right)thumbs(down|up)$'
+item = ["hand", 'thumbs \1']
+
+[[rewrite]]
+regex = '^(?:ti|fa)Thumbs(Down|Up)'
+lowercase_item = true
+item = ["hand", 'thumbs \1']
+
+[[rewrite]]
+regex = '^thumbs\s+(down|up):'
+item = ["hand", 'thumbs \1']
+
+[[rewrite]]
+regex = '^(?:reversed )?thumbs\s+(down|up)(\s+sign)?$'
+item = ["hand", 'thumbs \1']
+
+[[rewrite]]
+matches = [
+    "tiThumbsOk",
+    "thumbs OK",
+    "turned ok hand sign",
+    "OK hand",
+    "OK hand sign",
+    "OK sign"
+]
+item = ["hand", "OK sign"]
+
+[[rewrite]]
+matches = ["lefthand", "PointingHand", "pointright"]
+item = ["hand", "pointing right"]
+
+[[rewrite]]
+matches = "righthand"
+item = ["hand", "pointing left"]
+
+[[rewrite]]
+regex = '^Hand(?:Cuff)?Left$'
+item = ["hand", "pointing left"]
+
+[[rewrite]]
+regex = '^Hand(?:Cuff)?Right$'
+item = ["hand", "pointing right"]
+
+[[rewrite]]
+regex = '^Hand(?:Cuff)?LeftUp$'
+item = ["hand", "pointing upper left"]
+
+[[rewrite]]
+regex = '^Hand(?:Cuff)?RightUp$'
+item = ["hand", "pointing upper right"]
+
+[[rewrite]]
+regex = '^backhand index pointing (up|down|left|right)$'
+item = ["hand", 'pointing \1']
+
+[[rewrite]]
+regex = '(?:black|white) (up|down|left|right) pointing (?:backhand )?index$'
+item = ["hand", 'pointing \1']
+
+[[rewrite]]
+contains = "hand with fingers splayed"
+item = ["hand", "fingers splayed"]
+
+[[rewrite]]
+matches = [
+    "HandPencilLeft",
+    "left writing hand",
+    "writing hand",
+    "WritingHand"
+]
+item = ["hand", "writing"]
+
+[[rewrite]]
+regex = '^faHandPoint(Left|Right|Up|Down)'
+lowercase_item = true
+item = ["hand", 'pointing \1']
+
+[[rewrite]]
+regex = '^faHand(Rock|Paper|Scissors|Lizard)'
+lowercase_item = true
+item = ["hand", '\1 sign']
+
+[[rewrite]]
+prefix = [
+    "faHandSpock",
+    "raised hand with part between middle and ring fingers",
+    "vulcan salute"
+]
+item = ["hand", "Spock sign"]
+
+[[rewrite]]
+prefix = [
+    "faHandPeace",
+    "victory hand",
+    "reversed victory hand"
+]
+item = ["hand", "victory sign"]
+
+[[rewrite]]
+matches = "white down pointing left hand index"
+item = ["hand", "pointing down"]
+
+[[rewrite]]
+regex = '^faHandPoint(er|Up)'
+item = ["hand", "pointing up"]
+
+[[rewrite]]
+matches = "index pointing up"
+item = ["hand", "pointing up"]
+
+[[rewrite]]
+matches = "faHandSparkles"
+item = ["hand", "sparkles"]
+
+[[rewrite]]
+matches = "faHandHolding"
+item = ["hand", "holding position"]
+
+[[rewrite]]
+regex = '^faHandHolding(Heart|Water)$'
+lowercase_item = true
+item = ["hand", 'holding \1']
+
+[[rewrite]]
+matches = "faHandHoldingMedical"
+item = ["hand", "holding medical sign"]
+
+[[rewrite]]
+matches = "faHandHoldingUsd"
+item = ["hand", "holding dollar sign"]
+
+[[rewrite]]
+matches = [
+    "faHandMiddleFinger",
+    "reversed hand with middle finger extended",
+    "middle finger"
+]
+item = ["hand", "middle finger extended"]
+
+[[rewrite]]
+matches = "crossed fingers"
+item = ["hand", "crossed fingers"]
+
+[[rewrite]]
+regex = '^(call me|waving) hand'
+item = ["hand", '\1']
+
+[[rewrite]]
+matches = ["pinched fingers", "pinching hand"]
+item = ["hand", "pinching"]
+
+[[rewrite]]
+regex = '^raised(?: back of) hand$'
+item = "hand"
+
+[[rewrite]]
+matches = "love-you gesture"
+item = ["hand", "love-you sign"]
+
+[[rewrite]]
+matches = "sign of the horns"
+item = ["hand", "horns"]
+
+# ... multiple hands ...
+
+[[rewrite]]
+matches = "faHands"
+item = "hands"
+
+[[rewrite]]
+matches = ["faPrayingHands", "folded hands", "praying hands"]
+item = ["hands", "praying"]
+
+[[rewrite]]
+matches = "faHandsHelping"
+item = ["hands", "helping"]
+
+[[rewrite]]
+matches = "faHandsWash"
+item = ["hands", "washing"]
+
+[[rewrite]]
+prefix = "clapping hands"
+item = ["hands", "clapping"]
+
+[[rewrite]]
+prefix = "open hands"
+item = ["hands", "open"]
+
+[[rewrite]]
+prefix = "raising hands"
+item = ["hands", "raising"]
+
+[[rewrite]]
+matches = "palms up together"
+item = ["hands", "palms up"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-harpoons.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-harpoons.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-harpoons.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,202 @@
+##############################################
+# Categorize harpoon symbols.                #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ------------------------------ regular -------------------------------
+
+# ... basic ...
+
+[[rewrite]]
+matches = "harpoons"
+item = "harpoon"
+
+[[rewrite]]
+regex = '^(down|up)harpoon(ccw|cw|left|right)$'
+item = "harpoon"
+
+[[rewrite]]
+regex = '^(left|right)harpoon(ccw|cw|down|up)$'
+item = "harpoon"
+
+[[rewrite]]
+regex = '^[ns][ew]harpoon(ccw|cw|[ns][ew])$'
+item = "harpoon"
+
+[[rewrite]]
+matches = ["varleftharp", "varrightharp"]
+item = "harpoon"
+
+[[rewrite]]
+regex = '^long(var)?(left|right)harp(oon)?(up|down)?$'
+item = ["harpoon", "long"]
+
+# ... double ...
+
+[[rewrite]]
+matches = [
+    "downdownharpoons",
+    "downharpoonsleftright",
+    "leftharpoonsupdown",
+    "leftleftharpoons",
+    "rightharpoonsupdown",
+    "rightrightharpoons",
+    "upharpoonsleftright",
+    "upupharpoons"
+]
+item = ["harpoon", "double, same side"]
+
+[[rewrite]]
+matches = [
+    "downupharpoons",
+    "downupharpoonsleftright",
+    "leftrightharpoons",
+    "leftrightharpoonsdown",
+    "leftrightharpoonsup",
+    "neswharpoons",
+    "nwseharpoons",
+    "rightleftharpoons",
+    "rightleftharpoonsdown",
+    "rightleftharpoonsup",
+    "senwharpoons",
+    "swneharpoons",
+    "updownharpoons",
+    "updownharpoonsleftright"
+]
+item = ["harpoon", "double, opposite sides"]
+
+[[rewrite]]
+matches = [
+    "leftrightharpoon",
+    "leftrightharpoondownup",
+    "leftrightharpoonupdown",
+    "neswharpoonnwse",
+    "neswharpoonsenw",
+    "nwseharpoonnesw",
+    "nwseharpoonswne",
+    "rightleftharpoon",
+    "updownharpoonleftright",
+    "updownharpoonrightleft",
+    "varleftrightharp",
+    "varrightleftharp"
+]
+item = ["harpoon", "double ended, opposite sides"]
+
+[[rewrite]]
+matches = ["longvarleftrightharp", "longvarrightleftharp"]
+item = ["harpoon", "double ended, opposite sides, long"]
+
+[[rewrite]]
+matches = [
+    "leftrightharpoondowndown",
+    "leftrightharpoonupup",
+    "updownharpoonleftleft",
+    "updownharpoonrightright"
+]
+item = ["harpoon", "double ended, same side"]
+
+# ... barred ...
+
+[[rewrite]]
+matches = [
+    "bardownharpoonleft",
+    "bardownharpoonright",
+    "barrightharpoondown",
+    "barrightharpoonup",
+    "leftharpoondownbar",
+    "leftharpoonupbar",
+    "upharpoonleftbar",
+    "upharpoonrightbar"
+]
+item = ["harpoon", "barred tail"]
+
+[[rewrite]]
+matches = [
+    "barupharpoonleft",
+    "barupharpoonright",
+    "barleftharpoondown",
+    "barleftharpoonup",
+    "downharpoonleftbar",
+    "downharpoonrightbar",
+    "rightharpoondownbar",
+    "rightharpoonupbar"
+]
+item = ["harpoon", "barred head"]
+
+[[rewrite]]
+matches = [
+    "barleftharpoon",
+    "barrightharpoon",
+    "dashleftharpoondown",
+    "dashrightharpoondown",
+    "leftbarharpoon",
+    "leftharpoonupdash",
+    "rightbarharpoon",
+    "rightharpoonupdash"
+]
+item = ["harpoon", "barred, parallel"]
+
+# ... extensible ...
+
+[[rewrite]]
+regex = '^x(var)?(left|right)harp(oon)?(up|down)?$'
+item = ["harpoon", "extensible"]
+
+[[rewrite]]
+matches = [
+    "autoleftrightharpoons",
+    "autorightleftharpoons",
+    "xleftrightharpoons",
+    "xrightleftharpoons"
+]
+item = ["harpoon", "double, opposite sides, extensible"]
+
+[[rewrite]]
+matches = ["xvarleftrightharp", "xvarrightleftharp"]
+item = ["harpoon", "double ended, opposite sides, extensible"]
+
+# ------------------------------ negated -------------------------------
+
+# ... basic ...
+
+[[rewrite]]
+regex = '^n(down|up)harpoon(ccw|cw|left|right)$'
+item = ["harpoon", "negated"]
+
+[[rewrite]]
+regex = '^n(left|right)harpoon(ccw|cw|down|up)$'
+item = ["harpoon", "negated"]
+
+[[rewrite]]
+regex = '^n[ns][ew]harpoon(ccw|cw|[ns][ew])$'
+item = ["harpoon", "negated"]
+
+# ... double ...
+
+[[rewrite]]
+matches = [
+    "ndownupharpoons",
+    "ndownupharpoonsleftright",
+    "nleftrightharpoons",
+    "nneswharpoons",
+    "nnwseharpoons",
+    "nsenwharpoons",
+    "nswneharpoons",
+    "nrightleftharpoons",
+    "nupdownharpoons",
+    "nupdownharpoonsleftright"
+]
+item = ["harpoon", "double, opposite sides, negated"]
+
+[[rewrite]]
+matches = [
+    "nleftrightharpoondownup",
+    "nleftrightharpoonupdown",
+    "nneswharpoonnwse",
+    "nneswharpoonsenw",
+    "nnwseharpoonnesw",
+    "nnwseharpoonswne",
+    "nupdownharpoonleftright",
+    "nupdownharpoonrightleft"
+]
+item = ["harpoon", "double ended, opposite sides, negated"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-ineqs.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-ineqs.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-ineqs.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,512 @@
+##############################################
+# Categorize inequalities.                   #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ----------------------------- less than ------------------------------
+
+# ... less than ...
+
+[[rewrite]]
+matches = [
+    "textless",
+    "less",
+    "slanted bar less than"
+]
+item = "less than"
+
+[[rewrite]]
+matches = ["lessdot", "precdot"]
+item = ["less than", "dotted"]
+
+[[rewrite]]
+matches = [
+    "lessclosed",
+    "lesscc",
+    "ltcc"
+]
+item = ["less than", "closed"]
+
+[[rewrite]]
+matches = ["ll", "Lt"]
+item = ["less than", "much"]
+
+[[rewrite]]
+render_contains = '(\faLessThan)'
+item = ["less than", "decorative"]
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = '\ABXlll'
+item = ["less than", "much"]
+
+[[rewrite]]
+matches = [
+    "lll",
+    "llless",
+    "lllnest"
+]
+item = ["less than", "very much"]
+
+[[rewrite]]
+matches = "partialmeetcontraction"
+item = ["less than", "much, underlined"]
+
+[[rewrite]]
+matches = "smt"
+item = ["less than", "horizontally barred"]
+
+# ... less than or equal to ...
+
+[[rewrite]]
+matches = [
+    "le",
+    "leq",
+    "leqq",
+    "leqslant",
+    "leqqslant",
+    "LessOrEqual",
+    "varleq",
+    "less than or equal",
+    "slanted bar less than or equal"
+]
+not_render_contains = '\CircLse'
+item = ["less than", "or equal to"]
+
+[[rewrite]]
+render_contains = '(\faLessThanEqual)'
+item = ["less than", "or equal to, decorative"]
+
+[[rewrite]]
+matches = [
+    "leqdot",
+    "lesdot",
+    "leqslantdot",
+    "lesdoto",
+    "lesdotor"
+]
+item = ["less than", "or equal to, dotted"]
+
+[[rewrite]]
+matches = [
+    "leqclosed",
+    "leqslcc",
+    "lescc"
+]
+item = ["less than", "or equal to, closed"]
+
+[[rewrite]]
+matches = [
+    "lvertneqq",
+    "lneqq",
+    "lneq"
+]
+item = ["less than", "but not equal to"]
+
+[[rewrite]]
+matches = "smte"
+item = ["less than", "or equal to, horizontally barred"]
+
+# ... less-than and greater-than combinations ...
+
+[[rewrite]]
+matches = "lessgtr"
+item = ["less than", "or greater than"]
+
+[[rewrite]]
+matches = [
+    "lesg",
+    "lesges",
+    "lesseqgtr",
+    "lesseqgtrslant",
+    "lesseqqgtr",
+    "lesseqslantgtr",
+    "lgE"
+]
+item = ["less than", "or equal to or greater than"]
+
+[[rewrite]]
+matches = "lessneqqgtr"
+item = ["less than", "or greater than but not equal to"]
+
+[[rewrite]]
+matches = "lsimg"
+item = ["less than", "or similar to or greater than"]
+
+# ... less than, other variants ...
+
+[[rewrite]]
+prefix = ["lesssim", "apprle"]
+item = ["less than", "or similar to"]
+
+[[rewrite]]
+matches = "lsime"
+item = ["less than", "or similar to or equal to"]
+
+[[rewrite]]
+matches = "lnsim"
+item = ["less than", "but not similar to"]
+
+[[rewrite]]
+matches = "lessapprox"
+item = ["less than", "or approximately equal to"]
+
+[[rewrite]]
+matches = "lnapprox"
+item = ["less than", "but not approximately equal to"]
+
+[[rewrite]]
+matches = "ltcir"
+item = ["less than", "circle"]
+
+[[rewrite]]
+matches = "ltlarr"
+item = ["less than", "arrow"]
+
+[[rewrite]]
+matches = "ltquest"
+item = ["less than", "question mark"]
+
+# ... less than, negated ...
+
+[[rewrite]]
+matches = [
+    "nless",
+    "not less than",
+    "slanted bar not less than"
+]
+item = ["less than", "negated"]
+
+[[rewrite]]
+matches = "nlessdot"
+item = ["less than", "dotted, negated"]
+
+[[rewrite]]
+matches = [
+    "nlesscc",
+    "nlessclosed",
+    "nltcc"
+]
+item = ["less than", "closed, negated"]
+
+[[rewrite]]
+matches = "nll"
+item = ["less than", "much, negated"]
+
+[[rewrite]]
+matches = "nlll"
+item = ["less than", "very much, negated"]
+
+# ... less than or equal to, negated ...
+
+[[rewrite]]
+matches = [
+    "nle",
+    "nleq",
+    "nleqq",
+    "nleqslant",
+    "nvarleq",
+    "not less than or equal",
+    "slanted bar not less than or equal"
+]
+item = ["less than", "or equal to, negated"]
+
+[[rewrite]]
+matches = [
+    "nleqclosed",
+    "nleqslcc",
+    "nlescc"
+]
+item = ["less than", "or equal to, closed, negated"]
+
+[[rewrite]]
+matches = [
+    "nleqdot",
+    "nleqslantdot",
+    "nlesdot"
+]
+item = ["less than", "or equal to, dotted, negated"]
+
+# ... less-than and greater-than combinations, negated ...
+
+[[rewrite]]
+matches = "nlessgtr"
+item = ["less than", "or greater than, negated"]
+
+[[rewrite]]
+matches = [
+    "nlesg",
+    "nlesseqgtr",
+    "nlesseqgtrslant",
+    "nlesseqqgtr",
+    "nlesseqslantgtr"
+]
+item = ["less than", "or equal to or greater than, negated"]
+
+# ... less than, other variants, negated ...
+
+[[rewrite]]
+matches = "nlesssim"
+item = ["less than", "or similar to, negated"]
+
+[[rewrite]]
+matches = "nlessapprox"
+item = ["less than", "or approximately equal to, negated"]
+
+# ---------------------------- greater than ----------------------------
+
+# ... greater than ...
+
+[[rewrite]]
+matches = [
+    "textgreater",
+    "gtr",
+    "slanted bar greater than"
+]
+item = "greater than"
+
+[[rewrite]]
+render_contains = '(\faGreaterThan)'
+item = ["greater than", "decorative"]
+
+[[rewrite]]
+matches = ["gg", "Gt", "zpipe"]
+item = ["greater than", "much"]
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = '\ABXggg'
+item = ["greater than", "much"]
+
+[[rewrite]]
+matches = [
+    "ggg",
+    "gggtr",
+    "gggnest"
+]
+item = ["greater than", "very much"]
+
+[[rewrite]]
+matches = [
+    "gtcc",
+    "gtrcc",
+    "gtrclosed"
+]
+item = ["greater than", "closed"]
+
+[[rewrite]]
+matches = ["gtrdot", "succdot"]
+item = ["greater than", "dotted"]
+
+[[rewrite]]
+matches = "lat"
+item = ["greater than", "horizontally barred"]
+
+# ... greater than or equal to ...
+
+[[rewrite]]
+matches = [
+    "ge",
+    "geq",
+    "geqq",
+    "geqslant",
+    "geqqslant",
+    "vargeq",
+    "LargerOrEqual",
+    "greater than or equal",
+    "greater than or equal to",
+    "slanted bar greater than or equal"
+]
+not_render_contains = '\CircGre'
+item = ["greater than", "or equal to"]
+
+[[rewrite]]
+render_contains = '(\faGreaterThanEqual)'
+item = ["greater than", "or equal to, decorative"]
+
+[[rewrite]]
+matches = [
+    "gescc",
+    "geqslcc",
+    "geqclosed"
+]
+item = ["greater than", "or equal to, closed"]
+
+[[rewrite]]
+matches = [
+    "geqdot",
+    "geqslantdot",
+    "gesdot",
+    "gesdoto",
+    "gesdotol"
+]
+item = ["greater than", "or equal to, dotted"]
+
+[[rewrite]]
+matches = [
+    "gneq",
+    "gneqq",
+    "gvertneqq"
+]
+item = ["greater than", "but not equal to"]
+
+[[rewrite]]
+matches = "late"
+item = ["greater than", "or equal to, horizontally barred"]
+
+# ... greater-than and less-than combinations ...
+
+[[rewrite]]
+matches = "gtrless"
+item = ["greater than", "or less than"]
+
+[[rewrite]]
+matches = [
+    "gesl",
+    "gesles",
+    "gtreqless",
+    "gtreqlessslant",
+    "gtreqqless",
+    "gtreqslantless"
+]
+item = ["greater than", "or equal to or less than"]
+
+[[rewrite]]
+matches = "gtrneqqless"
+item = ["greater than", "or less than but not equal to"]
+
+[[rewrite]]
+matches = "glE"
+item = ["greater than", "or less than or equal to"]
+
+[[rewrite]]
+matches = "gla"
+item = ["greater than", "or less than"]
+
+[[rewrite]]
+matches = "glj"
+item = ["greater than", "or less than, overlapping"]
+
+# ... greater than, other variants ...
+
+[[rewrite]]
+matches = "gtcir"
+item = ["greater than", "circle"]
+
+[[rewrite]]
+matches = "gtquest"
+item = ["greater than", "question mark"]
+
+[[rewrite]]
+matches = ["gtrsim", "gtrsimslant", "apprge"]
+item = ["greater than", "or similar to"]
+
+[[rewrite]]
+matches = "gsime"
+item = ["greater than", "or similar to or equal to"]
+
+[[rewrite]]
+matches = "gsiml"
+item = ["greater than", "or similar to or less than"]
+
+[[rewrite]]
+matches = "gnsim"
+item = ["greater than", "but not similar to"]
+
+[[rewrite]]
+matches = "gtrapprox"
+item = ["greater than", "or approximately equal to"]
+
+[[rewrite]]
+matches = "gnapprox"
+item = ["greater than", "but not approximately equal to"]
+
+[[rewrite]]
+matches = "gtrarr"
+item = ["greater than", "arrow"]
+
+# ... greater than, negated ...
+
+[[rewrite]]
+matches = [
+    "ngtr",
+    "not greater than",
+    "slanted bar not greater than"
+]
+item = ["greater than", "negated"]
+
+[[rewrite]]
+matches = "ngtrdot"
+item = ["greater than", "dotted, negated"]
+
+[[rewrite]]
+matches = [
+    "ngtcc",
+    "ngtrcc",
+    "ngtrclosed"
+]
+item = ["greater than", "closed, negated"]
+
+[[rewrite]]
+matches = "ngg"
+item = ["greater than", "much, negated"]
+
+[[rewrite]]
+matches = "nggg"
+item = ["greater than", "very much, negated"]
+
+# ... greater than or equal to, negated ...
+
+[[rewrite]]
+matches = [
+    "nge",
+    "ngeq",
+    "ngeqq",
+    "ngeqslant",
+    "nvargeq",
+    "not greater than or equal",
+    "slanted bar not greater than or equal"
+]
+item = ["greater than", "or equal to, negated"]
+
+[[rewrite]]
+matches = [
+    "ngeqclosed",
+    "ngeqslcc",
+    "ngescc"
+]
+item = ["greater than", "or equal to, closed, negated"]
+
+[[rewrite]]
+matches = [
+    "ngeqdot",
+    "ngeqslantdot",
+    "ngesdot"
+]
+item = ["greater than", "or equal to, dotted, negated"]
+
+# ... greater-than and less-than combinations, negated ...
+
+[[rewrite]]
+matches = "ngtrless"
+item = ["greater than", "or less than, negated"]
+
+[[rewrite]]
+matches = [
+    "ngesl",
+    "ngtreqless",
+    "ngtreqqless",
+    "ngtreqslantless",
+    "ngtreqlessslant"
+]
+item = ["greater than", "or equal to or less than, negated"]
+
+# ... greater than, other variants, negated ...
+
+[[rewrite]]
+matches = "ngtrsim"
+item = ["greater than", "or similar to, negated"]
+
+[[rewrite]]
+matches = "ngtrapprox"
+item = ["greater than", "or approximately equal to, negated"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-integrals.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-integrals.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-integrals.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,187 @@
+##############################################
+# Categorize integrals.                      #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+[[rewrite]]
+consider_all_entries = true
+top_matches = "integrals"
+matches = ["contour", "dotted", "product", "quaternion"]
+item = ["integral", '\1']
+
+[[rewrite]]
+top_matches = "integrals"
+matches = "integrals"
+item = ["integral"]
+
+[[rewrite]]
+matches = ["int", "intsl", "intup", "varint", "longint"]
+item = "integral"
+
+[[rewrite]]
+compare_lowercase = true
+matches = "prodi"
+item = ["integral", "product"]
+
+[[rewrite]]
+contains = "dotsint"
+item = ["integral", "dotted"]
+
+[[rewrite]]
+contains = ["ointclockwise", "lcircleleftint", "rcirclerightint"]
+item = ["integral", "clockwise contour"]
+
+[[rewrite]]
+contains = ["ointctrclockwise", "lcirclerightint", "rcircleleftint"]
+item = ["integral", "counterclockwise contour"]
+
+# This rule must follow the previous two rules.
+[[rewrite]]
+contains = "oint"
+not_contains = ["joint", "Joint", "point", "Point", "partial"]
+item = ["integral", "contour"]
+
+[[rewrite]]
+contains = "oiint"
+not_contains = "partial"
+item = ["integral", "closed surface"]
+
+[[rewrite]]
+contains = "oiiint"
+not_contains = "partial"
+item = ["integral", "closed volume"]
+
+[[rewrite]]
+contains = ["awint", "intctrclockwise"]
+item = ["integral", "counterclockwise"]
+
+[[rewrite]]
+contains = "intclockwise"
+item = ["integral", "clockwise"]
+
+[[rewrite]]
+matches = "iNint"
+item = ["integral", "multiple"]
+
+[[rewrite]]
+matches = "biNint"
+item = ["integral", "multiple, square"]
+
+[[rewrite]]
+matches = "oiNint"
+item = ["integral", "multiple, contour"]
+
+[[rewrite]]
+contains = "sqiiint"
+item = ["integral", "square, triple"]
+
+[[rewrite]]
+contains = "sqiint"
+item = ["integral", "square, double"]
+
+[[rewrite]]
+contains = "sqint"
+item = ["integral", "square"]
+
+[[rewrite]]
+contains = "iiiint"
+not_contains = "partial"
+item = ["integral", "quadruple"]
+
+# This rule must appear after "iiiint".
+[[rewrite]]
+contains = "iiint"
+not_contains = "partial"
+item = ["integral", "triple"]
+
+# This rule must appear after "iiint", "sqiint", and "sqiiint".
+[[rewrite]]
+contains = "iint"
+not_contains = "partial"
+item = ["integral", "double"]
+
+[[rewrite]]
+contains = "intlarhk"
+item = ["integral", "hooked arrow"]
+
+[[rewrite]]
+contains = ["intx", "xint"]
+item = ["integral", "times"]
+
+[[rewrite]]
+contains = ["intbar", "barint"]
+item = ["integral", "bar"]
+
+[[rewrite]]
+matches = ["aint", "dashint"]
+item = ["integral", "bar"]
+
+[[rewrite]]
+contains = ["intBar", "ddashint"]
+item = ["integral", "double bar"]
+
+[[rewrite]]
+contains = "intcap"
+item = ["integral", "intersection"]
+
+[[rewrite]]
+contains = "intcup"
+item = ["integral", "union"]
+
+[[rewrite]]
+contains = "sumint"
+item = ["integral", "sum"]
+
+[[rewrite]]
+contains = "cirfnint"
+item = ["integral", "circulation function"]
+
+[[rewrite]]
+contains = "rppolint"
+item = ["integral", "line with rectangular path around pole"]
+
+[[rewrite]]
+contains = "scpolint"
+item = ["integral", "line with semicircular path around pole"]
+
+[[rewrite]]
+contains = "npolint"
+item = ["integral", "line not including the pole"]
+
+[[rewrite]]
+contains = "pointint"
+item = ["integral", "around a point operator"]
+
+[[rewrite]]
+contains = ["fint", "strokedint"]
+not_contains = "offint"
+item = ["integral", "slash"]
+
+[[rewrite]]
+contains = "landupint"
+item = ["integral", "Landau up"]
+
+[[rewrite]]
+contains = "landdownint"
+item = ["integral", "Landau down"]
+
+# This rule must appear after "landdownint".
+[[rewrite]]
+contains = ["lowint", "downint"]
+item = ["integral", "underbar"]
+
+# This rule must appear after "landupint".
+[[rewrite]]
+contains = "upint"
+item = ["integral", "overbar"]
+
+[[rewrite]]
+contains = ["bigint"]
+not_contains = "biginterleave"
+not_render_contains = ["package", "pkg"]
+item = ["integral", "big"]
+
+# This rule must appear after most other integral rules.
+[[rewrite]]
+contains = "smallint"
+item = "integral"

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-letters.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-letters.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-letters.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,742 @@
+##############################################
+# Categorize letters.                        #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# --------------------------- Greek letters ----------------------------
+
+# This rule should appear early in this section.
+[[rewrite]]
+matches = "ddigamma"
+word = "digamma"
+continue = true
+
+# This rule should appear early in this section.
+[[rewrite]]
+regex = '^(.*)ohm(.*)$'
+word = '\1Omega\2'
+continue = true
+
+# This rule should appear early in this section.
+[[rewrite]]
+matches = "epsi"
+word = "epsilon"
+continue = true
+
+# Backward lowercase
+[[rewrite]]
+regex = '''
+^(?:up|text|ni|bb|baby)?(?:rev|back)\
+(alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|\
+nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|\
+stigma|digamma|[ckq]oppa|sampi|heta)\
+(?:up)?$\
+'''
+item = ['\1', "lowercase backward"]
+
+# Variant lowercase
+[[rewrite]]
+regex = '''
+^(?:up|text|ni|bb|baby)?(?:var|varvar)\
+(alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|\
+nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|\
+stigma|digamma|[ckq]oppa|sampi|heta)\
+(?:up)?$\
+'''
+item = ['\1', "lowercase variant"]
+
+[[rewrite]]
+matches = "Varsampi"
+item = ["sampi", "lowercase variant"]
+
+# ... Begin special cases ...
+
+[[rewrite]]
+matches = ["riota", "turnediota", "iota, upside-down"]
+item = ["iota", "lowercase, upside-down"]
+
+[[rewrite]]
+contains = "textinvomega"
+item = ["omega", "lowercase, upside-down"]
+
+[[rewrite]]
+matches = ["agemO", "mho", "textmho", "rotOmega"]
+item = ["omega", "uppercase, upside-down"]
+
+[[rewrite]]
+regex = 'closed?(?:ni)?(epsilon|omega)'
+item = ['\1', "lowercase closed"]
+
+[[rewrite]]
+matches = "first ordinal (omega)"
+item = ["omega", "lowercase"]
+
+[[rewrite]]
+regex = 'closed?revepsilon'
+item = ["epsilon", "lowercase reversed and closed"]
+
+[[rewrite]]
+contains = "hookepsilon"
+item = ["epsilon", "lowercase with hook"]
+
+[[rewrite]]
+contains = "hookrevepsilon"
+item = ["epsilon", "lowercase reversed with hook"]
+
+[[rewrite]]
+matches = "ipagamma"
+item = ["gamma", "lowercase IPA form"]
+
+[[rewrite]]
+contains = "tailgamma"
+item = ["gamma", "lowercase with tail"]
+
+[[rewrite]]
+matches = "textgrgamma"
+word = "gamma"
+continue = true
+
+[[rewrite]]
+matches = [
+    "barlambda",
+    "crossnilambda",
+    "lambdabar",
+    "lambdaslash",
+    "textcrlambda"
+]
+item = ["lambda", "lowercase with slash"]
+
+[[rewrite]]
+regex = '^text([Oo])mikron$'
+item = 'text\1micron'
+continue = true
+
+# Treat "increment" as uppercase delta.
+[[rewrite]]
+matches = "increment"
+item = ["delta", "uppercase"]
+
+# Index "micro" as an upright mu.
+[[rewrite]]
+matches = [
+    "micro",
+    "textmicro",
+    "textmugreek"
+]
+item = ["mu", "lowercase upright"]
+
+# ... End special cases ...
+
+# Uppercase
+[[rewrite]]
+regex = '''
+^(?:up|text|ni|bb|tc)?(?:baby)?\
+(Alpha|Beta|Gamma|Delta|Epsilon|Zeta|Eta|Theta|Iota|Kappa|Lambda|Mu|\
+Nu|Xi|Omicron|Pi|Rho|Sigma|Tau|Upsilon|Phi|Chi|Psi|Omega|\
+Stigma|Digamma|[CKQ]oppa|Sampi|Heta)\
+(?:up)?$\
+'''
+item = ['\1', "uppercase"]
+lowercase_item = true
+
+# More uppercase
+[[rewrite]]
+regex = '''
+^(?:Up|textsc)\
+(alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|\
+nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|\
+stigma|digamma|[ckq]oppa|sampi|heta)$\
+'''
+item = ['\1', "uppercase"]
+
+# Lowercase
+[[rewrite]]
+regex = '''
+^(?:up|text|ni|bb|tc)?(?:baby)?\
+(alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|\
+nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|\
+stigma|digamma|[ckq]oppa|sampi|heta)\
+(?:up)?$\
+'''
+item = ['\1', "lowercase"]
+
+# -------------------------- assorted letters --------------------------
+
+# ... schwa ...
+
+[[rewrite]]
+matches = "textrhookschwa"
+item = ["schwa", "hooked"]
+
+[[rewrite]]
+contains = "schwa"
+not_render_contains = '\PHONFCtextschwa'
+item = "schwa"
+
+# This rule should precede the "rotated latters" rule.
+[[rewrite]]
+matches = "inve"
+item = "schwa"
+
+# ... variant letters ...
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = "vari"
+item = ["i", "dotless"]
+
+[[rewrite]]
+render_matches = '\add at accent{127}{i}'
+item = ["i", "incorrectly accented"]
+word = 'incorrectly accented (\\add at accent{127}{i})'
+
+[[rewrite]]
+regex = '^var([A-Za-z])$'
+item = '\1'
+
+[[rewrite]]
+regex = '^(?:text)?script([A-Za-z])$'
+item = '\1'
+
+# ... barred letters ...
+
+[[rewrite]]
+regex = '^bar(?:sc)?([a-z])$'
+not_render_contains = '\faBars'
+item = ["barred letters", '\1']
+
+[[rewrite]]
+regex = '^([a-z])bar?$'
+item = ["barred letters", '\1']
+
+[[rewrite]]
+regex = '^text(?:cr|bar)([a-z])$'
+item = ["barred letters", '\1']
+
+[[rewrite]]
+matches = "planck"
+item = ["barred letters", "h"]
+
+[[rewrite]]
+regex = '^cross([a-z])$'
+item = ["barred letters", '\1']
+
+[[rewrite]]
+matches = "Zbar"
+item = ["barred letters", "Z"]
+
+[[rewrite]]
+matches = "dj"
+item = ["barred letters", "d"]
+
+[[rewrite]]
+matches = "DJ"
+item = ["barred letters", "D"]
+
+[[rewrite]]
+matches = "dlbari"
+item = ["barred letters", "i, dotless"]
+
+[[rewrite]]
+matches = ["textbardotlessj", "textObardotlessj"]
+item = ["barred letters", "j, dotless"]
+
+[[rewrite]]
+matches = "textdoublebaresh"
+item = ["barred letters", "esh, double"]
+
+# ... horned letters ...
+
+[[rewrite]]
+regex = '^([A-Z])HORN$'
+item = ["horned letters", '\1']
+
+[[rewrite]]
+regex = '^([a-z])horn$'
+not_matches = "thorn"
+item = ["horned letters", '\1']
+
+# ... hooked letters ...
+
+[[rewrite]]
+regex = '^hook([A-Za-z])$'
+item = ["hooked letters", '\1']
+
+[[rewrite]]
+regex = '^text(?:ht|lht|[lr]hook|frhook)([A-Za-z])(?:var)?$'
+item = ["hooked letters", '\1']
+
+[[rewrite]]
+regex = '^textlhtlong([A-Za-z])$'
+item = ["hooked letters", '\1, long']
+
+[[rewrite]]
+regex = '^texthtsc([A-Za-z])$'
+item = ["hooked letters", '\1, small caps']
+
+[[rewrite]]
+prefix = "texthtbardotlessj"
+item = ["hooked letters", "j, dotless, barred"]
+
+[[rewrite]]
+matches = "textrhookopeno"
+item = ["hooked letters", "o, open"]
+
+[[rewrite]]
+matches = "voicedh"
+item = ["hooked letters", "h"]
+
+# Let's count this as a hooked letter.
+[[rewrite]]
+matches = "textfrbarn"
+item = ["hooked letters", "n"]
+
+# I don't know why this is considered a schwa.  It looks to me like a
+# hooked d.
+[[rewrite]]
+render_contains = '\PHONFCtextschwa'
+item = ["hooked letters", "d"]
+
+# ... tailed letters ...
+
+[[rewrite]]
+regex = '^(?:text[lr]|textcomma)?tail([a-z])$'
+item = ["tailed letters", '\1']
+
+[[rewrite]]
+regex = '^curly([a-z])$'
+item = ["tailed letters", '\1']
+
+[[rewrite]]
+regex = '^textct([a-z])(?:var)?$'
+item = ["tailed letters", '\1']
+
+[[rewrite]]
+matches = ["textctesh", "curlyesh"]
+item = ["tailed letters", "esh"]
+
+[[rewrite]]
+prefix = "textctstretchc"
+item = ["tailed letters", "c, stretched"]
+
+[[rewrite]]
+matches = "textctturnt"
+item = ["tailed letters", "t, inverted"]
+
+[[rewrite]]
+matches = "texthtrtaild"
+item = ["tailed letters", "d, with hook"]
+
+[[rewrite]]
+matches = "textrtailhth"
+item = ["tailed letters", "h, with hook"]
+
+[[rewrite]]
+matches = "roundz"
+item = ["z", "round"]
+
+# ... slashed letters ...
+
+[[rewrite]]
+regex = '^slash([a-z])$'
+item = ["slashed letters", '\1']
+
+[[rewrite]]
+render_contains = '(\O)'
+item = ["slashed letters", "O"]
+
+[[rewrite]]
+render_contains = '(\o)'
+item = ["slashed letters", "o"]
+
+# ... stroked letters ...
+
+[[rewrite]]
+matches = "hslash"
+item = ["stroked letters", "h"]
+
+[[rewrite]]
+render_contains = '+\L+'
+item = ["stroked letters", "L"]
+
+[[rewrite]]
+render_contains = '+\l+'
+item = ["stroked letters", "l"]
+
+# ... inverted letters ...
+
+[[rewrite]]
+matches = "textinvscripta"
+item = ["inverted letters", "a"]
+
+[[rewrite]]
+regex = '^(?:text)?invsc([A-Za-z])$'
+item = ["inverted letters", '\1, small caps']
+
+[[rewrite]]
+matches = "pwedge"
+item = ["inverted letters", "v"]
+
+# ... rotated letters ...
+
+[[rewrite]]
+regex = '^rot(?:var)?([a-z])$'
+item = ["rotated letters", '\1']
+
+[[rewrite]]
+regex = '^inv(?:script)?([A-Za-z])$'
+item = ["rotated letters", '\1']
+
+[[rewrite]]
+regex = '^textturn(?:var|script)?([a-z])$'
+item = ["rotated letters", '\1']
+
+[[rewrite]]
+regex = '^textturnsc([A-Za-z])$'
+item = ["rotated letters", '\1, small caps']
+
+[[rewrite]]
+matches = ["tailinvr", "textturnrrtail"]
+item = ["rotated letters", "r, with tail"]
+
+[[rewrite]]
+matches = "sansLturned"
+item = ["rotated letters", "L, sans serif"]
+
+[[rewrite]]
+matches = ["invlazys", "ac"]
+item = ["rotated letters", "s, inverted"]
+
+# ... reversed letters ...
+
+[[rewrite]]
+regex = '^(?:text)?rev([A-Za-z])$'
+item = ["reversed letters", '\1']
+
+[[rewrite]]
+regex = '^textrevsc([A-Za-z])$'
+item = ["reversed letters", '\1, small caps']
+
+[[rewrite]]
+matches = "sansLmirrored"
+item = ["reversed letters", "L, sans serif"]
+
+# ... long-legged letters ...
+
+[[rewrite]]
+regex = '^textlongleg([A-Za-z])$'
+item = ["long-legged letters", '\1']
+
+[[rewrite]]
+regex = '^text([A-Za-z])rleg$'
+item = ["long-legged letters", '\1']
+
+[[rewrite]]
+matches = "legr"
+item = ["long-legged letters", "r"]
+
+[[rewrite]]
+regex = '^textturnlongleg([A-Za-z])$'
+item = ["long-legged letters", '\1, rotated']
+
+[[rewrite]]
+regex = '^textturn([A-Za-z])rleg$'
+item = ["long-legged letters", '\1, rotated']
+
+[[rewrite]]
+matches = "legm"
+item = ["long-legged letters", "m, rotated"]
+
+[[rewrite]]
+matches = "invlegr"
+item = ["long-legged letters", "r, rotated"]
+
+# ... small-caps letters ...
+
+[[rewrite]]
+regex = '^(?:text)?sc([a-z])$'
+item = ["small caps letters", '\1']
+not_render_contains = '\textsf'
+
+# ... blackboard bold letters ...
+
+[[rewrite]]
+compare_lowercase = true
+matches = "complex"
+item = ["blackboard bold letters", "C"]
+
+[[rewrite]]
+matches = ["Natural", "NATURAL"]
+item = ["blackboard bold letters", "N"]
+
+[[rewrite]]
+matches = "Bbbk"
+item = ["blackboard bold letters", "k"]
+
+[[rewrite]]
+compare_lowercase = true
+matches = "rational"
+item = ["blackboard bold letters", "Q"]
+
+[[rewrite]]
+compare_lowercase = true
+matches = "real"
+item = ["blackboard bold letters", "R"]
+
+[[rewrite]]
+compare_lowercase = true
+matches = "integer"
+item = ["blackboard bold letters", "Z"]
+
+[[rewrite]]
+regex = '^sym([AOU])E$'
+item = ["blackboard bold letters", '\1, umlaut']
+
+[[rewrite]]
+matches = "symC"
+item = ["blackboard bold letters", "C"]
+
+# ... Hebrew letters ...
+
+[[rewrite]]
+matches = [
+    "aleph",
+    "beth",
+    "gimel",
+    "daleth"
+]
+item = '\1'
+
+# ... boko (Hausa) letters ...
+
+[[rewrite]]
+regex = '^hausa([A-Za-z])$'
+item = ["boko letters", '\1']
+
+# ... yogh ...
+
+[[rewrite]]
+matches = ["yogh", "textyogh"]
+item = "yogh"
+
+[[rewrite]]
+matches = "textbenttailyogh"
+item = ["yogh", "with bent tail"]
+
+[[rewrite]]
+matches = ["curlyyogh", "textctyogh"]
+item = ["yogh", "with curly tail"]
+
+[[rewrite]]
+matches = "textrevyogh"
+item = ["yogh", "reversed"]
+
+# ... thorn ...
+
+[[rewrite]]
+prefix = ["thorn", "textthorn"]
+item = ["thorn", "lowercase"]
+
+[[rewrite]]
+matches = "th"
+item = ["thorn", "lowercase"]
+
+[[rewrite]]
+matches = ["Thorn", "TH"]
+item = ["thorn", "uppercase"]
+
+# ... ligatures ...
+
+[[rewrite]]
+matches = "textheng"
+item = ["ligatures", "h-engma"]
+
+[[rewrite]]
+matches = ["tesh", "textteshlig"]
+item = ["ligatures", "t-esh"]
+
+[[rewrite]]
+regex = '^textO?([A-Za-z])yoghlig$'
+item = ["ligatures", '\1-yogh']
+
+[[rewrite]]
+matches = "texththeng"
+item = ["ligatures", "h-engma, hooked"]
+
+[[rewrite]]
+matches = "lz"
+item = ["ligatures", "l-z"]
+
+[[rewrite]]
+matches = "ae"
+item = ["ligatures", "a-e"]
+
+[[rewrite]]
+matches = "AE"
+item = ["ligatures", "A-E"]
+
+[[rewrite]]
+matches = "oe"
+item = ["ligatures", "o-e"]
+
+[[rewrite]]
+matches = "OE"
+item = ["ligatures", "O-E"]
+
+[[rewrite]]
+matches = "oo"
+item = ["ligatures", "o-o"]
+
+[[rewrite]]
+matches = "dz"
+item = ["ligatures", "d-z"]
+
+[[rewrite]]
+matches = "fj"
+item = ["ligatures", "f-j"]
+
+[[rewrite]]
+matches = "ij"
+item = ["ligatures", "i-j"]
+
+[[rewrite]]
+matches = "IJ"
+item = ["ligatures", "I-J"]
+
+[[rewrite]]
+matches = "hv"
+item = ["ligatures", "h-v"]
+
+# Is this supposed to be an l-r ligature?
+[[rewrite]]
+matches = "textlfishhookrlig"
+item = ["ligatures", "l-r"]
+
+[[rewrite]]
+matches = "textturncelig"
+item = ["ligatures", "c-e, with c rotated"]
+
+[[rewrite]]
+matches = ["textdctzlig", "textctdctzlig"]
+item = ["ligatures", "d-z, with tail"]
+
+[[rewrite]]
+matches = "texttctclig"
+item = ["ligatures", "t-c, with tail"]
+
+[[rewrite]]
+matches = "textcttctclig"
+item = ["ligatures", "t-c, both tailed"]
+
+[[rewrite]]
+matches = "hookheng"
+item = ["ligatures", "h-engma, hooked"]
+
+[[rewrite]]
+regex = '^textsc([A-Za-z])([A-Za-z])lig$'
+item = ["ligatures", '\1-\2, small caps']
+
+[[rewrite]]
+regex = '^text([A-Za-z])([A-Za-z])lig$'
+item = ["ligatures", '\1-\2']
+
+# ... Swedish Viby i and y ...
+
+[[rewrite]]
+regex = '^text(?:raise)?viby([iy])$'
+item = ['\1', "Lidingo/Viby"]
+word = 'Liding{\\"o}/Viby'
+
+# ... other letters ...
+
+[[rewrite]]
+matches = ["eng", "engma", "ng"]
+item = ["engma", "lowercase"]
+
+[[rewrite]]
+render_contains = '{\NG}'
+item = ["engma", "uppercase"]
+
+[[rewrite]]
+matches = "nj"
+item = "enya"
+
+[[rewrite]]
+matches = "labdentalnas"
+item = "emgma"
+
+[[rewrite]]
+matches = "ell"
+item = "l"
+
+[[rewrite]]
+matches = ["longs", "long s"]
+item = ["s", "long"]
+
+[[rewrite]]
+matches = ["eth", "dh"]
+item = ["eth", "lowercase"]
+
+[[rewrite]]
+matches = "DH"
+item = ["eth", "uppercase"]
+
+[[rewrite]]
+matches = "ss"
+item = ["sharp s", "lowercase"]
+
+[[rewrite]]
+matches = "SS"
+item = ["sharp s", "uppercase"]
+
+[[rewrite]]
+matches = "textg"
+item = "g"
+
+[[rewrite]]
+matches = "lito"
+item = "o"
+
+[[rewrite]]
+regex = '^text(hard|soft)sign$'
+item = '\1 sign'
+
+[[rewrite]]
+matches = "textwynn"
+item = "wynn"
+
+[[rewrite]]
+matches = "textesh"
+item = "esh"
+
+[[rewrite]]
+prefix = "textstretchc"
+item = ["c", "stretched"]
+
+[[rewrite]]
+matches = ["openo", "textopeno", "varopeno"]
+item = ["o", "open"]
+
+[[rewrite]]
+matches = "udesc"
+item = ["u", "descending"]
+
+[[rewrite]]
+matches = ["textbeltl", "latfric"]
+item = ["l", "with belt"]
+
+[[rewrite]]
+matches = ["textltilde", "tildel"]
+item = ["l", "with tilde"]
+
+[[rewrite]]
+matches = "textfishhookr"
+item = ["r", "fishhook"]
+
+[[rewrite]]
+matches = "textlooptoprevesh"
+item = ["esh", "reversed with loop"]
+
+[[rewrite]]
+matches = "vod"
+item = ["v", "ring under"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-math-maps.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-math-maps.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-math-maps.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,126 @@
+##############################################
+# Categorize mathematical map symbols.       #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ... rightward ...
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = '^(var)?(long)?(var)?(right)?mapsto$'
+item = "maps to"
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(var)?(long)?(var)?(right)?mapsto$'
+item = ["maps to", "double"]
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = '^n(var)?(long)?(var)?(right)?mapsto$'
+item = ["maps to", "negated"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^n(var)?(long)?(var)?(right)?mapsto$'
+item = ["maps to", "double, negated"]
+
+[[rewrite]]
+matches = "twoheadmapsto"
+item = ["maps to", "double headed"]
+
+[[rewrite]]
+matches = ["xmapsto", "xvarmapsto"]
+item = ["maps to", "extensible"]
+
+# ... downward ...
+
+[[rewrite]]
+prefix = ["downmaps", "mapsdown"]
+item = ["maps to", "downward"]
+
+[[rewrite]]
+prefix = ["Downmaps", "Mapsdown"]
+item = ["maps to", "downward, double"]
+
+[[rewrite]]
+prefix = ["ndownmaps", "nmapsdown"]
+item = ["maps to", "downward, negated"]
+
+[[rewrite]]
+prefix = ["nDownmaps", "nMapsdown"]
+item = ["maps to", "downward, double, negated"]
+
+# ... upward ...
+
+[[rewrite]]
+prefix = ["upmaps", "mapsup"]
+item = ["maps to", "upward"]
+
+[[rewrite]]
+prefix = ["Upmaps", "Mapsup"]
+item = ["maps to", "upward, double"]
+
+[[rewrite]]
+prefix = ["nupmaps", "nmapsup"]
+item = ["maps to", "upward, negated"]
+
+[[rewrite]]
+prefix = ["nUpmaps", "nMapsup"]
+item = ["maps to", "upward, double, negated"]
+
+# ... leftward ...
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = '^(var)?(long)?(var)?mapsfrom$'
+item = ["maps to", "leftward"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(var)?(long)?(var)?mapsfrom$'
+item = ["maps to", "leftward, double"]
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = '^n(var)?(long)?(var)?mapsfrom$'
+item = ["maps to", "leftward, negated"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^n(var)?(long)?(var)?mapsfrom$'
+item = ["maps to", "leftward, double, negated"]
+
+[[rewrite]]
+matches = "leftmapsto"
+item = ["maps to", "leftward"]
+
+[[rewrite]]
+matches = "Leftmapsto"
+item = ["maps to", "leftward, double"]
+
+[[rewrite]]
+matches = "nleftmapsto"
+item = ["maps to", "leftward, negated"]
+
+[[rewrite]]
+matches = "nLeftmapsto"
+item = ["maps to", "leftward, double, negated"]
+
+[[rewrite]]
+matches = "twoheadmapsfrom"
+item = ["maps to", "leftward, double headed"]
+
+[[rewrite]]
+matches = "xvarmapsfrom"
+item = ["maps to", "leftward, extensible"]
+
+# ... diagonal ...
+
+[[rewrite]]
+regex = '^(ne|nw|se|sw)mapsto$'
+item = ["maps to", "diagonal"]
+
+[[rewrite]]
+regex = '^n(ne|nw|se|sw)mapsto$'
+item = ["maps to", "diagonal, negated"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-merge.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-merge.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-merge.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,2935 @@
+########################################################################
+# Define a list of symbols, all of whose glyphs are nearly identical.  #
+# An exemplar glyph will be selected for each item, which will be      #
+# listed only once in the index.                                       #
+#                                                                      #
+# Author: Scott Pakin <scott+clsl at pakin.org>                           #
+########################################################################
+
+[[merge]]
+matches = [
+    "actuarial angle",
+    "aleph",
+    "anaclasis",
+    "anger",
+    "antisigma",
+    "Apple",
+    "Aquarius",
+    "arc",
+    "Aries",
+    "artist",
+    "ascending node",
+    "astronaut",
+    "bag membership",
+    "beth",
+    "between",
+    "BlackBerry",
+    "bottom",
+    "bouncing ball",
+    "bra",
+    "bullet",
+    "Cancer",
+    "caron",
+    "catalexis",
+    "cauldron",
+    "cedilla",
+    "chestnut",
+    "choice",
+    "complement",
+    "convolution",
+    "coproduct",
+    "copyright",
+    "corresponds",
+    "currency",
+    "daleth",
+    "degree",
+    "descending node",
+    "diameter",
+    "Docker",
+    "Dropbox",
+    "edit",
+    "emgma",
+    "enya",
+    "Erlang",
+    "factory worker",
+    "feeding baby",
+    "filter",
+    "flap",
+    "for all",
+    "game",
+    "Gemini",
+    "gesturing NO",
+    "gesturing OK",
+    "gimel",
+    "group",
+    "Grunt",
+    "Hacker News",
+    "hamster",
+    "handball",
+    "health worker",
+    "Hermitian conjugate matrix",
+    "intercalate",
+    "interleave",
+    "Java",
+    "JavaScript",
+    "Jedi Order",
+    "Jupiter",
+    "k",
+    "ket",
+    "kidney",
+    "Leo",
+    "Libra",
+    "lifting weights",
+    "lightning",
+    "line feed",
+    "mage",
+    "Magento",
+    "Mars",
+    "Mercury",
+    "moo",
+    "multimap",
+    "musical score",
+    "nabla",
+    "Neptune",
+    "no bicycles",
+    "Node.js",
+    "no entry",
+    "no mobile phones",
+    "no pedestrians",
+    "npm",
+    "office worker",
+    "ogonek",
+    "opposition",
+    "partial derivative",
+    "permyriad",
+    "pfund",
+    "Pisces",
+    "police officer",
+    "prime",
+    "pull back",
+    "push out",
+    "Python",
+    "raising hand",
+    "Raspberry Pi",
+    "React",
+    "redo",
+    "reference",
+    "respondens",
+    "Rust",
+    "Sagittarius",
+    "Sass",
+    "Saturn",
+    "Scala",
+    "schwa",
+    "Scorpio",
+    "section mark",
+    "sha",
+    "slice",
+    "smash product",
+    "SUSE",
+    "Symfony",
+    "sync",
+    "Taurus",
+    "tipping hand",
+    "undo",
+    "Unity",
+    "utensils",
+    "Venus",
+    "Virgo",
+    "wagon",
+    "water polo",
+    "Weierstrass elliptic function",
+    "wreath product",
+    "Zenodo",
+    "zoom",
+    "zoom in",
+    "zoom out"
+]
+
+# Top-level entries, all of whose subentries should be independently
+# merged, and top-level "see..." entries.
+[[merge]]
+consider_all_entries = true
+top_matches = [
+    "accents",
+    "alla breve",
+    "ampersand",
+    "antiquark",
+    "approximately equivalent to",
+    "arc",
+    "assumption",
+    "asymptotically equal to",
+    "backslash",
+    "barred letters",
+    "battery",
+    "because",
+    "blackboard bold letters",
+    "bottom",
+    "boxed symbols",
+    "bunch join",
+    "bunch meet",
+    "camel",
+    "car",
+    "cardinality",
+    "Cartesian product",
+    "chess",
+    "circled symbols",
+    "clefs",
+    "Closed Access",
+    "closed captioning",
+    "closure",
+    "coherence",
+    "coin",
+    "colon",
+    "common time",
+    "cross product",
+    "curly pi",
+    "cutoff subtraction",
+    "dal segno",
+    "delimiters",
+    "derivative, partial",
+    "Descartes's equal sign",
+    "diaeresis",
+    "diagonal line",
+    "diamond",
+    "differential, inexact",
+    "digital signals",
+    "dominance",
+    "dot",
+    "eighth note",
+    "element of",
+    "ellipse",
+    "ellipsis",
+    "empty set",
+    "engma",
+    "entailment",
+    "entails",
+    "equilibrium",
+    "esh",
+    "euro",
+    "evaluated at",
+    "excess",
+    "exists",
+    "face",
+    "falsum",
+    "Father Christmas",
+    "fermata",
+    "fighter jet",
+    "fish tail",
+    "flat",
+    "footline",
+    "free",
+    "function",
+    "gender signs",
+    "geometric proportion",
+    "glottal stop",
+    "Go stones",
+    "half note",
+    "horizontal line",
+    "i",
+    "iff",
+    "implication",
+    "in",
+    "incoherence",
+    "inexact differential",
+    "integral",
+    "interior",
+    "interior product",
+    "j",
+    "join (database)",
+    "keyboard",
+    "lattice",
+    "leads to",
+    "ligatures",
+    "linear implication",
+    "location",
+    "logical negation",
+    "lollipop (mathematics)",
+    "long-legged letters",
+    "map join",
+    "map meet",
+    "marcato",
+    "member of",
+    "merge",
+    "micro",
+    "millesimal sign",
+    "models",
+    "multimap",
+    "multiplication",
+    "multiplicative disjunction",
+    "nand",
+    "negation",
+    "octothorpe",
+    "ordinal",
+    "orthogonal",
+    "overline",
+    "owns",
+    "par",
+    "parallel",
+    "parentheses",
+    "pentagram",
+    "period",
+    "per mill",
+    "perpendicular",
+    "per ten thousand",
+    "per thousand",
+    "phonetic accents",
+    "pipe",
+    "pitchfork",
+    "pomega",
+    "postal mark",
+    "pound sign",
+    "prime",
+    "proper subset",
+    "proper superset",
+    "proportion",
+    "quark",
+    "quarter note",
+    "ratio",
+    "registered trademark",
+    "restriction",
+    "reversed letters",
+    "reverse solidus",
+    "s",
+    "satisfies",
+    "semicolon",
+    "semidirect product",
+    "set difference",
+    "set interior",
+    "set intersection",
+    "set membership",
+    "set union",
+    "Sheffer's stroke",
+    "shuffle product",
+    "since",
+    "sixteenth note",
+    "sixty-fourth note",
+    "slash",
+    "small caps letters",
+    "solidus",
+    "space",
+    "steel",
+    "strict converse implication",
+    "strict implication",
+    "stroked letters",
+    "sum",
+    "swung dash",
+    "tack",
+    "tautology",
+    "telephone handset",
+    "ten thousandths",
+    "therefore",
+    "thirty-second note",
+    "thorn",
+    "thousandths",
+    "thus",
+    "top",
+    "trademark",
+    "traffic signal",
+    "transversal intersection",
+    "triangle",
+    "turnstile",
+    "universal bunch quantifier",
+    "universal individual quantifier",
+    "vee",
+    "vertical bar",
+    "vinculum",
+    "wedge",
+    "whole note",
+    "wifi",
+    "Y",
+    "yogh",
+    "Z notation"
+]
+
+[[merge]]
+top_matches = "flag"
+not_matches = ["flag", "multiple, crossed"]
+
+[[merge]]
+top_matches = "dice"
+matches = "3D"
+render_contains = '\usym'
+
+[[merge]]
+top_matches = "dice"
+matches = "dice"
+
+[[merge]]
+top_matches = "cloud"
+not_matches = "cloud"
+
+[[merge]]
+top_matches = "cat"
+not_matches = "cat"
+
+[[merge]]
+top_matches = "mouse"
+matches = "computer"
+
+# This rule should precede the following one.
+[[merge]]
+top_contains = "pilcrow"
+render_contains = ['\DCd', '\STIXmathparagraph']
+
+[[merge]]
+top_contains = "pilcrow"
+not_render_contains = ['\textpilcrow', '\usym{2761}']
+
+[[merge]]
+top_matches = "document"
+matches = "text"
+
+[[merge]]
+top_matches = "emoji"
+matches = "modifiers"
+
+[[merge]]
+top_matches = "jack-o'-lantern"
+render_contains = ["bigpumpkin", "greatpumpkin"]
+
+[[merge]]
+top_matches = "microphone"
+render_contains = ['\tiMicrophone', '\faMicrophone']
+
+[[merge]]
+top_matches = "keyboard symbols"
+matches = "delete"
+
+[[merge]]
+top_matches = "keyboard symbols"
+matches = "command"
+
+[[merge]]
+top_matches = "airplane"
+matches = "landing"
+
+[[merge]]
+top_matches = "airplane"
+matches = "taking off"
+
+[[merge]]
+top_matches = "house"
+not_matches = "house"
+
+[[merge]]
+top_matches = "sun"
+matches = "astronomical"
+
+[[merge]]
+top_matches = "sun"
+render_contains = [
+    '\STIXsun',
+    '(\usym{263C})',
+    '(\ifsSun)',
+    '(\sun)'
+]
+
+[[merge]]
+consider_all_entries = true
+top_matches = "sword"
+matches = "multiple, crossed"
+
+[[merge]]
+top_matches = "dagger"
+not_render_contains = ["1f5e1", "1F5E1"]
+
+[[merge]]
+top_matches = "calendar"
+prefix = "with"
+
+[[merge]]
+top_matches = "leaf"
+matches = "maple"
+
+[[merge]]
+top_matches = "leaf"
+matches = "fleuron"
+
+[[merge]]
+render_contains = ['$\ell$', '\STIXell']
+
+[[merge]]
+top_matches = "envelope"
+matches = "with lightning"
+
+[[merge]]
+top_matches = "envelope"
+matches = "with downward arrow"
+
+[[merge]]
+top_matches = "yin-yang"
+not_render_contains = '\twemoji{262f}'
+
+[[merge]]
+top_regex = '^[A-Z]+!* with arrow$'
+
+[[merge]]
+top_matches = "store"
+matches = "slashed"
+
+[[merge]]
+top_matches = "dangerous bend"
+render_contains = ['\dbend', '\textdbend']
+
+[[merge]]
+top_matches = "dangerous bend"
+render_contains = ['\lhdbend', '\textlhdbend']
+
+[[merge]]
+top_matches = "dangerous bend"
+render_contains = ['\reversedvideodbend', '\textreversedvideodbend']
+
+[[merge]]
+top_matches = "construction worker"
+render_contains = '\twemoji{1f477'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "feet"
+render_contains = "prime"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "feet"
+render_contains = ["SingleQuote", "textquotesingle"]
+
+[[merge]]
+consider_all_entries = true
+top_matches = "inches"
+render_contains = ["DoubleQuote", "textquotedbl"]
+
+[[merge]]
+top_matches = "quotation marks"
+prefix = "straight"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "ditto marks"
+
+[[merge]]
+top_matches = "rowing"
+render_contains = '\twemoji{1f6a3'
+
+[[merge]]
+top_matches = "user"
+matches = "slashed"
+
+[[merge]]
+top_regex = '^\d+$'
+matches = "old style"
+
+[[merge]]
+top_matches = "underline"
+not_render_contains = '\faUnderline'
+
+[[merge]]
+top_matches = "times"
+not_prefix = "decorative"
+
+[[merge]]
+consider_all_entries = true
+format_contains = 'gender signs'
+
+[[merge]]
+top_matches = "handshake"
+matches = "slashed"
+
+[[merge]]
+top_regex = '^\d+$'
+matches = "circled, filled"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "user"
+matches = "circled"
+
+[[merge]]
+top_matches = "hash"
+render_contains = ['($\ABXhash$)', '(\BSKhash)']
+
+[[merge]]
+top_matches = "hash"
+render_contains = [
+    '($\ABXvarhash$)',
+    '(\#)',
+    '(\BSKvarhash)',
+    '(\Numbr)',
+    '(\faHashtag)'
+]
+
+[[merge]]
+consider_all_entries = true
+top_matches = "number sign"
+not_render_contains = "textnumero"
+
+[[merge]]
+top_matches = "l"
+matches = "with belt"
+
+[[merge]]
+top_matches = "l"
+matches = "with tilde"
+
+[[merge]]
+top_matches = "diacritics"
+matches = "apostrophe, reversed"
+
+[[merge]]
+top_matches = "diacritics"
+matches = "secondary stress"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "diacritics"
+matches = "hat"
+
+[[merge]]
+top_matches = "asterisk"
+not_matches = "dingbat"
+
+[[merge]]
+top_matches = "sharp"
+matches = "sharp"
+
+[[merge]]
+top_matches = "natural"
+not_render_contains = '\EOna'
+
+[[merge]]
+top_matches = ["2", "3"]
+matches = "rotated"
+
+[[merge]]
+compare_lowercase = true
+top_matches = "end of proof"
+render_contains = "qed"
+
+[[merge]]
+top_matches = "hammer"
+matches = "and sickle"
+
+[[merge]]
+top_matches = "trash"
+matches = "restore from"
+
+[[merge]]
+top_matches = "conjunction"
+matches = "astronomical"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "copyright"
+
+# ------------------------------- logic --------------------------------
+
+[[merge]]
+consider_all_entries = true
+top_matches = "material biconditional"
+format_contains = 'hyperindexformat{\see{equivalence'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "material conditional"
+format_contains = 'hyperindexformat{\see{arrow'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "material conditional"
+format_contains = 'hyperindexformat{\see{superset'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "material equivalence"
+format_contains = 'hyperindexformat{\see{arrow'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "material equivalence"
+format_contains = 'hyperindexformat{\see{equivalence'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "material implication"
+format_contains = 'hyperindexformat{\see{arrow'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "material implication"
+format_contains = 'hyperindexformat{\see{superset'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "material nonimplication"
+format_contains = 'hyperindexformat{\see{arrow'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "material nonimplication"
+format_contains = 'hyperindexformat{\see{superset'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "converse implication"
+format_contains = 'hyperindexformat{\see{arrow'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "converse implication"
+format_contains = 'hyperindexformat{\see{subset'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "converse nonimplication"
+format_contains = 'hyperindexformat{\see{arrow'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "converse nonimplication"
+format_contains = 'hyperindexformat{\see{subset'
+
+# -------------------- various mathematical symbols --------------------
+
+[[merge]]
+regex = '''
+^((not|weak|material|entailment|intuitionistic|implication)\s)*\
+(entailment|equivalence|implication)$\
+'''
+not_render_contains = '(\Equivalence)'
+
+[[merge]]
+matches = ["plus or minus", "minus or plus"]
+
+[[merge]]
+consider_all_entries = true
+matches = "null set"
+
+[[merge]]
+top_matches = "infinity"
+render_contains = [
+    '(\STIXinfty)',
+    '($\ABXinfty$)',
+    '($\infty$)',
+    '(\MNSinfty)',
+    '(\FDSYMinfty)',
+    '(\Infin)'
+]
+
+[[merge]]
+top_matches = "infinity"
+matches = "incomplete"
+
+[[merge]]
+top_matches = "equivalence"
+matches = "negated"
+
+[[merge]]
+top_matches = "witch"
+matches = "math mode"
+
+[[merge]]
+top_matches = "maps to"
+not_contains = "diagonal"
+
+[[merge]]
+top_matches = "square root"
+render_contains = ['{\STIXsqrt}', '{\sqrt}']
+
+[[merge]]
+top_matches = "square root"
+render_contains = "surd"
+
+[[merge]]
+top_matches = "proportionality"
+matches = "proportionality"
+
+[[merge]]
+top_matches = "proportionality"
+matches = "reversed"
+
+[[merge]]
+render_regex = '\$\\math(left|right)?bat\$'
+
+[[merge]]
+top_matches = "pentagon"
+not_matches = "half filled"
+
+[[merge]]
+top_matches = "hexagon"
+not_matches = "half filled"
+
+[[merge]]
+top_matches = "union"
+not_matches = "square, half"
+
+[[merge]]
+top_matches = "intersection"
+not_matches = "square, half"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "cup"
+matches = "cup"
+not_render_contains = '\BPcup'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "cap"
+matches = "cap"
+not_render_contains = '\fcBonnet'
+
+[[merge]]
+top_matches = "crossing"
+not_matches = "diagonal"
+
+[[merge]]
+top_matches = "transform"
+render_contains = ['$\laplace$', '\TransformHoriz']
+
+[[merge]]
+top_matches = "transform"
+render_contains = ['$\Laplace$', '\InversTransformHoriz']
+
+[[merge]]
+top_matches = "transform"
+render_contains = 'Ztransf'
+
+[[merge]]
+top_matches = "transform"
+render_contains = 'ztransf'
+
+[[merge]]
+top_matches = "transform"
+render_contains = 'dfourier'
+
+[[merge]]
+top_matches = "transform"
+render_contains = 'Dfourier'
+
+[[merge]]
+top_matches = "broom"
+render_contains = ['\leftbroom', '\rightbroom']
+
+[[merge]]
+top_matches = "product"
+not_render_contains = '$\varprod$'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "independence"
+format_contains = 'hyperindexformat{\see{turnstile, up}}'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "independence"
+format_contains = 'hyperindexformat{\see{turnstile, double dash, up}}'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "not"
+format_contains = 'hyperindexformat{\see{logical negation}}'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "not"
+format_contains = 'hyperindexformat{\see{slash}}'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "Vinogradov notation"
+format_contains = 'hyperindexformat{\see{equal'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "Vinogradov notation"
+format_contains = 'hyperindexformat{\see{greater'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "Vinogradov notation"
+format_contains = 'hyperindexformat{\see{less'
+
+[[merge]]
+consider_all_entries = true
+matches = "as math-mode accent"
+format_contains = 'hyperindexformat{\see{'
+
+# ------------------------------ accents -------------------------------
+
+[[merge]]
+consider_all_entries = true
+matches = [
+    "acute",
+    "caron",
+    "cedilla",
+    "circumflex",
+    "diaeresis",
+    "grave",
+    "hacek",
+    "krouzek",
+    "macron",
+    "ogonek",
+    "trema"
+]
+
+[[merge]]
+consider_all_entries = true
+top_matches = "breve"
+format_contains = '\see{accents'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "underline"
+format_contains = '\see{accents'
+
+[[merge]]
+consider_all_entries = true
+matches = [
+    "ring accent",
+    "umlaut"
+]
+format_contains = '\see{'
+
+[[merge]]
+top_matches = "A with ring"
+matches = "uppercase"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "hat"
+matches = "accent"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "biconditional"
+format_contains = '\see{arrow, double ended}'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "biconditional"
+format_contains = '\see{equivalence}'
+
+# --------------------------- Greek letters ----------------------------
+
+[[merge]]
+compare_lowercase = true
+top_matches = [
+    "alpha",
+    "beta",
+    "gamma",
+    "delta",
+    "epsilon",
+    "zeta",
+    "eta",
+    "theta",
+    "iota",
+    "kappa",
+    "lambda",
+    "mu",
+    "nu",
+    "xi",
+    "omicron",
+    "pi",
+    "rho",
+    "sigma",
+    "tau",
+    "upsilon",
+    "phi",
+    "chi",
+    "psi",
+    "omega",
+    "digamma",
+    "stigma",
+    "coppa",
+    "koppa",
+    "qoppa",
+    "sampi"
+]
+
+# -------------------------- metrical symbols --------------------------
+
+[[merge]]
+top_matches = "obelus"
+render_contains = ['(\METREObelus)', '(\METREobelus)']
+
+[[merge]]
+top_matches = "obelus"
+render_contains = ['(\METREObelusstar)', '(\METREobelusstar)']
+
+[[merge]]
+top_matches = "terminus"
+render_contains = ['(\METRETerminus)', '(\METREterminus)']
+
+[[merge]]
+top_matches = "terminus"
+render_contains = ['(\METRETerminusstar)', '(\METREterminusstar)']
+
+# ---------------------- astronomy and astrology -----------------------
+
+[[merge]]
+top_matches = "Earth"
+render_contains = ['\ABXEarth', '\STARTerra']
+
+[[merge]]
+top_matches = "Earth"
+render_contains = [
+    '\ABXvarEarth',
+    '\Earth',
+    '\STARvarTerra',
+    '\earth',
+    '\usym{2641}'
+]
+
+# ------------------------------- arrows -------------------------------
+
+[[merge]]
+top_matches = "arrowhead"
+
+[[merge]]
+top_matches = "arrow"
+not_matches = [
+    "dingbat",
+    "fletched",
+    "two, filled"
+]
+
+# ----------------------------- recycling ------------------------------
+
+[[merge]]
+top_contains = "recycling"
+render_contains = ['\Recycling', '\RECYCrecycle', '\usym{2672}']
+
+[[merge]]
+top_contains = "recycling"
+render_contains = ['reenpoint', '\PackingWaste']
+
+[[merge]]
+top_contains = "recycling"
+render_contains = ['\usym{267B}', '\AREVrecycle']
+
+[[merge]]
+top_contains = "recycling"
+render_contains = ['\twemoji{267b}', '\bcrecyclage']
+
+[[merge]]
+consider_all_entries = true
+top_matches = "Green Dot"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "Grune Punkt"
+
+# ------------------------------ bow ties ------------------------------
+
+[[merge]]
+top_contains = "bow tie"
+render_contains = [
+   '\FDSYMbowtie',
+   '\MNSbowtie',
+   '\BSKbowtie',
+   '\bowtie',
+   '\STIXbowtie',
+   '\Bowtie'
+]
+
+[[merge]]
+top_contains = "bow tie"
+render_contains = ['\BSKblackbowtie', '\STIXfbowtie']
+
+[[merge]]
+top_contains = "bow tie"
+render_contains = ['\FDSYMupbowtie', '\MNSvertbowtie']
+
+[[merge]]
+top_contains = "bow tie"
+render_contains = ['\BSKlblackbowtie', '\STIXlfbowtie']
+
+[[merge]]
+top_contains = "bow tie"
+render_contains = ['\BSKrblackbowtie', '\STIXrfbowtie']
+
+# ------------------------------- globes -------------------------------
+
+[[merge]]
+top_matches = "globe"
+matches = "showing Americas"
+
+[[merge]]
+top_matches = "globe"
+matches = "showing Asia-Australia"
+
+[[merge]]
+top_matches = "globe"
+matches = "showing Europe-Africa"
+
+[[merge]]
+top_matches = "globe"
+matches = "with meridians"
+
+# ------------------------------ subsets -------------------------------
+
+[[merge]]
+top_matches = "subset"
+render_regex = '\(\$?\\[A-Z]*sqsubseteq\$?\)|\(\\Sb(map|nch)\)'
+
+[[merge]]
+top_matches = "subset"
+render_regex = '\(\$?\\[A-Z]*sqsubseteqq\$?\)'
+
+[[merge]]
+top_matches = "subset"
+render_regex = '\(\$?\\[A-Z]*(var)?sqsubsetneq\$?\)'
+
+[[merge]]
+top_matches = "subset"
+render_regex = '\(\$?\\[A-Z]*(var)?sqsubsetneqq\$?\)'
+
+[[merge]]
+top_matches = "subset"
+render_regex = '\(\$?\\[A-Z]*nsqsubseteq\$?\)|\(\\NotSbmap\)'
+
+[[merge]]
+top_matches = "subset"
+render_regex = '\(\$?\\[A-Z]*nsqsubseteqq\$?\)|\(\\NotSbnch\)'
+
+[[merge]]
+top_matches = "subset"
+matches = "finite square, negated strict"
+
+[[merge]]
+top_matches = "subset"
+matches = "finite, strict square"
+
+[[merge]]
+top_matches = "subset"
+matches = "strict square"
+
+[[merge]]
+top_matches = "subset"
+matches = "strict square, negated"
+
+[[merge]]
+top_matches = "subset"
+render_regex = '\(\$?\\[A-Z]*subseteq\$?\)|\(\\Sbset\)'
+
+[[merge]]
+top_matches = "subset"
+render_regex = '\(\$?\\[A-Z]*subseteqq\$?\)'
+
+[[merge]]
+top_matches = "subset"
+matches = "finite, negated strict"
+
+[[merge]]
+top_matches = "subset"
+matches = "finite, strict"
+
+[[merge]]
+top_matches = "subset"
+matches = "strict"
+
+[[merge]]
+top_matches = "subset"
+matches = "ordinary, negated"
+render_contains = "subseteqq"
+
+# This rule must follow the previous rule.
+[[merge]]
+top_matches = "subset"
+matches = "ordinary, negated"
+
+[[merge]]
+top_matches = "subset"
+matches = "plus"
+
+[[merge]]
+top_matches = "subset"
+matches = "plus, strict"
+not_render_contains = '\STIXsubsetplus'
+
+[[merge]]
+top_matches = "subset"
+matches = "strict, negated"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "subbunch"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "submap"
+
+# ----------------------------- supersets ------------------------------
+
+[[merge]]
+top_matches = "superset"
+render_regex = '\(\$?\\[A-Z]*sqsupseteq\$?\)|\(\\Sb(map|nch)\)'
+
+[[merge]]
+top_matches = "superset"
+render_regex = '\(\$?\\[A-Z]*sqsupseteqq\$?\)'
+
+[[merge]]
+top_matches = "superset"
+render_regex = '\(\$?\\[A-Z]*(var)?sqsupsetneq\$?\)'
+
+[[merge]]
+top_matches = "superset"
+render_regex = '\(\$?\\[A-Z]*(var)?sqsupsetneqq\$?\)'
+
+[[merge]]
+top_matches = "superset"
+render_regex = '\(\$?\\[A-Z]*nsqsupseteq\$?\)|\(\\NotSbmap\)'
+
+[[merge]]
+top_matches = "superset"
+render_regex = '\(\$?\\[A-Z]*nsqsupseteqq\$?\)|\(\\NotSbnch\)'
+
+[[merge]]
+top_matches = "superset"
+matches = "finite square, negated strict"
+
+[[merge]]
+top_matches = "superset"
+matches = "finite, strict square"
+
+[[merge]]
+top_matches = "superset"
+matches = "strict square"
+
+[[merge]]
+top_matches = "superset"
+matches = "strict square, negated"
+
+[[merge]]
+top_matches = "superset"
+render_regex = '\(\$?\\[A-Z]*supseteq\$?\)'
+
+[[merge]]
+top_matches = "superset"
+render_regex = '\(\$?\\[A-Z]*supseteqq\$?\)'
+
+[[merge]]
+top_matches = "superset"
+matches = "finite, strict"
+
+[[merge]]
+top_matches = "superset"
+matches = "strict"
+
+[[merge]]
+top_matches = "superset"
+matches = "ordinary, negated"
+render_contains = "supseteqq"
+
+# This rule must follow the previous rule.
+[[merge]]
+top_matches = "superset"
+matches = "ordinary, negated"
+
+[[merge]]
+top_matches = "superset"
+matches = "plus"
+
+[[merge]]
+top_matches = "superset"
+matches = "plus, strict"
+not_render_contains = '\STIXsupsetplus'
+
+[[merge]]
+top_matches = "superset"
+matches = "proper"
+
+[[merge]]
+top_matches = "superset"
+matches = "strict, negated"
+
+[[merge]]
+top_matches = "superset"
+matches = "finite, negated strict"
+
+# ------------------------------- stars --------------------------------
+
+[[merge]]
+render_regex = '''
+whitestar|\
+\(\\(MNSmedstar|\
+     FiveStarOpen|\
+     MNSlargestar|\
+     starlet|\
+     fcStarA|\
+     usym\{2606\})\)\
+'''
+
+[[merge]]
+render_contains = [
+    '($\star$)',
+    '(\MNSthinstar)',
+    '(\MNSsmallstar)',
+    '(\ABXbigstar)',
+    '(\MNSfilledstar)',
+    '(\FDSYMmedstar)',
+    '(\FDSYMstar)',
+    '(\FDSYMmedblackstar)',
+    '(\FDSYMsmallblackstar)',
+    '(\STIXstar)',
+    '(\BSKstar)',
+    '($\bigstar$)',
+    '(\FiveStar)',
+    '($\ABXbigstar$)',
+    '(\usym{2605})',
+    '(\faStar)',
+    '(\FDSYMbigstar)',
+    '(\FDSYMlargeblackstar)',
+    '(\BSKbigstar)',
+    '(\MNSfilledlargestar)',
+    '(\STIXbigstar)',
+    '(\STIXmedblackstar)',
+    '(\starletfill)',
+    '(\ARUNEstar)'
+]
+
+[[merge]]
+top_matches = "star"
+matches = "jack"
+
+[[merge]]
+top_matches = "star"
+matches = "pentagram"
+
+[[merge]]
+top_matches = "star"
+matches = "of David"
+
+[[merge]]
+top_matches = "star"
+matches = "shadowed"
+
+[[merge]]
+top_matches = "star"
+matches = "twelve pointed"
+
+[[merge]]
+top_matches = "star"
+matches = "and crescent"
+
+[[merge]]
+top_matches = "star"
+render_contains = [
+    '(\EightStar)',
+    '(\EightStarBold)',
+    '(\EightStarTaper)',
+    '(\twemoji{2734})',
+    '(\usym{2734})',
+    '(\usym{2737})',
+    '(\usym{2738})'
+]
+
+[[merge]]
+top_matches = "star"
+render_contains = [
+    '(\EightStarConvex)',
+    '(\usym{2735})'
+]
+
+[[merge]]
+top_matches = "star"
+matches = "of David, dotted"
+
+[[merge]]
+top_matches = "star"
+render_contains = "hexstar"
+
+# This rule must follow the preceding rule.
+[[merge]]
+top_matches = "star"
+matches = "six pointed"
+
+[[merge]]
+top_matches = "star"
+matches = "pinwheel"
+
+[[merge]]
+top_matches = "star"
+render_contains = ['(\FourStar)', '(\usym{2726})']
+
+[[merge]]
+top_matches = "star"
+render_contains = ['(\FourStarOpen)', '(\usym{2727})']
+
+[[merge]]
+top_matches = "star"
+matches = "open center"
+
+[[merge]]
+top_matches = "star"
+matches = "outlined"
+
+[[merge]]
+top_matches = "star"
+matches = "filled center"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "star"
+matches = "Jewish"
+
+[[merge]]
+consider_all_entries = true
+matches = "Jewish star"
+
+# ------------------------------ squares -------------------------------
+
+[[merge]]
+top_matches = "square"
+not_contains = "with arrow"
+
+[[merge]]
+top_matches = "square"
+render_contains = ['\boxdotLeft', 'boxdotRight']
+
+[[merge]]
+top_matches = "square"
+render_contains = ['\boxdotleft', 'boxdotright']
+
+[[merge]]
+top_matches = "square"
+render_contains = ['\boxLeft', 'boxRight']
+
+[[merge]]
+top_matches = "square"
+render_contains = ['\boxleft', 'boxright']
+
+# ------------- check boxes, check marks, and cross marks --------------
+
+[[merge]]
+top_matches = "check box"
+
+[[merge]]
+top_matches = "check mark"
+
+[[merge]]
+top_matches = "cross mark"
+render_contains = [
+    '(\BigCross)',
+    '(\XSolid)',
+    '(\ifsCross)',
+    '(\textifsymbol[ifgeo]{14})'
+]
+
+# ------------------------------ crosses -------------------------------
+
+[[merge]]
+top_matches = "cross (crucifix)"
+matches = "Celtic"
+
+[[merge]]
+top_matches = "cross (crucifix)"
+matches = "pattee"
+
+[[merge]]
+top_matches = "cross (crucifix)"
+matches = "outlined"
+
+[[merge]]
+top_matches = "cross (crucifix)"
+matches = "shadowed"
+
+# ------------------------------- hearts -------------------------------
+
+[[merge]]
+top_matches = "heart"
+matches = "filled"
+
+[[merge]]
+top_matches = "heart"
+matches = "multiple"
+
+[[merge]]
+top_matches = "heart"
+matches = "red"
+
+[[merge]]
+top_matches = "heart"
+render_contains = [
+    '(\Heart)',
+    '(\faHeart[regular])',
+    '(\tiHeartOutline)'
+]
+
+# ------------------------- playing card suits -------------------------
+
+[[merge]]
+top_matches = "playing card suits"
+matches = "club"
+
+[[merge]]
+top_matches = "playing card suits"
+matches = "club, hollow"
+
+[[merge]]
+top_matches = "playing card suits"
+matches = "diamond"
+not_render_contains = '(\twemoji{2666})'
+
+[[merge]]
+top_matches = "playing card suits"
+matches = "diamond, filled"
+
+[[merge]]
+top_matches = "playing card suits"
+matches = "heart"
+not_render_contains = '(\twemoji{2665})'
+
+[[merge]]
+top_matches = "playing card suits"
+matches = "heart, filled"
+
+[[merge]]
+top_matches = "playing card suits"
+matches = "spade"
+
+[[merge]]
+top_matches = "playing card suits"
+matches = "spade, hollow"
+
+# ------------------------------- hands --------------------------------
+
+[[merge]]
+top_matches = "hand"
+matches = "rock sign"
+
+[[merge]]
+top_matches = "hand"
+matches = "paper sign"
+
+[[merge]]
+top_matches = "hand"
+matches = "scissors sign"
+
+[[merge]]
+top_matches = "hand"
+matches = "lizard sign"
+
+[[merge]]
+top_matches = "hand"
+matches = "Spock sign"
+
+[[merge]]
+top_matches = "hand"
+render_contains = '\twemoji{1f44d'
+
+# ----------------------------- plus signs -----------------------------
+
+[[merge]]
+top_matches = "plus"
+matches = "bold"
+
+[[merge]]
+top_matches = "plus"
+matches = "with triangle"
+
+[[merge]]
+top_matches = "plus"
+render_contains = ["circplus", "ringplus"]
+
+[[merge]]
+top_matches = "plus"
+render_contains = "pluscirc"
+
+[[merge]]
+top_matches = "plus"
+render_contains = ["dotplus", "DPlus"]
+
+[[merge]]
+top_matches = "plus"
+render_contains = "plusdot"
+
+[[merge]]
+top_matches = "plus"
+matches = "plus"
+not_render_contains = '\STIXtplus'
+
+# ------------------------------ currency ------------------------------
+
+[[merge]]
+top_matches = "dollar sign"
+render_contains = ['(\textdollar)', '(\ltextdollar)', '(\$)']
+
+[[merge]]
+top_matches = "pound"
+matches = "math mode"
+
+[[merge]]
+top_matches = "pound"
+not_render_contains = '\faPoundSign'
+
+# --------------------------- legal symbols ----------------------------
+
+[[merge]]
+top_matches = "legal symbols"
+not_matches = "public domain"
+
+[[merge]]
+top_matches = "legal symbols"
+not_render_contains = '\faCreativeCommonsPd*'
+
+# ---------------------------- equivalence -----------------------------
+
+[[merge]]
+top_matches = "equivalence"
+matches = "intuitionistic"
+
+[[merge]]
+top_matches = "equivalence"
+matches = "not intuitionistic"
+
+[[merge]]
+top_matches = "equivalence"
+matches = "material"
+
+[[merge]]
+top_matches = "equivalence"
+matches = "not material"
+
+[[merge]]
+top_matches = "equivalence"
+matches = "weak material"
+
+[[merge]]
+top_matches = "equivalence"
+matches = "not weak material"
+
+# ------------------------------ equality ------------------------------
+
+[[merge]]
+top_matches = "equal"
+matches = [
+    "asymptotically",
+    "asymptotically, negated",
+    "dots, falling",
+    "dots, falling, negated",
+    "dots, negated",
+    "dots, rising",
+    "dots, rising, negated",
+    "equal",
+    "extensible",
+    "hat",
+    "hat, negated",
+    "negated",
+    "or greater than, negated",
+    "or less than, negated",
+    "or precedes",
+    "or precedes, negated",
+    "or succeeds",
+    "or succeeds, negated",
+    "parallel",
+    "star",
+    "triangle",
+    "triangle, negated",
+    "V",
+    "wedge"
+]
+
+[[merge]]
+top_matches = "equal"
+matches = "dots"
+not_render_contains = "ddotseq"
+
+# colon following a full equal sign
+[[merge]]
+top_matches = "equal"
+matches = "colon, double"
+render_contains = ["Eqqcolon", "equalscoloncolon"]
+
+# colon following a half equal sign
+[[merge]]
+top_matches = "equal"
+matches = "colon, double"
+render_contains = "Eqcolon"
+
+# bump with a full equal sign below
+# This rule must appear before the half equal sign rules.
+[[merge]]
+top_matches = "equal"
+matches = "bump"
+render_contains = "bumpeqq"
+
+# negated bump with a full equal sign below
+# This rule must appear before the half equal sign rules.
+[[merge]]
+top_matches = "equal"
+matches = "bump, negated"
+render_contains = "bumpeqq"
+
+# bump with a half equal sign below
+[[merge]]
+top_matches = "equal"
+matches = "bump"
+render_contains = ["bumpeq", "bumpedeq"]
+
+# negated bump with a half equal sign below
+[[merge]]
+top_matches = "equal"
+matches = "bump, negated"
+render_contains = ["bumpeq", "bumpedeq"]
+
+# upper and lower bump
+[[merge]]
+top_matches = "equal"
+matches = "bump"
+render_contains = ["Bumpeq", "Bumpedeq"]
+
+# lower bump
+[[merge]]
+top_matches = "equal"
+matches = "bump"
+render_contains = ["eqbump", "eqbumped"]
+
+# negated lower bump
+[[merge]]
+top_matches = "equal"
+matches = "bump, negated"
+render_contains = ["neqbump", "neqbumped"]
+
+# negated upper and lower bump
+[[merge]]
+top_matches = "equal"
+matches = "bump, negated"
+render_contains = "nBumpeq"
+
+# full equal followed by a colon
+# This rule should precede the following one.
+[[merge]]
+top_matches = "equal"
+matches = "colon"
+render_contains = [
+    "eqqcolon",
+    "equalscolon",
+    '\ABXeqcolon',
+    '\FDSYMeqcolon',
+    '\STIXeqcolon'
+]
+
+# half equal followed by a colon
+[[merge]]
+top_matches = "equal"
+matches = "colon"
+render_contains = "eqcolon"
+
+# dot below an equal sign
+# This rule should precede the following one.
+[[merge]]
+top_matches = "equal"
+matches = "dot"
+render_contains = ["eqdot", "botdoteq"]
+
+# dot above an equal sign
+[[merge]]
+top_matches = "equal"
+matches = "dot"
+render_contains = "doteq"
+
+# negated dot below an equal sign
+[[merge]]
+top_matches = "equal"
+matches = "dot, negated"
+render_contains = "neqdot"
+
+# negated dot above an equal sign
+[[merge]]
+top_matches = "equal"
+matches = "dot, negated"
+render_contains = "ndoteq"
+
+# ring above an equal sign
+[[merge]]
+top_matches = "equal"
+matches = "ring"
+render_contains = "eqcirc"
+
+# ring within an equal sign
+[[merge]]
+top_matches = "equal"
+matches = "ring"
+render_contains = "circeq"
+
+# equal to or greater than, slanted single bar
+[[merge]]
+top_matches = "equal"
+matches = "or greater than"
+not_render_contains = [
+   '(\STIXeqqslantgtr)',
+   '(\STIXeqgtr)',
+   '(\STIXeqqgtr)'
+]
+
+# equal to or less than, slanted single bar
+[[merge]]
+top_matches = "equal"
+matches = "or less than"
+not_render_contains = [
+    '(\STIXeqless)',
+    '(\STIXeqqslantless)',
+    '(\STIXeqqless)'
+]
+
+# negated ring above an equal sign
+[[merge]]
+top_matches = "equal"
+matches = "ring, negated"
+render_contains = "neqcirc"
+
+# negated ring within an equal sign
+[[merge]]
+top_matches = "equal"
+matches = "ring, negated"
+render_contains = "ncirceq"
+
+# "similar to" below a half equal sign
+[[merge]]
+top_matches = "equal"
+matches = "similar"
+render_contains = "eqsim"
+not_render_contains = "backeqsim"
+
+# negated "similar to" below a half equal sign
+[[merge]]
+top_matches = "equal"
+matches = "similar, negated"
+render_contains = "neqsim"
+
+# not equal to
+[[merge]]
+consider_all_entries = true
+top_matches = "not equal"
+
+# ------------------------- smiles and frowns --------------------------
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(small)?(sq)?smile\b|\\SInCoh\b|\\CMLLsincoh\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(small)?(sq)?frown\b|\\SCoh\b|\\CMLLscoh\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?(sq)?smilefrown\b|\\Coh\b|\\CMLLcoh\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?frownsmile\b|\\InCoh\b|\\CMLLincoh\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?(sq)?smilefrowneq\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?(sq)?frownsmileeq\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?(sq)?frowneqsmile\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?(sq)?smileeqfrown\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)n?(sq)?smilefrown\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?(double|triple)smile\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?(double|triple)frown\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?doublesmileeq\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?doublefrowneq\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?frowneq\b'
+not_render_contains = ['\FDSYMfrowneq', '\FDSYMnfrowneq']   # Double equals
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?smileeq\b'
+not_render_contains = ['\FDSYMsmileeq', '\FDSYMnsmileeq']   # Double equals
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?eqfrown\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?eqsmile\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?frowneqsmile\b'
+
+[[merge]]
+top_matches = "smiles and frowns"
+render_regex = '\\([A-Z]+)?n?(sq)?smileeqfrown\b'
+
+# ---------------------------- subtraction -----------------------------
+
+[[merge]]
+top_matches = "minus"
+matches = "minus"
+
+[[merge]]
+top_matches = "minus"
+matches = "colon"
+
+[[merge]]
+top_matches = "minus"
+matches = "dot"
+render_contains = ["dotminus", "DMinus"]
+
+[[merge]]
+top_matches = "minus"
+matches = "dot"
+render_contains = "minusdot"
+
+[[merge]]
+top_matches = "minus"
+matches = "dots"
+render_contains = "dotsminusdots"
+
+[[merge]]
+top_matches = "minus"
+matches = "with circle overlay"
+
+# This rule should precede the "backneg"-matching rule.
+[[merge]]
+top_matches = "minus"
+matches = "hooked"
+render_contains = ["hookupminus", "invbackneg"]
+
+[[merge]]
+top_matches = "minus"
+matches = "hooked"
+render_contains = ["hookdownminus", "backneg"]
+
+[[merge]]
+top_matches = "minus"
+matches = "hooked"
+render_contains = ["minushookup", "invneg"]
+
+# This rule should follow all of the other hooked-minus rules.
+[[merge]]
+top_matches = "minus"
+matches = "hooked"
+render_contains = ["minushookdown", "neg"]
+
+[[merge]]
+top_matches = "minus"
+matches = "dots"
+render_contains = "minusrdots"
+
+[[merge]]
+top_matches = "minus"
+matches = "dots"
+render_contains = "minusfdots"
+
+# ------------------------------ division ------------------------------
+
+[[merge]]
+top_matches = "division"
+matches = "long"
+
+[[merge]]
+top_matches = "division"
+matches = "times"
+
+# Slash
+[[merge]]
+top_matches = "division"
+render_contains = [
+    '(\Divide)',
+    '(\Divides)',
+    '(\FDSYMdivslash)',
+    '(\FDSYMsmalldivslash)',
+    '(\MNSneswline)',
+    '(\MVDivision)'
+]
+
+# Line with dots
+[[merge]]
+top_matches = "division"
+render_contains = [
+    '($\div$)',
+    '(\BSKdiv)',
+    '(\Divd)',
+    '(\FDSYMdiv)',
+    '(\MNSdiv)',
+    '(\STIXdiv)',
+    '(\textdiv)'
+]
+
+[[merge]]
+top_matches = "division"
+matches = "dingbat"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "division times"
+
+[[merge]]
+top_matches = "eth"
+
+[[merge]]
+top_matches = "consequence relation"
+render_contains = 'stile}'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "divides"
+format_contains = 'see{vertical bar, negated}'
+
+[[merge]]
+consider_all_entries = true
+top_matches = "divides"
+format_contains = 'see{vertical bar}'
+
+# -------------------------- assorted letters --------------------------
+
+# ... tailed letters ...
+
+[[merge]]
+top_matches = "tailed letters"
+matches = "c"
+
+[[merge]]
+top_matches = "tailed letters"
+matches = "j"
+
+[[merge]]
+top_matches = "tailed letters"
+matches = "esh"
+
+[[merge]]
+top_matches = "tailed letters"
+matches = "l"
+
+[[merge]]
+top_matches = "tailed letters"
+matches = "r"
+
+[[merge]]
+top_matches = "tailed letters"
+render_contains = ['\textrtailn', '\tailn']
+
+[[merge]]
+top_matches = "tailed letters"
+render_contains = ['\PHONFCtextltailn', '\textltailn']
+
+[[merge]]
+top_matches = "tailed letters"
+render_contains = ['\PHONFCtextrtaild', '\taild']
+
+[[merge]]
+top_matches = "tailed letters"
+render_contains = ['\textrtailt', '\tailt']
+
+[[merge]]
+top_matches = "tailed letters"
+render_contains = ['\textctt', '\tailt']
+
+[[merge]]
+top_matches = "tailed letters"
+render_contains = ['\textctz', '\curlyz']
+
+# ... rotated letters ...
+
+[[merge]]
+top_matches = "rotated letters"
+render_contains = ["textturna", "inva"]
+
+[[merge]]
+top_matches = "rotated letters"
+render_contains = ["textturnscripta", "invscripta", "rotvara"]
+
+[[merge]]
+top_matches = "rotated letters"
+not_matches = "a"
+
+# ... other letters ...
+
+[[merge]]
+top_matches = "a"
+
+[[merge]]
+top_matches = "g"
+not_render_contains = '\textg'
+
+[[merge]]
+top_matches = "inverted letters"
+matches = "r, small caps"
+
+[[merge]]
+consider_all_entries = true
+top_matches = "rotated letters"
+matches = "e"
+
+[[merge]]
+top_matches = "o"
+matches = "open"
+
+[[merge]]
+top_matches = "F"
+matches = "inverted"
+
+# ------------------------------ corners -------------------------------
+
+[[merge]]
+top_matches = "corner"
+render_contains = ["llcorner", "lftbotcorner", "FS"]
+
+[[merge]]
+top_matches = "corner"
+render_contains = ["lrcorner", "rtbotcorner"]
+
+[[merge]]
+top_matches = "corner"
+render_contains = [
+    "ulcorner",
+    "lfttopcorner",
+    "textopencorner"
+]
+
+[[merge]]
+top_matches = "corner"
+render_contains = [
+    "urcorner",
+    "rttopcorner",
+    '\corner',
+    "textcorner"
+]
+
+# ----------------------- approximately equal to -----------------------
+
+[[merge]]
+top_matches = "approximately equal to"
+render_regex = '\(\$?\\[A-Z]*approxeq\$?\)'
+
+[[merge]]
+top_matches = "approximately equal to"
+render_regex = '\(\$?\\[A-Z]*(?:thick)?approx\$?\)'
+
+[[merge]]
+top_matches = "approximately equal to"
+render_regex = '\(\$?\\[A-Z]*napproxeq\$?\)'
+
+[[merge]]
+top_matches = "approximately equal to"
+render_regex = '\(\$?\\[A-Z]*n(?:thick)?approx\$?\)'
+
+# ----------------------------- rhombuses ------------------------------
+
+[[merge]]
+top_matches = "rhombus"
+not_matches = [
+    "curved, quartered",
+    "dotted, with arrow",
+    "half filled",
+    "patterned",
+    "quartered",
+    "shadowed",
+    "with arrow"
+]
+
+[[merge]]
+top_matches = "rhombus"
+render_contains = ['\DiamonddotLeft', '\DiamonddotRight']
+
+[[merge]]
+top_matches = "rhombus"
+render_contains = ['\Diamonddotleft', '\Diamonddotright']
+
+[[merge]]
+top_matches = "rhombus"
+render_contains = ['\DiamondLeft', '\DiamondRight']
+
+[[merge]]
+top_matches = "rhombus"
+render_contains = ['\Diamondleft', '\Diamondright']
+
+[[merge]]
+top_matches = "rhombus"
+render_contains = ['\STIXdiamondtopblack', '\rhombusfillha']
+
+[[merge]]
+top_matches = "rhombus"
+render_contains = [
+    '\STIXdiamondbotblack',
+    "LowerDiamond",
+    '\rhombusfillhb'
+]
+
+[[merge]]
+top_matches = "rhombus"
+render_contains = ['\STIXdiamondleftblack', '\rhombusfillhl']
+
+[[merge]]
+top_matches = "rhombus"
+render_contains = [
+    '\STIXdiamondrightblack',
+    "RightDiamond",
+    '\rhombusfillhr'
+]
+
+[[merge]]
+top_matches = "rhombus"
+matches = "quartered"
+render_contains = ["diamondplus", "rhombuslinevh", "QuarteredDiamond"]
+
+[[merge]]
+top_matches = "rhombus"
+matches = "quartered"
+render_contains = ["diamondtimes", "CrossedDiamond"]
+
+# ------------------------------ circles -------------------------------
+
+[[merge]]
+top_matches = "circle"
+not_matches = [
+    "arrow",
+    "enclosing",
+    "half",
+    "half filled",
+    "quarter marked",
+    "striped",
+    "white on black, half"
+]
+
+[[merge]]
+top_matches = "circle"
+matches = "enclosing"
+render_contains = '\textcircled'
+
+[[merge]]
+compare_lowercase = true
+top_matches = "circle"
+matches = "half filled"
+render_contains = ["left", '\circletfillhl']
+
+[[merge]]
+compare_lowercase = true
+top_matches = "circle"
+matches = "half filled"
+render_contains = ["right", '\circletfillhr']
+
+[[merge]]
+top_matches = "circle"
+matches = "half filled"
+render_contains = ["bottom", '\circletfillhb']
+
+[[merge]]
+top_matches = "circle"
+matches = "half filled"
+render_contains = ["top", '\circletfillha']
+
+[[merge]]
+top_matches = "circle"
+matches = "striped"
+render_contains = ['\STIXcirclevertfill', '\usym{1F534}']
+
+# ---------------------------- greater than ----------------------------
+
+# ... easy cases ...
+
+[[merge]]
+top_matches = "greater than"
+matches = [
+    "greater than",
+    "but not approximately equal to",
+    "but not similar to",
+    "circle",
+    "dotted",
+    "dotted, negated",
+    "much, negated",
+    "negated",
+    "or approximately equal to",
+    "or approximately equal to, negated",
+    "or less than, negated",
+    "or less than, overlapping",
+    "or similar to, negated",
+    "very much, negated"
+]
+
+# ... regular ...
+
+[[merge]]
+top_matches = "greater than"
+matches = "closed"
+render_contains = "gtrclosed"
+
+[[merge]]
+top_matches = "greater than"
+matches = "closed"
+render_contains = "cc"
+
+[[merge]]
+top_matches = "greater than"
+matches = "much"
+render_contains = ["ggg", "Gt"]
+
+[[merge]]
+top_matches = "greater than"
+matches = "much"
+not_render_contains = ["ggg", "Gt"]
+
+[[merge]]
+top_matches = "greater than"
+matches = "but not equal to"
+render_contains = "vertneqq"
+
+[[merge]]
+top_matches = "greater than"
+matches = "but not equal to"
+render_contains = "gneqq"
+
+[[merge]]
+top_matches = "greater than"
+matches = "but not equal to"
+render_contains = "gneq"
+not_render_contains = "gneqq"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to"
+render_contains = ["geqslant", "SbGre", '($\ABXgeq$)']
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to"
+render_contains = "geqq"
+not_render_contains = "geqqslant"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to"
+render_contains = ["ge", "Gre"]
+not_render_contains = [
+    "geqq",
+    "geqslant",
+    "SbGre",
+    "LargerOrEqual",
+    "faGreaterThanEqual"
+]
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to or less than"
+render_contains = "eqqless"
+not_render_contains = "slant"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to or less than"
+render_contains = "eqless"
+not_render_contains = "slant"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to or less than"
+render_contains = ["eqlessslant", "eqslantless", "gesl"]
+not_render_contains = "gesles"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, closed"
+render_contains = "geqclosed"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, closed"
+render_contains = "cc"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, dotted"
+render_contains = "geqdot"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, dotted"
+render_contains = ["geqslantdot", "gesdot)"]
+
+[[merge]]
+top_matches = "greater than"
+matches = "or less than"
+render_contains = "gtrless"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or similar to"
+not_render_contains = "slant"
+
+[[merge]]
+top_matches = "greater than"
+matches = "very much"
+not_render_contains = "nest"
+
+# ... negated ...
+
+[[merge]]
+top_matches = "greater than"
+matches = "closed, negated"
+render_contains = "gtrclosed"
+
+[[merge]]
+top_matches = "greater than"
+matches = "closed, negated"
+render_contains = "cc"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to or less than, negated"
+render_contains = "eqqless"
+not_render_contains = "slant"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to or less than, negated"
+render_contains = "eqless"
+not_render_contains = "slant"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to or less than, negated"
+render_contains = ["eqlessslant", "eqslantless", "gesl"]
+not_render_contains = "gesles"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, closed, negated"
+render_contains = "geqclosed"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, closed, negated"
+render_contains = "cc"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, dotted, negated"
+render_contains = "ngeqdot"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, dotted, negated"
+render_contains = ["ngeqslantdot", "ngesdot)"]
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, negated"
+render_contains = ["ngeqslant", '$\ABXngeq$', '(\NotSbGre)']
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, negated"
+render_contains = "ngeqq"
+
+[[merge]]
+top_matches = "greater than"
+matches = "or equal to, negated"
+render_contains = ["nge", '$\ABXnvargeq$', '(\NotGre)']
+not_render_contains = ["ngeqq", "ngeqslant"]
+
+# ----------------------------- less than ------------------------------
+
+# ... easy cases ...
+
+[[merge]]
+top_matches = "less than"
+matches = [
+    "less than",
+    "but not approximately equal to",
+    "but not similar to",
+    "circle",
+    "dotted",
+    "dotted, negated",
+    "much, negated",
+    "negated",
+    "or approximately equal to",
+    "or approximately equal to, negated",
+    "or greater than",
+    "or greater than, negated",
+    "or similar to, negated",
+    "very much, negated"
+]
+
+# ... regular ...
+
+[[merge]]
+top_matches = "less than"
+matches = "closed"
+render_contains = "lessclosed"
+
+[[merge]]
+top_matches = "less than"
+matches = "closed"
+render_contains = "cc"
+
+[[merge]]
+top_matches = "less than"
+matches = "but not equal to"
+render_contains = "vertneqq"
+
+[[merge]]
+top_matches = "less than"
+matches = "but not equal to"
+render_contains = "lneqq"
+
+[[merge]]
+top_matches = "less than"
+matches = "but not equal to"
+render_contains = "lneq"
+not_render_contains = "lneqq"
+
+[[merge]]
+top_matches = "less than"
+matches = "much"
+render_contains = ["lll", "Lt"]
+
+[[merge]]
+top_matches = "less than"
+matches = "much"
+not_render_contains = ["lll", "Lt"]
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to"
+render_contains = ["leqslant", "SbLse", '($\ABXleq$)']
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to"
+render_contains = "leqq"
+not_render_contains = "leqqslant"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to"
+render_contains = ["leq", "Lse", 'le)']
+not_render_contains = ["leqq", "leqslant", "SbLse"]
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to or greater than"
+render_contains = "eqqgtr"
+not_render_contains = "slant"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to or greater than"
+render_contains = "eqgtr"
+not_render_contains = "slant"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to or greater than"
+render_contains = ["eqgtrslant", "eqslantgtr", "lesg"]
+not_render_contains = "lesges"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, closed"
+render_contains = "leqclosed"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, closed"
+render_contains = "cc"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, dotted"
+render_contains = "leqdot"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, dotted"
+render_contains = ["leqslantdot", "lesdot)"]
+
+[[merge]]
+top_matches = "less than"
+matches = "or similar to"
+not_render_contains = "slant"
+
+[[merge]]
+top_matches = "less than"
+matches = "very much"
+not_render_contains = "nest"
+
+# ... negated ...
+
+[[merge]]
+top_matches = "less than"
+matches = "closed, negated"
+render_contains = "lessclosed"
+
+[[merge]]
+top_matches = "less than"
+matches = "closed, negated"
+render_contains = "cc"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to or greater than, negated"
+render_contains = ["eqqgtr", "lesg"]
+not_render_contains = "slant"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to or greater than, negated"
+render_contains = "eqgtr"
+not_render_contains = "slant"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to or greater than, negated"
+render_contains = ["eqgtrslant", "eqslantgtr"]
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, closed, negated"
+render_contains = "leqclosed"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, closed, negated"
+render_contains = "cc"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, dotted, negated"
+render_contains = "nleqdot"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, dotted, negated"
+render_contains = ["nleqslantdot", "nlesdot)"]
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, negated"
+render_contains = ["nleqslant", '$\ABXnleq$', '(\NotSbLse)']
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, negated"
+render_contains = "nleqq"
+
+[[merge]]
+top_matches = "less than"
+matches = "or equal to, negated"
+render_contains = ["nle", '$\ABXnvarleq$', '(\NotLse)']
+not_render_contains = ["nleqq", "nleqslant"]
+
+# ------------------------------- angles -------------------------------
+
+[[merge]]
+top_matches = "angle"
+matches = [
+    "angle",
+    "measured, with arrow",
+    "spherical",
+    "obtuse",
+    "with underbar"
+]
+
+[[merge]]
+top_matches = "angle"
+matches = "right"
+render_contains = "measuredrightangle"
+
+[[merge]]
+top_matches = "angle"
+matches = "right"
+render_contains = "rightanglemdot"
+
+[[merge]]
+top_matches = "angle"
+matches = "right"
+render_contains = ["rightanglesqr", "rightanglesquare"]
+
+# The following rule should appear last in this section.
+[[merge]]
+top_matches = "angle"
+matches = "right"
+render_contains = "rightangle"
+
+# ------------------------------- music --------------------------------
+
+# Barred, rising eighth notes
+[[merge]]
+top_matches = "musical notes"
+render_contains = [
+    '(\STIXtwonotes)',
+    '(\twoBeamedQuavers)',
+    '(\usym{1F39C})'
+]
+
+# Barred, rising eighth notes, thick
+[[merge]]
+top_matches = "musical notes"
+render_contains = ['(\faMusic)', '(\tiNotes)']
+
+# Barred, falling eighth notes
+[[merge]]
+top_matches = "musical notes"
+render_contains = [
+    '(\twonotes)',
+    '(\usym{1F39D})',
+    '(\usym{266B})'
+]
+
+[[merge]]
+consider_all_entries = true
+top_matches = "meter, musical"
+format_contains = "see{alla breve}"
+
+[[merge]]
+top_matches = "antidiple"
+render_contains = ['(\METREAntidiple)', '(\METREantidiple)']
+
+[[merge]]
+top_matches = "antidiple"
+render_contains = ['(\METREAntidiplestar)', '(\METREantidiplestar)']
+
+[[merge]]
+top_matches = "sharp"
+matches = "double"
+
+# ----------------------------- similarity -----------------------------
+
+[[merge]]
+top_matches = "similar"
+matches = [
+    "similar",
+    "dots, rising",
+    "dots, vertical",
+    "dotted",
+    "negated",
+    "or equal to, dotted",
+    "or not equal to",
+    "reversed",
+    "reversed, negated",
+    "thick"
+]
+
+[[merge]]
+top_matches = "similar"
+matches = "or equal to"
+render_contains = "cong"
+
+[[merge]]
+top_matches = "similar"
+matches = "or equal to"
+render_contains = ["simeq", "Sm"]
+
+[[merge]]
+top_matches = "similar"
+matches = "or equal to, negated"
+render_contains = "ncong"
+
+[[merge]]
+top_matches = "similar"
+matches = "or equal to, negated"
+render_contains = ["nsime", '\NotSm']
+
+[[merge]]
+top_matches = "similar"
+matches = "or equal to, reversed"
+render_contains = "backcong"
+
+[[merge]]
+top_matches = "similar"
+matches = "or equal to, reversed"
+render_contains = "backsimeq"
+
+[[merge]]
+top_matches = "similar"
+matches = "or equal to, reversed, negated"
+render_contains = "nbackcong"
+
+[[merge]]
+top_matches = "similar"
+matches = "or equal to, reversed, negated"
+render_contains = "nbacksimeq"
+
+# ------------------------------ precedes ------------------------------
+
+[[merge]]
+top_matches = "precedes"
+matches = [
+    "precedes",
+    "negated",
+    "or approximately equal to",
+    "or approximately equal to, negated",
+    "or not approximately equal to",
+    "or not similar to",
+    "or similar to",
+    "or similar to, negated",
+    "under relation"
+]
+
+[[merge]]
+top_matches = "precedes"
+matches = "double"
+render_contains = ['\BSKllcurly', '\STIXPrec']
+
+[[merge]]
+top_matches = "precedes"
+matches = "or equal to"
+render_contains = 'preceqq'
+
+[[merge]]
+top_matches = "precedes"
+matches = "or equal to"
+render_contains = ['preceq', 'Preq']
+not_render_contains = 'preceqq'
+
+[[merge]]
+top_matches = "precedes"
+matches = "or equal to"
+render_contains = 'preccurlyeq'
+
+[[merge]]
+top_matches = "precedes"
+matches = "or not equal to"
+render_contains = "precneqq"
+
+[[merge]]
+top_matches = "precedes"
+matches = "or not equal to"
+render_contains = "precneq"
+not_render_contains = "precneqq"
+
+[[merge]]
+top_matches = "precedes"
+matches = "or equal to, negated"
+render_contains = 'npreceqq'
+
+[[merge]]
+top_matches = "precedes"
+matches = "or equal to, negated"
+render_contains = ['npreceq', 'NotPreq']
+not_render_contains = 'npreceqq'
+
+[[merge]]
+top_matches = "precedes"
+matches = "or equal to, negated"
+render_contains = 'npreccurlyeq'
+
+# ------------------------------ succeeds ------------------------------
+
+[[merge]]
+top_matches = "succeeds"
+matches = [
+    "succeeds",
+    "negated",
+    "or approximately equal to",
+    "or approximately equal to, negated",
+    "or not approximately equal to",
+    "or not similar to",
+    "or similar to",
+    "or similar to, negated",
+    "under relation"
+]
+
+[[merge]]
+top_matches = "succeeds"
+matches = "double"
+render_contains = ['\BSKggcurly', '\STIXSucc']
+
+[[merge]]
+top_matches = "succeeds"
+matches = "or equal to"
+render_contains = 'succeqq'
+
+[[merge]]
+top_matches = "succeeds"
+matches = "or equal to"
+render_contains = ['succeq', 'Sucq']
+not_render_contains = 'succeqq'
+
+[[merge]]
+top_matches = "succeeds"
+matches = "or equal to"
+render_contains = 'succcurlyeq'
+
+[[merge]]
+top_matches = "succeeds"
+matches = "or not equal to"
+render_contains = "succneqq"
+
+[[merge]]
+top_matches = "succeeds"
+matches = "or not equal to"
+render_contains = "succneq"
+not_render_contains = "succneqq"
+
+[[merge]]
+top_matches = "succeeds"
+matches = "or equal to, negated"
+render_contains = 'nsucceqq'
+
+[[merge]]
+top_matches = "succeeds"
+matches = "or equal to, negated"
+render_contains = ['nsucceq', 'NotSucq']
+not_render_contains = 'nsucceqq'
+
+[[merge]]
+top_matches = "succeeds"
+matches = "or equal to, negated"
+render_contains = 'nsucccurlyeq'
+
+# ------------------------------ harpoons ------------------------------
+
+[[merge]]
+top_matches = "harpoon"
+matches = [
+    "harpoon",
+    "barred head",
+    "barred tail",
+    "barred, parallel",
+    "double ended, opposite sides",
+    "double ended, opposite sides, extensible",
+    "double ended, opposite sides, long",
+    "double ended, opposite sides, negated",
+    "double ended, same side",
+    "double, opposite sides",
+    "double, opposite sides, negated",
+    "double, same side",
+    "extensible",
+    "long",
+    "negated"
+]
+
+[[merge]]
+top_matches = "harpoon"
+matches = "double, opposite sides, extensible"
+render_contains = '\auto'
+
+[[merge]]
+top_matches = "harpoon"
+matches = "double, opposite sides, extensible"
+not_render_contains = '\auto'

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-music.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-music.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-music.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,359 @@
+##############################################
+# Categorize music symbols.                  #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ... early special cases ...
+[[rewrite]]
+render_contains = '(\AREVsixteenthnote)'
+item = "musical notes"
+
+# ... conversions from British to American terms ...
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(?:mus)?semibreve(.*)$'
+item = 'wholenote\1'
+continue = true
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(?:mus)?minim(.*)$'
+item = 'halfnote\1'
+continue = true
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(?:mus)?crotchet(.*)$'
+item = 'quarternote\1'
+continue = true
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(?:mus)?quaver(.*)$'
+item = 'eighthnote\1'
+continue = true
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(?:mus)?semiquaver(.*)$'
+item = 'sixteenthnote\1'
+continue = true
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(?:mus)?demisemiquaver(.*)$'
+item = 'thirtysecondnote\1'
+continue = true
+
+# ... musical notes ...
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(full|whole|half|quarter|eighth|sixteenth)note(down)?$'
+item = '\1 note'
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(full|whole|half|quarter|eighth|sixteenth)notedotted(down)?$'
+item = ['\1 note', "dotted"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(full|whole|half|quarter|eighth|sixteenth)notedotteddouble(down)?$'
+item = ['\1 note', "double dotted"]
+
+[[rewrite]]
+regex = '^mus(Whole|Half|Quarter|Eighth|Sixteenth)$'
+lowercase_item = true
+item = '\1 note'
+
+[[rewrite]]
+regex = '^mus(Whole|Half|Quarter|Eighth|Sixteenth)Dotted$'
+lowercase_item = true
+item = ['\1 note', "dotted"]
+
+[[rewrite]]
+matches = "musSemiminim"
+item = "quarter note"
+
+[[rewrite]]
+matches = "musSeminiminimDotted"
+item = ["quarter note", "dotted"]
+
+[[rewrite]]
+matches = ["musCorchea", "musFusa"]
+item = "eighth note"
+
+[[rewrite]]
+matches = ["musCorcheaDotted", "musFusaDotted"]
+item = ["eighth note", "dotted"]
+
+[[rewrite]]
+compare_lowercase = true
+matches = [
+    "thirtysecondnote",
+    "thirtysecondnotedown",
+    "musthirtysecond"
+]
+item = "thirty-second note"
+
+[[rewrite]]
+compare_lowercase = true
+matches = [
+    "thirtysecondnotedotted",
+    "thirtysecondnotedotteddown",
+    "musthirtyseconddotted"
+]
+item = ["thirty-second note", "dotted"]
+
+[[rewrite]]
+compare_lowercase = true
+matches = ["thirtysecondnotedotteddouble", "thirtysecondnotedotteddoubledown"]
+item = ["thirty-second note", "double dotted"]
+
+[[rewrite]]
+matches = "musSixtyFourth"
+item = "sixty-fourth note"
+
+[[rewrite]]
+matches = "musSixtyFourthDotted"
+item = ["sixty-fourth note", "dotted"]
+
+# ... rests ...
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(full|whole|half|quarter|eighth|sixteenth)\s*note\s*rest$'
+item = ['\1 note', "rest"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(full|whole|half|quarter|eighth|sixteenth)noterestdotted$'
+item = ['\1 note', "rest, dotted"]
+
+[[rewrite]]
+matches = "qp"
+item = ["quarter note", "rest"]
+
+[[rewrite]]
+matches = "ds"
+item = ["eighth note", "rest"]
+
+[[rewrite]]
+matches = "qs"
+item = ["sixteenth note", "rest"]
+
+[[rewrite]]
+matches = ["hs", "thirty-second note rest"]
+item = ["thirty-second note", "rest"]
+
+[[rewrite]]
+matches = "qqs"
+item = ["sixty-fourth note", "rest"]
+
+[[rewrite]]
+matches = ["fermata", "fermataup"]
+item = "fermata"
+
+[[rewrite]]
+matches = "fermatadown"
+item = ["fermata", "inverted"]
+
+[[rewrite]]
+contains = "BeamedQuaver"
+word = "musical notes"
+
+[[rewrite]]
+matches = [
+    "musical note",
+    "music",
+    "multiple musical notes",
+    "twonotes",
+    "beamed ascending musical notes",
+    "beamed descending musical notes",
+    "beamed eighth notes",
+    "beamed sixteenth notes",
+    "textmusicalnote"
+]
+word = "musical notes"
+
+# ... sharps, flats, and naturals ...
+
+[[rewrite]]
+matches = [
+    "flat",
+    "fl",
+    "musFlat",
+    "music flat sign"
+]
+item = "flat"
+
+[[rewrite]]
+matches = ["flatflat", "musDoubleFlat"]
+item = ["flat", "double"]
+
+[[rewrite]]
+matches = [
+    "sharp",
+    "sh",
+    "music sharp sign",
+    "musSharp"
+]
+item = "sharp"
+
+[[rewrite]]
+matches = [
+    "natural",
+    "na",
+    "musNatural",
+    "music natural sign"
+]
+item = "natural"
+
+[[rewrite]]
+matches = ["doublesharp", "musDoubleSharp"]
+item = ["sharp", "double"]
+
+[[rewrite]]
+prefix = "sharpSlash"
+item = ["sharp", "with extra slashes and stems"]
+
+# ... clefs ...
+
+[[rewrite]]
+matches = ["clefC", "clefCInline"]
+item = ["clefs", "alto"]
+
+[[rewrite]]
+matches = ["clefF", "clefFInline", "clefa"]
+item = ["clefs", "bass"]
+
+[[rewrite]]
+matches = ["clefG", "clefGInline", "clesol"]
+item = ["clefs", "treble"]
+
+[[rewrite]]
+regex = '^(small)?([a-z]+)clef$'
+item = ["clefs", '\2']
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = "oldGclef"
+item = ["clefs", "old G"]
+
+[[rewrite]]
+regex = '^([a-z]+)([CFG])clef$'
+item = ["clefs", '\1 \2']
+word = '\1 \2'
+capitalize_word = true
+
+# ... meters ...
+
+[[rewrite]]
+matches = ["meterCutC", "cut time", "lilyTimeCHalf"]
+item = "alla breve"
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = "reverseallabreve"
+item = ["alla breve", "reversed"]
+
+[[rewrite]]
+regex = 'alla.*breve'
+item = "alla breve"
+
+[[rewrite]]
+matches = "reverseC"
+item = ["common time", "forward and reversed"]
+
+[[rewrite]]
+matches = ["meterC", "lilyTimeC"]
+item = "common time"
+
+[[rewrite]]
+matches = [
+    "meterCThree",
+    "meterCThreeTwo",
+    "meterCZ",
+    "meterO",
+    "meterplus"
+]
+item = "meter, musical"
+
+# ... other ...
+
+[[rewrite]]
+regex = '^accordion[A-Z]'
+word = "accordion notation"
+
+[[rewrite]]
+compare_lowercase = true
+matches = [
+    "mordent",
+    "turn",
+    "trill"
+]
+lowercase_item = true
+item = '\1'
+
+[[rewrite]]
+matches = "duevolte"
+item = "due volte"
+
+[[rewrite]]
+regex = '^((?:de)?cresc)Hairpin$'
+item = '\1endo'
+
+[[rewrite]]
+regex = '^(marcato|portato)$'
+item = ['\1', "up"]
+
+[[rewrite]]
+regex = '^(marcato|portato)Down$'
+item = ['\1', "down"]
+
+[[rewrite]]
+matches = "lsfz"
+item = ["marcato", "down"]
+
+[[rewrite]]
+matches = "backturn"
+item = ["turn", "reversed"]
+
+[[rewrite]]
+regex = '^(up|down)bow$'
+item = '\1 bow'
+
+[[rewrite]]
+matches = ["Ped", "sPed"]
+item = ["pedal", "engage"]
+
+[[rewrite]]
+matches = ["Dep", "sDep"]
+item = ["pedal", "release"]
+
+[[rewrite]]
+matches = ["wq", "wqq"]
+item = "breve"
+
+[[rewrite]]
+matches = "flageolett"   # Note misspelling.
+item = "flageolet"
+
+[[rewrite]]
+matches = "doublethumb"
+item = "double thumb"
+
+[[rewrite]]
+matches = [
+    "segno",
+    "Segno",
+    "musSegno"
+]
+item = "segno"
+
+[[rewrite]]
+compare_lowercase = true
+prefix = "shake"
+item = "shake"

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-prec-succ.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-prec-succ.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-prec-succ.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,148 @@
+##############################################
+# Categorize precedes and succeeds symbols.  #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ------------------------------ precedes ------------------------------
+
+# ... regular ...
+
+[[rewrite]]
+matches = "prec"
+item = "precedes"
+
+[[rewrite]]
+matches = "precsim"
+item = ["precedes", "or similar to"]
+
+[[rewrite]]
+matches = "precnsim"
+item = ["precedes", "or not similar to"]
+
+[[rewrite]]
+matches = "closedprec"
+item = ["precedes", "closed"]
+
+[[rewrite]]
+matches = ["llcurly", "Prec"]
+item = ["precedes", "double"]
+
+[[rewrite]]
+matches = "precapprox"
+item = ["precedes", "or approximately equal to"]
+
+[[rewrite]]
+matches = "precnapprox"
+item = ["precedes", "or not approximately equal to"]
+
+[[rewrite]]
+matches = [
+    "preccurlyeq",
+    "preceq",
+    "preceqq",
+    "precedes or equal"
+]
+item = ["precedes", "or equal to"]
+
+[[rewrite]]
+matches = ["precneq", "precneqq"]
+item = ["precedes", "or not equal to"]
+
+[[rewrite]]
+matches = "prurel"
+item = ["precedes", "under relation"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = ["nprec", "not precedes"]
+item = ["precedes", "negated"]
+
+[[rewrite]]
+matches = "nprecsim"
+item = ["precedes", "or similar to, negated"]
+
+[[rewrite]]
+matches = "nprecapprox"
+item = ["precedes", "or approximately equal to, negated"]
+
+[[rewrite]]
+matches = [
+    "npreccurlyeq",
+    "npreceq",
+    "npreceqq",
+    "not precedes or equal"
+]
+item = ["precedes", "or equal to, negated"]
+
+# ------------------------------ succeeds ------------------------------
+
+# ... regular ...
+
+[[rewrite]]
+matches = "succ"
+item = "succeeds"
+
+[[rewrite]]
+matches = "succsim"
+item = ["succeeds", "or similar to"]
+
+[[rewrite]]
+matches = "succnsim"
+item = ["succeeds", "or not similar to"]
+
+[[rewrite]]
+matches = "closedsucc"
+item = ["succeeds", "closed"]
+
+[[rewrite]]
+matches = ["ggcurly", "Succ"]
+item = ["succeeds", "double"]
+
+[[rewrite]]
+matches = "succapprox"
+item = ["succeeds", "or approximately equal to"]
+
+[[rewrite]]
+matches = "succnapprox"
+item = ["succeeds", "or not approximately equal to"]
+
+[[rewrite]]
+matches = [
+    "succcurlyeq",
+    "succeq",
+    "succeqq",
+    "succeeds or equal"
+]
+item = ["succeeds", "or equal to"]
+
+[[rewrite]]
+matches = ["succneq", "succneqq"]
+item = ["succeeds", "or not equal to"]
+
+[[rewrite]]
+matches = "scurel"
+item = ["succeeds", "under relation"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = ["nsucc", "not succeeds"]
+item = ["succeeds", "negated"]
+
+[[rewrite]]
+matches = "nsuccsim"
+item = ["succeeds", "or similar to, negated"]
+
+[[rewrite]]
+matches = "nsuccapprox"
+item = ["succeeds", "or approximately equal to, negated"]
+
+[[rewrite]]
+matches = [
+    "nsucccurlyeq",
+    "nsucceq",
+    "nsucceqq",
+    "not succeeds or equal"
+]
+item = ["succeeds", "or equal to, negated"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-rewrite.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-rewrite.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-rewrite.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,7129 @@
+##################################################################
+# Define miscellaneous rules for rewriting the document's index. #
+# Author: Scott Pakin <scott+clsl at pakin.org>                     #
+##################################################################
+
+# -------------------------------- hats --------------------------------
+
+# ... accents ...
+
+# This rule should precede the following one.
+[[rewrite]]
+render_regex = '\\RHAT(crown|mortarboard)'
+item = ['\1', "as math-mode accent"]
+
+[[rewrite]]
+render_contains = '\RHAT'
+item = '\g<0>, as math-mode accent'
+
+# ... regular ...
+
+[[rewrite]]
+regex = '^(cowboy|hard|top|witch|wizard) hat$'
+item = ["hat", '\1']
+
+[[rewrite]]
+matches = "faHardHat"
+item = ["hat", "hard"]
+
+[[rewrite]]
+matches = ["faHatCowboy", "faHatCowboySide"]
+item = ["hat", "cowboy"]
+
+[[rewrite]]
+matches = "faHatWizard"
+item = ["hat", "wizard"]
+
+[[rewrite]]
+matches = ["graduation cap", "faGraduationCap"]
+item = "mortarboard"
+
+# ------------------------------- pages --------------------------------
+
+[[rewrite]]
+regex = '^page\s+(.+)$'
+item = ["page", '\1']
+
+[[rewrite]]
+matches = "pages"
+item = ["page", "multiple"]
+
+[[rewrite]]
+regex = '^Paper(Portrait|Landscape)$'
+lowercase_item = true
+item = ["page", '\1']
+
+# ------------------------------ vehicles ------------------------------
+
+# ... cars ...
+
+[[rewrite]]
+matches = ["car", "cars"]
+item = "automobile"
+
+[[rewrite]]
+contains = "vehicle"   # "recreational vehicle", "sport utility vehicle"
+item = "automobile"
+
+[[rewrite]]
+matches = "car crash"
+item = ["automobile", "crash"]
+
+[[rewrite]]
+matches = "automobile with key"
+item = ["automobile", "with key"]
+
+# ... boats and ships ...
+
+[[rewrite]]
+matches = [
+    "motor boat",
+    "sailboat",
+    "speedboat"
+]
+item = "boat"
+
+[[rewrite]]
+render_contains = '\PHship'    # This looks more like a boat to me.
+item = "boat"
+
+[[rewrite]]
+render_contains = '\asapBoat'  # This looks more like a ship to me.
+item = "ship"
+
+[[rewrite]]
+matches = [
+    "ships",
+    "passenger ship"
+]
+item = "ship"
+
+# ----------------------------- rectangles -----------------------------
+
+[[rewrite]]
+matches = [
+    "rectangles",
+    "hrectangle",
+    "vrectangle",
+    "oblong",          # Some of these are barely oblong, almost square.
+    "talloblong",
+    "bigtalloblong",
+    "bigbox"
+]
+item = "rectangle"
+
+[[rewrite]]
+matches = [
+    "hrectangleblack",
+    "vrectangleblack",
+    "Rectangle",
+    "RectangleBold",
+    "RectangleThin"
+]
+item = ["rectangle", "filled"]
+
+# -------------------------- ellipses (ovals) --------------------------
+
+[[rewrite]]
+matches = ["ellipses (ovals)", "ovals"]
+item = "ellipse"
+
+[[rewrite]]
+matches = ["Ellipse", "whthorzoval"]
+item = "ellipse"
+
+[[rewrite]]
+matches = ["EllipseSolid", "blkhorzoval"]
+item = ["ellipse", "filled"]
+
+[[rewrite]]
+matches = "whtvertoval"
+item = ["ellipse", "vertical"]
+
+[[rewrite]]
+matches = "blkvertoval"
+item = ["ellipse", "vertical, filled"]
+
+[[rewrite]]
+matches = "EllipseShadow"
+item = ["ellipse", "shadowed"]
+
+# ------------------------------- boots --------------------------------
+
+[[rewrite]]
+matches = "hiking boot"
+item = ["boot", "hiking"]
+
+[[rewrite]]
+matches = "ski and ski boot"
+item = ["boot", "ski"]
+
+[[rewrite]]
+matches = "womans boots"
+item = ["boot", "multiple"]
+
+# ------------------------ maps (geographical) -------------------------
+
+[[rewrite]]
+matches = "world map"
+item = ["map", "world"]
+
+[[rewrite]]
+matches = "map of Japan"
+item = ["map", "of Japan"]
+
+[[rewrite]]
+matches = "map, marked"
+item = ["map", "marked"]
+
+# --------------------------- diagonal lines ---------------------------
+
+# ... regular ...
+
+[[rewrite]]
+matches = ["diagdown", "nwseline"]
+item = ["diagonal line", "down"]
+
+[[rewrite]]
+matches = ["diagup", "neswline"]
+item = ["diagonal line", "up"]
+
+[[rewrite]]
+matches = "Neswline"
+item = ["diagonal line", "up, double"]
+
+[[rewrite]]
+matches = "Nwseline"
+item = ["diagonal line", "down, double"]
+
+[[rewrite]]
+matches = [
+    "fdiagovrdiag",
+    "rdiagovfdiag"
+]
+item = ["diagonal line", "two, crossed"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = "ndiagdown"
+item = ["diagonal line", "down, negated"]
+
+[[rewrite]]
+matches = "ndiagup"
+item = ["diagonal line", "up, negated"]
+
+[[rewrite]]
+matches = "nNeswline"
+item = ["diagonal line", "up, double, negated"]
+
+[[rewrite]]
+matches = "nNwseline"
+item = ["diagonal line", "down, double, negated"]
+
+[[rewrite]]
+matches = "nneswline"
+item = ["diagonal line", "up, negated"]
+
+[[rewrite]]
+matches = "nnwseline"
+item = ["diagonal line", "down, negated"]
+
+# ------------------------------- grids --------------------------------
+
+[[rewrite]]
+matches = "topborder"
+item = ["grid", "top"]
+
+[[rewrite]]
+matches = "botborder"
+item = ["grid", "bottom"]
+
+[[rewrite]]
+matches = "lftborder"
+item = ["grid", "left"]
+
+[[rewrite]]
+matches = "rtborder"
+item = ["grid", "right"]
+
+[[rewrite]]
+matches = "empty"
+item = ["grid", "center"]
+
+[[rewrite]]
+matches = "hoshi"
+item = ["grid", "center, with filled circle"]
+
+# ------------------------------ borders -------------------------------
+
+[[rewrite]]
+regex = '^border\s+(.+)$'
+item = ["border", '\1']
+
+[[rewrite]]
+regex = '^([SZ])border$'
+item = ["border", '\1']
+
+[[rewrite]]
+matches = ["decorative borders", "fancy borders"]
+item = ["border", "decorative"]
+
+[[rewrite]]
+matches = "borders"
+item = "border"
+
+# ---------------------------- semicircles -----------------------------
+
+[[rewrite]]
+matches = ["topsemicircle", "botsemicircle"]
+item = "semicircle"
+
+[[rewrite]]
+regex = '^notched (left|right) semicircle with three dots$'
+item = ["semicircle", "notched with three dots"]
+
+[[rewrite]]
+matches = ["opluslhrim", "oplusrhrim"]
+item = ["semicircle", "plus"]
+
+# ------------------------------- locks --------------------------------
+
+[[rewrite]]
+matches = ["locks", "locked"]
+item = "lock"
+
+[[rewrite]]
+regex = 'lock.*with.*(key|pen)'
+item = ["lock", 'with \1']
+
+[[rewrite]]
+matches = ["open lock", "unlocked"]
+item = ["lock", "open"]
+
+# -------------------------- ellipses (dots) ---------------------------
+
+[[rewrite]]
+top_matches = "ellipses (dots)"
+item = ["ellipsis"]
+
+[[rewrite]]
+matches = [
+    "ldots",
+    "textellipsis",
+    "mathellipsis",
+    "baseline horizontal dots (horizontal ellipsis)"
+]
+item = "ellipsis"
+
+[[rewrite]]
+matches = [
+    "cdots",
+    "hdots",
+    "centered horizontal dots (horizontal ellipsis)"
+]
+item = ["ellipsis", "centered"]
+
+[[rewrite]]
+matches = ["ddots", "fixedddots"]
+item = ["ellipsis", "diagonal"]
+
+[[rewrite]]
+matches = [
+    "fixedvdots",
+    "vdots",
+    "tripledot",
+    "vertical dots (vertical ellipsis)"
+]
+item = ["ellipsis", "vertical"]
+
+[[rewrite]]
+matches = ["adots", "iddots", "revddots", "udots"]
+item = ["ellipsis", "anti-diagonal"]
+
+[[rewrite]]
+matches = "ddotdot"
+item = ["ellipsis", "diagonal, two"]
+
+[[rewrite]]
+matches = "udotdot"
+item = ["ellipsis", "anti-diagonal, two"]
+
+[[rewrite]]
+matches = ["vdotdot", "doubledot"]
+item = ["ellipsis", "vertical, two"]
+
+[[rewrite]]
+matches = ["quaddot", "fourvdots"]
+item = ["ellipsis", "vertical, four"]
+
+[[rewrite]]
+matches = "pentdot"
+item = ["ellipsis", "vertical, five"]
+
+[[rewrite]]
+matches = "hdotdot"
+item = ["ellipsis", "centered, two"]
+
+[[rewrite]]
+matches = "enleadertwodots"
+item = ["ellipsis", "two"]
+
+# ----------------------------- other dots -----------------------------
+
+[[rewrite]]
+matches = [
+    "binding dot",
+    "centerdot",
+    "udot"
+]
+item = ["dot", "middle"]
+
+[[rewrite]]
+render_contains = ['(\Dt)', '(\ARUNEeye)']
+item = ["dot", "middle"]
+
+[[rewrite]]
+matches = ["dot", "ldotp"]
+item = ["dot", "lower"]
+
+[[rewrite]]
+matches = "doubleeye"
+item = ["dot", "two"]
+
+[[rewrite]]
+matches = "tripleeye"
+item = ["dot", "three"]
+
+[[rewrite]]
+matches = ["squaredots", "quadeye"]
+item = ["dot", "four"]
+
+[[rewrite]]
+matches = ["fivedots", "penteye"]
+item = ["dot", "five"]
+
+# ------------------------- punctuation marks --------------------------
+
+[[rewrite]]
+matches = "MVPeriod"
+item = "period"
+
+[[rewrite]]
+matches = "textperiodcentered"
+item = ["period", "centered"]
+
+[[rewrite]]
+matches = ["fatsemi", "fcmp", "zcmp"]
+item = ["semicolon", "hollow"]
+
+[[rewrite]]
+matches = [
+    "paragraph",
+    "textparagraph",
+    "textpilcrow",
+    "mathparagraph",
+    "DCd"
+]
+word = "pilcrow"
+
+[[rewrite]]
+render_contains = ['+\P+', '\faParagraph', '\usym{2761}']
+word = "pilcrow"
+
+[[rewrite]]
+render_contains = [
+    '+\S+',
+    '+\wasyparagraph+',
+    '+\Paragraph+',
+    '+\textsection+'
+]
+item = "section mark"
+
+[[rewrite]]
+matches = ["mathsection", "NAK"]
+item = "section mark"
+
+[[rewrite]]
+regex = '^medium (flattened )?(left|right) parenthesis ornament$'
+item = ["parentheses", "dingbat"]
+
+[[rewrite]]
+regex = '^MV(Left|Right)Bracket$'
+item = ["parentheses", "sans serif"]
+
+[[rewrite]]
+matches = ["Lbrack", "Rbrack"]
+item = ["brackets", "blackboard bold"]
+render = 'blackboard bold (\Lbrack \: \Rbrack)'
+
+[[rewrite]]
+matches = ["Langle", "Rangle"]
+item = ["angle brackets", "blackboard bold"]
+render = 'blackboard bold (\Langle \: \Rangle)'
+
+[[rewrite]]
+matches = "hyphen, discretionary"
+item = ["hyphen", "discretionary"]
+
+[[rewrite]]
+matches = "textdblhyphen"
+item = ["hyphen", "double"]
+
+# ------------------------------ bullets -------------------------------
+
+[[rewrite]]
+regex = '^(hyphen|inverse)bullet$'
+item = ["bullet", '\1']
+
+[[rewrite]]
+matches = ["medbullet", "BEL"]
+item = "bullet"
+
+[[rewrite]]
+matches = "sqbullet"
+item = ["bullet", "square"]
+
+[[rewrite]]
+matches = "textopenbullet"
+item = ["bullet", "open"]
+
+[[rewrite]]
+matches = "bullets, as tally markers"
+item = ["bullet", "as tally markers"]
+
+[[rewrite]]
+consider_all_entries = true
+matches = "bullets"
+format_contains = 'hyperindexformat{\see{circles, squares'
+item = ["bullet"]
+seealso = "circle, square, rhombus, etc."
+
+# -------------------------- horizontal lines --------------------------
+
+[[rewrite]]
+matches = ["BigHBar", "HBar", "SmallHBar"]
+item = ["horizontal line", "high"]
+
+[[rewrite]]
+matches = ["leftrightline", "strns"]
+item = ["horizontal line", "middle"]
+
+[[rewrite]]
+matches = "lineh"
+item = ["horizontal line", "low"]
+
+[[rewrite]]
+matches = "linevh"
+item = ["horizontal line", "middle, with vertical line"]
+
+[[rewrite]]
+matches = "CuttingLine"
+item = ["horizontal line", "dashed"]
+
+[[rewrite]]
+matches = "Leftrightline"
+item = ["horizontal line", "middle, double"]
+
+[[rewrite]]
+matches = "nleftrightline"
+item = ["horizontal line", "middle, slashed"]
+
+[[rewrite]]
+matches = ["textdoublebarslash", "nLeftrightline"]
+item = ["horizontal line", "middle, double, slashed"]
+
+# --------------------------- vertical bars ----------------------------
+
+# This rule should precede the following rule
+[[rewrite]]
+render_contains = '(\ARUNEbar)'
+item = ["vertical bar", "short"]
+
+[[rewrite]]
+matches = [
+    "BigVBar",
+    "binding bar",
+    "divides",
+    "light vertical bar",
+    "linev",
+    "mid",
+    "textpipe",
+    "textpipevar",
+    "texttoneletterstem",
+    "textvertline",
+    "updownline",
+    "VBar",
+    "vertoverlay"
+]
+not_render_contains = '\MNSneswline'
+item = "vertical bar"
+
+[[rewrite]]
+render_contains = [
+    '\magicvertname',
+    '(\textbar)',
+    '(\Shfr)'
+]
+item = "vertical bar"
+
+[[rewrite]]
+render_contains = [
+    '\magicVertname',
+    '\FDSYMtVert',
+    '\MNSdVert'
+]
+item = ["vertical bar", "double"]
+
+[[rewrite]]
+matches = [
+    "textbardbl",
+    "textdoublepipe",
+    "textdoublepipevar",
+    "textdoublevertline",
+    "Updownline"
+]
+item = ["vertical bar", "double"]
+
+[[rewrite]]
+matches = [
+    "doublebar",
+    "textbrokenbar",
+    "brokenvert",
+    "splitvert"
+]
+item = ["vertical bar", "split"]
+
+[[rewrite]]
+matches = "triplebar"
+item = ["vertical bar", "split twice"]
+
+[[rewrite]]
+matches = "midcir"
+item = ["vertical bar", "ring under"]
+
+[[rewrite]]
+matches = "nmidcir"
+item = ["vertical bar", "ring under, negated"]
+
+[[rewrite]]
+matches = "cirmid"
+item = ["vertical bar", "ring over"]
+
+[[rewrite]]
+matches = "ncirmid"
+item = ["vertical bar", "ring over, negated"]
+
+[[rewrite]]
+matches = ["textdoublebarpipe", "textdoublebarpipevar"]
+item = ["vertical bar", "equals"]
+
+[[rewrite]]
+matches = ["medvert", "SmallVBar", "shortmid"]
+item = ["vertical bar", "short"]
+
+[[rewrite]]
+matches = ["dotmedvert", "medvertdot"]
+item = ["vertical bar", "short, dotted"]
+
+[[rewrite]]
+matches = [
+    "heavy vertical bar",
+    "medium vertical bar"
+]
+item = ["vertical bar", "heavy"]
+
+[[rewrite]]
+matches = [
+    "nmid",
+    "revnmid",
+    "DividesNot",
+    "ndivides",
+    "notdivides",
+    "nupdownline"
+]
+item = ["vertical bar", "negated"]
+
+[[rewrite]]
+matches = ["nUpdownline", "nhpar"]
+item = ["vertical bar", "double, negated"]
+
+[[rewrite]]
+matches = "nshortmid"
+item = ["vertical bar", "short, negated"]
+
+[[rewrite]]
+matches = "nhVvert"
+item = ["vertical bar", "triple, negated"]
+
+# ---------------------------- curly braces ----------------------------
+
+[[rewrite]]
+regex = '^textbrace(left|right)$'
+item = "braces"
+render = ""
+
+[[rewrite]]
+render_contains = ['+\{+', '+\}+']
+item = "braces"
+render = ""
+
+[[rewrite]]
+regex = '(left|right) curly bracket ornament'
+item = ["braces", "decorative"]
+render = ""
+
+# ------------------------------ slashes -------------------------------
+
+# ... special cases ...
+
+# \faSlash is called "slash", but the glyph is a backslash.
+[[rewrite]]
+render_contains = '(\faSlash)'
+item = "backslash"
+
+# ... regular ...
+
+[[rewrite]]
+matches = [
+    "/",
+    "slash",
+    "mathslash",
+    "medslash",
+    "not",
+    "notchar",
+    "right (forward) slash",
+    "xsol"
+]
+item = "slash"
+
+[[rewrite]]
+render_contains = '(\FDSYMtmathslash)'
+item = "slash"
+
+[[rewrite]]
+matches = ["fracslash", "textfractionsolidus"]
+item = ["slash", "fraction"]
+
+[[rewrite]]
+matches = "sslash"
+item = ["slash", "double"]
+
+[[rewrite]]
+matches = "trslash"
+item = ["slash", "triple"]
+
+[[rewrite]]
+matches = "dsol"
+item = ["slash", "bar over"]
+
+[[rewrite]]
+matches = [
+    "backslash",
+    "textbackslash",
+    "medbackslash",
+    "left (back) slash",
+    "xbsol"
+]
+item = "backslash"
+
+[[rewrite]]
+matches = "fatbslash"
+item = ["backslash", "hollow"]
+
+[[rewrite]]
+matches = "fatslash"
+item = ["slash", "hollow"]
+
+[[rewrite]]
+matches = "centernot"
+item = ["slash", "horizontally centered"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = "notslash"
+item = ["slash", "negated"]
+
+[[rewrite]]
+matches = ["notbackslash", "rsolbar"]
+item = ["backslash", "negated"]
+
+# -------------------- approximately equivalent to ---------------------
+
+[[rewrite]]
+matches = ["approxident", "triplesim", "threesim"]
+item = "approximately equivalent to"
+
+[[rewrite]]
+matches = "backtriplesim"
+item = ["approximately equivalent to", "reversed"]
+
+[[rewrite]]
+matches = ["napproxident", "ntriplesim"]
+item = ["approximately equivalent to", "negated"]
+
+[[rewrite]]
+matches = "nbacktriplesim"
+item = ["approximately equivalent to", "reversed, negated"]
+
+# ----------------------- approximately equal to -----------------------
+
+# ... regular ...
+
+[[rewrite]]
+matches = [
+    "approx",
+    "approxeq",
+    "approxeqq",
+    "thickapprox"
+]
+item = "approximately equal to"
+
+[[rewrite]]
+matches = ["backapprox", "backapproxeq"]
+item = ["approximately equal to", "reversed"]
+
+[[rewrite]]
+matches = "approxcolon"
+item = ["approximately equal to", "colon"]
+
+[[rewrite]]
+matches = "approxcoloncolon"
+item = ["approximately equal to", "colon, double"]
+
+[[rewrite]]
+matches = "hatapprox"
+item = ["approximately equal to", "hat"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = [
+    "napprox",
+    "napproxeq",
+    "napproxeqq",
+    "nthickapprox"
+]
+item = ["approximately equal to", "negated"]
+
+[[rewrite]]
+matches = ["nbackapprox", "nbackapproxeq"]
+item = ["approximately equal to", "reversed, negated"]
+
+# --------------------------- parallel lines ---------------------------
+
+# ... regular ...
+
+[[rewrite]]
+matches = ["parallel", "bigparallel"]
+item = "parallel"
+
+[[rewrite]]
+matches = "shortparallel"
+item = ["parallel", "short"]
+
+[[rewrite]]
+matches = ["varparallel", "parallelslant"]
+item = ["parallel", "slanted"]
+
+[[rewrite]]
+matches = "varparallelinv"
+item = ["parallel", "slanted backward"]
+
+[[rewrite]]
+matches = "parsim"
+item = ["parallel", "similar"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = "nparallel"
+item = ["parallel", "negated"]
+
+[[rewrite]]
+matches = "nshortparallel"
+item = ["parallel", "short, negated"]
+
+[[rewrite]]
+matches = ["nparallelslant", "nvarparallel"]
+item = ["parallel", "slanted, negated"]
+
+[[rewrite]]
+matches = "nvarparallelinv"
+item = ["parallel", "slanted backward, negated"]
+
+# ----------------------------- ampersands -----------------------------
+
+[[rewrite]]
+contains = "&"
+item = "ampersand"
+
+[[rewrite]]
+matches = [
+    "binampersand",
+    "with",
+    "bigwith",
+    "additive and",
+    "quantified additive and"
+]
+item = "ampersand"
+
+[[rewrite]]
+matches = [
+    "upand",
+    "invamp",
+    "biginvamp",
+    "bindnasrepma",
+    "parr",
+    "bigparr",
+    "multiplicitive or",     # Note spelling error.
+    "quantified multiplicative or"
+]
+item = ["ampersand", "inverted"]
+
+# --------------------------- set membership ---------------------------
+
+# ... regular ...
+
+[[rewrite]]
+matches = ["in", "smallin"]
+not_render_contains = '\EO'
+item = "set membership"
+
+[[rewrite]]
+matches = ["isins", "varisins"]
+item = ["set membership", "short vertical bar"]
+
+[[rewrite]]
+matches = "inplus"
+item = ["set membership", "plus"]
+
+[[rewrite]]
+matches = ["isinobar", "varisinobar", "barin"]
+item = ["set membership", "bar over"]
+
+[[rewrite]]
+matches = "isinvb"
+item = ["set membership", "bar under"]
+
+[[rewrite]]
+matches = "disin"
+item = ["set membership", "extended horizontal line"]
+
+[[rewrite]]
+matches = "isindot"
+item = ["set membership", "dot"]
+
+[[rewrite]]
+matches = "isinE"
+item = ["set membership", "equal"]
+
+# ... reversed ...
+
+[[rewrite]]
+matches = [
+    "ni",
+    "smallni",
+    "owns",
+    "smallowns",
+    "set owns element"
+]
+not_render_contains = '\EO'
+item = ["set membership", "reversed"]
+
+[[rewrite]]
+matches = ["nis", "varnis"]
+item = ["set membership", "reversed, short vertical bar"]
+
+[[rewrite]]
+matches = "niplus"
+item = ["set membership", "reversed, plus"]
+
+[[rewrite]]
+matches = ["niobar", "varniobar"]
+item = ["set membership", "reversed, bar over"]
+
+[[rewrite]]
+matches = "ownsbar"
+item = ["set membership", "reversed, bar under"]
+
+[[rewrite]]
+matches = "nisd"
+item = ["set membership", "reversed, extended horizontal line"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = [
+    "nin",
+    "notin",
+    "varnotin",
+    "notsmallin",
+    "set membership negated"
+]
+item = ["set membership", "negated"]
+
+[[rewrite]]
+matches = "nvarisinobar"
+item = ["set membership", "bar over, negated"]
+
+# ... negated and reversed ...
+
+[[rewrite]]
+matches = [
+    "nni",
+    "notni",
+    "notowner",
+    "varnotowner",
+    "notsmallowns",
+    "nowns",
+    "set owns element negated"
+]
+item = ["set membership", "reversed, negated"]
+
+[[rewrite]]
+matches = "nvarniobar"
+item = ["set membership", "reversed, negated, bar over"]
+
+# ------------------------------- exists -------------------------------
+
+[[rewrite]]
+matches = [
+    "exists",
+    "bigexists",
+    "existential bunch quantifier",
+    "existential individual quantifier"
+]
+item = "exists"
+
+[[rewrite]]
+matches = [
+    "hidden existential bunch quantifier",
+    "hidden existential individual quantifier"
+]
+item = ["exists", "tilde"]
+
+[[rewrite]]
+matches = [
+    "unique existential bunch quantifier",
+    "unique existential individual quantifier"
+]
+item = ["exists", "exclamation point"]
+
+[[rewrite]]
+matches = [
+    "nexists",
+    "existential bunch quantifier negation",
+    "existential individual quantifier negation"
+]
+item = ["exists", "negated"]
+
+# ----------------------------- pentagons ------------------------------
+
+[[rewrite]]
+matches = [
+    "pentago",
+    "pentagon",
+    "pentagons",
+    "rightpentagon"
+]
+item = "pentagon"
+
+[[rewrite]]
+matches = [
+    "pentagofill",
+    "pentagonblack",
+    "rightpentagonblack"
+]
+item = ["pentagon", "filled"]
+
+[[rewrite]]
+regex = '^pentagofillh[ablr]$'
+item = ["pentagon", "half filled"]
+
+[[rewrite]]
+matches = "pentagocross"
+item = ["pentagon", "crossed"]
+
+[[rewrite]]
+matches = "pentagodot"
+item = ["pentagon", "dotted"]
+
+[[rewrite]]
+matches = "pentagolineh"
+item = ["pentagon", "horizontally divided"]
+
+[[rewrite]]
+matches = "pentagolinev"
+item = ["pentagon", "vertically divided"]
+
+[[rewrite]]
+matches = "pentagolinevh"
+item = ["pentagon", "quartered"]
+
+[[rewrite]]
+matches = "DEL"
+item = ["pentagon", "irregular"]
+
+# ------------------------------ hexagons ------------------------------
+
+[[rewrite]]
+matches = [
+    "hexago",
+    "hexagon",
+    "hexagons",
+    "varhexagon"
+]
+item = "hexagon"
+
+[[rewrite]]
+matches = [
+    "hexagofill",
+    "hexagonblack",
+    "varhexagonblack"
+]
+item = ["hexagon", "filled"]
+
+[[rewrite]]
+regex = '^hexagofillh[ablr]$'
+item = ["hexagon", "half filled"]
+
+[[rewrite]]
+matches = "hexagocross"
+item = ["hexagon", "crossed"]
+
+[[rewrite]]
+matches = "hexagodot"
+item = ["hexagon", "dotted"]
+
+[[rewrite]]
+matches = "hexagolineh"
+item = ["hexagon", "horizontally divided"]
+
+[[rewrite]]
+matches = "hexagolinev"
+item = ["hexagon", "vertically divided"]
+
+[[rewrite]]
+matches = "hexagolinevh"
+item = ["hexagon", "quartered"]
+
+[[rewrite]]
+matches = "varhexagonlrbonds"
+item = ["hexagon", "with chemical bonds"]
+
+# -------------------------- logical negation --------------------------
+
+[[rewrite]]
+matches = [
+    "neg",
+    "lnot",
+    "textlnot",
+    "bitwise not operator/logical negation"
+]
+item = "logical negation"
+
+[[rewrite]]
+matches = ["turnedneg", "intprod"]
+item = ["logical negation", "inverted"]
+
+[[rewrite]]
+top_matches = "inverted negation"
+item = ["logical negation", "inverted"]
+
+[[rewrite]]
+matches = ["backneg", "invnot"]
+item = ["logical negation", "reversed"]
+
+[[rewrite]]
+matches = ["invbackneg", "turnedbackneg", "intprodr"]
+item = ["logical negation", "reversed and inverted"]
+
+[[rewrite]]
+render_contains = '(\STIXturnednot)'
+item = ["logical negation", "reversed and inverted"]
+
+[[rewrite]]
+render_contains = [
+    '($\invneg$)',
+    '(\FDSYMinvneg)'
+]
+item = ["logical negation", "reversed"]
+
+[[rewrite]]
+render_contains = [
+    '(\MNSinvneg)',
+    '(\FDSYMturnednot)'
+]
+item = ["logical negation", "inverted"]
+
+[[rewrite]]
+matches = "dotted negation"
+item = ["logical negation", "dotted"]
+
+[[rewrite]]
+matches = "Not"
+item = ["logical negation", "double bar"]
+
+[[rewrite]]
+matches = "bNot"
+item = ["logical negation", "double bar, reversed"]
+
+[[rewrite]]
+matches = "classical logical negation"
+item = ["logical negation", "classical"]
+
+# -------------------------- proportionality ---------------------------
+
+[[rewrite]]
+matches = ["propto", "varpropto", "wasypropto", "leftpropto"]
+item = "proportionality"
+
+[[rewrite]]
+matches = ["propfrom", "backpropto", "rightpropto"]
+item = ["proportionality", "reversed"]
+
+[[rewrite]]
+matches = "uppropto"
+item = ["proportionality", "down"]
+
+[[rewrite]]
+matches = "downpropto"
+item = ["proportionality", "up"]
+
+[[rewrite]]
+matches = "hbipropto"
+item = ["proportionality", "bidirectional"]
+
+[[rewrite]]
+matches = "vbipropto"
+item = ["proportionality", "bidirectional, vertical"]
+
+[[rewrite]]
+matches = ["neswbipropto", "nwsebipropto"]
+item = ["proportionality", "bidirectional, diagonal"]
+
+# ----------------------------- infinities -----------------------------
+
+[[rewrite]]
+matches = "infty"
+item = "infinity"
+
+[[rewrite]]
+matches = "iinfin"
+item = ["infinity", "incomplete"]
+
+[[rewrite]]
+matches = "tieinfty"
+item = ["infinity", "tie over"]
+
+[[rewrite]]
+matches = "nvinfty"
+item = ["infinity", "negated"]
+
+# ------------------------------- dashes -------------------------------
+
+# Distinguish a dashing emoji from punctuation-mark dashes.
+[[rewrite]]
+render_contains = '\usym{1F4A8}'
+item = "dashing away"
+
+[[rewrite]]
+render_regex = '\\text(em|en)dash'
+item = ["dash (punctuation mark)", '\1']
+
+[[rewrite]]
+matches = "textthreequartersemdash"
+item = ["dash (punctuation mark)", "three quarters em"]
+
+[[rewrite]]
+matches = "texttwelveudash"
+item = ["dash (punctuation mark)", "twelve u"]
+
+# ------------------------------- steel --------------------------------
+
+[[rewrite]]
+regex = '^Rounded([A-Z]+)steel'
+item = ["steel", 'rounded \1']
+
+[[rewrite]]
+regex = '^([A-Z]+)steel'
+item = ["steel", '\1']
+
+[[rewrite]]
+matches = "Circsteel"
+item = ["steel", "circular"]
+
+[[rewrite]]
+matches = "Rectsteel"
+item = ["steel", "rectangular"]
+
+[[rewrite]]
+matches = "Hexasteel"
+item = ["steel", "hexagonal"]
+
+[[rewrite]]
+matches = "Octosteel"
+item = ["steel", "octagonal"]
+
+[[rewrite]]
+matches = "Flatsteel"
+item = ["steel", "flat"]
+
+# -------------------------------- nibs --------------------------------
+
+# This looks like a pen to me.
+# This rule should appear early in this section.
+[[rewrite]]
+render_contains = '\twemoji{2712}'
+item = "pen"
+
+[[rewrite]]
+matches = ["nibs", "faPenNib"]
+item = "nib"
+
+[[rewrite]]
+regex = '^(black|white)\s+nib'
+item = 'nib'
+
+[[rewrite]]
+regex = '^Nib.*(Left|Right)'
+item = 'nib'
+
+[[rewrite]]
+regex = '^man.*nib'
+item = "nib shapes"
+
+# --------------------------- manfnt symbols ---------------------------
+
+[[rewrite]]
+regex = '^man.*(kidney|quadrifolium)$'
+item = '\1'
+
+[[rewrite]]
+regex = '^man(cone|cube)$'
+item = '\1'
+
+[[rewrite]]
+matches = "manimpossiblecube"
+item = ["cube", "impossible"]
+
+# ------------------------------- medals -------------------------------
+
+[[rewrite]]
+matches = "1st place medal"
+item = ["medal", "gold"]
+
+[[rewrite]]
+matches = "2nd place medal"
+item = ["medal", "silver"]
+
+[[rewrite]]
+matches = "3rd place medal"
+item = ["medal", "bronze"]
+
+[[rewrite]]
+regex = '^(.+\S)\s+medal$'
+item = ["medal", '\1']
+
+# ----------------------------- keyboards ------------------------------
+
+[[rewrite]]
+contains = "musical keyboard"
+item = ["keyboard", "musical"]
+
+[[rewrite]]
+matches = [
+    "Keyboard",
+    "keyboard",
+    "wired keyboard",
+    "tiKeyboard"
+]
+item = ["keyboard", "computer"]
+
+[[rewrite]]
+prefix = "faKeyboard"
+item = ["keyboard", "computer"]
+
+[[rewrite]]
+matches = "keyboard and mouse"
+item = ["keyboard", "computer, with mouse"]
+
+# ------------------------------ speakers ------------------------------
+
+# This rule should appear before the generic speaker rule.
+[[rewrite]]
+matches = [
+    "speaker",
+    "muted speaker",
+    "speaker with cancellation stroke",
+    "speaker low volume",
+    "volume",
+    "volume off",
+    "right speaker"
+]
+item = ["speaker", "muted"]
+
+[[rewrite]]
+matches = [
+    "speaker medium volume",
+    "volume down",
+    "speaker with one sound wave",
+    "right speaker with one sound wave"
+]
+item = ["speaker", "volume down"]
+
+[[rewrite]]
+matches = [
+    "speaker high volume",
+    "volume up",
+    "speaker with three sound waves",
+    "right speaker with three sound waves"
+]
+item = ["speaker", "volume up"]
+
+# --------------------------- media symbols ----------------------------
+
+# This rule should appear early in this section.
+[[rewrite]]
+regex = '^(tiMedia.+)Outline$'
+item = '\1'
+continue = true
+
+[[rewrite]]
+matches = [
+    "forward",
+    "fast forward",
+    "tiMediaFastForward",
+    "fast-forward button",
+    "faFastForward",
+    "next track button",
+    "step forward"
+]
+item = ["media control symbols", "forward"]
+
+[[rewrite]]
+prefix = "Forward"
+item = ["media control symbols", "forward"]
+
+[[rewrite]]
+matches = [
+    "rewind",
+    "backward",
+    "step backward",
+    "tiMediaPlayReverse",
+    "tiMediaRewind"
+]
+item = ["media control symbols", "reverse"]
+
+[[rewrite]]
+matches = "tiMediaPlay"
+item = ["media control symbols", "play"]
+
+[[rewrite]]
+regex = '^tiMedia(.+)'
+lowercase_item = true
+item = ["media control symbols", '\1']
+
+[[rewrite]]
+prefix = [
+    "Rewind",
+    "fast reverse",
+    "fast backward",
+    "faFastBackward",
+]
+item = ["media control symbols", "reverse"]
+
+[[rewrite]]
+matches = [
+    "reverse button",
+    "last track button",
+    "play reverse"
+]
+item = ["media control symbols", "reverse"]
+
+[[rewrite]]
+matches = "play"
+not_render_contains = "EOPlay"
+item = ["media control symbols", "play"]
+
+[[rewrite]]
+matches = "play or pause button"
+item = ["media control symbols", "play or pause"]
+
+[[rewrite]]
+matches = "play button"
+item = ["media control symbols", "play"]
+
+[[rewrite]]
+matches = [
+    "ToBottom",
+    "fast down button",
+    "downwards button"
+]
+item = ["media control symbols", "down"]
+
+[[rewrite]]
+matches = [
+    "ToTop",
+    "fast up button",
+    "upwards button"
+]
+item = ["media control symbols", "up"]
+
+[[rewrite]]
+matches = [
+    "stop",
+    "stop button",
+]
+item = ["media control symbols", "stop"]
+
+[[rewrite]]
+render_contains = '\faStop'
+item = ["media control symbols", "stop"]
+
+[[rewrite]]
+matches = "adjust"
+item = "adjust contrast"
+
+# --------------------- speech and thought bubbles ---------------------
+
+# ... speech bubbles ...
+
+[[rewrite]]
+matches = "eye in speech bubble"
+item = ["speech bubble", "eye"]
+
+[[rewrite]]
+matches = ["two speech bubbles", "three speech bubbles"]
+item = ["speech bubble", "multiple"]
+
+[[rewrite]]
+render_contains = '\usym{1F4AC}'
+item = ["speech bubble", "text"]
+
+[[rewrite]]
+render_contains = '\twemoji{1f4ac}'
+item = ["speech bubble", "ellipsis"]
+
+[[rewrite]]
+contains = "anger bubble"
+item = ["speech bubble", "angry"]
+
+# This rule should follow all of the speech-balloon special cases.
+[[rewrite]]
+contains = ["speech bubble", "speech balloon"]
+item = "speech bubble"
+
+# ... thought bubbles ...
+
+[[rewrite]]
+render_contains = '\usym{1F4AD}'
+item = ["thought bubble", "text"]
+
+[[rewrite]]
+contains = "thought bubble"
+item = "thought bubble"
+
+[[rewrite]]
+matches = "thought balloon"
+item = "thought bubble"
+
+# --------------------------- database joins ---------------------------
+
+[[rewrite]]
+matches = "Join"
+item = ["join (database)", "natural"]
+
+[[rewrite]]
+regex = '^(left|right|full)outerjoin$'
+item = ["join (database)", '\1 outer']
+
+[[rewrite]]
+matches = "lJoin"
+item = ["join (database)", "left"]
+
+[[rewrite]]
+matches = "rJoin"
+item = ["join (database)", "right"]
+
+[[rewrite]]
+matches = "openJoin"
+item = ["join (database)", "open"]
+
+# ------------------------------- moons --------------------------------
+
+[[rewrite]]
+matches = "moons"
+item = "moon"
+
+[[rewrite]]
+render_contains = '(\Moon)'
+item = ["moon", "crescent"]
+
+[[rewrite]]
+matches = "newmoon"
+item = ["moon", "new"]
+
+[[rewrite]]
+render_contains = '\MoonPha{1}'
+item = ["moon", "new"]
+
+[[rewrite]]
+matches = ["rightmoon", "night"]
+item = ["moon", "first quarter"]
+
+[[rewrite]]
+render_contains = ['(\STARMoon)', '\MoonPha{2}']
+item = ["moon", "first quarter"]
+
+[[rewrite]]
+matches = "fullmoon"
+item = ["moon", "full"]
+
+[[rewrite]]
+render_contains = '\MoonPha{3}'
+item = ["moon", "full"]
+
+[[rewrite]]
+matches = ["leftmoon", "varMoon"]
+item = ["moon", "last quarter"]
+
+[[rewrite]]
+render_contains = ['($\ABXleftmoon$)', '\MoonPha{4}']
+item = ["moon", "last quarter"]
+
+[[rewrite]]
+regex = '^(.*(crescent|gibbous|quarter|full|new))\s+moon(?:\s+(face|with face))?$'
+item = ["moon", '\1']
+
+# ------------------------------- colons -------------------------------
+
+[[rewrite]]
+matches = "colon"
+item = "colon"
+
+[[rewrite]]
+matches = ["mathcolon", "ratio", "mathratio"]
+item = ["colon", "math mode"]
+
+[[rewrite]]
+render_contains = '(\TEUBtwodots)'
+item = ["colon", "math mode"]
+
+[[rewrite]]
+matches = ["Colon", "coloncolon", "dblcolon"]
+item = ["colon", "double"]
+
+[[rewrite]]
+matches = "colonapprox"
+item = ["colon", "approximately equal to"]
+
+[[rewrite]]
+matches = ["Colonapprox", "coloncolonapprox"]
+item = ["colon", "double, approximately equal to"]
+
+[[rewrite]]
+matches = "colonsim"
+item = ["colon", "similar to"]
+
+[[rewrite]]
+matches = ["Colonsim", "coloncolonsim"]
+item = ["colon", "double, similar to"]
+
+[[rewrite]]
+matches = "colonminus"
+item = ["colon", "minus"]
+
+[[rewrite]]
+render_contains = [
+    '($\MTOOLScoloneq$)',
+    '($\coloneq$)'
+]
+item = ["colon", "minus"]
+
+[[rewrite]]
+matches = "coloncolonminus"
+item = ["colon", "double, minus"]
+
+[[rewrite]]
+render_contains = [
+    '($\Coloneq$)',
+    '($\MTOOLSColoneq$)'
+]
+item = ["colon", "double, minus"]
+
+[[rewrite]]
+matches = ["colonequals", "coloneqq", "defines"]
+item = ["colon", "equals"]
+
+[[rewrite]]
+render_contains = [
+    '($\ABXcoloneq$)',
+    '(\FDSYMcoloneq)',
+    '(\MNScoloneq)',
+    '(\STIXcoloneq)'
+]
+item = ["colon", "equals"]
+
+[[rewrite]]
+matches = ["coloncolonequals", "Coloneqq"]
+item = ["colon", "double, equals"]
+
+[[rewrite]]
+render_contains = '(\STIXColoneq)'
+item = ["colon", "double, equals"]
+
+[[rewrite]]
+render_contains = ['\STIXthreedotcolon', '\TEUBthreedots']
+item = ["colon", "three dot"]
+
+[[rewrite]]
+render_contains = '\TEUBfourdots'
+item = ["colon", "four dot"]
+
+[[rewrite]]
+matches = "typecolon"
+item = ["colon", "hollow"]
+
+[[rewrite]]
+matches = "vcentcolon"
+item = ["colon", "vertically centered"]
+
+# --------------------------- multiplication ---------------------------
+
+[[rewrite]]
+render_contains = '(\tiTimesOutline)'
+item = ["times", "hollow"]
+
+[[rewrite]]
+render_contains = [
+    '(\faTimes)',
+    '(\tiTimes)',
+    '(\twemoji{2715})',
+    '(\usym{2715})',
+    '(\twemoji{2716})',
+    '(\usym{2716})',
+    '(\MVMultiplication)'
+]
+item = ["times", "decorative"]
+
+[[rewrite]]
+compare_lowercase = true
+top_matches = [
+    "times",
+    "multiply",
+    "multiplication X",
+    "opentimes",
+    "texttimes",
+    "vartimes"
+]
+item = "times"
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = ['(\FDSYMbtimes)', '(\STIXbtimes)']
+item = ["times", "closed bottom"]
+
+[[rewrite]]
+matches = "timesbar"
+item = ["times", "underbar"]
+
+[[rewrite]]
+matches = "bigtimes"
+item = ["times", "big"]
+
+[[rewrite]]
+matches = ["dottimes", "dotted times"]
+item = ["times", "dotted"]
+
+[[rewrite]]
+matches = ["lftimes", "ltimesblack"]
+item = ["times", "filled left"]
+
+[[rewrite]]
+matches = ["rftimes", "rtimesblack"]
+item = ["times", "filled right"]
+
+[[rewrite]]
+matches = "udtimes"
+item = ["times", "closed top and bottom"]
+
+[[rewrite]]
+matches = "lrtimes"
+item = ["times", "closed left and right"]
+
+[[rewrite]]
+matches = "dtimes"
+item = ["times", "closed bottom"]
+
+[[rewrite]]
+matches = "ltimes"
+item = ["times", "closed left"]
+
+[[rewrite]]
+matches = ["ttimes", "utimes"]
+item = ["times", "closed top"]
+
+[[rewrite]]
+matches = "rtimes"
+item = ["times", "closed right"]
+
+[[rewrite]]
+matches = "otimeslhrim"
+item = ["times", "half rim, left"]
+
+[[rewrite]]
+matches = "otimesrhrim"
+item = ["times", "half rim, right"]
+
+[[rewrite]]
+matches = "vectimes"
+item = ["times", "vector"]
+
+[[rewrite]]
+matches = "doublestar"
+item = ["times", "double"]
+
+# ------------------------------ division ------------------------------
+
+[[rewrite]]
+render_contains = [
+    '(\faDivide)',
+    '(\tiDivide)',
+    '{2797}'
+]
+item = ["division", "dingbat"]
+
+[[rewrite]]
+render_contains = '(\tiDivideOutline)'
+item = ["division", "hollow"]
+
+[[rewrite]]
+matches = [
+    "div",
+    "divide",
+    "division",
+    "Divides",
+    "divslash",
+    "smalldivslash",
+    "textdiv",
+    "MVDivision"
+]
+item = "division"
+
+[[rewrite]]
+matches = ["slashdiv", "backslashdiv"]
+item = ["division", "diagonal"]
+
+[[rewrite]]
+matches = "vertdiv"
+item = ["division", "vertical"]
+
+[[rewrite]]
+matches = "longdivision"
+item = ["division", "long"]
+
+[[rewrite]]
+matches = ["divdot", "dotdiv"]
+item = ["division", "single dot"]
+
+[[rewrite]]
+matches = "divideontimes"
+item = ["division", "times"]
+
+# ------------- check boxes, check marks, and cross marks --------------
+
+# ... check boxes ...
+
+# The check-box rules should appear before the check-mark rules.
+# These rules should also precede the "circled symbols" rules.
+
+[[rewrite]]
+matches = ["ballot box", "HollowBox"]
+item = ["check box", "empty"]
+
+[[rewrite]]
+matches = [
+    "ballot box with check",
+    "ballot box with bold check",
+    "CheckedBox",
+    "Checkedbox",
+    "faCheckSquare[regular]"
+]
+item = ["check box", "checked"]
+
+[[rewrite]]
+render_contains = [
+    "tiInputChecked",
+    "tiInputCheckedOutline"
+]
+item = ["check box", "checked"]
+
+[[rewrite]]
+matches = "faCheckCircle[regular]"
+item = ["check box", "checked, circular"]
+
+[[rewrite]]
+matches = "faCheckCircle"
+item = ["check box", "checked, circular, filled"]
+
+[[rewrite]]
+matches = "faCheckSquare"
+item = ["check box", "checked, filled"]
+
+[[rewrite]]
+render_contains = '\twemoji{2611}'
+item = ["check box", "checked, blue"]
+
+[[rewrite]]
+render_contains = '\twemoji{2705}'
+item = ["check box", "checked, green"]
+
+[[rewrite]]
+regex = '^ballot box with.*x$'
+item = ["check box", "crossed"]
+
+[[rewrite]]
+matches = ["XBox", "CrossedBox", "Crossedbox"]
+item = ["check box", "crossed"]
+
+[[rewrite]]
+matches = "faTimesCircle"
+item = ["check box", "crossed, circular, filled"]
+
+[[rewrite]]
+matches = "faTimesCircle[regular]"
+item = ["check box", "crossed, circular"]
+
+[[rewrite]]
+render_contains = '\twemoji{274e}'
+item = ["check box", "crossed, green"]
+
+# ... check marks ...
+
+[[rewrite]]
+matches = [
+    "check marks",
+    "ballot bold script x",
+    "ballot script x",
+    "ballot X",
+    "ballotx"
+]
+item = "check mark"
+
+[[rewrite]]
+matches = "faCheckDouble"
+item = ["check mark", "double"]
+
+[[rewrite]]
+render_contains = [
+    '\tiTickOutline',
+    '\usym{2705}'
+]
+item = ["check mark", "hollow"]
+
+[[rewrite]]
+matches = ["ballotcheck", "faCheck"]
+item = "check mark"
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(check|tick).*(mark|box)'
+not_matches = "check marks"
+item = "check mark"
+
+[[rewrite]]
+compare_lowercase = true
+contains = "checked"
+item = "check mark"
+
+[[rewrite]]
+matches = [
+    "heavy check mark",
+    "light check mark"
+]
+item = "check mark"
+
+# ... cross marks ...
+
+# These rules must precede the "cross (crucifix)" rules.
+
+[[rewrite]]
+render_contains = '\twemoji{274c}'
+item = ["cross mark", "red"]
+
+[[rewrite]]
+render_contains = [
+    '(\ifsCross)',
+    '(\textifsymbol[ifgeo]{14})',
+    '(\ARUNEcross)'
+]
+item = "cross mark"
+
+[[rewrite]]
+matches = [
+    "BigCross",
+    "Xs",
+    "SmallCross",
+    "heavy ballot X",
+    "cancellation x"
+]
+item = "cross mark"
+
+[[rewrite]]
+regex = '^(double|triple)cross$'
+item = ["cross mark", '\1']
+
+[[rewrite]]
+prefix = "XSolid"
+item = "cross mark"
+
+[[rewrite]]
+matches = "negative squared cross mark"
+item = ["cross mark", "white on black"]
+
+# --------------------------- glottal stops ----------------------------
+
+[[rewrite]]
+prefix = "textglotstop"
+item = "glottal stop"
+
+[[rewrite]]
+matches = ["invglotstop", "textinvglotstop"]
+item = ["glottal stop", "inverted"]
+
+[[rewrite]]
+matches = ["revglotstop", "textrevglotstop"]
+item = ["glottal stop", "reversed"]
+
+[[rewrite]]
+matches = "textbarglotstop"
+item = ["glottal stop", "barred"]
+
+[[rewrite]]
+matches = "textbarrevglotstop"
+item = ["glottal stop", "reversed, barred"]
+
+[[rewrite]]
+matches = "textcrinvglotstop"
+item = ["glottal stop", "inverted, barred"]
+
+[[rewrite]]
+matches = "textctinvglotstop"
+item = ["glottal stop", "inverted, with tail"]
+
+[[rewrite]]
+matches = "textraiseglotstop"
+item = ["glottal stop", "raised"]
+
+[[rewrite]]
+matches = "textturnglotstop"
+item = ["glottal stop", "inverted, reversed"]
+
+# --------------------------- food and drink ---------------------------
+
+# ... food ...
+
+[[rewrite]]
+matches = "aubergine"
+item = "eggplant"
+
+[[rewrite]]
+prefix = "curry"
+item = "curry"
+
+[[rewrite]]
+matches = "cooked rice"
+item = "rice bowl"
+
+[[rewrite]]
+matches = ["ear of rice",  "sheaf of rice"]
+item = "rice sheaf"
+
+[[rewrite]]
+contains = "ice cream"
+item = "ice cream"
+
+[[rewrite]]
+matches = "cheese wedge"
+item = "cheese"
+
+[[rewrite]]
+contains = "pizza"
+item = "pizza"
+
+# This rule should precede the following one.
+# (Despite being called "steaming bowl", no steam lines are drawn.)
+[[rewrite]]
+render_contains = '\twemoji{1f35c}'
+item = ["bowl", "with chopsticks"]
+
+[[rewrite]]
+matches = ["steaming", "steaming bowl"]
+item = ["bowl", "steaming"]
+
+# ... drink ...
+
+[[rewrite]]
+matches = ["coffee", "Coffeecup"]
+item = ["cup", "coffee"]
+
+[[rewrite]]
+matches = "cup with straw"
+item = ["cup", "with straw"]
+
+[[rewrite]]
+regex = '^wine\s+(.+)$'
+not_contains = "bottle"
+item = "wine"
+
+[[rewrite]]
+matches = "bottle with popping cork"
+item = ["bottle", "champagne"]
+
+[[rewrite]]
+regex = '^(.*)\s+bottle$'
+item = ["bottle", '\1']
+
+[[rewrite]]
+matches = "beer"
+item = "beer mug"
+
+[[rewrite]]
+matches = "clinking beer mugs"
+item = ["beer mug", "two, clinking"]
+
+[[rewrite]]
+matches = "clinking glasses"
+item = ["glasses", "clinking"]
+
+[[rewrite]]
+matches = "cocktail glass"
+item = "cocktail"
+
+[[rewrite]]
+matches = "glass of milk"
+item = "glass"
+
+# ------------------ smiles and frowns (mathematical) ------------------
+
+[[rewrite]]
+matches = ["smile symbols", "frown symbols"]
+item = "smiles and frowns"
+
+[[rewrite]]
+regex = '^(?:small)?(smile|frown)$'
+item = "smiles and frowns"
+
+[[rewrite]]
+matches = ["scoh", "sincoh"]
+item = "smiles and frowns"
+
+[[rewrite]]
+matches = [
+    "smile (bottom) and frowm (top)",   # sic
+    "frown (bottom) and smile (top)",
+    "smilefrown",
+    "frownsmile",
+    "sqsmilefrown",
+    "sqfrownsmile",
+    "coh",
+    "incoh"
+]
+item = ["smiles and frowns", "both"]
+
+[[rewrite]]
+matches = [
+    "nfrownsmile",
+    "nsmilefrown",
+    "nsqfrownsmile",
+    "nsqsmilefrown"
+]
+item = ["smiles and frowns", "both, negated"]
+
+[[rewrite]]
+matches = [
+    "frowneqsmile",
+    "frownsmileeq",
+    "smileeqfrown",
+    "smilefrowneq",
+    "sqfrowneqsmile",
+    "sqsmileeqfrown"
+]
+item = ["smiles and frowns", "both, equals"]
+
+[[rewrite]]
+matches = [
+    "nfrowneqsmile",
+    "nfrownsmileeq",
+    "nsmileeqfrown",
+    "nsmilefrowneq",
+    "nsqfrowneqsmile",
+    "nsqsmileeqfrown"
+]
+item = ["smiles and frowns", "both, equals, negated"]
+
+[[rewrite]]
+regex = '^(?:sq)?(smile|frown)$'
+item = "smiles and frowns"
+
+[[rewrite]]
+regex = '^n(?:sq)?(smile|frown)$'
+item = ["smiles and frowns", "negated"]
+
+[[rewrite]]
+regex = '^(?:sq)?(smile|frown)eq$'
+item = ["smiles and frowns", "equals"]
+
+[[rewrite]]
+regex = '^n(?:sq)?(smile|frown)eq$'
+item = ["smiles and frowns", "equals, negated"]
+
+[[rewrite]]
+regex = '^(?:sq)?eq(smile|frown)$'
+item = ["smiles and frowns", "equals"]
+
+[[rewrite]]
+regex = '^n(?:sq)?eq(smile|frown)$'
+item = ["smiles and frowns", "equals, negated"]
+
+[[rewrite]]
+regex = '^(?:sq)?double(smile|frown)$'
+item = ["smiles and frowns", "double"]
+
+[[rewrite]]
+regex = '^n(?:sq)?double(smile|frown)$'
+item = ["smiles and frowns", "double, negated"]
+
+[[rewrite]]
+regex = '^(?:sq)?double(smile|frown)eq$'
+item = ["smiles and frowns", "double, equals"]
+
+[[rewrite]]
+regex = '^n(?:sq)?double(smile|frown)eq$'
+item = ["smiles and frowns", "double, equals, negated"]
+
+[[rewrite]]
+regex = '^(?:sq)?triple(smile|frown)$'
+item = ["smiles and frowns", "triple"]
+
+[[rewrite]]
+regex = '^n(?:sq)?triple(smile|frown)$'
+item = ["smiles and frowns", "triple, negated"]
+
+# ---------------------------- equivalences ----------------------------
+
+[[rewrite]]
+matches = [
+    "Equiv",
+    "equiv",
+    "Equivalence",
+    "Congruent"
+]
+item = "equivalence"
+
+[[rewrite]]
+matches = "equivclosed"
+item = ["equivalence", "closed"]
+
+[[rewrite]]
+matches = ["equivDD", "dotequiv"]
+item = ["equivalence", "with dots"]
+
+[[rewrite]]
+matches = [
+    "equivVert",
+    "equivVvert",
+    "NotCongruent"
+]
+item = ["equivalence", "with vertical lines"]
+
+[[rewrite]]
+matches = "eqvparsl"
+item = ["equivalence", "parallel slanted"]
+
+[[rewrite]]
+matches = [
+    "nequiv",
+    "notequiv",
+    "not classical equivalence"
+]
+item = ["equivalence", "negated"]
+
+[[rewrite]]
+matches = "nequivclosed"
+item = ["equivalence", "closed, negated"]
+
+[[rewrite]]
+regex = '^(.+?)\s+equivalence'
+item = ["equivalence", '\1']
+
+# --------------------- entailment and implication ---------------------
+
+# This section should appear after "equivalences".
+
+[[rewrite]]
+matches = "entailment"
+item = "entailment"
+
+[[rewrite]]
+regex = '^(.+?)\s+entailment'
+item = ["entailment", '\1']
+
+[[rewrite]]
+matches = "implication"
+item = "implication"
+
+[[rewrite]]
+regex = '^(.+?)\s+implication'
+item = ["implication", '\1']
+
+# ----------------------------- empty sets -----------------------------
+
+[[rewrite]]
+matches = [
+    "empty/null set",
+    "empty set",
+    "emptyset",
+    "varnothing"
+]
+item = "empty set"
+
+[[rewrite]]
+matches = "emptysetoarr"
+item = ["empty set", "with right arrow"]
+
+[[rewrite]]
+matches = "emptysetoarrl"
+item = ["empty set", "with left arrow"]
+
+[[rewrite]]
+matches = "emptysetobar"
+item = ["empty set", "with bar"]
+
+[[rewrite]]
+matches = "emptysetocirc"
+item = ["empty set", "with circle"]
+
+[[rewrite]]
+matches = "revemptyset"
+item = ["empty set", "reversed"]
+
+# ------------------------- exclamation points -------------------------
+
+[[rewrite]]
+matches = [
+    "red exclamation mark",
+    "heavy exclamation mark",
+    "heavy exclamation mark ornament",
+    "white exclamation mark",
+    "white exclamation mark ornament"
+]
+item = "exclamation point"
+
+[[rewrite]]
+matches = ["Exclam", "double exclamation mark", "DCc"]
+item = ["exclamation point", "double"]
+
+[[rewrite]]
+matches = "exclamation question mark"
+item = ["exclamation point", "and question mark"]
+
+[[rewrite]]
+matches = "textexclamdown"
+item = ["exclamation point", "upside-down"]
+
+# --------------------------- question marks ---------------------------
+
+[[rewrite]]
+matches = [
+    "black question mark ornament",
+    "white question mark ornament",
+    "white question mark",
+    "faQuestion"
+]
+item = "question mark"
+
+[[rewrite]]
+matches = "Question"
+item = ["question mark", "double"]
+
+[[rewrite]]
+matches = "textquestiondown"
+item = ["question mark", "upside down"]
+
+# -------------------------- quotation marks ---------------------------
+
+[[rewrite]]
+matches = "quotesinglbase"
+item = ["quotation marks", "single right base"]
+
+[[rewrite]]
+matches = "quotedblbase"
+item = ["quotation marks", "double right base"]
+
+[[rewrite]]
+matches = ["textquotesingle", "single quote"]
+item = ["quotation marks", "straight single"]
+
+[[rewrite]]
+matches = ["textquotedbl", "double quote"]
+item = ["quotation marks", "straight double"]
+
+[[rewrite]]
+matches = "triple quote"
+item = ["quotation marks", "straight triple"]
+
+[[rewrite]]
+matches = "textquotestraightbase"
+item = ["quotation marks", "straight single base"]
+
+[[rewrite]]
+matches = "textquotestraightdblbase"
+item = ["quotation marks", "straight double base"]
+
+[[rewrite]]
+regex = '^textquotedbl(left|right)$'
+item = ["quotation marks", 'double \1']
+
+[[rewrite]]
+regex = '^textquote(left|right)$'
+item = ["quotation marks", 'single \1']
+
+[[rewrite]]
+regex = '^faQuote(Left|Right)$'
+lowercase_item = true
+item = ["quotation marks", 'decorative double \1']
+
+[[rewrite]]
+matches = [
+    "heavy double comma quotation mark ornament",
+    "right quotation marks"
+]
+item = ["quotation marks", "decorative double right"]
+
+[[rewrite]]
+matches = [
+    "heavy double turned comma quotation mark ornament",
+    "left quotation marks"
+]
+item = ["quotation marks", "decorative double left"]
+
+[[rewrite]]
+matches = "heavyqtleft"
+item = ["quotation marks", "decorative double left, inverted"]
+
+[[rewrite]]
+matches = "heavyqtright"
+item = ["quotation marks", "decorative double right, inverted"]
+
+[[rewrite]]
+matches = "heavy low double comma quotation mark ornament"
+item = ["quotation marks", "decorative double left base"]
+
+[[rewrite]]
+matches = "heavy low single comma quotation mark ornament"
+item = ["quotation marks", "decorative single left base"]
+
+[[rewrite]]
+matches = "heavy single comma quotation mark ornament"
+item = ["quotation marks", "decorative right"]
+
+[[rewrite]]
+matches = "heavy single turned comma quotation mark ornament"
+item = ["quotation marks", "decorative left"]
+
+[[rewrite]]
+matches = "back quote (grave)"
+item = ["quotation marks", "single back"]
+
+[[rewrite]]
+regex = '^guillemet(left|right)$'
+item = ["guillemet", '\1']
+
+[[rewrite]]
+regex = '^guilsingl(left|right)$'
+item = ["guillemet", '\1 single']
+
+[[rewrite]]
+regex = '^heavy (left|right)-pointing angle quotation mark ornament$'
+item = ["guillemet", 'decorative \1 single']
+
+# ------------------------------- leaves -------------------------------
+
+[[rewrite]]
+matches = "leaf fluttering in wind"
+item = ["leaf", "fluttering"]
+
+[[rewrite]]
+matches = "fallen leaf"
+item = ["leaf", "falling"]
+
+[[rewrite]]
+contains = "maple leaf"
+item = ["leaf", "maple"]
+
+[[rewrite]]
+regex = '^adf.*leaf'
+item = ["leaf", "fleuron"]
+
+[[rewrite]]
+matches = ["textleaf", "faLeaf", "tiLeaf", "leaves", "textleaf"]
+item = "leaf"
+
+# -------------------------- dotless i and j ---------------------------
+
+[[rewrite]]
+render_contains = '(\i)'
+item = ["i", "dotless"]
+
+[[rewrite]]
+render_contains = [
+    '($\imath$)',
+    '(\BSKimath)',
+    '(\STIXimath)'
+]
+item = ["i", "dotless, math mode"]
+
+[[rewrite]]
+render_contains = '(\j)'
+item = ["j", "dotless"]
+
+[[rewrite]]
+render_contains = [
+    '($\jmath$)',
+    '(\BSKjmath)',
+    '(\STIXjmath)'
+]
+item = ["j", "dotless, math mode"]
+
+# --------------------------- legal symbols ----------------------------
+
+[[rewrite]]
+compare_lowercase = true
+contains = "copyright"
+item = ["legal symbols", "copyright"]
+
+[[rewrite]]
+matches = "ccCopy"
+item = ["legal symbols", "copyright"]
+
+[[rewrite]]
+contains = "copyleft"
+item = ["legal symbols", "copyleft"]
+
+[[rewrite]]
+prefix = ["textregistered", "faRegistered", "registered"]
+item = ["legal symbols", "registered trademark"]
+
+[[rewrite]]
+matches = [
+    "trademark",
+    "texttrademark",
+    "faTrademark",
+    "trade mark"
+]
+item = ["legal symbols", "trademark"]
+
+[[rewrite]]
+matches = "textservicemark"
+item = ["legal symbols", "service mark"]
+
+[[rewrite]]
+matches = "textcircledP"
+item = ["legal symbols", "phonographic copyright"]
+
+[[rewrite]]
+matches = ["ccby", "faCreativeCommonsBy"]
+item = ["legal symbols", "BY"]
+
+[[rewrite]]
+matches = ["ccnc", "faCreativeCommonsNc"]
+item = ["legal symbols", "NonCommercial"]
+
+[[rewrite]]
+matches = ["ccnd", "faCreativeCommonsNd"]
+item = ["legal symbols", "NoDerivatives"]
+
+[[rewrite]]
+matches = ["ccsa", "faCreativeCommonsSa"]
+item = ["legal symbols", "ShareAlike"]
+
+[[rewrite]]
+matches = "ccbyncnd"
+item = ["legal symbols", "CC BY-NC-ND"]
+
+[[rewrite]]
+prefix = ["ccPublicDomain", "faCreativeCommonsPd"]
+item = ["legal symbols", "public domain"]
+
+[[rewrite]]
+matches = ["cc", "ccLogo", "faCreativeCommons"]
+item = ["legal symbols", "CC"]
+
+[[rewrite]]
+matches = ["ccZero", "faCreativeCommonsZero"]
+item = ["legal symbols", "CC0"]
+
+[[rewrite]]
+matches = ["ccNonCommercialEU", "faCreativeCommonsNcEu"]
+item = ["legal symbols", "NonCommercial, euro"]
+
+[[rewrite]]
+matches = ["ccNonCommercialJP", "faCreativeCommonsNcJp"]
+item = ["legal symbols", "NonCommercial, yen"]
+
+[[rewrite]]
+regex = '^faCreativeCommons(Remix|Sampling|Share)$'
+item = ["legal symbols", '\1']
+
+[[rewrite]]
+matches = "faCreativeCommonsSamplingPlus"
+item = ["legal symbols", "Sampling Plus"]
+
+# This rule should appear at the end of this section.
+[[rewrite]]
+regex = '^cc([A-Z].+)$'
+item = ["legal symbols", '\1']
+
+# -------------------------- physics symbols ---------------------------
+
+[[rewrite]]
+matches = ["Gluon", "gluon", "gluons"]
+item = "gluon"
+
+[[rewrite]]
+regex = '^([A-Z])(boson|meson)(.+)$'
+item = ['\2', '\1 \3']
+
+[[rewrite]]
+matches = "Wboson"
+item = ["boson", "W"]
+
+[[rewrite]]
+regex = '^(eta|phi|Upsilon)meson$'
+item = ["meson", '\1']
+
+[[rewrite]]
+regex = '^(eta|phi|rho)meson(.+)$'
+item = ["meson", '\1, \2']
+
+[[rewrite]]
+regex = '^(quark|antiquark)([a-z])$'
+item = ['\1', '\2']
+
+[[rewrite]]
+regex = '^taulepton(plus|minus)$'
+item = ["tau lepton", '\1']
+
+[[rewrite]]
+regex = '^(Kaon|pion)(plus|minus|null)$'
+lowercase_item = true
+item = ['\1', '\2']
+
+[[rewrite]]
+matches = "Jpsimeson"
+item = ["meson", "J/psi"]
+
+[[rewrite]]
+regex = '^(Higgs|Z)boson$'
+item = ["boson", '\1']
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(anti\w+)\*?$'
+word = '\1'
+lowercase_word = true
+
+# This rule should appear before the preceding rule.  This is a two-rule
+# hack to convert, e.g., "\fermiDistrib" to "Fermi distribution",
+# capitalized as such.
+[[rewrite]]
+regex = '^(.+)Distrib$'
+capitalize_word = true
+word = '\1 distribution'
+continue = true
+
+[[rewrite]]
+regex = '^(.+?)\s+Distribution$'
+item = '\1 distribution'
+
+[[rewrite]]
+regex = '^(error|experimental|external|internal)sym$'
+item = '\1'
+
+[[rewrite]]
+regex = '^(ionic|metal|h)bond$'
+item = ["bond, chemical", '\1']
+
+[[rewrite]]
+regex = '^spin(up|down)$'
+item = ["spin", '\1']
+
+[[rewrite]]
+regex = '^(svr|var)?photons?$'
+item = "photon"
+
+[[rewrite]]
+matches = "bond"
+item = "bond, chemical"
+
+[[rewrite]]
+matches = "covbond"
+item = ["bond, chemical", "covalent"]
+
+[[rewrite]]
+regex = '^(.+)covbond$'
+item = ["bond, chemical", 'covalent, \1']
+
+[[rewrite]]
+matches = ["bigbosonloop", "smallbosonloop"]
+item = ["boson", "loop"]
+
+[[rewrite]]
+regex = '^(?:big|small)bosonloop([A-Z])$'
+item = ["boson", 'loop, \1']
+
+# I don't know what all these types of fermions are so I'm lumping
+# them all under "fermion".
+[[rewrite]]
+regex = '^(h|sh|w|wh)fermion$'
+item = "fermion"
+
+# This rule should appear last in this section.
+[[rewrite]]
+matches = [
+    "adsorbate",
+    "adsorbent",
+    "anyon",
+    "atom",
+    "boson",
+    "conductivity",
+    "dipole",
+    "electron",
+    "exciton",
+    "fermion",
+    "graphene",
+    "graviton",
+    "hole",
+    "interaction",
+    "ion",
+    "magnon",
+    "method",
+    "muon",
+    "neutrino",
+    "neutron",
+    "nucleus",
+    "orbit",
+    "phonon",
+    "plasmon",
+    "polariton",
+    "polaron",
+    "positron",
+    "protein",
+    "proton",
+    "quadrupole",
+    "quark",
+    "reference",
+    "resistivity",
+    "solid",
+    "spin",
+    "surface",
+    "tachyon",
+    "water"
+]
+item = '\1'
+
+# --------------------- computers and peripherals ----------------------
+
+[[rewrite]]
+matches = [
+    "ComputerMouse",
+    "computer mouse",
+    "one button mouse",
+    "two button mouse",
+    "three button mouse"
+]
+item = ["mouse", "computer"]
+
+[[rewrite]]
+render_contains = '(\faMouse)'
+item = ["mouse", "computer"]
+
+[[rewrite]]
+matches = "mouse pointer"
+item = ["mouse", "pointer"]
+
+[[rewrite]]
+matches = [
+    "personal computer",
+    "old personal computer",
+    "desktop computer",
+    "laptop",
+    "tiDeviceDesktop",
+    "tiDeviceLaptop"
+]
+item = "computer"
+
+[[rewrite]]
+matches = "three networked computers"
+item = ["computer", "multiple, networked"]
+
+[[rewrite]]
+matches = "tiDeviceTablet"
+item = "tablet"
+
+# -------------------------- sports and games --------------------------
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = ['(\Football)', '(\faFutbol)']
+item = "soccer ball"
+
+[[rewrite]]
+matches = ["american football", "football"]
+item = ["football", "American"]
+
+[[rewrite]]
+matches = "field hockey"
+item = 'field hockey stick and ball'
+
+[[rewrite]]
+matches = "ice hockey"
+item = 'ice hockey stick and puck'
+
+[[rewrite]]
+matches = "cricket game"
+item = "cricket bat and ball"
+
+[[rewrite]]
+prefix = "table tennis"
+item = "ping pong"
+
+[[rewrite]]
+matches = "tennis"
+item = "tennis ball"
+
+[[rewrite]]
+matches = "pool 8 ball"
+item = "8 ball"
+
+[[rewrite]]
+matches = ["Cube", "epsdice", "fcdice"]
+item = "dice"
+
+[[rewrite]]
+render_contains = "fcData"
+item = ["dice", "3D"]
+
+[[rewrite]]
+prefix = "die face-"
+item = ["dice", "3D"]
+
+[[rewrite]]
+matches = "game die"
+item = ["dice", "3D"]
+
+[[rewrite]]
+matches = "flower playing cards"
+item = ["playing cards", "flower"]
+
+[[rewrite]]
+regex = 'playing (handball|water polo)$'
+item = '\1'
+
+[[rewrite]]
+regex = '^(runn|snowboard|ski)er$'
+item = '\1ing'
+
+[[rewrite]]
+contains = ["bicyclist", "biking", "cycling"]
+item = "cycling"
+not_contains = ["recycling", "Recycling"]
+
+[[rewrite]]
+contains = ["rowboat", "rowing boat"]
+item = "rowing"
+
+# ----------------------------- plus signs -----------------------------
+
+# This rule should appear early in this section.
+[[rewrite]]
+render_contains = [
+    '(\Plus)',
+    '(\faPlus)',
+    '(\tiPlus)',
+    '(\twemoji{2795})',
+    '(\usym{2795})'
+]
+item = ["plus", "bold"]
+
+[[rewrite]]
+matches = [
+    "plusses",
+    "bigplus",
+    "MVPlus",
+    "tplus"
+]
+item = "plus"
+
+[[rewrite]]
+matches = ["pluscirc", "circplus", "ringplus"]
+item = ["plus", "with circle"]
+
+[[rewrite]]
+matches = ["plusdot", "dotplus", "dotted plus"]
+item = ["plus", "with dot"]
+
+[[rewrite]]
+matches = ["pluseqq", "eqqplus"]
+item = ["plus", "with equal sign"]
+
+[[rewrite]]
+matches = "plushat"
+item = ["plus", "with hat"]
+
+[[rewrite]]
+matches = ["plussim", "simplus"]
+item = ["plus", "with similarity sign"]
+
+[[rewrite]]
+matches = "plustrif"
+item = ["plus", "with triangle"]
+
+[[rewrite]]
+matches = "plussubtwo"
+item = ["plus", "with subscripted 2"]
+
+[[rewrite]]
+matches = ["PlusCenterOpen", "PlusThinCenterOpen"]
+item = ["plus", "open center"]
+
+[[rewrite]]
+matches = "PlusOutline"
+item = ["plus", "outlined"]
+
+[[rewrite]]
+render_contains = "tiPlusOutline"
+item = ["plus", "hollow"]
+
+[[rewrite]]
+matches = "doubleplus"
+item = ["plus", "double"]
+
+[[rewrite]]
+matches = "tripleplus"
+item = ["plus", "triple"]
+
+# ----------------------------- pitchforks -----------------------------
+
+# This rule should appear early in this section.
+[[rewrite]]
+matches = [
+    "pitchfork",
+    "pitchforks",
+    "downpitchfork",
+    "leftpitchfork",
+    "rightpitchfork",
+    "uppitchfork",
+    "hmleftpitchfork",
+    "hmrightpitchfork",
+    "nepitchfork",
+    "nwpitchfork",
+    "sepitchfork",
+    "swpitchfork"
+]
+item = "pitchfork"
+
+[[rewrite]]
+regex = '^n.*pitchfork$'
+item = ["pitchfork", "negated"]
+
+[[rewrite]]
+matches = ["forksnot", "forkv"]
+item = ["pitchfork", "truncated handle"]
+
+[[rewrite]]
+matches = ["forks", "nforksnot"]
+item = ["pitchfork", "truncated handle, negated"]
+
+[[rewrite]]
+matches = "topfork"
+item = ["pitchfork", "bar handle"]
+
+[[rewrite]]
+regex = '^x.*pitchfork'
+item = ["pitchfork", "extensible"]
+
+# ----------------------------- calendars ------------------------------
+
+[[rewrite]]
+matches = [
+    "spiral calendar",
+    "spiral calendar pad",
+    "tear-off calendar",
+    "calendar symbols"
+]
+item = "calendar"
+
+[[rewrite]]
+regex = '^faCalendar(Day|Week)'
+lowercase_item = true
+item = ["calendar", 'marked \1']
+
+[[rewrite]]
+regex = '^faCalendar(Check|Minus|Plus|Times)'
+lowercase_item = true
+item = ["calendar", 'with \1']
+
+# This rule should follow all other faCalendar and tiCalendar rules.
+[[rewrite]]
+prefix = ["faCalendar", "tiCalendar"]
+item = "calendar"
+
+# ------------------------------ daggers -------------------------------
+
+[[rewrite]]
+matches = [
+    "dag",
+    "dagger",
+    "textdagger",
+    "single dagger"
+]
+item = "dagger"
+
+[[rewrite]]
+matches = [
+    "ddag",
+    "ddagger",
+    "textdaggerdbl",
+    "double vertical dagger"
+]
+item = ["dagger", "double vertical"]
+
+[[rewrite]]
+matches = "double horizontal dagger"
+item = ["dagger", "double horizontal"]
+
+[[rewrite]]
+matches = "double horizontal and vertical dagger"
+item = ["dagger", "double horizontal and vertical"]
+
+[[rewrite]]
+matches = "dagger knife"
+item = "dagger"
+
+# ------------------------------- skulls -------------------------------
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = [
+    '(\AREVskull)',
+    '(\SKULLskull)'
+]
+item = ["skull", "and crossbones"]
+
+[[rewrite]]
+matches = ["skulls", "skull", "bigskull"]
+item = "skull"
+
+[[rewrite]]
+matches = [
+    "skull and crossbones",
+    "black skull and crossbones"
+]
+item = ["skull", "and crossbones"]
+
+# ------------------------------ playing cards ------------------------------
+
+# The idea in this section is to format the trump-* cards in numerical, as
+# opposed to alphabetical, order.
+
+[[rewrite]]
+regex = '^playing card trump-(\d)$'
+item = ["playing cards", 'trump 0\1']
+word = 'trump \1'
+
+[[rewrite]]
+regex = '^playing card trump-(\d{2,})$'
+item = ["playing cards", 'trump \1']
+
+# This rule should go last in this section.
+[[rewrite]]
+regex = '^playing card\s+(.+)$'
+item = ["playing cards", '\1']
+
+# ------------------------------- card suits --------------------------------
+
+[[rewrite]]
+matches = "card suits"
+item = "playing card suits"
+
+[[rewrite]]
+regex = 'var(diamond|heart)'
+item = ["playing card suits", '\1, filled']
+
+[[rewrite]]
+regex = 'var(club|spade)'
+item = ["playing card suits", '\1, hollow']
+
+[[rewrite]]
+regex = 'black.*(diamond|heart).*suit'
+item = ["playing card suits", '\1, filled']
+
+[[rewrite]]
+regex = 'white.*(club|spade).*suit'
+item = ["playing card suits", '\1, hollow']
+
+[[rewrite]]
+matches = "ETX"
+item = ["playing card suits", "heart, filled"]
+
+[[rewrite]]
+matches = "EOT"
+item = ["playing card suits", "diamond, filled"]
+
+[[rewrite]]
+matches = "ENQ"
+item = ["playing card suits", "club"]
+
+[[rewrite]]
+matches = "ACK"
+item = ["playing card suits", "spade"]
+
+# This rule should appear late in this section.
+[[rewrite]]
+regex = '(diamond|heart|club|spade).*suit'
+item = ["playing card suits", '\1']
+
+# --------------------------------- hearts ----------------------------------
+
+# This rule should appear early in this section.
+[[rewrite]]
+render_contains = [
+    '(\AREVvarheart)',
+    '(\faHeart)',
+    '(\tiHeart)',
+    '(\tiHeartFullOutline)',
+    '(\usym{1F5A4})',
+    '(\usym{2764})'
+]
+item = ["heart", "filled"]
+
+# This rule should appear early in this section.
+[[rewrite]]
+render_contains = '(\tiHeartHalfOutline)'
+item = ["heart", "half filled"]
+
+# This rule should appear early in this section.
+[[rewrite]]
+render_contains = [
+    '(\usym{1F499})',
+    '(\usym{1F49A})',
+    '(\usym{1F49B})',
+    '(\usym{1F49C})'
+]
+item = ["heart", "halftoned"]
+
+# This rule should appear early in this section.
+[[rewrite]]
+render_contains = '(\bccoeur)'
+item = ["heart", "red"]
+
+[[rewrite]]
+matches = [
+    "Heart",
+    "hearts"
+]
+item = "heart"
+
+[[rewrite]]
+regex = '^(black|blue|brown|green|orange|purple|red|white|yellow)\s+heart$'
+item = ["heart", '\1']
+
+[[rewrite]]
+regex = '^(anatomical|beating|floral|growing|sparkling)\s+heart$'
+item = ["heart", '\1']
+
+[[rewrite]]
+matches = "heart decoration"
+item = ["heart", "framed"]
+
+[[rewrite]]
+matches = ["heart exclamation", "heavy heart exclamation mark ornament"]
+item = ["heart", "exclamation point"]
+
+[[rewrite]]
+matches = ["heart, broken", "broken heart"]
+item = ["heart", "broken"]
+
+[[rewrite]]
+matches = "revolving hearts"
+item = ["heart", "multiple, revolving"]
+
+[[rewrite]]
+matches = "two hearts"
+item = ["heart", "multiple"]
+
+[[rewrite]]
+regex = '^heart\s+(with\s+.*)$'
+item = ["heart", '\1']
+
+[[rewrite]]
+matches = "rotated floral heart bullet"
+item = ["heart", "rotated floral"]
+
+[[rewrite]]
+matches = "rotated heavy black heart bullet"
+item = ["heart", "rotated"]
+
+# ---------------------------------- suns -----------------------------------
+
+[[rewrite]]
+matches = ["astrosun", "Sun"]
+not_render_contains = '(\ifsSun)'
+item = ["sun", "astronomical"]
+
+[[rewrite]]
+render_contains = [
+    '($\ABXSun$)',
+    '(\STARSun)',
+    '(\Sun)',
+    '(\usym{2609})'
+]
+item = ["sun", "astronomical"]
+
+[[rewrite]]
+matches = [
+    "suns",
+    "sunny",
+    "white sun",
+    "white sun with rays",
+    "SI"
+]
+item = "sun"
+
+[[rewrite]]
+matches = [
+    "sun behind cloud",
+    "sun behind large cloud",
+    "sun behind small cloud",
+    "white sun behind cloud",
+    "white sun with small cloud",
+    "SunCloud"
+]
+item = ["sun", "behind cloud"]
+
+[[rewrite]]
+matches = "HalfSun"
+item = ["sun", "half"]
+
+[[rewrite]]
+matches = "NoSun"
+item = ["sun", "eclipsed"]
+
+[[rewrite]]
+matches = "white sun behind cloud with rain"
+item = ["sun", "behind cloud with rain"]
+
+# ------------------------------- input types -------------------------------
+
+[[rewrite]]
+matches = ["input latin capital letters", "input latin uppercase"]
+item = ["input type", "Latin uppercase"]
+
+[[rewrite]]
+matches = ["input latin small letters", "input latin lowercase"]
+item = ["input type", "Latin lowercase"]
+
+[[rewrite]]
+render_contains = '\twemoji{1f524}'
+item = ["input type", "Latin lowercase"]
+
+[[rewrite]]
+render_contains = '\usym{1F524}'
+item = ["input type", "Latin uppercase"]
+
+[[rewrite]]
+matches = "input numbers"
+item = ["input type", "numbers"]
+
+[[rewrite]]
+matches = "input symbols"
+item = ["input type", "symbols"]
+
+# --------------------------------- houses ----------------------------------
+
+[[rewrite]]
+matches = ["house", "house building"]
+item = "house"
+
+[[rewrite]]
+prefix = "derelict house"
+item = ["house", "derelict"]
+
+[[rewrite]]
+matches = ["houses", "house buildings"]
+item = ["house", "multiple"]
+
+[[rewrite]]
+matches = "house damage"
+item = ["house", "damaged"]
+
+[[rewrite]]
+matches = "house with garden"
+item = ["house", "with garden"]
+
+# ------------------------------ fax machines -------------------------------
+
+[[rewrite]]
+render_contains = "faFax"
+item = "fax machine"
+
+[[rewrite]]
+matches = ["Faxmachine", "fax icon"]
+item = "fax machine"
+
+# ----------------------------- alpine symbols ------------------------------
+
+[[rewrite]]
+regex = '^(Half)?(Filled)?Hut$'
+item = "hut"
+
+[[rewrite]]
+regex = '^(Var)?(Ice)?Mountain$'
+item = 'mountain'
+
+[[rewrite]]
+matches = "Joch"
+item = "yoke"
+
+# -------------------------------- currency ---------------------------------
+
+# euros
+
+[[rewrite]]
+matches = [
+    "EUR",
+    "EURcr",
+    "EURdig",
+    "EURhv",
+    "euro",
+    "Euro",
+    "eurologo",
+    "EURtm",
+    "geneuro",
+    "geneuronarrow",
+    "geneurowide",
+    "officialeuro",
+    "texteuro",
+    "wasyeuro"
+]
+item = "euro"
+
+[[rewrite]]
+matches = "bbeuro"
+item = ["euro", "blackboard bold"]
+
+# dollars
+
+[[rewrite]]
+matches = [
+    "dollar",
+    "EyesDollar",
+    "textdollar",
+    "textdollaroldstyle",
+    "heavy dollar sign"
+]
+item = "dollar sign"
+
+[[rewrite]]
+render_contains = ['(\$)', '(\ltextdollar)']
+item = "dollar sign"
+
+[[rewrite]]
+matches = "bbdollar"
+item = ["dollar sign", "blackboard bold"]
+
+[[rewrite]]
+matches = "mathdollar"
+item = ["dollar sign", "math mode"]
+render = ""
+
+# cents
+
+[[rewrite]]
+consider_all_entries = true
+matches = ["textcent", "textcentoldstyle"]
+item = "cent"
+
+[[rewrite]]
+matches = "mathcent"
+item = ["cent", "math mode"]
+
+# pound
+
+[[rewrite]]
+matches = ["pound", "pounds"]
+item = "pound"
+
+# This rule must precede the following one.
+[[rewrite]]
+matches = "mathsterling"
+item = ["pound", "math mode"]
+
+[[rewrite]]
+contains = "sterling"
+item = "pound"
+
+# other currency
+
+# China2e uses "\Pound" for pfund.
+[[rewrite]]
+matches = ["Pound", "Pfund"]
+item = "pfund"
+
+[[rewrite]]
+matches = "Ecommerce"
+item = "e-commerce"
+
+[[rewrite]]
+matches = "textcurrency"
+item = "currency"
+
+[[rewrite]]
+matches = "textcolonmonetary"
+item = "cedi"
+
+[[rewrite]]
+regex = '^(?:text)?(baht|dong|florin|guarani|lira|naira|peso|won|yen)$'
+item = '\1'
+
+# -------------------------------- envelopes --------------------------------
+
+[[rewrite]]
+matches = [
+    "Envelope",
+    "Letter",
+    "Postbox",
+    "back of envelope",
+    "envelopes"
+]
+item = "envelope"
+
+[[rewrite]]
+matches = "red envelope"
+item = ["envelope", "gift"]
+
+[[rewrite]]
+regex = '^envelope\s+(with.*)$'
+item = ["envelope", '\1']
+
+[[rewrite]]
+matches = "flying envelope"
+item = ["envelope", "incoming"]
+
+[[rewrite]]
+matches = ["incoming envelope", "open envelope"]
+item = ["envelope", '\1']
+
+[[rewrite]]
+matches = "pen over stamped envelope"
+item = ["envelope", "with pen"]
+
+[[rewrite]]
+matches = "Email"
+item = ["envelope", "with lightning"]
+
+[[rewrite]]
+render_contains = '\twemoji{1f4e7}'
+item = ["envelope", "with E"]
+
+[[rewrite]]
+render_contains = '\usym{1F4E7}'
+item = ["envelope", "with at sign"]
+
+[[rewrite]]
+matches = "stamped envelope"
+item = ["envelope", "stamped"]
+
+# --------------------------------- primes ----------------------------------
+
+[[rewrite]]
+matches = ["prime", "primes"]
+item = "prime"
+
+[[rewrite]]
+matches = ["dprime", "second"]
+item = ["prime", "double"]
+
+[[rewrite]]
+matches = ["trprime", "third"]
+item = ["prime", "triple"]
+
+[[rewrite]]
+matches = ["qprime", "fourth"]
+item = ["prime", "quadruple"]
+
+[[rewrite]]
+matches = "backprime"
+item = ["prime", "backward"]
+
+[[rewrite]]
+matches = "backdprime"
+item = ["prime", "backward double"]
+
+[[rewrite]]
+matches = "backtrprime"
+item = ["prime", "backward triple"]
+
+[[rewrite]]
+consider_all_entries = true
+matches = ["angular minutes", "minutes, angular", "arcminutes"]
+see = "prime"
+
+[[rewrite]]
+consider_all_entries = true
+matches = ["angular seconds", "seconds, angular", "arcseconds"]
+see = "prime, double"
+
+# -------------------------- cleaning symbols --------------------------
+
+# I learned what these mean from
+# https://en.wikipedia.org/wiki/Laundry_symbol,
+# https://www.ihateironing.com/blog/laundry-symbols-explained/, and other
+# websites.
+
+[[rewrite]]
+matches = "CleaningA"
+item = ["dry cleaning", "any solvent"]
+
+[[rewrite]]
+matches = "CleaningF"
+item = ["dry cleaning", "hydrocarbon solvents (HCS) only"]
+
+[[rewrite]]
+matches = "CleaningFF"
+item = ["dry cleaning", "hydrocarbon solvents (HCS) only, delicate"]
+
+[[rewrite]]
+matches = "CleaningP"
+item = ["dry cleaning", "tetrachloroethylene (PCE) only"]
+
+[[rewrite]]
+matches = "CleaningPP"
+item = ["dry cleaning", "tetrachloroethylene (PCE) only, delicate"]
+
+[[rewrite]]
+regex = '^At(Forty|Sixty|NinetyFive)$'
+convert_numbers = true
+item = ["machine wash", 'at or below \1C']
+word = 'at or below \1\\textcelsius\\ '
+
+[[rewrite]]
+regex = '^Short(Thirty|Forty|Fifty|Sixty|NinetyFive)$'
+convert_numbers = true
+item = ["machine wash", 'at or below \1C, reduced spin speed']
+word = 'at or below \1\\textcelsius, reduced spin speed '
+
+[[rewrite]]
+matches = "Handwash"
+item = ["machine wash", "by hand"]
+
+[[rewrite]]
+matches = "WashCotton"
+item = ["machine wash", "cotton"]
+
+[[rewrite]]
+matches = "WashSynthetics"
+item = ["machine wash", "synthetics"]
+
+[[rewrite]]
+matches = "WashWool"
+item = ["machine wash", "wool/silk"]
+
+[[rewrite]]
+matches = "Dontwash"
+item = "do not wash"
+
+[[rewrite]]
+matches = "Bleech"
+item = "bleach"
+
+[[rewrite]]
+matches = "NoBleech"
+item = "do not bleach"
+
+[[rewrite]]
+matches = "IroningI"
+item = ["ironing", "low temperature"]
+
+[[rewrite]]
+matches = "IroningII"
+item = ["ironing", "medium temperature"]
+
+[[rewrite]]
+matches = "IroningIII"
+item = ["ironing", "high temperature"]
+
+[[rewrite]]
+matches = "NoIroning"
+item = "do not iron"
+
+[[rewrite]]
+matches = "NoChemicalCleaning"
+item = "no dry cleaning"
+
+[[rewrite]]
+matches = "NoTumbler"
+item = "do not tumble dry"
+
+[[rewrite]]
+matches = "Tumbler"
+item = "tumble dry"
+
+# ----------------------------- airplanes ------------------------------
+
+[[rewrite]]
+matches = [
+    "airplane arrival",
+    "airplane arriving",
+    "airplane landing"
+]
+item = ["airplane", "landing"]
+
+[[rewrite]]
+matches = [
+    "airplane departure",
+    "airplane takeoff"
+]
+item = ["airplane", "taking off"]
+
+[[rewrite]]
+matches = "airplane, slashed"
+item = ["airplane", "slashed"]
+
+[[rewrite]]
+matches = "paper airplane"
+item = ["airplane", "paper"]
+
+[[rewrite]]
+matches = [
+    "up-pointing military airplane",
+    "fighter jet"
+]
+item = ["airplane", "military"]
+
+[[rewrite]]
+matches = [
+    "airplane overhead",
+    "airplanes",
+    "Plane",
+    "plane",
+    "planes",
+    "small airplane",
+    "northeast-pointing airplane",
+    "up-pointing airplane",
+    "up-pointing small airplane"
+]
+item = "airplane"
+
+# --------------------------- keyboard keys ----------------------------
+
+[[rewrite]]
+matches = ["applecmd", "wasycmd"]
+item = ["keyboard symbols", "command"]
+
+[[rewrite]]
+render_contains = '(\KEYSAlt)'
+item = ["keyboard symbols", "alternate"]
+
+[[rewrite]]
+matches = "AltGr"
+item = ["keyboard symbols", "alternate graphic"]
+
+[[rewrite]]
+matches = "BSpace"
+item = ["keyboard symbols", "backspace"]
+
+[[rewrite]]
+matches = "Ctrl"
+item = ["keyboard symbols", "control"]
+
+[[rewrite]]
+matches = "Del"
+item = ["keyboard symbols", "delete"]
+
+[[rewrite]]
+render_contains = '(\KEYSEnd)'
+item = ["keyboard symbols", "end"]
+
+[[rewrite]]
+matches = "Esc"
+item = ["keyboard symbols", "escape"]
+
+[[rewrite]]
+matches = "Ins"
+item = ["keyboard symbols", "insert"]
+
+[[rewrite]]
+matches = "NumLock"
+item = ["keyboard symbols", "numeric lock"]
+
+[[rewrite]]
+regex = '^Pg(Down|Up)$'
+lowercase_word = true
+item = ["keyboard symbols", 'page \1']
+
+[[rewrite]]
+matches = "PrtSc"
+item = ["keyboard symbols", "print screen"]
+
+[[rewrite]]
+matches = "keystroke"
+item = ["keyboard symbols", "customizable"]
+
+# This rule should appear last in this section.
+[[rewrite]]
+matches = [
+    'Break',
+    'Enter',
+    'Home',
+    'Return',
+    'Scroll',
+    'Shift',
+    'Spacebar',
+    'Tab'
+]
+lowercase_word = true
+item = ["keyboard symbols", '\1']
+
+# ----------------------------- countries ------------------------------
+
+[[rewrite]]
+matches = "GreatBritain"
+item = "Great Britain"
+
+[[rewrite]]
+matches = [
+    "Albania",
+    "Latvia",
+    "Andorra",
+    "Liechtenstein",
+    "Austria",
+    "Lithuania",
+    "Belarus",
+    "Luxembourg",
+    "Belgium",
+    "Macedonia",
+    "Bosnia",
+    "Malta",
+    "Bulgaria",
+    "Moldova",
+    "Croatia",
+    "Montenegro",
+    "Czechia",
+    "Netherlands",
+    "Denmark",
+    "Norway",
+    "Estonia",
+    "Poland",
+    "Finland",
+    "Portugal",
+    "France",
+    "Romania",
+    "Germany",
+    "Serbia",
+    "Slovakia",
+    "Greece",
+    "Slovenia",
+    "Hungary",
+    "Spain",
+    "Iceland",
+    "Sweden",
+    "Ireland",
+    "Switzerland",
+    "Italy",
+]
+item = '\1'
+
+# -------------------------- circled symbols ---------------------------
+
+[[rewrite]]
+regex = '''
+^(?:big|var)*o\
+(backslash|circle|dash|dot|greater than|left|less than|minus|plus|right|slash|top|triangle|vee|wedge)\
+(?:up)?$\
+'''
+item = ["circled symbols", '\1']
+
+[[rewrite]]
+matches = [
+    "plus, circled",
+    "large circled plus",
+    "small circled plus",
+    "logical xor"
+]
+item = ["circled symbols", "plus"]
+
+[[rewrite]]
+regex = '^circleddot(left|right)$'
+item = ["circled symbols", 'dot, with \1 arrow']
+
+[[rewrite]]
+matches = [
+    "oast",
+    "bigoast",
+    "circledast"
+]
+item = ["circled symbols", "asterisk"]
+
+[[rewrite]]
+render_contains = '\CircAsterick'
+item = ["circled symbols", "asterisk"]
+
+[[rewrite]]
+regex = '^(big|var)?o(co)?ast'
+item = ["circled symbols", "asterisk"]
+
+[[rewrite]]
+matches = ["odiv", "bigodiv"]
+item = ["circled symbols", "division"]
+
+[[rewrite]]
+matches = ["circledbslash", "obslash", "varobslash"]
+item = ["circled symbols", "backslash"]
+
+[[rewrite]]
+matches = ["circledcirc", "ocirc", "bigocirc"]
+item = ["circled symbols", "circle"]
+
+[[rewrite]]
+regex = '^circled(right|two|white)(dot|dots|bullet)$'
+item = ["circled symbols", '\1 \2']
+
+[[rewrite]]
+matches = "circledvert"
+item = ["circled symbols", "bar"]
+
+[[rewrite]]
+regex = '^blackcircled(right|two)(dot|dots)$'
+item = ["circled symbols", '\1 \2, inverse']
+
+# This rule should precede the generic "circled <anything>" rule.
+[[rewrite]]
+matches = [
+    "circledequal",
+    "oequal",
+    "CircledEq"
+]
+item = ["circled symbols", "equal"]
+
+# This rule should precede the generic "circled <anything>" rule.
+[[rewrite]]
+matches = "circled cross pommee"
+item = ["circled symbols", "pommee cross"]
+
+# This rule should precede the generic "circled <anything>" rule.
+[[rewrite]]
+matches = "circled information source"
+item = ["circled symbols", "information"]
+
+[[rewrite]]
+regex = '^circled\s+([A-Za-z\s]+)$'
+item = ["circled symbols", '\1']
+
+[[rewrite]]
+matches = ["obot", "bigobot", "odplus"]
+item = ["circled symbols", "bottom"]
+
+[[rewrite]]
+matches = ["overt", "bigovert", "varobar"]
+item = ["circled symbols", "vertical line"]
+
+[[rewrite]]
+matches = [
+    "otimes",
+    "bigotimes",
+    "olcross",
+    "varotimes",
+    "small circled times",
+    "large circled times",
+    "crossed circle",
+    "crossed small circle"
+]
+item = ["circled symbols", "multiplication"]
+
+[[rewrite]]
+matches = "otimeshat"
+item = ["circled symbols", "multiplication, with hat"]
+
+[[rewrite]]
+matches = "Otimes"
+item = ["circled symbols", "multiplication, double circled"]
+
+[[rewrite]]
+render_contains = '\CircTimes'
+item = ["circled symbols", "multiplication"]
+
+[[rewrite]]
+regex = '^(?:var)?o(greater|less)than$'
+item = ["circled symbols", '\1 than']
+
+# This should should precede the generic "circled<anything>" rule.
+[[rewrite]]
+matches = "circledless"
+item = ["circled symbols", "less than"]
+
+# This should should precede the generic "circled<anything>" rule.
+[[rewrite]]
+matches = "circledgtr"
+item = ["circled symbols", "greater than"]
+
+[[rewrite]]
+regex = '^circled([A-Za-z]+)$'
+not_contains = [
+    "dotleft",
+    "dotright",
+    "downarrow"
+]
+item = ["circled symbols", '\1']
+
+[[rewrite]]
+matches = "odotslashdot"
+item = ["circled symbols", "dot, slash, dot"]
+
+[[rewrite]]
+matches = "operp"
+item = ["circled symbols", "perpendicular"]
+
+[[rewrite]]
+matches = [
+    "up slashed circle",
+    "up slashed small circle",
+    "down slashed circle",
+    "down slashed small circle"
+]
+item = ["circled symbols", "slash"]
+
+[[rewrite]]
+matches = "CircledA"
+item = ["circled symbols", "A"]
+
+[[rewrite]]
+render_contains = '\CircSm'
+item = ["circled symbols", "similar or equal to"]
+
+[[rewrite]]
+prefix = "faQuestionCircle"
+item = ["circled symbols", "question mark"]
+
+[[rewrite]]
+matches = "SunshineOpenCircled"
+item = ["circled symbols", "sun"]
+[[rewrite]]
+matches = [
+    "PhoneHandset",
+    "telephone location sign"
+]
+item = ["circled symbols", "telephone handset"]
+
+# This rule needs to precede the generic "user" rules.
+[[rewrite]]
+prefix = "faUserCircle"
+item = ["circled symbols", "user"]
+
+# ------------------------------- users --------------------------------
+
+[[rewrite]]
+regex = '^user\s+(.+)$'
+item = ["user", '\1']
+
+[[rewrite]]
+matches = ["faUserAltSlash", "faUserSlash"]
+item = ["user", "slashed"]
+
+[[rewrite]]
+matches = "faUserMd"
+item = ["user", "medical"]
+
+[[rewrite]]
+matches = "faUsers"
+item = ["user", "multiple"]
+
+[[rewrite]]
+matches = "faUsersCog"
+item = ["user", "multiple, cog"]
+
+[[rewrite]]
+matches = "faUsersSlash"
+item = ["user", "multiple, slashed"]
+
+[[rewrite]]
+regex = '^faUser([A-Z]\w+)'
+lowercase_item = true
+item = ["user", '\1']
+
+# This rule should appear late in this section.
+[[rewrite]]
+prefix = "faUser"
+item = "user"
+
+# ------------------------------- trees --------------------------------
+
+[[rewrite]]
+matches = "trees"
+word = "tree"
+
+[[rewrite]]
+regex = '^(.+?)\s+tree$'
+item = ["tree", '\1']
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(autumn|summer|spring|winter|apple|palm|christmas)tree$'
+lowercase_item = true
+item = ["tree", '\1']
+
+[[rewrite]]
+matches = ["WorstTree", "tiTree", "faTree"]
+item = "tree"
+
+# ----------------------------- restrooms ------------------------------
+
+[[rewrite]]
+regex = '^(men|women|boy|girl)s$'
+word = "restroom"
+
+[[rewrite]]
+matches = ["Gentsroom", "Ladiesroom", "men's room", "women's room"]
+word = "restroom"
+
+# ------------------------------- chess --------------------------------
+
+[[rewrite]]
+regex = '^(?:white|black)\s+chess\s+(.+)$'
+item = ["chess", '\1']
+
+[[rewrite]]
+matches = ["chess pieces", "faChess"]
+item = ["chess", "pieces"]
+
+[[rewrite]]
+matches = "chess notation"
+item = ["chess", "notation"]
+
+[[rewrite]]
+compare_lowercase = true
+contains = "chessboard"
+item = ["chess", "board"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(?:black|white|sym|chess)\s*(bishop|king|knight|pawn|queen|rook)'
+item = ["chess", '\1']
+
+[[rewrite]]
+matches = ["rook", "knight", "pawn"]
+item = ["chess", '\1']
+
+[[rewrite]]
+matches = "chess symbols"
+word = "chess"
+
+# ---------------------------- cell phones -----------------------------
+
+[[rewrite]]
+matches = [
+    "mobile phone",
+    "Mobilefone",
+    "clamshell mobile phone",
+    "tiDevicePhone"
+]
+item = "cell phone"
+
+# This entry must appear before the "arrows" section.
+[[rewrite]]
+regex = '^mobile phone\s+(.+)$'
+item = ["cell phone", '\1']
+
+[[rewrite]]
+render_contains = '\usym{1F581}'
+item = "cell phone"
+
+[[rewrite]]
+matches = "telephones"
+item = ["cell phone", "multiple"]
+
+# ----------------------- traditional telephones -----------------------
+
+[[rewrite]]
+matches = "telephone receiver with page"
+item = ["telephone handset", "with page"]
+
+[[rewrite]]
+render_contains = '\usym{1F57C}'
+item = ["telephone handset", "with page"]
+
+[[rewrite]]
+render_contains = '\usym{1F580}'
+item = ["telephone handset", "atop modem"]
+
+[[rewrite]]
+matches = "phone volume"
+item = ["telephone handset", "volume"]
+
+[[rewrite]]
+render_contains = "faPhoneSquare"
+item = ["telephone handset", "inverse"]
+
+[[rewrite]]
+matches = "phone, slashed"
+item = ["telephone handset", "slashed"]
+
+[[rewrite]]
+render_contains = [
+    '\asapPhone',
+    '\faPhone',
+    '\mfPhoneAlt',
+    '\tiPhone'
+]
+item = "telephone handset"
+
+[[rewrite]]
+render_contains = ['\usym{1F57D}', '\usym{1F57B}']
+item = "telephone handset"
+
+# This rule should follow all of the more specific telephone-receiver entries.
+[[rewrite]]
+contains = "telephone receiver"
+item = "telephone handset"
+
+[[rewrite]]
+matches = [
+    "Telefon",
+    "Telephone",
+    "Phone",
+    "phone"
+]
+item = "telephone"
+
+[[rewrite]]
+contains = "touchtone telephone"
+item = "telephone"
+
+# ----------------------------- multimaps ------------------------------
+
+[[rewrite]]
+consider_all_entries = true
+matches = [
+    "linear implication",
+    "lollipop (mathematics)",
+    "spoon symbols (mathematics)"
+]
+format = "see{multimap}"
+
+[[rewrite]]
+matches = ["multimap", "rightspoon"]
+word = "multimap"
+
+[[rewrite]]
+matches = ["multimapinv", "leftspoon", "inverted multimap"]
+item = ["multimap", "inverse"]
+
+[[rewrite]]
+matches = ["leftrightspoon", "dualmap", "dual multimap", "multimapboth"]
+item = ["multimap", "dual"]
+
+[[rewrite]]
+matches = ["rightblackspoon", "multimapdot", "rightfilledspoon"]
+item = ["multimap", "black"]
+
+[[rewrite]]
+matches = ["leftrightblackspoon", "multimapdotboth"]
+item = ["multimap", "dual, black"]
+
+[[rewrite]]
+matches = ["multimapbothvert"]
+item = ["multimap", "dual, vertical"]
+
+[[rewrite]]
+matches = ["multimapdotbothvert"]
+item = ["multimap", "dual, vertical, black"]
+
+[[rewrite]]
+matches = ["multimapdotbothA", "origof", "whiteblackspoon"]
+item = ["multimap", "origin"]
+
+[[rewrite]]
+matches = ["multimapdotbothB", "imageof", "blackwhitespoon"]
+item = ["multimap", "image"]
+
+[[rewrite]]
+matches = ["multimapdotinv", "leftblackspoon", "leftfilledspoon"]
+item = ["multimap", "inverse, black"]
+
+[[rewrite]]
+matches = ["multimapdotbothAvert", "multimapdotbothBvert"]
+item = ["multimap", "vertical, black and white"]
+
+[[rewrite]]
+regex = '^(up|down)(black|filled)spoon$'
+item = ["multimap", "vertical, black"]
+
+[[rewrite]]
+matches = ["upspoon", "downspoon"]
+item = ["multimap", "vertical"]
+
+[[rewrite]]
+regex = '^[ns][ew](?:filled)?spoon$'
+item = ["multimap", "diagonal"]
+
+[[rewrite]]
+regex = '^not\s+.*multimap$'
+item = ["multimap", "negated"]
+
+[[rewrite]]
+matches = "ndualmap"
+item = ["multimap", "dual, negated"]
+
+# This rule should appear at the end of this section
+[[rewrite]]
+regex = '^n[a-z]*(spoon|multimap(inv)?|imageof|origof)$'
+item = ["multimap", "negated"]
+
+# ----------------------------- asterisks ------------------------------
+
+# This rule should appear early in this section.
+[[rewrite]]
+top_matches = "asterisks"
+matches = "asterisks"
+item = ["asterisk"]
+
+[[rewrite]]
+matches = "dotted asterisk"
+item = ["asterisk", "dotted"]
+
+# This rule should appear before the lowercase comparison to "asterisk".
+[[rewrite]]
+contains = ["Asterisk", " asterisk"]
+item = ["asterisk", "dingbat"]
+
+[[rewrite]]
+render_contains = '\twemoji{2a-20e3}'
+item = ["asterisk", "dingbat"]
+
+[[rewrite]]
+contains = "asterisk"
+render_contains = ['(\STIXdingasterisk)', '(\faAsterisk)']
+item = ["asterisk", "dingbat"]
+
+# This rule should precede the following one.  Note that it moves the
+# symbol to a different top-level item.
+[[rewrite]]
+top_matches = "asterisks"
+matches = "circled"
+item = ["circled symbols", "asterisk"]
+
+[[rewrite]]
+top_matches = "asterisks"
+regex = '^(.+)$'
+item = ["asterisk", '\1']
+
+[[rewrite]]
+compare_lowercase = true
+matches = [
+    "*",
+    "ast",
+    "asterisk",
+    "bigast",
+    "bigcoast",
+    "coasterisk",
+    "textasteriskcentered"
+]
+item = "asterisk"
+
+[[rewrite]]
+regex = '^(big)?box(co)?ast'
+item = ["asterisk", "boxed"]
+
+[[rewrite]]
+compare_lowercase = true
+matches = "asteriscus"
+item = ["asterisk", "metrical"]
+
+# ------------------------------- clouds -------------------------------
+
+[[rewrite]]
+top_matches = "clouds"
+item = "cloud"
+
+[[rewrite]]
+compare_lowercase = true
+matches = [
+    "cloud",
+    "cloudy",
+    "filledcloud",
+    "mathcloud",
+    "reversemathcloud"
+]
+item = "cloud"
+
+# This rule must follow the previous one.
+[[rewrite]]
+regex = '^Filled(Weak)?(.*)Cloud$'
+item = ["cloud", 'with \2']
+lowercase_item = true
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(weak)?(rain|snow)\s*cloud'
+item = ["cloud", 'with \2']
+lowercase_item = true
+
+[[rewrite]]
+regex = '^cloud\s+(.*)$'
+item = ["cloud", '\1']
+
+# ----------------------------- crucifixes -----------------------------
+
+[[rewrite]]
+compare_lowercase = true
+matches = [
+    "cross",
+    "crosses",
+    "crux",
+    "latin cross",
+    "summitsign",
+    "heavy latin cross"
+]
+item = "cross (crucifix)"
+
+# I believe all of these are pattee crosses, despite being called Maltese.
+[[rewrite]]
+matches = [
+    "maltese",
+    "CrossMaltese",
+    "Maltese cross",
+    "kreuz"
+]
+item = ["cross (crucifix)", "pattee"]
+word = "patt{\\'e}e"
+
+[[rewrite]]
+matches = "Celtic cross"
+item = ["cross (crucifix)", "Celtic"]
+
+[[rewrite]]
+matches = "cross pommee"
+item = ["cross (crucifix)", "pommee"]
+
+[[rewrite]]
+matches = "cross pommee with half-circle below"
+item = ["cross (crucifix)", "pommee, with half-circle below"]
+
+[[rewrite]]
+matches = "CrossBoldOutline"
+item = ["cross (crucifix)", "outlined, bold"]
+
+[[rewrite]]
+matches = "CrossOutline"
+item = ["cross (crucifix)", "outlined"]
+
+[[rewrite]]
+matches = "white latin cross"
+item = ["cross (crucifix)", "hollow"]
+
+[[rewrite]]
+matches = ["CrossOpenShadow", "shadowed white latin cross"]
+item = ["cross (crucifix)", "shadowed"]
+
+[[rewrite]]
+matches = "outlined latin cross"
+item = ["cross (crucifix)", "outlined"]
+
+[[rewrite]]
+matches = "heavy greek cross"
+item = ["cross (crucifix)", "Greek, bold"]
+
+[[rewrite]]
+matches = "outlined greek cross"
+item = ["cross (crucifix)", "Greek, outlined"]
+
+[[rewrite]]
+matches = "orthodox cross"
+item = ["cross (crucifix)", "Orthodox"]
+
+[[rewrite]]
+matches = "open center cross"
+item = ["cross (crucifix)", "open center"]
+
+[[rewrite]]
+matches = "heavy open center cross"
+item = ["cross (crucifix)", "open center, bold"]
+
+[[rewrite]]
+regex = '^(east|west)cross$'
+capitalize_word = true
+item = ["cross (crucifix)", '\1ern']
+
+[[rewrite]]
+matches = "CrossClowerTips"
+item = ["cross (crucifix)", "clover tipped"]  # "clower" = "clover"?
+
+[[rewrite]]
+matches = "crucifixes"
+item = "crucifix"
+see = "cross (crucifix)"
+
+# ---------------------------------- faces ----------------------------------
+
+# ... cat faces ...
+
+[[rewrite]]
+regex = '^(.*)heart-eyes(.*)$'
+item = '\1heart-shaped eyes\2'
+continue = true
+
+[[rewrite]]
+regex = '^(.*?)\s+cat(?:\sface)?$'
+item = ["cat", '\1']
+
+[[rewrite]]
+regex = '^cat(?:\sface)?\s+(.*?)'
+item = ["cat", '\1']
+
+[[rewrite]]
+regex = '^(.*?)\s+cat(?:\sface)?,?\s+(.*)$'
+item = ["cat", '\1, \2']
+
+# ... all other faces ...
+
+# This rule must precede the generic "face" rule.
+[[rewrite]]
+matches = "face towel"
+item = "towel"
+
+# This rule must precede the generic "face" rule.
+[[rewrite]]
+matches = "grinning squinting face"
+item = ["face", "grinning and squinting"]
+
+[[rewrite]]
+regex = '^face\s+(.*)$'
+item = ["face", '\1']
+
+# This rule must precede the following one.
+[[rewrite]]
+regex = '^(bear|cat|clown|cow|dog|dragon|frog|hamster|horse|monkey|mouse|panda|pig|rabbit|tiger|wind|wolf)\s+face$'
+item = '\1'
+
+[[rewrite]]
+regex = '^(.*?)\s+face$'
+item = ["face", '\1']
+not_contains = "moon"
+
+[[rewrite]]
+regex = '^(.*?)\s+face,?\s+(.*)$'
+not_contains = "clock face"
+item = ["face", '\1, \2']
+
+[[rewrite]]
+compare_lowercase = true
+matches = ["smiley", "smileface", "soh"]
+item = ["face", "smiley"]
+
+[[rewrite]]
+regex = '^([A-Za-z]+)Face$'
+item = ["face", '\1']
+lowercase_word = true
+word = '\1'
+
+[[rewrite]]
+matches = ["blacksmiley", "invsmileface", "STX"]
+item = ["face", "smiley, inverse"]
+
+[[rewrite]]
+matches = "grimace"
+item = ["face", "grimacing"]
+
+[[rewrite]]
+matches = ["frownie", "Frowny"]
+item = ["face", "frowning"]
+
+[[rewrite]]
+matches = ["textthing", "thething"]
+item = ["face", "with sunglasses"]
+
+[[rewrite]]
+matches = "sadface"
+item = ["face", "sad"]
+
+[[rewrite]]
+prefix = "faGrinBeamSweat"
+item = ["face", "grinning and sweating"]
+
+[[rewrite]]
+prefix = "faGrinWink"
+item = ["face", "grinning and winking"]
+
+# This rule should precede the following one.
+[[rewrite]]
+prefix = "faGrinSquintTears"
+item = ["face", "grinning and squinting, with tears"]
+
+[[rewrite]]
+prefix = "faGrinSquint"
+item = ["face", "grinning and squinting"]
+
+[[rewrite]]
+regex = '^faGrin(Hearts|Stars|Tears|Tongue)'
+lowercase_item = true
+item = ["face", 'grinning, with \1']
+
+# This rule should follow all of the other faGrin rules.
+[[rewrite]]
+prefix = "faGrin"
+item = ["face", "grinning"]
+
+[[rewrite]]
+regex = '^fa(Angry|Dizzy|Meh|Sad)'
+lowercase_item = true
+item = ["face", '\1']
+
+[[rewrite]]
+regex = '^fa(Frown|Kiss|Laugh)'
+lowercase_item = true
+item = ["face", '\1ing']
+
+[[rewrite]]
+render_contains = ['\HQ', 'Hq']
+item = ["face", "hieroglyphic"]
+
+[[rewrite]]
+top_matches = "faces"
+item = ["face"]
+
+# ------------------------------- clocks -------------------------------
+
+[[rewrite]]
+matches = ["clock", "clock symbols", "ClockLogo"]
+word = "clock"
+
+[[rewrite]]
+compare_lowercase = true
+contains = [" clock", "stopwatch", "alarm clock", "pocket watch"]
+word = "clock"
+
+# It's excessive to show a glyph for every half-hour of the day.  Hence, we
+# keep a single glyph (four o'clock, selected arbitrarily)...
+[[rewrite]]
+matches = "four o'clock"
+word = "clock"
+
+# ...and delete all other clocks showing the hour or half-hour.
+[[rewrite]]
+contains = ["o'clock", "-thirty"]
+item = ["clock", "showing a specific time"]
+render = ""
+
+# --------------------------- boxed symbols ----------------------------
+
+[[rewrite]]
+regex = '^(big)?boxbslash'
+word = '\1boxbackslash'
+continue = true
+
+[[rewrite]]
+regex = '^(big)?boxbot'
+word = '\1boxbottom'
+continue = true
+
+[[rewrite]]
+regex = '^(big)?boxdiag'
+word = '\1boxslash'
+continue = true
+
+[[rewrite]]
+regex = '^(big)?boxcirc'
+word = '\1boxcircle'
+continue = true
+
+[[rewrite]]
+regex = '^(big)?boxdiv'
+word = '\1boxdivision'
+continue = true
+
+[[rewrite]]
+regex = '^(big)?boxtriangle'
+word = '\1boxtriangle'
+continue = true
+
+[[rewrite]]
+regex = '^(big)?boxvert'
+word = '\1boxbar'
+continue = true
+
+[[rewrite]]
+regex = '^(big)?boxvoid'
+word = '\1boxempty'
+continue = true
+
+[[rewrite]]
+regex = '^(big)?box([a-z]+)$'
+not_render_contains = [
+    '$\boxleft$',
+    '$\boxright$'
+]
+not_contains = [
+    "boxed",
+    "dotleft",
+    "dotright",
+    "onbox"
+]
+item = ["boxed symbols", '\2']
+
+[[rewrite]]
+matches = "plus, squared"
+item = ["boxed symbols", "plus"]
+
+# ------------------------------- angles -------------------------------
+
+[[rewrite]]
+matches = [
+    "angle",
+    "angdnr",
+    "revangle",
+    "turnangle"
+]
+item = "angle"
+
+[[rewrite]]
+render_contains = '\STIXangles'
+item = ["angle", "with S"]
+
+[[rewrite]]
+render_contains = '\STIXangleubar'
+item = ["angle", "with underbar"]
+
+[[rewrite]]
+matches = "revangleubar"
+item = ["angle", "with underbar"]
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = '^measangle..to..$'
+item = ["angle", "measured, with arrow"]
+
+[[rewrite]]
+contains = [
+    "sphericalangle",
+    "measangle",
+    "measuredangle",
+    "AngleSign",
+    "gtlpar",
+    "varangle"
+]
+item = ["angle", "spherical"]
+
+[[rewrite]]
+contains = "rightangle"
+item = ["angle", "right"]
+
+[[rewrite]]
+contains = "wideangle"
+item = ["angle", "obtuse"]
+
+[[rewrite]]
+contains = "threedangle"
+item = ["angle", "3-D"]
+
+# ------------------------------ genders -------------------------------
+
+# Categorize a picture of a man under "man".
+# This rule should appear early in this section.
+[[rewrite]]
+render_contains = "faMale"
+item = "man"
+
+# Categorize a picture of a womman under "womman".
+# This rule should appear early in this section.
+[[rewrite]]
+render_contains = "faFemale"
+item = "woman"
+
+[[rewrite]]
+matches = ["genderless", "Neutral"]
+item = ["gender signs", "neuter"]
+
+# This rule must precede the following one.
+[[rewrite]]
+render_contains = [
+    '\faTransgender*',
+    '\twemoji{26a7}',
+    '\usym{26A7}'
+]
+item = ["gender signs", "male with stroke and male and female"]
+
+[[rewrite]]
+render_contains = '\faTransgender'
+item = ["gender signs", "male and female"]
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = "HERMAPHRODITE"
+item = ["gender signs", "male and female, filled"]
+
+[[rewrite]]
+compare_lowercase = true
+matches = "hermaphrodite"
+item = ["gender signs", "male and female"]
+
+[[rewrite]]
+matches = "male and female sign"
+item = ["gender signs", "male and female"]
+
+[[rewrite]]
+matches = "boy"
+render_contains = '$\ABXMars$'
+item = ["gender signs", "male"]
+
+[[rewrite]]
+matches = ["male sign", "FF"]
+item = ["gender signs", "male"]
+
+[[rewrite]]
+matches = "girl"
+render_contains = '$\ABXVenus'
+item = ["gender signs", "female"]
+
+[[rewrite]]
+matches = [
+    "female sign",
+    "textfemale",
+    "VT"
+]
+item = ["gender signs", "female"]
+
+[[rewrite]]
+matches = ["textuncrfemale", "neuter"]
+item = ["gender signs", "female, without stroke"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(male|female)/?(male|female)(?: sign)?$'
+lowercase_item = true
+item = ["gender signs", '\1/\2']
+
+[[rewrite]]
+matches = "interlocked female and male sign"
+item = ["gender signs", "female/male"]
+
+[[rewrite]]
+regex = '^doubled (male|female) sign$'
+item = ["gender signs", '\1/\1']
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = ["MALE", "FEMALE"]
+lowercase_item = true
+item = ["gender signs", '\1, filled']
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(male|female)$'
+lowercase_item = true
+item = ["gender signs", '\1']
+
+[[rewrite]]
+prefix = "male with stroke"
+item = ["gender signs", "male, extra stroke"]
+
+[[rewrite]]
+matches = [
+    "horizontal male with stroke sign",
+    "vertical male with stroke sign"
+]
+item = ["gender signs", "male, extra stroke"]
+
+# ---------------------------- men and women -----------------------------
+
+# This rule should precede the following rule.
+[[rewrite]]
+contains = "bowing"
+item = "bowing"
+
+[[rewrite]]
+regex = '^(man|woman|person)\s+(.*)$'
+not_contains = [
+     " and ",
+     " getting ",
+     " in ",
+     " wearing ",
+     " with ",
+     " working "
+]
+item = '\2'
+
+[[rewrite]]
+regex = '^(male|man)\s+(.*)$'
+not_contains = "sign"
+item = ['man', '\2']
+
+[[rewrite]]
+regex = '^(female|woman)\s+(.*)$'
+not_contains = "sign"
+item = ['woman', '\2']
+
+# ---------------------- astronomy and astrology -----------------------
+
+[[rewrite]]
+compare_lowercase = true
+matches = "scorpius"
+item = "Scorpio"
+
+[[rewrite]]
+compare_lowercase = true
+matches = "capricornus"
+item = "Capricorn"
+
+[[rewrite]]
+compare_lowercase = true
+matches = [
+    "mercury",
+    "venus",
+    "earth",
+    "mars",
+    "jupiter",
+    "saturn",
+    "uranus",
+    "neptune",
+    "pluto",
+
+    "aries",
+    "taurus",
+    "gemini",
+    "cancer",
+    "leo",
+    "virgo",
+    "libra",
+    "scorpio",
+    "sagittarius",
+    "capricorn",
+    "aquarius",
+    "pisces"
+]
+word = '\1'
+capitalize_word = true
+
+[[rewrite]]
+regex = '^(North|South)Node$'
+lowercase_item = true
+item = '\1 node'
+
+[[rewrite]]
+matches = "ascnode"
+item = "ascending node"
+
+[[rewrite]]
+matches = "descnode"
+item = "descending node"
+
+[[rewrite]]
+compare_lowercase = true
+matches = "conjunction"
+item = ["conjunction", "astronomical"]
+
+# ------------------------------ numbers -------------------------------
+
+[[rewrite]]
+regex = '^MV(Zero|One|Two|Three|Four|Five|Six|Seven|Eight|Nine)$'
+convert_numbers = true
+item = '\1'
+
+[[rewrite]]
+regex = '^Stroke(One|Two|Three|Four|Five)$'
+convert_numbers = true
+item = ['\1', "tally"]
+
+[[rewrite]]
+render_regex = '\(\\showbullcntr\{(\d+)\}\)'
+item = ['\1', "tally"]
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = 'negative circled.*digit (one|two|three|four|five|six|seven|eight|nine)$'
+convert_numbers = true
+item = ['\1', "circled, filled"]
+
+[[rewrite]]
+regex = 'circled.*digit (one|two|three|four|five|six|seven|eight|nine)$'
+convert_numbers = true
+item = ['\1', "circled"]
+
+[[rewrite]]
+render_regex = '\\twemoji\{3(\d)-20e3\}'
+item = ['\1', "boxed, blue"]
+
+[[rewrite]]
+render_contains = '\twemoji{1f51f}'
+item = ["10", "boxed, blue"]
+
+[[rewrite]]
+contains = "keycap ten"
+item = ["10", "boxed"]
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = 'negative circled.*number ten'
+item = ["10", "circled, filled"]
+
+[[rewrite]]
+regex = 'circled.*number ten'
+item = ["10", "circled"]
+
+[[rewrite]]
+regex = '^text(zero|one|two|three|four|five|six|seven|eight|nine)oldstyle$'
+convert_numbers = true
+item = ['\1', "old style"]
+
+[[rewrite]]
+regex = '^text(one|two|three)superior$'
+convert_numbers = true
+item = ['\1', "superior"]
+
+[[rewrite]]
+regex = '^textturn(two|three)$'
+convert_numbers = true
+item = ['\1', "rotated"]
+
+[[rewrite]]
+matches = "textlhookfour"
+item = ["4", "hooked"]
+
+[[rewrite]]
+matches = "textcrtwo"
+item = ["2", "barred"]
+
+[[rewrite]]
+render_contains = '(\DOZx)'
+item = ["2", "rotated"]
+
+[[rewrite]]
+render_contains = '(\DOZe)'
+item = ["3", "rotated"]
+
+# ... ancient languages ...
+
+[[rewrite]]
+matches = "one"
+render_contains = '\textpmhg'
+item = ["1", "hieroglyphic"]
+
+[[rewrite]]
+matches = "ten"
+render_contains = '\textpmhg'
+item = ["10", "hieroglyphic"]
+
+[[rewrite]]
+contains = "hundred"
+render_contains = '\textpmhg'
+item = ["100", "hieroglyphic"]
+
+[[rewrite]]
+matches = "thousand"
+render_contains = '\textpmhg'
+item = ["1000", "hieroglyphic"]
+
+[[rewrite]]
+matches = "million"
+render_contains = '\textpmhg'
+item = ["1000000", "hieroglyphic"]
+
+[[rewrite]]
+regex = '^(\d+)$'
+render_contains = '\ARUNEs'
+item = ['\1', "runic"]
+
+[[rewrite]]
+regex = '^BN([ivxlcdm]+)$'
+convert_numbers = true
+item = ['\1', "Linear B"]
+
+[[rewrite]]
+matches = "EOzero"
+item = ["0", "Epi-Olmec"]
+
+[[rewrite]]
+regex = '^EO([ivx]+)$'
+convert_numbers = true
+item = ['\1', "Epi-Olmec"]
+
+# ------------------------------- globes -------------------------------
+
+[[rewrite]]
+matches = "faGlobe"
+item = ["globe", "with meridians"]
+
+[[rewrite]]
+matches = ["Mundus", "world", "tiGlobe", "tiGlobeOutline"]
+word = "globe"
+
+[[rewrite]]
+regex = '^globe\s+(.+)$'
+item = ["globe", '\1']
+
+[[rewrite]]
+regex = '^faGlobe(Africa|Americas|Asia|Europe)$'
+item = ["globe", 'showing \1']
+
+# ------------------------- therefore symbols --------------------------
+
+[[rewrite]]
+matches = [
+    "therefore",
+    "uptherefore",
+    "wasytherefore"
+]
+item = "therefore"
+
+[[rewrite]]
+regex = '^(down|left|right)therefore$'
+item = ["therefore", '\1']
+
+[[rewrite]]
+matches = ["because", "since"]
+item = ["therefore", "down"]
+
+# -------------------- various mathematical symbols --------------------
+
+[[rewrite]]
+matches = ["wreath", "wr"]
+item = "wreath product"
+
+[[rewrite]]
+compare_lowercase = true
+contains = "forall"
+item = "for all"
+
+[[rewrite]]
+matches = [
+    "universal bunch quantifier",
+    "universal individual quantifier"
+]
+item = "for all"
+
+[[rewrite]]
+matches = "suum"
+item = ["sum", "horizontally extensible"]
+
+[[rewrite]]
+matches = "varsum"
+item = "sum"
+
+[[rewrite]]
+matches = [
+    "osum",
+    "varosum",
+    "modtwosum",
+    "varmodtwosum"
+]
+item = ["sum", "circular"]
+
+[[rewrite]]
+matches = ["prod", "varprod", "smallprod"]
+item = "product"
+
+[[rewrite]]
+matches = "prood"
+item = ["product", "horizontally extensible"]
+
+[[rewrite]]
+matches = [
+    "coprod",
+    "varcoprod",
+    "amalg",
+    "varamalg"
+]
+item = "coproduct"
+
+[[rewrite]]
+matches = ["Im", "im", "oldIm"]
+item = "imaginary"
+
+[[rewrite]]
+matches = ["Re", "oldRe"]
+item = "real"
+
+[[rewrite]]
+contains = "mathwitch"
+item = ["witch", "math mode"]
+
+[[rewrite]]
+regex = '^math.*ghost'
+item = ["ghost", "math mode"]
+
+[[rewrite]]
+consider_all_entries = true
+compare_lowercase = true
+contains = ["percent", "%"]
+word = "percent"
+
+[[rewrite]]
+matches = ["perthousand", "tcperthousand", "textperthousand", "permil"]
+item = "per mill"
+
+[[rewrite]]
+matches = ["tcpertenthousand", "textpertenthousand"]
+item = "permyriad"
+
+[[rewrite]]
+matches = "powerset"
+item = "power set"
+
+[[rewrite]]
+matches = "Eulerconst"
+item = "Euler's constant"
+
+[[rewrite]]
+compare_lowercase = true
+regex = 'q\.?e\.?d'
+item = "end of proof"
+
+[[rewrite]]
+render_contains = ['(\End)', '(\wasserdicht)']
+item = 'end of proof'
+
+[[rewrite]]
+matches = "hksqrt"
+item = ["square root", "with hook"]
+
+[[rewrite]]
+matches = ["sqrt*", "surd", "textsurd"]
+item = ["square root", "without overbar"]
+
+[[rewrite]]
+matches = ["pm", "textpm"]
+word = "plus or minus"
+
+[[rewrite]]
+matches = "mp"
+word = "minus or plus"
+
+[[rewrite]]
+regex = '^[dnst]{3,4}stile$'
+word = "consequence relation"
+
+[[rewrite]]
+matches = "consequence relation denied"
+item = ["consequence relation", "denied"]
+
+[[rewrite]]
+regex = '^(continuous.*)\s(function|multi-function|map|multi-map)$'
+item = ["function", '\g<0>']
+
+[[rewrite]]
+matches = ["function/backward composition", "circ"]
+item = ["function", "composition"]
+
+[[rewrite]]
+matches = "function converse"
+item = ["function", "converse"]
+
+[[rewrite]]
+matches = ["partial", "varpartialdiff"]
+item = "partial derivative"
+
+[[rewrite]]
+matches = "partialslash"
+item = ["partial derivative", "slashed"]
+
+[[rewrite]]
+top_matches = "annuity"
+word = "annuity symbols"
+
+[[rewrite]]
+regex = '^text(one|three)(half|quarters?)$'
+item = ["fractions", '\1 \2']
+
+# This rule should precede the generic "minus" rule.
+[[rewrite]]
+render_contains = [
+    '\faMinus',
+    '\tiMinus',
+    '\twemoji{2796}',
+    '\usym{2796}',
+    '\MVMinus'
+]
+item = ["minus", "decorative"]
+
+[[rewrite]]
+matches = ["minus", "textminus", "tminus"]
+item = "minus"
+
+[[rewrite]]
+regex = '^minushook(down|up)$'
+item = ["minus", "hooked"]
+
+[[rewrite]]
+regex = '^hook(down|up)minus$'
+item = ["minus", "hooked"]
+
+[[rewrite]]
+regex = '^minus(colon|dot)$'
+item = ["minus", '\1']
+
+[[rewrite]]
+matches = "dashcolon"
+item = ["minus", "colon"]
+
+[[rewrite]]
+matches = "minuscoloncolon"
+item = ["minus", "colon, double"]
+
+[[rewrite]]
+matches = ["minusfdots", "minusrdots", "dotsminusdots"]
+item = ["minus", "dots"]
+
+[[rewrite]]
+matches = "dotted minus"
+item = ["minus", "dot"]
+
+[[rewrite]]
+matches = "minuso"
+item = ["minus", "with circle overlay"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(comma|dot|u)minus$'
+item = ["minus", '\1']
+
+[[rewrite]]
+matches = "textdiscount"
+item = ["minus", "commercial"]
+
+[[rewrite]]
+matches = "bigcomplementop"
+item = "complement"
+
+[[rewrite]]
+matches = "shuffle"
+item = "shuffle product"
+
+[[rewrite]]
+matches = "smashtimes"
+item = "smash product"
+
+[[rewrite]]
+matches = "bagmember"
+item = "bag membership"
+
+[[rewrite]]
+matches = ["intercal", "varintercal"]
+item = "intercalate"
+
+[[rewrite]]
+matches = ["interleave", "biginterleave"]
+item = "interleave"
+
+[[rewrite]]
+matches = "suchthat"
+item = "such that"
+
+[[rewrite]]
+matches = "wp"
+word = "Weierstrass elliptic function"
+
+[[rewrite]]
+matches = "sqrt"
+word = "square root"
+
+[[rewrite]]
+compare_lowercase = true
+contains = "bowtie"
+word = "bow tie"
+
+[[rewrite]]
+prefix = "choice"
+word = "choice"
+
+[[rewrite]]
+regex = '^Y(up|down|left|right)$'
+item = ["Y", '\1']
+
+[[rewrite]]
+regex = '^(up|down|left|right)Y$'
+item = ["Y", '\1']
+
+[[rewrite]]
+matches = "zproject"
+item = "restriction"
+
+[[rewrite]]
+regex = '^restrict(barb|mallet|wand)(?:up)?$'
+item = ["restriction", '\1']
+
+[[rewrite]]
+matches = "nrestriction"
+item = ["restriction", "negated"]
+
+[[rewrite]]
+matches = ["ularc", "manrotatedquartercircle"]
+item = ["arc", "upper left"]
+
+[[rewrite]]
+matches = ["urarc", "manquartercircle"]
+item = ["arc", "upper right"]
+
+[[rewrite]]
+matches = "llarc"
+item = ["arc", "lower left"]
+
+[[rewrite]]
+matches = "lrarc"
+item = ["arc", "lower right"]
+
+[[rewrite]]
+matches = "Finv"
+item = ["F", "inverted"]
+
+[[rewrite]]
+matches = "trapezium"  # UK
+item = "trapezoid"     # US
+
+[[rewrite]]
+regex = '^(.*\S)\s+fixed point$'
+item = ["fixed point", '\1']
+
+[[rewrite]]
+matches = [
+    "cshuffle",
+    "complete shuffle product"
+]
+item = ["shuffle product", "complete"]
+
+[[rewrite]]
+regex = '^(partial|total) function$'
+item = ["function", '\1']
+
+[[rewrite]]
+matches = ["crossing", "hcrossing"]
+item = ["crossing", "horizontal"]
+
+[[rewrite]]
+matches = ["vcrossing", "scross"]
+item = ["crossing", "vertical"]
+
+[[rewrite]]
+matches = "scrossvh"
+item = ["crossing", "plus"]
+
+[[rewrite]]
+matches = ["neswcrossing", "nwsecrossing"]
+item = ["crossing", "diagonal"]
+
+[[rewrite]]
+matches = [
+    "cdot",
+    "cdotp",
+    "MultiplicationDot"
+]
+item = ["multiplication", "dot"]
+
+[[rewrite]]
+matches = "hermitmatrix"
+item = "Hermitian conjugate matrix"
+
+[[rewrite]]
+matches = ["strictif", "rightfishtail"]
+item = "strict implication"
+
+[[rewrite]]
+matches = ["strictfi", "leftfishtail"]
+item = "strict converse implication"
+
+[[rewrite]]
+matches = "strictiff"
+item = "strict biconditional"
+
+[[rewrite]]
+matches = "rightimply"
+item = "material implication"
+
+[[rewrite]]
+regex = '^(up|down)fishtail$'
+item = ["fish tail", '\1']
+
+[[rewrite]]
+matches = ["setminus", "smallsetminus"]
+item = "set difference"
+
+[[rewrite]]
+matches = [
+    "dfourier",
+    "Dfourier",
+    "dft",
+    "DFT",
+    "fourier",
+    "Fourier",
+    "InversTransformHoriz",
+    "InversTransformVert",
+    "laplace",
+    "Laplace",
+    "TransformHoriz",
+    "TransformVert",
+    "Ztransf",
+    "ztransf"
+]
+item = "transform"
+
+[[rewrite]]
+matches = "sequent denied"
+item = ["sequent", "denied"]
+
+[[rewrite]]
+regex = '^(up|down|left|right|[ns][ew])free$'
+item = "free"
+
+[[rewrite]]
+regex = '^n(up|down|left|right|[ns][ew])free$'
+item = ["free", "negated"]
+
+[[rewrite]]
+matches = "lsqhook"
+item = ["open box operator", "left"]
+
+[[rewrite]]
+matches = "rsqhook"
+item = ["open box operator", "right"]
+
+[[rewrite]]
+matches = "nclosure"
+item = ["closure", "negated"]
+
+[[rewrite]]
+regex = '^(left|right)threetimes$'
+item = ["semidirect product", '\1']
+
+[[rewrite]]
+regex = '^(up|down|left|right)slice$'
+item = "slice"
+
+[[rewrite]]
+matches = "ruledelayed"
+item = "rule delayed"
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = "parallelogramblack"
+item = ["parallelogram", "filled"]
+
+[[rewrite]]
+prefix = "parallelogram"
+item = "parallelogram"
+
+[[rewrite]]
+matches = ["leftbroom", "rightbroom"]
+item = "broom"
+
+[[rewrite]]
+matches = ["dalambert", "laplac"]   # Note misspelling of "dalembert".
+item = "d'Alembert operator"
+
+[[rewrite]]
+matches = "divs"
+item = "divides"
+
+[[rewrite]]
+matches = "ndivs"
+item = ["divides", "negated"]
+
+[[rewrite]]
+matches = "topbot"
+item = ["top", "above bottom"]
+
+[[rewrite]]
+regex = '^relation(left|right)project$'
+item = ["relation", '\1 project']
+
+[[rewrite]]
+matches = "relationlifting"
+item = ["relation", "lifting"]
+
+[[rewrite]]
+matches = "profline"
+item = "arc"
+
+[[rewrite]]
+matches = "profsurf"
+item = "segment"
+
+[[rewrite]]
+matches = ["<", "!>"]
+item = ["delimiters", "angle bracket"]
+render = ""
+
+# ----------------------- miscellaneous rewrites -----------------------
+
+# This rule should appear early in this section.
+[[rewrite]]
+regex = '^(.+)\s+symbol$'
+not_matches = "medical symbol"
+word = '\1'
+continue = true
+
+# This rule must precede the following one.
+[[rewrite]]
+render_contains = '\faWater'
+word = "waves"
+
+# Convert certain control sequences to words and lowercase them.
+[[rewrite]]
+compare_lowercase = true
+matches = [
+    "air",
+    "alif",
+    "anaclasis",
+    "anchor",
+    "ankh",
+    "asterism",
+    "atom",
+    "ayn",
+    "beam",
+    "bearing",
+    "bed",
+    "bell",
+    "between",
+    "bicycle",
+    "biohazard",
+    "bowl",
+    "bra",
+    "caesura",
+    "candle",
+    "catalexis",
+    "cent",
+    "chair",
+    "closure",
+    "coda",
+    "complement",
+    "conclusion",
+    "convolution",
+    "corner",
+    "corresponds",
+    "currency",
+    "denarius",
+    "diameter",
+    "direct",
+    "dracma",
+    "e",
+    "ejective",
+    "emgma",
+    "enya",
+    "er",
+    "esh",
+    "eye",
+    "fax",
+    "fire",
+    "fisheye",
+    "florin",
+    "fog",
+    "force",
+    "fortune",
+    "game",
+    "gloves",
+    "hail",
+    "hemiobelion",
+    "industry",
+    "irritant",
+    "ket",
+    "length",
+    "lightning",
+    "longa",
+    "maxima",
+    "moai",
+    "moo",
+    "moon",
+    "nabla",
+    "natal",
+    "ninja",
+    "octagon",
+    "opposition",
+    "plus",
+    "printer",
+    "quincunx",
+    "radix",
+    "rain",
+    "request",
+    "respondens",
+    "restriction",
+    "retrograde",
+    "rupee",
+    "sector",
+    "semisextile",
+    "semisquare",
+    "separated",
+    "sesquiquadrate",
+    "sextile",
+    "sleet",
+    "spoon",
+    "staccatissimo",
+    "stater",
+    "station",
+    "sum",
+    "tape",
+    "tent",
+    "tenuto",
+    "tetartemorion",
+    "trine",
+    "vernal",
+    "vertex",
+    "viewdata",
+    "village",
+    "warning",
+    "water",
+    "wind",
+    "wheelchair"
+]
+lowercase_word = true
+word = '\1'
+
+# Convert certain control sequences to words, preserving their case.
+[[rewrite]]
+matches = [
+    "Amor",
+    "Bart",
+    "Burns",
+    "Ceres",
+    "Chiron",
+    "Eros",
+    "Hades",
+    "Hidalgo",
+    "Homer",
+    "Hygiea",
+    "Juno",
+    "Lilith",
+    "Lisa",
+    "Maggie",
+    "Marge",
+    "Pallas",
+    "Poseidon",
+    "Psyche",
+    "Rust",
+    "Sappho",
+    "Soyombo",
+    "Vesta",
+    "Zeus"
+]
+word = '\1'
+
+# Convert certain words from plural to singular.
+[[rewrite]]
+regex = '''\
+^(automobile|\
+bicycle|\
+boat|\
+boson|\
+broom|\
+consequence relation|\
+elevator|\
+fermion|\
+ghost|\
+helicopter|\
+kaon|\
+meson|\
+model|\
+motorcycle|\
+pion|\
+restriction|\
+snake|\
+taxi|\
+train)s$\
+'''
+item = '\1'
+
+[[rewrite]]
+matches = "bike"
+item = "bicycle"
+
+[[rewrite]]
+matches = "buses"
+item = "bus"
+
+[[rewrite]]
+regex = '^(?:lower|upper)\s+(?:left|right)\s+(.*)$'
+not_render_contains = ['\usym{1F53E}', '\usym{1F53F}']
+word = '\1'
+continue = true
+
+[[rewrite]]
+matches = ["bomb", "mfBomb", "faBomb"]
+word = "bomb"
+
+[[rewrite]]
+matches = "water wave"
+word = "waves"
+
+[[rewrite]]
+contains = "dbend"
+word = "dangerous bend"
+
+[[rewrite]]
+render_contains = '+\danger+'
+word = "dangerous bend"
+
+[[rewrite]]
+matches = [
+    "flower",
+    "flowers",
+    "white flower",
+    "wilted flower",
+    "sunflower",
+    "daisy",
+    "blossom"
+]
+word = "flower"
+
+[[rewrite]]
+contains = ["Flower", "florette"]
+word = "flower"
+
+[[rewrite]]
+matches = "sun"
+compare_lowercase = true
+word = "sun"
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(blue|brown|green|orange|purple|red|yellow)\s+(.*)$'
+not_contains = ["exclamation mark", "hat", "lantern", "stoplight", "triangle"]
+word = '\2'
+lowercase_word = true
+
+[[rewrite]]
+matches = ["lightbulb", "electric light bulb"]
+word = "light bulb"
+
+[[rewrite]]
+matches = ["Info", "info circle", "information sign"]
+word = "information"
+
+[[rewrite]]
+compare_lowercase = true
+contains = 'scissor'
+item = 'scissors'
+
+[[rewrite]]
+matches = [
+    "cut",
+    "CutLeft",
+    "CutRight"
+]
+item = 'scissors'
+
+[[rewrite]]
+regex = '^battery\s+(.*)$'
+item = ["battery", '\1']
+
+[[rewrite]]
+regex = '^(.*?)\s+battery$'
+item = ["battery", '\1']
+
+[[rewrite]]
+regex = '^([A-Z]+) button \(blood type\)$'
+item = ["blood type", '\1']
+
+[[rewrite]]
+matches = "AR"
+word = "aspect ratio"
+
+[[rewrite]]
+matches = "bauhead"
+word = "head"
+
+[[rewrite]]
+matches = "accurrent"
+word = "alternating current"
+
+[[rewrite]]
+matches = "acidfree"
+word = "acid-free paper"
+
+[[rewrite]]
+matches = "ear with hearing aid"
+item = ["ear", "with hearing aid"]
+
+[[rewrite]]
+matches = ["medical symbol", "medicine"]
+item = "rod of Asclepius"
+
+[[rewrite]]
+compare_lowercase = true
+matches = "yinyang"
+word = "yin-yang"
+
+[[rewrite]]
+matches = ["yin yang", "yin-yang symbols"]
+word = "yin-yang"
+
+[[rewrite]]
+matches = ["wheel", "wheel of dharma"]
+word = "dharmachakra"
+
+[[rewrite]]
+matches = ["Bat", "bats", "mathbat", "mathleftbat", "mathrightbat"]
+word = "bat"
+
+[[rewrite]]
+regex = '^search with (.*)$'
+item = ["search", 'with \1']
+
+[[rewrite]]
+matches = "faSearchMinus"
+item = ["search", "with minus sign"]
+
+[[rewrite]]
+regex = '^mahjong tile\s+(.+)$'
+item = ["mahjong tiles", '\1']
+
+[[rewrite]]
+matches = "mahjong red dragon"
+item = ["mahjong tiles", "red dragon"]
+
+[[rewrite]]
+matches = ["glotstop", "glottal"]
+word = "glottal stop"
+
+[[rewrite]]
+matches = "Jedi"
+word = "Jedi Order"
+
+# This rule must precede the "... button" rule.
+[[rewrite]]
+regex = "^Japanese ``(.*)'' button"
+item = ["Japanese buttons", '\1']
+
+# This rule must precede the "... button" rule.
+[[rewrite]]
+render_contains = ["1f518", "1F518"]
+item = "radio button"
+
+[[rewrite]]
+regex = '^(.*?)\s+button$'
+item = '\1'
+
+[[rewrite]]
+matches = ["old key", "keys"]
+word = "key"
+
+[[rewrite]]
+matches = "paint brush"
+word = "paintbrush"
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = '\faPencilRuler'
+item = ["pencil", "and ruler"]
+
+[[rewrite]]
+compare_lowercase = true
+contains = "pencil"
+not_render_contains = "Hand"
+word = "pencil"
+
+# This rule should follow the previous one.
+[[rewrite]]
+prefix = ["tiPen", "faPen", "faHighlighter", "faMarker", "pens"]
+not_contains = ["Penny", "Nib"]
+word = "pen"
+
+[[rewrite]]
+contains = ["ballpoint pen", "fountain pen"]
+word = "pen"
+
+[[rewrite]]
+contains = "magnifying"
+word = "magnifying glass"
+
+[[rewrite]]
+regex = '^people\s+(.+)$'
+item = ["people", '\1']
+
+[[rewrite]]
+regex = '^person\s+(.+)$'
+item = ["person", '\1']
+
+[[rewrite]]
+compare_lowercase = true
+top_contains = "peace"
+word = "peace"
+
+[[rewrite]]
+compare_lowercase = true
+matches = "t-shirt"
+word = "T-shirt"
+
+[[rewrite]]
+matches = ["wireless", "wifi"]
+word = "wireless network"
+
+# This rule should precede the following one.
+[[rewrite]]
+contains = ["shoe", "sandal"]
+item = "shoe"
+
+[[rewrite]]
+regex = "^woman'?s\\s+(.+)$"
+word = '\1'
+
+[[rewrite]]
+regex = '^women\s+(.+)$'
+item = ["women", '\1']
+
+[[rewrite]]
+compare_lowercase = true
+prefix = "bouquet"
+word = "bouquet"
+
+[[rewrite]]
+prefix = "click"
+item = "clicks"
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = ['{1f515}', '{1F515}']
+item = ["bell", "slashed"]
+
+[[rewrite]]
+contains = "bell"
+not_matches = ["dumbbell", "bell pepper"]
+word = "bell"
+
+[[rewrite]]
+regex = '^bowl\s+(.+)$'
+item = ["bowl", '\1']
+
+[[rewrite]]
+matches = "gem stone"
+word = "gem"
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = '^recycling symbol for\s+(.+)$'
+item = ["recycling", '\1']
+
+[[rewrite]]
+compare_lowercase = true
+top_contains = "recycl"
+not_render_contains = "(package)"
+word = "recycling"
+
+[[rewrite]]
+matches = ["Greenpoint", "PackingWaste"]
+word = "recycling"
+
+[[rewrite]]
+regex = '^chart\s+(.+)$'
+item = ["chart", '\1']
+
+[[rewrite]]
+matches = "Father Christmas"
+word = "Santa Claus"
+
+[[rewrite]]
+matches = "mx claus"
+word = "Mrs. Claus"
+
+[[rewrite]]
+matches = "store, slashed"
+item = ["store", "slashed"]
+
+[[rewrite]]
+contains = ["traffic light", "stoplight"]
+word = "traffic light"
+
+[[rewrite]]
+contains = ["locomotive", " train"]
+word = "train"
+
+[[rewrite]]
+prefix = "domino tile "
+item = "domino tiles"
+render = ""
+
+[[rewrite]]
+matches = "dna"
+item = "DNA"
+
+[[rewrite]]
+matches = "dvd"
+item = "DVD"
+
+# This rule must precede the following one.
+[[rewrite]]
+regex = '^document with\s+(\S.*)$'
+item = ["document", '\1']
+
+[[rewrite]]
+regex = '^document\s+(\S+)$'
+item = ["document", '\1']
+
+[[rewrite]]
+matches = "empty document"
+item = "document"
+
+[[rewrite]]
+prefix = "emoji modifier"
+item = ["emoji", "modifiers"]
+render = ""
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = "two-hump camel"
+item = ["camel", "bactrian"]
+
+[[rewrite]]
+regex = '^(\S+)\s+camel$'
+item = ["camel", '\1']
+
+[[rewrite]]
+consider_all_entries = true
+compare_lowercase = true
+contains = ["pumpkin", "jack-o-lantern"]
+item = "jack-o'-lantern"
+
+# Split certain control sequences into exactly two words.
+[[rewrite]]
+matches = [
+    "EastPoint",
+    "MineSign",
+    "MoveDown",
+    "MoveUp",
+    "ParallelPort",
+    "PropertyLine",
+    "SerialInterface",
+    "SerialPort",
+    "SpecialForty",
+    "SpinUp",
+    "SpinDown",
+    "StoneMan",
+    "StrikingThrough",
+    "SurveySign",
+    "ThinFog",
+    "WeakRain"
+]
+regex = '^([A-Z][a-z]+)([A-Z][a-z]+)$'
+lowercase_word = true
+word = '\1 \2'
+
+[[rewrite]]
+matches = "studio microphone"
+item = "microphone"
+
+[[rewrite]]
+matches = "microphone off"
+item = ["microphone", "slashed"]
+
+[[rewrite]]
+matches = "menorah with nine branches"
+item = "menorah"
+
+[[rewrite]]
+regex = '^men\s+(\S.*)$'
+item = ["men", '\1']
+
+[[rewrite]]
+matches = ["AA", "Angstrom"]
+item = ["A with ring", "uppercase"]
+
+[[rewrite]]
+matches = "aa"
+item = ["A with ring", "lowercase"]
+
+[[rewrite]]
+matches = "Apollon"
+item = "Apollo"
+
+[[rewrite]]
+matches = "Admetos"
+item = "Admetus"
+
+[[rewrite]]
+matches = "Cupido"
+item = "Cupid"
+
+[[rewrite]]
+matches = "Kronos"
+item = "Chronos"
+
+[[rewrite]]
+matches = "Vulkanus"
+item = "Vulcan"
+
+[[rewrite]]
+matches = ["celsius", "tccentigrade", "textcelsius"]
+item = "celsius"
+
+[[rewrite]]
+compare_lowercase = true
+matches = ["radiation", "radioactive"]
+item = "radiation"
+
+[[rewrite]]
+matches = "pregnant"
+item = "pregnant woman"
+
+[[rewrite]]
+matches = ["print", "printer icon"]
+item = "printer"
+
+[[rewrite]]
+matches = "phase"
+item = "phasor"
+
+[[rewrite]]
+matches = "BOLogo"
+item = "Hochschule Bochum"
+
+[[rewrite]]
+matches = "BOLogoP"
+item = ["Hochschule Bochum", "portrait"]
+
+[[rewrite]]
+matches = "BOLogoL"
+item = ["Hochschule Bochum", "landscape"]
+
+[[rewrite]]
+matches = "sunset"
+item = "sunset over buildings"
+
+[[rewrite]]
+matches = [
+    "crossed swords",
+    "swords",
+    "textxswdown",
+    "textxswup",
+    "xswordsdown",
+    "xswordsup"
+]
+item = ["sword", "multiple, crossed"]
+
+[[rewrite]]
+regex = '^sym([AB])$'
+item = '\1'
+
+[[rewrite]]
+regex = '^(deaf|old)(?:er)?\s+(man|woman|person)$'
+item = ['\2', '\1']
+
+[[rewrite]]
+matches = "hanukiah"
+item = "menorah"
+
+[[rewrite]]
+matches = "plimsoll"
+item = "Plimsoll line"
+
+[[rewrite]]
+contains = "#"
+not_contains = 'C\#'
+item = "hash"
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = [
+    "hash",
+    "hashtag",
+    "number sign",
+    "varhash"
+]
+item = "hash"
+
+[[rewrite]]
+matches = "textnumero"
+item = "number sign"
+
+[[rewrite]]
+matches = "golfer"
+item = "golfing"
+
+# This rule should precede the following one.
+[[rewrite]]
+regex = '^faHandshake(Alt)?Slash$'
+item = ["handshake", "slashed"]
+
+[[rewrite]]
+prefix = "faHandshake"
+item = "handshake"
+
+[[rewrite]]
+matches = "sleuth or spy"
+item = "spy"
+
+[[rewrite]]
+regex = '^two (men|women) holding hands$'
+item = ['\1', "holding hands"]
+
+[[rewrite]]
+consider_all_entries = true
+contains = "bullseye"
+item = "bullseye"
+
+[[rewrite]]
+matches = [
+    "carriagereturn",
+    "varcarriagereturn"
+]
+item = "carriage return"
+
+[[rewrite]]
+prefix = "FourClower"
+item = "clover"
+
+[[rewrite]]
+matches = ["clovers", "four leaf clover"]
+item = "clover"
+
+[[rewrite]]
+matches = "glasses"
+item = "eyeglasses"
+
+[[rewrite]]
+matches = "eyebrows"
+item = "eyes"
+
+[[rewrite]]
+matches = "dark sunglasses"
+item = "sunglasses"
+
+[[rewrite]]
+compare_lowercase = true
+contains = "hourglass"
+item = "hourglass"
+
+[[rewrite]]
+matches = "kitchen knife"
+item = ["knife", "kitchen"]
+
+[[rewrite]]
+matches = "hocho"
+item = ["knife", "hocho"]
+
+[[rewrite]]
+matches = "windy"
+item = "wind"
+
+[[rewrite]]
+matches = [
+    "manual wheelchair",
+    "motorized wheelchair",
+    "wheelchair stationary"
+]
+item = "wheelchair"
+
+[[rewrite]]
+matches = [
+    "wrapped gift",
+    "wrapped present"
+]
+item = "gift"
+
+[[rewrite]]
+matches = "poo storm"
+item = ["poo", "storm"]
+
+[[rewrite]]
+matches = "power off"
+item = "power"
+
+[[rewrite]]
+matches = [
+    "ban",
+    "no",
+    "no entry sign",
+    "prohibited",
+    "prohibited sign"
+]
+item = "no"
+
+[[rewrite]]
+matches = "noway"
+item = "no entry"
+
+[[rewrite]]
+matches = "tape drive"
+item = "tape"
+
+[[rewrite]]
+matches = "braket"
+item = "bra-ket"
+
+[[rewrite]]
+regex = '^banknote with (.*?)\s+sign$'
+item = ["banknote", '\1']
+
+[[rewrite]]
+regex = '^(.*?)\s+banknote$'
+item = ["banknote", '\1']
+
+[[rewrite]]
+matches = "mount fuji"
+item = "Mount Fuji"
+
+[[rewrite]]
+matches = "electric torch"
+item = "flashlight"
+
+[[rewrite]]
+matches = "lady beetle"
+item = "ladybug"
+
+[[rewrite]]
+matches = ["bug", "beetle", "fly", "mosquito"]
+item = "insect"
+
+[[rewrite]]
+matches = "witches"
+item = "witch"
+
+[[rewrite]]
+matches = ["caution sign", "danger"]
+item = "warning"
+
+[[rewrite]]
+contains = "baby chick"
+item = "chick"
+
+[[rewrite]]
+matches = "chicks"
+item = ["chick", "multiple"]
+
+[[rewrite]]
+matches = "rip"
+item = "RIP"
+
+[[rewrite]]
+compare_lowercase = true
+matches = ["snow", "snowflakes"]
+item = "snowflake"
+
+[[rewrite]]
+compare_lowercase = true
+contains = "snowflake"
+item = "snowflake"
+
+[[rewrite]]
+compare_lowercase = true
+prefix = ["snowman", "snowmen", "scsnowman"]
+item = "snowman"
+
+[[rewrite]]
+matches = "snowplow"
+item = "snow plow"
+
+[[rewrite]]
+contains = "floppy disk"
+item = "floppy disk"
+
+[[rewrite]]
+regex = '^sort\s+(.+)$'
+item = ["sort", '\1']
+
+[[rewrite]]
+matches = "SNPP"
+item = "nuclear power plant"
+
+[[rewrite]]
+regex = '^(hear|see|speak)-no-evil monkey$'
+item = ["monkey", '\1 no evil']
+
+[[rewrite]]
+matches = "spanner"
+item = "wrench"
+
+[[rewrite]]
+compare_lowercase = true
+contains = "sparkle"
+item = "sparkle"
+
+[[rewrite]]
+matches = "small axe"
+item = "axe"
+
+[[rewrite]]
+matches = "film frames"
+item = "film"
+
+[[rewrite]]
+matches = "silhouette of Japan"
+item = "Japan"
+
+[[rewrite]]
+matches = "sinewave"
+item = "sine wave"
+
+[[rewrite]]
+matches = ["Terra", "varTerra"]
+item = "Earth"
+
+[[rewrite]]
+regex = '^var(Capricorn|Earth|Pluto|Uranus)$'
+item = '\1'
+
+[[rewrite]]
+contains = "mailbox"
+item = "mailbox"
+
+[[rewrite]]
+matches = "love hotel"
+item = ["hotel", "love"]
+
+[[rewrite]]
+matches = "love letter"
+item = ["envelope", "with heart"]
+
+[[rewrite]]
+matches = "camera with flash"
+item = "camera"
+
+[[rewrite]]
+matches = "roast chicken"
+item = ["chicken", "roasted"]
+
+[[rewrite]]
+matches = ["chicken thigh", "drumstick"]
+item = ["chicken", "thigh"]
+
+[[rewrite]]
+regex = '^Japanese\s+(castle|dolls|goblin|ogre|post office)$'
+item = '\1'
+
+[[rewrite]]
+matches = "Japanese symbol for beginner"
+item = "beginner"
+
+[[rewrite]]
+matches = "couplekiss"
+item = "couple with heart"
+
+[[rewrite]]
+matches = "kiss mark"
+item = "kiss"
+
+[[rewrite]]
+regex = '^replace\s+(.*)$'
+item = ["replace", '\1']
+
+[[rewrite]]
+matches = ["tally", "fcscore"]
+item = "tally markers"
+
+[[rewrite]]
+matches = "Looking"
+item = ["telescope", "man looking through"]
+
+[[rewrite]]
+matches = "linefeed"
+item = "line feed"
+
+[[rewrite]]
+matches = "thermometers"
+item = "thermometer"
+
+[[rewrite]]
+regex = '^thermometer\s+(.+)$'
+item = ["thermometer", '\1']
+
+[[rewrite]]
+regex = 'three rays\s+(.+)$'
+item = ["rays", 'three \1']
+
+[[rewrite]]
+regex = '^oncoming\s+(.+)$'
+item = '\1'
+
+[[rewrite]]
+matches = "baby angel"
+item = "angel"
+
+[[rewrite]]
+matches = "benzenr"
+item = "benzene"
+
+[[rewrite]]
+contains = "megaphone"
+item = "megaphone"
+
+[[rewrite]]
+matches = "inbox tray"
+item = "inbox"
+
+[[rewrite]]
+matches = "outbox tray"
+item = "outbox"
+
+[[rewrite]]
+matches = "postbox"
+item = "mailbox"
+
+[[rewrite]]
+contains = "bath"
+item = "bathtub"
+
+[[rewrite]]
+matches = ["degree", "textdegree"]
+item = "degree"
+
+[[rewrite]]
+compare_lowercase = true
+prefix = "diple"
+item = "diple"
+
+[[rewrite]]
+matches = "shopping trolley"
+item = "shopping cart"
+
+[[rewrite]]
+matches = "desert island"
+item = "island"
+
+[[rewrite]]
+matches = ["articulated lorry", "pickup truck"]
+item = "truck"
+
+[[rewrite]]
+matches = "faShippingFast"
+item = ["truck", "fast"]
+
+[[rewrite]]
+matches = "construction"
+item = "construction sign"
+
+[[rewrite]]
+matches = "building construction"
+item = "construction"
+
+[[rewrite]]
+regex = '^(factual|deontic|logical|doxastic|temporal)\s+(necessity|possibility|next|future|past|contingency|non-contingency)$'
+item = ['\2', '\1']
+
+[[rewrite]]
+matches = "bauforms"
+item = "Bauhaus forms"
+
+[[rewrite]]
+matches = "cityscape at dusk"
+item = ["cityscape", "at dusk"]
+
+[[rewrite]]
+matches = [
+    "ear of corn",
+    "ear of maize"
+]
+item = "corn"
+
+[[rewrite]]
+matches = [
+    "corners, box",
+    "lftbotcorner",
+    "lfttopcorner",
+    "rtbotcorner",
+    "rttopcorner",
+    "textcorner",
+    "textopencorner",
+    "FS"
+]
+item = "corner"
+
+[[rewrite]]
+matches = [
+    "ullcorner",
+    "ulrcorner",
+]
+item = ["corner", "both top and bottom"]
+
+[[rewrite]]
+matches = "textinterrobang"
+item = "interrobang"
+
+[[rewrite]]
+matches = "textinterrobangdown"
+item = ["interrobang", "inverted"]
+
+[[rewrite]]
+matches = "textrecipe"
+item = "recipe"
+
+[[rewrite]]
+consider_all_entries = true
+matches = "pharmaceutical prescription"
+see = "recipe"
+
+[[rewrite]]
+consider_all_entries = true
+matches = "prescription"
+see = "recipe"
+
+[[rewrite]]
+matches = "thus"
+item = "therefore"
+
+[[rewrite]]
+matches = "straight ruler"
+item = "ruler"
+
+[[rewrite]]
+matches = "triangular ruler"
+item = ["ruler", "triangular"]
+
+[[rewrite]]
+contains = ["pushpin", "thumbtack"]
+item = "pushpin"
+
+[[rewrite]]
+matches = ["litter in bin sign", "put litter in its place"]
+item = "litter in bin"
+
+[[rewrite]]
+regex = '^text(born|died|divorced|married)$'
+item = '\1'
+
+[[rewrite]]
+matches = ["satellitedish", "satellite antenna", "Satellite"]
+item = ["satellite dish"]
+
+[[rewrite]]
+matches = ["sauropod", "T-Rex"]
+item = "dinosaur"
+
+[[rewrite]]
+matches = "rqm"
+item = "reduced quadrupole moment"
+
+[[rewrite]]
+matches = ["izakaya lantern", "red paper lantern"]
+item = "lantern"
+
+[[rewrite]]
+matches = "brush"
+item = "paintbrush"
+
+[[rewrite]]
+prefix = "faClipboard"
+item = "clipboard"
+
+[[rewrite]]
+matches = "faSpellCheck"
+item = "spell check"
+
+[[rewrite]]
+prefix = "faMoneyCheck"
+item = "check (financial)"
+
+[[rewrite]]
+matches = "drop of blood"
+item = "blood"
+
+[[rewrite]]
+matches = "let blood"
+item = ["blood", "letting"]
+
+[[rewrite]]
+matches = "sunrise over mountains"
+item = ["sunrise", "over mountains"]
+
+[[rewrite]]
+matches = "symbol for marks chapter"
+item = "marks chapter"
+
+[[rewrite]]
+matches = ["temperature low", "temperature high"]
+item = ['\1', '\2']
+
+[[rewrite]]
+matches = "chalkboard with teacher"
+item = ["chalkboard", "with teacher"]
+
+[[rewrite]]
+regex = '^textord(masculine|feminine)$'
+item = ["ordinal", '\1']
+
+[[rewrite]]
+matches = [
+    "underscore",
+    "textunderscore",
+    "mathunderscore",
+    "US"
+]
+item = "underline"
+
+[[rewrite]]
+render_contains = '(\_)'
+item = "underline"
+
+[[rewrite]]
+regex = '^text(backslash|bar|blank|bullet|estimated)$'
+item = '\1'
+
+[[rewrite]]
+regex = '^umbrella\s+(.+)$'
+item = ["umbrella", '\1']
+
+[[rewrite]]
+matches = "closed umbrella"
+item = ["umbrella", "closed"]
+
+[[rewrite]]
+matches = "cut of meat"
+item = "meat"
+
+[[rewrite]]
+matches = "meat on bone"
+item = ["meat", "on bone"]
+
+[[rewrite]]
+matches = "cog"
+item = "gear"
+
+[[rewrite]]
+matches = "cogs"
+item = ["gear", "multiple"]
+
+[[rewrite]]
+matches = "guardsman"
+item = "guard"
+
+[[rewrite]]
+regex = '^mechanical (arm|leg)$'
+item = ['\1', "mechanical"]
+
+[[rewrite]]
+matches = "CYRSH"
+item = "sha"
+
+[[rewrite]]
+matches = [
+    "tropical fish",
+    "tuna",
+    "catfish"
+]
+item = "fish"
+
+[[rewrite]]
+matches = "fishing pole"
+item = "fishing pole and fish"
+
+[[rewrite]]
+prefix = "fish cake with swirl"
+item = "fish cake with swirl"
+
+[[rewrite]]
+compare_lowercase = true
+matches = "bigo"
+item = "big O notation"
+
+[[rewrite]]
+matches = "infant"
+item = "baby"
+
+[[rewrite]]
+contains = "loudspeaker"
+item = "loudspeaker"
+
+[[rewrite]]
+matches = "invdiameter"
+item = ["diameter", "reversed"]
+
+[[rewrite]]
+matches = "video"
+item = "video camera"
+
+[[rewrite]]
+matches = "video, slashed"
+item = ["video camera", "slashed"]
+
+[[rewrite]]
+matches = "video game"
+item = "video game controller"
+
+[[rewrite]]
+render_contains = '(\faBtc)'
+item = "Bitcoin"
+
+[[rewrite]]
+matches = "AC"
+item = "alternating current"
+
+[[rewrite]]
+prefix = "alien"
+item = "extraterrestrial"
+
+[[rewrite]]
+matches = [
+    "optical disc",
+    "optical disc icon",
+    "optical disk"
+]
+item = "compact disc"
+
+[[rewrite]]
+matches = "bread slice"
+item = "bread"
+
+[[rewrite]]
+compare_lowercase = true
+prefix = "obelus"
+item = "obelus"
+
+[[rewrite]]
+compare_lowercase = true
+prefix = "terminus"
+item = "terminus"
+
+[[rewrite]]
+matches = [
+    "direct hit",
+    "darts"
+]
+item = "target"
+
+[[rewrite]]
+matches = "potable water"
+item = ["water", "potable"]
+
+[[rewrite]]
+matches = "non-potable water"
+item = ["water", "non-potable"]
+
+[[rewrite]]
+matches = "freeCodeCamp"
+item = "Free Code Camp"
+
+[[rewrite]]
+matches = [
+    "sake",
+    "sake bottle and cup"
+]
+item = ["bottle", "sake, with cup"]
+
+[[rewrite]]
+matches = "school satchel"
+item = "schoolbag"
+
+[[rewrite]]
+matches = "poultry leg"
+item = ["chicken", "thigh"]
+
+[[rewrite]]
+matches = "police cars revolving light"
+item = "police car light"
+
+[[rewrite]]
+matches = "textramshorns"
+item = "ram's horns"
+
+[[rewrite]]
+matches = "ascii circumflex"
+item = "caret"
+
+[[rewrite]]
+matches = "caretinsert"
+item = ["caret", "insertion"]
+
+[[rewrite]]
+contains = "visiblespace"
+item = ["space", "visible"]
+
+[[rewrite]]
+matches = "non-breaking space"
+item = ["space", "non-breaking"]
+
+[[rewrite]]
+matches = "shell"
+item = "shell, operating system"
+
+[[rewrite]]
+matches = "spiral shell"
+item = "seashell"
+
+[[rewrite]]
+matches = "MVAt"
+item = "at sign"
+
+[[rewrite]]
+regex = '^European (castle|post office)$'
+item = '\1'
+
+[[rewrite]]
+prefix = "flap"
+item = "flap"
+
+[[rewrite]]
+render_contains = ['\fcBalloon', '\faFly']
+item = ["hot air balloon"]
+
+[[rewrite]]
+matches = "stuffed flatbread"
+item = "flatbread"
+
+[[rewrite]]
+matches = "curly loop"
+item = "loop"
+
+[[rewrite]]
+matches = "double curly loop"
+item = ["loop", "double"]
+
+[[rewrite]]
+regex = '^([A-Za-z]+)bearing$'
+lowercase_item = true
+item = ["bearing", '\1']
+
+[[rewrite]]
+regex = '^antenna.*bars'
+item = "signal"
+
+[[rewrite]]
+regex = '^grip (horizontal|vertical)$'
+item = ["grip", "squares"]
+
+[[rewrite]]
+regex = '^grip lines\s*(horizontal|vertical)?$'
+item = ["grip", "lines"]
+
+[[rewrite]]
+matches = "textreferencemark"
+item = "reference mark"
+
+[[rewrite]]
+matches = "hzigzag"
+item = ["zigzag", "horizontal"]
+
+[[rewrite]]
+matches = "vzigzag"
+item = ["zigzag", "vertical"]
+
+[[rewrite]]
+matches = "elinters"
+item = "electrical intersection"
+
+[[rewrite]]
+matches = "busts in silhouette"
+item = ["bust in silhouette", "multiple"]
+
+[[rewrite]]
+matches = "actuarialangle"
+item = "actuarial angle"
+
+[[rewrite]]
+matches = "linked paperclips"
+item = ["paperclip", "multiple, linked"]
+
+[[rewrite]]
+matches = "toilet paper, slashed"
+item = ["toilet paper", "slashed"]
+
+[[rewrite]]
+matches = "texttildelow"
+item = ["tilde", "lowered"]
+
+[[rewrite]]
+regex = '^igo(circle|cross|square|triangle)$'
+item = ["Go stones", '\1']
+
+[[rewrite]]
+matches = "igonone"
+item = ["Go stones", "empty"]
+
+[[rewrite]]
+matches = "trident emblem"
+item = "trident"
+
+[[rewrite]]
+matches = "giraffes"
+item = ["giraffe", "multiple"]
+
+[[rewrite]]
+matches = "tram car"
+item = "tram"
+
+[[rewrite]]
+matches = "left luggage"
+item = "luggage"
+
+[[rewrite]]
+compare_lowercase = true
+contains = "suitcase"
+item = "luggage"
+
+[[rewrite]]
+regex = '^frame with (?:an )?(.+)$'
+item = ["frame", 'with \1']
+
+[[rewrite]]
+matches = "HF"
+item = "high frequency"
+
+[[rewrite]]
+matches = "VHF"
+item = "very high frequency"
+
+[[rewrite]]
+matches = "rolled-up newspaper"
+item = ["newspaper", "rolled"]
+
+[[rewrite]]
+matches = "bullhorn with sound waves"
+item = "bullhorn"
+
+[[rewrite]]
+matches = "proj"
+item = "projection"
+
+[[rewrite]]
+matches = "EmailCT"
+item = "lightning"
+
+[[rewrite]]
+matches = "wn"
+item = "why not"
+
+[[rewrite]]
+matches = "oc"
+item = "of course"
+render = "of course (!!)"   # Escape the exclamation mark.
+
+[[rewrite]]
+matches = "Circpipe"
+item = ["pipe", "circular"]
+
+[[rewrite]]
+matches = "Rectpipe"
+item = ["pipe", "rectangular"]
+
+[[rewrite]]
+matches = "recorder"
+item = "automatic telephone recorder"   # From the wasy Metafont source
+
+[[rewrite]]
+matches = "pullback"
+item = "pull back"
+
+[[rewrite]]
+matches = "pushout"
+item = "push out"
+
+[[rewrite]]
+matches = "MVComma"
+item = ["comma", "sans serif"]
+
+[[rewrite]]
+matches = "shallow pan of food"
+item = "pan"
+
+[[rewrite]]
+matches = "partof"
+item = "part of"
+
+[[rewrite]]
+matches = "wholeof"
+item = "whole of"
+
+[[rewrite]]
+matches = "pile of poo"
+item = "poo"
+
+[[rewrite]]
+matches = "Lineload"
+item = "line load"
+
+[[rewrite]]
+matches = "sA"
+item = "Soyombo"
+
+[[rewrite]]
+matches = "sO"
+item = ["Soyombo", "terminal"]
+
+[[rewrite]]
+matches = "gleichstark"
+item = "Gleich Stark"
+
+[[rewrite]]
+matches = "textlengthmark"
+item = "length mark"
+
+[[rewrite]]
+matches = "thermod"
+item = "thermodynamic"
+
+[[rewrite]]
+matches = "tint, slashed"
+item = ["tint", "slashed"]
+
+[[rewrite]]
+matches = "Pickup"
+item = "answering machine"
+
+[[rewrite]]
+matches = "svrexample"
+item = "example"
+
+[[rewrite]]
+render_contains = "Pisymbol{nkarta}{119}"
+item = ["hammer", "and sickle"]
+
+[[rewrite]]
+regex = '^hammer (and \w+)$'
+item = ["hammer", '\1']
+
+[[rewrite]]
+matches = "stst"
+item = "standard state"
+
+[[rewrite]]
+matches = "carousel horse"
+item = ["horse", "carousel"]
+
+[[rewrite]]
+matches = ["horse racing", "racehorse"]
+item = ["horse", "racing"]
+
+[[rewrite]]
+matches = "coins"
+item = ["coin", "multiple"]
+
+[[rewrite]]
+matches = ["curly hair", "white hair"]
+item = "hair"
+
+[[rewrite]]
+matches = "emf"
+item = "electromotive force"
+
+[[rewrite]]
+matches = "wastebasket"
+item = "trash"
+
+[[rewrite]]
+matches = "trash, restore from"
+item = ["trash", "restore from"]
+
+[[rewrite]]
+render_contains = '{\smtrT}'
+item = "rotated symbols"
+render = ""
+
+[[rewrite]]
+matches = "NUL"
+item = "null character"
+
+[[rewrite]]
+matches = "compass"
+render_contains = '\dsmathematical'
+item = ["compass", "drawing"]
+
+[[rewrite]]
+matches = "railway"
+item = "train"

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-rhombuses.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-rhombuses.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-rhombuses.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,289 @@
+##############################################
+# Categorize rhombuses.                      #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+[[rewrite]]
+matches = "rhombuses"
+item = "rhombus"
+
+[[rewrite]]
+matches = [
+    "white diamond",
+    "white really small diamond",
+    "lozenge",
+    "largelozenge",
+    "medlozenge",
+    "smalllozenge"
+]
+item = "rhombus"
+
+[[rewrite]]
+contains = "whtlozenge"
+item = "rhombus"
+
+[[rewrite]]
+regex = '^(Big|Small)?(Lower|Right)Diamond$'
+item = ["rhombus", "half filled"]
+
+[[rewrite]]
+regex = '^diamond(left|right|top|bot)black$'
+item = ["rhombus", "half filled"]
+
+[[rewrite]]
+contains = ["blklozenge", "blacklozenge"]
+item = ["rhombus", "filled"]
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = "rhombusfill"
+item = ["rhombus", "filled"]
+
+[[rewrite]]
+prefix = "rhombusfill"
+item = ["rhombus", "half filled"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^diamond(black|solid)$'
+item = ["rhombus", "filled"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^filled(big|small)?diamond(shape)?$'
+item = ["rhombus", "filled"]
+
+[[rewrite]]
+matches = [
+    "white curved diamond",
+    "sqlozenge",
+    "wasylozenge"
+]
+item = ["rhombus", "curved"]
+
+[[rewrite]]
+matches = "black curved diamond"
+item = ["rhombus", "curved, filled"]
+
+[[rewrite]]
+matches = [
+    "black diamond",
+    "black really small diamond"
+]
+item = ["rhombus", "filled"]
+
+[[rewrite]]
+prefix = "DiamondShadow"
+item = ["rhombus", "shadowed"]
+
+[[rewrite]]
+prefix = "FilledDiamondShadow"
+item = ["rhombus", "filled, shadowed"]
+
+[[rewrite]]
+matches = "SectioningDiamond"
+item = ["rhombus", "of rhombuses"]
+
+[[rewrite]]
+matches = "diamond with a dot"
+item = ["rhombus", "of blue rhombuses, with dot"]
+
+[[rewrite]]
+matches = [
+    "black diamond minus white X",
+    "OrnamentDiamondSolid",
+    "FilledSectioningDiamond"
+]
+item = ["rhombus", "of filled rhombuses"]
+
+# This rule should precede the following one.
+[[rewrite]]
+matches = "concavediamond"
+item = ["rhombus", "concave"]
+
+[[rewrite]]
+prefix = "concavediamond"
+item = ["rhombus", "concave, with tick"]
+
+[[rewrite]]
+matches = [
+    "crossed curved diamond",
+    "quartered curved diamond",
+    "quarted lozenge"               # Note spelling error.
+]
+item = ["rhombus", "curved, quartered"]
+
+[[rewrite]]
+matches = [
+    "crossed diamond",
+    "quartered diamond",
+    "rhombuslinevh"
+]
+item = ["rhombus", "quartered"]
+
+[[rewrite]]
+regex = '^diamond(plus|times)$'
+item = ["rhombus", "quartered"]
+
+[[rewrite]]
+regex = '^(up|down) slashed (lozenge|curved diamond)$'
+item = ["rhombus", "curved, slashed"]
+
+[[rewrite]]
+regex = '^(crossed|horizontally divided|vertically divided) lozenge$'
+item = ["rhombus", 'curved, \1']
+
+[[rewrite]]
+regex = '^(up|down) slashed diamond$'
+item = ["rhombus", "slashed"]
+
+[[rewrite]]
+regex = '^diamond(b|back)?slash$'
+item = ["rhombus", "slashed"]
+
+[[rewrite]]
+matches = "enclosediamond"
+item = ["rhombus", "enclosing"]
+
+[[rewrite]]
+matches = "diamonddots"
+item = ["rhombus", "of dots"]
+
+[[rewrite]]
+matches = "errbarblackdiamond"
+item = ["rhombus", "error bars, filled"]
+
+[[rewrite]]
+matches = "errbardiamond"
+item = ["rhombus", "error bars"]
+
+[[rewrite]]
+regex = '^(horizontally|vertically) divided curved diamond$'
+item = ["rhombus", 'curved, \1 divided']
+
+[[rewrite]]
+regex = '^(horizontally|vertically) divided diamond$'
+item = ["rhombus", '\1 divided']
+
+[[rewrite]]
+matches = ["diamondminus", "lozengeminus", "rhombuslineh"]
+item = ["rhombus", "horizontally divided"]
+
+[[rewrite]]
+matches = "rhombuslinev"
+item = ["rhombus", "vertically divided"]
+
+[[rewrite]]
+regex = '^diamond(bar|vert)$'
+item = ["rhombus", "vertically divided"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(diamond|rhombus)(dot|cdot)$'
+item = ["rhombus", "dotted"]
+
+[[rewrite]]
+matches = "lozengedot"
+item = ["rhombus", "dotted"]
+
+[[rewrite]]
+matches = "dotted curved diamond"
+item = ["rhombus", "curved, dotted"]
+
+[[rewrite]]
+matches = "dotted diamond"
+item = ["rhombus", "dotted"]
+
+[[rewrite]]
+compare_lowercase = true
+matches = "diamond shape with a dot inside"
+item = ["rhombus", "dotted multiply"]
+
+[[rewrite]]
+regex = '^diamond(circle|triangle)$'
+item = ["rhombus", '\1']
+
+[[rewrite]]
+matches = "diamonddiamond"
+item = ["rhombus", "rhombus"]
+
+[[rewrite]]
+matches = "white curved diamond containing black diamond"
+item = ["rhombus", "curved, small rhombus, filled"]
+
+[[rewrite]]
+matches = [
+    "blackinwhitediamond",
+    "white diamond containing black diamond"
+]
+item = ["rhombus", "small rhombus, filled"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^diamond(left|right)$'
+item = ["rhombus", "with arrow"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^diamonddot(left|right)$'
+item = ["rhombus", "dotted, with arrow"]
+
+# This rule should precede the generic blue/orange diamond rule.
+[[rewrite]]
+contains = "blue diamond"
+render_contains = '\usym'
+item = ["rhombus", "striped"]
+
+# This rule should precede the generic blue/orange diamond rule.
+[[rewrite]]
+contains = "orange diamond"
+render_contains = '\usym'
+item = ["rhombus", "patterned"]
+
+[[rewrite]]
+regex = '(blue|orange) diamond$'
+item = ["rhombus", '\1']
+
+[[rewrite]]
+matches = "manconcentricdiamond"
+item = ["rhombus", "concentric"]
+
+[[rewrite]]
+matches = [
+    "outline curved diamond",
+    "outline lozenge"
+]
+item = ["rhombus", "curved, outlined"]
+
+[[rewrite]]
+matches = "outline diamond"
+item = ["rhombus", "outlined"]
+
+[[rewrite]]
+matches = "rhombuscross"
+item = ["rhombus", "crossed"]
+
+# This rule should precede the following one.
+[[rewrite]]
+compare_lowercase = true
+regex = '''
+^(big|large|med|small|lg|md|sm|vy)*\
+(wht|white)?\
+(diamond|rhombus)\
+(op|shape|[a-z])?$\
+'''
+item = "rhombus"
+
+[[rewrite]]
+compare_lowercase = true
+regex = '''
+^(big|large|med|small|lg|md|sm|vy)*\
+(blk|black)\
+diamond\
+(shape|[a-z])?$\
+'''
+item = ["rhombus", "filled"]
+
+[[rewrite]]
+matches = "ataribox"
+item = ["rhombus", "white on black"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-see.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-see.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-see.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,2183 @@
+##########################################################
+# Redirect common search terms to an appropriate target. #
+# Author: Scott Pakin <scott+clsl at pakin.org>             #
+##########################################################
+
+# ------------------------------ precedes ------------------------------
+
+[[create]]
+top_matches = "precedes"
+matches = "precedes"
+item = ["dominance"]
+see = "precedes"
+
+[[create]]
+top_matches = "precedes"
+matches = "negated"
+item = ["dominance", "negative"]
+see = "precedes, negated"
+
+[[create]]
+top_matches = "precedes"
+matches = "or equal to"
+render_contains = 'preccurlyeq'
+item = ["dominance", "weak"]
+see = "precedes, or equal to"
+
+[[create]]
+top_matches = "precedes"
+matches = "or equal to, negated"
+render_contains = 'npreccurlyeq'
+item = ["dominance", "negative weak"]
+see = "precedes, or equal to, negated"
+
+[[create]]
+top_matches = "precedes"
+matches = "double"
+render_contains = ['\BSKllcurly', '\STIXPrec']
+item = ["dominance", "strict"]
+see = "precedes, double"
+
+# ------------------------------- music --------------------------------
+
+[[create]]
+matches = "segno"
+render_contains = ['\musSegno', '\MSXsegno']
+item = ["dal segno"]
+see = "segno"
+
+[[create]]
+top_matches = "alla breve"
+matches = "alla breve"
+item = ["meter, musical"]
+see = "alla breve"
+
+[[create]]
+top_matches = "alla breve"
+matches = "reversed"
+item = ["meter, musical"]
+see = "alla breve, reversed"
+
+[[create]]
+top_matches = "common time"
+matches = "common time"
+item = ["meter, musical"]
+see = "common time"
+
+[[create]]
+top_matches = "common time"
+matches = "forward and reversed"
+item = ["meter, musical"]
+see = "common time, forward and reversed"
+
+# ---------------------- unions and intersections ----------------------
+
+[[create]]
+top_matches = "union"
+matches = "union"
+item = ["set union"]
+see = "union"
+
+[[create]]
+top_matches = "union"
+matches = "union"
+item = ["cup"]
+see = "union"
+
+[[create]]
+top_matches = "union"
+matches = "square"
+item = ["bunch join"]
+see = "union, square"
+
+[[create]]
+top_matches = "union"
+matches = "square"
+item = ["map join"]
+see = "union, square"
+
+[[create]]
+top_matches = "intersection"
+matches = "intersection"
+item = ["set intersection"]
+see = "intersection"
+
+[[create]]
+top_matches = "intersection"
+matches = "intersection"
+item = ["cap"]
+see = "intersection"
+
+[[create]]
+top_matches = "intersection"
+matches = "square"
+item = ["bunch meet"]
+see = "intersection, square"
+
+[[create]]
+top_matches = "intersection"
+matches = "square"
+item = ["map meet"]
+see = "intersection, square"
+
+# ------------------------------ letters -------------------------------
+
+[[create]]
+render_contains = '\hbar'
+item = ["Planck's constant"]
+render = "Planck's constant ($\\hbar$)"
+see = "barred letters, h"
+
+[[create]]
+top_matches = "barred letters"
+matches = "d"
+item = ["inexact differential"]
+see = "barred letters, d"
+
+[[create]]
+top_matches = "barred letters"
+matches = "d"
+item = ["differential, inexact"]
+see = "barred letters, d"
+
+[[create]]
+matches = "barred letters"
+item = "crossed letters"
+see = "barred letters"
+
+[[create]]
+top_matches = "boko letters"
+item = ["Hausa letters"]
+see = "boko letters"
+render = ""
+
+[[create]]
+top_matches = "z"
+matches = "round"
+item = ["ezh"]
+see = "round z"
+
+[[create]]
+top_matches = "z"
+matches = "round"
+item = ["tailed letters", "z"]
+see = "round z"
+
+[[create]]
+matches = "rotated letters"
+item = "upside-down letters"
+see = "rotated letters"
+
+[[create]]
+matches = "schwa"
+item = ["rotated letters", "e"]
+see = "schwa"
+
+[[create]]
+top_matches = "barred letters"
+matches = "D"
+item = ["Maxwell-Stefan diffusion coefficient"]
+see = "barred letters, D"
+
+[[create]]
+top_matches = "rotated letters"
+matches = "s, inverted"
+item = ["s", "lazy"]
+see = "rotated letters, s, inverted"
+
+# ------------------------- logical operations -------------------------
+
+# ... not sign ...
+
+[[create]]
+top_matches = "logical negation"
+item = ["negation"]
+see = "logical negation"
+
+[[create]]
+top_matches = "logical negation"
+item = ["not"]
+see = "logical negation"
+
+[[create]]
+top_matches = "logical negation"
+matches = "inverted"
+item = ["interior product"]
+see = "logical negation, inverted"
+
+# ... wedge ...
+
+[[create]]
+render_contains = '($\wedge$)'
+item = ["and"]
+see = "wedge"
+
+[[create]]
+render_contains = '($\wedge$)'
+item = ["logical conjunction"]
+see = "wedge"
+
+[[create]]
+render_contains = '($\wedge$)'
+item = ["conjunction", "logical"]
+see = "wedge"
+
+[[create]]
+render_contains = '($\barwedge$)'
+item = ["nand"]
+see = "wedge, bar over"
+
+[[create]]
+top_matches = "wedge"
+matches = "double"
+item = ["merge"]
+see = "wedge, double"
+
+# ... vee ...
+
+[[create]]
+render_contains = '($\vee$)'
+item = ["or"]
+see = "vee"
+
+[[create]]
+render_contains = '($\vee$)'
+item = ["logical disjunction"]
+see = "vee"
+
+[[create]]
+render_contains = '($\vee$)'
+item = ["disjunction, logical"]
+see = "vee"
+
+[[create]]
+render_contains = '\STIXbarvee'
+item = ["nor"]
+see = "vee, bar over"
+
+[[create]]
+render_contains = '($\veebar$)'
+item = ["xor"]
+see = "vee, bar under"
+
+[[create]]
+render_contains = '($\veebar$)'
+item = ["exclusive or"]
+see = "vee, bar under"
+
+[[create]]
+render_contains = '($\veebar$)'
+item = ["exclusive disjunction, logical"]
+see = "vee, bar under"
+
+[[create]]
+render_contains = '($\veebar$)'
+item = ["logical exclusive disjunction"]
+see = "vee, bar under"
+
+# ----------------------------- turnstiles -----------------------------
+
+[[create]]
+top_matches = "turnstile"
+matches = "double dash, right"
+item = ["satisfies"]
+see = "turnstile, double dash, right"
+
+[[create]]
+top_matches = "turnstile"
+matches = "double dash, right"
+item = ["models"]
+see = "turnstile, double dash, right"
+
+[[create]]
+top_matches = "turnstile"
+matches = "short bar, right"
+item = ["footline"]
+see = "turnstile, short bar"
+
+[[create]]
+top_matches = "turnstile"
+item = ["assertion"]
+see = "turnstile"
+render = ""
+
+[[create]]
+top_matches = "turnstile"
+matches = "down"
+item = ["top"]
+see = "turnstile, down"
+
+[[create]]
+top_matches = "turnstile"
+matches = "down"
+item = ["tautology"]
+see = "turnstile, down"
+
+[[create]]
+top_matches = "turnstile"
+matches = "down"
+item = ["lattice", "top"]
+see = "turnstile, down"
+
+[[create]]
+top_matches = "turnstile"
+matches = "up"
+item = ["lattice", "bottom"]
+see = "turnstile, up"
+
+[[create]]
+top_matches = "turnstile"
+matches = "up"
+item = ["tack"]
+see = "turnstile"
+
+[[create]]
+top_matches = "turnstile"
+matches = "up"
+item = ["perpendicular"]
+see = "turnstile, up"
+
+[[create]]
+top_matches = "turnstile"
+matches = "up"
+item = ["orthogonal"]
+see = "turnstile, up"
+
+[[create]]
+top_matches = "turnstile"
+matches = "up"
+item = ["bottom"]
+see = "turnstile, up"
+
+[[create]]
+top_matches = "turnstile"
+matches = "up"
+item = ["falsum"]
+see = "turnstile, up"
+
+[[create]]
+top_matches = "turnstile"
+matches = "up"
+item = ["independence"]
+see = "turnstile, up"
+
+[[create]]
+top_matches = "turnstile"
+matches = "double dash, up"
+item = ["independence"]
+see = "turnstile, double dash, up"
+
+[[create]]
+top_matches = "turnstile"
+matches = "double bar, down"
+item = ["postal mark"]
+see = "turnstile, double bar, down"
+
+# ---------------------------- gender signs ----------------------------
+
+[[create]]
+top_matches = "gender signs"
+matches = "male and female"
+item = ["hermaphrodite"]
+see = "gender signs, male and female"
+
+[[create]]
+top_matches = "gender signs"
+matches = "female/male"
+item = ["heterosexual"]
+see = "gender signs, female/male"
+
+[[create]]
+top_matches = "gender signs"
+matches = "male/male"
+item = ["homosexual"]
+see = "gender signs, male/male"
+
+[[create]]
+top_matches = "gender signs"
+matches = "female/female"
+item = ["lesbian"]
+see = "gender signs, female/female"
+
+[[create]]
+top_matches = "gender signs"
+matches = "male with stroke and male and female"
+item = ["transgender"]
+see = "gender signs, male with stroke and male and female"
+
+# -------------------------- quotation marks ---------------------------
+
+[[create]]
+top_matches = "quotation marks"
+matches = "straight double"
+item = ["ditto marks"]
+see = "quotation marks, straight double"
+
+[[create]]
+top_matches = "quotation marks"
+matches = "straight single"
+item = ["feet"]
+see = "quotation marks, straight single"
+
+# This rule belongs in a different category but is kept with the preceding
+# rule, which is a proper quotation-mark reference.
+[[create]]
+top_matches = "prime"
+render_regex = '\\[A-Z]*prime'
+item = ["feet"]
+see = "prime"
+
+[[create]]
+top_matches = "quotation marks"
+matches = "straight double"
+item = ["inches"]
+see = "quotation marks, straight double"
+
+# This rule belongs in a different category but is kept with the preceding
+# rule, which is a proper quotation-mark reference.
+[[create]]
+top_matches = "prime"
+render_regex = '\\[A-Z]*dprime'
+item = ["inches"]
+see = "prime, double"
+
+# ----------------------------- plus signs -----------------------------
+
+[[create]]
+render_contains = '\oplus'
+item = ["Kronecker sum"]
+see = "circled symbols, plus"
+render = 'Kronecker sum ($\oplus$)'
+
+[[create]]
+render_contains = '\oplus'
+item = ["xor"]
+see = "circled symbols, plus"
+render = 'xor ($\oplus$)'
+
+[[create]]
+render_contains = '\oplus'
+item = ["exclusive or"]
+see = "circled symbols, plus"
+render = 'exclusive or ($\oplus$)'
+
+[[create]]
+render_contains = '\oplus'
+item = ["ring sum"]
+see = "circled symbols, plus"
+render = 'ring sum ($\oplus$)'
+
+# ------------------------------- hands --------------------------------
+
+[[create]]
+matches = "hand"
+item = "printer's fists"
+see = "hand"
+render = ""
+
+[[create]]
+matches = "hand"
+item = "fists"
+see = "hand"
+render = ""
+
+[[create]]
+matches = "hand"
+item = "manicules"
+see = "hand"
+render = ""
+
+[[create]]
+matches = "hand"
+item = "pointing finger"
+see = "hand"
+render = ""
+
+[[create]]
+render_contains = '\faHandRock'
+item = ["rock, paper, scissors (also lizard, Spock)"]
+see = "hand"
+render = ""
+
+[[create]]
+render_contains = '\faHandRock'
+item = ["roshambo"]
+see = "hand"
+render = ""
+
+[[create]]
+top_matches = "hand"
+matches = "Spock sign"
+item = "Vulcan salute"
+see = "hand, Spock sign"
+render = ""
+
+[[create]]
+top_matches = "hand"
+matches = "victory sign"
+item = ["hand", "peace sign"]
+see = "hand, victory sign"
+render = ""
+
+[[create]]
+top_matches = "hamsa"
+item = ["hand", "with eye"]
+see = "hamsa"
+
+# -------------------------- cleaning symbols --------------------------
+
+[[create]]
+render_contains = '(\WashCotton)'
+item = "normal"
+see = "machine wash, cotton"
+
+[[create]]
+render_contains = '(\WashCotton)'
+item = "maximum agitation"
+see = "machine wash, cotton"
+
+[[create]]
+render_contains = '(\WashSynthetics)'
+item = "permanent press"
+see = "machine wash, synthetics"
+
+[[create]]
+render_contains = '(\WashSynthetics)'
+item = "medium agitation"
+see = "machine wash, synthetics"
+
+[[create]]
+render_contains = '(\WashWool)'
+item = "delicate"
+see = "machine wash, wool/silk"
+
+[[create]]
+render_contains = '(\WashWool)'
+item = "minimal agitation"
+see = "machine wash, wool/silk"
+
+# ------------------------------ accents -------------------------------
+
+# ... redirects from accents>X to accents>Y ...
+
+[[create]]
+top_matches = "accents"
+matches = "circumflex"
+word = "hat"
+see = 'accents, \g<0>'
+
+[[create]]
+preserve_escapes = true
+top_matches = "accents"
+matches = "caron"
+item = "hacek"
+word = "h\\'{a}\\v{c}ek"
+see = "accents, caron"
+
+[[create]]
+preserve_escapes = true
+top_matches = "accents"
+matches = "diaeresis"
+word = "umlaut"
+see = 'accents, di{\ae}resis'
+
+[[create]]
+top_matches = "accents"
+matches = "acute, double"
+item = "Hungarian umlaut"
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "ring"
+word = "krouzek"
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "ring"
+item = ["interior"]
+see = 'accents, \g<0>'
+
+[[create]]
+preserve_escapes = true
+top_matches = "accents"
+matches = "diaeresis"
+item = "trema"
+word = "tr{\\'e}ma"
+see = 'accents, di{\ae}resis'
+
+# ... redirects from the top level to an accent ...
+
+[[create]]
+top_matches = "accents"
+matches = "ring"
+item = ["set interior"]
+see = "accents, ring"
+
+[[create]]
+top_matches = "accents"
+matches = "diaeresis"
+item = ["umlaut"]
+see = 'accents, di{\\ae}resis'
+
+[[create]]
+preserve_escapes = true
+top_matches = "accents"
+matches = "caron"
+item = ["hacek"]
+word = "h\\'{a}\\v{c}ek"
+see = "accents, caron"
+
+[[create]]
+top_matches = "accents"
+matches = "ring"
+item = ["krouzek"]
+word = 'krou\\v{z}ek'
+see = "accents, ring"
+
+[[create]]
+top_matches = "accents"
+matches = "diaeresis"
+item = ["diaeresis"]
+word = 'di{\\ae}resis'
+see = 'accents, di{\\ae}resis'
+
+[[create]]
+top_matches = "accents"
+matches = "ring"
+item = ["ring accent"]
+see = "accents, ring"
+
+[[create]]
+top_matches = "accents"
+matches = "bar"
+item = ["vinculum"]
+see = "accents, bar"
+
+[[create]]
+top_matches = "accents"
+matches = "fermata"
+item = ["fermata", "accent"]
+see = "accents, fermata"
+
+[[create]]
+top_matches = "accents"
+matches = "circumflex"
+item = ["hat", "accent"]
+see = "accents, circumflex"
+
+# ... redirects from X to just "accents" ...
+
+[[create]]
+top_matches = "accents"
+matches = [
+    "acute",
+    "arc",
+    "breve",
+    "caron",
+    "cedilla",
+    "circumflex",
+    "grave",
+    "macron",
+    "ogonek"
+]
+item = ['\1']
+see = 'accents, \1'
+
+[[create]]
+top_matches = "accents"
+matches = "diaeresis"
+item = ["trema"]
+word = "tr{\\'e}ma"
+see = 'accents, di{\\ae}resis'
+
+[[create]]
+top_matches = "accents"
+matches = "bar"
+item = ["overline"]
+see = "accents, overline"
+
+[[create]]
+top_matches = "accents"
+matches = "bar below"
+item = ["underline"]
+see = "accents, underline"
+
+# ... redirects from accents>X to Y ...
+
+[[create]]
+render_contains = '\RHAT'
+item = ["accents", "decorative hat"]
+render = ""
+
+# -------------------------- phonetic accents --------------------------
+
+[[create]]
+top_matches = "accents"
+matches = "ring below"
+item = ["phonetic accents", "voiceless"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "caron below"
+item = ["phonetic accents", "voiced"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "half ring below, right"
+item = ["phonetic accents", "more rounded"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "half ring below, left"
+item = ["phonetic accents", "less rounded"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "plus below"
+item = ["phonetic accents", "advanced"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "bar below"
+item = ["phonetic accents", "retracted"]
+see = 'accents, \g<0>'
+
+[[create]]
+preserve_escapes = true
+top_matches = "accents"
+matches = "diaeresis"
+item = ["phonetic accents", "centralized"]
+see = 'accents, di{\ae}resis'
+
+[[create]]
+top_matches = "accents"
+matches = "X"
+item = ["phonetic accents", "mid-centralized"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "vertical line below"
+item = ["phonetic accents", "syllabic"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "breve below, inverted"
+item = ["phonetic accents", "non-syllabic"]
+see = 'accents, \g<0>'
+
+[[create]]
+preserve_escapes = true
+top_matches = "accents"
+matches = "diaeresis below"
+item = ["phonetic accents", "breathy voiced"]
+see = 'accents, di{\ae}resis below'
+
+[[create]]
+top_matches = "accents"
+matches = "tilde below"
+item = ["phonetic accents", "creaky voiced"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "seagull below"
+item = ["phonetic accents", "linguolabial"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "tilde overlay"
+item = ["phonetic accents", "velarized/pharyngealized"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "tack below, up"
+item = ["phonetic accents", "raised"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "tack below, down"
+item = ["phonetic accents", "lowered"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "tack below, left"
+item = ["phonetic accents", "advanced tongue root"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "tack below, right"
+item = ["phonetic accents", "retracted tongue root"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "bridge below"
+item = ["phonetic accents", "dental"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "bridge below, inverted"
+item = ["phonetic accents", "apical"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "square below"
+item = ["phonetic accents", "laminal"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "tilde"
+item = ["phonetic accents", "nasalized"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "angle, left"
+item = ["phonetic accents", "no audible release"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "acute, double"
+item = ["phonetic accents", "tone, extra high"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "acute"
+item = ["phonetic accents", "tone, high"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "macron"
+item = ["phonetic accents", "tone, mid"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "grave"
+item = ["phonetic accents", "tone, low"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "grave, double"
+item = ["phonetic accents", "tone, extra low"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "breve"
+item = ["phonetic accents", "suprasegmental, extra short"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "caron"
+item = ["phonetic accents", "tone, rising"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "circumflex"
+item = ["phonetic accents", "tone, falling"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "high rising tone"
+item = ["phonetic accents", "tone, high rising"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "low rising tone"
+item = ["phonetic accents", "tone, low rising"]
+see = 'accents, \g<0>'
+
+[[create]]
+top_matches = "accents"
+matches = "rising and falling tone"
+item = ["phonetic accents", "tone, rising and falling"]
+see = 'accents, \g<0>'
+
+# -------------------- various mathematical symbols --------------------
+
+# ... logic ...
+
+[[create]]
+top_matches = "strict implication"
+item = ["fish tail", "right"]
+see = "strict implication"
+
+[[create]]
+top_matches = "strict implication"
+item = ["fish tail", "left"]
+see = "strict converse implication"
+
+[[create]]
+top_matches = "arrow"
+matches = "arrow"
+item = ["joint denial"]
+see = "arrow"
+render = 'joint denial ($\downarrow$)'
+
+[[create]]
+top_matches = "equivalence"
+matches = "equivalence"
+item = ["material biconditional"]
+see = "equivalence"
+
+[[create]]
+top_matches = "arrow"
+matches = "arrow"
+item = ["material conditional"]
+see = "arrow"
+
+[[create]]
+top_matches = "arrow"
+matches = "arrow"
+item = ["alternative denial"]
+see = "arrow"
+render = 'alternative denial ($\uparrow$)'
+
+[[create]]
+top_matches = "vertical bar"
+render_contains = '\textbar'
+item = ["alternative denial"]
+see = "vertical bar"
+render = 'alternative denial (\textbar)'
+
+[[create]]
+top_matches = "superset"
+matches = "strict"
+item = ["material conditional"]
+see = "superset, strict"
+
+[[create]]
+top_matches = "arrow"
+matches = "double ended"
+item = ["material equivalence"]
+see = "arrow, double ended"
+
+[[create]]
+top_matches = "equivalence"
+matches = "equivalence"
+item = ["material equivalence"]
+see = "equivalence"
+
+[[create]]
+top_matches = "arrow"
+matches = "arrow"
+item = ["material implication"]
+see = "arrow"
+
+[[create]]
+top_matches = "superset"
+matches = "strict"
+item = ["material implication"]
+see = "superset, strict"
+
+[[create]]
+top_matches = "arrow"
+matches = "arrow"
+item = ["material nonimplication"]
+see = "arrow"
+render = 'material nonimplication ($\nrightarrow$)'  # Assuming AMS
+
+[[create]]
+top_matches = "superset"
+matches = "strict, negated"
+item = ["material nonimplication"]
+see = "superset, strict, negated"
+
+[[create]]
+top_matches = "arrow"
+matches = "arrow"
+item = ["converse implication"]
+see = "arrow"
+render = 'converse implication ($\leftarrow$)'
+
+[[create]]
+top_matches = "subset"
+matches = "strict"
+item = ["converse implication"]
+see = "subset, strict"
+
+[[create]]
+top_matches = "arrow"
+matches = "arrow"
+item = ["converse nonimplication"]
+see = "arrow"
+render = 'converse nonimplication ($\nleftarrow$)'
+
+[[create]]
+top_matches = "subset"
+matches = "strict, negated"
+item = ["converse nonimplication"]
+see = "subset, strict, negated"
+
+[[create]]
+top_matches = "multimap"
+matches = "multimap"
+item = ["linear implication"]
+see = "multimap"
+
+[[create]]
+top_matches = "multimap"
+matches = "multimap"
+item = ["lollipop (mathematics)"]
+see = "multimap"
+
+[[create]]
+top_matches = "vertical bar"
+matches = "vertical bar"
+item = ["Sheffer's stroke"]
+see = "vertical bar"
+
+# ... set theory ...
+
+[[create]]
+top_matches = "subset"
+matches = "square"
+item = ["subbunch"]
+see = "subset, square"
+
+[[create]]
+top_matches = "subset"
+matches = "square"
+item = ["submap"]
+see = "subset, square"
+
+[[create]]
+top_matches = "subset"
+matches = "finite"
+item = ["subset", "double"]
+see = "subset, finite"
+
+[[create]]
+top_matches = "subset"
+matches = "strict"
+item = ["proper subset"]
+see = "subset, strict"
+
+[[create]]
+top_matches = "superset"
+matches = "strict"
+item = ["proper superset"]
+see = "superset, strict"
+
+[[create]]
+top_matches = "set membership"
+matches = "set membership"
+item = ["in"]
+see = "set membership"
+
+[[create]]
+top_matches = "set membership"
+matches = "set membership"
+item = ["member of"]
+see = "set membership"
+
+[[create]]
+top_matches = "set membership"
+matches = "set membership"
+item = ["element of"]
+see = "set membership"
+
+[[create]]
+top_matches = "set membership"
+matches = "reversed"
+item = ["owns"]
+see = "set membership, reversed"
+
+[[create]]
+matches = "aleph"
+item = ["cardinality"]
+see = "aleph"
+
+# ... equality and inequality ...
+
+[[create]]
+top_matches = "equal"
+render_contains = '\circeq'
+item = ["ring equals"]
+see = "equal, ring"
+render = 'ring equals ($\circeq$)'
+
+[[create]]
+top_matches = "equal"
+render_contains = '\eqcolon'
+item = ["excess"]
+see = "equal, colon"
+
+[[create]]
+top_matches = "equal"
+render_contains = '\eqcirc'
+item = ["ring within equals"]
+see = "equal, ring"
+render = 'ring within equals ($\eqcirc$)'
+
+[[create]]
+top_matches = "equal"
+render_contains = '$\doteqdot$'
+item = ["geometrically equal to"]
+see = "equal, dots"
+
+[[create]]
+top_matches = "equal"
+matches = "negated"
+item = ["not equal"]
+see = "equal, negated"
+
+[[create]]
+top_matches = "equal"
+render_contains = '$\bumpeq$'
+item = ["difference between"]
+see = "equal, bump"
+
+[[create]]
+top_matches = "equal"
+render_contains = '$\Bumpeq$'
+item = ["geometrically equivalent to"]
+see = "equal, bump"
+
+[[create]]
+top_matches = "equal"
+matches = "asymptotically"
+item = ["asymptotically equal to"]
+see = "equal, asymptotically"
+
+[[create]]
+top_matches = "less than"
+matches = "horizontally barred"
+item = ["smaller than"]
+see = "less than, horizontally barred"
+
+[[create]]
+top_matches = "greater than"
+matches = "horizontally barred"
+item = ["larger than"]
+see = "greater than, horizontally barred"
+
+[[create]]
+top_matches = "less than"
+matches = "much, underlined"
+item = ["partial meet contraction"]
+see = "less than, much, underlined"
+
+[[create]]
+top_matches = "equivalence"
+render_contains = '($\equiv$)'
+item = ["biconditional"]
+see = "equivalence"
+
+[[create]]
+top_matches = "arrow"
+matches = "double ended"
+item = ["biconditional"]
+see = "arrow, double ended"
+
+# ... Z notation ...
+
+[[create]]
+top_matches = "greater than"
+matches = "much"
+item = ["Z notation", "schema piping"]
+see = "greater than, much"
+
+[[create]]
+top_matches = "restriction"
+matches = "restriction"
+item = ["Z notation", "schema projection"]
+see = "restriction"
+
+[[create]]
+top_matches = "bullet"
+matches = "bullet"
+item = ["Z notation", "spot"]
+see = "bullet"
+
+[[create]]
+top_matches = "colon"
+matches = "hollow"
+item = ["Z notation", "type colon"]
+see = "colon, hollow"
+
+[[create]]
+top_matches = "bullet"
+matches = "bullet"
+item = ["Z notation", "spot"]
+see = "bullet"
+
+[[create]]
+top_matches = "semicolon"
+matches = "hollow"
+item = ["Z notation", "relational composition"]
+see = "semicolon, hollow"
+
+[[create]]
+top_matches = "delimiters"
+matches = "parenthesis with bar"
+item = ["Z notation", "relational image"]
+see = "delimiters, parenthesis with bar"
+render = 'relational image (\OpnParnBar\graybox\ClsParnBar)'
+
+[[create]]
+top_matches = "triangle"
+render_contains = '(\STIXdsub)'
+item = ["Z notation", "domain antirestriction"]
+see = "triangle, bar through"
+
+[[create]]
+top_matches = "triangle"
+render_contains = '(\STIXrsub)'
+item = ["Z notation", "range antirestriction"]
+see = "triangle, bar through"
+
+# ... delimiters ...
+
+[[create]]
+top_matches = "delimiters"
+matches = "vertical bar"
+item = ["absolute value"]
+see = "delimiters, vertical bar"
+render = 'absolute value ($\vert$\graybox$\vert$)'
+
+[[create]]
+top_matches = "delimiters"
+matches = "double vertical bar"
+item = ["norm"]
+see = "delimiters, double vertical bar"
+render = 'norm ($\Vert$\graybox$\Vert$)'
+
+[[create]]
+top_matches = "delimiters"
+matches = "upper corners"
+item = ["Quine corners"]
+see = "delimiters, upper corners"
+render = 'Quine corners ($\ulcorner$\graybox$\urcorner$)'
+
+[[create]]
+top_matches = "delimiters"
+matches = "upper corners"
+item = ["quasi-quotation marks"]
+see = "delimiters, upper corners"
+render = 'quasi-quotation marks ($\ulcorner$\graybox$\urcorner$)'
+
+# ... other ...
+
+[[create]]
+matches = "therefore"
+item = "thus"
+see = "therefore"
+
+[[create]]
+top_matches = "therefore"
+matches = "down"
+item = ["since"]
+see = "therefore, down"
+
+[[create]]
+top_matches = "therefore"
+matches = "down"
+item = ["because"]
+see = "therefore, down"
+
+[[create]]
+top_matches = "minus"
+matches = "dot"
+item = ["cutoff subtraction"]
+see = "minus, dot"
+
+[[create]]
+top_matches = "minus"
+matches = "dots"
+render_contains = "dotsminusdots"
+item = ["geometric proportion"]
+see = "minus, dots"
+
+[[create]]
+top_matches = "times"
+matches = "times"
+item = ["multiplication", "cross"]
+see = "times"
+
+[[create]]
+top_matches = "times"
+item = ["Cartesian product"]
+see = "times"
+
+[[create]]
+top_matches = "times"
+item = ["cross product"]
+see = "times"
+
+[[create]]
+render_contains = '\otimes'
+item = ["Kronecker product"]
+see = "circled symbols, multiplication"
+render = 'Kronecker product ($\otimes$)'
+
+[[create]]
+render_contains = '\otimes'
+item = ["tensor product"]
+see = "circled symbols, multiplication"
+render = 'tensor product ($\otimes$)'
+
+[[create]]
+top_matches = "partial derivative"
+item = ["derivative, partial"]
+see = "partial derivative"
+
+[[create]]
+top_matches = "proportionality"
+matches = "reversed"
+item = ["Descartes's equal sign"]
+see = "proportionality, reversed"
+
+[[create]]
+top_matches = "arrow"
+matches = "wavy"
+item = ["leads to"]
+see = "arrow, wavy"
+
+[[create]]
+top_matches = "nabla"
+item = ["Laplacian"]
+see = "nabla"
+render = 'Laplacian ($\nabla^2$)'
+
+[[create]]
+top_matches = "triangle"
+matches = "triangle"
+item = ["set symmetric difference"]
+see = "triangle"
+render = 'set symmetric difference ($\bigtriangleup$)'
+
+[[create]]
+top_matches = "arrow"
+matches = "double ended, double bodied"
+item = ["iff"]
+see = "arrow, double ended, double bodied"
+
+[[create]]
+top_matches = "pitchfork"
+matches = "pitchfork"
+item = ["transversal intersection"]
+see = "pitchfork"
+
+[[create]]
+top_matches = "transform"
+preserve_escapes = true
+seealso = "alphabets, math"
+render = ""
+
+[[create]]
+top_matches = "for all"
+matches = "for all"
+item = ["universal bunch quantifier"]
+see = "for all"
+
+[[create]]
+top_matches = "for all"
+matches = "for all"
+item = ["universal individual quantifier"]
+see = "for all"
+
+[[create]]
+top_matches = "rhombus"
+matches = "rhombus"
+item = ["diamond"]
+see = "rhombus"
+
+[[create]]
+top_matches = "end of proof"
+item = "QED"
+see = "end of proof"
+render = ""
+
+[[create]]
+top_matches = "smiles and frowns"
+matches = "both"
+render_contains = "frownsmile"
+item = ["coherence"]
+see = "smiles and frowns, both"
+
+[[create]]
+top_matches = "smiles and frowns"
+matches = "both"
+render_contains = "smilefrown"
+item = ["incoherence"]
+see = "smiles and frowns, both"
+
+[[create]]
+top_matches = "vertical bar"
+matches = "vertical bar"
+item = ["divides"]
+see = "vertical bar"
+
+[[create]]
+top_matches = "vertical bar"
+matches = "vertical bar"
+item = ["evaluated at"]
+see = "vertical bar"
+
+[[create]]
+top_matches = "vertical bar"
+matches = "negated"
+item = ["divides", "negated"]
+see = "vertical bar, negated"
+
+[[create]]
+top_matches = "dagger"
+matches = "dagger"
+item = ["adjoint"]
+see = "dagger"
+render = 'adjoint ($\dag$)'
+
+[[create]]
+top_matches = "dot"
+matches = "four"
+item = ["proportion"]
+see = "dot, four"
+
+[[create]]
+matches = "empty set"
+item = "null set"
+see = "empty set"
+render = ""
+
+[[create]]
+top_matches = "minus"
+matches = "colon"
+item = ["excess"]
+see = "minus, colon"
+
+[[create]]
+top_matches = "triangle"
+matches = "bar through"
+render_contains = '\STIXconictaper'
+item = ["conic taper"]
+see = "triangle, bar through"
+
+[[create]]
+render_contains = '\CircNgt'
+item = ["circled symbols", "tilde"]
+
+[[create]]
+top_matches = "colon"
+matches = "math mode"
+item = ["ratio"]
+see = "colon, math mode"
+
+[[create]]
+top_matches = "dot"
+item = ["dot"]
+seealso = "colon"
+render = ""
+
+[[create]]
+top_matches = "similar"
+matches = "similar"
+item = ["swung dash"]
+see = "similar"
+
+[[create]]
+top_matches = "similar"
+matches = "or equal to"
+render_contains = '\cong'
+item = ["congruent"]
+see = "similar, or equal to"
+
+[[create]]
+top_matches = "similar"
+matches = "dots, vertical"
+item = ["kernel contraction"]
+see = "similar, dots, vertical"
+
+[[create]]
+top_matches = "equal"
+matches = "asymptotically"
+item = ["Vinogradov notation"]
+see = "equal, asymptotically"
+
+[[create]]
+top_matches = "greater than"
+matches = "much"
+render_contains = '($\gg$)'
+item = ["Vinogradov notation"]
+see = "greater than, much"
+
+[[create]]
+top_matches = "less than"
+matches = "much"
+render_contains = '($\ll$)'
+item = ["Vinogradov notation"]
+see = "less than, much"
+
+[[create]]
+top_matches = "harpoon"
+matches = "double, opposite sides"
+item = ["equilibrium"]
+see = "harpoon, double, opposite sides"
+
+[[create]]
+top_matches = "accents"
+matches = ["bat", "ghost"]
+item = ['\1', "as math-mode accent"]
+see = 'accents, \1'
+
+[[create]]
+top_matches = "accents"
+matches = "witch on broom"
+item = ["witch", "as math-mode accent"]
+see = "accents, witch on broom"
+
+# --------------------------- miscellaneous ----------------------------
+
+[[create]]
+top_matches = "pilcrow"
+item = "paragraph mark"
+render = 'paragraph mark (\P)'
+see = "pilcrow"
+
+[[create]]
+matches = "wireless network"
+item = "wifi"
+see = "wireless network"
+
+[[create]]
+render_contains = ["Greenpoint", "PackingWaste"]
+item = "Green Dot"
+see = "recycling"
+
+[[create]]
+render_contains = ["Greenpoint", "PackingWaste"]
+item = "Grune Punkt"
+word = 'Gr\"une Punkt'
+see = "recycling"
+
+[[create]]
+matches = "Santa Claus"
+item = "Father Christmas"
+see = "Santa Claus"
+
+[[create]]
+matches = "traffic light"
+item = "stoplight"
+see = "traffic light"
+render = ""
+
+[[create]]
+compare_lowercase = true
+contains = ["fivestarlines", "manstar", "pentagram"]
+item = ["pentagram"]
+see = "star, pentagram"
+
+[[create]]
+top_matches = "star"
+matches = "of David"
+item = ["star", "Jewish"]
+see = "star, of David"
+
+[[create]]
+top_matches = "star"
+matches = "of David"
+item = ["Jewish star"]
+see = "star, of David"
+
+[[create]]
+contains = "keyboard symbols"
+item = "keys, computer"
+see = "keyboard symbols"
+
+[[create]]
+contains = "keyboard symbols"
+item = "computer keys"
+see = "keyboard symbols"
+
+[[create]]
+render_contains = "mathring"
+item = ["A with ring", "math mode"]
+see = "accents, ring"
+render = ""
+
+[[create]]
+render_contains = '\STIXAngstrom'
+preserve_escapes = true
+item = ["Angstrom unit"]
+word = '\AA{}ngstr\"om unit'
+see = "A with ring"
+
+[[create]]
+top_matches = "star"
+matches = "pentagram"
+item = ["assumption"]
+see = "star, pentagram"
+
+[[create]]
+top_matches = "oven"
+item = ["stove"]
+see = "oven"
+render = ""
+
+[[create]]
+matches = "per mill"
+item = "per thousand"
+see = "per mill"
+
+[[create]]
+matches = "per mill"
+item = "thousandths"
+see = "per mill"
+
+[[create]]
+matches = "per mill"
+item = "millesimal sign"
+see = "per mill"
+
+[[create]]
+matches = "permyriad"
+item = "per ten thousand"
+see = "permyriad"
+
+[[create]]
+matches = "permyriad"
+item = "ten thousandths"
+see = "permyriad"
+
+[[create]]
+top_matches = "airplane"
+matches = "military"
+item = ["fighter jet"]
+see = "airplane, military"
+
+[[create]]
+matches = "playing card suits"
+item = "card suits"
+see = "playing card suits"
+
+[[create]]
+matches = "playing card suits"
+item = "club"
+render = 'club ($\clubsuit$)'
+see = "playing card suits, club"
+
+[[create]]
+matches = "playing card suits"
+item = "spade"
+render = 'spade ($\spadesuit$)'
+see = "playing card suits, spade"
+
+[[create]]
+matches = "playing card suits"
+item = "diamond suit"
+render = 'diamond suit ($\diamondsuit$)'
+see = "playing card suits, diamond"
+
+[[create]]
+matches = "playing card suits"
+item = ["heart", "suit"]
+render = ""
+see = "playing card suits, heart"
+
+[[create]]
+matches = "water pistol"
+item = "squirt gun"
+see = "water pistol"
+
+[[create]]
+top_matches = "banknote"
+not_matches = "banknote"
+item = ['\1 banknote']
+see = 'banknote, \1'
+render = ""
+
+[[create]]
+matches = "nesting dolls"
+item = "matryoshkas"
+
+[[create]]
+matches = "warning"
+item = "caution"
+see = "warning"
+render = ""
+
+[[create]]
+matches = "warning"
+item = "danger"
+see = "warning"
+render = ""
+
+[[create]]
+matches = "wrench"
+item = "spanner"
+see = "wrench"
+render = ""
+
+[[create]]
+matches = "eggplant"
+item = "aubergine"
+see = "eggplant"
+render = ""
+
+[[create]]
+matches = "soccer ball"
+item = "football"
+see = "soccer ball"
+render = ""
+
+[[create]]
+matches = "mailbox"
+item = "postbox"
+see = "mailbox"
+render = ""
+
+[[create]]
+matches = "denarius"
+item = "deleatur"
+see = "denarius"
+render = ""
+
+[[create]]
+render_contains = '\ABXdotdiv'
+item = ["monus"]
+see = "division, single dot"
+render = 'monus ($\ABXdotdiv$)'
+
+[[create]]
+top_matches = "division"
+matches = "times"
+item = ["division times"]
+see = "division, times"
+
+[[create]]
+top_matches = "sharp s"
+item = ["eszett"]
+see = "sharp s"
+render = 'eszett (\ss)'
+
+[[create]]
+top_matches = "truck"
+item = ["lorry"]
+see = "truck"
+render = ""
+
+[[create]]
+matches = "pushpin"
+item = "thumbtack"
+see = "pushpin"
+render = ""
+
+[[create]]
+top_matches = "join (database)"
+item = ["database join"]
+see = "join (database)"
+render = ""
+
+[[create]]
+top_matches = "join (database)"
+item = ["relational algebra"]
+see = "join (database)"
+render = ""
+
+[[create]]
+matches = "registered trademark"
+item = ["registered trademark"]
+see = "legal symbols, registered trademark"
+
+[[create]]
+matches = "trademark"
+item = ["trademark"]
+see = "legal symbols, trademark"
+
+[[create]]
+matches = "jack-o'-lantern"
+item = "pumpkin"
+see = "jack-o'-lantern"
+render = ""
+
+[[create]]
+render_regex = '\\STAR(Earth|Air|Fire|Water)\b'
+lowercase_item = true
+item = ["elements", '\1']
+
+[[create]]
+top_matches = "media control symbols"
+matches = "reverse"
+item = ["rewind"]
+see = "media control symbols, reverse"
+render = ""
+
+[[create]]
+top_matches = "media control symbols"
+matches = "forward"
+item = ["fast forward"]
+see = "media control symbols, forward"
+render = ""
+
+[[create]]
+top_matches = "speaker"
+item = ["volume control"]
+see = "speaker"
+render = ""
+
+[[create]]
+top_matches = "ping pong"
+item = "table tennis"
+see = "ping pong"
+render = ""
+
+[[create]]
+top_matches = "mu"
+matches = "lowercase upright"
+item = ["micro"]
+see = "mu, lowercase upright"
+
+[[create]]
+top_matches = "gear"
+item = ["cog"]
+see = "gear"
+render = ""
+
+[[create]]
+top_matches = "baby"
+item = "infant"
+see = "baby"
+render = ""
+
+[[create]]
+top_matches = "video game controller"
+item = ["game controller"]
+see = "video game controller"
+render = ""
+
+[[create]]
+top_matches = "extraterrestrial"
+item = ["alien"]
+see = "extraterrestrial"
+render = ""
+
+[[create]]
+top_matches = "billed cap"
+item = ["baseball cap"]
+see = "billed cap"
+
+[[create]]
+top_matches = "ampersand"
+matches = "inverted"
+item = ["multiplicative disjunction"]
+see = "ampersand, inverted"
+
+[[create]]
+top_matches = "ampersand"
+matches = "inverted"
+item = ["par"]
+see = "ampersand, inverted"
+
+[[create]]
+top_matches = "hash"
+item = ["number sign"]
+see = "hash"
+
+[[create]]
+top_matches = "hash"
+item = ["pound sign"]
+see = "hash"
+
+[[create]]
+top_matches = "hash"
+item = ["octothorpe"]
+see = "hash"
+
+[[create]]
+top_matches = "pi"
+matches = "lowercase variant"
+item = ["pomega"]
+see = "pi, lowercase variant"
+
+[[create]]
+top_matches = "pi"
+matches = "lowercase variant"
+item = ["curly pi"]
+see = "pi, lowercase variant"
+
+[[create]]
+render_contains = '\blackacchack{\^}'
+item = ["caret"]
+see = "accents, circumflex"
+
+[[create]]
+render_contains = '\textasciicircum'
+item = ["caret"]
+see = "diacritics, circumflex"
+
+[[create]]
+top_matches = "diacritics"
+matches = "circumflex"
+item = "hat"
+see = "diacritics, circumflex"
+
+[[create]]
+top_matches = "diacritics"
+matches = "open"
+item = ["diacritics", "half ring, left"]
+see = "diacritics, open"
+
+[[create]]
+matches = "mortarboard"
+item = ["graduation cap"]
+see = "mortarboard"
+render = ""
+
+[[create]]
+top_matches = "slash"
+matches = "slash"
+item = ["solidus"]
+see = "slash"
+
+[[create]]
+top_matches = "slash"
+matches = "slash"
+item = ["not"]
+see = "slash"
+
+[[create]]
+top_matches = "backslash"
+matches = "backslash"
+item = ["reverse solidus"]
+see = "backslash"
+
+[[create]]
+matches = "celsius"
+item = ["centigrade"]
+see = "celsius"
+
+[[create]]
+matches = "speech bubble"
+item = ["word balloon"]
+see = "speech bubble"
+render = ""
+
+[[create]]
+matches = "vertical bar"
+item = ["pipe"]
+see = "vertical bar"
+
+[[create]]
+top_matches = "automobile"
+matches = "automobile"
+item = ["car"]
+see = "automobile"
+render = ""
+
+[[create]]
+top_matches = "delta"
+matches = "uppercase"
+item = ["Laplacian"]
+see = "delta, uppercase"
+render = 'Laplacian ($\Delta$)'
+
+[[create]]
+top_matches = "triangle"
+matches = "impossible"
+item = ["tribar"]
+see = "triangle, impossible"
+
+[[create]]
+top_matches = "triangle"
+matches = "impossible"
+item = ["Penrose triangle"]
+see = "triangle, impossible"
+
+[[create]]
+top_matches = "triangle"
+matches = "triangle"
+render_contains = '(\VarSummit)'
+item = ["summit"]
+see = "triangle"
+
+[[create]]
+top_matches = "triangle"
+matches = "filled"
+render_contains = '(\Summit)'
+item = ["summit"]
+see = "triangle, filled"
+
+[[create]]
+top_matches = "cross (crucifix)"
+render_contains = '(\SummitSign)'
+item = ["summit"]
+see = "cross (crucifix)"
+
+[[create]]
+top_matches = "flag"
+matches = "flag"
+item = ["pennant"]
+see = "flag"
+render = ""
+
+[[create]]
+matches = "luggage"
+item = ["suitcase"]
+see = "luggage"
+render = ""
+
+[[create]]
+matches = "medium coeli"
+item = "midheaven"
+see = 'medium c{\\oe}li'
+
+[[create]]
+matches = "imum coeli"
+item = "nadir"
+see = 'imum c{\\oe}li'
+
+[[create]]
+top_matches = "envelope"
+matches = "envelope"
+item = ["email"]
+see = "envelope"
+render = ""
+
+[[create]]
+top_matches = "envelope"
+matches = "envelope"
+item = ["e-mail"]
+see = "envelope"
+render = ""
+
+[[create]]
+top_matches = "insect"
+item = ["bug"]
+see = "insect"
+render = ""
+
+[[create]]
+top_matches = "cycling"
+item = ["biking"]
+see = "cycling"
+render = ""
+
+[[create]]
+top_matches = "minus"
+matches = "commercial"
+item = ["discount"]
+see = "minus, commercial"
+
+[[create]]
+top_matches = "minus"
+matches = "commercial"
+item = ["abzuglich"]
+word = 'abz\"uglich'
+see = "minus, commercial"
+
+[[create]]
+top_matches = "page"
+item = ["paper"]
+see = "page"
+render = ""
+
+[[create]]
+top_matches = "rhombus"
+matches = "rhombus"
+item = ["lozenge"]
+see = "rhombus"
+render = ""
+
+[[create]]
+matches = "pistol"
+item = ["gun"]
+see = "pistol"
+
+[[create]]
+render_contains = '\RHAT'
+item = ["hat", "as math-mode accent"]
+
+[[create]]
+top_matches = "hammer"
+matches = "and sickle"
+item = ["communism"]
+see = "hammer, and sickle"
+
+[[create]]
+top_matches = "trash"
+matches = "trash"
+item = ["wastebasket"]
+see = "trash"
+render = ""
+
+[[create]]
+top_matches = "trash"
+matches = "trash"
+item = ["rubbish bin"]
+see = "trash"
+render = ""
+
+[[create]]
+top_matches = "legal symbols"
+matches = [
+    "copyright",
+    "copyleft",
+    "registered trademark",
+    "service mark",
+    "trademark"
+]
+item = ['\g<0>']
+see = 'legal symbols, \g<0>'
+
+[[create]]
+matches = "headstone"
+item = ["tombstone"]
+
+[[create]]
+matches = "headstone"
+item = ["gravestone"]
+
+[[create]]
+top_matches = "chalkboard"
+matches = "chalkboard"
+item = ["blackboard"]
+see = "chalkboard"
+
+[[create]]
+top_matches = "chalkboard"
+matches = "chalkboard"
+item = ["whiteboard"]
+see = "chalkboard"
+
+[[create]]
+matches = "military"
+render_contains = '\dsmilitary'
+item = ["sword", "multiple, crossed"]
+
+[[create]]
+top_matches = "circled symbols"
+matches = "telephone handset"
+item = ["telephone handset", "circled"]
+see = "circled symbols, telephone handset"
+
+[[create]]
+top_matches = "circled symbols"
+matches = "user"
+item = ["user", "circled"]
+see = "circled symbols, user"

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-sets.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-sets.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-sets.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,336 @@
+###############################################################
+# Rewrite entries for all subsets to put them under "subset". #
+# Author: Scott Pakin <scott+clsl at pakin.org>                  #
+###############################################################
+
+# ------------------------------ subsets -------------------------------
+
+# ... regular ...
+
+# This rule must appear first in this section.
+[[rewrite]]
+matches = "subsets"
+render_matches = ""
+item = "subset"
+
+[[rewrite]]
+render_contains = '(\Sbset)'
+item = ["subset", "ordinary"]
+
+[[rewrite]]
+matches = ["subset", "strict subset"]
+item = ["subset", "strict"]
+
+[[rewrite]]
+matches = "subseteq"
+item = ["subset", "ordinary"]
+
+[[rewrite]]
+matches = "subseteqq"
+item = ["subset", "ordinary"]
+
+[[rewrite]]
+matches = ["subsetneq", "varsubsetneq"]
+item = ["subset", "proper"]
+
+[[rewrite]]
+matches = ["subsetneqq", "varsubsetneqq"]
+item = ["subset", "proper"]
+
+[[rewrite]]
+matches = "subsetdot"
+item = ["subset", "dotted, strict"]
+
+[[rewrite]]
+matches = "subedot"
+item = ["subset", "dotted"]
+
+[[rewrite]]
+matches = "subsetplus"
+item = ["subset", "plus, strict"]
+
+[[rewrite]]
+matches = "submult"
+item = ["subset", "times, strict"]
+
+[[rewrite]]
+matches = "subrarr"
+item = ["subset", "right arrow, strict"]
+
+[[rewrite]]
+matches = "subsetpluseq"
+item = ["subset", "plus"]
+
+[[rewrite]]
+matches = "subsetcirc"
+item = ["subset", "circle, strict"]
+
+[[rewrite]]
+matches = "subsetapprox"
+item = ["subset", "approximately equal to"]
+
+[[rewrite]]
+matches = "subsim"
+item = ["subset", "similar to"]
+
+[[rewrite]]
+matches = "subsub"
+item = ["subset", "atop subset"]
+
+[[rewrite]]
+matches = "subsup"
+item = ["subset", "atop superset"]
+
+[[rewrite]]
+matches = ["Subset", "strict finite subset"]
+item = ["subset", "finite, strict"]
+
+[[rewrite]]
+matches = "finite subset"
+item = ["subset", "finite"]
+
+[[rewrite]]
+matches = "leftarrowsubset"
+item = ["subset", "left arrow, strict"]
+
+[[rewrite]]
+matches = "bsolhsub"
+item = ["subset", "backslash"]
+
+[[rewrite]]
+matches = "csub"
+item = ["subset", "closed, strict"]
+
+[[rewrite]]
+matches = "csube"
+item = ["subset", "closed"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = ["nsubseteq", "nsubseteqq", "subset negated"]
+item = ["subset", "ordinary, negated"]
+
+[[rewrite]]
+matches = ["nsubset", "strict subset negated"]
+item = ["subset", "strict, negated"]
+
+[[rewrite]]
+matches = ["nSubset", "strict finite subset negated"]
+item = ["subset", "finite, negated strict"]
+
+[[rewrite]]
+matches = "finite subset negated"
+item = ["subset", "negated finite"]
+
+# --------------------------- square subsets ---------------------------
+
+# ... regular ...
+
+[[rewrite]]
+matches = ["sqsubset", "strict subbunch", "strict submap"]
+item = ["subset", "strict square"]
+
+[[rewrite]]
+matches = ["sqsubseteq", "sqsubseteqq", "subbunch", "submap"]
+item = ["subset", "square"]
+
+[[rewrite]]
+matches = ["sqsubsetneq", "varsqsubsetneq"]
+item = ["subset", "proper square"]
+
+[[rewrite]]
+matches = ["sqsubsetneqq", "varsqsubsetneqq"]
+item = ["subset", "proper square"]
+
+[[rewrite]]
+matches = "weak subbunch"
+item = ["subset", "dotted square"]
+
+[[rewrite]]
+matches = "strict weak subbunch"
+item = ["subset", "dotted square, strict"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = ["nsqsubseteq", "nsqsubseteqq", "subbunch negated", "submap negated"]
+item = ["subset", "square, negated"]
+
+[[rewrite]]
+matches = ["nsqsubset", "strict subbunch negated", "strict submap negated"]
+item = ["subset", "strict square, negated"]
+
+[[rewrite]]
+matches = ["Sqsubset", "sqSubset"]
+item = ["subset", "finite, strict square"]
+
+[[rewrite]]
+matches = ["nSqsubset", "nsqSubset"]
+item = ["subset", "finite square, negated strict"]
+
+[[rewrite]]
+matches = "weak subbunch negated"
+item = ["subset", "dotted square, negated"]
+
+[[rewrite]]
+matches = "strict weak subbunch negated"
+item = ["subset", "dotted square, negated strict"]
+
+# ------------------------------ supersets -------------------------------
+
+# ... regular ...
+
+# This rule must appear first in this section.
+[[rewrite]]
+matches = "supersets"
+render_matches = ""
+item = "superset"
+
+[[rewrite]]
+matches = "supset"
+item = ["superset", "strict"]
+
+[[rewrite]]
+matches = "supseteq"
+item = ["superset", "ordinary"]
+
+[[rewrite]]
+matches = "supseteqq"
+item = ["superset", "ordinary"]
+
+[[rewrite]]
+matches = ["supsetneq", "varsupsetneq"]
+item = ["superset", "proper"]
+
+[[rewrite]]
+matches = ["supsetneqq", "varsupsetneqq"]
+item = ["superset", "proper"]
+
+[[rewrite]]
+matches = "supsetdot"
+item = ["superset", "dotted, strict"]
+
+[[rewrite]]
+matches = "supedot"
+item = ["superset", "dotted"]
+
+[[rewrite]]
+matches = "supsetplus"
+item = ["superset", "plus, strict"]
+
+[[rewrite]]
+matches = "supmult"
+item = ["superset", "times, strict"]
+
+[[rewrite]]
+matches = "suplarr"
+item = ["superset", "left arrow, strict"]
+
+[[rewrite]]
+render_contains = "STIXrightarrowsupset"
+item = ["superset", "right arrow, strict"]
+
+[[rewrite]]
+matches = "supsetpluseq"
+item = ["superset", "plus"]
+
+[[rewrite]]
+matches = "supsetcirc"
+item = ["superset", "circle, strict"]
+
+[[rewrite]]
+matches = "supsetapprox"
+item = ["superset", "approximately equal to"]
+
+[[rewrite]]
+matches = "supsim"
+item = ["superset", "similar to"]
+
+[[rewrite]]
+matches = "supsub"
+item = ["superset", "atop subset"]
+
+[[rewrite]]
+matches = "supsup"
+item = ["superset", "atop superset"]
+
+[[rewrite]]
+matches = "Supset"
+item = ["superset", "finite, strict"]
+
+[[rewrite]]
+matches = "suphsol"
+item = ["superset", "solidus"]
+
+[[rewrite]]
+matches = "suphsub"
+item = ["superset", "subset"]
+
+[[rewrite]]
+matches = "supdsub"
+item = ["superset", "subset dash"]
+
+[[rewrite]]
+matches = "csup"
+item = ["supset", "closed, strict"]
+
+[[rewrite]]
+matches = "csupe"
+item = ["supset", "closed"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = ["nsupseteq", "nsupseteqq"]
+item = ["superset", "ordinary, negated"]
+
+[[rewrite]]
+matches = "nsupset"
+item = ["superset", "strict, negated"]
+
+[[rewrite]]
+matches = "nSupset"
+item = ["superset", "finite, negated strict"]
+
+# -------------------------- square supersets --------------------------
+
+# ... regular ...
+
+[[rewrite]]
+matches = "sqsupset"
+item = ["superset", "strict square"]
+
+[[rewrite]]
+matches = "sqsupseteq"
+item = ["superset", "square"]
+
+[[rewrite]]
+matches = "sqsupseteqq"
+item = ["superset", "square"]
+
+[[rewrite]]
+matches = ["sqsupsetneq", "varsqsupsetneq"]
+item = ["superset", "proper square"]
+
+[[rewrite]]
+matches = ["sqsupsetneqq", "varsqsupsetneqq"]
+item = ["superset", "proper square"]
+
+[[rewrite]]
+matches = ["Sqsupset", "sqSupset"]
+item = ["superset", "finite, strict square"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = ["nSqsupset", "nsqSupset"]
+item = ["superset", "finite square, negated strict"]
+
+[[rewrite]]
+matches = "nsqsupset"
+item = ["superset", "strict square, negated"]
+
+[[rewrite]]
+matches = ["nsqsupseteq", "nsqsupseteqq"]
+item = ["superset", "square, negated"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-similar.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-similar.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-similar.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,110 @@
+##############################################
+# Categorize similarities.                   #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ... regular ...
+
+[[rewrite]]
+matches = "sim"
+item = "similar"
+
+[[rewrite]]
+matches = "thicksim"
+item = ["similar", "thick"]
+
+[[rewrite]]
+matches = [
+    "similar",
+    "simeq",
+    "cong"
+]
+not_render_contains = '\CircSm'
+item = ["similar", "or equal to"]
+
+[[rewrite]]
+matches = "simcolon"
+item = ["similar", "colon"]
+
+[[rewrite]]
+matches = "simcoloncolon"
+item = ["similar", "colon, double"]
+
+[[rewrite]]
+matches = "simgE"
+item = ["similar", "or greater than or equal to"]
+
+[[rewrite]]
+matches = "simgtr"
+item = ["similar", "or greater than"]
+
+[[rewrite]]
+matches = "simlE"
+item = ["similar", "or less than or equal to"]
+
+[[rewrite]]
+matches = "simless"
+item = ["similar", "or less than"]
+
+[[rewrite]]
+matches = "simrdots"
+item = ["similar", "dots, rising"]
+
+[[rewrite]]
+matches = "kernelcontraction"
+item = ["similar", "dots, vertical"]
+
+[[rewrite]]
+matches = "dotsim"
+item = ["similar", "dotted"]
+
+[[rewrite]]
+matches = "simminussim"
+item = ["similar", "minus, similar"]
+
+[[rewrite]]
+matches = "simneqq"
+item = ["similar", "or not equal to"]
+
+[[rewrite]]
+matches = "backsim"
+item = ["similar", "reversed"]
+
+[[rewrite]]
+matches = ["backsimeq", "backcong"]
+item = ["similar", "or equal to, reversed"]
+
+[[rewrite]]
+matches = "backsimneqq"
+item = ["similar", "or not equal to, reversed"]
+
+[[rewrite]]
+matches = ["congdot", "dotcong"]
+item = ["similar", "or equal to, dotted"]
+
+# ... negated ...
+
+[[rewrite]]
+matches = "nsim"
+item = ["similar", "negated"]
+
+[[rewrite]]
+matches = [
+    "nsime",
+    "nsimeq",
+    "ncong",
+    "not similar"
+]
+item = ["similar", "or equal to, negated"]
+
+[[rewrite]]
+matches = "ncongdot"
+item = ["similar", "or equal to, dotted, negated"]
+
+[[rewrite]]
+matches = "nbacksim"
+item = ["similar", "reversed, negated"]
+
+[[rewrite]]
+matches = ["nbacksimeq", "nbackcong"]
+item = ["similar", "or equal to, reversed, negated"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-squares.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-squares.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-squares.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,355 @@
+##############################################
+# Categorize squares.                        #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ---------------------------- non-squares -----------------------------
+
+[[rewrite]]
+regex = '^(Black|White)EmptySquare$'
+lowercase_item = true
+item = ["chess", '\1 square']
+
+[[rewrite]]
+matches = [
+    "white square button",
+    "black square button"
+]
+
+[[rewrite]]
+regex = 'whitesquaretick(left|right)'
+item = ["square", 'tick \1']
+
+[[rewrite]]
+render_contains = '(\Square)'
+item = ["check box", "empty"]
+
+[[rewrite]]
+render_contains = "GOsquare"
+item = ["circled symbols", "square"]
+
+# ------------------------------ squares -------------------------------
+
+[[rewrite]]
+render_contains = [
+    "blackinwhitesquare",
+    "WhiteSquareContainingBlackSquare",
+    "WhiteVerySmallSquareContainingBlackSquare"
+]
+item = ["square", "filled, outlined"]
+
+[[rewrite]]
+render_contains = "WhiteSquareRoundCornersContainingBlackSquare"
+item = ["square", "filled, outlined, rounded corners"]
+
+[[rewrite]]
+render_contains = ["WhiteSquareRoundCorners", "squoval"]
+item = ["square", "rounded corners"]
+
+[[rewrite]]
+render_contains = "BlackSquareRoundCorners"
+item = ["square", "filled, rounded corners"]
+
+[[rewrite]]
+render_contains = [
+    '\usym{274F}',
+    '\usym{2751}',
+    '\usym{2752}',
+    '\usym{2750}',
+    '\SquareShadow',
+    '\SquareCastShadow'
+]
+item = ["square", "shadowed"]
+
+[[rewrite]]
+prefix = "FilledSquareShadow"
+item = ["square", "filled, shadowed"]
+
+[[rewrite]]
+matches = "errbarsquare"
+item = ["square", "error bars"]
+
+[[rewrite]]
+render_contains = "errbarblacksquare"
+item = ["square", "error bars, filled"]
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = [
+    '\twemoji{25ab}',
+    '\twemoji{25fd}',
+    '\twemoji{2b1c}',
+    '\twemoji{25fb}'
+]
+item = ["square", "white"]
+
+[[rewrite]]
+render_contains = '\twemoji{1f532}'
+item = ["square", "white with black outline"]
+
+[[rewrite]]
+regex = '^outline.*square$'
+item = ["square", "outlined"]
+
+[[rewrite]]
+matches = "outline square round corners"
+item = ["square", "outlined, rounded corners"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '(wht|white|lwhite).*square'
+item = "square"
+
+[[rewrite]]
+regex = 'black.*\s.*square'
+render_contains = '\twemoji{'
+item = ["square", "black"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = 'black.*square'
+item = ["square", "filled"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^filled.*square$'
+item = ["square", "filled"]
+
+# This rule must precede the following one.
+[[rewrite]]
+compare_lowercase = true
+regex = '''
+^\
+(?:big|large|med|small|lg|md|sm|vy)*\
+(?:blk|black)\
+(?:var)?\
+square\
+$\
+'''
+item = ["square", "filled"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '''
+^\
+(?:big|large|med|small|lg|md|sm|vy)*\
+(?:wht|white)?\
+(?:var)?\
+square\
+$\
+'''
+item = "square"
+
+[[rewrite]]
+matches = [
+    "squaddot",
+    "dotted square",
+    "dotted small square"
+]
+item = ["square", "dot"]
+
+[[rewrite]]
+matches = "dotted square round corners"
+item = ["square", "dot, rounded corners"]
+
+[[rewrite]]
+matches = "dottedsquare"
+item = ["square", "dotted"]
+
+[[rewrite]]
+matches = "squarewithdots"
+item = ["square", "dots surrounding"]
+
+[[rewrite]]
+matches = "filledsquarewithdots"
+item = ["square", "dots surrounding, filled"]
+
+[[rewrite]]
+matches = "enclosesquare"
+item = ["square", "enclosing to the left"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(blue|brown|green|orange|purple|red|yellow)\s+square$'
+item = ["square", '\1']
+lowercase_word = true
+
+[[rewrite]]
+matches = ["squadfill", "SquareSolid", "Squaresteel", "bausquare"]
+item = ["square", "filled"]
+
+[[rewrite]]
+matches = ["squaretopblack", "squadfillha"]
+item = ["square", "half filled, top"]
+
+[[rewrite]]
+matches = ["squarebotblack", "squadfillhb"]
+item = ["square", "half filled, bottom"]
+
+[[rewrite]]
+matches = ["squareleftblack", "squadfillhl"]
+item = ["square", "half filled, left"]
+
+[[rewrite]]
+matches = ["squarerightblack", "squadfillhr"]
+item = ["square", "half filled, right"]
+
+[[rewrite]]
+matches = "squarellblack"
+item = ["square", "half filled, lower left"]
+
+[[rewrite]]
+matches = "squareulblack"
+item = ["square", "half filled, upper left"]
+
+[[rewrite]]
+matches = "squarelrblack"
+item = ["square", "half filled, lower right"]
+
+[[rewrite]]
+matches = "squareurblack"
+item = ["square", "half filled, upper right"]
+
+[[rewrite]]
+matches = "squarellquad"
+item = ["square", "nested, lower left"]
+
+[[rewrite]]
+matches = "squareulquad"
+item = ["square", "nested, upper left"]
+
+[[rewrite]]
+matches = "squarelrquad"
+item = ["square", "nested, lower right"]
+
+[[rewrite]]
+matches = "squareurquad"
+item = ["square", "nested, upper right"]
+
+[[rewrite]]
+matches = [
+    "squadcross",
+    "crossed square",
+    "crossed small square"
+]
+item = ["square", "crossed"]
+
+[[rewrite]]
+matches = "crossed square round corners"
+item = ["square", "crossed, rounded corners"]
+
+[[rewrite]]
+matches = [
+    "squadlineh",
+    "horizontally divided square",
+    "horizontally divided small square"
+]
+item = ["square", "horizontally divided"]
+
+[[rewrite]]
+matches = [
+    "squadlinev",
+    "vertically divided square",
+    "vertically divided small square"
+]
+item = ["square", "vertically divided"]
+
+[[rewrite]]
+matches = "horizontally divided square round corners"
+item = ["square", "horizontally divided, rounded corners"]
+
+[[rewrite]]
+matches = "vertically divided square round corners"
+item = ["square", "vertically divided, rounded corners"]
+
+[[rewrite]]
+matches = [
+    "up slashed square",
+    "up slashed small square"
+]
+item = ["square", "slashed"]
+
+[[rewrite]]
+matches = "up slahsed square round corners"  # Note typo.
+item = ["square", "slashed, rounded corners"]
+
+[[rewrite]]
+matches = [
+    "down slashed square",
+    "down slashed small square"
+]
+item = ["square", "backslashed"]
+
+[[rewrite]]
+matches = "down slashed square round corners"
+item = ["square", "backslashed, rounded corners"]
+
+[[rewrite]]
+matches = [
+    "squadlinevh",
+    "quartered square",
+    "quartered small square"
+]
+item = ["square", "quartered"]
+
+[[rewrite]]
+matches = "quartered square round corners"
+item = ["square", "quartered, rounded corners"]
+
+[[rewrite]]
+matches = "squarehfill"
+item = ["square", "horizontally striped"]
+
+[[rewrite]]
+matches = "squarevfill"
+item = ["square", "vertically striped"]
+
+[[rewrite]]
+matches = "squarehvfill"
+item = ["square", "grid"]
+
+[[rewrite]]
+matches = "squarecrossfill"
+item = ["square", "grid, diagonal"]
+
+[[rewrite]]
+regex = 'squaren[ew]s[we]fill'
+item = ["square", "diagonally striped"]
+
+# This rule must precede the following one.
+[[rewrite]]
+render_contains = '\tiThSmallOutline'
+item = ["square", "of squares"]
+
+[[rewrite]]
+render_contains = '\tiThSmall'
+item = ["square", "of filled squares"]
+
+[[rewrite]]
+matches = ["Box", "Squarepipe"]
+item = "square"
+
+[[rewrite]]
+compare_lowercase = true
+matches = ["squares", "squad"]
+item = "square"
+
+[[rewrite]]
+matches = "BS"
+item = ["square", "filled, containing white circle"]
+
+# ------------------------------- boxes --------------------------------
+
+[[rewrite]]
+matches = "boxonbox"
+item = ["square", "overlapping square"]
+
+[[rewrite]]
+compare_lowercase = true
+render_regex = '\$\\box(left|right)\$'
+item = ["square", "with arrow"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^boxdot(left|right)$'
+item = ["square", "dotted, with arrow"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-stars.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-stars.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-stars.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,221 @@
+##############################################
+# Categorize stars.                          #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# This rule should appear early in this section.
+[[rewrite]]
+contains = "ostar"
+item = ["circled symbols", "star"]
+
+# This rule should appear early in this section.
+[[rewrite]]
+matches = "star warrior"
+item = ["star warrior, Epi-Olmec"]
+
+# This rule should precede the FiveStar prefix rule and the black/white
+# star rule.
+[[rewrite]]
+matches = ["FiveStarOpenCircled", "circled white star"]
+item = ["circled symbols", "star"]
+
+# I find that unicode 2742 looks more like a sun than a star.  This rule
+# should appear early in this section.
+[[rewrite]]
+matches = "circled open center eight pointed star"
+item = ["circled symbols", "sun"]
+
+# This rule must precede the the generic "____ star" rules.
+[[rewrite]]
+render_contains = "EOstar"
+item = ["star", "Epi-Olmec"]
+
+# This rule must precede the the generic "____ star" rules.
+[[rewrite]]
+matches = "Jewish star"
+item = ["star", "of David"]
+
+# This rule should appear early in this section.
+[[rewrite]]
+matches = [
+    "stars",
+    "star",
+    "black star",
+    "white star",
+    "thinstar"
+]
+word = "star"
+
+[[rewrite]]
+render_contains = '(\faStarHalf)'
+item = ["star", "half"]
+
+[[rewrite]]
+render_contains = ['(\faStarHalf*)', '(\starletfillh']
+item = ["star", "half filled"]
+
+[[rewrite]]
+matches = "manstar"
+item = ["star", "knotted"]
+
+# This rule should precede the generic "____ pointed star" rule.
+[[rewrite]]
+render_contains = '(\FiveStarCenterOpen)'
+item = ["star", "open center"]
+
+# This rule should precede the generic "____ pointed star" rule.
+[[rewrite]]
+render_contains = [
+    '(\FiveStarOpenDotted)',
+    '(\usym{272C})'
+]
+item = ["star", "filled center"]
+
+# This rule should precede the generic "____ pointed star" rule.
+[[rewrite]]
+render_contains = [
+    '(\FiveStarOutlineHeavy)',
+    '(\FiveStarOutline)',
+    '(\usym{272E})'
+]
+item = ["star", "outlined"]
+
+# This rule should precede the generic "____ pointed star" rule.
+[[rewrite]]
+render_contains = [
+    "dotted six-pointed star",
+    "six pointed star with middle dot"
+]
+item = ["star", "of David, dotted"]
+
+# This rule should precede the generic "____ pointed star" rule.
+[[rewrite]]
+matches = "FiveStarConvex"
+item = ["star", "pinwheel"]
+
+[[rewrite]]
+matches = "starletdot"
+item = ["star", "dotted"]
+
+[[rewrite]]
+matches = "starletcross"
+item = ["star", "crossed out"]
+
+[[rewrite]]
+matches = "starletlinev"
+item = ["star", "vertically slashed"]
+
+[[rewrite]]
+matches = "starletlineh"
+item = ["star", "horizontally slashed"]
+
+[[rewrite]]
+matches = "starletlinevh"
+item = ["star", "plus"]
+
+# This rule must follow the preceding starlet rules.
+[[rewrite]]
+prefix = "starlet"
+item = "star"
+
+[[rewrite]]
+regex = '\b(\S+)[-\s]pointed.*star'
+item = ["star", '\1 pointed']
+
+[[rewrite]]
+render_contains = ["ABXbigvarstar", "ABXvarstar", "STIXvarstar"]
+item = ["star", "six pointed"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '''
+^(?:filled)?\
+(?:big|large|med|small|lg|md|sm|vy)*\
+(?:blk|wht|black|white)?\
+(?:var)?\
+star$\
+'''
+word = "star"
+
+[[rewrite]]
+contains = [
+    "davidsstar",
+    "DavidStar",
+    "star of David",
+    "starofdavid"
+]
+item = ["star", "of David"]
+
+[[rewrite]]
+matches = "star of life"
+item = ["star", "of life"]
+
+[[rewrite]]
+matches = "star and crescent"
+item = ["star", "and crescent"]
+
+[[rewrite]]
+regex = '^(.*?)\s*(?:black|white)(.*)star$'
+item = ["star", '\1 \2']
+
+[[rewrite]]
+prefix = "FourStar"
+item = ["star", "four pointed"]
+
+[[rewrite]]
+compare_lowercase = true
+contains = "pentagram"
+item = ["star", "pentagram"]
+
+# This rule should precede the FiveStar prefix rule.
+[[rewrite]]
+matches = [
+    "FiveStarLines",
+    "assumption",
+    "bigassumption",
+    "Bigassumption",
+    "biggassumption"
+]
+item = ["star", "pentagram"]
+
+# This rule should precede the FiveStar prefix rule.
+[[rewrite]]
+matches = "FiveStarShadow"
+item = ["star", "shadowed"]
+
+[[rewrite]]
+prefix = "FiveStar"
+word = "star"
+
+[[rewrite]]
+prefix = "SixStar"
+item = ["star", "six pointed"]
+
+[[rewrite]]
+prefix = "EightStar"
+item = ["star", "eight pointed"]
+
+[[rewrite]]
+prefix = "SixteenStar"
+item = ["star", "sixteen pointed"]
+
+[[rewrite]]
+prefix = "TwelweStar"
+item = ["star", "twelve pointed"]
+
+[[rewrite]]
+prefix = "JackStar"
+item = ["star", "jack"]
+
+[[rewrite]]
+matches = ["large circled star", "small circled star"]
+item = ["circled symbols", "star"]
+
+[[rewrite]]
+matches = ["hexstar", "varhexstar"]
+item = ["star", "six pointed"]
+
+# This rule should appear late in this section.
+[[rewrite]]
+regex = '^(.+?)\s+star$'
+item = ["star", '\1']

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-triangles.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-triangles.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-triangles.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,228 @@
+##############################################
+# Categorize triangles                       #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ... false positives ...
+
+[[rewrite]]
+render_regex = '\\GO(triangle|square)'
+item = ["Go stones", '\1']
+
+# ... regular ...
+
+# This rule should precede other triangle up/down rules.
+[[rewrite]]
+regex = '^Triangle(Down|Up)$'
+not_render_contains = '\ifsTriangle'
+item = ["triangle", "filled"]
+
+# This rule should precede the following one.
+[[rewrite]]
+render_contains = '(\STIXtriangles)'
+item = ["triangle", "s"]
+
+[[rewrite]]
+matches = [
+    "triangle",
+    "triangles",
+    "lhd",
+    "rhd",
+    "VarSummit",
+    "set symmetric difference"
+]
+item = "triangle"
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(var)?(big)?triangle(up|down|left|right|pa|pb|pl|pr)?$'
+item = "triangle"
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^(large|med|small)triangle'
+item = "triangle"
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^white\s*(up|down|left|right)\s*triangle[a-z]?$'
+item = "triangle"
+
+[[rewrite]]
+regex = '^crossed.*triangle$'
+item = ["triangle", "crossed"]
+
+[[rewrite]]
+regex = '^(up|down) slashed.*triangle$'
+item = ["triangle", "slashed"]
+
+# Despite the name, these triangles are drawn in black and white.
+[[rewrite]]
+regex = '^(up|down)-pointing.*red triangle$'
+item = ["triangle", "striped"]
+
+# These triangles, however, are drawn in red.
+[[rewrite]]
+prefix = "red triangle pointed"
+item = ["triangle", "red"]
+
+[[rewrite]]
+matches = [
+    "bautriangle",
+    "LHD",
+    "RHD",
+    "Summit",
+    "DLE",
+    "DCa",
+    "RS"
+]
+item = ["triangle", "filled"]
+
+[[rewrite]]
+prefix = "mantriangle"
+item = ["triangle", "filled"]
+
+[[rewrite]]
+regex = '^trianglep[ablr]fill$'
+item = ["triangle", "filled"]
+
+[[rewrite]]
+contains = "blacktriangle"
+not_regex = '[ul][lr]blacktriangle$'
+item = ["triangle", "filled"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^black\s*(up|down|left|right)\s*triangle[a-z]?$'
+item = ["triangle", "filled"]
+
+[[rewrite]]
+compare_lowercase = true
+regex = '^filled.*triangle'
+item = ["triangle", "filled"]
+
+[[rewrite]]
+regex = '^(down)?triangle(left|right)black$'
+item = ["triangle", "half filled"]
+
+[[rewrite]]
+regex = '^trianglep[ablr]fillh[lr]$'
+item = ["triangle", "half filled"]
+
+[[rewrite]]
+regex = '^trianglep[ablr]fillha$'
+item = ["triangle", "one third filled"]
+
+[[rewrite]]
+regex = '^trianglep[ablr]fillhb$'
+item = ["triangle", "two thirds filled"]
+
+[[rewrite]]
+matches = "enclosetriangle"
+item = ["triangle", "enclosing"]
+
+[[rewrite]]
+regex = '^(horizontally divided|vertically divided|quartered).*triangle$'
+item = ["triangle", '\1']
+
+[[rewrite]]
+regex = '^trianglep[ablr]lineh$'
+item = ["triangle", "horizontally divided"]
+
+[[rewrite]]
+regex = '^trianglep[ablr]linev$'
+item = ["triangle", "vertically divided"]
+
+[[rewrite]]
+regex = '^trianglep[ablr]linevh$'
+item = ["triangle", "quartered"]
+
+[[rewrite]]
+regex = '^outline.*triangle'
+item = ["triangle", "outlined"]
+
+[[rewrite]]
+regex = '^(var)?[ul][lr]t?triangle$'
+item = ["triangle", "right"]
+
+[[rewrite]]
+regex = '[ul][lr]blacktriangle$'
+item = ["triangle", "right, filled"]
+
+[[rewrite]]
+matches = "lrtriangleeq"
+item = ["triangle", "right, equals"]
+
+[[rewrite]]
+matches = ["vbrtri", "ltrivb"]
+item = ["triangle", "vertical bar"]
+
+[[rewrite]]
+regex = '^triangle(c|pa|pb|pl|pr)dot$'
+item = ["triangle", "dotted"]
+
+[[rewrite]]
+regex = '^dotted.*triangle$'
+item = ["triangle", "dotted"]
+
+[[rewrite]]
+matches = "triangleodot"
+item = ["triangle", "dot over"]
+
+[[rewrite]]
+matches = "Tribar"
+item = ["triangle", "impossible"]
+
+[[rewrite]]
+regex = '^triangle(left|right)eq'
+item = ["triangle", "equals"]
+
+[[rewrite]]
+matches = "triangle with rounded corners"
+item = ["triangle", "rounded corners"]
+
+[[rewrite]]
+regex = '^triangle(serifs|plus|minus)$'
+item = ["triangle", '\1']
+
+[[rewrite]]
+matches = "triangletimes"
+item = ["triangle", "multiplication"]
+
+[[rewrite]]
+matches = [
+    "triangleubar",
+    "unlhd",
+    "unrhd"
+]
+item = ["triangle", "bar under"]
+
+[[rewrite]]
+regex = '^trianglep[ablr]cross'
+item = ["triangle", "crossed"]
+
+[[rewrite]]
+regex = '^white.*triangle containing black.*triangle$'
+item = ["triangle", "containing filled triangle"]
+
+[[rewrite]]
+matches = "whiteinwhitetriangle"
+item = ["triangle", "containing triangle"]
+
+[[rewrite]]
+matches = "rtriltri"
+item = ["triangle", "two"]
+
+[[rewrite]]
+matches = ["dsub", "rsub", "conictaper"]
+item = ["triangle", "bar through"]
+
+# ... negated ...
+
+[[rewrite]]
+regex = '^ntriangle(left|right)eq'
+item = ["triangle", "equals, negated"]
+
+[[rewrite]]
+regex = '^n(var)?triangle(left|right)$'
+item = ["triangle", "negated"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-turnstiles.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-turnstiles.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-turnstiles.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,685 @@
+##############################################
+# Categorize turnstiles.                     #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# Regular turnstiles
+# ------------------
+
+# ... single bar, single dash ...
+
+[[rewrite]]
+matches = [
+    "assert",
+    "assertion",
+    "vdash",
+    "rightassert",
+    "rightvdash",
+    "shortrighttack"
+]
+item = ["turnstile", "right"]
+
+[[rewrite]]
+matches = [
+    "dashv",
+    "leftassert",
+    "leftvdash",
+    "shortlefttack"
+]
+item = ["turnstile", "left"]
+
+[[rewrite]]
+matches = [
+    "upvdash",
+    "upassert",
+    "shortuptack",
+    "perp",
+    "bot",
+    "bigbot",
+    "lattice bottom"
+]
+not_render_contains = ["Perp", '\CMLLBot']
+item = ["turnstile", "up"]
+
+[[rewrite]]
+matches = [
+    "downvdash",
+    "downassert",
+    "shortdowntack",
+    "top",
+    "bigtop",
+    "lattice top"
+]
+item = ["turnstile", "down"]
+
+[[rewrite]]
+matches = "nevdash"
+item = ["turnstile", "northeast"]
+
+[[rewrite]]
+matches = "nwvdash"
+item = ["turnstile", "northwest"]
+
+[[rewrite]]
+matches = "sevdash"
+item = ["turnstile", "southeast"]
+
+[[rewrite]]
+matches = "swvdash"
+item = ["turnstile", "southwest"]
+
+[[rewrite]]
+matches = "vBarv"
+item = ["turnstile", "up over down"]
+
+[[rewrite]]
+matches = "perps"
+item = ["turnstile", "up, with s"]
+
+# This rule should precede the generic "Perp" rule below.
+[[rewrite]]
+render_contains = [
+    '\SimPerp',
+    '\simperp',
+    '\simbot'
+]
+item = ["turnstile", "wavy bar, up"]
+
+# ... single bar, long single dash ...
+
+[[rewrite]]
+matches = [
+    "vlongdash",
+    "longleftfootline"
+]
+item = ["turnstile", "right, long"]
+
+[[rewrite]]
+matches = [
+    "longdashv",
+    "longrightfootline"
+]
+item = ["turnstile", "left, long"]
+
+[[rewrite]]
+matches = "wavy turnstile"
+item = ["turnstile", "wavy dash, right"]
+
+# ... short single bar, single dash ...
+
+[[rewrite]]
+matches = "leftfootline"
+item = ["turnstile", "short bar, right"]
+
+[[rewrite]]
+matches = "rightfootline"
+item = ["turnstile", "short bar, left"]
+
+[[rewrite]]
+matches = "upfootline"
+item = ["turnstile", "short bar, down"]
+
+[[rewrite]]
+matches = "topcir"
+item = ["turnstile", "short bar, down, ring below"]
+
+[[rewrite]]
+matches = "downfootline"
+item = ["turnstile", "short bar, up"]
+
+[[rewrite]]
+matches = "cirbot"
+item = ["turnstile", "short bar, up, ring above"]
+
+[[rewrite]]
+matches = "nefootline"
+item = ["turnstile", "short bar, southwest"]
+
+[[rewrite]]
+matches = "nwfootline"
+item = ["turnstile", "short bar, southeast"]
+
+[[rewrite]]
+matches = "sefootline"
+item = ["turnstile", "short bar, northwest"]
+
+[[rewrite]]
+matches = "swfootline"
+item = ["turnstile", "short bar, northeast"]
+
+# ... single bar, double dash ...
+
+[[rewrite]]
+matches = [
+    "model",
+    "models",
+    "rightmodels",
+    "rightvDash",
+    "vDash"
+]
+item = ["turnstile", "double dash, right"]
+
+[[rewrite]]
+matches = [
+    "leftmodels",
+    "Dashv",
+    "leftvDash",
+    "ismodeledby"
+]
+item = ["turnstile", "double dash, left"]
+
+[[rewrite]]
+render_contains = '(\BSKdashV)'
+item = ["turnstile", "double dash, left"]
+
+[[rewrite]]
+matches = [
+    "downmodels",
+    "downvDash",
+    "barV"
+]
+item = ["turnstile", "double dash, down"]
+
+[[rewrite]]
+matches = [
+    "upmodels",
+    "upvDash",
+    "Vbar",
+    "independent"
+]
+item = ["turnstile", "double dash, up"]
+
+[[rewrite]]
+render_contains = ["Perp", '\CMLLBot']
+item = ["turnstile", "double dash, up"]
+
+[[rewrite]]
+matches = "nemodels"
+item = ["turnstile", "double dash, northeast"]
+
+[[rewrite]]
+matches = "nwmodels"
+item = ["turnstile", "double dash, northwest"]
+
+[[rewrite]]
+matches = "semodels"
+item = ["turnstile", "double dash, southeast"]
+
+[[rewrite]]
+matches = "swmodels"
+item = ["turnstile", "double dash, southwest"]
+
+[[rewrite]]
+matches = "double wavy turnstile"
+item = ["turnstile", "wavy double dash, right"]
+
+# ... double bar, single dash ...
+
+[[rewrite]]
+matches = [
+    "Assert",
+    "turnstile",
+    "rightVdash",
+    "Vdash",
+    "varVdash",
+    "rightAssert"
+]
+item = ["turnstile", "double bar, right"]
+
+[[rewrite]]
+matches = [
+    "leftVdash",
+    "dashV"
+]
+render_not_contains = '(\BSKdashV)'
+item = ["turnstile", "double bar, left"]
+
+[[rewrite]]
+render_contains = '(\BSKdashVv)'
+item = ["turnstile", "double bar, left"]
+
+[[rewrite]]
+matches = "leftAssert"
+item = ["turnstile", "double bar, left"]
+
+[[rewrite]]
+matches = [
+    "upVdash",
+    "vBar",
+    "upAssert"
+]
+item = ["turnstile", "double bar, up"]
+
+[[rewrite]]
+matches = [
+    "downVdash",
+    "Barv",
+    "downAssert",
+    "postalmark"
+]
+item = ["turnstile", "double bar, down"]
+
+[[rewrite]]
+matches = "neVdash"
+item = ["turnstile", "double bar, northeast"]
+
+[[rewrite]]
+matches = "nwVdash"
+item = ["turnstile", "double bar, northwest"]
+
+[[rewrite]]
+matches = "seVdash"
+item = ["turnstile", "double bar, southeast"]
+
+[[rewrite]]
+matches = "swVdash"
+item = ["turnstile", "double bar, southwest"]
+
+[[rewrite]]
+matches = "dashVdash"
+item = ["turnstile", "double bar, left and right"]
+
+[[rewrite]]
+matches = "wavy double bar turnstile"
+item = ["turnstile", "double bar, wavy dash, right"]
+
+# ... double bar, double dash ...
+
+[[rewrite]]
+matches = [
+    "rightModels",
+    "VDash",
+    "rightVDash"
+]
+item = ["turnstile", "double bar, double dash, right"]
+
+[[rewrite]]
+matches = [
+    "leftModels",
+    "leftVDash",
+    "DashV"
+]
+item = ["turnstile", "double bar, double dash, left"]
+
+[[rewrite]]
+matches = [
+    "downModels",
+    "downVDash"
+]
+item = ["turnstile", "double bar, double dash, down"]
+
+[[rewrite]]
+matches = [
+     "upModels",
+     "upVDash"
+]
+item = ["turnstile", "double bar, double dash, up"]
+
+[[rewrite]]
+matches = "neModels"
+item = ["turnstile", "double bar, double dash, northeast"]
+
+[[rewrite]]
+matches = "nwModels"
+item = ["turnstile", "double bar, double dash, northwest"]
+
+[[rewrite]]
+matches = "seModels"
+item = ["turnstile", "double bar, double dash, southeast"]
+
+[[rewrite]]
+matches = "swModels"
+item = ["turnstile", "double bar, double dash, southwest"]
+
+[[rewrite]]
+matches = "DashVDash"
+item = ["turnstile", "double bar, double dash, left and right"]
+
+[[rewrite]]
+matches = "double wavy double bar turnstile"
+item = ["turnstile", "double bar, wavy double dash, right"]
+
+# ... triple bar, single dash ...
+
+[[rewrite]]
+matches = "Vvdash"
+item = ["turnstile", "triple bar, right"]
+
+[[rewrite]]
+matches = "dashVv"
+item = ["turnstile", "triple bar, left"]
+
+# ... single bar, triple dash
+
+[[rewrite]]
+matches = [
+    "vDdash",
+    "triple turnstile"
+]
+item = ["turnstile", "triple dash, right"]
+
+[[rewrite]]
+matches = "Ddashv"
+item = ["turnstile", "triple dash, left"]
+
+# ... triple bar, double dash ...
+
+[[rewrite]]
+matches = "VvDash"
+item = ["turnstile", "triple bar, double dash, right"]
+
+# ... double bar, triple dash ...
+
+[[rewrite]]
+matches = "double bar triple turnstile"
+item = ["turnstile", "double bar, triple dash, right"]
+
+
+# Negated turnstiles
+# ------------------
+
+# ... single bar, single dash ...
+
+[[rewrite]]
+matches = [
+    "assertion denied",
+    "nassert",
+    "nrightassert",
+    "nvdash",
+    "nrightassert",
+    "nrightvdash",
+    "nshortrighttack"
+]
+item = ["turnstile", "right, negated"]
+
+[[rewrite]]
+matches = [
+    "ndashv",
+    "nleftassert",
+    "nleftvdash",
+    "nshortlefttack"
+]
+item = ["turnstile", "left, negated"]
+
+[[rewrite]]
+matches = [
+    "nupassert",
+    "nupvdash",
+    "nshortuptack",
+    "notperp",
+    "nperp",
+    "notbot"
+]
+item = ["turnstile", "up, negated"]
+
+[[rewrite]]
+matches = [
+    "ndownassert",
+    "ndownvdash",
+    "nshortdowntack",
+    "nottop"
+]
+item = ["turnstile", "down, negated"]
+
+[[rewrite]]
+matches = "nnevdash"
+item = ["turnstile", "northeast, negated"]
+
+[[rewrite]]
+matches = "nnwvdash"
+item = ["turnstile", "northwest, negated"]
+
+[[rewrite]]
+matches = "nsevdash"
+item = ["turnstile", "southeast, negated"]
+
+[[rewrite]]
+matches = "nswvdash"
+item = ["turnstile", "southwest, negated"]
+
+[[rewrite]]
+matches = "wavy turnstile denied"
+item = ["turnstile", "wavy dash, right, negated"]
+
+# ... single bar, long single dash ...
+
+[[rewrite]]
+matches = [
+    "nvlongdash",
+    "nlongleftfootline"
+]
+item = ["turnstile", "right, long, negated"]
+
+[[rewrite]]
+matches = [
+    "nlongdashv",
+    "nlongrightfootline"
+]
+item = ["turnstile", "left, long, negated"]
+
+# ... short single bar, single dash ...
+
+[[rewrite]]
+matches = "nleftfootline"
+item = ["turnstile", "short bar, right, negated"]
+
+[[rewrite]]
+matches = "nrightfootline"
+item = ["turnstile", "short bar, left, negated"]
+
+[[rewrite]]
+matches = "nupfootline"
+item = ["turnstile", "short bar, down, negated"]
+
+[[rewrite]]
+matches = "ndownfootline"
+item = ["turnstile", "short bar, up, negated"]
+
+[[rewrite]]
+matches = "nnefootline"
+item = ["turnstile", "short bar, southwest, negated"]
+
+[[rewrite]]
+matches = "nnwfootline"
+item = ["turnstile", "short bar, southeast, negated"]
+
+[[rewrite]]
+matches = "nsefootline"
+item = ["turnstile", "short bar, northwest, negated"]
+
+[[rewrite]]
+matches = "nswfootline"
+item = ["turnstile", "short bar, northeast, negated"]
+
+# ... single bar, double dash ...
+
+[[rewrite]]
+matches = [
+    "nmodels",
+    "nrightmodels",
+    "nrightvDash",
+    "nvDash",
+    "model denied"
+]
+item = ["turnstile", "double dash, right, negated"]
+
+[[rewrite]]
+matches = [
+    "nleftmodels",
+    "nDashv",
+    "nleftvDash"
+]
+item = ["turnstile", "double dash, left, negated"]
+
+[[rewrite]]
+matches = [
+    "ndownmodels",
+    "ndownvDash",
+    "nbarV"
+]
+item = ["turnstile", "double dash, down, negated"]
+
+[[rewrite]]
+matches = [
+    "nupmodels",
+    "nupvDash",
+    "nVbar"
+]
+item = ["turnstile", "double dash, up, negated"]
+
+[[rewrite]]
+matches = "nnemodels"
+item = ["turnstile", "double dash, northeast, negated"]
+
+[[rewrite]]
+matches = "nnwmodels"
+item = ["turnstile", "double dash, northwest, negated"]
+
+[[rewrite]]
+matches = "nsemodels"
+item = ["turnstile", "double dash, southeast, negated"]
+
+[[rewrite]]
+matches = "nswmodels"
+item = ["turnstile", "double dash, southwest, negated"]
+
+[[rewrite]]
+matches = "double wavy turnstile denied"
+item = ["turnstile", "wavy double dash, right, negated"]
+
+# ... double bar, single dash ...
+
+[[rewrite]]
+matches = [
+    "nAssert",
+    "nrightVdash",
+    "nVdash",
+    "nrightAssert",
+    "turnstile denied"
+]
+item = ["turnstile", "double bar, right, negated"]
+
+[[rewrite]]
+matches = [
+    "nleftAssert",
+    "ndashV",
+    "nleftVdash"
+]
+item = ["turnstile", "double bar, left, negated"]
+
+[[rewrite]]
+matches = [
+    "nupVdash",
+    "nvBar",
+    "nupAssert"
+]
+item = ["turnstile", "double bar, up, negated"]
+
+[[rewrite]]
+matches = [
+    "ndownVdash",
+    "nBarv",
+    "ndownAssert"
+]
+item = ["turnstile", "double bar, down, negated"]
+
+[[rewrite]]
+matches = "nneVdash"
+item = ["turnstile", "double bar, northeast, negated"]
+
+[[rewrite]]
+matches = "nnwVdash"
+item = ["turnstile", "double bar, northwest, negated"]
+
+[[rewrite]]
+matches = "nseVdash"
+item = ["turnstile", "double bar, southeast, negated"]
+
+[[rewrite]]
+matches = "nswVdash"
+item = ["turnstile", "double bar, southwest, negated"]
+
+[[rewrite]]
+matches = "wavy double bar turnstile denied"
+item = ["turnstile", "double bar, wavy dash, right, negated"]
+
+# ... double bar, double dash ...
+
+[[rewrite]]
+matches = [
+    "nrightModels",
+    "nVDash",
+    "nrightVDash"
+]
+item = ["turnstile", "double bar, double dash, right, negated"]
+
+[[rewrite]]
+matches = [
+    "nleftModels",
+    "nleftVDash",
+    "nDashV"
+]
+item = ["turnstile", "double bar, double dash, left, negated"]
+
+[[rewrite]]
+matches = [
+    "ndownModels",
+    "ndownVDash"
+]
+item = ["turnstile", "double bar, double dash, down, negated"]
+
+[[rewrite]]
+matches = [
+     "nupModels",
+     "nupVDash"
+]
+item = ["turnstile", "double bar, double dash, up, negated"]
+
+[[rewrite]]
+matches = "nneModels"
+item = ["turnstile", "double bar, double dash, northeast, negated"]
+
+[[rewrite]]
+matches = "nnwModels"
+item = ["turnstile", "double bar, double dash, northwest, negated"]
+
+[[rewrite]]
+matches = "nseModels"
+item = ["turnstile", "double bar, double dash, southeast, negated"]
+
+[[rewrite]]
+matches = "nswModels"
+item = ["turnstile", "double bar, double dash, southwest, negated"]
+
+[[rewrite]]
+matches = "double wavy double bar turnstile denied"
+item = ["turnstile", "double bar, wavy double dash, right, negated"]
+
+# ... triple bar, single dash ...
+
+[[rewrite]]
+matches = ["nVvdash", "nVvash"]
+item = ["turnstile", "triple bar, right, negated"]
+
+[[rewrite]]
+matches = "ndashVv"
+item = ["turnstile", "triple bar, left, negated"]
+
+# ... single bar, triple dash
+
+[[rewrite]]
+matches = [
+    "nvDdash",
+    "triple turnstile denied"
+]
+item = ["turnstile", "triple dash, right, negated"]
+
+[[rewrite]]
+matches = "nDdashv"
+item = ["turnstile", "triple dash, left, negated"]
+
+# ... double bar, triple dash ...
+
+[[rewrite]]
+matches = "double bar triple turnstile denied"
+item = ["turnstile", "double bar, triple dash, right, negated"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-wedges-vees.toml
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-wedges-vees.toml	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/prune-idx-wedges-vees.toml	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,191 @@
+##############################################
+# Categorize wedges and vees.                #
+# Author: Scott Pakin <scott+clsl at pakin.org> #
+##############################################
+
+# ------------------------------- wedges -------------------------------
+
+[[rewrite]]
+matches = [
+    "wedge",
+    "bigwedge",
+    "quantified conjunction",
+    "bitwise and operator/logical conjunction"
+]
+item = "wedge"
+
+[[rewrite]]
+matches = [
+    "barwedge",
+    "varbarwedge",
+    "bitwise nand operator"
+]
+item = ["wedge", "bar over"]
+
+[[rewrite]]
+matches = "midbarwedge"
+item = ["wedge", "bar through"]
+
+[[rewrite]]
+matches = "wedgemidvert"
+item = ["wedge", "vertical line through"]
+
+[[rewrite]]
+matches = "wedgebar"
+item = ["wedge", "bar under"]
+
+[[rewrite]]
+matches = ["doublebarwedge", "vardoublebarwedge"]
+item = ["wedge", "double bar over"]
+
+[[rewrite]]
+matches = "wedgedoublebar"
+item = ["wedge", "double bar under"]
+
+[[rewrite]]
+matches = ["circwedge", "bigcircwedge"]
+item = ["wedge", "circle"]
+
+[[rewrite]]
+matches = ["curlywedge", "bigcurlywedge", "varcurlywedge"]
+item = ["wedge", "curly"]
+
+[[rewrite]]
+matches = ["curlywedgedot", "bigcurlywedgedot"]
+item = ["wedge", "curly, dot"]
+
+[[rewrite]]
+matches = ["doublecurlywedge", "bigdoublecurlywedge"]
+item = ["wedge", "curly, double"]
+
+[[rewrite]]
+matches = "closedcurlywedge"
+item = ["wedge", "curly, closed"]
+
+[[rewrite]]
+matches = [
+    "doublewedge",
+    "bigdoublewedge",
+    "wedgeonwedge",
+    "conjquant",
+    "merge"
+]
+item = ["wedge", "double"]
+
+[[rewrite]]
+matches = "Wedge"
+item = ["wedge", "nested"]
+
+[[rewrite]]
+matches = ["dwedge", "bigdwedge", "wedgedot", "bigwedgedot"]
+item = ["wedge", "dot within"]
+
+[[rewrite]]
+matches = ["wedgeodot", "dotted conjunction"]
+item = ["wedge", "dot above"]
+
+[[rewrite]]
+matches = "bigslopedwedge"
+item = ["wedge", "sloped"]
+
+[[rewrite]]
+matches = "slanted bar and"
+item = ["wedge", "slanted bar"]
+
+[[rewrite]]
+matches = "slanted bar nand"
+item = ["wedge", "slanted bar, bar over"]
+
+# -------------------------------- vees --------------------------------
+
+[[rewrite]]
+matches = [
+    "vee",
+    "bigvee",
+    "quantified disjuntion",      # Note spelling error.
+    "bitwise or operator/logical disjunction"
+]
+item = "vee"
+
+[[rewrite]]
+matches = [
+    "barvee",
+    "bitwise nor operator"
+]
+item = ["vee", "bar over"]
+
+[[rewrite]]
+matches = "midbarvee"
+item = ["vee", "bar through"]
+
+[[rewrite]]
+matches = "veemidvert"
+item = ["vee", "vertical line through"]
+
+[[rewrite]]
+matches = [
+    "veebar",
+    "varveebar",
+    "bitwise xor operator"
+]
+item = ["vee", "bar under"]
+
+[[rewrite]]
+matches = "doublebarvee"
+item = ["vee", "double bar over"]
+
+[[rewrite]]
+matches = "veedoublebar"
+item = ["vee", "double bar under"]
+
+[[rewrite]]
+matches = ["curlyvee", "bigcurlyvee", "varcurlyvee"]
+item = ["vee", "curly"]
+
+[[rewrite]]
+matches = ["curlyveedot", "bigcurlyveedot"]
+item = ["vee", "curly, dot"]
+
+[[rewrite]]
+matches = ["doublecurlyvee", "bigdoublecurlyvee"]
+item = ["vee", "curly, double"]
+
+[[rewrite]]
+matches = "closedcurlyvee"
+item = ["vee", "curly, closed"]
+
+[[rewrite]]
+matches = ["doublevee", "bigdoublevee", "veeonvee", "disjquant"]
+item = ["vee", "double"]
+
+[[rewrite]]
+matches = "Vee"
+item = ["vee", "nested"]
+
+[[rewrite]]
+matches = ["veedot", "bigveedot"]
+item = ["vee", "dot within"]
+
+[[rewrite]]
+matches = ["veeodot", "dotted disjunction"]
+item = ["vee", "dot above"]
+
+[[rewrite]]
+matches = "bigslopedvee"
+item = ["vee", "sloped"]
+
+[[rewrite]]
+matches = "slanted bar or"
+item = ["vee", "slanted bar"]
+
+[[rewrite]]
+matches = "slanted bar nor"
+item = ["vee", "slanted bar, bar over"]
+
+[[rewrite]]
+matches = "slanted bar xor"
+item = ["vee", "slanted bar, bar under"]
+
+[[rewrite]]
+matches = "veeonwedge"
+item = ["vee", "wedge"]

Added: trunk/Master/texmf-dist/doc/latex/comprehensive/source/renamed-overarrows.sty
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/renamed-overarrows.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/renamed-overarrows.sty	2024-01-03 21:18:06 UTC (rev 69282)
@@ -0,0 +1,154 @@
+% =====================================
+% RENAMED-OVERARROWS.STY
+% By Scott Pakin <scott+clsl at pakin.org>
+% =====================================
+%
+% Redefine all overarrows commands with an OVARS prefix.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{renamed-overarrows}[2023/04/05 v1.0 renamed overarrows]
+
+\RequirePackage[noesvect]{overarrows}
+
+\DeclareOverArrowCommand{OVARSoverrightarrow}{%
+  amsmath, middle config=relbar,
+  end=\ovar at rightarrow,
+  right arrow,
+}
+
+\DeclareOverArrowCommand{OVARSunderrightarrow}{%
+  amsmath, middle config=relbar,
+  end=\ovar at rightarrow,
+  right arrow,
+  arrow under,
+}
+
+\DeclareOverArrowCommand{OVARSoverleftarrow}{%
+  amsmath, middle config=relbar,
+  start=\ovar at leftarrow,
+  end=\relbar,
+  left arrow,
+}
+
+\DeclareOverArrowCommand{OVARSunderleftarrow}{%
+  amsmath, middle config=relbar,
+  start=\ovar at leftarrow,
+  end=\relbar,
+  left arrow,
+  arrow under,
+}
+
+\DeclareOverArrowCommand{OVARSoverleftrightarrow}{%
+  amsmath, middle config=relbar,
+  start=\ovar at leftarrow,
+  end=\ovar at rightarrow,
+  center arrow,
+}
+
+\DeclareOverArrowCommand{OVARSunderleftrightarrow}{%
+  amsmath, middle config=relbar,
+  start=\ovar at leftarrow,
+  end=\ovar at rightarrow,
+  center arrow,
+  arrow under,
+}
+
+\DeclareOverArrowCommand{OVARSoverrightharpoonup}{%
+  amsmath, middle config=relbar,
+  end=\rightharpoonup,
+  right arrow,
+}
+
+\DeclareOverArrowCommand{OVARSunderrightharpoonup}{%
+  amsmath, middle config=relbar,
+  end=\rightharpoonup,
+  right arrow,
+  arrow under,
+}
+
+\DeclareOverArrowCommand{OVARSoverrightharpoondown}{%
+  amsmath, middle config=relbar,
+  end=\rightharpoondown,
+  right arrow,
+}
+
+\DeclareOverArrowCommand{OVARSunderrightharpoondown}{%
+  amsmath, middle config=relbar,
+  end=\rightharpoondown,
+  right arrow,
+  arrow under,
+}
+
+\DeclareOverArrowCommand{OVARSoverleftharpoonup}{%
+  amsmath, middle config=relbar,
+  start=\leftharpoonup,
+  end=\relbar,
+  left arrow,
+}
+
+\DeclareOverArrowCommand{OVARSunderleftharpoonup}{%
+  amsmath, middle config=relbar,
+  start=\leftharpoonup,
+  end=\relbar,
+  left arrow,
+  arrow under,
+}
+
+\DeclareOverArrowCommand{OVARSoverleftharpoondown}{%
+  amsmath, middle config=relbar,
+  start=\leftharpoondown,
+  end=\relbar,
+  left arrow,
+}
+
+\DeclareOverArrowCommand{OVARSunderleftharpoondown}{%
+  amsmath, middle config=relbar,
+  start=\leftharpoondown,
+  end=\relbar,
+  left arrow,
+  arrow under,
+}
+
+\DeclareOverArrowCommand{OVARSoverbar}{%
+  amsmath, middle config=relbar,
+  start={\std at minus}, end={\std at minus},% \relbar is defined with \mathsm at sh
+  shift leftright=0,
+  space after arrow=-0.3ex,
+}
+
+\DeclareOverArrowCommand{OVARSunderbar}{%
+  amsmath, middle config=relbar,
+  start={\std at minus}, end={\std at minus},% \relbar is defined with \mathsm at sh
+  shift leftright=0,
+  arrow under,
+  space before arrow=-0.3ex,
+}
+
+% The following is adapted from the overarrows documentation.
+\NewOverArrowCommand[tikz]{OVARSoverarchedleftrightarrow}{%
+  add tikz options={y=\overarrowlength},
+  add tikz options={line width={\overarrowsmallerthickness}},
+  path options={arrows={<[scale=0.5]->[scale=0.5]}},
+  path={(0,0) arc (-250:70:0.5 and 0.1)},
+  center arrow,
+  min length=25,
+  space after arrow=0.4ex,
+}
+
+% The following is adapted from the overarrows documentation.
+\NewOverArrowCommand[picture]{OVARSoverbandedarrow}{%
+  picture command={%
+    \qbezier
+    (0.0\overarrowlength,0)
+    (0.5\overarrowlength,0)
+    (0.9\overarrowlength,0.2\overarrowlength)
+    \put(0.9\overarrowlength,0.2\overarrowlength)
+        {\vector(2,1){0.2\overarrowlength}}
+  },
+  geometry={(\overarrowlength,0.4\overarrowlength)(0,0)},
+  line thickness={\overarrowsmallerthickness},
+  center arrow,
+  space after arrow=0.4ex,
+}
+
+\endinput


Property changes on: trunk/Master/texmf-dist/doc/latex/comprehensive/source/renamed-overarrows.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/comprehensive/source/symbols.ist
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/symbols.ist	2024-01-03 21:17:41 UTC (rev 69281)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/symbols.ist	2024-01-03 21:18:06 UTC (rev 69282)
@@ -22,7 +22,7 @@
 % running Makeindex as they try to cover two different
 % versions of the program:
 lethead_prefix    "\n\\indexheading{"
-leathead_suffix   "}\n"
+lethead_suffix    "}\n"
 lethead_flag      1
 heading_prefix    "\n\\indexheading{"
 heading_suffix    "}\n"

Modified: trunk/Master/texmf-dist/doc/latex/comprehensive/source/symbols.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/comprehensive/source/symbols.tex	2024-01-03 21:17:41 UTC (rev 69281)
+++ trunk/Master/texmf-dist/doc/latex/comprehensive/source/symbols.tex	2024-01-03 21:18:06 UTC (rev 69282)
@@ -1,19 +1,19 @@
 %%% ====================================================================
 %%%  @LaTeX-file{
 %%%     author          = "Scott Pakin",
-%%%     version         = "14.0",
-%%%     date            = "05 May 2021",
-%%%     time            = "16:10:48 MDT",
+%%%     version         = "15.0",
+%%%     date            = "03 January 2024",
+%%%     time            = "00:37:09 MST",
 %%%     filename        = "symbols.tex",
-%%%     checksum        = "49890 24745 81503 1177698",
+%%%     checksum        = "28793 31586 100238 1448831",
 %%%     email           = "scott+clsl at pakin.org (Internet)",
 %%%     codetable       = "ISO/ASCII",
 %%%     keywords        = "symbols, LaTeX2e, typesetting, accents,
 %%%                        mathematics, scientific, dingbats, fonts",
 %%%     supported       = "yes",
-%%%     abstract        = "This document lists thousands of symbols and
-%%%                        the corresponding LaTeX commands that
-%%%                        produce them.  Some of these symbols are
+%%%     abstract        = "This document lists tens of thousands of
+%%%                        symbols and the corresponding LaTeX commands
+%%%                        that produce them.  Some of these symbols are
 %%%                        guaranteed to be available in every LaTeX2e
 %%%                        system; others require fonts and packages
 %%%                        that may not accompany a given distribution
@@ -22,13 +22,13 @@
 %%%                        prepare this document -- as well as this
 %%%                        document itself -- are freely available
 %%%                        from the Comprehensive TeX Archive Network
-%%%                        (http://www.ctan.org).",
-%%%     docstring       = "This LaTeX document showcases thousands of
-%%%                        symbols that are available to authors.  The
-%%%                        original version of this document was
-%%%                        written by David Carlisle on 1994/10/02.
-%%%                        It was subsequently changed and expanded by
-%%%                        Scott Pakin.
+%%%                        (https://www.ctan.org).",
+%%%     docstring       = "This LaTeX document showcases tens of
+%%%                        thousands of symbols that are available to
+%%%                        authors.  The original version of this
+%%%                        document was written by David Carlisle on
+%%%                        1994/10/02.  It subsequently was changed and
+%%%                        expanded by Scott Pakin.
 %%%
 %%%                        To build this document, run ``latex
 %%%                        symbols'', then ``makeindex -s gind.ist
@@ -46,13 +46,20 @@
 %%%                        header was produced with the help of Nelson
 %%%                        Beebe's filehdr utility.  Both checksum and
 %%%                        filehdr are available from CTAN
-%%%                        (http://www.ctan.org)."
+%%%                        (https://www.ctan.org)."
 %%%  }
 %%% ====================================================================
 
 \NeedsTeXFormat{LaTeX2e}
 \IfFileExists{cmap.sty}{\RequirePackage[resetfonts]{cmap}}{}
-\documentclass{article}
+\documentclass{report}
+\usepackage{etex}   % Increase available TeX resources.
+\usepackage[
+  margin=1in,
+  includehead,
+  headheight=15pt,
+  ignorefoot,
+  ignoremp]{geometry}
 \usepackage{array}
 \usepackage{longtable}
 \usepackage{textcomp}
@@ -62,11 +69,24 @@
 \usepackage{makeidx}
 \usepackage{verbatim}
 \usepackage{graphicx}
-\usepackage{ifpdf}
+\usepackage{iftex}
 \usepackage{tabularx}
 \usepackage{keyval}
+\usepackage{accsupp}
+\usepackage{xstring}
+\usepackage{mflogo}
+\usepackage{url}
+\usepackage{multicol}
+\usepackage{rotating}
+\usepackage{slashed}
+\usepackage{centernot}
+\usepackage{changepage}
+\usepackage[svgnames]{xcolor}
+\usepackage{cutwin}
+\usepackage{tocloft}
+\usepackage{fancyhdr}
 
-\newcommand{\doctitle}{Comprehensive \LaTeX\ Symbol List}  % Reusable
+\newcommand{\doctitle}{Comprehensive \latex Symbol List}  % Reusable
 \title{The \doctitle}
 
 \author{\person{Scott}{Pakin} \texttt{<scott+clsl at pakin.org>}%
@@ -74,7 +94,7 @@
     \person{David}{Carlisle}, with several additional tables provided
     by \person{Alexander}{Holt}.  See \vref{about-doc} for more
     information about who did what.}}
-\date{5 May 2021}
+\date{3 January 2024}
 
 \makeindex
 
@@ -102,11 +122,29 @@
 %%%     refer back to that, showing samples only of more unique characters.
 %%%
 
+% Specify the document header and (empty) footer.
+\pagestyle{fancy}
+\fancyhead[L]{\scshape\nouppercase{\leftmark}}
+\fancyhead[R]{\thepage\rule[-6pt]{0pt}{0pt}}
+\fancyfoot[C]{}
+\renewcommand{\headrulewidth}{1pt}
+
+% Make index entries invoke \markboth for use in the header.
+\newcommand*{\recordentry}[1]{#1\markboth{#1}{#1}}
+
+% Limit the insertion of line breaks within URLs.
+\def\UrlBreaks{}
+\def\UrlBigBreaks{\do/}
+
 % Index "X Y" and "Y, X".  The "begin" and "end" variants are for page ranges.
-\newcommand{\idxboth}[2]{\mbox{}\index{#1 #2}\index{#2>#1}\index{#2}}
-\newcommand{\idxbothbegin}[2]{\mbox{}\index{#1 #2|(}\index{#2>#1|(}\index{#2|(}}
-\newcommand{\idxbothend}[2]{\mbox{}\index{#1 #2|)}\index{#2>#1|)}\index{#2|)}}
+\newcommand{\idxboth}[2]{\mbox{}\index{#1 #2}\index{#2>#1}}
+\newcommand{\idxbothbegin}[2]{\mbox{}\index{#1 #2|(}\index{#2>#1|(}}
+\newcommand{\idxbothend}[2]{\mbox{}\index{#1 #2|)}\index{#2>#1|)}}
 
+% Index "X" and "X>Y".
+\newcommand{\subindex}[2]{\index{#1}\index{#1>#2}}
+\newcommand{\ltsubindex}[2]{\ltindex{#1}\ltindex{#1>#2}}
+
 % Index package names and hyperlink them to the CTAN package information.
 % An optional argument of "index=false" suppresses indexing the package name.
 % An optional argument of "pkg=<name>" uses package <name> for the CTAN
@@ -119,7 +157,7 @@
 % Use \setpkgnameopts to set the default options for a specific package.
 \def\equalsign{=}
 \newcommand*{\catalogueURL}[1]{%
-  http://www.ctan.org/pkg/#1%
+  https://www.ctan.org/pkg/#1%
 }
 \makeatletter
 \define at key{pkgname}{pkg}{\def\pkglinktarget{#1}}
@@ -158,8 +196,8 @@
 % Index some other logical styles.
 \newcommand{\optname}[2]{%
   \textsf{#2}%
-  \index{#2=\textsf{#2} (\textsf{#1} package option)}%
-  \index{package options>#2=\textsf{#2} (\textsf{#1})}}
+  \index{#2=\textsf{#2} (\pkgname[index!=false]{#1} package option)}%
+  \index{package options>#2=\textsf{#2} (\pkgname[index!=false]{#1})}}
 \newcommand{\filename}[1]{%
   \texttt{#1}%
   \index{#1=\texttt{#1} (file)}}
@@ -178,9 +216,36 @@
 }
 \DeclareRobustCommand{\person}[2]{#1\index{#2, #1} #2}
 
+% Support searching of "#1" as if it were written in plain text as "#2".
+\newcommand{\searchAs}[2]{%
+  \texorpdfstring{%
+    \BeginAccSupp{ActualText={#2}}%
+    #1%
+    \EndAccSupp{}%
+  }{%
+    #2%
+  }%
+}
+
 % Index common words and phrases.
-\newcommand{\latex}{\LaTeX\index{LaTeX=\string\LaTeX}\xspace}
-\newcommand{\latexE}{\LaTeXe\index{LaTeX2e=\string\LaTeXe}\xspace}
+\DeclareRobustCommand{\latex}{%
+  \searchAs{\LaTeX}{LaTeX}%
+  \index{LaTeX=\string\searchAs{\string\LaTeX}{LaTeX}}\xspace
+}
+\DeclareRobustCommand{\latexEinternal}{%
+  % Split the two space-separated terms for Acrobat's benefit.  (Okular
+  % seems okay with ActualText containing spaces.)  Rather than an epsilon
+  % we use an "e" in "LaTeX 2e" because epsilon seems harder to search
+  % consistently across platforms with different native character
+  % encodings.
+  \searchAs{\LaTeX}{LaTeX}%
+  \texorpdfstring{\kern.15em}{ }%
+  \searchAs{2$_{\textstyle\varepsilon}$}{2e}%
+}
+\newcommand{\latexE}{%
+  \latexEinternal
+  \index{LaTeX2e=\noexpand\latexEinternal}\xspace
+}
 \newcommand{\metafont}{\MF\index{Metafont=\string\MF}\xspace}
 \newcommand{\tex}{\TeX\index{TeX=\string\TeX}\xspace}
 \newcommand{\xypic}{%
@@ -220,16 +285,30 @@
 \newcommand{\postscript}{PostScript\index{PostScript}\xspace}
 \newcommand{\ascii}{ASCII\index{ASCII}\xspace}
 \newcommand{\utfviii}{\mbox{UTF-8}\index{UTF-8}\xspace}
+\DeclareRobustCommand{\xetexInternal}{%
+  \mbox{X\lower0.5ex\hbox{\kern-0.15em\reflectbox{E}}\kern-0.1em\TeX}}
+\newcommand{\xetex}{%
+  \searchAs{\xetexInternal}{XeTeX}%
+  \index{XeTeX=\string\searchAs{\string\xetexInternal}{XeTeX}}\xspace
+}
 \DeclareRobustCommand{\xelatexInternal}{%
   \mbox{X\lower0.5ex\hbox{\kern-0.15em\reflectbox{E}}\kern-0.1em\LaTeX}}
-\newcommand{\xelatex}{\xelatexInternal\index{XeLaTeX=\string\xelatexInternal}\xspace}
-\DeclareRobustCommand{\xetexInternal}{%
-  \mbox{X\lower0.5ex\hbox{\kern-0.15em\reflectbox{E}}\kern-0.1em\TeX}}
-\newcommand{\xetex}{\xetexInternal\index{XeTeX=\string\xetexInternal}\xspace}
-\newcommand{\lualatex}{Lua\LaTeX\index{LuaLaTeX=Lua\string\LaTeX}\xspace}
+\newcommand{\xelatex}{%
+  \searchAs{\xelatexInternal}{XeLaTeX}%
+  \index{XeLaTeX=\string\searchAs{\string\xelatexInternal}{XeLaTeX}}\xspace
+}
+\newcommand{\lualatex}{%
+  \searchAs{Lua\LaTeX}{LuaLaTeX}%
+  \index{LuaLaTeX=\string\searchAs{Lua\string\LaTeX}{LuaLaTeX}}\xspace
+}
+\newcommand{\pdflatex}{%
+  \searchAs{pdf\LaTeX}{pdfLaTeX}%
+  \index{pdfLaTeX=\string\searchAs{pdf\string\LaTeX}{pdfLaTeX}}\xspace
+}
 \newcommand{\italic}[1][italic]{#1\index{italic}}
 \newcommand{\TikZ}{\pkgname{TikZ}}
-\setpkgnameopts{TikZ}{pkg=pgf,fmt={Ti\noexpand\textit{k}Z}}
+\DeclareRobustCommand{\TikZinternal}{\searchAs{Ti\textit{k}Z}{TikZ}}
+\setpkgnameopts{TikZ}{pkg=pgf,fmt={\noexpand\TikZinternal}}
 \newcommand{\PSTricks}{\pkgname{PSTricks}}
 \setpkgnameopts{PSTricks}{pkg=pstricks-base}
 \newcommand{\rawtables}{Raw\index{Raw Font Tables} Font Tables}
@@ -240,11 +319,11 @@
   \index{TeXbook, The=\TeX{}book, The>symbols from}%
 }
 \newcommand{\idxCTAN}{%
-  \index{Comprehensive TeX Archive Network=\href{http://www.ctan.org/}{Comprehensive \string\TeX{} Archive Network}}%
+  \index{Comprehensive TeX Archive Network=\href{https://www.ctan.org/}{Comprehensive \string\TeX{} Archive Network}}%
 }
-\newcommand{\CTAN}{\href{http://www.ctan.org/}{CTAN}\idxCTAN\xspace}
+\newcommand{\CTAN}{\href{https://www.ctan.org/}{CTAN}\idxCTAN\xspace}
 \newcommand{\CTANfull}{Comprehensive\idxCTAN\ \TeX\ Archive Network\xspace}
-\newcommand{\TeXFAQ}[1]{\url{http://www.tex.ac.uk/FAQ-#1.html}}
+\newcommand{\TeXFAQ}[1]{\url{http://www.texfaq.org/FAQ-#1.html}}
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -353,18 +432,14 @@
 \@cons\foundpkgs{{latexsym}}
 \makeatother
 \newcommand{\TC}{\pkgname{textcomp}}
-\setpkgnameopts{latexsym}{link=http://www.ctan.org/pkg/latex-base}
+\setpkgnameopts{latexsym}{link=https://www.ctan.org/pkg/latex-base}
 
-% Load etex if possible to increase the number of various TeX resources
-% we have available.
-\IfStyFileExists*{etex}{\usepackage{etex}}{}
-
 % Typeset a string in various encodings.
-\newcommand{\encone}[1]{{\fontencoding{T1}\selectfont#1}}
-\newcommand{\enctwoA}[1]{{\fontencoding{T2A}\selectfont#1}}
-\newcommand{\encfour}[1]{{\fontencoding{T4}\selectfont#1}}
-\newcommand{\encfive}[1]{{\fontencoding{T5}\selectfont#1}}
-\newcommand{\encgreek}[1]{{\fontencoding{LGR}\selectfont#1}}
+\DeclareRobustCommand*{\encone}[1]{{\fontencoding{T1}\selectfont#1}}
+\DeclareRobustCommand*{\enctwoA}[1]{{\fontencoding{T2A}\selectfont#1}}
+\DeclareRobustCommand*{\encfour}[1]{{\fontencoding{T4}\selectfont#1}}
+\DeclareRobustCommand*{\encfive}[1]{{\fontencoding{T5}\selectfont#1}}
+\DeclareRobustCommand*{\encgreek}[1]{{\fontencoding{LGR}\selectfont#1}}
 
 % Various punctuation marks confuse makeindex when used directly.
 \let\magicrbrack=]
@@ -372,6 +447,7 @@
 \DeclareRobustCommand{\magicequalname}{\texttt{\string\=}}
 \DeclareRobustCommand{\magicvertname}{\texttt{|}}
 \DeclareRobustCommand{\magicVertname}{\texttt{\string\|}}
+\DeclareRobustCommand{\showmacron}{\blackacchack\=}   % Can't index "=".
 
 % Vertically center a text-mode symbol.
 \newsavebox{\tvcbox}
@@ -511,7 +587,7 @@
 
 \newif\ifAMS
 \newcommand\AMS{\pkgname{AMS}}
-\setpkgnameopts{AMS}{pkg=amsfonts,fmt={\noexpand\AmS{}}}
+\setpkgnameopts{AMS}{pkg=amsfonts,fmt={\noexpand\AmS}}
 \makeatletter
 \IfStyFileExists{amssymb}
   {\AMStrue
@@ -802,10 +878,11 @@
    \savesymbol{angle} \savesymbol{rightleftharpoons}
    \savesymbol{textcent} \savesymbol{textsterling}
    \savesymbol{L} \savesymbol{l} \savesymbol{r}
-   \savesymbol{succapprox} \savesymbol{precapprox}
+   \savesymbol{succapprox} \savesymbol{precapprox} \savesymbol{Perp}
    \usepackage{txfonts}
    \restoresymbol{TX}{angle} \restoresymbol{TX}{rightleftharpoons}
    \restoresymbol{TX}{succapprox} \restoresymbol{TX}{precapprox}
+   \restoresymbol{TX}{Perp}
    % Restore the old font commands.
    \global\let\DeclareTextSymbol=\origDeclareTextSymbol
    \global\let\DeclareSymbolFont=\origDeclareSymbolFont
@@ -1490,7 +1567,14 @@
 \newif\ifDICT
 \newcommand\DICT{\pkgname{dictsym}}
 \IfStyFileExists{dictsym}
-  {\DICTtrue\usepackage{dictsym}}
+  {\DICTtrue
+   \ifpdf
+     % Bug workaround. See
+     % https://tex.stackexchange.com/questions/615300/pdflatex-builtin-glyph-names-is-empty/634975#634975
+     \pdfmapline{=dictsym DictSym <dictsym.pfb}
+   \fi
+   \usepackage{dictsym}
+  }
   {}
 
 \newif\ifEXTAR
@@ -1700,7 +1784,11 @@
 \newcommand\KEYS{\pkgname{keystroke}}
 \IfStyFileExists{keystroke}
   {\KEYStrue
+   \savesymbol{Alt}
+   \savesymbol{End}
    \usepackage{keystroke}
+   \restoresymbol{KEYS}{Alt}
+   \restoresymbol{KEYS}{End}
    % \Tab and \BSpace's use of \reflectbox confuses our indexing code.
    \DeclareRobustCommand{\keysTab}{\Tab}
    \DeclareRobustCommand{\keysBSpace}{\BSpace}
@@ -1721,7 +1809,7 @@
      \newcommand{##1}{{\usefont{U}{##3}{m}{n}\char##4}}%
    }
    \usepackage{fge}
-   \newcommand*{\spirituslenisAB}[2]{%
+   \newcommand*{\spiritusaccent}[2]{%
      \leavevmode
      \setbox0=\hbox{##2}%
      \@tempdima=\ht0
@@ -1732,9 +1820,12 @@
        }%
      }%
    }
-   \DeclareRobustCommand{\spirituslenisA}[1]{\spirituslenisAB{"15}{##1}}
-   \DeclareRobustCommand{\spirituslenisB}[1]{\spirituslenisAB{"16}{##1}}
+   \DeclareRobustCommand{\spiritusasperA}[1]{\spiritusaccent{"13}{##1}}
+   \DeclareRobustCommand{\spiritusasperB}[1]{\spiritusaccent{"14}{##1}}
+   \DeclareRobustCommand{\spirituslenisA}[1]{\spiritusaccent{"15}{##1}}
+   \DeclareRobustCommand{\spirituslenisB}[1]{\spiritusaccent{"16}{##1}}
    \let\spirituslenis=\spirituslenisA
+   \let\spiritusasper=\spiritusasperA
    \let\DeclareSymbolFont=\origDeclareSymbolFont
    \let\DeclareMathSymbol=\origDeclareMathSymbol
   }
@@ -1987,6 +2078,11 @@
 \newcommand\PIG{\pkgname{pigpen}}
 \IfStyFileExists{pigpen}
   {\PIGtrue
+   \ifpdf
+     % Bug workaround. See
+     % https://tex.stackexchange.com/questions/615300/pdflatex-builtin-glyph-names-is-empty/634975#634975
+     \pdfmapline{=pigpen <pigpen.pfa}
+   \fi
    \usepackage{pigpen}
    \DeclareRobustCommand{\CLSLpig}[1]{{\pigpenfont##1}}
   }
@@ -1997,6 +2093,19 @@
 \IfStyFileExists{clock}
   {\CLOCKtrue\usepackage{clock}}
   {}
+\DeclareRobustCommand*{\renderCLOCK}[2]{{%
+  \ClockStyle=#1
+  \ifx#2t
+    \ClockFrametrue
+  \else
+    \ClockFramefalse
+  \fi
+  \clock{15}{41}%
+}}
+\newcommand*{\showCLOCK}[2]{%
+  \renderCLOCK{#1}{#2}%
+  \index{clock=\string\verb+\string\clock+ (\string\renderCLOCK{#1}{#2})}%
+}
 
 % We define our own teubner package to try to minimize symbol conflicts.
 \newif\ifTEUB
@@ -2003,7 +2112,11 @@
 \newcommand\TEUB{\pkgname{teubner}}
 \makeatletter
 \IfStyFileExists{teubner}
-  {\TEUBtrue\usepackage{teubner-subset}}
+   {\TEUBtrue
+    \let\origamp=\&
+    \usepackage{teubner-subset}
+    \let\&=\origamp
+  }
   {}
 \makeatother
 
@@ -2049,11 +2162,7 @@
 %  {}
 
 \newif\ifCHINA
-\newcommand\CHINA{%
-  \texorpdfstring
-      {\pkgname[fmt={\protect\Chinasym{}}]{china2e}}%
-      {china2e}%
-}
+\newcommand{\CHINA}{\pkgname{china2e}}
 \IfStyFileExists{china2e}
   {\CHINAtrue
    \savesymbol{Info}
@@ -2074,6 +2183,8 @@
    \restoresymbol{china}{Telephone}
    \restoresymbol{china}{Fire}
    \restoresymbol{CHINA}{vdots}
+   \DeclareRobustCommand{\chinainternal}{\searchAs{\Chinasym}{CHiNA2e}}
+   \setpkgnameopts{china2e}{fmt={\noexpand\chinainternal}}
   }
   {}
 
@@ -2324,9 +2435,11 @@
   {}
 
 \newif\ifFNTAWE
-\newcommand\FNTAWE{\pkgname{fontawesome}}
-\IfStyFileExists{fontawesome}
-  {\FNTAWEtrue\usepackage{fontawesome}}
+\newcommand\FNTAWE{\pkgname{fontawesome5}}
+\IfStyFileExists{fontawesome5}
+  {\FNTAWEtrue
+   \usepackage{fontawesome5}
+  }
   {}
 
 % stix defines a very large set of symbols and consumes a lot of math
@@ -2484,8 +2597,10 @@
 \IfStyFileExists{apl}
   {\APLtrue
    \savesymbol{NG}
+   \savesymbol{SS}
    \usepackage{apl}
    \restoresymbol{APL}{NG}
+   \restoresymbol{APL}{SS}
   }
   {}
 
@@ -2541,8 +2656,8 @@
 % when not producing PDF output.
 \newif\ifLILY
 \DeclareRobustCommand{\lilylogo}{\textsf{lilyglyphs}}
-\newcommand\LILY{\pkgname{LilyGlyphs}}
-\setpkgnameopts{LilyGlyphs}{pkg=lilyglyphs,fmt={\noexpand\lilylogo}}
+\newcommand\LILY{\pkgname{lilyglyphs}}
+\setpkgnameopts{lilyglyphs}{pkg=lilyglyphs,fmt={\noexpand\lilylogo}}
 \IfStyFileExists{lilyglyphs}
   {\LILYtrue
    \savesymbol{flat}
@@ -2561,14 +2676,11 @@
 \ifLILY
   \ifpdf
     \DeclareRobustCommand{\lilylogo}{%
-      % The following \pdfliteral magic makes lilyglyphs's graphical logo
-      % searchable as if it were simply the word "lilyglyphs".
-      \pdfliteral{
-        /Span << /ActualText (lilyglyphs) >>
-        BDC
-      }%
-      \raisebox{-0.78ex}{\includegraphics{lilyglyphs/lilyglyphs_logo}}%
-      \pdfliteral{EMC}%
+      % I'm not sure why \searchAs can't be given an \includegraphics, but
+      % the following hack seems to work.
+      \hspace*{40.252bp}%   % Width of lilyglyphs_logo
+      \llap{\searchAs{\textcolor{white}{lilyglyphs}}{lilyglyphs}}%
+      \llap{\raisebox{-0.78ex}{\includegraphics{lilyglyphs/lilyglyphs_logo}}}%
     }%
     \renewcommand*{\lilyPrint}[2][]{%
       \interpretLilyOptions{#1}%
@@ -2813,19 +2925,26 @@
    \let\hat=\orighat  % realhats does a \renewcommand{\hat} so \hat must exist.
    \usepackage{realhats}
    \restoresymbol{RHAT}{hat}
+   % Define a wrapper for each realhats command that takes a single,
+   % mandatory argument.
    \DeclareRobustCommand{\RHATash}[1]{\RHAThat[ash]{##1}}
    \DeclareRobustCommand{\RHATberet}[1]{\RHAThat[beret]{##1}}
+   \DeclareRobustCommand{\RHATbirthday}[1]{\RHAThat[birthday]{##1}}
    \DeclareRobustCommand{\RHATcowboy}[1]{\RHAThat[cowboy]{##1}}
    \DeclareRobustCommand{\RHATcrown}[1]{\RHAThat[crown]{##1}}
+   \DeclareRobustCommand{\RHATdunce}[1]{\RHAThat[dunce]{##1}}
+   \DeclareRobustCommand{\RHATfez}[1]{\RHAThat[fez]{##1}}
+   \DeclareRobustCommand{\RHATmortarboard}[1]{\RHAThat[mortarboard]{##1}}
+   \DeclareRobustCommand{\RHATpoliceman}[1]{\RHAThat[policeman]{##1}}
    \DeclareRobustCommand{\RHATsanta}[1]{\RHAThat[santa]{##1}}
+   \DeclareRobustCommand{\RHATscottish}[1]{\RHAThat[scottish]{##1}}
    \DeclareRobustCommand{\RHATsombrero}[1]{\RHAThat[sombrero]{##1}}
+   \DeclareRobustCommand{\RHATtileblue}[1]{\RHAThat[tile-blue]{##1}}
+   \DeclareRobustCommand{\RHATtilegray}[1]{\RHAThat[tile-gray]{##1}}
+   \DeclareRobustCommand{\RHATtilelightblue}[1]{\RHAThat[tile-light-blue]{##1}}
+   \DeclareRobustCommand{\RHATtilewhite}[1]{\RHAThat[tile-white]{##1}}
    \DeclareRobustCommand{\RHATtophat}[1]{\RHAThat[tophat]{##1}}
    \DeclareRobustCommand{\RHATwitch}[1]{\RHAThat[witch]{##1}}
-   % I don't understand why, but dunce and fez mess up the index when they take
-   % \graybox (or any colored item) as an argument.  A workaround is to typeset
-   % a black object after the colored object.
-   \DeclareRobustCommand{\RHATdunce}[1]{\RHAThat[dunce]{##1\rule{1sp}{1sp}}}
-   \DeclareRobustCommand{\RHATfez}[1]{\RHAThat[fez]{##1\rule{1sp}{1sp}}}
   }
   {}
 
@@ -2922,19 +3041,33 @@
 \newcommand\ROJUD{\pkgname{rojud}}
 \IfStyFileExists{rojud}
   {\ROJUDtrue
-    \usepackage{rojud}
+   \usepackage{rojud}
   }
   {}
 
-
+% utfsym renders symbols slowly.  In an attempt to speed it up we use
+% a faked version of the package that uses a pre-rendered image for
+% each symbol.
 \newif\ifUTFSYM
 \newcommand\UTFSYM{\pkgname{utfsym}}
 \IfStyFileExists{utfsym}
   {\UTFSYMtrue
-    \usepackage{utfsym}
+   \fakeusepackage{utfsym}
   }
   {}
 
+% worldflags defines a number of global names that interfere with
+% other packages and the symbol list itself.  We use a faked version
+% of the package that's more careful about namespaces and, as a side
+% effect, renders symbols substantially faster.
+\newif\ifWFLAGS
+\newcommand\WFLAGS{\pkgname{worldflags}}
+\IfStyFileExists{worldflags}
+  {\WFLAGStrue
+   \usepackage{fakeworldflags}
+  }
+  {}
+
 % We have no math alphabets left so we trick the package into declaring a
 % text symbol.
 \newif\ifPLIM
@@ -2941,43 +3074,287 @@
 \newcommand\PLIM{\pkgname{plimsoll}}
 \IfStyFileExists{plimsoll}
   {\PLIMtrue
-    \let\origDeclareSymbolFont=\DeclareSymbolFont
-    \renewcommand*{\DeclareSymbolFont}[5]{\endinput}
-    \usepackage{plimsoll}
-    \let\DeclareSymbolFont=\origDeclareSymbolFont
-    \DeclareRobustCommand*{\plimsoll}{{\usefont{U}{plimsoll}{m}{n}\char"001}}
+   \let\origDeclareSymbolFont=\DeclareSymbolFont
+   \renewcommand*{\DeclareSymbolFont}[5]{\endinput}
+   \usepackage{plimsoll}
+   \let\DeclareSymbolFont=\origDeclareSymbolFont
+   \DeclareRobustCommand*{\plimsoll}{{\usefont{U}{plimsoll}{m}{n}\char"001}}
   }
   {}
 
-% worldflags defines a number of global names that interfere with
-% other packages and the symbol list itself.  We use a faked version
-% of the package that's more careful about namespaces.
-\newif\ifWFLAGS
-\newcommand\WFLAGS{\pkgname{worldflags}}
-\IfStyFileExists{worldflags}
-  {\WFLAGStrue
-    \usepackage{fakeworldflags}
-    \flagsdefault[width=9pt]
-  }
-  {}
-
 \newif\ifTWEM
 \newcommand\TWEM{\pkgname{twemojis}}
 \IfStyFileExists{twemojis}
   {\TWEMtrue
-    \usepackage{twemojis}
-    \newlength{\twemwidth}
-    \settowidth{\twemwidth}{\texttt{.twemoji.1f574-1f3fb-200d-2640-fe0f.}}
+   \usepackage{twemojis}
+   \newlength{\twemwidth}
+   \settowidth{\twemwidth}{\texttt{.twemoji.1f574-1f3fb-200d-2640-fe0f.}}
   }
   {}
 
+\newif\ifSACSYMB
+\newcommand\SACSYMB{\pkgname{sacsymb}}
+\IfStyFileExists{sacsymb}
+  {\SACSYMBtrue
+   % Conservatively save all symbols because sacsymb's two-letter symbol
+   % names are bound to cause trouble.
+   \savesymbol{ca} \savesymbol{cb} \savesymbol{cc} \savesymbol{cd}
+   \savesymbol{ce} \savesymbol{cf} \savesymbol{cg} \savesymbol{ch}
+   \savesymbol{ci} \savesymbol{cj} \savesymbol{ck} \savesymbol{cl}
+   \savesymbol{cm} \savesymbol{cn} \savesymbol{co} \savesymbol{cq}
+   \savesymbol{cs} \savesymbol{ct} \savesymbol{cu} \savesymbol{cv}
+   \savesymbol{cw}
+   \usepackage{sacsymb}
+   \restoresymbol{SACSYMB}{ca} \restoresymbol{SACSYMB}{cb}
+   \restoresymbol{SACSYMB}{cc} \restoresymbol{SACSYMB}{cd}
+   \restoresymbol{SACSYMB}{ce} \restoresymbol{SACSYMB}{cf}
+   \restoresymbol{SACSYMB}{cg} \restoresymbol{SACSYMB}{ch}
+   \restoresymbol{SACSYMB}{ci} \restoresymbol{SACSYMB}{cj}
+   \restoresymbol{SACSYMB}{ck} \restoresymbol{SACSYMB}{cl}
+   \restoresymbol{SACSYMB}{cm} \restoresymbol{SACSYMB}{cn}
+   \restoresymbol{SACSYMB}{co} \restoresymbol{SACSYMB}{cq}
+   \restoresymbol{SACSYMB}{cs} \restoresymbol{SACSYMB}{ct}
+   \restoresymbol{SACSYMB}{cu} \restoresymbol{SACSYMB}{cv}
+   \restoresymbol{SACSYMB}{cw}
+  }
+  {}
+
+\newif\ifOVARS
+\newcommand\OVARS{\pkgname{overarrows}}
+\IfStyFileExists{overarrows}
+  {\OVARStrue
+   \usepackage{renamed-overarrows}
+  }
+  {}
+
+\newif\ifRESMES
+\newcommand\RESMES{\pkgname{resmes}}
+\IfStyFileExists{resmes}
+  {\RESMEStrue
+   \usepackage{resmes}
+  }
+  {}
+
+\newif\ifPDFMSYM
+\newcommand\PDFMSYM{\pkgname{pdfMsym}}
+\IfPackageFileExists{pdfmsym}{pdfmsym.tex}
+  {\PDFMSYMtrue
+   \makeatletter
+   \savesymbol{lightning}
+   \input{pdfmsym}
+   \pdfmsymsetscalefactor{10}
+   \restoresymbol{PDFMSYM}{lightning}
+   \makeatother
+  }
+  {}
+
+\newif\ifSILLY
+\newcommand\SILLY{\pkgname{sillypage}}
+\IfStyFileExists{sillypage}
+  {\SILLYtrue
+   \usepackage{sillypage}
+  }
+  {}
+
+% academicons requires XeLaTeX or LuaLaTeX.  Use a faked version if
+% we're running from pdfLaTeX.
+\newif\ifACICOS
+\newcommand\ACICOS{\pkgname{academicons}}
+\IfStyFileExists{academicons}
+  {\ACICOStrue
+   \ifpdftex
+     \fakeusepackage{academicons}
+   \else
+     \usepackage{academicons}
+   \fi
+  }
+  {}
+
+% typicons requires XeLaTeX or LuaLaTeX.  Use a faked version if we're
+% running from pdfLaTeX.
+\newif\ifTYPICOS
+\newcommand\TYPICOS{\pkgname{typicons}}
+\IfStyFileExists{typicons}
+  {\TYPICOStrue
+   \ifpdftex
+     \fakeusepackage{typicons}
+   \else
+     \usepackage{typicons}
+   \fi
+  }
+  {}
+
+% figbas has no LaTeX support so we fabricate it ourselves.
+\newif\ifFIGBAS
+\newcommand\FIGBAS{\pkgname{figbas}}
+\IfPackageFileExists{figbas}{cmrj.tfm}
+  {\FIGBAStrue
+   \DeclareFontFamily{U}{figbas}{}
+   \DeclareFontShape{U}{figbas}{m}{n}{<-> cmrj}{}
+  }
+  {}
+
+% asapsym requires XeLaTeX or LuaLaTeX.  Use a faked version if we're
+% running from pdfLaTeX.
+\newif\ifASAP
+\newcommand\ASAP{\pkgname{asapsym}}
+\IfStyFileExists{asapsym}
+  {\ASAPtrue
+   \ifpdftex
+     \fakeusepackage{asapsym}
+   \else
+     \usepackage{asapsym}
+   \fi
+  }
+  {}
+
+% fontmfizz requires XeLaTeX or LuaLaTeX.  Use a faked version if
+% we're running from pdfLaTeX.
+\newif\ifMFIZZ
+\newcommand\MFIZZ{\pkgname{fontmfizz}}
+\IfStyFileExists{fontmfizz}
+  {\MFIZZtrue
+   \ifpdftex
+     \fakeusepackage{fontmfizz}
+   \else
+     \usepackage{fontmfizz}
+   \fi
+  }
+  {}
+
+% hamnosys requires XeLaTeX or LuaLaTeX.  Use a faked version if
+% we're running from pdfLaTeX.
+\newif\ifHNS
+\newcommand\HNS{\pkgname{hamnosys}}
+\IfStyFileExists{hamnosys}
+  {\HNStrue
+   \ifpdftex
+     \fakeusepackage{hamnosys}
+   \else
+     \usepackage{hamnosys}
+   \fi
+  }
+  {}
+
+% Use a faked figchild in which each symbol appears in a pre-rendered
+% graphics file.
+\newif\ifCHILD
+\newcommand\CHILD{\pkgname{figchild}}
+\IfStyFileExists{figchild}
+  {\CHILDtrue\fakeusepackage{figchild}}
+  {}
+
+% logix requires XeLaTeX or LuaLaTeX.  Use a faked version if we're
+% running from pdfLaTeX.
+\newif\ifLOGIX
+\newcommand\LOGIX{\pkgname{logix}}
+\IfStyFileExists{logix}
+  {\LOGIXtrue
+   \ifpdftex
+     \fakeusepackage{logix}
+   \else
+     \usepackage{logix}
+   \fi
+  }
+  {}
+
+\newif\ifPGFORN
+\newcommand\PGFORN{\pkgname{pgfornament}}
+\IfStyFileExists{pgfornament}
+  {\PGFORNtrue
+    \usepackage{pgfornament}
+    \DeclareRobustCommand*{\pgfornVec}[1]{{%
+      \newpgfornamentfamily{vectorian}%
+      \pgfornament[height=15pt,ydelta=-5pt]{##1}%
+    }}%
+    \DeclareRobustCommand*{\pgfornHan}[1]{{%
+      \newpgfornamentfamily{han}%
+      \resizebox{!}{15pt}{\pgfornament[height=25pt,ydelta=-5pt]{##1}}%
+    }}%
+  }
+  {}
+
+% lcircuit has no LaTeX support so we fabricate it ourselves.
+\newif\ifLCIRC
+\newcommand\LCIRC{\pkgname{lcircuit}}
+\IfPackageFileExists{lcircuit}{nexorw.mac}
+  {\LCIRCtrue
+   \input{ande.mac}
+   \input{andn.mac}
+   \input{ands.mac}
+   \input{andw.mac}
+   \input{capew.mac}
+   \input{capns.mac}
+   \input{exore.mac}
+   \input{exorn.mac}
+   \input{exors.mac}
+   \input{exorw.mac}
+   \input{nande.mac}
+   \input{nandn.mac}
+   \input{nands.mac}
+   \input{nandw.mac}
+   \input{nexore.mac}
+   \input{nexorn.mac}
+   \input{nexors.mac}
+   \input{nexorw.mac}
+   \input{nfete.mac}
+   \input{nfetn.mac}
+   \input{nfets.mac}
+   \input{nfetw.mac}
+   \input{nore.mac}
+   \input{norn.mac}
+   \input{nors.mac}
+   \input{norw.mac}
+   \input{note.mac}
+   \input{notn.mac}
+   \input{nots.mac}
+   \input{notw.mac}
+   \input{ore.mac}
+   \input{orn.mac}
+   \input{ors.mac}
+   \input{orw.mac}
+   \input{ote.mac}
+   \input{otn.mac}
+   \input{ots.mac}
+   \input{otw.mac}
+   \input{pfete.mac}
+   \input{pfetn.mac}
+   \input{pfets.mac}
+   \input{pfetw.mac}
+   \input{resew.mac}
+   \input{resns.mac}
+   \input{tgateew.mac}
+   \input{tgatens.mac}
+   \input{tje.mac}
+   \input{tjn.mac}
+   \input{tjs.mac}
+   \input{tjw.mac}
+   \input{vddpin.mac}
+   \input{vsspin.mac}
+   \newcommand{\uselcircuit}[1]{\usebox{\csname##1\endcsname}}
+  }
+  {}
+
+% We don't actually load all of quantikz just for its few symbols.
+% Instead, we load only enough to retrieve the package's version string
+% then reproduce quantikz's symbol code almost verbatim.
+\newif\ifQTIKZ
+\newcommand\QTIKZ{\pkgname{quantikz}}
+\IfStyFileExists{quantikz}
+  {\QTIKZtrue
+   \let\origRequirePackage=\RequirePackage
+   \def\RequirePackage##1[##2]{\endinput}
+   \usepackage{quantikz}
+   \let\RequirePackage=\origRequirePackage
+   \newcommand*{\QTIKZket}[1]{\ensuremath{\left|##1\right\rangle}}
+   \newcommand*{\QTIKZbra}[1]{\ensuremath{\left\langle##1\right |}}
+   \newcommand*{\QTIKZproj}[1]{\ensuremath{\QTIKZket{##1}\!\QTIKZbra{##1}}}
+   \newcommand*{\QTIKZbraket}[2]{\ensuremath{\left\langle##1\middle|##2\right\rangle}}
+  }
+  {}
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-% If we have mflogo.sty, use it.  Otherwise, define \MF the "boring" way.
-\IfStyFileExists*{mflogo}
-  {\usepackage{mflogo}}
-  {\newcommand{\MF}{Metafont}}
-
 % If we have booktabs.sty, use it.  Otherwise, define all its line types
 % in terms of \hline and \cline.
 \IfStyFileExists*{booktabs}
@@ -2988,34 +3365,6 @@
    \def\cmidrule(##1)##2{\cline{##2}}
   }
 
-% If we have url.sty, use it.  Otherwise, define \url as \texttt.
-\IfStyFileExists*{url}
-  {\usepackage{url}
-   \def\UrlBreaks{}
-   \def\UrlBigBreaks{\do/}}
-  {\newcommand{\url}[1]{\texttt{##1}}}
-
-% If we have geometry.sty, use it.  Otherwise, a lot of tables are going
-% to stick out into the margin.
-\makeatletter
-\IfStyFileExists*{geometry}
-  {\usepackage[margin=1in,nohead,ignoremp]{geometry}
-  }
-  {}
-\makeatother
-
-% If we have multicol.sty, use it.
-\newif\ifhavemulticol
-\IfStyFileExists*{multicol}
-  {\havemulticoltrue\usepackage{multicol}}
-  {}
-
-% If we have rotating.sty, use it.
-\newif\ifhaverotating
-\IfStyFileExists*{rotating}
-  {\haverotatingtrue\usepackage{rotating}}
-  {}
-
 % If we have cancel.sty, use it.
 \newif\ifhavecancel
 \IfStyFileExists*{cancel}
@@ -3022,18 +3371,6 @@
   {\havecanceltrue\usepackage{cancel}}
   {}
 
-% If we have slashed.sty, use it.
-\newif\ifhaveslashed
-\IfStyFileExists*{slashed}
-  {\haveslashedtrue\usepackage{slashed}}
-  {}
-
-% If we have centernot.sty, use it.
-\newif\ifhavecenternot
-\IfStyFileExists*{centernot}
-  {\havecenternottrue\usepackage{centernot}}
-  {}
-
 % If we have the accents package, use it (for an example in the section
 % on constructing new symbols).
 \newif\ifACCENTS
@@ -3057,13 +3394,10 @@
   }
   {}
 
-% If we have the bm package, use it (to show how to typeset bold math).
-\newif\ifBM
-\IfStyFileExists{bm}
-  {\BMtrue
-   \usepackage{bm}
-  }
-  {}
+% Load the bm package to show how to typeset bold math.  This needs to
+% be loaded after some other math package (I'm not sure which) or it
+% will consume a precious math alphabet.
+\usepackage{bm}
 
 % If we have the xfakebold package, use it (to show how to typeset bold math).
 \newif\ifXFB
@@ -3136,11 +3470,23 @@
   {\usepackage{tocbibind}}
   {}
 
+% If we have spverbatim.sty, use it.
+\newif\ifhavespverbatim
+\IfStyFileExists*{spverbatim}
+  {\havespverbatimtrue\usepackage{spverbatim}}
+  {}
+
+% If we have circledsteps.sty, use it.
+\newif\ifhavecircledsteps
+\IfStyFileExists*{circledsteps}
+  {\havecircledstepstrue\usepackage{circledsteps}}
+  {}
+
 % If we have the Junicode font, use a few characters we extracted from
 % it as graphics.
 \newif\ifJUNI
 \newcommand\JUNI{\pkgname{junicode}}
-\IfPackageFileExists{junicode}{Junicode.ttf}
+\IfPackageFileExists{junicode}{junicode/u2123.pdf}
   {\JUNItrue
    \DeclareRobustCommand{\versicle}{%
      \raisebox{-1.7pt}{\includegraphics[scale=0.005]{junicode/u2123}}%
@@ -3312,10 +3658,20 @@
   \newcommand{\indexcommand}[2][]{%
     \edef\sanitized{\expandafter\sanitize\string#2!!!}%
     \def\first at arg{#1}%
-    \ifx\first at arg\@empty
-      \expandafter\index\expandafter{\sanitized=\string\verb+\string#2+}%
+    \ifhavespverbatim
+      % Preferred approach: use \spverb.
+      \ifx\first at arg\@empty
+        \expandafter\index\expandafter{\sanitized=\string\spverb+\string#2+}%
+      \else
+        \expandafter\index\expandafter{\sanitized=\string\spverb+\string#2+ (#1)}%
+      \fi
     \else
-      \expandafter\index\expandafter{\sanitized=\string\verb+\string#2+ (#1)}%
+      % Backup approach: use \verb.
+      \ifx\first at arg\@empty
+        \expandafter\index\expandafter{\sanitized=\string\verb+\string#2+}%
+      \else
+        \expandafter\index\expandafter{\sanitized=\string\verb+\string#2+ (#1)}%
+      \fi
     \fi
   }
   \let\indexaccent=\indexcommand
@@ -3325,13 +3681,13 @@
     \def\second at arg{#2}%
     \ifx\first at arg\@empty
       \ifx\second at arg\CLSLpipe
-        \index{_=\magicvertname}%
+        \index{_magicvertname=\magicvertname}%
       \else
         \index{_=\string\verb+\string#2+}%
       \fi
     \else
       \ifx\second at arg\CLSLpipe
-        \index{_=\magicvertname{} (#1)}%
+        \index{_magicvertname=\magicvertname{} (#1)}%
       \else
         \index{_=\string\verb+\string#2+ (#1)}%
       \fi
@@ -3339,36 +3695,46 @@
   }
 \makeatother
 
-% If we have the multicol package, typeset the index in three columns instead
-% of the usual two.
-\ifhavemulticol
-  \makeatletter
-  \renewenvironment{theindex}{%
-    \clearpage
-    \section*{\indexname}
+% Locally disable indexing.  This is intended for tables of symbols
+% containing exclusively non-descriptive names.
+\newenvironment{indexingoff}{\def\index##1{}}{}
 
-    If you're having trouble locating a symbol, try looking under
-    ``T'' for ``\texttt{\string\text}$\ldots$''.  Many text-mode
-    commands begin with that prefix.  Also, accents are shown
-    over/under a gray box (e.g.,~``\,\blackacchack{\'}\,''
-    for~``\texttt{\string\'}'').
+% Typeset the index in three columns instead of the usual two.
+\makeatletter
+\renewenvironment{theindex}{%
+  \clearpage
+  \chapter*{\indexname}
+  Similar-looking glyphs are compressed into a single index entry with
+  a superscript ``\textcolor{Green}{$^+$}'' indicating that glyph
+  variations exist.
+\ifcomplete
+  For example, the entry ``integral, contour
+  ($\oint$)\textcolor{Green}{$^+$}\,'' presents only ``$\oint$'' but
+  indicates that variations also are available.  In this case, those
+  variations are ``$\WASYoint$'', ``$\ABXointop$'', ``\MNStoint'',
+  ``\FDSYMtoint'', ``\STIXtointslop\,'', and ``\CMUPointT\,''---essentially
+  font differences along the lines of ``A''
+  vs.~``{\usefont{T1}{phv}{m}{n}A}'' vs.~``{\usefont{T1}{pzc}{m}{n}A}''\@.
+\fi    % complete test
+  Substantially different glyphs with the same name are not merged.
+\ifcomplete
+  For example, both ``$\varprod$'' and ``\FDSYMtvarprod'' are presented for
+  ``product''.
+\fi    % complete test
 
-    Some symbol entries appear to be listed repeatedly.  This happens
-    when multiple packages define identical (or nearly identical)
-    glyphs with the same symbol name.%
-\ifAMS\ifABX
-    \footnote{This occurs frequently between \pkgname{amssymb} and
-    \pkgname{mathabx}, for example.}
-\fi\fi
-    \setlength{\columnsep}{1em}%
-    \begin{multicols}{3}%
-    \let\item\@idxitem
-  }{%
-    \end{multicols}%
-  }
-  \makeatother
-\fi
+  Accents are shown over/under a gray box (e.g.,~``\,\blackacchack{\'}\,''
+  for ``accents, acute'').  Symbols appearing in a table that spans pages
+  sometimes are associated with all of the pages that table covers.  The
+  author hopes to correct this issue in a future version of the \doctitle.
 
+  \setlength{\columnsep}{1em}%
+  \begin{multicols}{3}%
+  \let\item\@idxitem
+}{%
+  \end{multicols}%
+}
+\makeatother
+
 % Define a counter to keep track of how many symbols are listed.
 % Output this counter to the log file at the end of each run.
 % Define \prevtotalsymbols to be the total number of symbols from
@@ -3402,8 +3768,8 @@
 % index.  (See below.)  If we don't have color.sty, use black boxes.
 \IfStyFileExists*{color}
   {\usepackage{color}
-   \newcommand*{\graybox}{\textcolor[gray]{0.7}{\rule[-\letteradp]{\letterawd}{\letteraht}}}}
-  {\newcommand*{\graybox}{\rule[-\letteradp]{\letterawd}{\letteraht}}}
+   \DeclareRobustCommand*{\graybox}{\textcolor[gray]{0.7}{\rule[-\letteradp]{\letterawd}{\letteraht}}}}
+  {\DeclareRobustCommand*{\graybox}{\rule[-\letteradp]{\letterawd}{\letteraht}}}
 
 % Define \blackacc to display an accented box, given an accent command.
 % Define \blackacchack to display an accented "a" and then black out
@@ -3417,16 +3783,20 @@
 \settodepth{\letteradp}{a}
 \advance\letteradp by 0.06pt    % In Computer Modern, "a" extends slightly below its bounding box.
 \advance\letteraht by \letteradp
-\gdef\blackacchack#1{#1a\llap{\graybox}}
-\gdef\blackacc#1{#1{\graybox}}
-\gdef\blackacctwo#1{#1{\graybox}{\graybox}}
+\DeclareRobustCommand*{\blackacchack}[1]{#1a\llap{\graybox}}
+\DeclareRobustCommand*{\blackacc}[1]{#1{\graybox}}
+\DeclareRobustCommand*{\blackacctwo}[1]{#1{\graybox}{\graybox}}
 
 % Symbol+verbatim for various types of symbols
 \def\E#1{%
   \begingroup
     \lccode`|=`\\
-    \def\EStruename{ES#1T}
-    \lowercase{\incsyms\index{#1=\string\verb+\string|#1+ (\string|\EStruename)}}
+    \def\EStruename{ES#1T}%
+    \ifhavespverbatim
+      \lowercase{\incsyms\index{#1=\string\spverb+\string|#1+ (\string|\EStruename)}}%
+    \else
+      \lowercase{\incsyms\index{#1=\string\verb+\string|#1+ (\string|\EStruename)}}%
+    \fi
   \endgroup
   \csname ES#1T\endcsname & \csname ES#1D\endcsname &
   \ttfamily\expandafter\string\csname#1\endcsname
@@ -3440,8 +3810,14 @@
 \def\Jiv#1#2{\incsyms\indexcommand{#1}{\fontencoding{T4}\selectfont#1#2} &
   \ttfamily\string#1\string{#2\string}}
 \makeatletter
-  \def\K at opt@arg[#1]#2{\incsyms\indexcommand[\string#1]{#2}#1 &\ttfamily\string#2}
-  \def\K at no@opt at arg#1{\incsyms\indexcommand[\string#1]{#1}#1 &\ttfamily\string#1}
+  \def\K at opt@arg[#1]#2{%
+    \incsyms\indexcommand[\noexpand\noexpand\noexpand#1]{#2}%
+    #1 &\ttfamily\string#2%
+  }
+  \def\K at no@opt at arg#1{%
+    \incsyms\indexcommand[\detokenize{#1}]{#1}%
+    #1 &\ttfamily\string#1%
+  }
   \def\K{\@ifnextchar[{\K at opt@arg}{\K at no@opt at arg}}
 \makeatother
 \def\KED[#1][#2][#3]#4{\incsyms\indexcommand[#1]{#2}#3 &\ttfamily\string#4}
@@ -3456,7 +3832,11 @@
 }
 \def\Kfeyn#1{\incsyms\indexcommand[\string\feyn{#1}]{\feyn{#1}}\feyn{#1} &\ttfamily\string\feyn\string{\string#1\string}}
 \def\Kp#1{\incsyms\indexpunct[$#1$]{#1}#1 &\ttfamily\string#1}
-\def\Kpig#1{\incsyms\index{pigpenfont #1=\string\verb+{\string\pigpenfont\space#1}+\space(\string\CLSLpig{#1})}\CLSLpig{#1} &\ttfamily\string{\string\pigpenfont\space\string#1\string}}
+\def\Kpig#1{%
+  \incsyms
+  \index{pigpenfont #1=\string\verb+{\string\pigpenfont\space#1}+\space(\string\CLSLpig{#1})}%
+  \CLSLpig{#1} & \ttfamily\string{\string\pigpenfont\space\string#1\string}%
+}
 \def\Ks#1{\incsyms\indexcommand[\string\encone{\string#1}]{#1}{\encone{#1}} &\ttfamily\string#1$^*$}
 \def\Kt#1{\incsyms\indexcommand[\string\encone{\string#1}]{#1}{\encone{#1}} &\ttfamily\string#1}
 \def\Kv#1{\incsyms\indexcommand[\string\encfive{\string#1}]{#1}{\encfive{#1}} &\ttfamily\string#1}
@@ -3476,6 +3856,16 @@
   \incsyms\indexcommand[\string{\string\usefont{OT1}{rojud}{m}{n}\string#1\string}]{#1}%
   \fontsize{36}{36}\usefont{OT1}{rojud}{m}{n}#1 & \ttfamily\string#1
 }
+\def\KfaReg#1{%
+  \incsyms
+  \indexcommand[{\string#1[regular]}]{#1[regular]}#1[regular] & \ttfamily\string#1[regular]%
+}
+\def\Klcirc#1{%
+  \incsyms
+  \indexcommand[\protect\uselcircuit\string{#1\string}]{\usebox{\csname#1\endcsname}}%
+  \uselcircuit{#1}
+  & \ttfamily\string\usebox\string{\expandafter\string\csname#1\endcsname\string}
+}
 \makeatletter
   \def\N at opt@arg[#1]#2{\incsyms\indexcommand[$\string#1$]{#2}$#1$ & $\Big#1$ &\ttfamily\string#2}
   \def\N at no@opt at arg#1{\incsyms\indexcommand[$\string#1$]{#1}$#1$ & $\Big#1$ &\ttfamily\string#1}
@@ -3494,6 +3884,18 @@
   \def\Np{\@ifnextchar[{\Np at opt@args}{\Np at no@opt at args}}
   \def\Nbig[#1]#2{\incsyms\indexcommand[$\string\Big\string#1$]{#2}$#1$ & $\Big#1$ &\ttfamily\string#2}
 \makeatother
+\def\Nlogix#1{%
+  \incsyms
+  \bgroup
+    \expandafter\let\csname#1\endcsname=\relax
+    \edef\next{\noexpand\indexcommand[\csname#1\endcsname]{\csname#1\endcsname}}%
+    \next
+  \egroup
+  \csname#1\endcsname
+  & \csname#1Big\endcsname
+  & \ttfamily\expandafter\string\csname#1\endcsname
+}
+\def\Nlogixii#1{\Nlogix{Opn#1} & \Nlogix{Cls#1}}
 \def\Mt#1{\incsyms\indexcommand[\string\metra\string#1]{#1}\metra#1 &\ttfamily\string#1}
 \makeatletter
   \def\Q at opt@arg[#1]#2{\incsyms\indexaccent[\string\blackacchack{\string#1}]{#2}#1{A}#1{a} &
@@ -3517,7 +3919,7 @@
 \ifFC
   \def\Qiv#1#2{\incsyms\indexaccent[\string\encfour{\string\blackacchack{\string#1}}]{#1}\encfour{#1{A}#1{a}} &
                \ttfamily\string#1\string{A\string}\string#1\string{a\string}$^#2$}
-  \def\QivBAR#1{\incsyms\index{_=\string\magicVertname{}
+  \def\QivBAR#1{\incsyms\index{_magicVertname=\string\magicVertname{}
                 (\string\encfour{\string\blackacchack{\string\FCbar}})}
                 \encfour{\FCbar{A}\FCbar{a}} &
                 \ttfamily\string\|\string{A\string}\string\|\string{a\string}$^#1$}
@@ -3538,22 +3940,28 @@
   \def\R{\@ifnextchar[{\R at opt@arg}{\R at no@opt at arg}}
 \makeatother
 \def\Tm#1{\incsyms\indexcommand{\maya}$\mayadigit{#1}$ &\ttfamily\string\maya\string{#1\string}}
-\def\Tmoon#1{\incsyms\indexcommand{\MoonPha}\MoonPha{#1} &\ttfamily\string\MoonPha\string{#1\string}}
+\def\Tmoon#1{%
+  \incsyms\indexcommand[\noexpand\noexpand\noexpand\MoonPha{#1}]{\MoonPha{#1}}\MoonPha{#1} &
+  \ttfamily\string\MoonPha\string{#1\string}}
 \def\Tarr#1#2{%
   \incsyms\indexcommand[\csname adfarrow#1\endcsname#2]{\adfarrow#1#2}\csname adfarrow#1\endcsname{#2} &
   \ttfamily\string\adfarrow#1#2%
 }
 \def\Tast#1{%
-  \incsyms\indexcommand[\adfast{#1}]{\adfast{#1}}\adfast{#1} &
+  \incsyms\indexcommand[\noexpand\noexpand\noexpand\adfast{#1}]{\adfast{#1}}\adfast{#1} &
   \ttfamily\string\adfast\string{#1\string}%
 }
 \def\Tbul#1{%
-  \incsyms\indexcommand[\adfbullet{#1}]{\adfbullet{#1}}\adfbullet{#1} &
+  \incsyms\indexcommand[\noexpand\noexpand\noexpand\adfbullet{#1}]{\adfbullet{#1}}%
+  \adfbullet{#1} &
   \ttfamily\string\adfbullet\string{#1\string}%
 }
 \def\Tding#1{%
-  \incsyms\indexcommand[\ding{#1}]{\ding{#1}}\ding{#1}\indexcommand{\ding} &
-  \ttfamily\string\ding\string{#1\string}%
+  \incsyms
+  \indexcommand[\protect\ding{#1}]{\ding{#1}}%
+  \indexcommand{\ding}%
+  \ding{#1}
+  & \ttfamily\string\ding\string{#1\string}%
 }
 \def\Tknit#1{%
   \incsyms\indexcommand[\protect\textknit{#1}]{\textknit{#1}}\textknit{#1}\indexcommand{\textknit} &
@@ -3560,15 +3968,16 @@
   \ttfamily\string\textknit\string{#1\string}%
 }
 \def\Tpi#1#2{%
-  \incsyms\indexcommand[\Pisymbol{#1}{#2}]{\Pisymbol{#1}{#2}}\Pisymbol{#1}{#2}\indexcommand{\Pisymbol} &
+  \incsyms\indexcommand[\protect\Pisymbol{#1}{#2}]{\Pisymbol{#1}{#2}}\Pisymbol{#1}{#2}%
+  \indexcommand{\Pisymbol} &
   \ttfamily\string\Pisymbol\string{#1\string}\string{#2\string}%
 }
 \def\Tutf#1{%
-  \incsyms\indexcommand[\protect\usym{#1}]{\usym{#1}}\usym{#1}\indexcommand{\usym} &
+  \incsyms\indexcommand[\usym{#1}]{\usym{#1}}\usym{#1}\indexcommand{\usym} &
   \ttfamily\string\usym\string{#1\string}%
 }
 \def\Tutfw#1{%
-  \incsyms\indexcommand[\protect\usymW{#1}{0.75em}]{\usym{#1}}\usymW{#1}{0.75em}\indexcommand{\usym} &
+  \incsyms\indexcommand[\usymW{#1}{0.75em}]{\usym{#1}}\usymW{#1}{0.75em}\indexcommand{\usym} &
   \ttfamily\string\usym\string{#1\string}%
 }
 \def\Tld#1#2{%
@@ -3578,31 +3987,69 @@
   & \ttfamily\string\lilyDynamics\string{#2\string}%
 }
 \def\Twflag#1{%
-  \incsyms\indexcommand[\protect\worldflag{#1}]{\worldflag{#1}}\worldflag{#1}\indexcommand{\worldflag} &
+  \incsyms\indexcommand[\protect\worldflag{#1}]{\worldflag{#1}}%
+  \worldflag{#1}\indexcommand{\worldflag} &
   \ttfamily\string\worldflag\string{#1\string}%
 }
 \def\Ttwem#1#2{%
   \incsyms
   \xdef\twemname{\detokenize{#1}}%
-  \index{\twemname=\twemname\ (\protect\twemoji{#2})}%
-  \indexcommand[\protect\twemoji{#2}]{\twemoji{\twemname}}%
+  \index{\twemname=\twemname\space (\twemoji{#2})}%
+  \indexcommand[\twemoji{#2}]{\twemoji{\twemname}}%
   \indexcommand{\twemoji}%
   \twemoji{#2} &
-  \frenchspacing\ttfamily\string\twemoji\string{\twemname\string}%
+  \frenchspacing\ttfamily\string\twemoji\string{#1\string}%
 }
+\def\Tsilly#1{%
+  \incsyms
+  \ifnum#1<10
+    \index{sillystep{0#1}=\string\verb+\string\sillystep{#1}+\space(\string\sillystep{#1})}%
+  \else
+    \index{sillystep{#1}=\string\verb+\string\sillystep{#1}+\space(\string\sillystep{#1})}%
+  \fi
+  \sillystep{#1} & \ttfamily\string\sillystep\string{#1\string}%
+}
+\def\TpgfornV#1{%
+  \incsyms
+  \indexcommand[\protect\pgfornVec{#1}]{\pgfornament{#1}}%
+  \pgfornVec{#1}%
+  \indexcommand{\pgfornament} &
+  \ttfamily\string\pgfornament\string{#1\string}%
+}
+\def\TpgfornVwide#1{%
+  \newpgfornamentfamily{vectorian}%
+  \pgfornament[height=10pt,ydelta=-3pt]{#1}%
+  \indexcommand{\pgfornament} &
+  \ttfamily\string\pgfornament\string{#1\string}%
+}
+\def\TpgfornH#1{%
+  \incsyms
+  \indexcommand[\protect\pgfornHan{#1}]{\pgfornament{#1}}%
+  \pgfornHan{#1}%
+  \indexcommand{\pgfornament} &
+  \ttfamily\string\pgfornament\string{#1\string}%
+}
 \makeatletter
   % Allow underscores in the argument to \lilyGlyph.
   \def\Tlg{\CLSLcleanarg\Tlg at helper}
-  % \lilyglyphs glyph names are too long to index so we use "..." as a proxy.
   \def\Tlg at helper#1{%
     \incsyms
-    \index{lilyGlyph=\string\verb+\string\lilyGlyph{+\dots\string\verb+}+ (\protect\lilyGlyph{#1})}%
+    \indexcommand[\protect\lilyGlyph{#1}]{\lilyGlyph{#1}}%
     \lilyGlyph{#1}%
     & \ttfamily\string\lilyGlyph\string{#1\string}%
   }
+\newcommand{\V}[2][]{%
+  \incsyms
+  \def\first at arg{#1}%
+  \ifx\first at arg\@empty
+  \else
+    \indexcommand[#1]{#2}#1%
+  \fi
+  & \indexcommand[#2]{#2}#2%
+  & \ttfamily\string#2%
+}
 \makeatother
-\newcommand{\V}[2][]{\incsyms\indexcommand[#1]{#2}#1 & \indexcommand[#2]{#2}#2 &\ttfamily\string#2}
-\newcommand{\Vl}[1]{\incsyms\indexcommand{#1}#1 & & \ttfamily\string#1}
+\newcommand{\Vl}[1]{\incsyms\indexcommand[#1]{#1}#1 & & \ttfamily\string#1}
 \newcommand{\Vpl}[1]{\incsyms\indexpunct[$#1$]{#1}#1 & & \ttfamily\string#1}
 \makeatletter
   \newcommand{\VV}[2]{%
@@ -3626,10 +4073,14 @@
 }
 \def\Wf#1#2{\incsyms\indexcommand{#1}$#1{#2}$ &\ttfamily\string#1\string{#2\string}}
 \def\Ww#1#2#3{\incsyms\indexcommand{#2}$#1{#3}$ &\ttfamily\string#2\string{#3\string}}
-\def\Wul#1#2#3{%
-  \incsyms\indexaccent[$\string\blackacctwo{\string#1}$]{#1}%
-  $#1{#2}{#3}$ &\ttfamily\string#1\string{#2\string}\string{#3\string}}
 \makeatletter
+  \def\Wul at no@opt at arg#1#2#3{%
+    \incsyms\indexaccent[$\string\blackacctwo{\string#1}$]{#1}%
+    $#1{#2}{#3}$ &\ttfamily\string#1\string{#2\string}\string{#3\string}}
+  \def\Wul at opt@arg[#1]#2#3#4{%
+    \incsyms\indexaccent[$\string\blackacctwo{\string#1}$]{#2}%
+    $#1{#3}{#4}$ &\ttfamily\string#2\string{#3\string}\string{#4\string}}
+  \def\Wul{\@ifnextchar[{\Wul at opt@arg}{\Wul at no@opt at arg}}
   \def\X at opt@arg[#1]#2{\incsyms\indexcommand[$\string#1$]{#2}$#1$ &\ttfamily\string#2}
   \def\X at no@opt at arg#1{\incsyms\indexcommand[$\string#1$]{#1}$#1$ &\ttfamily\string#1}
   \def\X{\@ifnextchar[{\X at opt@arg}{\X at no@opt at arg}}
@@ -3808,9 +4259,36 @@
   name for each symbol is shown in this table.
 
   All \TWEM\ symbols are implemented as PDF\index{PDF} graphics, not
-  with a font.
+  with a font.  See also the \pkgname{hwemoji} package, which enables
+  direct Unicode entry of emoji characters in \pdflatex; the
+  \pkgname{emoji} package, which provides a \lualatex interface to
+  different underlying emoji fonts; and the \pkgname{emo} package,
+  which uses a font if possible, otherwise PDF\index{PDF} graphics
 }
 
+\newcommand{\pdfmsymmessage}{%
+  \PDFMSYM\ symbols are implemented with PDF\index{PDF} literals
+  instead of (or sometimes in conjunction) with a font.  All symbols
+  can be rendered by \pdflatex and \lualatex, some by \xelatex, and
+  none by most other \tex backends%
+}
+
+\newcommand{\luaxemessage}[1]{%
+  #1 requires either \lualatex or \xelatex%
+}
+
+\newcommand{\childmessage}{%
+  All \CHILD\ symbols are implemented with \TikZ\ graphics, not with a
+  font.  Not shown above, each symbol takes three arguments: a scale
+  factor, a line color, and a line thickness.  \seedocs{\CHILD}%
+}
+
+\newcommand{\worldflagsmessage}{%
+  All \WFLAGS\ symbols are implemented with \TikZ\ graphics, not with
+  a font.  The package provides a number of options for controlling
+  flag size and style.  \seedocs{\WFLAGS}%
+}
+
 % Define an environment in which to write a single table of symbols.  The
 % environment looks a lot like a table, but it doesn't float, and it gets
 % an entry in the table of contents as opposed to the list of tables.
@@ -3831,7 +4309,7 @@
     \begin{center}
     \refstepcounter{table}%
     \phantomsection
-    \addcontentsline{toc}{subsection}{%
+    \addcontentsline{toc}{section}{%
       \protect\numberline{\tablename~\thetable:}{#2}}%
     \@makecaption{\fnum at table}{#2}\medskip
     \let\next=\relax
@@ -3872,7 +4350,7 @@
     \let\LT at array=\origLT at array
     \let\LT at start=\origLT at start
 %
-    \addcontentsline{toc}{subsection}{%
+    \addcontentsline{toc}{section}{%
       \protect\numberline{\tablename~\thetable:}{#2}}%
     \@makecaption{\fnum at table}{#2}%
     \gdef\lt at indexed{}%
@@ -3902,7 +4380,7 @@
 \makeatletter
 \newcommand{\ltindex}[1]{%
   \index{#1|(}%
-  \@cons{\lt at indexed}{{#1|)}}%
+  \@cons{\lt at indexed}{{\detokenize{#1|)}}}%
 }
 \newcommand{\ltidxboth}[2]{\ltindex{#1 #2}\ltindex{#2>#1}}
 \makeatother
@@ -3918,19 +4396,14 @@
   \end{table}
 }
 
-% Do the same as the above, but typeset the table in landscape mode (or
-% not, if we haven't loaded the rotating package).
-\ifhaverotating
-  \newenvironment{nonsymtableL}[1]{%
-    \begin{sidewaystable}[htbp]
-    \centering
-    \caption{#1}\medskip
-  }{%
-    \end{sidewaystable}
-  }
-\else
-  \newenvironment{nonsymtableL}{\begin{nonsymtable}}{\end{nonsymtable}}
-\fi
+% Do the same as the above, but typeset the table in landscape mode.
+\newenvironment{nonsymtableL}[1]{%
+  \begin{sidewaystable}[htbp]
+  \centering
+  \caption{#1}\medskip
+}{%
+  \end{sidewaystable}
+}
 
 % Define a table environment that's just like nonsymtable except that
 % it allows page breaks.
@@ -3943,30 +4416,21 @@
 }
 \makeatother
 
-% Define a macro that alters the width of the subsection number in the
-% table of contents for all subsequent entries.  This is needed because
-% "real" subsections should use the width of "9.9" as the width of their
-% label while "table" subsections should use the width of "Table 999:"
-% for their label.  Currently, no section mixes "real" and "table"
-% subsections.
-\makeatletter
-\newcommand{\toclabelwidth}{3em}
-\renewcommand{\numberline}[1]{\hb at xt@\toclabelwidth{#1\hfil}}
-\newcommand{\setsectionlabelwidth}[1]{%
-  \settowidth{\@tempdimc}{#1}%
+% Do not reset table numbers across chapters boundaries.
+\counterwithout{table}{chapter}
+
+% Format sections numbers and table numbers differently in the table of
+% contents (because table numbers are prefixed with "Table").
+\newcommand{\tablesections}{%
   \addtocontents{toc}{%
-    {\catcode`\string\!=6
-     \gdef\string\numberline!1{%
-     \string\hb at xt@\the\@tempdimc{!1\hfil}}}%
+    \settowidth{\cftsecnumwidth}{Table 999:~}%
   }%
 }
-\makeatother
-\newcommand{\tablesubsections}{%
-  \setsectionlabelwidth{Table~999:\hspace*{0.75em}}}
-\newcommand{\realsubsections}{%
-  \setsectionlabelwidth{9.9\quad}}
 \newcommand{\realsections}{%
-  \setsectionlabelwidth{\textbf{9\quad}}}
+  \addtocontents{toc}{%
+    \settowidth{\cftsecnumwidth}{99.9~}%
+  }%
+}
 
 % Paragraphs with tall symbols should get a little extra interline spacing.
 \newenvironment{morespacing}[1]{\advance\baselineskip by #1\relax}{\par}
@@ -4044,7 +4508,7 @@
    }
    \AtBeginDocument{%
      \hypersetup{%
-       pdftitle={The \doctitle},
+       pdftitle={The Comprehensive LaTeX Symbol List},
        pdfauthor={Scott Pakin},
        pdfsubject={List of \prevtotalsymbols\ symbols that can be typeset using LaTeX},
        pdfkeywords={LaTeX, symbols, glyphs, characters, fonts, typesetting, macros,
@@ -4067,7 +4531,7 @@
      pdfcontacturl={http://www.pakin.org/\xmptilde scott/},
      pdfcopyright={Copyright (C) 2007-\the\year, Scott Pakin},
      pdflicenseurl={http://www.latex-project.org/lppl/},
-     pdfversionid={14.0},
+     pdfversionid={15.0},
      pdflang={en-US},
      pdfmetalang={en-US}
    }
@@ -4084,7 +4548,7 @@
            \dotfil~\ignorespaces}%
 \@ifundefined{pdfbookmark}{\def\pdfbookmark[#1]#2#3{}}{}
 \newcommand{\indexheading}[1]{%
-  \pdfbookmark[2]{#1}{indexheading.#1}%
+  \pdfbookmark[1]{#1}{indexheading.#1}%
   {\centering\bfseries#1\nopagebreak\par}%
 }
 \makeatother
@@ -4096,6 +4560,7 @@
 % Include "Figure", "Table", and "Section" within hyperlinks.
 \labelformat{figure}{Figure~#1}
 \labelformat{table}{Table~#1}
+\labelformat{chapter}{Chapter~#1}
 \labelformat{section}{Section~#1}
 \labelformat{subsection}{Section~#1}
 
@@ -4104,8 +4569,19 @@
 \begin{document}
 \sloppy
 \usefont{OT1}{cmr}{m}{n}\selectfont
-\maketitle
 
+% Import the title-page contents from either title-letter or title-a4,
+% as specified by \titlefile.  If \titlefile is undefined, include a
+% placeholder title.
+\begin{titlepage}
+  \makeatletter
+  \@ifundefined{titlefile}{%
+    \maketitle
+  }{%
+    \input{\titlefile}%
+  }%
+\end{titlepage}
+
 \begin{abstract}
   This document lists \approxcount\prevtotalsymbols{} symbols and the
   corresponding \latex{} commands that produce them.  Some of these
@@ -4114,7 +4590,7 @@
   distribution and that therefore need to be installed.  All of the
   fonts and packages used to prepare this document---as well as this
   document itself---are freely available from the \CTANfull
-  (\url{http://www.ctan.org/}).
+  (\url{https://www.ctan.org/}).
 \end{abstract}
 
 % Typeset a table of contents, temporarily disabling nested hyperlinks
@@ -4125,27 +4601,6 @@
 \tableofcontents
 \endgroup
 
-% Now that we've output the table of contents, let's make \section start a
-% new page.  I toyed with the idea of changing the documentclass from
-% article to report, but I like having the abstract on the same page as
-% the title and the start of the table of contents; I want the tables
-% numbered consecutively throughout the document; and I like the smaller,
-% less gaudy section headings the article class offers.  In short, article
-% seems a better fit than report.
-\makeatletter
-\let\origsection=\section
-\renewcommand\section{%
-  \@startsection {section}{1}{\z@}%
-                 {-3.5ex \@plus -1ex \@minus -.2ex}%
-                 {2.3ex \@plus.2ex}%
-                 {\realsections
-                  \clearpage
-                  \phantomsection
-                  \normalfont\Large\bfseries}%
-}
-\makeatother
-
-
 % Define an integral containing a dash or a double-dash.
 \def\Xint#1{\mathchoice
    {\XXint\displaystyle\textstyle{#1}}%
@@ -4222,7 +4677,6 @@
 \indexMA[\AMSmcal{M}]{Mellin transform}
 \indexMA[\mathbbm{M}]{Minkowski space}
 \indexMA[\mathbbm{N}]{natural numbers}
-\indexMA[\AMSmcal{O}]{big O}
 \indexMA[\AMSmcal{O}]{local ring}
 \indexMA[\mathbbm{O}]{octonions}
 \indexMA[\mathbbm{P}]{projective space}
@@ -4242,52 +4696,16 @@
 \indexMA{Schwartz distribution spaces}
 \indexMA{script letters}
 
-% Provide "see ..."s for every accent whose name I happen to know.
-\index{acute=acute (\blackacchack\')|see{accents}}
-\index{arc=arc (\blackacchack\newtie)|see{accents}}
-\index{breve=breve (\blackacchack\u)|see{accents}}
-\index{caron=caron (\blackacchack\v)|see{accents}}
-\index{cedilla=cedilla (\blackacc\c)|see{accents}}
-\index{circumflex=circumflex (\blackacchack\^)|see{accents}}
-\ifCBEL
-  \index{comma-below accent=comma-below accent (\blackacchack\cb)|see{accents}}
-\fi    % CBEL test
-\index{diaeresis=di\ae{}resis (\blackacchack\")|see{accents}}
-\index{dot accent=dot accent (\blackacchack\. or \blackacc\d)|see{accents}}
-\index{double acute=double acute (\blackacchack\H)|see{accents}}
-\index{grave=grave (\blackacchack\`)|see{accents}}
-\index{hacek=h\'{a}\v{c}ek (\blackacchack\v)|see{accents}}
-\ifVIET
-  \index{hook accent=hook accent (\encfive{\blackacchack\h})|see{accents}}
-\fi    % VIET test
-\index{Hungarian umlaut=Hungarian umlaut (\blackacchack\H)|see{accents}}
-\index{krouzek=krou\v{z}ek (\blackacchack\r)|see{accents}}
-\DeclareRobustCommand{\showmacron}{\blackacchack\=}   % Can't index "=".
-\index{macron=macron (\showmacron)|see{accents}}
-\index{ogonek=ogonek (\encone{\blackacc\k})|see{accents}}
-\index{ring=ring (\blackacchack\r)|see{accents}}
-\ifCBEL
-  \index{Romanian comma-belo accent=Romanian comma-belo accent (\blackacchack\cb)|see{accents}}
-\fi    % CBEL test
-\index{trema=trema (\blackacchack\")|see{accents}}
-\index{umlaut=umlaut (\blackacchack\")|see{accents}}
-
-% Provide references for alternate accent names listed under "accents".
-\index{accents>hacek=h\'{a}\v{c}ek|see{accents, caron}}
-\index{accents>Hungarian umlaut|see{accents, double acute}}
-\index{accents>krouzek=krou\v{z}ek|see{accents, ring}}
-\index{accents>Romanian comma-belo accent|see{accents, comma-below}}
-\index{accents>trema|see{accents, di\ae{}resis}}
-\index{accents>umlaut|see{accents, di\ae{}resis}}
-
 % Provide "see ..."s for various logical and set operators.
 \index{logical operators>and|see{\texttt{\string\wedge}}}
 \index{logical operators>or|see{\texttt{\string\vee}}}
 \index{logical operators>not|see{\texttt{\string\neg} \emph{and} \texttt{\string\sim}}}
+\index{logical operators>xor|see{\texttt{\string\oplus}}}
 \index{operators>logical|see{logical operators}}
 \index{and|see{\texttt{\string\wedge}}}
 \index{or|see{\texttt{\string\vee}}}
 \index{not|see{\texttt{\string\neg}}}
+\index{xor|see{\texttt{\string\oplus}}}
 \index{conjunction, logical|see{\texttt{\string\wedge} \emph{and} \texttt{\string\&}}}
 \index{disjunction|see{\texttt{\string\vee}}}
 \index{negation|see{\texttt{\string\neg} \emph{and} \texttt{\string\sim}}}
@@ -4318,6 +4736,13 @@
   \index{multiplicative disjunction|see{\texttt{\string\bindnasrepma}, \texttt{\string\invamp}, and \texttt{\string\parr}}}
 \fi    % complete test
 
+% Provide "see ..."s for various delimiters.
+\index{angle brackets|see{delimiters}}
+\index{brackets|see{delimiters}}
+\index{braces|see{delimiters}}
+\index{parentheses|see{delimiters}}
+\index{square brackets|see{delimiters}}
+
 % Provide "see ..."s for various punctuation marks.
 \index{paragraph mark|see{\texttt{\string\P}}}
 \index{pilcrow|see{\texttt{\string\P}}}
@@ -4325,7 +4750,7 @@
 \index{dollar sign|see{\texttt{\string\$}}}
 \index{cents|see{\texttt{\string\textcent}}}
 \index{hash mark|see{\texttt{\string\#} \textit{and} \texttt{\string\hash}}}
-\index{ampersand|see{\texttt{\string\&}}}
+\index{ampersand=ampersand (\&)|see{\texttt{\string\&}}}
 \index{section mark|see{\texttt{\string\S}}}
 \index{caret|see{\texttt{\string\^}}}
 \index{swung dash|see{\texttt{\string\sim}}}
@@ -4338,29 +4763,55 @@
 \index{falsum|see{\texttt{\string\bot}}}
 
 % Provide "see ..."s for various musical terms.
-\index{quaver|see{musical symbols}}
-\index{semiquaver|see{musical symbols}}
-\index{demisemiquaver|see{musical symbols}}
-\index{semibreve|see{musical symbols}}
-\index{minim|see{musical symbols}}
-\index{crotchet|see{musical symbols}}
-\index{whole note|see{musical symbols}}
-\index{half note|see{musical symbols}}
-\index{quarter note|see{musical symbols}}
-\index{eighth note|see{musical symbols}}
-\index{sixteenth note|see{musical symbols}}
-\index{thirty-second note|see{musical symbols}}
 \index{accidentals|see{musical symbols}}
+\index{sharp=sharp ($\sharp$)|see{musical symbols}}
+\index{flat=flat ($\flat$)|see{musical symbols}}
+\index{natural=natural ($\natural$)|see{musical symbols}}
 \index{rests|see{musical symbols}}
 \index{articulations|see{musical symbols}}
+\ifLILY
+  \index{whole note=whole note (\wholeNote)|see{musical symbols}}
+  \index{half note=half note (\halfNote)|see{musical symbols}}
+  \index{quarter note=quarter note (\quarterNote)|see{musical symbols}}
+  \index{eighth note=eighth note (\eighthNote)|see{musical symbols}}
+  \index{sixteenth note=sixteenth note (\sixteenthNote)|see{musical symbols}}
+  \index{thirty-second note=thirty-second note (\thirtysecondNote)|see{musical symbols}}
+  \index{quaver=quaver (\quaver)|see{musical symbols}}
+  \index{semiquaver=semiquaver (\semiquaver)|see{musical symbols}}
+  \index{demisemiquaver=demisemiquaver (\demisemiquaver)|see{musical symbols}}
+  \index{semibreve=semibreve (\semibreve)|see{musical symbols}}
+  \index{minim=minim (\minim)|see{musical symbols}}
+  \index{crotchet=crotchet (\crotchet)|see{musical symbols}}
+  \index{breve=breve (\lilyGlyph{noteheads.sM1double})|see{musical symbols}}
+  \index{fermata=fermata (\fermata)|see{musical symbols}}
+\else % LILY test
+  \index{whole note|see{musical symbols}}
+  \index{half note|see{musical symbols}}
+  \index{quarter note|see{musical symbols}}
+  \index{eighth note|see{musical symbols}}
+  \index{sixteenth note|see{musical symbols}}
+  \index{thirty-second note|see{musical symbols}}
+  \index{quaver|see{musical symbols}}
+  \index{semiquaver|see{musical symbols}}
+  \index{demisemiquaver|see{musical symbols}}
+  \index{semibreve|see{musical symbols}}
+  \index{minim|see{musical symbols}}
+  \index{crotchet|see{musical symbols}}
+  \index{breve|see{musical symbols}}
+  \index{fermata|see{musical symbols}}
+\fi   % LILY test
 \ifMSX
-  \index{punctum|see{\textsf{musixgre}}}
-  \index{virga|see{\textsf{musixgre}}}
-  \index{apostropha|see{\textsf{musixgre}}}
-  \index{oriscus|see{\textsf{musixgre}}}
-  \index{quilisma|see{\textsf{musixgre}}}
-  \index{deminutum|see{\textsf{musixgre}}}
+  \index{shake=shake (\MSXshake)|see{musical symbols}}
+  \index{alla breve=alla breve (\MSXallabreve)|see{musical symbols}}
+  \index{cut time=cut time (\MSXallabreve)|see{alla breve}}
+\else
+  \index{shake|see{musical symbols}}
+  \index{alla breve|see{musical symbols}}
+  \index{cut time|see{alla breve}}
 \fi   % MSX test
+\ifMUSICOG
+  \index{segno=segno (\musSegno)|see{musical symbols}}
+\fi   % MUSICOG test
 
 % Provide a number of other useful "see ..."s.
 \index{diamonds|see{rhombuses}}
@@ -4370,13 +4821,15 @@
 \index{digits|see{numerals}}
 \index{numbers|see{numerals}}
 \index{degrees|see{\texttt{\string\textdegree}}}
+\index{pomega|see{\texttt{\string\varpi}}}
+\index{curly pi|see{\texttt{\string\varpi}}}
 \index{Cedi|see{\texttt{\string\textcolonmonetary}}}
 \index{iff=\texttt{\string\iff}|see{\texttt{\string\Longleftrightarrow}}}
-\index{derivitive, partial|see{\texttt{\string\partial}}}
+\index{derivative, partial|see{\texttt{\string\partial}}}
 \index{to=\texttt{\string\to}|see{\texttt{\string\rightarrow}}}
 \index{adjoint=adjoint (\dag)|see{\texttt{\string\dag}}}
 \index{Cartesian product|see{\texttt{\string\times}}}
-\index{tick|see{check marks}}
+\index{tick marks|see{check marks}}
 \index{supremum|see{\texttt{\string\sup}}}
 \ifAMS
   \index{implies=\texttt{\string\implies}|see{\texttt{\string\Longrightarrow}
@@ -4390,18 +4843,11 @@
   \index{transversal intersection|see{\texttt{\string\pitchfork}}}
   \index{absolute value|see{\texttt{\string\lvert} \emph{and} \texttt{\string\rvert}}}
   \index{norm|see{\texttt{\string\lVert} \emph{and} \texttt{\string\rVert}}}
-%  \index{average|see{\texttt{\string\varnothing}}}
-  \index{inverse limit|see{\texttt{\string\varprojlim}}}
   \index{proper subset/superset|see{\texttt{\string\subsetneq}\slash\texttt{\string\supsetneq}}}
   \index{probability limit=probability limit ($\displaystyle\plim_{n \to \infty}$)|see{\texttt{\string\DeclareMathOperator}}}
 \fi    % AMS test
-\ifTIPA
-%  \index{symbols>dictionary|see{symbols, phonetic}}
-%  \index{dictionary symbols|see{phonetic symbols}}
-  \index{pronunciation symbols|see{phonetic symbols}}
-\fi    % TIPA test
 \index{abzuglich=abz\"uglich|see{\texttt{\string\textdiscount}}}
-\index{diacritics|see{accents}}
+\index{diacritics|seealso{accents}}
 \index{parts per thousand|see{\texttt{\string\textperthousand}}}
 \index{thousandths|see{\texttt{\string\textperthousand}}}
 \index{millesimal sign|see{\texttt{\string\textperthousand}}}
@@ -4410,7 +4856,7 @@
 \index{cross ratio|see{\texttt{\string\textrecipe}}}
 \ifMARV
   \index{Deleatur=\texttt{\string\Deleatur}|see{\texttt{\string\Denarius}}}
-  \index{mouse|see{\texttt{\string\ComputerMouse}}}
+%  \index{mouse|see{\texttt{\string\ComputerMouse}}}
 \fi    % MARV test
 %\index{playing cards|see{card suits}}
 \ifABX
@@ -4425,17 +4871,13 @@
 \index{rationalized Planck constant|see{\texttt{\string\hbar}}}
 \index{options|see{package options}}
 \index{cardinality|see{\texttt{\string\aleph}}}
-\index{wreath product|see{\texttt{\string\wr}}}
+%\index{wreath product|see{\texttt{\string\wr}}}
 \index{reverse solidus|see{\texttt{\string\textbackslash}}}
-\index{radicals|see{\texttt{\string\sqrt} \emph{and} \texttt{\string\surd}}}
-\index{roots|see{\texttt{\string\sqrt}}}
-\index{square root|see{\texttt{\string\sqrt}}}
-\index{square root>hooked|see{\texttt{\string\hksqrt}}}
-\index{cube root|see{\texttt{\string\sqrt}}}
+\index{radicals|see{square root}}
+\index{roots|see{square root}}
+\index{cube root=cube root ($\blackacc{\sqrt[3]}$)|see{square root}}
 \ifcomplete
   \index{return|see{carriage return}}
-  \index{heads|see{faces}}
-  \index{people|see{faces}}
 \fi
 \ifTX
   \index{fish hook|see{\texttt{\string\strictif}}}
@@ -4451,18 +4893,16 @@
 \index{micro|see{\texttt{\string\textmu}}}
 \index{Angstrom unit=\AA{}ngstr\"om unit>math mode|see{\texttt{\string\mathring}}}
 \index{Angstrom unit=\AA{}ngstr\"om unit>text mode|see{\texttt{\string\AA}}}
-\index{yen|see{\texttt{\string\textyen}}}
+%\index{yen|see{\texttt{\string\textyen}}}
 \index{equilibrium|see{\texttt{\string\rightleftharpoons}}}
 \index{number sign|see{\texttt{\string\textnumero}}}
 \index{ditto marks|see{\texttt{\string\textquotedbl}}}
 \index{Weierstrass p function=Weierstrass $\wp$ function|see{\texttt{\string\wp}}}
 \index{inexact differential|see{\texttt{\string\dbar}}}
-\ifhaveslashed
-  \index{reduced quadrupole moment|see{\texttt{\string\rqm}}}
-\fi    % haveslashed
+\index{reduced quadrupole moment|see{\texttt{\string\rqm}}}
 \ifST
-  \index{banana brackets|see{\texttt{\string\llparenthesis} \emph{and} \texttt{\string\rrparenthesis}}}
-  \index{catamorphism|see{\texttt{\string\llparenthesis} \emph{and} \texttt{\string\rrparenthesis}}}
+  \index{banana brackets|see{delimiters}}
+  \index{catamorphism|see{delimiters}}
 \fi    % ST test
 \ifOTII
   \index{impulse train|see{sha}}
@@ -4469,7 +4909,6 @@
   \index{Tate-Shafarevich group|see{sha}}
 \fi
 \index{differential, inexact|see{\texttt{\string\dbar}}}
-\index{brackets|see{delimiters}}
 \ifcomplete
   \index{equivalence|see{\texttt{\string\equiv}, \texttt{\string\leftrightarrow}, \emph{and} \texttt{\string\threesim}}}
 \else
@@ -4476,7 +4915,7 @@
   \index{equivalence|see{\texttt{\string\equiv} \emph{and} \texttt{\string\leftrightarrow}}}
 \fi
 \index{vinculum|see{\texttt{\string\overline}}}
-\index{es-zet|see{\texttt{\string\ss}}}
+\index{eszett|see{\texttt{\string\ss}}}
 \index{Maxwell-Stefan diffusion coefficient|see{\texttt{\string\DH}}}
 \index{Laplacian=Laplacian ($\nabla^2$)|see{\texttt{\string\nabla}}}
 \index{Laplacian=Laplacian ($\Delta$)|see{\texttt{\string\Delta}}}
@@ -4501,10 +4940,6 @@
 \index{Kronecker product|see{\texttt{\string\otimes}}}
 \index{Kronecker sum|see{\texttt{\string\oplus}}}
 \index{ring sum|see{\texttt{\string\oplus}}}
-\ifFOUR
-  \index{do not enter|see{\texttt{\string\noway}}}
-  \index{no entry|see{\texttt{\string\noway}}}
-\fi    % FOUR test
 \index{congruent|see{\texttt{\string\equiv}}}
 \index{centigrade|see{\texttt{\string\textcelsius}}}
 \index{greatest lower bound|see{\texttt{\string\sqcap}}}
@@ -4543,10 +4978,10 @@
   \index{Swedo-Norwegian runes|see{short-twig runes}}
   \index{H\"alsinge runes|see{staveless runes}}
   %
-  \index{runes>long-branch|see{normal runes}}
-  \index{runes>Danish|see{normal runes}}
-  \index{runes>Swedo-Norwegian|see{short-twig runes}}
-  \index{runes>H\"alsinge|see{staveless runes}}
+  \subindex{runes}{long-branch|see{normal runes}}
+  \subindex{runes}{Danish|see{normal runes}}
+  \subindex{runes}{Swedo-Norwegian|see{short-twig runes}}
+  \subindex{runes}{H\"alsinge|see{staveless runes}}
 \fi   % ARUNE test
 \index{guillemotleft=\texttt{\string\guillemotleft}|see{\texttt{\string\guillemetleft}}}
 \index{guillemotright=\texttt{\string\guillemotright}|see{\texttt{\string\guillemetright}}}
@@ -4554,12 +4989,35 @@
   \index{tailed z|see{\texttt{\string\roundz}}}
   \index{ezh|see{\texttt{\string\roundz}}}
 \fi
+\ifcomplete   % Many packages define globes.
+  \index{world|see{globe}}
+\fi    % complete test
+\ifFNTAWE
+  \index{Dungeons and Dragons|see{D\&D}}
+\fi    % FNTAWE test
+\index{bullets|see{circles, squares, rhombuses, etc.}}
+\ifcomplete   % Many packages define \sqint or \smallsqint
+  \index{integrals>quaternion|see{integrals, square}}
+\fi    % complete test
+\ifcomplete   % Really just TWEM and WFLAGS
+  \index{flags>Democratic Republic of the Congo|see{flags, Congo--Kinshasa}}
+  \index{flags>Republic of the Congo|see{flags, Congo--Brazzaville}}
+  \index{flags>Maldives|see{flags, Falkland Islands}}
+  \index{flags>Ivory Coast|see{flags, C\^ote d'Ivoire}}
+  \index{flags>pirate|see{flags, Jolly Roger}}
+  \index{flags>skull and crossbones|see{flags, Jolly Roger}}
+\fi    % complete test
+\ifcomplete   % Really just typicons, twemojis, and a few others
+  \index{mobile phone|see{cell phone}}
+  \index{wheel of dharma|see{dharmachakra}}
+\fi    % complete test
+\index{vector notation|see{accents}}
 
 % Multiple packages define \multimap.
 \makeatletter
   \@ifundefined{multimap}{}{%
     \index{linear implication|see{\texttt{\string\string\string\multimap}}}
-    \index{lollipop|see{\texttt{\string\string\string\multimap}}}}
+    \index{lollipop (mathematics)|see{\texttt{\string\string\string\multimap}}}}
 \makeatother
 
 % Minutes/seconds and feet/inches are normally formed with superscripted
@@ -4612,8 +5070,6 @@
   \index{lnot=\texttt{\string\lnot}|see{\texttt{\string\neg}}}
   \index{land=\texttt{\string\land}|see{\texttt{\string\wedge}}}
   \index{lor=\texttt{\string\lor}|see{\texttt{\string\vee}}}
-  %\index{restriction=\texttt{\string\restriction}|see{\texttt{\string\upharpoonright}}}
-  \index{Doteq=\texttt{\string\Doteq}|see{\texttt{\string\doteqdot}}}
   \index{doublecup=\texttt{\string\doublecup}|see{\texttt{\string\Cup}}}
   \index{doublecap=\texttt{\string\doublecap}|see{\texttt{\string\Cap}}}
   \index{llless=\texttt{\string\llless}|see{\texttt{\string\lll}}}
@@ -4644,8 +5100,8 @@
 \index{leaf|see{\texttt{\string\textleaf}}}
 %\index{less|see{\texttt{\string\textless}}}
 \index{married|see{\texttt{\string\textmarried}}}
-\index{minus|see{\texttt{\string\textminus}}}
-\index{ohm|see{\texttt{\string\textohm}}}
+%\index{minus|see{\texttt{\string\textminus}}}
+%\index{ohm|see{\texttt{\string\textohm}}}
 %\index{paragraph|see{\texttt{\string\textparagraph}}}
 \index{recipe|see{\texttt{\string\textrecipe}}}
 %\index{registered|see{\texttt{\string\textregistered}}}
@@ -4665,21 +5121,22 @@
   \index{seagull|see{\texttt{\string\textseagull}}}
 \fi    % TIPA test
 %\index{swab|see{\texttt{\string\textswab}}}
+\index{ohm|see{omega}}
 
 
-\section{Introduction}
+\chapter{Introduction}
 \label{introduction}
-\realsubsections
+\realsections
 
 Welcome to the \doctitle!  This document strives to be your primary
 source of \latex{} symbol information: font samples, \latex{}
 commands, packages, usage details, caveats---everything needed to put
-thousands of different symbols at your disposal.  All of the fonts
-covered herein meet the following criteria:
+tens of thousands of different symbols at your disposal.  All of the
+fonts covered herein meet the following criteria:
 
 \begin{enumerate}
   \item They are freely available from the \CTANfull
-    (\url{http://www.ctan.org/}).
+    (\url{https://www.ctan.org/}).
 
   \item All of their symbols have \latexE{} bindings.  That is, a user
     should be able to access a symbol by name
@@ -4693,9 +5150,9 @@
 (\fileext{tfm}) or the \metafont\ sources (\fileext{mf}) that produce
 those font-metric files.  Some of the \ref{min-latex-support} fonts do
 include \latex\ font-definition files (\fileext{fd}).  However, what
-sets the fonts in \ref{min-latex-support} apart from the fonts in rest
-of the document is that they lack a \latex\ style file (\fileext{sty})
-that individually names each of the glyphs.
+sets the fonts in \ref{min-latex-support} apart from the fonts in the
+rest of the document is that they lack a \latex\ style file
+(\fileext{sty}) that individually names each of the glyphs.
 
 The restrictions listed above are not particularly limiting criteria;
 the \doctitle{} contains samples of \approxcount\prevtotalsymbols{}
@@ -4706,9 +5163,9 @@
 with installing new fonts and packages.
 
 
-\subsection{Document Usage}
+\section{Document Usage}
 
-Each section of this document contains a number of font tables.  Each
+Each chapter of this document contains a number of font tables.  Each
 table shows a set of symbols, with the corresponding \latex{} command
 to the right of each symbol.  A table's caption indicates what package
 needs to be loaded in order to access that table's symbols.  For
@@ -4720,18 +5177,18 @@
 information about some or all the symbols in that table.
 
 One\label{altenc} note that appears a few times in this document,
-particularly in \ref{body-text-symbols}, indicates that
-certain symbols do not exist in the OT1 \fntenc[OT1]
-(Donald\index{Knuth, Donald E.} Knuth's original, 7-bit
-\fntenc[7-bit], which is the default \fntenc{} for \latex) and that
-you should use \pkgname{fontenc} to select a different encoding, such
-as T1 (a common 8-bit \fntenc[8-bit]\index{font encodings>T1}).  That
-means that you should put
+particularly in \ref{body-text-symbols}, indicates that certain
+symbols do not exist in the OT1 \fntenc[OT1] (Donald\index{Knuth,
+  Donald E.} Knuth's original, 7-bit \fntenc[7-bit], which is the
+default \fntenc{} for \latex) and that you should use
+\pkgname{fontenc} to select a different encoding, such as T1 (a common
+8-bit \fntenc[8-bit]\subindex{font encodings}{T1}).  That means that
+you should put
 ``\cmd{\usepackage}\verb|[|\meta{encoding}\verb|]{fontenc}|'' in your
 document's preamble, where \meta{encoding} is, e.g.,
-\texttt{T1}\index{font encodings>T1} or \texttt{LY1}\index{font
-encodings>LY1}.  To limit the change in \fntenc[limiting scope of] to
-the current group, use
+\texttt{T1}\subindex{font encodings}{T1} or \texttt{LY1}\subindex{font
+  encodings}{LY1}.  To limit the change in \fntenc[limiting scope of]
+to the current group, use
 ``\cmd{\fontencoding}\verb|{|\meta{encoding}\verb|}|\cmd{\selectfont}''.
 
 \ref{addl-info} contains some additional information about the symbols
@@ -4764,7 +5221,7 @@
 
 \ifcomplete
 
-\subsection{Frequently Requested Symbols}
+\section{Frequently Requested Symbols}
 
 There are a number of symbols that are requested over and over again
 on \ctt.  If you're looking for such a symbol the following list will
@@ -4771,17 +5228,13 @@
 help you find it quickly.
 
 \newenvironment{symbolfaq}{%
-  \ifhavemulticol
-    \setlength{\columnsep}{3em}%
-    \begin{multicols}{2}%
-  \fi
+  \setlength{\columnsep}{3em}%
+  \begin{multicols}{2}%
   \setlength{\parskip}{1ex}%
   \newcommand{\faq}[2]{%
     \noindent##1\quad\dotfill\quad\makebox[1em][r]{##2}\par}%
 }{%
-  \ifhavemulticol
-    \end{multicols}%
-  \fi
+  \end{multicols}%
 }
 
 \begin{symbolfaq}
@@ -4831,12 +5284,12 @@
 \fi    % ifcomplete
 
 
-\section{Body-text symbols}
+\chapter{Body-text symbols}
 \label{body-text-symbols}
 \idxbothbegin{body-text}{symbols}
-\tablesubsections
+\tablesections
 
-This section lists symbols that are intended for use in running text,
+This chapter lists symbols that are intended for use in running text,
 such as punctuation marks, accents, ligatures, and currency symbols.
 
 \bigskip
@@ -4845,6 +5298,7 @@
 \index{special characters=``special'' characters}
 \index{escapable characters}
 \index{underline}
+\index{ampersand}
 \label{special-escapable}
 \begin{tabular}{*6{ll@{\qqquad}}ll}
 \K\$   & \K\%   & \K\_$\,^*$  & \Kp\}   & \K\&   & \K\#   & \Kp\{   \\
@@ -4867,6 +5321,8 @@
 \idxboth{registered}{trademark}
 \index{trademark}
 \index{braces}
+\index{circles}
+\index{asterisks}
 \index{quotation marks}
 \idxboth{dot}{symbols}
 \index{dots (ellipses)} \index{ellipses (dots)}
@@ -4938,7 +5394,7 @@
 
 
 \begin{symtable}{Non-ASCII Letters (Excluding Accented Letters)}
-\index{letters>non-ASCII}
+\subindex{letters}{non-ASCII}
 \index{ASCII}
 \label{non-ascii}
 \begin{tabular}{*4{ll@{\qqquad}}ll}
@@ -4958,7 +5414,7 @@
 
 
 \begin{symtable}[TGRK]{\TGRK\ Upright Greek Letters}
-\index{alphabets>Greek}
+\subindex{alphabets}{Greek}
 \index{Greek>letters}
 \index{Greek>upright}
 \index{upright Greek letters}
@@ -5005,7 +5461,7 @@
 
 
 \begin{symtable}[FC]{Letters Used to Typeset African Languages}
-\index{alphabets>African}
+\subindex{alphabets}{African}
 \label{fc}
 \begin{tabular}{*6{ll@{\qquad}}ll}
 \Jiv\B{D} & \Jiv\m{c} & \Jiv\m{f} & \Jiv\m{k} & \Jiv\M{t}     & \Jiv\m{Z} \\
@@ -5034,7 +5490,7 @@
 
 
 \begin{symtable}[VIET]{Letters Used to Typeset Vietnamese}
-\index{alphabets>Vietnamese}
+\subindex{alphabets}{Vietnamese}
 \begin{tabular}{*3{ll@{\qquad}}ll}
 \Kv\OHORN & \Kv\ohorn & \Kv\UHORN & \Kv\uhorn \\
 \end{tabular}
@@ -5082,14 +5538,39 @@
 \end{symtable}
 
 
+\begin{symtable}[FNTAWE]{\FNTAWE\ Decorative Punctuation Marks and Typographic Symbols}
+\index{punctuation}
+\index{quotation marks}
+\index{asterisks}
+\index{asterisk=asterisk (\faAsterisk)}
+\index{at sign=at sign (\faAt)}
+\index{dots (ellipses)} \index{ellipses (dots)}
+\index{ellipsis=ellipsis (\faEllipsisH)}
+\index{ellipsis=ellipsis (\faEllipsisV)}
+\index{exclamation point=exclamation point (\faExclamation)}
+\index{paragraph=paragraph (\faParagraph)}
+\index{question mark=question mark (\faQuestion)}
+\index{left quotation marks=left quotation marks (\faQuoteLeft)}
+\index{right quotation marks=right quotation marks (\faQuoteRight)}
+\index{slash=slash (\faSlash)}
+\label{fontawesome5-punctuation}
+\begin{tabular}{*3{ll}}
+\K\faAsterisk  & \K\faExclamation & \K\faQuoteRight \\
+\K\faAt        & \K\faParagraph   & \K\faSlash      \\
+\K\faEllipsisH & \K\faQuestion    &                 \\
+\K\faEllipsisV & \K\faQuoteLeft   &                 \\
+\end{tabular}
+\end{symtable}
+
+
 \begin{longsymtable}[TIPA]{\TIPA\ Phonetic Symbols}
 \ltidxboth{phonetic}{symbols}
 \ltidxboth{linguistic}{symbols}
 \ltidxboth{dictionary}{symbols}
-\ltidxboth{rotated}{symbols}
-\ltidxboth{upside-down}{symbols}
-\ltidxboth{inverted}{symbols}
-\ltindex{alphabets>phonetic}
+\ltidxboth{rotated}{letters}
+\ltindex{upside-down letters}
+\ltindex{inverted letters}
+\ltsubindex{alphabets}{phonetic}
 \ltindex{tilde}
 \label{tipa-phonetic}
 \begin{longtable}{*3{ll}}
@@ -5169,11 +5650,12 @@
 \ltidxboth{phonetic}{symbols}
 \ltidxboth{linguistic}{symbols}
 \ltidxboth{dictionary}{symbols}
-\ltidxboth{rotated}{symbols}
-\ltidxboth{upside-down}{symbols}
-\ltidxboth{inverted}{symbols}
-\index{female}
-\index{alphabets>phonetic}
+\ltidxboth{rotated}{letters}
+\ltindex{upside-down letters}
+\ltindex{inverted letters}
+\ltindex{female sign}
+\ltsubindex{alphabets}{phonetic}
+\ltindex{arrows}
 \label{tipx-phonetic}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -5215,11 +5697,12 @@
 \ltidxboth{phonetic}{symbols}
 \ltidxboth{linguistic}{symbols}
 \ltidxboth{dictionary}{symbols}
-\ltidxboth{rotated}{symbols}
-\ltidxboth{upside-down}{symbols}
-\ltidxboth{inverted}{symbols}
-\ltindex{alphabets>phonetic}
-\index{tilde}
+\ltidxboth{rotated}{letters}
+\ltindex{upside-down letters}
+\ltindex{inverted letters}
+\ltindex{barred letters}
+\ltsubindex{alphabets}{phonetic}
+\ltindex{tilde}
 \label{wipa-phonetic}
 \begin{longtable}{*4{ll}}
 \multicolumn{8}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -5263,10 +5746,10 @@
 \idxboth{phonetic}{symbols}
 \idxboth{linguistic}{symbols}
 \idxboth{dictionary}{symbols}
-\idxboth{rotated}{symbols}
-\idxboth{upside-down}{symbols}
-\idxboth{inverted}{symbols}
-\index{alphabets>phonetic}
+\idxboth{rotated}{letters}
+\index{upside-down letters}
+\index{inverted letters}
+\subindex{alphabets}{phonetic}
 \label{wasy-phonetics}
 \begin{tabular}{*3{ll@{\qquad}}ll}
 \K\dh & \K\inve  & \K\roundz & \K\thorn \\
@@ -5279,10 +5762,10 @@
 \idxboth{phonetic}{symbols}
 \idxboth{linguistic}{symbols}
 \idxboth{dictionary}{symbols}
-\idxboth{rotated}{symbols}
-\idxboth{upside-down}{symbols}
-\idxboth{inverted}{symbols}
-\index{alphabets>phonetic}
+\idxboth{rotated}{letters}
+\index{upside-down letters}
+\index{inverted letters}
+\subindex{alphabets}{phonetic}
 \label{phon-phonetic}
 \begin{tabular}{*5{ll}}
 \K\barj              & \K\flap              & \K[\PHONibar]\ibar   & \K\rotvara           & \K\vari            \\
@@ -5302,7 +5785,7 @@
 \idxboth{phonetic}{symbols}
 \idxboth{linguistic}{symbols}
 \idxboth{dictionary}{symbols}
-\index{alphabets>phonetic}
+\subindex{alphabets}{phonetic}
 \label{phonfc-phonetic}
 \begin{tabular}{*3{ll}}
 \K[\encfour\PHONFCtextcrd]\textcrd         & \K[\encfour\PHONFCtexthtd]\texthtd       & \K[\encfour\PHONFCtextpipe]\textpipe       \\
@@ -5335,10 +5818,9 @@
 \begin{symtable}[SMTR]{\SMTR\ Transliteration Symbols}
 \idxboth{phonetic}{symbols}
 \idxboth{linguistic}{symbols}
-\idxboth{dictionary}{symbols}
 \idxboth{transliteration}{symbols}
-\idxboth{semitic}{transliteration}
-\index{alphabets>phonetic}
+\index{semitic transliteration}
+\subindex{alphabets}{phonetic}
 \label{semtrans-phonetic}
 \begin{tabular}{ll@{\qqquad}ll}
 \K\Alif & \K\Ayn \\
@@ -5369,10 +5851,11 @@
 \index{accents>macron=macron (\showmacron)}     % "Generic"
 \index{accents>ogonek=ogonek (\encone{\blackacc\k})}      % "Generic"
 \index{accents>ring=ring (\blackacchack\r)}     % "Generic"
-\index{font encodings>T2A}
-\index{font encodings>T2B}
-\index{font encodings>T2C}
-\index{font encodings>X2}
+\index{accents>hat}
+\subindex{font encodings}{T2A}
+\subindex{font encodings}{T2B}
+\subindex{font encodings}{T2C}
+\subindex{font encodings}{X2}
 \label{text-accents}
 \begin{tabular}{*3{ll@{\qqquad}}ll}
 \Q\"                                & \QivBAR\ddag         & \Qt{\enctwoA}\f$^\P$ & \Q\t                 \\
@@ -5384,7 +5867,7 @@
 \end{tabular}
 \par\medskip
 \begin{tabular}{ll@{\qqquad}ll}
-\Q\newtie$^*$ & \Qc\textcircled
+\Q\newtie$^*$ & \Qc\textcircled$^\parallel$
 \end{tabular}
 
 \bigskip
@@ -5414,13 +5897,19 @@
   X2).  Use the \pkgname{fontenc} package to select an encoding.
 \end{tablenote}
 
+\medskip
+\begin{tablenote}[\parallel]
+  See also the \pkgname{circledsteps} package, which uses \TikZ\ to
+  encircle symbols of any size.
+\end{tablenote}
+
 \bigskip
 \begin{tablenote}
-  \index{dotless i=dotless $i~(\imath)$>text mode} \index{dotless
-  j=dotless $j~(\jmath)$>text mode} Also note the existence of
-  \cmdI{\i} and \cmdI{\j}, which produce dotless versions of ``i'' and
-  ``j'' (viz., ``\i'' and ``\j'').  These are useful when the accent
-  is supposed to replace the dot in encodings that need to
+  \subindex{dotless i=dotless $i~(\imath)$}{text mode}
+  \subindex{dotless j=dotless $j~(\jmath)$}{text mode} Also note the
+  existence of \cmdI{\i} and \cmdI{\j}, which produce dotless versions
+  of ``i'' and ``j'' (viz., ``\i'' and ``\j'').  These are useful when
+  the accent is supposed to replace the dot in encodings that need to
   composite\index{composited accents} (i.e.,~combine) letters and
   accents.  For example, ``\verb|na\"{\i}ve|'' always produces a
   correct ``na\"{\i}ve'', while ``\verb|na\"{i}ve|'' yields the rather
@@ -5439,15 +5928,16 @@
 \ltindex{accents}
 \ltindex{accents>multiple per character}
 \ltindex{tilde}
-\ltindex{accents>acute=acute (\string\blackacchack\string\')}   % "Generic"
-\ltindex{accents>arc=arc (\string\blackacchack\string\newtie)}  % "Generic"
-\ltindex{accents>breve=breve (\string\blackacchack\string\u)}   % "Generic"
-\ltindex{accents>circumflex=circumflex (\string\blackacchack\string\^)}   % "Generic"
-\ltindex{accents>dot=dot (\string\blackacchack\string\. or \string\blackacc\string\d)}  % "Generic"
-\ltindex{accents>grave=grave (\string\blackacchack\string\`)}   % "Generic"
-\ltindex{accents>macron=macron (\string\blackacc\string\=)}     % "Generic"
-\ltindex{accents>ogonek=ogonek (\string\encone{\string\blackacc\string\k})}      % "Generic"
-\ltindex{accents>ring=ring (\string\blackacchack\string\r)}     % "Generic"
+\ltindex{accents>acute=acute (\blackacchack\')}   % "Generic"
+\ltindex{accents>arc=arc (\blackacchack\newtie)}  % "Generic"
+\ltindex{accents>breve=breve (\blackacchack\u)}   % "Generic"
+\ltindex{accents>circumflex=circumflex (\blackacchack\^)}   % "Generic"
+\ltindex{accents>dot=dot (\blackacchack\. or \blackacc\d)}  % "Generic"
+\ltindex{accents>grave=grave (\blackacchack\`)}   % "Generic"
+\ltindex{accents>macron=macron (\showmacron)}     % "Generic"
+\ltindex{accents>ogonek=ogonek (\encone{\blackacc\k})}      % "Generic"
+\ltindex{accents>ring=ring (\blackacchack\r)}     % "Generic"
+\ltindex{accents>hat}
 \label{tipa-accents}
 \renewcommand{\arraystretch}{1.25}  % Keep high and low accents from touching.
 \begin{longtable}{ll}
@@ -5655,10 +6145,10 @@
 
 \begin{symtable}[SMTR]{\SMTR\ Accents}
 \index{accents}
-\idxboth{semitic}{transliteration}
-\idxboth{rotated}{symbols}
-\idxboth{upside-down}{symbols}
-\idxboth{inverted}{symbols}
+\idxboth{phonetic}{symbols}
+\idxboth{linguistic}{symbols}
+\idxboth{transliteration}{symbols}
+\index{semitic transliteration}
 \label{semtrans-accents}
 \begin{tabular}{ll@{\qqquad}ll}
 \Q[\smtrD]\D & \Q[\smtrU]\U \\
@@ -5692,7 +6182,7 @@
 
 \begin{symtable}[CBEL]{\CBEL\ Accents}
 \index{accents}
-\index{accents>comma-below=comma-below (\blackacchack\cb)}    % "Generic"
+\index{accents>comma below=comma below (\blackacchack\cb)}    % "Generic"
 \label{combelow}
 \begin{tabular}{ll}
 \Q\cb \\
@@ -5767,6 +6257,7 @@
 \begin{symtable}[MARV]{\MARV\ Diacritics}
 \index{accents}
 \index{accents>macron=macron (\showmacron)}     % "Generic"
+\index{arrows}
 \label{marv-accent-chars}
 \begin{tabular}{*2{ll@{\qquad}}ll}
 \K\arrowOver       & \K\barOver         & \K\StrikingThrough \\
@@ -5790,7 +6281,7 @@
 \begin{symtable}{\TC\ Currency Symbols}
 \idxboth{currency}{symbols}
 \idxboth{monetary}{symbols}
-\index{euro signs}
+\index{euro}
 \label{tc-currency}
 \begin{tabular}{*4{ll}}
 \K\textbaht          & \K\textdollar$^*$     & \K\textguarani  & \K\textwon \\
@@ -5809,7 +6300,7 @@
 \begin{symtable}[MARV]{\MARV\ Currency Symbols}
 \idxboth{currency}{symbols}
 \idxboth{monetary}{symbols}
-\index{euro signs}
+\index{euro}
 \label{marv-currency}
 \begin{tabular}{*4{ll}ll}
 \K\Denarius   & \K\EURcr      & \K\EURtm      & \K\Pfund    \\
@@ -5839,26 +6330,27 @@
 \begin{symtable}[FNTAWE]{\FNTAWE\ Currency Symbols}
 \idxboth{currency}{symbols}
 \idxboth{monetary}{symbols}
-\index{euro signs}
-\label{fontawesome-currency}
-\begin{tabular}{*4{ll}ll}
-\K\faBtc & \K\faIls & \K\faKrw & \K\faUsd     \\
-\K\faEur & \K\faInr & \K\faRub & \K\faViacoin \\
-\K\faGbp & \K\faJpy & \K\faTry &              \\
+\index{euro}
+\index{Bitcoin=bitcoin (\faBtc)}
+\index{dollar=dollar (\faDollarSign)}
+\index{euro=euro (\faEuroSign)}
+\index{hryvnia=hryvnia (\faHryvnia)}
+\index{lira=lira (\faLiraSign)}
+\index{pound=pound (\faPoundSign)}
+\index{ruble=ruble (\faRubleSign)}
+\index{rupee=rupee (\faRupeeSign)}
+\index{shekel=shekel (\faShekelSign)}
+\index{tenge=tenge (\faTenge)}
+\index{Viacoin=Viacoin (\faViacoin)}
+\index{won=won (\faWonSign)}
+\index{yen=yen (\faYenSign)}
+\label{fontawesome5-currency}
+\begin{tabular}{*3{ll}ll}
+\K\faBtc        & \K\faLiraSign  & \K\faShekelSign & \K\faYenSign \\
+\K\faDollarSign & \K\faPoundSign & \K\faTenge      &              \\
+\K\faEuroSign   & \K\faRubleSign & \K\faViacoin    &              \\
+\K\faHryvnia    & \K\faRupeeSign & \K\faWonSign    &              \\
 \end{tabular}
-
-\bigskip
-
-\begin{tablenote}
-  \FNTAWE\ defines \cmdI{\faBitcoin} as a synonym for \cmdI{\faBtc};
-  \cmdI{\faCny}, \cmdI{\faYen}, and \cmdI{\faRmb} as synonyms for
-  \cmdI{\faJpy}; \cmdI{\faDollar} as a synonym for \cmdI{\faUsd};
-  \cmdI{\faEuro} as a synonym for \cmdI{\faEur}; \cmdI{\faRouble} and
-  \cmdI{\faRuble} as synonyms for \cmdI{\faRub}; \cmdI{\faRupee} as a
-  synonym for \cmdI{\faInr}; \cmdI{\faShekel} and \cmdI{\faSheqel} as
-  synonyms for \cmdI{\faIls}; \cmdI{\faTurkishLira} as a synonym for
-  \cmdI{\faTry}; and \cmdI{\faWon} as a synonym for \cmdI{\faKrw}.
-\end{tablenote}
 \end{symtable}
 
 
@@ -5865,6 +6357,7 @@
 \begin{symtable}[WASY]{\WASY\ Currency Symbols}
 \idxboth{currency}{symbols}
 \idxboth{monetary}{symbols}
+\index{euro}
 \label{wasy-currency}
 \begin{tabular}{*2{ll@{\qquad}}ll}
 \K\cent & \K\currency & \K\wasyeuro$^*$ \\
@@ -5872,9 +6365,9 @@
 
 \bigskip
 \begin{tablenote}[*]
-  \cmdI[\protect\wasyeuro]{\wasyeuro} is also available as
-  \cmdI[\WASYeuro]{\euro} unless you specify the \optname{\WASY}{noeuro}
-  package option.
+  \cmdI[\string\wasyeuro]{\wasyeuro} is also available as
+  \cmdI[\string\WASYeuro]{\euro} unless you specify the
+  \optname{wasysym}{noeuro} package option.
 \end{tablenote}
 \end{symtable}
 
@@ -5882,7 +6375,7 @@
 \begin{symtable}[CHINA]{\CHINA\ Currency Symbols}
 \idxboth{currency}{symbols}
 \idxboth{monetary}{symbols}
-\index{euro signs}
+\index{euro}
 \label{china-euro}
 \begin{tabular}{ll@{\qquad}ll}
   \K\Euro & \K\Pound \\
@@ -5891,11 +6384,11 @@
 
 
 \begin{symtable}[TEUB]{\TEUB\ Currency Symbols}
+\idxboth{monetary}{symbols}
 \idxboth{currency}{symbols}
-\idxboth{monetary}{symbols}
+\index{currency symbols>ancient}
 \index{Greek>coins}
 \index{Roman coins}
-\index{coins, ancient}
 \label{teub-currency}
 \begin{tabular}{*2{ll@{\qquad}}ll}
 \K\denarius & \K\hemiobelion & \K\tetartemorion \\
@@ -5917,7 +6410,7 @@
 \begin{symtable}[EUSYM]{\EUSYM\ Euro Signs}
 \idxboth{currency}{symbols}
 \idxboth{monetary}{symbols}
-\index{euro signs}
+\index{euro}
 \label{eurosym-euros}
 \begin{tabular}{*4{ll}}
 \K\geneuro & \K\geneuronarrow & \K\geneurowide & \K\officialeuro \\
@@ -5926,11 +6419,12 @@
 \bigskip
 
 \begin{tablenote}
-  \cmd{\euro} is automatically mapped to one of the above---by
-  default, \cmdI{\officialeuro}---based on a \EUSYM\ package option.
-  \seedocs{\EUSYM}.  The \verb|\geneuro|\dots{} characters are
-  generated from the current body font's ``C'' character and therefore
-  may not appear exactly as shown.
+  \cmdI[\officialeuro]{\euro} is automatically mapped to one of
+  the above---by default, \cmdI{\officialeuro}---based on a
+  \EUSYM\ package option.  \seedocs{\EUSYM}.  The
+  \verb|\geneuro|\dots{} characters are generated from the current
+  body font's ``C'' character and therefore may not appear exactly as
+  shown.
 \end{tablenote}
 \end{symtable}
 
@@ -5938,7 +6432,7 @@
 \begin{symtable}[FOUR]{\FOUR\ Euro Signs}
 \idxboth{currency}{symbols}
 \idxboth{monetary}{symbols}
-\index{euro signs}
+\index{euro}
 \label{fourier-euros}
 \begin{tabular}{*2{ll}}
   \K\eurologo & \K[\FOURtexteuro]\texteuro \\
@@ -5975,16 +6469,24 @@
 \index{trademark}
 \idxboth{registered}{trademark}
 \idxboth{legal}{symbols}
-\label{fontawesome-legal}
+\label{fontawesome5-legal}
 \begin{tabular}{*2{ll}}
-\K\faCopyright       & \K\faRegistered \\
-\K\faCreativeCommons & \K\faTrademark  \\
+\K\faCopyright                                   & \K\faCreativeCommonsRemix        \\
+\KfaReg\faCopyright                              & \K\faCreativeCommonsSa           \\
+\K\faCreativeCommons                             & \K\faCreativeCommonsSampling     \\
+\K\faCreativeCommonsBy                           & \K\faCreativeCommonsSamplingPlus \\
+\K\faCreativeCommonsNc                           & \K\faCreativeCommonsShare        \\
+\K\faCreativeCommonsNcEu                         & \K\faCreativeCommonsZero         \\
+\K\faCreativeCommonsNcJp                         & \K\faRegistered                  \\
+\K\faCreativeCommonsNd                           & \KfaReg\faRegistered             \\
+\K{\faCreativeCommonsPd*} & \K\faTrademark                   \\
+\K\faCreativeCommonsPd                           &                                  \\
 \end{tabular}
 \end{symtable}
 
 
 \begin{symtable}[CCLIC]{\CCLIC\ Creative Commons License Icons}
-\index{Creative Commons licenses}
+\idxboth{Creative Commons}{licenses}
 \index{copyright}
 \idxboth{legal}{symbols}
 \label{cclic-creativecommons}
@@ -6002,7 +6504,7 @@
 
 
 \begin{symtable}[CCICO]{\CCICO\ Creative Commons License Icons}
-\index{Creative Commons licenses}
+\idxboth{Creative Commons}{licenses}
 \index{copyright}
 \idxboth{legal}{symbols}
 \label{ccico-creativecommons}
@@ -6048,6 +6550,7 @@
 \begin{symtable}{Miscellaneous \TC\ Symbols}
 \index{tilde}
 \index{quotation marks}
+\index{circles}
 \label{tc-misc}
 \begin{tabular}{ll@{\qquad}ll}
 \K\textblank           & \K\textpilcrow              \\
@@ -6082,12 +6585,12 @@
 \idxbothend{body-text}{symbols}
 
 
-\section{Mathematical symbols}
+\chapter{Mathematical symbols}
 \label{math-symbols}
 \idxbothbegin{mathematical}{symbols}
-\tablesubsections
+\tablesections
 
-Most, but not all, of the symbols in this section are math-mode only.
+Most, but not all, of the symbols in this chapter are math-mode only.
 That is, they yield a ``\texttt{Missing~\$ inserted}''\index{Missing
 \$ inserted=``\texttt{Missing~\$ inserted}''} error message if not
 used within \verb|$|$\ldots$\verb|$|, \verb|\[|$\ldots$\verb|\]|, or
@@ -6109,12 +6612,11 @@
 
 Although there have been many requests on \ctt for a
 contradiction\idxboth{contradiction}{symbols} symbol, the ensuing
-discussion invariably reveals innumerable ways to represent
-contradiction in a proof, including ``\blitza''~(\cmdI{\blitza}),
-``$\Rightarrow\Leftarrow$''~(\cmdX{\Rightarrow}\cmdX{\Leftarrow}),
-``$\bot$''~(\cmdX{\bot}),
-``$\nleftrightarrow$''~(\cmdX{\nleftrightarrow}), and
-``\textreferencemark''~(\cmdI{\textreferencemark}).  Because of the
+discussion invariably reveals innumerable ways to represent contradiction
+in a proof, including ``\blitza''~(\cmdI{\blitza}),
+``$\Rightarrow\Leftarrow$''~(\cmdX{\Rightarrow}\cmdX{\Leftarrow}),\index{arrows}
+``$\bot$''~(\cmdX{\bot}), ``$\nleftrightarrow$''~(\cmdX{\nleftrightarrow}),
+and ``\textreferencemark''~(\cmdI{\textreferencemark}).  Because of the
 lack of notational consensus, it is probably better to spell out
 ``Contradiction!''\ than to use a symbol for this purpose.  Similarly,
 discussions on \ctt have revealed that there are a variety of ways to
@@ -6125,22 +6627,30 @@
 symbol is called \cmdX{\coloneqq}.  In \ABX\ and \MNS\ it's called
 \cmdI[$\string\ABXcoloneq$]{\coloneq}.  In \CEQ\ it's called
 \cmdX{\colonequals}.}), and ``$\stackrel{\text{\tiny
-def}}{=}$''~(\cmd{\stackrel}\verb|{|\cmd{\text}\verb|{\tiny|
+    def}}{=}$''~(\cmd{\stackrel}\verb|{|\cmd{\text}\verb|{\tiny|
 \verb|def}}{=}|).  See also the example of \cmd{\equalsfill}
-\vpageref[below]{equalsfill-ex}.  Depending upon the context,
-disjoint\index{disjoint union} union may be represented as
-``$\coprod$''~(\cmdX{\coprod}), ``$\sqcup$''~(\cmdX{\sqcup}),
-``$\dotcup$''~(\cmdX{\dotcup}), ``$\oplus$''~(\cmdX{\oplus}), or any
-of a number of other symbols.\footnote{\person{Bob}{Tennent} listed
-these and other disjoint-union symbol possibilities in a November~2007
-post to \ctt.}  Finally, the average\index{average} value of a
-variable~$x$ is written by some people as
+\vpageref[below]{equalsfill-ex}.  Depending upon the context, disjoint
+union
+%
+\index{disjoint union=disjoint union ($\coprod$)}
+\index{disjoint union=disjoint union ($\sqcup$)}
+\index{disjoint union=disjoint union ($\dotcup$)}
+\index{disjoint union=disjoint union ($\oplus$)}
+\index{disjoint union=disjoint union ($\amalg$)}
+%
+may be represented as ``$\coprod$''~(\cmdX{\coprod}),
+``$\sqcup$''~(\cmdX{\sqcup}), ``$\dotcup$''~(\cmdX{\dotcup}),
+``$\oplus$''~(\cmdX{\oplus}), ``$\amalg$''~(\cmdX{\amalg}), or any of a
+number of other symbols.\footnote{\person{Bob}{Tennent} listed these and
+other disjoint-union symbol possibilities in a November~2007 post to \ctt.}
+Finally, the average\index{average} value of a variable~$x$ is written by
+some people as
 ``$\overline{x}$''~(\verb|\overline{x}|)\incsyms\indexaccent[$\string\blackacc{\string\overline}$]{\overline},
 by some people as ``$\langle x \rangle$''~(\cmdX{\langle} \texttt{x}
-\cmdX{\rangle}), and by some people as ``$\diameter x$'' or
-``$\varnothing x$''~(\cmdX{\diameter} \texttt{x} or \cmdX{\varnothing}
-\texttt{x}).  The moral of the story is that you should be careful
-always to explain your notation to avoid confusing your readers.
+\cmdX{\rangle}), and by some people as ``$\diameter x$'' or ``$\varnothing
+x$''~(\cmdX{\diameter} \texttt{x} or \cmdX{\varnothing} \texttt{x}).  The
+moral of the story is that you should be careful always to explain your
+notation to avoid confusing your readers.
 
 \fi    % Matches \ifcomplete
 
@@ -6148,6 +6658,8 @@
 
 \begin{symtable}{Math-mode Versions of Text Symbols}
 \index{underline}
+\index{dots (ellipses)>math mode}
+\index{ellipses (dots)>math mode}
 \label{math-text-vers}
 \begin{tabular}{*3{ll}}
 \X\mathdollar   & \X\mathparagraph & \X\mathsterling   \\
@@ -6160,6 +6672,54 @@
 \end{symtable}
 
 
+\begin{symtable}[LOGIX]{\LOGIX\ Math-mode Versions of Text Symbols}
+\index{tilde}
+\index{underline}
+\index{copyright}
+\index{quotation marks}
+\index{question mark=question mark (\Queston)}
+\idxboth{currency}{symbols}
+\idxboth{monetary}{symbols}
+\label{logix-math-text-vers}
+\begin{tabular}{*4{ll}}
+\K\AAnd       & \K\Dagger      & \K\LeftSlash  & \K\SingleQuote \\
+\K\Ampersand  & \K\Daggerr     & \K\LngVrtBar  & \K\Tild        \\
+\K\BackQuote  & \K\Ddagger     & \K\Numbr      & \K\TripleQuote \\
+\K\BndBar     & \K\Ddaggerr    & \K\Percnt     & \K\Underscore  \\
+\K\Circumflex & \K\Dollar      & \K\Queston    &                \\
+\K\Coma       & \K\DoubleQuote & \K\RightSlash &                \\
+\K\Cpyrght    & \K\Exclaim     & \K\Semicln    &                \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[LOGIX]{\LOGIX\ Basic Operators}
+\idxboth{binary}{operators}
+\index{asterisks}
+\index{asterisks>circled}
+\index{asterisks>dotted}
+\index{plusses}
+\label{logix-basic}
+\begin{tabular}{*4{ll}}
+\K\Asterick     & \K\CircMinusPlus & \K\Divd   & \K\Minus     \\
+\K\CircAsterick & \K\CircPls       & \K\Divide & \K\MinusPlus \\
+\K\CircDivd     & \K\CircPlusMinus & \K\DMinus & \K\Pls       \\
+\K\CircDivide   & \K\CircTimes     & \K\DPlus  & \K\PlusMinus \\
+\K\CircMinus    & \K\DAsterisk     & \K\DTimes & \K\Times     \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[CMLL]{\CMLL\ Unary Operators}
 \idxboth{unary}{operators}
 \idxboth{linear logic}{symbols}
@@ -6182,8 +6742,9 @@
 \begin{symtable}{Binary Operators}
 \idxboth{binary}{operators}
 \index{division}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
 \index{rhombuses}
+\index{circles}
 \label{bin}
 \begin{tabular}{*4{ll}}
 \X\amalg           & \X\cup          & \X\oplus    & \X\times           \\
@@ -6204,6 +6765,7 @@
 
 \begin{symtable}[AMS]{\AMS\ Binary Operators}
 \idxboth{binary}{operators}
+\idxboth{boxed}{symbols}
 \index{semidirect products}
 \label{ams-bin}
 \begin{tabular}{*3{ll}}
@@ -6237,7 +6799,9 @@
 
 \begin{symtable}[ST]{\ST\ Binary Operators}
 \idxboth{binary}{operators}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
+\idxboth{boxed}{symbols}
+\index{arrows}
 \label{st-bin}
 \begin{tabular}{*3{ll}}
 \X\baro                & \X\interleave          & \X\varoast             \\
@@ -6275,7 +6839,8 @@
 
 \begin{symtable}[TX]{\TXPX\ Binary Operators}
 \idxboth{binary}{operators}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
+\index{circles}
 \label{txpx-bin}
 \begin{tabular}{*3{ll}}
 \X\circledbar    & \X\circledwedge  & \X\medcirc       \\
@@ -6290,6 +6855,8 @@
 \index{asterisks}
 \index{semidirect products}
 \index{rhombuses}
+\index{plusses}
+\index{squares}
 \label{abx-bin}
 \begin{tabular}{*3{ll}}
 \X[\ABXast]\ast                   & \X[\ABXcurlywedge]\curlywedge         & \X[\ABXsqcap]\sqcap               \\
@@ -6328,6 +6895,10 @@
 
 \begin{longsymtable}[MNS]{\MNS\ Binary Operators}
 \ltidxboth{binary}{operators}
+\ltindex{plusses}
+\ltindex{circles}
+\ltindex{rhombuses}
+\ltidxboth{database}{symbols}
 \label{mns-bin}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -6388,6 +6959,8 @@
 
 \begin{longsymtable}[FDSYM]{\FDSYM\ Binary Operators}
 \ltidxboth{binary}{operators}
+\ltindex{plusses}
+\ltidxboth{database}{symbols}
 \label{fdsym-bin}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -6471,6 +7044,8 @@
 
 \begin{longsymtable}[BSK]{\BSK\ Binary Operators}
 \ltidxboth{binary}{operators}
+\ltindex{plusses}
+\ltindex{asterisks}
 \label{bsk-bin}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -6511,6 +7086,7 @@
 
 \begin{longsymtable}[STIX]{\STIX\ Binary Operators}
 \ltidxboth{binary}{operators}
+\ltindex{plusses}
 \label{stix-bin}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -6594,6 +7170,22 @@
 \end{symtable}
 
 
+\begin{symtable}[PDFMSYM]{\PDFMSYM\ Binary Operators}
+\idxboth{binary}{operators}
+\label{pdfmsym-bin}
+\begin{tabular}{*3{ll}}
+\X\circwedge & \X\divs   & \X\ndivs \\
+\X\dcup      & \X\dwedge &          \\
+\end{tabular}
+
+\bigskip
+
+\begin{tablenote}
+  \pdfmsymmessage.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[CMLL]{\CMLL\ Binary Operators}
 \idxboth{binary}{operators}
 \label{cmll-bin}
@@ -6629,6 +7221,44 @@
 \end{symtable}
 
 
+\begin{symtable}[RESMES]{\RESMES\ Binary Operators}
+\idxboth{binary}{operators}
+\index{restriction of a measure}
+\label{resmes-bin}
+\begin{tabular}{ll}
+\X\resmes \\
+\end{tabular}
+
+\bigskip
+
+\begin{tablenote}
+  This symbol notates the restriction of a measure to a set, as in
+  $\phi \resmes Y$.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[LOGIX]{\LOGIX\ Logical Operators}
+\idxboth{binary}{operators}
+\idxboth{logic}{symbols}
+\label{logix-bin}
+\begin{tabular}{*4{ll}}
+\K\CircInvNt & \K\CircXor & \K\Nand   & \K\SbNd  \\
+\K\CircNand  & \K\Dnd     & \K\Nd     & \K\SbNor \\
+\K\CircNd    & \K\Dnt     & \K\Ngt    & \K\SbOr  \\
+\K\CircNgt   & \K\Dor     & \K\Nor    & \K\SbXor \\
+\K\CircNor   & \K\InvNt   & \K\Nt     & \K\Shfr  \\
+\K\CircNt    & \K\Lnand   & \K\Or     & \K\Xor   \\
+\K\CircOr    & \K\Lnor    & \K\SbNand &          \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[ULSY]{\ULSY\ Geometric Binary Operators}
 \idxboth{binary}{operators}
 \label{ulsy-geometric-bin}
@@ -6640,7 +7270,11 @@
 
 \begin{symtable}[ABX]{\ABX\ Geometric Binary Operators}
 \idxboth{binary}{operators}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
+\idxboth{boxed}{symbols}
+\index{asterisks}
+\index{asterisks>boxed}
+\index{asterisks>circled}
 \label{abx-geometric-bin}
 \begin{tabular}{*3{ll}}
 \X[\ABXblacktriangledown]\blacktriangledown   & \X[\ABXboxright]\boxright           & \X[\ABXominus]\ominus                         \\
@@ -6664,7 +7298,7 @@
 
 \begin{symtable}[MNS]{\MNS\ Geometric Binary Operators}
 \idxboth{binary}{operators}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
 \index{rhombuses}
 \label{mns-geometric-bin}
 \begin{tabular}{*3{ll}}
@@ -6711,7 +7345,14 @@
 
 \begin{longsymtable}[FDSYM]{\FDSYM\ Geometric Binary Operators}
 \ltidxboth{binary}{operators}
+\ltidxboth{boxed}{symbols}
+\ltindex{circles}
+\ltindex{squares}
+\ltindex{triangles}
 \ltindex{rhombuses}
+\ltindex{stars}
+\ltindex{asterisks}
+\ltindex{asterisks>circled}
 \label{fdsym-geometric-bin}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -6775,7 +7416,12 @@
 
 \begin{longsymtable}[BSK]{\BSK\ Geometric Binary Operators}
 \ltidxboth{binary}{operators}
+\ltidxboth{boxed}{symbols}
 \ltindex{rhombuses}
+\ltindex{squares}
+\ltindex{circles}
+\ltindex{triangles}
+\ltindex{stars}
 \label{bsk-geometric-bin}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -6809,6 +7455,11 @@
 \begin{longsymtable}[STIX]{\STIX\ Geometric Binary Operators}
 \ltidxboth{binary}{operators}
 \ltindex{rhombuses}
+\ltindex{squares}
+\ltindex{circles}
+\ltindex{triangles}
+\ltindex{stars}
+\ltindex{crosses}
 \label{stix-geometric-bin}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -6855,6 +7506,213 @@
 \end{longsymtable}
 
 
+\begin{longsymtable}[LOGIX]{\LOGIX\ Geometric Binary Operators}
+\ltidxboth{binary}{operators}
+\ltindex{rhombuses}
+\ltindex{circles}
+\ltindex{triangles}
+\ltindex{squares}
+\ltindex{polygons}
+\ltindex{arrowheads}
+\ltindex{geometric shapes}
+\label{logix-geometric-bin}
+\begin{longtable}{*2{ll}}
+\multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{4}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\K\BlackCircle                           & \K\LogPast                                        \\
+\K\BlackCircleA                          & \K\LogPos                                         \\
+\K\BlackCircleB                          & \K\LWhiteCircle                                   \\
+\K\BlackCircleC                          & \K\LWhiteCurvedDiamond                            \\
+\K\BlackCircleD                          & \K\LWhiteDiamond                                  \\
+\K\BlackCircleE                          & \K\LWhiteDownTriangle                             \\
+\K\BlackCircleF                          & \K\LWhiteLeftArrowHead                            \\
+\K\BlackCircleG                          & \K\LWhiteLeftTriangle                             \\
+\K\BlackCircleH                          & \K\LWhiteLozenge                                  \\
+\K\BlackCircleI                          & \K\LWhiteRightArrowHead                           \\
+\K\BlackCurvedDiamond                    & \K\LWhiteRightCurvedArrowHead                     \\
+\K\BlackDiamond                          & \K\LWhiteRightTriangle                            \\
+\K\BlackDiamondA                         & \K\LWhiteSmallCircle                              \\
+\K\BlackDiamondB                         & \K\LWhiteSquare                                   \\
+\K\BlackDiamondC                         & \K\LWhiteSquareRoundCorners                       \\
+\K\BlackDiamondD                         & \K\LWhiteUpTriangle                               \\
+\K\BlackDiamondE                         & \K\LWhiteVerySmallCircle                          \\
+\K\BlackDiamondF                         & \K\LWhiteVerySmallSquare                          \\
+\K\BlackDiamondG                         & \K\Nec                                            \\
+\K\BlackDiamondH                         & \K\Next                                           \\
+\K\BlackDiamondI                         & \K\NonCont                                        \\
+\K\BlackDownTriangle                     & \K\OutlineCircle                                  \\
+\K\BlackDownTriangleA                    & \K\OutlineCurvedDiamond                           \\
+\K\BlackDownTriangleB                    & \K\OutlineDiamond                                 \\
+\K\BlackDownTriangleC                    & \K\OutlineDownTriangle                            \\
+\K\BlackDownTriangleD                    & \K\OutlineLeftArrowHead                           \\
+\K\BlackDownTriangleE                    & \K\OutlineLeftTriangle                            \\
+\K\BlackDownTriangleF                    & \K\OutlineLozenge                                 \\
+\K\BlackDownTriangleG                    & \K\OutlineRightArrowHead                          \\
+\K\BlackDownTriangleH                    & \K\OutlineRightCurvedArrowHead                    \\
+\K\BlackDownTriangleI                    & \K\OutlineRightTriangle                           \\
+\K\BlackLeftArrowHead                    & \K\OutlineSmallCircle                             \\
+\K\BlackLeftTriangle                     & \K\OutlineSquare                                  \\
+\K\BlackLeftTriangleA                    & \K\OutlineSquareRoundCorners                      \\
+\K\BlackLeftTriangleB                    & \K\OutlineUpTriangle                              \\
+\K\BlackLeftTriangleC                    & \K\OutlineVerySmallCircle                         \\
+\K\BlackLeftTriangleD                    & \K\OutlineVerySmallSquare                         \\
+\K\BlackLeftTriangleE                    & \K\Past                                           \\
+\K\BlackLeftTriangleF                    & \K\Pos                                            \\
+\K\BlackLeftTriangleG                    & \K\QuartedLozenge                                 \\
+\K\BlackLeftTriangleH                    & \K\QuarteredCircle                                \\
+\K\BlackLeftTriangleI                    & \K\QuarteredCurvedDiamond                         \\
+\K\BlackLozenge                          & \K\QuarteredDiamond                               \\
+\K\BlackReallySmallCircle                & \K\QuarteredDownTriangle                          \\
+\K\BlackReallySmallDiamond               & \K\QuarteredLeftTriangle                          \\
+\K\BlackReallySmallSquare                & \K\QuarteredRightTriangle                         \\
+\K\BlackRightArrowHead                   & \K\QuarteredSmallCircle                           \\
+\K\BlackRightCurvedArrowHead             & \K\QuarteredSquare                                \\
+\K\BlackRightTriangle                    & \K\QuarteredSquareRoundCorners                    \\
+\K\BlackRightTriangleA                   & \K\QuarteredUpTriangle                            \\
+\K\BlackRightTriangleB                   & \K\QuarteredVerySmallCircle                       \\
+\K\BlackRightTriangleC                   & \K\QuarteredVerySmallSquare                       \\
+\K\BlackRightTriangleD                   & \K\TmpCont                                        \\
+\K\BlackRightTriangleE                   & \K\TmpFutr                                        \\
+\K\BlackRightTriangleF                   & \K\TmpNec                                         \\
+\K\BlackRightTriangleG                   & \K\TmpNext                                        \\
+\K\BlackRightTriangleH                   & \K\TmpNonCont                                     \\
+\K\BlackRightTriangleI                   & \K\TmpPast                                        \\
+\K\BlackSmallCircle                      & \K\TmpPos                                         \\
+\K\BlackSquare                           & \K\UpSlahsedSquareRoundCorners                    \\
+\K\BlackSquareA                          & \K\UpSlashedCircle                                \\
+\K\BlackSquareB                          & \K\UpSlashedCurvedDiamond                         \\
+\K\BlackSquareC                          & \K\UpSlashedDiamond                               \\
+\K\BlackSquareD                          & \K\UpSlashedDownTriangle                          \\
+\K\BlackSquareE                          & \K\UpSlashedLeftTriangle                          \\
+\K\BlackSquareF                          & \K\UpSlashedLozenge                               \\
+\K\BlackSquareG                          & \K\UpSlashedRightTriangle                         \\
+\K\BlackSquareH                          & \K\UpSlashedSmallCircle                           \\
+\K\BlackSquareI                          & \K\UpSlashedSquare                                \\
+\K\BlackSquareRoundCorners               & \K\UpSlashedUpTriangle                            \\
+\K\BlackUpTriangle                       & \K\UpSlashedVerySmallCircle                       \\
+\K\BlackUpTriangleA                      & \K\UpSlashedVerySmallSquare                       \\
+\K\BlackUpTriangleB                      & \K\VerticallyDividedCircle                        \\
+\K\BlackUpTriangleC                      & \K\VerticallyDividedCurvedDiamond                 \\
+\K\BlackUpTriangleD                      & \K\VerticallyDividedDiamond                       \\
+\K\BlackUpTriangleE                      & \K\VerticallyDividedDownTriangle                  \\
+\K\BlackUpTriangleF                      & \K\VerticallyDividedLeftTriangle                  \\
+\K\BlackUpTriangleG                      & \K\VerticallyDividedLozenge                       \\
+\K\BlackUpTriangleH                      & \K\VerticallyDividedRightTriangle                 \\
+\K\BlackUpTriangleI                      & \K\VerticallyDividedSmallCircle                   \\
+\K\BlackVerySmallCircle                  & \K\VerticallyDividedSquare                        \\
+\K\BlackVerySmallSquare                  & \K\VerticallyDividedSquareRoundCorners            \\
+\K\Cont                                  & \K\VerticallyDividedUpTriangle                    \\
+\K\CrossedCircle                         & \K\VerticallyDividedVerySmallCircle               \\
+\K\CrossedCurvedDiamond                  & \K\VerticallyDividedVerySmallSquare               \\
+\K\CrossedDiamond                        & \K\WhiteCircle                                    \\
+\K\CrossedDownTriangle                   & \K\WhiteCircleA                                   \\
+\K\CrossedLeftTriangle                   & \K\WhiteCircleB                                   \\
+\K\CrossedLozenge                        & \K\WhiteCircleC                                   \\
+\K\CrossedRightTriangle                  & \K\WhiteCircleContainingBlackCircle               \\
+\K\CrossedSmallCircle                    & \K\WhiteCircleD                                   \\
+\K\CrossedSquare                         & \K\WhiteCircleE                                   \\
+\K\CrossedSquareRoundCorners             & \K\WhiteCircleF                                   \\
+\K\CrossedUpTriangle                     & \K\WhiteCircleG                                   \\
+\K\CrossedVerySmallCircle                & \K\WhiteCircleH                                   \\
+\K\CrossedVerySmallSquare                & \K\WhiteCircleI                                   \\
+\K\DeoCont                               & \K\WhiteCurvedDiamond                             \\
+\K\DeoFutr                               & \K\WhiteCurvedDiamondContainingBlackDiamond       \\
+\K\DeoNec                                & \K\WhiteDiamond                                   \\
+\K\DeoNext                               & \K\WhiteDiamondA                                  \\
+\K\DeoNonCont                            & \K\WhiteDiamondB                                  \\
+\K\DeoPast                               & \K\WhiteDiamondC                                  \\
+\K\DeoPos                                & \K\WhiteDiamondContainingBlackDiamond             \\
+\K\DottedCircl                           & \K\WhiteDiamondD                                  \\
+\K\DottedCurvedDiamond                   & \K\WhiteDiamondE                                  \\
+\K\DottedDiamond                         & \K\WhiteDiamondF                                  \\
+\K\DottedDownTriangle                    & \K\WhiteDiamondG                                  \\
+\K\DottedLeftArrowHead                   & \K\WhiteDiamondH                                  \\
+\K\DottedLeftTriangle                    & \K\WhiteDiamondI                                  \\
+\K\DottedLozenge                         & \K\WhiteDownTriangle                              \\
+\K\DottedRightArrowHead                  & \K\WhiteDownTriangleA                             \\
+\K\DottedRightCurvedArrowHead            & \K\WhiteDownTriangleB                             \\
+\K\DottedRightTriangle                   & \K\WhiteDownTriangleC                             \\
+\K\DottedSmallCircle                     & \K\WhiteDownTriangleContainingBlackDownTriangle   \\
+\K\DottedSquare                          & \K\WhiteDownTriangleD                             \\
+\K\DottedSquareRoundCorners              & \K\WhiteDownTriangleE                             \\
+\K\DottedUpTriangle                      & \K\WhiteDownTriangleF                             \\
+\K\DottedVerySmallCircle                 & \K\WhiteDownTriangleG                             \\
+\K\DottedVerySmallSquare                 & \K\WhiteDownTriangleH                             \\
+\K\DownSlashedCircle                     & \K\WhiteDownTriangleI                             \\
+\K\DownSlashedCurvedDiamond              & \K\WhiteLeftArrowHead                             \\
+\K\DownSlashedDiamond                    & \K\WhiteLeftTriangle                              \\
+\K\DownSlashedDownTriangle               & \K\WhiteLeftTriangleA                             \\
+\K\DownSlashedLeftTriangle               & \K\WhiteLeftTriangleB                             \\
+\K\DownSlashedLozenge                    & \K\WhiteLeftTriangleC                             \\
+\K\DownSlashedRightTriangle              & \K\WhiteLeftTriangleContainingBlackLeftTriangle   \\
+\K\DownSlashedSmallCircle                & \K\WhiteLeftTriangleD                             \\
+\K\DownSlashedSquare                     & \K\WhiteLeftTriangleE                             \\
+\K\DownSlashedSquareRoundCorners         & \K\WhiteLeftTriangleF                             \\
+\K\DownSlashedUpTriangle                 & \K\WhiteLeftTriangleG                             \\
+\K\DownSlashedVerySmallCircle            & \K\WhiteLeftTriangleH                             \\
+\K\DownSlashedVerySmallSquare            & \K\WhiteLeftTriangleI                             \\
+\K\DoxCont                               & \K\WhiteLozenge                                   \\
+\K\DoxFutr                               & \K\WhiteLozengeContainingBlackLozenge             \\
+\K\DoxNec                                & \K\WhiteReallySmallCircle                         \\
+\K\DoxNext                               & \K\WhiteReallySmallDiamond                        \\
+\K\DoxNonCont                            & \K\WhiteReallySmallSquare                         \\
+\K\DoxPast                               & \K\WhiteRightArrowHead                            \\
+\K\DoxPos                                & \K\WhiteRightCurvedArrowHead                      \\
+\K\FacCont                               & \K\WhiteRightTriangle                             \\
+\K\FacFutr                               & \K\WhiteRightTriangleA                            \\
+\K\FacNec                                & \K\WhiteRightTriangleB                            \\
+\K\FacNext                               & \K\WhiteRightTriangleC                            \\
+\K\FacNonCont                            & \K\WhiteRightTriangleContainingBlackRightTriangle \\
+\K\FacPast                               & \K\WhiteRightTriangleD                            \\
+\K\FacPos                                & \K\WhiteRightTriangleE                            \\
+\K\Futr                                  & \K\WhiteRightTriangleF                            \\
+\K\HorizontallyDividedCircle             & \K\WhiteRightTriangleG                            \\
+\K\HorizontallyDividedCurvedDiamond      & \K\WhiteRightTriangleH                            \\
+\K\HorizontallyDividedDiamond            & \K\WhiteRightTriangleI                            \\
+\K\HorizontallyDividedDownTriangle       & \K\WhiteSmallCircle                               \\
+\K\HorizontallyDividedLeftTriangle       & \K\WhiteSmallCircleContainingBlackCircle          \\
+\K\HorizontallyDividedLozenge            & \K\WhiteSquare                                    \\
+\K\HorizontallyDividedRightTriangle      & \K\WhiteSquareA                                   \\
+\K\HorizontallyDividedSmallCircle        & \K\WhiteSquareB                                   \\
+\K\HorizontallyDividedSquare             & \K\WhiteSquareC                                   \\
+\K\HorizontallyDividedSquareRoundCorners & \K\WhiteSquareContainingBlackSquare               \\
+\K\HorizontallyDividedUpTriangle         & \K\WhiteSquareD                                   \\
+\K\HorizontallyDividedVerySmallCircle    & \K\WhiteSquareE                                   \\
+\K\HorizontallyDividedVerySmallSquare    & \K\WhiteSquareF                                   \\
+\K\LBlackCircle                          & \K\WhiteSquareG                                   \\
+\K\LBlackCurvedDiamond                   & \K\WhiteSquareH                                   \\
+\K\LBlackDiamond                         & \K\WhiteSquareI                                   \\
+\K\LBlackDownTriangle                    & \K\WhiteSquareRoundCorners                        \\
+\K\LBlackLeftArrowHead                   & \K\WhiteSquareRoundCornersContainingBlackSquare   \\
+\K\LBlackLeftTriangle                    & \K\WhiteUpTriangle                                \\
+\K\LBlackLozenge                         & \K\WhiteUpTriangleA                               \\
+\K\LBlackRightArrowHead                  & \K\WhiteUpTriangleB                               \\
+\K\LBlackRightCurvedArrowHead            & \K\WhiteUpTriangleC                               \\
+\K\LBlackRightTriangle                   & \K\WhiteUpTriangleContainingBlackUpTriangle       \\
+\K\LBlackSmallCircle                     & \K\WhiteUpTriangleD                               \\
+\K\LBlackSquare                          & \K\WhiteUpTriangleE                               \\
+\K\LBlackSquareRoundCorners              & \K\WhiteUpTriangleF                               \\
+\K\LBlackUpTriangle                      & \K\WhiteUpTriangleG                               \\
+\K\LBlackVerySmallCircle                 & \K\WhiteUpTriangleH                               \\
+\K\LBlackVerySmallSquare                 & \K\WhiteUpTriangleI                               \\
+\K\LogCont                               & \K\WhiteVerySmallCircle                           \\
+\K\LogFutr                               & \K\WhiteVerySmallCircleContainingBlackCircle      \\
+\K\LogNec                                & \K\WhiteVerySmallSquare                           \\
+\K\LogNext                               & \K\WhiteVerySmallSquareContainingBlackSquare      \\
+\K\LogNonCont                            &                                                   \\
+\end{longtable}
+
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{longsymtable}
+
+
 \begin{symtable}[HWMATH]{\HWMATH\ Halloween-Themed Math Operators}
 \index{pumpkins}
 \index{witches}
@@ -6974,8 +7832,8 @@
 
 \begin{symtable}{Variable-sized Math Operators}
 \idxboth{variable-sized}{symbols}
-\idxboth{linear logic}{symbols}
-\index{integrals}
+\idxboth{logic}{symbols}
+\index{integrals>circular ($\oint$)}
 \label{op}
 \renewcommand{\arraystretch}{1.75}  % Keep tall symbols from touching.
 \begin{tabular}{*3{l@{$\:$}ll@{\qquad}}l@{$\:$}ll}
@@ -6989,7 +7847,8 @@
 
 \begin{symtable}[AMS]{\AMS\ Variable-sized Math Operators}
 \idxboth{variable-sized}{symbols}
-\index{integrals}
+\subindex{integrals}{contour}
+\index{integrals>dotted}
 \label{ams-large}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
 \begin{tabular}{l@{$\:$}ll@{\qquad}l@{$\:$}ll}
@@ -7013,7 +7872,7 @@
 
 \begin{symtable}[WASY]{\WASY\ Variable-sized Math Operators}
 \idxboth{variable-sized}{symbols}
-\index{integrals}
+\subindex{integrals}{contour}
 \label{wasy-large}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
 \begin{tabular}{*2{l@{$\:$}ll@{\qquad}}l@{$\:$}ll}
@@ -7043,7 +7902,12 @@
 
 \begin{longsymtable}[ABX]{\ABX\ Variable-sized Math Operators}
 \ltidxboth{variable-sized}{symbols}
+\ltidxboth{boxed}{symbols}
 \ltindex{integrals}
+\ltsubindex{integrals}{contour}
+\ltindex{asterisks}
+\ltindex{asterisks>boxed}
+\ltindex{asterisks>circled}
 \label{abx-large}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
 \begin{longtable}{*2{l@{$\:$}ll@{\qquad}}l@{$\:$}ll}
@@ -7074,7 +7938,7 @@
 
 \begin{longsymtable}[TX]{\TXPX\ Variable-sized Math Operators}
 \ltidxboth{variable-sized}{symbols}
-\ltindex{integrals}
+\ltsubindex{integrals}{contour}
 \label{txpx-large}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
 \begin{longtable}{l@{$\:$}ll@{\hspace{4em}}l@{$\:$}ll}
@@ -7135,8 +7999,9 @@
 
 \begin{longsymtable}[MNS]{\MNS\ Variable-sized Math Operators}
 \ltidxboth{variable-sized}{symbols}
-\ltidxboth{linear logic}{symbols}
+\ltidxboth{logic}{symbols}
 \ltindex{integrals}
+\ltsubindex{integrals}{contour}
 \label{mns-large}
 \renewcommand{\arraystretch}{1.75}  % Keep tall symbols from touching.
 \begin{longtable}{*2{c@{\quad}cl@{\qquad}}c@{\quad}cl}
@@ -7179,8 +8044,9 @@
 
 \begin{longsymtable}[FDSYM]{\FDSYM\ Variable-sized Math Operators}
 \ltidxboth{variable-sized}{symbols}
-\ltidxboth{linear logic}{symbols}
+\ltidxboth{logic}{symbols}
 \ltindex{integrals}
+\ltsubindex{integrals}{contour}
 \label{fdsym-large}
 \renewcommand{\arraystretch}{1.75}  % Keep tall symbols from touching.
 \begin{longtable}{*2{c@{\quad}cl@{\qquad}}c@{\quad}cl}
@@ -7264,6 +8130,7 @@
 \begin{longsymtable}[STIX]{\STIX\ Variable-sized Math Operators}
 \ltidxboth{variable-sized}{symbols}
 \ltindex{integrals}
+\ltsubindex{integrals}{contour}
 \label{stix-large}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
 \begin{longtable}{*2{c@{\quad}cl@{\qquad}}c@{\quad}cl}
@@ -7307,6 +8174,7 @@
 \begin{longsymtable}[STIX]{\STIX\ Integrals with Explicit Slant}
 \ltidxboth{variable-sized}{symbols}
 \ltindex{integrals}
+\ltsubindex{integrals}{contour}
 \label{stix-large-all}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
 \begin{longtable}{c@{\quad}cl @{\qquad} c@{\quad}cl}
@@ -7362,6 +8230,7 @@
 \begin{longsymtable}[CMUPINT]{\CMUPINT\ Variable-sized Upright Integrals}
 \ltidxboth{variable-sized}{symbols}
 \ltindex{integrals}
+\ltsubindex{integrals}{contour}
 \label{cmupint}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
 \begin{longtable}{*2{c@{\quad}cl@{\hspace{4em}}}c@{\quad}cl}
@@ -7412,6 +8281,7 @@
 \begin{symtable}[MDES]{\MDES\ Variable-sized Math Operators}
 \idxboth{variable-sized}{symbols}
 \index{integrals}
+\subindex{integrals}{contour}
 \label{mdes-large}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
 \begin{tabular}{*2{c@{\quad}cl@{\hspace{4em}}}c@{\quad}cl}
@@ -7432,9 +8302,36 @@
 \end{symtable}
 
 
+\begin{symtable}[PDFMSYM]{\PDFMSYM\ Variable-sized Math Operators}
+\idxboth{variable-sized}{symbols}
+\label{pdfmsym-large}
+\renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
+\begin{tabular}{lll@{\qquad}lll}
+\R\aint         & \R\bigforall                        \\
+\R\bigcircwedge & \R[\biNint{5}]\biNint\verb|{5}|$^*$ \\
+\R\bigdcup      & \R[\iNint{5}]\iNint\verb|{5}|$^*$   \\
+\R\bigdwedge    & \R[\oiNint{5}]\oiNint\verb|{5}|$^*$ \\
+\R\bigexists    &                                     \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \pdfmsymmessage.
+\end{tablenote}
+
+\bigskip
+\begin{tablenote}[*]
+  These commands have a required argument, which specifies the number
+  of integrals.  For example, \verb|\oiNint{7}| produces the symbol
+  \[ \oiNint{7} \quad. \]
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[PRODINT]{\PRODINT\ Variable-sized Math Operators}
 \idxboth{variable-sized}{symbols}
-\idxboth{product}{integrals}
+\index{product integrals}
+\subindex{integrals}{product}
 \label{prodint}
 \begin{tabular}{*3{ll}}
   \K\prodi & \K\Prodi & \K\PRODI \\
@@ -7444,9 +8341,9 @@
 
 \begin{tablenote}
   \PRODINT\ currently requires the author to manually specify
-  \cmd{\prodi} for inlined expressions (\verb|$|\dots\verb|$|),
-  \cmd{\Prodi} for displayed math (\verb|\[|\dots\verb|\]|), and
-  \cmd{\PRODI} for displayed math involving tall integrands.  The
+  \cmdI{\prodi} for inlined expressions (\verb|$|\dots\verb|$|),
+  \cmdI{\Prodi} for displayed math (\verb|\[|\dots\verb|\]|), and
+  \cmdI{\PRODI} for displayed math involving tall integrands.  The
   package does not define a product integral command that scales
   automatically akin to the symbols in \ref{op}.
 \end{tablenote}
@@ -7453,8 +8350,29 @@
 \end{symtable}
 
 
+\begin{symtable}[PDFMSYM]{\PDFMSYM\ Extensible Math Operators}
+\label{pdfmsym-ext-ops}
+\begin{tabular}{ll@{\qquad}ll}
+\X\prood & \X\suum \\
+\end{tabular}
+
+\bigskip
+
+\begin{tablenote}
+  These symbols extend horizontally to fit their lower and upper limits.
+  Hence,
+\begin{verbatim}
+\suum_{i=\lfloor\sqrt{a^2 + b^2 + c^2}\rfloor}^{\max(5N-3, 11N-8)}
+\end{verbatim}
+  produces
+  \[ \suum_{i=\lfloor\sqrt{a^2 + b^2 + c^2}\rfloor}^{\max(5N-3, 11N-8)} \quad. \]
+  \pdfmsymmessage.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[CMLL]{\CMLL\ Large Math Operators}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
 \label{cmll-large}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
 \begin{tabular}{ll@{\qquad}ll}
@@ -7472,6 +8390,9 @@
 
 \begin{symtable}{Binary Relations}
 \idxboth{relational}{symbols}
+\idxboth{frown}{symbols}
+\idxboth{smile}{symbols}
+\idxboth{database}{symbols}
 \index{tacks}
 \label{rel}
 \begin{tabular}{*4{ll}}
@@ -7489,11 +8410,12 @@
 \bigskip
 \begin{tablenote}[\dag]
   The difference between \cmdX{\mid} and
-  \verb+|+\index{_=\magicvertname{} ($\vert$)} is that the former is a
-  binary relation while the latter is a math ordinal.  Consequently,
-  \latex\ typesets the two with different surrounding spacing.
-  Contrast ``\verb+P(A | B)+''~$\mapsto$ \mbox{``$P(A | B)$''} with
-  ``\verb+P(A \mid B)+''~$\mapsto$ \mbox{``$P(A \mid B)$''}.
+  \verb+|+\index{_magicvertname=\magicvertname{} ($\vert$)} is that
+  the former is a binary relation while the latter is a math ordinal.
+  Consequently, \latex\ typesets the two with different surrounding
+  spacing.  Contrast ``\verb+P(A | B)+''~$\mapsto$ \mbox{``$P(A |
+    B)$''} with ``\verb+P(A \mid B)+''~$\mapsto$ \mbox{``$P(A \mid
+    B)$''}.
 \end{tablenote}
 \end{symtable}
 
@@ -7502,6 +8424,8 @@
 \index{binary relations}
 \index{relational symbols>binary}
 \index{pitchforks}
+\idxboth{frown}{symbols}
+\idxboth{smile}{symbols}
 \label{ams-rel}
 \begin{tabular}{*3{ll}}
 \X\approxeq      & \X\eqcirc        & \X\succapprox    \\
@@ -7548,6 +8472,7 @@
 \begin{symtable}[WASY]{\WASY\ Binary Relations}
 \index{binary relations}
 \index{relational symbols>binary}
+\idxboth{database}{symbols}
 \label{wasy-rel}
 \begin{tabular}{*3{ll}}
 \X\invneg & \X\leadsto & \X\wasypropto \\
@@ -7559,10 +8484,11 @@
 \begin{symtable}[TX]{\TXPX\ Binary Relations}
 \index{binary relations}
 \index{relational symbols>binary}
+\idxboth{database}{symbols}
 \label{txpx-rel}
 \begin{tabular}{*3{ll}}
 \X\circledgtr   & \X\lJoin                & \X\opentimes      \\
-\X\circledless  & \X\lrtimes              & \X\Perp           \\
+\X\circledless  & \X\lrtimes              & \X[\TXPerp]\Perp  \\
 \X\colonapprox  & \X\multimap             & \X\preceqq        \\
 \X\Colonapprox  & \X\multimapboth         & \X\precneqq       \\
 \X\coloneq      & \X\multimapbothvert     & \X\rJoin          \\
@@ -7625,7 +8551,8 @@
 
 
 \begin{symtable}[ABX]{\ABX\ Negated Binary Relations}
-\index{binary relations>negated}\index{relational symbols>negated binary}
+\index{binary relations>negated}
+\index{relational symbols>negated binary}
 \label{abx-nrel}
 \begin{tabular}{*3{ll}}
 \X[\ABXnapprox]\napprox           & \X[\ABXnotperp]\notperp           & \X[\ABXnvDash]\nvDash           \\
@@ -7716,7 +8643,7 @@
 \K[\MNSleftvdash]\dashv      & \mnssyn\leftvdash \\
 \K[\MNSnwseline]\diagdown    & \mnssyn\nwseline \\
 \K[\MNSneswline]\diagup      & \mnssyn\neswline \\
-\K[\MNSneswline]\divides     & \mnssyn\updownline \\
+\K[\MNSupdownline]\divides   & \mnssyn\updownline \\
 \K[\MNSDoteq]\doteqdot       & \mnssyn\Doteq \\
 \K[\MNSrightmodels]\models   & \mnssyn\rightmodels \\
 \K[\MNSUpdownline]\parallel  & \mnssyn\Updownline \\
@@ -7809,8 +8736,11 @@
 
 
 \begin{longsymtable}[FDSYM]{\FDSYM\ Binary Relations}
-\index{binary relations}
-\index{relational symbols>binary}
+\ltindex{binary relations}
+\ltindex{relational symbols>binary}
+\ltidxboth{frown}{symbols}
+\ltidxboth{smile}{symbols}
+\ltidxboth{database}{symbols}
 \label{fdsym-rel}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -7884,8 +8814,10 @@
 
 
 \begin{longsymtable}[FDSYM]{\FDSYM\ Negated Binary Relations}
-\index{binary relations>negated}
-\index{relational symbols>negated binary}
+\ltindex{binary relations>negated}
+\ltindex{relational symbols>negated binary}
+\ltidxboth{frown}{symbols}
+\ltidxboth{smile}{symbols}
 \label{fdsym-nrel}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -7956,8 +8888,10 @@
 
 
 \begin{longsymtable}[BSK]{\BSK\ Binary Relations}
-\index{binary relations}
-\index{relational symbols>binary}
+\ltindex{binary relations}
+\ltindex{relational symbols>binary}
+\ltidxboth{frown}{symbols}
+\ltidxboth{smile}{symbols}
 \label{bsk-rel}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -8021,8 +8955,8 @@
 \begin{longsymtable}[STIX]{\STIX\ Binary Relations}
 \ltindex{binary relations}
 \ltindex{relational symbols>binary}
-\ltindex{APL>symbols}
-\ltindex{symbols>APL}
+\ltidxboth{APL}{symbols}
+\ltidxboth{frown}{symbols}
 \label{stix-rel}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -8163,9 +9097,9 @@
 
 
 \begin{longsymtable}[TURN]{\TURN\ Binary Relations}
-\index{binary relations}
-\index{relational symbols>binary}
-\index{consequence relations}
+\ltindex{binary relations}
+\ltindex{relational symbols>binary}
+\ltindex{consequence relations}
 \label{turn-rel}
 \renewcommand{\arraystretch}{2}  % Keep tall symbols from touching.
 \begin{longtable}{ll@{\hspace*{2em}}ll@{\hspace*{2em}}ll}
@@ -8236,10 +9170,27 @@
 \end{symtable}
 
 
+\begin{symtable}[PDFMSYM]{\PDFMSYM\ Binary Relations}
+\idxboth{relational}{symbols}
+\label{pdfmsym-rel}
+\begin{tabular}{*3{ll}}
+\X\leftPP      & \X\longroundedarrow & \X\roundedarrow \\
+\X\longleftPP  & \X\longsquaredarrow & \X\squaredarrow \\
+\X\longrightPP & \X\rightPP          &                 \\
+\end{tabular}
+
+\bigskip
+
+\begin{tablenote}
+  \pdfmsymmessage.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[CMLL]{\CMLL\ Binary Relations}
 \index{binary relations}
 \index{relational symbols>binary}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
 \label{cmll-rel}
 \begin{tabular}{ll@{\hspace*{2em}}ll}
 \K[\CMLLcoh]\coh     & \K[\CMLLscoh]\scoh       \\
@@ -8275,6 +9226,44 @@
 \end{symtable}
 
 
+\begin{symtable}[LOGIX]{\LOGIX\ Binary Relations}
+\index{binary relations}
+\index{relational symbols>binary}
+\label{logix-rel}
+\begin{tabular}{*4{ll}}
+\K\ClsEquv    & \K\NotClsEquv    & \K\NotPre       & \K\Pre       \\
+\K\ClsImpl    & \K\NotClsImpl    & \K\NotPreq      & \K\Preq      \\
+\K\Conseq     & \K\NotConseq     & \K\NotRule      & \K\Rule      \\
+\K\DTrpTurn   & \K\NotDTrpTurn   & \K\NotSeq       & \K\Seq       \\
+\K\DTurnDWavy & \K\NotDTurnDWavy & \K\NotSuc       & \K\Suc       \\
+\K\DTurnWavy  & \K\NotDTurnWavy  & \K\NotSucq      & \K\Sucq      \\
+\K\Model      & \K\NotModel      & \K\NotTrpTurn   & \K\TrpTurn   \\
+\K\MulMap     & \K\NotMulMap     & \K\NotTurn      & \K\Turn      \\
+\K\MulMapDual & \K\NotMulMapDual & \K\NotTurnDWavy & \K\TurnDWavy \\
+\K\MulMapInv  & \K\NotMulMapInv  & \K\NotTurnWavy  & \K\TurnWavy  \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[LOGIX]{\LOGIX\ Set Symbols}
+\label{logix-set}
+\begin{tabular}{*4{ll}}
+\K\In    & \K\NotOwns & \K\Of   & \K\VoidBunch \\
+\K\NotIn & \K\NullSet & \K\Owns &              \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}{Subset and Superset Relations}
 \index{binary relations}
 \index{relational symbols>binary}
@@ -8511,6 +9500,28 @@
 \end{longsymtable}
 
 
+\begin{symtable}[LOGIX]{\LOGIX\ Subset and Superset Relations}
+\index{binary relations}
+\index{relational symbols>binary}
+\index{subsets}
+\index{supersets}
+\index{symbols>subset and superset}
+\label{logix-subsets}
+\begin{tabular}{*4{ll}}
+\K\FntSbset    & \K\NotStrctFntSbset & \K\NotWkSbnch    & \K\StrctSbmap   \\
+\K\NotFntSbset & \K\NotStrctSbmap    & \K\Sbmap         & \K\StrctSbnch   \\
+\K\NotSbmap    & \K\NotStrctSbnch    & \K\Sbnch         & \K\StrctSbset   \\
+\K\NotSbnch    & \K\NotStrctSbset    & \K\Sbset         & \K\StrctWkSbnch \\
+\K\NotSbset    & \K\NotStrctWkSbnch  & \K\StrctFntSbset & \K\WkSbnch      \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}{Inequalities}
 \index{binary relations}\index{relational symbols>binary}
 \index{inequalities}
@@ -8651,8 +9662,8 @@
 
 
 \begin{longsymtable}[FDSYM]{\FDSYM\ Inequalities}
-\index{binary relations}\index{relational symbols>binary}
-\index{inequalities}
+\ltindex{binary relations}\index{relational symbols>binary}
+\ltindex{inequalities}
 \label{fdsym-inequal-rel}
 \renewcommand{\arraystretch}{1.25}   % Keep visually similar symbols from touching.
 \begin{longtable}{ll*2{@{\hspace*{2em}}ll}}
@@ -8805,8 +9816,31 @@
 \end{longsymtable}
 
 
+\begin{symtable}[LOGIX]{\LOGIX\ Inequalities and Equalities}
+\index{binary relations}
+\index{relational symbols>binary}
+\index{inequalities}
+\label{logix-inequal-rel}
+\begin{tabular}{*4{ll}}
+\K\CircEq  & \K\Gr     & \K\NotLs    & \K\SbGr  \\
+\K\CircGr  & \K\Gre    & \K\NotLse   & \K\SbGre \\
+\K\CircGre & \K\Ls     & \K\NotSbGr  & \K\SbLs  \\
+\K\CircLs  & \K\Lse    & \K\NotSbGre & \K\SbLse \\
+\K\CircLse & \K\NotEq  & \K\NotSbLs  & \K\Sm    \\
+\K\CircSm  & \K\NotGr  & \K\NotSbLse &          \\
+\K\Eq      & \K\NotGre & \K\NotSm    &          \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[AMS]{\AMS\ Triangle Relations}
-\index{triangle relations}\index{relational symbols>triangle}
+\index{triangle relations}
+\index{relational symbols>triangle}
 \label{ams-triangle-rel}
 \begin{tabular}{*3{ll}}
 \X\blacktriangleleft  & \X\ntriangleright    & \X\trianglerighteq  \\
@@ -9055,7 +10089,7 @@
 
 
 \begin{symtable}[AMS]{\AMS\ Negated Arrows}
-\index{arrows>negated}
+\subindex{arrows}{negated}
 \label{ams-narrows}
 \begin{tabular}{*3{ll}}
 \X\nLeftarrow      & \X\nLeftrightarrow & \X\nRightarrow     \\
@@ -9076,6 +10110,7 @@
 
 \begin{symtable}[ST]{\ST\ Arrows}
 \index{arrows}
+\index{lightning}
 \label{st-arrows}
 \begin{tabular}{*3{ll}}
 \X\leftarrowtriangle      & \X\Mapsfrom           & \X\shortleftarrow  \\
@@ -9130,7 +10165,7 @@
 
 
 \begin{symtable}[ABX]{\ABX\ Negated Arrows}
-\index{arrows>negated}
+\subindex{arrows}{negated}
 \label{abx-narrows}
 \begin{tabular}{*3{ll}}
 \X[\ABXnLeftarrow]\nLeftarrow & \X[\ABXnleftrightarrow]\nleftrightarrow & \X[\ABXnrightarrow]\nrightarrow \\
@@ -9156,7 +10191,8 @@
 
 
 \begin{longsymtable}[MNS]{\MNS\ Arrows}
-\index{arrows}
+\ltindex{arrows}
+\ltindex{lightning}
 \label{mns-arrows}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -9254,7 +10290,7 @@
 
 
 \begin{longsymtable}[MNS]{\MNS\ Negated Arrows}
-\index{arrows>negated}
+\ltsubindex{arrows}{negated}
 \label{mns-narrows}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -9398,7 +10434,8 @@
 
 
 \begin{longsymtable}[FDSYM]{\FDSYM\ Arrows}
-\index{arrows}
+\ltindex{arrows}
+\ltindex{lightning}
 \label{fdsym-arrows}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -9509,7 +10546,7 @@
 
 
 \begin{longsymtable}[FDSYM]{\FDSYM\ Negated Arrows}
-\index{arrows>negated}
+\ltsubindex{arrows}{negated}
 \label{fdsym-narrows}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -9678,8 +10715,8 @@
 
 
 \begin{longsymtable}[BSK]{\BSK\ Arrows}
-\index{arrows}
-\index{carriage return}
+\ltindex{arrows}
+\ltindex{carriage return}
 \label{boisik-arrows}
 \begin{longtable}{*2{ll}}
 \multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -9990,23 +11027,72 @@
 \end{longsymtable}
 
 
-\begin{symtable}[HARP]{\HARP\ Extensible Harpoons}
+\begin{longsymtable}[PDFMSYM]{\PDFMSYM\ Arrows}
+\ltindex{arrows}
+\ltindex{carriage return}
+\ltindex{lightning}
+\label{pdfmsym-arrows}
+\begin{longtable}{*2{ll}}
+\multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{4}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\X[\PDFMSYMlightning]\lightning \\
+\X\longvarCircleleftarrow    & \X\varCircleleftarrow    \\
+\X\longvarcircleleftarrow    & \X\varcircleleftarrow    \\
+\X\longvarCirclerightarrow   & \X\varCirclerightarrow   \\
+\X\longvarcirclerightarrow   & \X\varcirclerightarrow   \\
+\X\longvardoubleleftarrow    & \X\vardoubleleftarrow    \\
+\X\longvardoublerightarrow   & \X\vardoublerightarrow   \\
+\X\longvardownhookleftarrow  & \X\vardownhookleftarrow  \\
+\X\longvardownhookrightarrow & \X\vardownhookrightarrow \\
+\X\longvarLeftarrow          & \X\varLeftarrow          \\
+\X\longvarleftarrow          & \X\varleftarrow          \\
+\X\longvarleftarrows         & \X\varleftarrows         \\
+\X\longvarleftrightarrow     & \X\varleftrightarrow     \\
+\X\longvarleftrightarrows    & \X\varleftrightarrows    \\
+\X\longvarLleftarrow         & \X\varLleftarrow         \\
+\X\longvarLleftRrightarrow   & \X\varLleftRrightarrow   \\
+\X\longvarmapsfrom           & \X\varmapsfrom           \\
+\X\longvarmapsto             & \X\varmapsto             \\
+\X\longvarRibbonleftarrow    & \X\varRibbonleftarrow    \\
+\X\longvarRibbonrightarrow   & \X\varRibbonrightarrow   \\
+\X\longvarRightarrow         & \X\varRightarrow         \\
+\X\longvarrightarrow         & \X\varrightarrow         \\
+\X\longvarrightarrows        & \X\varrightarrows        \\
+\X\longvarrightleftarrows    & \X\varrightleftarrows    \\
+\X\longvarRrightarrow        & \X\varRrightarrow        \\
+\X\longvarSquareleftarrow    & \X\varSquareleftarrow    \\
+\X\longvarSquarerightarrow   & \X\varSquarerightarrow   \\
+\X\longvaruphookleftarrow    & \X\varuphookleftarrow    \\
+\X\longvaruphookrightarrow   & \X\varuphookrightarrow   \\
+\end{longtable}
+
+\bigskip
+
+\begin{tablenote}
+  \pdfmsymmessage.
+\end{tablenote}
+\end{longsymtable}
+
+
+\begin{symtable}[PDFMSYM]{\PDFMSYM\ Harpoons}
 \index{harpoons}
-\index{symbols>extensible}
-\label{harp-harpoons}
-\begin{tabular}{*3{ll}}
-\W\overleftharp{abc}     & \W\overrightharpdown{abc} & \W\underrightharp{abc}     \\
-\W\overleftharpdown{abc} & \W\underleftharp{abc}     & \W\underrightharpdown{abc} \\
-\W\overrightharp{abc}    & \W\underleftharpdown{abc} &                            \\
+\label{pdfmsym-harpoons}
+\begin{tabular}{*2{ll}}
+\X\longvarleftharp      & \X\varleftharp      \\
+\X\longvarleftrightharp & \X\varleftrightharp \\
+\X\longvarrightharp     & \X\varrightharp     \\
+\X\longvarrightleftharp & \X\varrightleftharp \\
 \end{tabular}
 
 \bigskip
+
 \begin{tablenote}
-  All of the \HARP\ symbols are implemented using the
-  \pkgname{graphics} package (specifically, \pkgname{graphics}'s
-  \cmd{\resizebox} command).  Consequently, only \tex backends that
-  support graphical transformations (e.g.,~\emph{not}
-  Xdvi\index{Xdvi}) can properly display these symbols.
+  \pdfmsymmessage.
 \end{tablenote}
 \end{symtable}
 
@@ -10049,7 +11135,7 @@
 \begin{tablenote}
   The arrows provided by \OLDARR\ represent Donald\index{Knuth, Donald E.}
   Knuth's pre-1992 \PSfont{Computer Modern} glyphs, which feature
-  smaller arrowheads.  Contrast the following:
+  smaller arrowheads\index{arrowheads}.  Contrast the following:
 
   \begin{center}
     \begin{tabular}{ccc}
@@ -10061,7 +11147,7 @@
 \ifAMS
 \ifMTOOLS
   In addition to the arrows shown above, \OLDARR\ also reduces the
-  arrowhead size for \AMS's
+  arrowhead\index{arrowheads} size for \AMS's
   \cmdI[$\string\blackacc{\string\overleftarrow}$]{\overleftarrow},
   \cmdI[$\string\blackacc{\string\overrightarrow}$]{\overrightarrow},
   \cmdI[$\string\blackacc{\string\overleftrightarrow}$]{\overleftrightarrow},
@@ -10070,14 +11156,14 @@
   \cmdI[$\string\blackacc{\string\underleftrightarrow}$]{\underleftrightarrow},
   \cmdI[$\string\blackacc{\string\xleftarrow}$]{\xleftarrow},
   \cmdI[$\string\blackacc{\string\xrightarrow}$]{\xrightarrow},
-  \cmdX{\varinjlim}, and \cmdX{\varprojlim} symbols
-  (\vref*{extensible-accents}, \vref{ams-extensible-arrows}, and
-  \vref{ams-log}) and \MTOOLS's
-  \cmdI[$\string\blackacc{\string\xleftrightarrow}$]{\xleftrightarrow},
-  \cmdI[$\string\blackacc{\string\xhookleftarrow}$]{\xhookleftarrow},
-  \cmdI[$\string\blackacc{\string\xhookrightarrow}$]{\xhookrightarrow}, and
-  \cmdI[$\string\blackacc{\string\xmapsto}$]{\xmapsto} symbols
-  (\vref*{mathtools-extensible-arrows}).
+  \cmdX{\varinjlim}, and \cmdX{\varprojlim} symbols (\vref{ams-log},
+  \vref{extensible-accents}, and \vref{ams-extensible-arrows}) and
+  \MTOOLS's
+  \cmdI[$\string\blackacc{\string\MTOOLSxleftrightarrow}$]{\xleftrightarrow},
+  \cmdI[$\string\blackacc{\string\MTOOLSxhookleftarrow}$]{\xhookleftarrow},
+  \cmdI[$\string\blackacc{\string\MTOOLSxhookrightarrow}$]{\xhookrightarrow},
+  and \cmdI[$\string\blackacc{\string\MTOOLSxmapsto}$]{\xmapsto}
+  symbols (\vref{mathtools-extensible-arrows}).
 \fi
 \fi
 
@@ -10140,6 +11226,159 @@
 \end{symtable}
 
 
+\begin{longsymtable}[LOGIX]{\LOGIX\ Arrows}
+\ltindex{arrows}
+\ltidxboth{logic}{symbols}
+\label{logix-arrows}
+\begin{longtable}{*3{ll}}
+\multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{6}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\K\DashArrowLeft  & \K\LMtImpl         & \K\RplcFree       \\
+\K\DashArrowRight & \K\LoopArrowLeft   & \K\RplcFreeLeft   \\
+\K\Entail         & \K\LoopArrowRight  & \K\RplcFreeRight  \\
+\K\EntailEquv     & \K\LParFunc        & \K\SEntail        \\
+\K\Equv           & \K\LWkEntail       & \K\SEntailEquv    \\
+\K\FishArrowLeft  & \K\LWkEntailEquv   & \K\SEquv          \\
+\K\FishArrowRight & \K\MapParInGndMul  & \K\SFunc          \\
+\K\FlatArrowLeft  & \K\MapParInGndOne  & \K\ShftAccent     \\
+\K\FlatArrowRight & \K\MapParInGndSng  & \K\ShftSubscr     \\
+\K\ForkArrowLeft  & \K\MapParInMul     & \K\ShftSuper      \\
+\K\ForkArrowRight & \K\MapParInOne     & \K\SImpl          \\
+\K\Func           & \K\MapParInSng     & \K\SMapTo         \\
+\K\FunParInGndMul & \K\MapParOnGndMul  & \K\SMtEquv        \\
+\K\FunParInGndOne & \K\MapParOnGndOne  & \K\SMtImpl        \\
+\K\FunParInGndSng & \K\MapParOnGndSng  & \K\SParFunc       \\
+\K\FunParInMul    & \K\MapParOnMul     & \K\SWkEntail      \\
+\K\FunParInOne    & \K\MapParOnOne     & \K\SWkEntailEquv  \\
+\K\FunParInSng    & \K\MapParOnSng     & \K\VEntail        \\
+\K\FunParOnGndMul & \K\MapTo           & \K\VEntailEquv    \\
+\K\FunParOnGndOne & \K\MapTotInGndMul  & \K\VEquv          \\
+\K\FunParOnGndSng & \K\MapTotInGndOne  & \K\VFunc          \\
+\K\FunParOnMul    & \K\MapTotInGndSng  & \K\VImpl          \\
+\K\FunParOnOne    & \K\MapTotInMul     & \K\VMapTo         \\
+\K\FunParOnSng    & \K\MapTotInOne     & \K\VMtEquv        \\
+\K\FunTotInGndMul & \K\MapTotInSng     & \K\VMtImpl        \\
+\K\FunTotInGndOne & \K\MapTotOnGndMul  & \K\VParFunc       \\
+\K\FunTotInGndSng & \K\MapTotOnGndOne  & \K\VWkEntail      \\
+\K\FunTotInMul    & \K\MapTotOnGndSng  & \K\VWkEntailEquv  \\
+\K\FunTotInOne    & \K\MapTotOnMul     & \K\WavyArrowLeft  \\
+\K\FunTotInSng    & \K\MapTotOnOne     & \K\WavyArrowRight \\
+\K\FunTotOnGndMul & \K\MapTotOnSng     & \K\WkEntail       \\
+\K\FunTotOnGndOne & \K\MtEquv          & \K\WkEntailEquv   \\
+\K\FunTotOnGndSng & \K\MtImpl          & \K\XEntail        \\
+\K\FunTotOnMul    & \K\ParFunc         & \K\XEntailEquv    \\
+\K\FunTotOnOne    & \K\RplcAll         & \K\XEquv          \\
+\K\FunTotOnSng    & \K\RplcAllBnd      & \K\XFunc          \\
+\K\HookArrowLeft  & \K\RplcAllBndLeft  & \K\XImpl          \\
+\K\HookArrowRight & \K\RplcAllBndRight & \K\XMapTo         \\
+\K\Impl           & \K\RplcAllLeft     & \K\XMtEquv        \\
+\K\LEntail        & \K\RplcAllRight    & \K\XMtImpl        \\
+\K\LEntailEquv    & \K\RplcAny         & \K\XParFunc       \\
+\K\LEquv          & \K\RplcAnyLeft     & \K\XWkEntail      \\
+\K\LFunc          & \K\RplcAnyRight    & \K\XWkEntailEquv  \\
+\K\LImpl          & \K\RplcEquv        & \K\ZigArrowLeft   \\
+\K\LMapTo         & \K\RplcEquvLeft    & \K\ZigArrowRight  \\
+\K\LMtEquv        & \K\RplcEquvRight   &                   \\
+\end{longtable}
+
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{longsymtable}
+
+
+\begin{symtable}[LOGIX]{\LOGIX\ Negated Arrows}
+\subindex{arrows}{negated}
+\idxboth{logic}{symbols}
+\label{logix-narrows}
+\begin{tabular}{*3{ll}}
+\K\NotEntail        & \K\NotSEntail       & \K\NotVWkEntail     \\
+\K\NotEntailEquv    & \K\NotSEntailEquv   & \K\NotVWkEntailEquv \\
+\K\NotEquv          & \K\NotSEquv         & \K\NotWkEntail      \\
+\K\NotImpl          & \K\NotSImpl         & \K\NotWkEntailEquv  \\
+\K\NotLEntail       & \K\NotSMtEquv       & \K\NotXEntail       \\
+\K\NotLEntailEquv   & \K\NotSMtImpl       & \K\NotXEntailEquv   \\
+\K\NotLEquv         & \K\NotSWkEntail     & \K\NotXEquv         \\
+\K\NotLImpl         & \K\NotSWkEntailEquv & \K\NotXImpl         \\
+\K\NotLMtEquv       & \K\NotVEntail       & \K\NotXMtEquv       \\
+\K\NotLMtImpl       & \K\NotVEntailEquv   & \K\NotXMtImpl       \\
+\K\NotLWkEntail     & \K\NotVEquv         & \K\NotXWkEntail     \\
+\K\NotLWkEntailEquv & \K\NotVImpl         & \K\NotXWkEntailEquv \\
+\K\NotMtEquv        & \K\NotVMtEquv       &                     \\
+\K\NotMtImpl        & \K\NotVMtImpl       &                     \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[LOGIX]{\LOGIX\ Harpoons}
+\index{harpoons}
+\label{logix-harpoons}
+\begin{tabular}{*2{ll}}
+\K\HarpoonDnLeft  & \K\HarpoonUpLeft  \\
+\K\HarpoonDnRight & \K\HarpoonUpRight \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[LOGIX]{\LOGIX\ Implications and Equivalences}
+\idxboth{logic}{symbols}
+\label{logix-impl}
+\begin{tabular}{*4{ll}}
+\K\InEquv    & \K\SInEquv   & \K\VWkEquv   & \K\XInEquv   \\
+\K\InImpl    & \K\SInImpl   & \K\VWkImpl   & \K\XInImpl   \\
+\K\LInEquv   & \K\SWkEquv   & \K\VWkMtEquv & \K\XWkEquv   \\
+\K\LInImpl   & \K\SWkImpl   & \K\VWkMtImpl & \K\XWkImpl   \\
+\K\LWkEquv   & \K\SWkMtEquv & \K\WkEquv    & \K\XWkMtEquv \\
+\K\LWkImpl   & \K\SWkMtImpl & \K\WkImpl    & \K\XWkMtImpl \\
+\K\LWkMtEquv & \K\VInEquv   & \K\WkMtEquv  &              \\
+\K\LWkMtImpl & \K\VInImpl   & \K\WkMtImpl  &              \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[LOGIX]{\LOGIX\ Negated Implications and Equivalences}
+\idxboth{logic}{symbols}
+\label{logix-nimpl}
+\begin{tabular}{*3{ll}}
+\K\NotInEquv    & \K\NotSWkEquv   & \K\NotWkEquv    \\
+\K\NotInImpl    & \K\NotSWkImpl   & \K\NotWkImpl    \\
+\K\NotLInEquv   & \K\NotSWkMtEquv & \K\NotWkMtEquv  \\
+\K\NotLInImpl   & \K\NotSWkMtImpl & \K\NotWkMtImpl  \\
+\K\NotLWkEquv   & \K\NotVInEquv   & \K\NotXInEquv   \\
+\K\NotLWkImpl   & \K\NotVInImpl   & \K\NotXInImpl   \\
+\K\NotLWkMtEquv & \K\NotVWkEquv   & \K\NotXWkEquv   \\
+\K\NotLWkMtImpl & \K\NotVWkImpl   & \K\NotXWkImpl   \\
+\K\NotSInEquv   & \K\NotVWkMtEquv & \K\NotXWkMtEquv \\
+\K\NotSInImpl   & \K\NotVWkMtImpl & \K\NotXWkMtImpl \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[ESR]{\ESR\ Restrictions}
 \index{restrictions}
 \label{esrelations}
@@ -10153,7 +11392,8 @@
 \begin{symtable}[MNS]{\MNS\ Spoons}
 \index{binary relations}
 \index{relational symbols>binary}
-\idxboth{spoon}{symbols}
+\index{spoon symbols (mathematics)}
+\index{symbols>spoon (mathematics)}
 \label{mns-spoons}
 \begin{tabular}{*3{ll}}
 \K[\MNSdownfilledspoon]\downfilledspoon   & \K[\MNSnnespoon]\nnespoon                   & \K[\MNSnwfilledspoon]\nwfilledspoon       \\
@@ -10253,7 +11493,8 @@
 \begin{symtable}[FDSYM]{\FDSYM\ Spoons}
 \index{binary relations}
 \index{relational symbols>binary}
-\idxboth{spoon}{symbols}
+\index{spoon symbols (mathematics)}
+\index{symbols>spoon (mathematics)}
 \label{fdsym-spoons}
 \begin{tabular}{*3{ll}}
 \K[\FDSYMblackwhitespoon]\blackwhitespoon         & \K[\FDSYMndownblackspoon]\ndownblackspoon           & \K[\FDSYMnupblackspoon]\nupblackspoon       \\
@@ -10354,6 +11595,7 @@
 
 \begin{symtable}[ULSY]{\ULSY\ Contradiction Symbols}
 \idxboth{contradiction}{symbols}
+\index{lightning}
 \label{ulsy}
 \medskip
 \begin{tabular}{*6{ll}}
@@ -10365,9 +11607,11 @@
 \begin{symtable}{Extension Characters}
 \index{extension characters}
 \label{ext}
+\begin{indexingoff}
 \begin{tabular}{*2{ll}}
 \X\relbar & \X\Relbar \\
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
@@ -10374,10 +11618,12 @@
 \begin{symtable}[ST]{\ST\ Extension Characters}
 \index{extension characters}
 \label{st-ext}
+\begin{indexingoff}
 \begin{tabular}{*3{ll}}
 \X\Arrownot   &\X\Mapsfromchar &\X\Mapstochar \\
 \X\arrownot   &\X\mapsfromchar
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
@@ -10384,10 +11630,12 @@
 \begin{symtable}[TX]{\TXPX\ Extension Characters}
 \index{extension characters}
 \label{txpx-ext}
+\begin{indexingoff}
 \begin{tabular}{*3{ll}}
 \X\Mappedfromchar  & \X\Mmappedfromchar & \X\Mmapstochar     \\
 \X\mappedfromchar  & \X\mmappedfromchar & \X\mmapstochar     \\
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
@@ -10394,10 +11642,12 @@
 \begin{symtable}[ABX]{\ABX\ Extension Characters}
 \index{extension characters}
 \label{abx-ext}
+\begin{indexingoff}
 \begin{tabular}{*3{ll}}
 \X[\ABXmapsfromchar]\mapsfromchar & \X[\ABXmapstochar]\mapstochar \\
 \X[\ABXMapsfromchar]\Mapsfromchar & \X[\ABXMapstochar]\Mapstochar \\
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
@@ -10404,11 +11654,13 @@
 \begin{symtable}[STIX]{\STIX\ Extension Characters}
 \index{extension characters}
 \label{stix-ext}
+\begin{indexingoff}
 \begin{tabular}{*3{ll}}
 \K[\STIXlhook]\lhook               & \K[\STIXrelbar]\relbar & \K[\STIXRRelbar]\RRelbar \\
 \K[\STIXmapsfromchar]\mapsfromchar & \K[\STIXRelbar]\Relbar & \K[\STIXRrelbar]\Rrelbar \\
 \K[\STIXmapstochar]\mapstochar     & \K[\STIXrhook]\rhook   &                          \\
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
@@ -10418,6 +11670,7 @@
 \index{limits}
 \index{trigonometric functions}
 \label{log}
+\begin{indexingoff}
 \begin{tabular}{*8l}
 \Z\arccos & \Z\cos  & \Z\csc & \Z\exp & \Z\ker    & \Z\limsup & \Z\min & \Z\sinh \\
 \Z\arcsin & \Z\cosh & \Z\deg & \Z\gcd & \Z\lg     & \Z\ln     & \Z\Pr  & \Z\sup  \\
@@ -10430,11 +11683,12 @@
   Calling the above ``symbols'' may be a bit
   misleading.\footnotemark{} Each log-like symbol merely produces the
   eponymous textual equivalent, but with proper surrounding spacing.
-  See \ref{math-spacing} for more information about log-like
-  symbols.  As \cmd{\bmod} and \cmd{\pmod} are arguably not symbols we
-  refer the reader to the Short Math Guide for
-  \latex~\cite{Downes:smg} for samples.
+  See \ref{math-spacing} for more information about log-like symbols.
+  As \cmd{\bmod} and \cmd{\pmod} arguably are not symbols we refer the
+  reader to the Short Math Guide for \latex~\cite{Downes:smg} for
+  samples.
 \end{tablenote}
+\end{indexingoff}
 \end{symtable}
 \footnotetext{Michael\index{Downes, Michael J.} J. Downes prefers the
 more general term, ``atomic\index{atomic math objects} math objects''.}
@@ -10444,7 +11698,9 @@
 \idxboth{log-like}{symbols}
 \index{atomic math objects}
 \index{limits}
+\index{inverse limit=inverse limit ($\varprojlim$)}
 \label{ams-log}
+\begin{indexingoff}
 \renewcommand{\arraystretch}{1.5}  % Keep tall symbols from touching.
 \begin{tabular}{*2{ll@{\qquad}}ll}
 \X\injlim     & \X\varinjlim  & \X\varlimsup  \\
@@ -10455,10 +11711,11 @@
 \begin{tablenote}
   Load the \pkgname{amsmath} package to get these symbols.  See
   \ref{math-spacing} for some additional comments regarding log-like
-  symbols.  As \cmd{\mod} and \cmd{\pmod} are arguably not symbols we
+  symbols.  As \cmdX{\mod} and \cmd{\pmod} arguably are not symbols we
   refer the reader to the Short Math Guide for
   \latex~\cite{Downes:smg} for samples.
 \end{tablenote}
+\end{indexingoff}
 \end{symtable}
 
 
@@ -10467,6 +11724,7 @@
 \index{atomic math objects}
 \index{trigonometric functions}
 \label{mismath-log}
+\begin{indexingoff}
 \renewcommand{\arraystretch}{1.4}  % Keep tall symbols from touching.
 \begin{tabular}{*3{ll@{\hspace*{3em}}}ll}
 \X[\MISMadj]\adj       & \X[\MISMConv]\Conv & \X[\MISMid]\id     & \X[\MISMsech]\sech \\
@@ -10479,6 +11737,7 @@
 \X[\MISMartanh]\artanh & \X[\MISMerf]\erf   & \X[\MISMRe]\Re$^*$ &                    \\
 \X[\MISMAut]\Aut       & \X[\MISMgrad]\grad & \X[\MISMrot]\rot   &                    \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}[*]
@@ -10490,9 +11749,9 @@
 
 
 \begin{symtable}[MISMATH]{\MISMATH\ Asymptotic Notation}
-\index{asymptotic notation}
+\index{asymptotic complexity}
 \index{big O notation}
-\index{Bachmann–Landau notation}
+\index{Bachmann-Landau notation}
 \label{mismath-asymp}
 \begin{tabular}{*2{ll@{\hspace*{3em}}}ll}
 \X[\MISMbigo]\bigo & \X[\MISMbigO]\bigO & \X[\MISMlito]\lito \\
@@ -10511,7 +11770,8 @@
 
 \begin{symtable}{Greek Letters}
 \index{Greek>letters}
-\index{alphabets>Greek}
+\subindex{alphabets}{Greek}
+\index{pi=pi ($\pi$)}
 \label{greek}
 \begin{tabular}{*8l}
 \X\alpha        &\X\theta       &\X o           &\X\tau         \\
@@ -10575,7 +11835,7 @@
 
 \begin{symtable}[AMS]{\AMS\ Greek Letters}
 \index{Greek>letters}
-\index{alphabets>Greek}
+\subindex{alphabets}{Greek}
 \label{ams-greek}
 \begin{tabular}{*4l}
 \X\digamma      &\X\varkappa
@@ -10584,7 +11844,7 @@
 
 
 \begin{symtable}[TX]{\TXPX\ Upright Greek Letters}
-\index{alphabets>Greek}
+\subindex{alphabets}{Greek}
 \index{Greek>upright}
 \index{Greek>letters}
 \index{upright Greek letters}
@@ -10612,7 +11872,7 @@
 
 
 \begin{symtable}[UPGR]{\UPGR\ Upright Greek Letters}
-\index{alphabets>Greek}
+\subindex{alphabets}{Greek}
 \index{Greek>upright}
 \index{Greek>letters}
 \index{upright Greek letters}
@@ -10658,7 +11918,8 @@
 
 \begin{symtable}[FOUR]{\FOUR\ Variant Greek Letters}
 \index{Greek>letters}
-\index{alphabets>Greek}
+\subindex{alphabets}{Greek}
+\index{pi=pi (\FOURpi)}
 \label{fourier-greek}
 \begin{tabular}{*2{ll}}
 \K[\FOURpi]\pi       & \K[\FOURrho]\rho       \\
@@ -10725,7 +11986,7 @@
 
 
 \begin{symtable}[AMS]{\AMS\ Hebrew Letters}
-\index{Hebrew}\index{alphabets>Hebrew}
+\index{Hebrew}\subindex{alphabets}{Hebrew}
 \label{ams-hebrew}
 \begin{tabular}{*6l}
 \X\beth & \X\gimel & \X\daleth
@@ -10739,7 +12000,7 @@
 
 
 \begin{symtable}[MNS]{\MNS\ Hebrew Letters}
-\index{Hebrew}\index{alphabets>Hebrew}
+\index{Hebrew}\subindex{alphabets}{Hebrew}
 \label{mns-hebrew}
 \begin{tabular}{*8l}
 \K[\MNSaleph]\aleph & \K[\MNSbeth]\beth & \K[\MNSgimel]\gimel & \K[\MNSdaleth]\daleth \\
@@ -10748,7 +12009,7 @@
 
 
 \begin{symtable}[FDSYM]{\FDSYM\ Hebrew Letters}
-\index{Hebrew}\index{alphabets>Hebrew}
+\index{Hebrew}\subindex{alphabets}{Hebrew}
 \label{fdsym-hebrew}
 \begin{tabular}{*8l}
 \K[\FDSYMaleph]\aleph & \K[\FDSYMbeth]\beth & \K[\FDSYMgimel]\gimel & \K[\FDSYMdaleth]\daleth \\
@@ -10757,7 +12018,7 @@
 
 
 \begin{symtable}[BSK]{\BSK\ Hebrew Letters}
-\index{Hebrew}\index{alphabets>Hebrew}
+\index{Hebrew}\subindex{alphabets}{Hebrew}
 \label{bsk-hebrew}
 \begin{tabular}{*8l}
 \K[\BSKbeth]\beth & \K[\BSKgimel]\gimel & \K[\BSKdaleth]\daleth \\
@@ -10766,7 +12027,7 @@
 
 
 \begin{symtable}[STIX]{\STIX\ Hebrew Letters}
-\index{Hebrew}\index{alphabets>Hebrew}
+\index{Hebrew}\subindex{alphabets}{Hebrew}
 \label{stix-hebrew}
 \begin{tabular}{*4{ll}}
 \K[\STIXaleph]\aleph & \K[\STIXbeth]\beth & \K[\STIXgimel]\gimel & \K[\STIXdaleth]\daleth \\
@@ -10777,7 +12038,7 @@
 \begin{symtable}{Letter-like Symbols}
 \idxboth{letter-like}{symbols}
 \index{tacks}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
 \label{letter-like}
 \begin{tabular}{*5{ll}}
 \X\bot    & \X\forall & \X\imath & \X\ni      & \X\top \\
@@ -10826,7 +12087,7 @@
 
 \begin{symtable}[MNS]{\MNS\ Letter-like Symbols}
 \idxboth{letter-like}{symbols}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
 \label{mns-letter-like}
 \begin{tabular}{*4{ll}}
 \K[\MNSbot]\bot       & \K[\MNSin]\in           & \K[\MNSnowns]\nowns       & \K[\MNStop]\top \\
@@ -10847,7 +12108,7 @@
 
 \begin{symtable}[FDSYM]{\FDSYM\ Letter-like Symbols}
 \idxboth{letter-like}{symbols}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
 \label{fdsym-letter-like}
 \begin{tabular}{*4{ll}}
 \K[\FDSYMbot]\bot               & \K[\FDSYMforall]\forall & \K[\FDSYMin]\in           & \K[\FDSYMowns]\owns \\
@@ -10861,8 +12122,8 @@
 \begin{tablenote}
   \FDSYM\ provides synonyms \cmdI[\FDSYMnin]{\notin} for
   \cmdI[\FDSYMnin]{\nin}, \cmdI[\FDSYMowns]{\ni} for
-  \cmdI[\FDSYMowns]{\owns}, and \cmdI[\FDSYMowns]{\nni} for
-  \cmdI[\FDSYMowns]{\nowns}.
+  \cmdI[\FDSYMowns]{\owns}, and \cmdI[\FDSYMnowns]{\nni} for
+  \cmdI[\FDSYMnowns]{\nowns}.
 \end{tablenote}
 \end{symtable}
 
@@ -10869,7 +12130,7 @@
 
 \begin{symtable}[BSK]{\BSK\ Letter-like Symbols}
 \idxboth{letter-like}{symbols}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
 \label{bsk-letter-like}
 \begin{tabular}{*4{ll}}
 \K[\BSKBbbk]\Bbbk             & \K[\BSKGame]\Game     & \K[\BSKimath]\imath       & \K[\BSKnexists]\nexists \\
@@ -10881,7 +12142,7 @@
 
 \begin{symtable}[STIX]{\STIX\ Letter-like Symbols}
 \idxboth{letter-like}{symbols}
-\idxboth{linear logic}{symbols}
+\idxboth{logic}{symbols}
 \label{stix-letter-like}
 \begin{tabular}{*4{ll}}
 \K[\STIXAngstrom]\Angstrom     & \K[\STIXEulerconst]\Eulerconst & \K[\STIXimath]\imath                 & \K[\STIXtop]\top       \\
@@ -10932,12 +12193,15 @@
 \begin{symtable}[FGE]{\FGE\ Letter-like Symbols}
 \idxboth{letter-like}{symbols}
 \idxboth{Frege logic}{symbols}
+\idxboth{rotated}{letters}
+\index{upside-down letters}
+\index{inverted letters}
 \label{fge-letter-like}
 \begin{tabular}{*3{ll@{\qqquad}}ll}
-\K\fgeA      & \K\fgeeszett & \K\fgeleftB  & \K\fgeU \\
-\K\fgec      & \K\fgeF      & \K\fgeleftC  &         \\
-\K\fged      & \K\fgef      & \K\fgerightB &         \\
-\K\fgee      & \K\fgelb$^*$ & \K\fges      &         \\
+\K\fgeA & \K\fgeeszett & \K\fgeleftB    & \K\fges \\
+\K\fgec & \K\fgeF      & \K\fgeleftC    &         \\
+\K\fged & \K\fgef      & \K\fgemark$^*$ &         \\
+\K\fgee & \K\fgelb$^*$ & \K\fgerightB   &         \\
 \end{tabular}
 
 \bigskip
@@ -10945,7 +12209,8 @@
 \begin{tablenote}[*]
   The \FGE\ package defines \cmdI[\fgelb]{\fgeeta},
   \cmdI[\fgelb]{\fgeN}, and \cmdI[\fgelb]{\fgeoverU} as synonyms for
-  \cmd{\fgelb}.
+  \cmdI{\fgelb} and \cmdI[\fgemark]{\fgeU} as a synonym for
+  \cmdI{\fgemark}.
 \end{tablenote}
 \end{symtable}
 
@@ -10968,6 +12233,54 @@
 \end{symtable}
 
 
+\begin{symtable}[LOGIX]{\LOGIX\ Proof Symbols}
+\index{quantifiers}
+\index{Q.E.D.}
+\index{end of proof}
+\index{proof, end of}
+\idxboth{logic}{symbols}
+\label{logix-proof}
+\begin{tabular}{*4{ll}}
+\K\BnchExists    & \K\Bot       & \K\HdnForAll & \K\TFBoth \\
+\K\BnchForAll    & \K\Defn      & \K\NFalse    & \K\TFNone \\
+\K\BnchHdnExists & \K\End       & \K\NtExists  & \K\Top    \\
+\K\BnchHdnForAll & \K\Exists    & \K\NTrue     & \K\True   \\
+\K\BnchNtExists  & \K\False     & \K\Qed       & \K\Unique \\
+\K\BnchUnique    & \K\ForAll    & \K\QuantCon  &           \\
+\K\BndMap        & \K\HdnExists & \K\QuantDis  &           \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[EOPROOF]{\EOPROOF\ End-of-Proof Symbols}
+\index{Q.E.D.}
+\index{end of proof}
+\index{proof, end of}
+\label{endofproof}
+\begin{tabular}{ll}
+\K\wasserdicht \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \texttt{\string\wasserdicht} is implemented as an external PDF
+  graphic.  The command in fact typesets the symbol flush right on the
+  page to signify the end of proof.  To use the command in inline
+  text, simply load the underlying graphic file directly:
+
+\vspace{-\baselineskip}
+\begin{verbatim}
+    \includegraphics[width=10pt]{endofproofwd.pdf}
+\end{verbatim}
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[AMS]{\AMS\ Delimiters}
 \index{delimiters}
 \label{ams-del}
@@ -11054,9 +12367,9 @@
 \begin{tablenote}
   When used with \cmd{\left} and \cmd{\right}, these symbols expand to
   the height of the enclosed math expression.  Note that \cmdX{\vert}
-  is a synonym for \verb+|+\index{_=\magicvertname{} ($\vert$)}, and
-  \cmdX{\Vert} is a synonym for \verb+\|+\index{_=\magicVertname{}
-  ($\Vert$)}.
+  is a synonym for \verb+|+\index{_magicvertname=\magicvertname{}
+    ($\vert$)}, and \cmdX{\Vert} is a synonym for
+  \verb+\|+\index{_magicVertName=\magicVertname{} ($\Vert$)}.
 
   $\varepsilon$-\TeX{}\index{e-tex=$\varepsilon$-\TeX} provides a
   \cmd{\middle} analogue to \cmd{\left} and \cmd{\right}.
@@ -11064,8 +12377,14 @@
   expand to the height of the surrounding \cmd{\left} and \cmd{\right}
   symbols.  (This capability is commonly needed when typesetting
   adjacent bras\index{bra} and kets\index{ket} in Dirac\index{Dirac
-  notation} notation: ``$\langle\phi\vert\psi\rangle$'').  A similar
-  effect can be achieved in conventional \latex using the
+    notation} notation: ``$\langle\phi\vert\psi\rangle$'').  This is
+  exactly what the \QTIKZ\ package
+\ifQTIKZ
+  does (see \vref{quantikz}).
+\else
+  does.
+\fi
+  A similar effect can be achieved in conventional \latex using the
   \pkgname{braket} package.
 \end{tablenote}
 \end{symtable}
@@ -11129,7 +12448,7 @@
 \begin{symtable}[ABX]{\ABX\ Variable-sized Delimiters}
 \index{delimiters}
 \index{delimiters>variable-sized}
-\idxboth{wavy-line}{delimiters}
+\idxboth{wavy line}{delimiters}
 \index{semantic valuation}
 \label{abx-var-dels}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
@@ -11142,10 +12461,10 @@
 
 
 \begin{longsymtable}[MNS]{\MNS\ Variable-sized Delimiters}
-\index{delimiters}
-\index{delimiters>variable-sized}
-\index{braces}
-\idxboth{wavy-line}{delimiters}
+\ltindex{delimiters}
+\ltindex{delimiters>variable-sized}
+\ltindex{braces}
+\ltidxboth{wavy line}{delimiters}
 \label{mns-var-dels}
 \renewcommand{\arraystretch}{3}  % Keep tall symbols from touching.
 \begin{longtable}{lll*2{@{\qquad}lll}}
@@ -11169,7 +12488,8 @@
 \KNbig[\MNStgreater][\MNSdgreater]>              & \KNbig[\MNStlWavy][\MNSdlWavy]\lWavy                & \KNbig[\MNStulrcorner][\MNSdulrcorner]\ulrcorner    \\
 \let\indexcommand=\indexpunct  % Hack to make the "|" symbol index properly
 \KNbig[\MNStvert][\MNSdvert]|                    & \KNbig[\MNStrangle][\MNSdrangle]\rangle             & \KNbig[\MNSturcorner][\MNSdurcorner]\urcorner       \\
-\KNbig[\MNStlangle][\MNSdlangle]\langle          & \KNbig[\MNStranglebar][\MNSdranglebar]\ranglebar    & \KNbig[\MNStVert][\MNSdVert]\|                      \\
+\KNbig[\MNStlangle][\MNSdlangle]\langle          & \KNbig[\MNStranglebar][\MNSdranglebar]\ranglebar    & \let\indexcommand=\indexpunct  % Hack to make the "|" symbol index properly
+                                                                                                         \KNbig[\MNStVert][\MNSdVert]\|                      \\
 \KNbig[\MNStlanglebar][\MNSdlanglebar]\langlebar & \KNbig[\MNStrbrace][\MNSdrbrace]\rbrace             &                                                     \\
 \end{longtable}
 
@@ -11176,8 +12496,10 @@
 \bigskip
 
 \begin{tablenote}
-  \cmdX{\vert} is a synonym for \verb+|+\index{_=\magicvertname{} ($\vert$)}.
-  \cmdX{\Vert} is a synonym for \verb+\|+\index{_=\magicVertname{} ($\Vert$)}.
+  \cmdX{\vert} is a synonym for
+  \verb+|+\index{_magicvertname=\magicvertname{} ($\vert$)}.
+  \cmdX{\Vert} is a synonym for
+  \verb+\|+\index{_magicVertname=\magicVertname{} ($\Vert$)}.
   \cmdX{\mid} and \verb|\mvert| produce the same symbol as
   \cmdX{\vert} but designated as math relations instead of ordinals.
   \verb|\divides| produces the same symbol as \cmdX{\vert} but
@@ -11189,10 +12511,10 @@
 
 
 \begin{longsymtable}[FDSYM]{\FDSYM\ Variable-sized Delimiters}
-\index{delimiters}
-\index{delimiters>variable-sized}
-\index{braces}
-\idxboth{wavy-line}{delimiters}
+\ltindex{delimiters}
+\ltindex{delimiters>variable-sized}
+\ltindex{braces}
+\ltidxboth{wavy line}{delimiters}
 \label{fdsym-var-dels}
 \renewcommand{\arraystretch}{3}  % Keep tall symbols from touching.
 \begin{longtable}{lll*2{@{\qquad}lll}}
@@ -11224,10 +12546,10 @@
 
 \begin{tablenote}
   \FDSYM\ defines
-  ``\cmdIp[\string\FDSYMtlparen]('' as a synonym for \cmdI[\string\FDSYMtlparen]{\lparen},
-  ``\cmdIp[\string\FDSYMtrparen])'' as a synonym for \cmdI[\string\FDSYMtrparen]{\rparen},
-  ``\cmdIp[\string\FDSYMtlbrack]['' as a synonym for \cmdI[\string\FDSYMtlbrack]{\lbrack},
-  ``\cmdIp[\string\FDSYMtrbrack]]'' as a synonym for \cmdI[\string\FDSYMtrbrack]{\rbrack},
+  ``\cmdI[\string\FDSYMtlparen]('' as a synonym for \cmdI[\string\FDSYMtlparen]{\lparen},
+  ``\cmdI[\string\FDSYMtrparen])'' as a synonym for \cmdI[\string\FDSYMtrparen]{\rparen},
+  ``\cmdI[\string\FDSYMtlbrack]['' as a synonym for \cmdI[\string\FDSYMtlbrack]{\lbrack},
+  ``\cmdI[\string\FDSYMtrbrack]]'' as a synonym for \cmdI[\string\FDSYMtrbrack]{\rbrack},
   ``\verb|{|'' as a synonym for \cmdI[\string\FDSYMtlbrace]{\lbrace},
   ``\verb|}|'' as a synonym for \cmdI[\string\FDSYMtrbrace]{\rbrace},
   ``\cmdIp[\string\FDSYMtmathslash]/'' as a synonym for \cmdI[\string\FDSYMtmathslash]\mathslash,
@@ -11243,7 +12565,7 @@
 \index{delimiters}
 \index{delimiters>variable-sized}
 \index{braces}
-\idxboth{wavy-line}{delimiters}
+\idxboth{wavy line}{delimiters}
 \label{stix-var-dels}
 \renewcommand{\arraystretch}{3}  % Keep tall symbols from touching.
 \begin{longtable}{lll*2{@{\qquad}lll}}
@@ -11278,7 +12600,7 @@
 \begin{symtable}[MDES]{\MDES\ Variable-sized Delimiters}
 \index{delimiters}
 \index{delimiters>variable-sized}
-\idxboth{wavy-line}{delimiters}
+\idxboth{wavy line}{delimiters}
 \label{mdes-var-dels}
 \renewcommand{\arraystretch}{2.75}  % Keep tall symbols from touching.
 \begin{tabular}{lll@{\qquad}lll}
@@ -11320,8 +12642,8 @@
   \NATH\ redefines all of the above to include implicit \cmd{\left}
   and \cmd{\right} commands.  Hence, separate \verb+\lVert+ and
   \verb+\rVert+ commands are needed to disambiguate whether
-  ``\verb+|+\index{_=\magicvertname{} ($\vert$)}'' is a left or right
-  delimiter.
+  ``\verb+|+\index{_magicvertname=\magicvertname{} ($\vert$)}'' is a
+  left or right delimiter.
 \end{tablenote}
 
 \bigskip
@@ -11336,6 +12658,12 @@
 \begin{symtable}[NATH]{\NATH\ Variable-sized Delimiters (Triple)}
 \index{delimiters}
 \index{delimiters>variable-sized}
+\index{triple<=\verb+\triple<+ ($\nathtriple\langle$)}
+\index{triple!>=\verb+\triple!>+ ($\nathtriple\rangle$)}
+\index{triple[=\verb+\triple[+ ($\nathtriple[$)}
+\index{triple]=\verb+\triple]+ ($\nathtriple]$)}
+\index{ltriplevert=\verb+\ltriple\vert+ ($\nathtriple\vert$)}
+\index{rtriplevert=\verb+\rtriple\vert+ ($\nathtriple\vert$)}
 \label{nath-var-dels-triple}
 \renewcommand{\arraystretch}{2.5}  % Keep tall symbols from touching.
 \begin{tabular}{lll@{\qquad}lll}
@@ -11349,8 +12677,8 @@
   Similar to \verb+\lVert+ and \verb+\rVert+ in
   \ref{nath-var-dels-double}, \cmd{\ltriple} and \cmd{\rtriple} must
   be used instead of \cmd{\triple} to disambiguate whether
-  ``\verb+|+\index{_=\magicvertname{} ($\vert$)}'' is a left or right
-  delimiter.
+  ``\verb+|+\index{_magicvertname=\magicvertname{} ($\vert$)}'' is a
+  left or right delimiter.
 \end{tablenote}
 
 \bigskip
@@ -11374,6 +12702,64 @@
 \end{symtable}
 
 
+\begin{longsymtable}[LOGIX]{\LOGIX\ Variable-sized Delimiters}
+\ltindex{delimiters}
+\ltindex{delimiters>variable-sized}
+\label{logix-dels}
+\renewcommand{\arraystretch}{1.75}  % Keep tall symbols from touching.
+\begin{longtable}{lll@{\qquad}lll}
+\multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{6}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\Nlogix{BndBar}        \\
+\Nlogixii{Angl}        \\
+\Nlogixii{AnglBar}     \\
+\Nlogixii{ArrwBrac}    \\
+\Nlogixii{Bar}         \\
+\Nlogixii{Brac}        \\
+\Nlogixii{BracBar}     \\
+\Nlogixii{BrknBrac}    \\
+\Nlogixii{BrknBracBar} \\
+\Nlogixii{BrknBrkt}    \\
+\Nlogixii{BrknBrktBar} \\
+\Nlogixii{Brkt}        \\
+\Nlogixii{BrktBar}     \\
+\Nlogixii{Ceil}        \\
+\Nlogixii{CircBrac}    \\
+\Nlogixii{CircBracBar} \\
+\Nlogixii{CircBrkt}    \\
+\Nlogixii{CircBrktBar} \\
+\Nlogixii{CrlyBrkt}    \\
+\Nlogixii{CrlyBrktBar} \\
+\Nlogixii{CurvAngl}    \\
+\Nlogixii{DblAngl}     \\
+\Nlogixii{DblBar}      \\
+\Nlogixii{DblBrac}     \\
+\Nlogixii{DblCeil}     \\
+\Nlogixii{DblFloor}    \\
+\Nlogixii{DblGrp}      \\
+\Nlogixii{DblParn}     \\
+\Nlogixii{Floor}       \\
+\Nlogixii{Grp}         \\
+\Nlogixii{Parn}        \\
+\Nlogixii{ParnBar}     \\
+\Nlogixii{SqrParn}     \\
+\Nlogixii{Tortoise}    \\
+\Nlogixii{TortoiseBar} \\
+\Nlogixii{TrpBar}      \\
+\Nlogixii{Turn}        \\
+\end{longtable}
+
+\begin{tablenote}
+\luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{longsymtable}
+
+
 \begin{symtable}{\TC\ Text-mode Delimiters}
 \index{delimiters}
 \index{delimiters>text-mode}
@@ -11410,6 +12796,7 @@
 \index{accents>grave=grave (\blackacchack\`)}   % "Generic"
 \index{accents>macron=macron (\showmacron)}     % "Generic"
 \index{accents>ring=ring (\blackacchack\r)}     % "Generic"
+\index{accents>hat}
 \index{tilde}
 \label{math-accents}
 \begin{tabular}{*4{ll}}
@@ -11421,8 +12808,8 @@
 \bigskip
 
 \begin{tablenote}
-  \index{dotless i=dotless $i~(\imath)$>math mode}
-  \index{dotless j=dotless $j~(\jmath)$>math mode}
+  \subindex{dotless i=dotless $i~(\imath)$}{math mode}
+  \subindex{dotless j=dotless $j~(\jmath)$}{math mode}
   Note also the existence of \cmdX{\imath} and \cmdX{\jmath}, which
   produce dotless versions of ``\textit{i}'' and ``\textit{j}''.  (See
   \vref{ord}.)  These are useful when the accent is supposed to
@@ -11536,6 +12923,8 @@
 
 \begin{symtable}[STIX]{\STIX\ Math-mode Accents}
 \index{accents}
+\index{accents>circumflex=circumflex (\blackacchack\^)}   % "Generic"
+\index{accents>hat}
 \label{stix-math-accents}
 \renewcommand{\arraystretch}{1.1}
 \begin{tabular}{ll@{\quad}ll}
@@ -11560,15 +12949,16 @@
 \index{accents}
 \label{fge-math-accents}
 \begin{tabular}{ll}
-\Q\spirituslenis$^*$ \\
+  \Q\spiritusasper \\
+  \Q\spirituslenis \\
 \end{tabular}
 
 \bigskip
 
-\begin{tablenote}[*]
-  When \FGE\ is passed the \optname{fge}{crescent} option,
-  \cmdI[\string\blackacc{\string\spirituslenisB}]{\spirituslenis}
-  instead uses a crescent accent as in~``\,\spirituslenisB{a}\,''.
+\begin{tablenote}
+  When \FGE\ is passed the \optname{fge}{crescent} option, these
+  symbols instead uses a crescent accent as in
+  ``\,\spiritusasperB{a}\,'' and ``\,\spirituslenisB{a}\,''.
 \end{tablenote}
 \end{symtable}
 
@@ -11591,6 +12981,30 @@
 \end{symtable}
 
 
+\begin{symtable}[PDFMSYM]{\PDFMSYM\ Math-mode Accents}
+\index{accents}
+\label{pdfmsym-accents}
+\renewcommand{\arraystretch}{1.2}
+\begin{tabular}{ll@{\qquad}ll}
+\W\shortlvecc{a}             & \W\shortunderleftrightharp{a} \\
+\W\shortoverleftharp{a}      & \W\shortunderleftrightvecc{a} \\
+\W\shortoverleftrightharp{a} & \W\shortunderlvecc{a}         \\
+\W\shortoverleftrightvecc{a} & \W\shortunderrightharp{a}     \\
+\W\shortoverrightharp{a}     & \W\shortunderrightleftharp{a} \\
+\W\shortoverrightleftharp{a} & \W\shortunderstraightlvecc{a} \\
+\W\shortstraightlvecc{a}     & \W\shortunderstraightvecc{a}  \\
+\W\shortstraightvecc{a}      & \W\shortundervecc{a}          \\
+\W\shortunderleftharp{a}     & \W\shortvecc{a}               \\
+\end{tabular}
+
+\bigskip
+
+\begin{tablenote}
+  \pdfmsymmessage.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[HWMATH]{\HWMATH\ Halloween-Themed Math-mode Accents}
 \index{accents}
 \label{hwmath-accents}
@@ -11604,21 +13018,33 @@
 
 \begin{symtable}[RHATS]{\RHATS\ Math-mode Hat Accents}
 \index{accents}
-\index{beret}
-\index{cowboy hat}
-\index{crown}
-\index{dunce cap}
-\index{fez}
-\index{sombrero}
-\index{top hat}
-\index{witch's hat}
+\index{accents>hat, literal}
+\index{Ash Ketchum's hat=Ash Ketchum's hat ($\blackacc{\RHATash}$)}
+\index{beret=beret ($\blackacc{\RHATberet}$)}
+\index{birthday hat=birthday hat ($\blackacc{\RHATbirthday}$)}
+\index{cowboy hat=cowboy hat ($\blackacc{\RHATcowboy}$)}
+\index{crown=crown ($\blackacc{\RHATcrown}$)}
+\index{dunce cap=dunce cap ($\blackacc{\RHATdunce}$)}
+\index{fez=fez ($\blackacc{\RHATfez}$)}
+\index{mortarboard=mortarboard ($\blackacc{\RHATmortarboard}$)}
+\index{policeman's hat=policeman's hat ($\blackacc{\RHATpoliceman}$)}
+\index{Santa Claus's hat=Santa Claus's hat ($\blackacc{\RHATsanta}$)}
+\index{Scottish hat=Scottish hat ($\blackacc{\RHATscottish}$)}
+\index{sombrero=sombrero ($\blackacc{\RHATsombrero}$)}
+\index{top hat=top hat ($\blackacc{\RHATtophat}$)}
+\index{witch's hat=witch's hat ($\blackacc{\RHATwitch}$)}
 \label{realhats}
-\begin{tabular}{*2{ll@{\qquad}}ll}
-\W[\RHATash]{\hat[ash]}{a}       & \W[\RHATfez]{\hat[fez]}{a}           \\
-\W[\RHATberet]{\hat[beret]}{a}   & \W[\RHATsanta]{\hat[santa]}{a}       \\
-\W[\RHATcowboy]{\hat[cowboy]}{a} & \W[\RHATsombrero]{\hat[sombrero]}{a} \\
-\W[\RHATcrown]{\hat[crown]}{a}   & \W[\RHATtophat]{\hat[tophat]}{a}     \\
-\W[\RHATdunce]{\hat[dunce]}{a}   & \W[\RHATwitch]{\hat[witch]}{a}       \\
+\renewcommand{\arraystretch}{1.2}  % Keep tall symbols from touching.
+\begin{tabular}{ll@{\qquad}ll}
+\W[\RHATash]{\hat[ash]}{a}                 & \W[\RHATsanta]{\hat[santa]}{a}                   \\
+\W[\RHATberet]{\hat[beret]}{a}             & \W[\RHATscottish]{\hat[scottish]}{a}             \\
+\W[\RHATbirthday]{\hat[birthday]}{a}       & \W[\RHATsombrero]{\hat[sombrero]}{a}             \\
+\W[\RHATcowboy]{\hat[cowboy]}{a}           & \W[\RHATtileblue]{\hat[tile-blue]}{a}            \\
+\W[\RHATcrown]{\hat[crown]}{a}             & \W[\RHATtilegray]{\hat[tile-gray]}{a}            \\
+\W[\RHATdunce]{\hat[dunce]}{a}             & \W[\RHATtilelightblue]{\hat[tile-light-blue]}{a} \\
+\W[\RHATfez]{\hat[fez]}{a}                 & \W[\RHATtilewhite]{\hat[tile-white]}{a}          \\
+\W[\RHATmortarboard]{\hat[mortarboard]}{a} & \W[\RHATtophat]{\hat[tophat]}{a}                 \\
+\W[\RHATpoliceman]{\hat[policeman]}{a}     & \W[\RHATwitch]{\hat[witch]}{a}                   \\
 \end{tabular}
 
 \bigskip
@@ -11642,9 +13068,10 @@
 \index{tilde}
 \index{tilde>extensible}
 \index{extensible tildes}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \index{accents>circumflex=circumflex (\blackacchack\^)}   % "Generic"
 \index{accents>macron=macron (\showmacron)}     % "Generic"
+\index{accents>hat}
 \label{extensible-accents}
 \renewcommand{\arraystretch}{1.5}
 \begin{tabular}{*4l}
@@ -11711,7 +13138,7 @@
 \begin{tablenote}[\dag]
   If you're looking for an extensible \emph{diagonal} line or arrow to
   be used for canceling or reducing mathematical
-  subexpressions\index{arrows>diagonal, for reducing subexpressions}
+  subexpressions\subindex{arrows}{diagonal, for reducing subexpressions}
 \ifhavecancel
   (e.g.,~``$\cancel{x + -x}$'' or ``$\cancelto{5}{3+2}\quad$'')
 \fi
@@ -11732,7 +13159,7 @@
 \index{accents}
 \idxboth{extensible}{accents}
 \idxboth{extensible}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{ora-extensible-accents}
 \begin{tabular}{ll}
 \W\Overrightarrow{abc} \\
@@ -11742,8 +13169,9 @@
 
 \begin{symtable}[YH]{\YH\ Extensible Accents}
 \idxboth{extensible}{accents}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \index{accents>arc=arc (\blackacchack\newtie)}  % "Generic"
+\index{accents>hat}
 \label{yhmath-extensible-accents}
 \renewcommand{\arraystretch}{1.5}
 \begin{tabular}{ll@{\qquad}ll}
@@ -11756,7 +13184,7 @@
 
 \begin{symtable}[AMS]{\AMS\ Extensible Accents}
 \idxboth{extensible}{accents}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{ams-extensible-accents}
 \renewcommand{\arraystretch}{1.5}
 \begin{tabular}{ll@{\qquad}ll}
@@ -11770,9 +13198,10 @@
 \idxboth{extensible}{accents}
 \idxboth{extensible}{arrows}
 \idxboth{extensible}{braces}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \index{accents>arc=arc (\blackacchack\newtie)}  % "Generic"
 \index{accents>circumflex=circumflex (\blackacchack\^)}   % "Generic"
+\index{accents>hat}
 \label{mns-extensible-accents}
 \renewcommand{\arraystretch}{1.75}
 \begin{tabular}{ll@{\qquad}ll}
@@ -11788,9 +13217,10 @@
 
 \begin{symtable}[FDSYM]{\FDSYM\ Extensible Accents}
 \idxboth{extensible}{accents}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \index{accents>arc=arc (\blackacchack\newtie)}  % "Generic"
 \index{accents>circumflex=circumflex (\blackacchack\^)}   % "Generic"
+\index{accents>hat}
 \label{fdsym-extensible-accents}
 \renewcommand{\arraystretch}{1.75}
 \begin{tabular}{ll@{\qquad}ll}
@@ -11806,9 +13236,10 @@
 
 \begin{symtable}[STIX]{\STIX\ Extensible Accents}
 \idxboth{extensible}{accents}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \index{accents>arc=arc (\blackacchack\newtie)}  % "Generic"
 \index{accents>circumflex=circumflex (\blackacchack\^)}   % "Generic"
+\index{accents>hat}
 \idxboth{long}{division}
 \label{stix-extensible-accents}
 \renewcommand{\arraystretch}{1.75}
@@ -11831,7 +13262,7 @@
 \begin{symtable}[MTOOLS]{\MTOOLS\ Extensible Accents}
 \idxboth{extensible}{accents}
 \idxboth{extensible}{braces}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{mathtools-extensible-accents}
 \renewcommand{\arraystretch}{1.5}
 \begin{tabular}{ll@{\qquad}ll}
@@ -11854,7 +13285,7 @@
 \idxboth{extensible}{accents}
 \idxboth{extensible}{arrows}
 \idxboth{extensible}{braces}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \index{accents>arc=arc (\blackacchack\newtie)}  % "Generic"
 \index{accents>caron=caron (\blackacchack\v)}   % "Generic"
 \index{accents>macron=macron (\showmacron)}     % "Generic"
@@ -11881,7 +13312,7 @@
 \index{accents}
 \idxboth{extensible}{accents}
 \idxboth{extensible}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \index{accents>arc=arc (\blackacchack\newtie)}  % "Generic"
 \label{four-extensible-accents}
 \renewcommand{\arraystretch}{1.75}
@@ -11896,7 +13327,7 @@
 \index{accents}
 \idxboth{extensible}{accents}
 \idxboth{extensible}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{esv-extensible-accents}
 \renewcommand{\arraystretch}{1.5}
 \begin{tabular}{ll}
@@ -11919,12 +13350,84 @@
 \end{symtable}
 
 
+\begin{symtable}[PDFMSYM]{\PDFMSYM\ Extensible Accents}
+\index{accents}
+\index{accents>circumflex=circumflex (\blackacchack\^)}   % "Generic"
+\index{accents>hat}
+\label{pdfmsym-ext-accents}
+\renewcommand{\arraystretch}{1.5}
+\begin{tabular}{ll@{\qquad}ll}
+\W\lvecc{abc}$^*$             & \W\underlvecc{abc}         \\
+\W\overleftharp{abc}$^*$      & \W\underrightharp{abc}     \\
+\W\overleftrightharp{abc}$^*$ & \W\underrightleftharp{abc} \\
+\W\overleftrightvecc{abc}$^*$ & \W\understraightlvecc{abc} \\
+\W\overrightharp{abc}$^*$     & \W\understraightvecc{abc}  \\
+\W\overrightleftharp{abc}$^*$ & \W\undervecc{abc}          \\
+\W\straightlvecc{abc}$^*$     & \W\varwidecheck{abc}       \\
+\W\straightvecc{abc}$^*$      & \W\varwidehat{abc}         \\
+\W\underleftharp{abc}         & \W\varwidetilde{abc}       \\
+\W\underleftrightharp{abc}    & \W\vecc{abc}$^*$           \\
+\W\underleftrightvecc{abc}    &                            \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \pdfmsymmessage.
+\end{tablenote}
+
+\bigskip
+\begin{tablenote}[*]
+  The \cmd{\constvec} command takes one of these vector commands and
+  its argument and typesets the accent at $x$~height, truncating
+  everything above it.  Hence, while \verb|\overleftharp{abcMxyz}|
+  produces ``$\overleftharp{abcMxyz}$'',
+  \verb|\constvec{\overleftharp}{abcMxyz}| produces
+  ``$\constvec{\overleftharp}{abcMxyz}$''.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[OVARS]{\OVARS\ Extensible Accents}
+\index{accents}
+\idxboth{extensible}{accents}
+\idxboth{extensible}{arrows}
+\idxboth{extensible}{symbols}
+\label{overarrows-extensible-accents}
+\renewcommand{\arraystretch}{1.75}
+\begin{tabular}{ll@{\qquad}ll}
+\W[\OVARSoverbar]\overbar{abc}                           & \W[\OVARSunderbar]\underbar{abc}                           \\
+\W[\OVARSoverleftarrow]\overleftarrow{abc}               & \W[\OVARSunderleftarrow]\underleftarrow{abc}               \\
+\W[\OVARSoverleftharpoondown]\overleftharpoondown{abc}   & \W[\OVARSunderleftharpoondown]\underleftharpoondown{abc}   \\
+\W[\OVARSoverleftharpoonup]\overleftharpoonup{abc}       & \W[\OVARSunderleftharpoonup]\underleftharpoonup{abc}       \\
+\W[\OVARSoverleftrightarrow]\overleftrightarrow{abc}     & \W[\OVARSunderleftrightarrow]\underleftrightarrow{abc}     \\
+\W[\OVARSoverrightarrow]\overrightarrow{abc}             & \W[\OVARSunderrightarrow]\underrightarrow{abc}             \\
+\W[\OVARSoverrightharpoondown]\overrightharpoondown{abc} & \W[\OVARSunderrightharpoondown]\underrightharpoondown{abc} \\
+\W[\OVARSoverrightharpoonup]\overrightharpoonup{abc}     & \W[\OVARSunderrightharpoonup]\underrightharpoonup{abc}     \\
+\end{tabular}
+
+\bigskip
+
+\begin{tablenote}
+  \OVARS\ is extremely customizable.  Virtually all aspects of
+  arrows---length, thickness, position, scale,
+  arrowhead\index{arrowheads} style, etc.---can be modified, and new
+  extensible arrows can be constructed.  \seedocs{\OVARS}.  For
+  example, the documentation shows how to create extensible arrows
+  like the following:
+
+  \begin{tabular}{ll@{\qquad}ll}
+    \W[\OVARSoverarchedleftrightarrow]\overarchedleftrightarrow{abc} & \W[\OVARSoverbandedarrow]\overbandedarrow{abc} \\
+  \end{tabular}
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[ABRACES]{\ABRACES\ Extensible Accents}
 \idxboth{extensible}{accents}
 \idxboth{extensible}{braces}
 \idxboth{multiline}{braces}
 \idxboth{asymmetric}{braces}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{abraces-extensible-accents}
 \renewcommand{\arraystretch}{1.5}
 \begin{tabular}{ll@{\qquad}ll}
@@ -11949,7 +13452,7 @@
 \index{tilde>extensible}
 \index{extensible tildes}
 \index{tilde}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{utild-extensible-accents}
 \begin{tabular}{ll}
 \W\utilde{abc} \\
@@ -11959,8 +13462,12 @@
 
 \begin{tablenote}
   Because \verb|\utilde| is based on \verb|\widetilde|%
- \index{widetilde=\verb+\widetilde+ ($\blackacc{\widetilde}$)}
- it is also made more extensible by the \YH\
+  \ifhavespverbatim
+    \index{widetilde=\spverb+\widetilde+ ($\blackacc{\widetilde}$)}
+  \else
+    \index{widetilde=\verb+\widetilde+ ($\blackacc{\widetilde}$)}
+  \fi
+  it is also made more extensible by the \YH\
 \ifYH
   package (\vref*{yhmath-extensible-accents}).
 \else
@@ -11973,7 +13480,7 @@
 \begin{symtable}[USHORT]{\USHORT\ Extensible Accents}
 \index{accents}
 \idxboth{extensible}{accents}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \index{underline}
 \label{ushort-extensible-accents}
 \begin{tabular}{ll@{\qquad}ll}
@@ -12006,7 +13513,7 @@
 \begin{symtable}[MDW]{\MDW\ Extensible Accents}
 \index{accents}
 \idxboth{extensible}{accents}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{mdw-extensible-accents}
 \renewcommand{\arraystretch}{1.5}
 \begin{tabular}{ll}
@@ -12018,7 +13525,7 @@
 \begin{symtable}[ACTANG]{\ACTANG\ Extensible Accents}
 \index{accents}
 \idxboth{extensible}{accents}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \index{symbols>actuarial}
 \index{actuarial symbols}
 \index{symbols>annuity}
@@ -12047,7 +13554,7 @@
 \begin{symtable}[AMS]{\AMS\ Extensible Arrows}
 \index{arrows}
 \idxboth{extensible}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{ams-extensible-arrows}
 \begin{tabular}{ll@{\qquad}ll}
 \W\xleftarrow{abc} & \W\xrightarrow{abc} \\
@@ -12058,7 +13565,7 @@
 \begin{symtable}[MTOOLS]{\MTOOLS\ Extensible Arrows}
 \index{arrows}
 \idxboth{extensible}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{mathtools-extensible-arrows}
 \renewcommand{\arraystretch}{1.5}
 \begin{tabular}{ll@{\qquad}ll}
@@ -12076,7 +13583,7 @@
 \begin{symtable}[CHEMA]{\CHEMA\ Extensible Arrows}
 \index{arrows}
 \idxboth{extensible}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{chemarr-extensible-arrows}
 \begin{tabular}{ll}
 \W\xrightleftharpoons{abc} \\
@@ -12087,7 +13594,7 @@
 \begin{symtable}[CHEMB]{\CHEMB\ Extensible Arrows}
 \index{arrows}
 \idxboth{extensible}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{chemarrow-extensible-arrows}
 \renewcommand{\arraystretch}{4}  % Keep upper and lower strings from touching.
 \begin{tabular}{ll@{\qquad}ll}
@@ -12109,7 +13616,7 @@
 \begin{symtable}[EXTAR]{\EXTAR\ Extensible Arrows}
 \index{arrows}
 \idxboth{extensible}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{extarrows-extensible-arrows}
 \renewcommand{\arraystretch}{1.5}
 \begin{tabular}{ll@{\qquad}ll}
@@ -12122,10 +13629,41 @@
 \end{symtable}
 
 
+\begin{symtable}[PDFMSYM]{\PDFMSYM\ Extensible Arrows}
+\index{arrows}
+\idxboth{extensible}{arrows}
+\idxboth{extensible}{symbols}
+\label{pdfmsym-extensible-arrows}
+\renewcommand{\arraystretch}{1.5}
+\begin{tabular}{ll@{\qquad}ll}
+\W\xvarCircleleftarrow{abc}    & \W\xvarLleftRrightarrow{abc} \\
+\W\xvarcircleleftarrow{abc}    & \W\xvarmapsfrom{abc}         \\
+\W\xvarCirclerightarrow{abc}   & \W\xvarmapsto{abc}           \\
+\W\xvarcirclerightarrow{abc}   & \W\xvarRibbonleftarrow{abc}  \\
+\W\xvardoubleleftarrow{abc}    & \W\xvarRibbonrightarrow{abc} \\
+\W\xvardoublerightarrow{abc}   & \W\xvarRightarrow{abc}       \\
+\W\xvardownhookleftarrow{abc}  & \W\xvarrightarrow{abc}       \\
+\W\xvardownhookrightarrow{abc} & \W\xvarrightarrows{abc}      \\
+\W\xvarleftarrow{abc}          & \W\xvarrightleftarrows{abc}  \\
+\W\xvarLeftarrow{abc}          & \W\xvarRrightarrow{abc}      \\
+\W\xvarleftarrows{abc}         & \W\xvarSquareleftarrow{abc}  \\
+\W\xvarleftrightarrow{abc}     & \W\xvarSquarerightarrow{abc} \\
+\W\xvarleftrightarrows{abc}    & \W\xvaruphookleftarrow{abc}  \\
+\W\xvarLleftarrow{abc}         & \W\xvaruphookrightarrow{abc} \\
+\end{tabular}
+
+\bigskip
+
+\begin{tablenote}
+  \pdfmsymmessage.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[XPFEIL]{\XPFEIL\ Extensible Arrows}
 \index{arrows}
 \idxboth{extensible}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{extpfeil-extensible-arrows}
 \renewcommand{\arraystretch}{1.5}
 \begin{tabular}{ll@{\qquad}ll}
@@ -12146,7 +13684,7 @@
 \index{arrows}
 \idxboth{extensible}{arrows}
 \idxboth{dotted}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{dot-arrows}
 \begin{tabular}{ll}
 \W\dotarrow{a} \\
@@ -12156,7 +13694,7 @@
 \begin{tablenote}
   The \DOTARR\ package provides mechanisms for lengthening the arrow,
   adjusting the distance between the arrow and its symbol, and
-  altering the arrowhead.  \seedocs{\DOTARR}.
+  altering the arrowhead\index{arrowheads}.  \seedocs{\DOTARR}.
 \end{tablenote}
 \end{symtable}
 
@@ -12164,7 +13702,7 @@
 \begin{symtable}[HWMATH]{\HWMATH\ Extensible Arrows}
 \index{arrows}
 \idxboth{extensible}{arrows}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{hwmath-arrows}
 \renewcommand{\arraystretch}{1.5}  % Keep high and low accents from touching.
 \begin{tabular}{ll*2{@{\qquad}ll}}
@@ -12178,11 +13716,12 @@
 \begin{tablenote}
   These commands always typeset the arrow in script (small) style,
   hence the ``\texttt{script}'' in their names.  Contrast the size of
-  the arrowheads in the following examples:
+  the arrowheads\index{arrowheads} in the following examples (zoomed
+  3x for clarity):
 
   \begin{center}
     \begin{tabular}{ccc}
-      $\overrightarrow{abc}$ & \small vs. & $\overscriptrightarrow{abc}$ \\
+      \scalebox{3}{$\overrightarrow{abc}$} & \small vs. & \scalebox{3}{$\overscriptrightarrow{abc}$} \\
       \small\verb|\overrightarrow{abc}| & & \small\verb|\overscriptrightarrow{abc}| \\
     \end{tabular}
   \end{center}
@@ -12190,9 +13729,47 @@
 \end{symtable}
 
 
+\begin{symtable}[PDFMSYM]{\PDFMSYM\ Extensible Harpoons}
+\index{harpoons}
+\idxboth{extensible}{symbols}
+\label{pdfmsym-ext-harpoons}
+\begin{tabular}{*2{ll}}
+\W\xvarleftharp{abc}      & \W\xvarrightharp{abc}     \\
+\W\xvarleftrightharp{abc} & \W\xvarrightleftharp{abc} \\
+\end{tabular}
+
+\bigskip
+
+\begin{tablenote}
+  \pdfmsymmessage.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[HARP]{\HARP\ Extensible Harpoons}
+\index{harpoons}
+\idxboth{extensible}{symbols}
+\label{harp-harpoons}
+\begin{tabular}{*3{ll}}
+\W\overleftharp{abc}     & \W\overrightharpdown{abc} & \W\underrightharp{abc}     \\
+\W\overleftharpdown{abc} & \W\underleftharp{abc}     & \W\underrightharpdown{abc} \\
+\W\overrightharp{abc}    & \W\underleftharpdown{abc} &                            \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  All of the \HARP\ symbols are implemented using the
+  \pkgname{graphics} package (specifically, \pkgname{graphics}'s
+  \cmd{\resizebox} command).  Consequently, only \tex backends that
+  support graphical transformations (e.g.,~\emph{not}
+  Xdvi\index{Xdvi}) can properly display these symbols.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[TRF]{\TRF\ Extensible Transform Symbols}
 \index{transforms}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{trf-extend}
 \begin{tabular}{ll@{\hspace*{2em}}ll}
 \W\dft{abc} & \W\DFT{abc} \\
@@ -12202,7 +13779,7 @@
 
 \begin{symtable}[ESR]{\ESR\ Extensible Relations}
 \index{relations}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{esr-extend}
 \renewcommand{\arraystretch}{1.5}  % Keep tall symbols from touching.
 \begin{tabular}{ll@{\hspace*{2em}}ll}
@@ -12215,7 +13792,7 @@
 \begin{symtable}[HWMATH]{\HWMATH\ Extensible Brooms and Pitchforks}
 \index{brooms}
 \index{pitchforks}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \label{hwmath-unwitched}
 \renewcommand{\arraystretch}{2}  % Keep tall symbols from touching.
 \begin{tabular}{ll@{\hspace*{2em}}ll}
@@ -12233,7 +13810,7 @@
 \index{witches}
 \index{brooms}
 \index{pitchforks}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \idxboth{Halloween}{symbols}
 \label{hwmath-witches}
 \renewcommand{\arraystretch}{2}  % Keep tall symbols from touching.
@@ -12256,7 +13833,7 @@
 
 \begin{symtable}[HWMATH]{\HWMATH\ Extensible Ghosts}
 \index{ghosts}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \idxboth{Halloween}{symbols}
 \label{hwmath-ghosts}
 \renewcommand{\arraystretch}{2}  % Keep tall symbols from touching.
@@ -12270,7 +13847,7 @@
 
 \begin{symtable}[HWMATH]{\HWMATH\ Extensible Bats}
 \index{bats}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \idxboth{Halloween}{symbols}
 \label{hwmath-bats}
 \renewcommand{\arraystretch}{2}  % Keep tall symbols from touching.
@@ -12429,8 +14006,8 @@
   \cmdI[\string\FDSYMudots]{\udots};
   \cmdI[\string\FDSYMbecause]{\because} as a synonym for
   \cmdI[\string\FDSYMdowntherefore]{\downtherefore};
-  \cmdI[\string\FDSYMcdots]{\cdotp} as a synonym for
-  \cmdI[\string\FDSYMhdots]{\cdot}; \cmdI[\string\FDSYMcdots]{\cdots}
+  \cmdI[\string\FDSYMcdot]{\cdotp} as a synonym for
+  \cmdI[\string\FDSYMcdot]{\cdot}; \cmdI[\string\FDSYMcdots]{\cdots}
   as a synonym for \cmdI[\string\FDSYMhdots]{\hdots};
   \cmdI[\string\FDSYMColon]{\Colon} as a synonym for
   \cmdI[\string\FDSYMsquaredots]{\squaredots};
@@ -12448,8 +14025,9 @@
 
 \begin{symtable}[STIX]{\STIX\ Dots}
 \idxboth{dot}{symbols}
-\index{dots (ellipses)}
-\index{ellipses (dots)}
+\index{dots (ellipses)} \index{ellipses (dots)}
+\index{dots (ellipses)>math mode}
+\index{ellipses (dots)>math mode}
 \label{stix-dots}
 \begin{tabular}{*2{ll@{\hspace*{1.5cm}}}ll}
 \K[\STIXadots]\adots     & \K[\STIXcdots]\cdots                     & \K[\STIXfourvdots]\fourvdots       \\
@@ -12472,6 +14050,8 @@
 
 \begin{symtable}[MDOTS]{\MDOTS\ Dots}
 \index{dots (ellipses)} \index{ellipses (dots)}
+\index{dots (ellipses)>math mode}
+\index{ellipses (dots)>math mode}
 \idxboth{dot}{symbols}
 \label{mathdots-dots}
 \begin{tabular}{ll*2{@{\quad}ll}}
@@ -12490,6 +14070,8 @@
 
 \begin{symtable}[YH]{\YH\ Dots}
 \index{dots (ellipses)} \index{ellipses (dots)}
+\index{dots (ellipses)>math mode}
+\index{ellipses (dots)>math mode}
 \idxboth{dot}{symbols}
 \label{yhmath-dots}
 \begin{tabular}{ll}
@@ -12500,6 +14082,8 @@
 
 \begin{symtable}[TEUB]{\TEUB\ Dots}
 \index{dots (ellipses)} \index{ellipses (dots)}
+\index{dots (ellipses)>math mode}
+\index{ellipses (dots)>math mode}
 \idxboth{dot}{symbols}
 \label{teubner-dots}
 \begin{tabular}{*3{ll@{\qquad}}ll}
@@ -12508,6 +14092,25 @@
 \end{symtable}
 
 
+\begin{symtable}[LOGIX]{\LOGIX\ Dots}
+\index{dots (ellipses)}
+\index{ellipses (dots)}
+\index{dots (ellipses)>math mode}
+\index{ellipses (dots)>math mode}
+\idxboth{dot}{symbols}
+\label{logix-dots}
+\begin{tabular}{*4{ll}}
+\K\BndDot & \K\Cln & \K\LDots & \K\Thus  \\
+\K\CDots  & \K\Dt  & \K\Since & \K\VDots \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[BEGRIFF]{\BEGRIFF\ Begriffsschrift Symbols}
 \idxboth{Frege logic}{symbols}
 \idxboth{Begriffsschrift}{symbols}
@@ -12591,11 +14194,13 @@
 
 
 \begin{symtable}[FGE]{\FGE\ Digits}
-\index{numerals}
+\subindex{numerals}{rotated}
+\subindex{numerals}{slashed}
 \idxboth{Frege logic}{symbols}
 \label{fge-digits}
-\begin{tabular}{ll@{\qquad}ll}
-\K\fgestruckzero & \K\fgestruckone \\
+\begin{tabular}{*2{ll@{\qqquad}}ll}
+\K\fgeleftthree & \K\fgerighttwo  & \K\fgestruckzero \\
+\K\fgelefttwo   & \K\fgestruckone &                  \\
 \end{tabular}
 \end{symtable}
 
@@ -12602,9 +14207,9 @@
 
 \begin{symtable}[DOZ]{\DOZ\ Base-12 Digits}
 \index{numerals}
-\index{dozenal (base 12)>numerals}
-\index{base twelve>numerals}
-\index{duodecimal (base 12)>numerals}
+\subindex{dozenal (base 12)}{numerals}
+\subindex{base twelve}{numerals}
+\subindex{duodecimal (base 12)}{numerals}
 \idxboth{Pitman's base 12}{symbols}
 \label{dozenal-digits}
 \begin{tabular}{ll@{\qquad}ll}
@@ -12659,6 +14264,8 @@
 
 \begin{symtable}[AMS]{\AMS\ Angles}
 \index{angles}
+\idxboth{measured}{angles}
+\idxboth{spherical}{angles}
 \label{ams-angles}
 \begin{tabular}{*3{ll}}
 \X[\AMSangle]\angle & \X\measuredangle & \X\sphericalangle \\
@@ -12668,6 +14275,8 @@
 
 \begin{symtable}[MNS]{\MNS\ Angles}
 \index{angles}
+\idxboth{measured}{angles}
+\idxboth{spherical}{angles}
 \label{mns-angles}
 \begin{tabular}{*3{ll}}
 \K[\MNSangle]\angle & \K[\MNSmeasuredangle]\measuredangle & \K[\MNSsphericalangle]\sphericalangle \\
@@ -12677,6 +14286,9 @@
 
 \begin{symtable}[FDSYM]{\FDSYM\ Angles}
 \index{angles}
+\idxboth{measured}{angles}
+\idxboth{spherical}{angles}
+\idxboth{right}{angles}
 \label{fdsym-angles}
 \begin{tabular}{*3{ll}}
 \K[\FDSYMangle]\angle                                 & \K[\FDSYMrevangle]\revangle                 & \K[\FDSYMsphericalangle]\sphericalangle         \\
@@ -12704,6 +14316,9 @@
 
 \begin{symtable}[BSK]{\BSK\ Angles}
 \index{angles}
+\idxboth{measured}{angles}
+\idxboth{spherical}{angles}
+\idxboth{right}{angles}
 \label{bsk-angles}
 \begin{tabular}{*3{ll}}
 \K[\BSKangle]\angle                           & \K[\BSKrightangle]\rightangle         & \K[\BSKsphericalangle]\sphericalangle \\
@@ -12715,6 +14330,11 @@
 
 \begin{symtable}[STIX]{\STIX\ Angles}
 \index{angles}
+\idxboth{measured}{angles}
+\idxboth{spherical}{angles}
+\idxboth{right}{angles}
+\index{axes=axes (\STIXthreedangle)}
+\index{coordinate axes=axes (\STIXthreedangle)}
 \label{stix-angles}
 \begin{tabular}{*3{ll}}
 \K[\STIXangdnr]\angdnr                   & \K[\STIXmeasanglerutone]\measanglerutone             & \K[\STIXrightanglemdot]\rightanglemdot     \\
@@ -12731,6 +14351,70 @@
 \end{symtable}
 
 
+\begin{symtable}[TYPICOS]{\TYPICOS\ Decorative Mathematical Symbols}
+\index{division=division (\tiDivideOutline)}
+\index{division=division (\tiDivide)}
+\index{equals=equals (\tiEqualsOutline)}
+\index{equals=equals (\tiEquals)}
+\index{infinity=infinity (\tiInfinityOutline)}
+\index{infinity=infinity (\tiInfinity)}
+\index{minus=minus (\tiMinusOutline)}
+\index{minus=minus (\tiMinus)}
+\index{pi=pi (\tiPi)}
+\index{plus=plus (\tiPlusOutline)}
+\index{plus=plus (\tiPlus)}
+\label{typicons-math}
+\begin{tabular}{*3{ll}}
+\K\tiDivide        & \K\tiInfinity        & \K\tiPi          \\
+\K\tiDivideOutline & \K\tiInfinityOutline & \K\tiPlus        \\
+\K\tiEquals        & \K\tiMinus           & \K\tiPlusOutline \\
+\K\tiEqualsOutline & \K\tiMinusOutline    &                  \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  See also \cmdI{\tiTimes}~(\tiTimes) and
+  \cmdI{\tiTimesOutline}~(\tiTimesOutline) in
+  \ref{typicons-check-marks}.  All \TYPICOS\ symbols are intended to
+  be used in text mode, not math mode.
+
+  \luaxemessage{\TYPICOS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[FNTAWE]{\FNTAWE\ Decorative Mathematical Symbols}
+\index{division=division (\faDivide)}
+\index{equals=equals (\faEquals)}
+\index{greater than or equal to=greater than or equal to (\faGreaterThanEqual)}
+\index{greater than=greater than (\faGreaterThan)}
+\index{infinity=infinity (\faInfinity)}
+\index{less than or equal to=less than or equal to (\faLessThanEqual)}
+\index{less than=less than (\faLessThan)}
+\index{minus=minus (\faMinus)}
+\index{not equal=not equal (\faNotEqual)}
+\index{percent=percent (\faPercent)}
+\index{percent=percent (\faPercentage)}
+\index{plus=plus (\faPlus)}
+\index{question mark=question mark (\faQuestion)}
+\label{fontawesome5-math}
+\begin{tabular}{*3{ll}}
+\K\faDivide           & \K\faLessThan      & \K\faPercentage \\
+\K\faEquals           & \K\faLessThanEqual & \K\faPlus       \\
+\K\faGreaterThan      & \K\faMinus         & \K\faQuestion   \\
+\K\faGreaterThanEqual & \K\faNotEqual      &                 \\
+\K\faInfinity         & \K\faPercent       &                 \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  See also \cmdI{\faTimes}~(\faTimes) in
+  \ref{fontawesome5-check-marks}.  All \FNTAWE\ symbols are intended
+  to be used in text mode, not math mode.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}{Miscellaneous \latexE\ Math Symbols}
 \idxboth{miscellaneous}{symbols}
 \index{dots (ellipses)}
@@ -12737,8 +14421,8 @@
 \index{ellipses (dots)}
 \index{null set}
 \index{empty set}
-\index{dotless i=dotless $i~(\imath)$>math mode}
-\index{dotless j=dotless $j~(\jmath)$>math mode}
+\subindex{dotless i=dotless $i~(\imath)$}{math mode}
+\subindex{dotless j=dotless $j~(\jmath)$}{math mode}
 \index{angles}
 \index{rhombuses}
 \index{infinity}
@@ -12813,6 +14497,7 @@
 \begin{symtable}[WASY]{Miscellaneous \WASY\ Math Symbols}
 \index{angles}
 \index{rhombuses}
+\index{upside-down letters}
 \label{wasy-math}
 \begin{tabular}{*4{ll}}
 \X[\WASYBox]\Box & \X[\WASYDiamond]\Diamond & \X\mho$^*$ & \K\varangle \\
@@ -12842,6 +14527,8 @@
 \index{null set}
 \index{semidirect products}
 \index{angles}
+\idxboth{measured}{angles}
+\idxboth{spherical}{angles}
 \index{pitchforks}
 \index{infinity}
 \label{abx-misc}
@@ -12972,17 +14659,21 @@
 
 
 \begin{longsymtable}[STIX]{Miscellaneous \STIX\ Math Symbols}
+\ltidxboth{currency}{symbols}
+\ltidxboth{database}{symbols}
+\ltidxboth{engineering}{symbols}
+\ltindex{asterisks}
 \ltindex{check marks}
+\ltindex{circles}
+\ltindex{end of proof}
 \ltindex{faces}
-\ltindex{smiley faces}
 \ltindex{outer joins}
-\ltidxboth{database}{symbols}
-\ltidxboth{relational database}{symbols}
-\ltidxboth{engineering}{symbols}
-\ltidxboth{currency}{symbols}
+\ltindex{proof, end of}
 \ltindex{Q.E.D.}
-\ltindex{end of proof}
-\ltindex{proof, end of}
+\ltindex{smiley faces}
+\ltindex{squares}
+\ltindex{triangles}
+\ltindex{Xs}
 \label{stix-misc}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -13022,30 +14713,6 @@
 \end{longsymtable}
 
 
-\begin{symtable}[EOPROOF]{\EOPROOF\ End-of-Proof Symbols}
-\index{Q.E.D.}
-\index{end of proof}
-\index{proof, end of}
-\label{endofproof}
-\begin{tabular}{ll}
-\K\wasserdicht \\
-\end{tabular}
-
-\bigskip
-\begin{tablenote}
-  \texttt{\string\wasserdicht} is implemented as an external PDF
-  graphic.  The command in fact typesets the symbol flush right on the
-  page to signify the end of proof.  To use the command in inline
-  text, simply load the underlying graphic file directly:
-
-\vspace{-\baselineskip}
-\begin{verbatim}
-    \includegraphics[width=10pt]{endofproofwd.pdf}
-\end{verbatim}
-\end{tablenote}
-\end{symtable}
-
-
 \begin{symtable}{Miscellaneous \TC\ Text-mode Math Symbols}
 \index{fractions}
 \label{tc-math}
@@ -13089,9 +14756,9 @@
 \idxboth{Frege logic}{symbols}
 \label{fge-misc}
 \begin{tabular}{*3{ll@{\qquad}}ll}
-\K\fgebackslash & \K\fgecap       & \K\fgecupacute  & \K\fgelangle    \\
-\K\fgebaracute  & \K\fgecapbar    & \K\fgecupbar    & \K\fgeupbracket \\
-\K\fgebarcap    & \K\fgecup       & \K\fgeinfty     &                 \\
+\K\fgebackslash & \K\fgecap    & \K\fgecupacute & \K\fgelangle    \\
+\K\fgebaracute  & \K\fgecapbar & \K\fgecupbar   & \K\fgeupbracket \\
+\K\fgebarcap    & \K\fgecup    & \K\fgeinfty    &                 \\
 \end{tabular}
 \end{symtable}
 
@@ -13099,6 +14766,7 @@
 \begin{symtable}[MDES]{Miscellaneous \MDES\ Math Symbols}
 \idxboth{miscellaneous}{symbols}
 \index{angles}
+\idxboth{right}{angles}
 \label{mdes-misc}
 \begin{tabular}{ll}
 \K[\MDESrightangle]\rightangle
@@ -13106,6 +14774,33 @@
 \end{symtable}
 
 
+\begin{symtable}[LOGIX]{Miscellaneous \LOGIX\ Math Symbols}
+\idxboth{miscellaneous}{symbols}
+\idxboth{logic}{symbols}
+\label{logix-misc}
+\begin{tabular}{*4{ll}}
+\K\Aor       & \K\FncCnvrs    & \K\MapJoin       & \K\SetJoin     \\
+\K\Append    & \K\FncComp     & \K\MapMeet       & \K\SetMeet     \\
+\K\BncBistab & \K\ForComp     & \K\Mnd           & \K\SetSymDiff  \\
+\K\BnchJoin  & \K\FrstOrd     & \K\Mor           & \K\SimPerp     \\
+\K\BnchMeet  & \K\GrtFix      & \K\Normal        & \K\SInCoh      \\
+\K\Catenate  & \K\InCoh       & \K\OfCrse        & \K\SmCircPlus  \\
+\K\Choice    & \K\Infin       & \K\QuantAAnd     & \K\SmCircStar  \\
+\K\Choices   & \K\LcgBistab   & \K\QuantBnchJoin & \K\SmCircTimes \\
+\K\Coh       & \K\LgCircPlus  & \K\QuantBnchMeet & \K\VeeJoin     \\
+\K\Concat    & \K\LgCircStar  & \K\QuantMor      & \K\VeeMeet     \\
+\K\Cover     & \K\LgCircTimes & \K\QuantSetJoin  & \K\WhyNot      \\
+\K\ExGrtFix  & \K\LstFix      & \K\QuantSetMeet  &                \\
+\K\ExLstFix  & \K\MapComp     & \K\SCoh          &                \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\LOGIX}.
+\end{tablenote}
+\end{symtable}
+
+
 % Because the Math Alphabets table is a bit different from the symbol
 % tables in this document we start it on its own page to emphasize it
 % and to include enough room for some of the table notes.
@@ -13221,7 +14916,7 @@
 \unskip
 
 % Because we have so much text and because we're at the end of the
-% section, we put all of the table notes after the symtable to give
+% chapter, we put all of the table notes after the symtable to give
 % LaTeX the opportunity to split them across pages.
 \begin{center}
 \bigskip
@@ -13286,24 +14981,24 @@
   \ifx\MBBmathbb\undefined
     \pkgname{mbboard} extends the blackboard bold symbol set
     significantly further.  It supports not only the
-    Greek\index{Greek>blackboard bold}\index{alphabets>Greek}\index{Greek>letters}
+    Greek\index{Greek>blackboard bold}\subindex{alphabets}{Greek}\index{Greek>letters}
     alphabet---including ``Greek-like'' symbols such as
     \cmd{\bbnabla}---but also \emph{all} punctuation marks, various
     currency\idxboth{currency}{symbols}\idxboth{monetary}{symbols}
-    symbols such as \cmd{\bbdollar} and \cmd{\bbeuro},\index{euro
-    signs>blackboard bold} and the
-    Hebrew\index{Hebrew}\index{alphabets>Hebrew} alphabet.
+    symbols such as \cmd{\bbdollar} and
+    \cmd{\bbeuro},\index{euro>blackboard bold} and the
+    Hebrew\index{Hebrew}\subindex{alphabets}{Hebrew} alphabet.
   \else
     \pkgname{mbboard} extends the blackboard bold symbol set
     significantly further.  It supports not only the
-    Greek\index{Greek>blackboard bold}\index{alphabets>Greek}\index{Greek>letters}
+    Greek\index{Greek>blackboard bold}\subindex{alphabets}{Greek}\index{Greek>letters}
     alphabet---including ``Greek-like'' symbols such as
     \cmdI{\bbnabla}~(``\bbnabla'')---but also \emph{all} punctuation
     marks, various
     currency\idxboth{currency}{symbols}\idxboth{monetary}{symbols}
     symbols such as \cmdI{\bbdollar}~(``\bbdollar'') and
-    \cmdI{\bbeuro}~(``\bbeuro''),\index{euro signs>blackboard bold}
-    and the Hebrew\index{Hebrew}\index{alphabets>Hebrew}
+    \cmdI{\bbeuro}~(``\bbeuro''),\index{euro>blackboard bold}
+    and the Hebrew\index{Hebrew}\subindex{alphabets}{Hebrew}
     alphabet~(e.g.,~``\cmdI{\bbfinalnun}\linebreak[1]\cmdI{\bbyod}%
     \linebreak[1]\cmdI{\bbqof}\linebreak[1]\cmdI{\bbpe}''~$\rightarrow$
     ``\bbfinalnun\bbyod\bbqof\bbpe'').
@@ -13359,13 +15054,13 @@
 \idxbothend{mathematical}{symbols}
 
 
-\section{Science and technology symbols}
+\chapter{Science and technology symbols}
 \label{sci-tech-symbols}
 \idxbothbegin{scientific}{symbols}
 \idxbothbegin{technological}{symbols}
-\tablesubsections
+\tablesections
 
-This section lists symbols that are employed in various branches of
+This chapter lists symbols that are employed in various branches of
 science and engineering.
 
 \bigskip
@@ -13383,6 +15078,7 @@
 \begin{symtable}[WASY]{\WASY\ Electrical and Physical Symbols}
 \idxboth{electrical}{symbols}
 \idxboth{physical}{symbols}
+\index{gluons}
 \index{photons}
 \label{wasy-electic}
 \begin{tabular}{*{9}{ll@{\qquad}}ll}
@@ -13397,11 +15093,21 @@
 \idxboth{engineering}{symbols}
 \index{electrical impulse}
 \index{square impulse}
+\index{digital signals>falling edge=falling edge (\FallingEdge)}
+\index{digital signals>rising edge=rising edge (\RaisingEdge)}
+\index{digital signals>high=high (\ShortPulseHigh)}
+\index{digital signals>high=high (\PulseHigh)}
+\index{digital signals>high=high (\LongPulseHigh)}
+\index{digital signals>low=low (\ShortPulseLow)}
+\index{digital signals>low=low (\PulseLow)}
+\index{digital signals>low=low (\LongPulseLow)}
 \label{pulse-diagram}
+\begin{indexingoff}
 \begin{tabular}{*4{ll}}
 \K\FallingEdge   & \K\LongPulseLow & \K\PulseLow    & \K\ShortPulseHigh \\
 \K\LongPulseHigh & \K\PulseHigh    & \K\RaisingEdge & \K\ShortPulseLow  \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -13471,8 +15177,7 @@
 
 \begin{symtable}[STEIN]{\STEIN\ Extensible Phasor Symbol}
 \index{Steinmetz phasor notation}
-\index{angle notation}
-\index{symbols>extensible}
+\idxboth{extensible}{symbols}
 \index{phasor}
 \label{steinmetz-phasor}
 \begin{tabular}{ll}
@@ -13519,14 +15224,15 @@
 \begin{symtable}[WASY]{\WASY\ Astronomical Symbols}
 \idxboth{astronomical}{symbols}
 \idxboth{astrological}{symbols}
-\idxboth{zodiacal}{symbols}
+\idxboth{horoscope}{symbols}
+\idxboth{zodiac}{symbols}
 \index{planets}
 \index{Earth}
 \index{suns}
 \index{moons}
 \index{celestial bodies}
-\index{male}
-\index{female}
+\index{male sign}
+\index{female sign}
 \label{wasy-astro}
 \begin{tabular}{*5{ll}}
 \K\mercury & \K\earth & \K\jupiter & \K\uranus  & \K\pluto \\
@@ -13546,13 +15252,15 @@
 \begin{symtable}[MARV]{\MARV\ Astronomical Symbols}
 \idxboth{astronomical}{symbols}
 \idxboth{astrological}{symbols}
-\idxboth{zodiacal}{symbols}
+\idxboth{horoscope}{symbols}
+\idxboth{zodiac}{symbols}
 \index{planets}
 \index{suns}
+\index{sun=sun (\Sun)}
 \index{moons}
 \index{celestial bodies}
-\index{male}
-\index{female}
+\index{male sign}
+\index{female sign}
 \index{Earth}
 \label{marv-astro}
 \begin{tabular}{*5{ll}}
@@ -13575,34 +15283,18 @@
 \end{symtable}
 
 
-\begin{symtable}[FNTAWE]{\FNTAWE\ Astronomical Symbols}
-\idxboth{astronomical}{symbols}
-\idxboth{astrological}{symbols}
-\idxboth{zodiacal}{symbols}
-\index{planets}
-\index{suns}
-\index{moons}
-\index{celestial bodies}
-\index{male}
-\index{female}
-\label{fontawesome-astro}
-\begin{tabular}{*3{ll}}
-\K\faMars    & \K\faMoonO & \K\faVenus \\
-\K\faMercury & \K\faSunO  &            \\
-\end{tabular}
-\end{symtable}
-
-
 \begin{symtable}[ABX]{\ABX\ Astronomical Symbols}
 \idxboth{astronomical}{symbols}
 \idxboth{astrological}{symbols}
-\idxboth{zodiacal}{symbols}
+\idxboth{horoscope}{symbols}
+\idxboth{zodiac}{symbols}
 \index{planets}
 \index{suns}
+\index{sun=sun ($\ABXSun$)}
 \index{moons}
 \index{celestial bodies}
-\index{male}
-\index{female}
+\index{male sign}
+\index{female sign}
 \index{Earth}
 \label{abx-astro}
 \begin{tabular}{*5{ll}}
@@ -13629,8 +15321,10 @@
 \begin{symtable}[STIX]{\STIX\ Astronomical Symbols}
 \idxboth{astronomical}{symbols}
 \idxboth{astrological}{symbols}
-\idxboth{zodiacal}{symbols}
+\idxboth{horoscope}{symbols}
+\idxboth{zodiac}{symbols}
 \index{suns}
+\index{sun=sun ($\STIXsun$)}
 \index{moons}
 \index{celestial bodies}
 \label{stix-astro}
@@ -13643,7 +15337,8 @@
 \begin{symtable}[UTFSYM]{\UTFSYM\ Astronomical Symbols}
 \idxboth{astronomical}{symbols}
 \idxboth{astrological}{symbols}
-\idxboth{zodiacal}{symbols}
+\idxboth{horoscope}{symbols}
+\idxboth{zodiac}{symbols}
 \index{celestial bodies}
 \index{moons}
 \index{planets}
@@ -13672,7 +15367,8 @@
 \begin{symtable}[STAR]{\STAR\ Astronomical Symbols}
 \idxboth{astronomical}{symbols}
 \idxboth{astrological}{symbols}
-\idxboth{zodiacal}{symbols}
+\idxboth{horoscope}{symbols}
+\idxboth{zodiac}{symbols}
 \index{angles}
 \index{arrows}
 \index{asteroids}
@@ -13680,15 +15376,20 @@
 \index{circles}
 \index{Earth}
 \index{elements}
-\index{female}
+\index{female sign}
 \index{geometric shapes}
 \index{hearts}
-\index{male}
+\index{male sign}
 \index{moons}
 \index{planets}
 \index{stars}
 \index{suns}
+\index{sun=sun (\STARSun)}
 \index{triangles}
+\index{ascendant=ascendant (\STARASC)}
+\index{descendant=descendant (\STARDSC)}
+\index{medium coeli=medium c{\oe}li (\STARMC)}
+\index{imum coeli=imum c{\oe}li (\STARIC)}
 \label{starfont}
 \begin{tabular}{*4{ll}}
 \K[\STARMercury]\Mercury & \K[\STARMars]\Mars       & \K[\STARUranus]\Uranus   & \K[\STARvarTerra]\varTerra   \\
@@ -13757,18 +15458,20 @@
 \begin{symtable}[APL]{\APL\ APL Symbols}
 \idxboth{APL}{symbols}
 \label{apl}
+\begin{indexingoff}
 \begin{tabular}{*8{ll}}
-\K\AB & \K\DD & \K\GD & \K\LK         & \K\PD & \K\UA & \K\ZG & \K\ZQ \\
-\K\AM & \K\DE & \K\GE & \K\LO         & \K\QQ & \K\US & \K\ZH & \K\ZR \\
-\K\BL & \K\DL & \K\GO & \K\LU         & \K\RB & \K\UU & \K\ZI & \K\ZS \\
-\K\BX & \K\DM & \K\GU & \K\NE         & \K\RK & \K\XQ & \K\ZJ & \K\ZT \\
-\K\CB & \K\DQ & \K\IB & \K[\APLNG]\NG & \K\RO & \K\ZA & \K\ZK & \K\ZU \\
-\K\CE & \K\DU & \K\IO & \K\NN         & \K\RU & \K\ZB & \K\ZL & \K\ZV \\
-\K\CO & \K\EN & \K\LB & \K\NR         & \K\RV & \K\ZC & \K\ZM & \K\ZW \\
-\K\CR & \K\EP & \K\LD & \K\NT         & \K\SO & \K\ZD & \K\ZN & \K\ZX \\
-\K\CS & \K\FL & \K\LE & \K\OM         & \K\SS & \K\ZE & \K\ZO & \K\ZY \\
-\K\DA & \K\FM & \K\LG & \K\OR         & \K\TR & \K\ZF & \K\ZP & \K\ZZ \\
+\K\AB & \K\DD & \K\GD & \K\LK         & \K\PD         & \K\UA & \K\ZG & \K\ZQ \\
+\K\AM & \K\DE & \K\GE & \K\LO         & \K\QQ         & \K\US & \K\ZH & \K\ZR \\
+\K\BL & \K\DL & \K\GO & \K\LU         & \K\RB         & \K\UU & \K\ZI & \K\ZS \\
+\K\BX & \K\DM & \K\GU & \K\NE         & \K\RK         & \K\XQ & \K\ZJ & \K\ZT \\
+\K\CB & \K\DQ & \K\IB & \K[\APLNG]\NG & \K\RO         & \K\ZA & \K\ZK & \K\ZU \\
+\K\CE & \K\DU & \K\IO & \K\NN         & \K\RU         & \K\ZB & \K\ZL & \K\ZV \\
+\K\CO & \K\EN & \K\LB & \K\NR         & \K\RV         & \K\ZC & \K\ZM & \K\ZW \\
+\K\CR & \K\EP & \K\LD & \K\NT         & \K\SO         & \K\ZD & \K\ZN & \K\ZX \\
+\K\CS & \K\FL & \K\LE & \K\OM         & \K[\APLSS]\SS & \K\ZE & \K\ZO & \K\ZY \\
+\K\DA & \K\FM & \K\LG & \K\OR         & \K\TR         & \K\ZF & \K\ZP & \K\ZZ \\
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
@@ -13792,7 +15495,7 @@
 \label{keystroke}
 \renewcommand{\arraystretch}{1.25}  % Keep the symbols from touching.
 \begin{tabular}{*2{ll@{\qqquad}}ll}
-\K\Alt                        & \K\Enter$^*$  & \K\PrtSc$^*$            \\
+\K[\KEYSAlt]\Alt              & \K\Enter$^*$  & \K\PrtSc$^*$            \\
 \K\AltGr                      & \K\Esc$^*$    & \K\RArrow               \\
 \K\Break$^*$                  & \K\Home$^*$   & \K\Return               \\
 \K[\keysBSpace]\BSpace$^\dag$ & \K\Ins$^*$    & \K\Scroll$^*$           \\
@@ -13799,7 +15502,7 @@
 \K\Ctrl$^*$                   & \K\LArrow     & \K\Shift$^*$            \\
 \K\DArrow                     & \K\NumLock    & \K\Spacebar             \\
 \K\Del$^*$                    & \K\PgDown$^*$ & \K[\keysTab]\Tab$^\dag$ \\
-\K\End$^*$                    & \K\PgUp$^*$   & \K\UArrow               \\
+\K[\KEYSEnd]\End$^*$          & \K\PgUp$^*$   & \K\UArrow               \\
 \end{tabular}
 
 \bigskip
@@ -13830,13 +15533,13 @@
 
 \begin{symtable}[ASCII]{\ASCII\ Control Characters (CP437)}
 \index{ASCII}
-\index{IBM PC}
+\idxboth{IBM PC}{symbols}
 \index{control characters}
 \index{carriage return}
 \index{faces}
 \index{smiley faces}
 \index{frowny faces}
-\index{nonbreaking space}
+\index{non-breaking space=non-breaking space (\NBSP)}
 \index{code page 437}
 \label{ibm-ascii}
 \begin{tabular}{*4{ll@{\qqquad}}ll}
@@ -13849,20 +15552,21 @@
 \K\BEL & \K\SO           & \K\NAK & \K\FS  &       \\[2ex]
 %
 \K\DEL & \K\NBSP & \K\NUL &
-\incsyms\indexcommand[\splitvert]{\splitvert}\splitvert &
+\incsyms\indexcommand[\string\splitvert]{\splitvert}\splitvert &
 \multicolumn{2}{l}{\ttfamily\string\splitvert} \\
 \end{tabular}
 
 \bigskip
-
 \begin{tablenote}
   Code Page~437 (CP437), which was first utilized by the original
-  IBM~PC, uses the symbols \cmdI{\SOH} through \cmdI{\US} to depict
-  \ascii characters~1--31 and \cmdI{\DEL} to depict \ascii
-  character~127.  The \cmdI{\NUL} symbol, not part of CP437,
-  represents \ascii character~0.  \cmdI{\NBSP}, also not part of
-  CP437, represents a nonbreaking space.  \cmdI{\splitvert} is merely
-  the ``$|$'' character drawn as it was on the IBM~PC.
+  IBM~PC, uses the symbols \cmdI[\string\SOH]{\SOH} through
+  \cmdI[\string\US]{\US} to depict \ascii characters~1--31 and
+  \cmdI[\string\DEL]{\DEL} to depict \ascii character~127.  The
+  \cmdI[\string\NUL]{\NUL} symbol, not part of CP437, represents
+  \ascii character~0.  \cmdI[\string\NBSP]{\NBSP}, also not part of
+  CP437, represents a nonbreaking space.
+  \cmdI[\string\splitvert]{\splitvert} is merely the ``$|$'' character
+  drawn as it was on the IBM~PC.
 \end{tablenote}
 \end{symtable}
 
@@ -13870,18 +15574,18 @@
 \begin{symtable}[LOGIC]{\LOGIC\ Logic Gates}
 \index{buffers}
 \index{inverters}
-\index{AND gates}
-\index{OR gates}
-\index{NAND gates}
-\index{NOR gates}
+\index{AND gates=\textsc{and} gates}
+\index{OR gates=\textsc{or} gates}
+\index{NAND gates=\textsc{nand} gates}
+\index{NOR gates=\textsc{nor} gates}
 \index{logic gates}
 \index{digital logic gates}
 \index{combinatorial logic gates}
 \index{Boolean logic gates}
-\index{symbols>gates, digital logic}
-\index{symbols>logic}
+\index{symbols>digital logic}
 \index{triangles}
 \label{mil-gates}
+\begin{indexingoff}
 \renewcommand{\arraystretch}{3}  % Keep tall symbols from touching.
 \begin{tabular}{*3{ll@{\qquad}}ll}
 \K\ANDd     & \K\BUFu     & \K\NANDl & \K\ORd \\
@@ -13892,6 +15596,7 @@
 \K\BUFl     & \K\INVu     & \K\NORr  &        \\
 \K\BUFr     & \K\NANDd    & \K\NORu  &        \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -13909,8 +15614,30 @@
 \end{symtable}
 
 
+\begin{symtable}[QTIKZ]{\QTIKZ\ Quantum-Mechanics Notation}
+\index{Dirac notation}
+\index{quantum-mechanics notation}
+\idxboth{extensible}{accents}
+\idxboth{extensible}{braces}
+\label{quantikz}
+\renewcommand{\arraystretch}{1.2}
+\begin{tabular}{*4{ll}}
+\W[\QTIKZbra]\bra{a}            & \W[\QTIKZket]\ket{a}   \\
+\Wul[\QTIKZbraket]\braket{a}{b} & \W[\QTIKZproj]\proj{a} \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  All of these symbols work in both text and math mode and scale
+  automatically to fit their argument(s).
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[MARV]{\MARV\ Communication Symbols}
 \idxboth{communication}{symbols}
+\index{lightning}
+\index{telephone=telephone (\Telefon)}
 \label{marv-comm}
 \begin{tabular}{*4{ll}ll}
 \K\Email      & \K\fax        & \K\Faxmachine & \K\Lightning  & \K\Pickup  \\
@@ -13940,9 +15667,568 @@
 \end{symtable}
 
 
+\begin{longsymtable}[TYPICOS]{\TYPICOS\ User-Interface Symbols}
+\ltidxboth{user-interface}{symbols}
+\ltindex{adjust brightness=adjust brightness (\tiAdjustBrightness)}
+\ltindex{adjust contrast=adjust contrast (\tiAdjustContrast)}
+\ltindex{archive=archive (\tiArchive)}
+\ltindex{backspace=backspace (\tiBackspaceOutline)}
+\ltindex{backspace=backspace (\tiBackspace)}
+\ltindex{battery charge=battery charge (\tiBatteryCharge)}
+\ltindex{battery full=battery full (\tiBatteryFull)}
+\ltindex{battery high=battery high (\tiBatteryHigh)}
+\ltindex{battery low=battery low (\tiBatteryLow)}
+\ltindex{battery mid=battery mid (\tiBatteryMid)}
+\ltindex{bookmark=bookmark (\tiBookmark)}
+\ltindex{cancel=cancel (\tiCancelOutline)}
+\ltindex{cancel=cancel (\tiCancel)}
+\ltindex{area chart=area chart (\tiChartAreaOutline)}
+\ltindex{area chart=area chart (\tiChartArea)}
+\ltindex{bar chart=bar chart (\tiChartBarOutline)}
+\ltindex{bar chart=bar chart (\tiChartBar)}
+\ltindex{line chart=line chart (\tiChartLineOutline)}
+\ltindex{line chart=line chart (\tiChartLine)}
+\ltindex{pie chart=pie chart (\tiChartPieOutline)}
+\ltindex{pie chart=pie chart (\tiChartPie)}
+\ltindex{cloud storage=cloud storage (\tiCloudStorageOutline)}
+\ltindex{cloud storage=cloud storage (\tiCloudStorage)}
+\ltindex{code=code (\tiCodeOutline)}
+\ltindex{code=code (\tiCode)}
+\ltindex{cog=cog (\tiCogOutline)}
+\ltindex{cog=cog (\tiCog)}
+\ltindex{CSS=CSS (\tiCss)}
+\ltindex{database=database (\tiDatabase)}
+\ltindex{download=download (\tiDownloadOutline)}
+\ltindex{download=download (\tiDownload)}
+\ltindex{edit=edit (\tiEdit)}
+\ltindex{export=export (\tiExportOutline)}
+\ltindex{export=export (\tiExport)}
+\ltindex{filter=filter (\tiFilter)}
+\ltindex{flow=flow (\tiFlowChildren)}
+\ltindex{flow=flow (\tiFlowMerge)}
+\ltindex{flow=flow (\tiFlowParallel)}
+\ltindex{flow=flow (\tiFlowSwitch)}
+\ltindex{group=group (\tiGroupOutline)}
+\ltindex{group=group (\tiGroup)}
+\ltindex{HTML=HTML (\tiHtml)}
+\ltindex{image=image (\tiImageOutline)}
+\ltindex{image=image (\tiImage)}
+\ltindex{information=information (\tiInfoLargeOutline)}
+\ltindex{information=information (\tiInfoLarge)}
+\ltindex{information=information (\tiInfoOutline)}
+\ltindex{information=information (\tiInfo)}
+\ltindex{link=link (\tiLinkOutline)}
+\ltindex{link=link (\tiLink)}
+\ltindex{location=location (\tiLocationOutline)}
+\ltindex{location=location (\tiLocation)}
+\ltindex{message typing=message typing (\tiMessageTyping)}
+\ltindex{message=message (\tiMessage)}
+\ltindex{messages=messages (\tiMessages)}
+\ltindex{refresh=refresh (\tiRefreshOutline)}
+\ltindex{refresh=refresh (\tiRefresh)}
+\ltindex{RSS=RSS (\tiRssOutline)}
+\ltindex{RSS=RSS (\tiRss)}
+\ltindex{sort alphabetically=sort alphabetically (\tiSortAlphabeticallyOutline)}
+\ltindex{sort alphabetically=sort alphabetically (\tiSortAlphabetically)}
+\ltindex{sort numerically=sort numerically (\tiSortNumericallyOutline)}
+\ltindex{sort numerically=sort numerically (\tiSortNumerically)}
+\ltindex{support=support (\tiSupport)}
+\ltindex{tabs=tabs (\tiTabsOutline)}
+\ltindex{large=large (\tiThLargeOutline)}
+\ltindex{large=large (\tiThLarge)}
+\ltindex{list=list (\tiThListOutline)}
+\ltindex{list=list (\tiThList)}
+\ltindex{menu=menu (\tiThMenuOutline)}
+\ltindex{menu=menu (\tiThMenu)}
+\ltindex{small squares=small squares (\tiThSmallOutline)}
+\ltindex{small squares=small squares (\tiThSmall)}
+\ltindex{upload=upload (\tiUploadOutline)}
+\ltindex{upload=upload (\tiUpload)}
+\ltindex{warning=warning (\tiWarningOutline)}
+\ltindex{warning=warning (\tiWarning)}
+\ltindex{waves=waves (\tiWavesOutline)}
+\ltindex{waves=waves (\tiWaves)}
+\ltindex{wifi=wifi (\tiWiFiOutline)}
+\ltindex{wifi=wifi (\tiWiFi)}
+\ltindex{zoom in=zoom in (\tiZoomInOutline)}
+\ltindex{zoom in=zoom in (\tiZoomIn)}
+\ltindex{zoom out=zoom out (\tiZoomOutOutline)}
+\ltindex{zoom out=zoom out (\tiZoomOut)}
+\ltindex{zoom=zoom (\tiZoomOutline)}
+\ltindex{zoom=zoom (\tiZoom)}
+\label{typicons-ui}
+\begin{longtable}{*2{ll}}
+\multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{4}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\K\tiAdjustBrightness    & \K\tiInfo                      \\
+\K\tiAdjustContrast      & \K\tiInfoLarge                 \\
+\K\tiArchive             & \K\tiInfoLargeOutline          \\
+\K\tiBackspace           & \K\tiInfoOutline               \\
+\K\tiBackspaceOutline    & \K\tiLink                      \\
+\K\tiBatteryCharge       & \K\tiLinkOutline               \\
+\K\tiBatteryFull         & \K\tiLocation                  \\
+\K\tiBatteryHigh         & \K\tiLocationOutline           \\
+\K\tiBatteryLow          & \K\tiMessage                   \\
+\K\tiBatteryMid          & \K\tiMessages                  \\
+\K\tiBookmark            & \K\tiMessageTyping             \\
+\K\tiCancel              & \K\tiRefresh                   \\
+\K\tiCancelOutline       & \K\tiRefreshOutline            \\
+\K\tiChartArea           & \K\tiRss                       \\
+\K\tiChartAreaOutline    & \K\tiRssOutline                \\
+\K\tiChartBar            & \K\tiSortAlphabetically        \\
+\K\tiChartBarOutline     & \K\tiSortAlphabeticallyOutline \\
+\K\tiChartLine           & \K\tiSortNumerically           \\
+\K\tiChartLineOutline    & \K\tiSortNumericallyOutline    \\
+\K\tiChartPie            & \K\tiSupport                   \\
+\K\tiChartPieOutline     & \K\tiTabsOutline               \\
+\K\tiCloudStorage        & \K\tiThLarge                   \\
+\K\tiCloudStorageOutline & \K\tiThLargeOutline            \\
+\K\tiCode                & \K\tiThList                    \\
+\K\tiCodeOutline         & \K\tiThListOutline             \\
+\K\tiCog                 & \K\tiThMenu                    \\
+\K\tiCogOutline          & \K\tiThMenuOutline             \\
+\K\tiCss                 & \K\tiThSmall                   \\
+\K\tiDatabase            & \K\tiThSmallOutline            \\
+\K\tiDownload            & \K\tiUpload                    \\
+\K\tiDownloadOutline     & \K\tiUploadOutline             \\
+\K\tiEdit                & \K\tiWarning                   \\
+\K\tiExport              & \K\tiWarningOutline            \\
+\K\tiExportOutline       & \K\tiWaves                     \\
+\K\tiFilter              & \K\tiWavesOutline              \\
+\K\tiFlowChildren        & \K\tiWiFi                      \\
+\K\tiFlowMerge           & \K\tiWiFiOutline               \\
+\K\tiFlowParallel        & \K\tiZoom                      \\
+\K\tiFlowSwitch          & \K\tiZoomIn                    \\
+\K\tiGroup               & \K\tiZoomInOutline             \\
+\K\tiGroupOutline        & \K\tiZoomOut                   \\
+\K\tiHtml                & \K\tiZoomOutline               \\
+\K\tiImage               & \K\tiZoomOutOutline            \\
+\K\tiImageOutline        &                                \\
+\end{longtable}
+
+\begin{tablenote}
+  \luaxemessage{\TYPICOS}.
+\end{tablenote}
+\end{longsymtable}
+
+
+\begin{longsymtable}[FNTAWE]{\FNTAWE\ User-Interface Symbols}
+\ltidxboth{user-interface}{symbols}
+\ltidxboth{musical}{symbols}
+\ltindex{arrows}
+\ltindex{ad=ad (\faAd)}
+\ltindex{address book=address book (\faAddressBook)}
+\ltindex{address book=address book (\faAddressBook[regular])}
+\ltindex{address card=address card (\faAddressCard)}
+\ltindex{address card=address card (\faAddressCard[regular])}
+\ltindex{adjust=adjust (\faAdjust)}
+\ltindex{align center=align center (\faAlignCenter)}
+\ltindex{align justify=align justify (\faAlignJustify)}
+\ltindex{align left=align left (\faAlignLeft)}
+\ltindex{align right=align right (\faAlignRight)}
+\ltindex{arrows=arrows (\faArrows*)}
+\ltindex{audio description=audio description (\faAudioDescription)}
+\ltindex{backspace=backspace (\faBackspace)}
+\ltindex{bars=bars (\faBars)}
+\ltindex{battery empty=battery empty (\faBatteryEmpty)}
+\ltindex{battery full=battery full (\faBatteryFull)}
+\ltindex{battery half=battery half (\faBatteryHalf)}
+\ltindex{battery quarter=battery quarter (\faBatteryQuarter)}
+\ltindex{battery three quarters=battery three quarters (\faBatteryThreeQuarters)}
+\ltindex{mute=mute (\faBellSlash)}
+\ltindex{mute=mute (\faBellSlash[regular])}
+\ltindex{blog=blog (\faBlog)}
+\ltindex{bold=bold (\faBold)}
+\ltindex{bookmark=bookmark (\faBookmark)}
+\ltindex{bookmark=bookmark (\faBookmark[regular])}
+\ltindex{border all=border all (\faBorderAll)}
+\ltindex{border none=border none (\faBorderNone)}
+\ltindex{border style=border style (\faBorderStyle)}
+\ltindex{check out=check out (\faCartArrowDown)}
+\ltindex{add to shopping cart=add to shopping cart (\faCartPlus)}
+\ltindex{area chart=area chart (\faChartArea)}
+\ltindex{bar chart=bar chart (\faChartBar)}
+\ltindex{bar chart=bar chart (\faChartBar[regular])}
+\ltindex{line chart=line chart (\faChartLine)}
+\ltindex{pie chart=pie chart (\faChartPie)}
+\ltindex{clipboard=clipboard (\faClipboardCheck)}
+\ltindex{clipboard=clipboard (\faClipboard)}
+\ltindex{clipboard=clipboard (\faClipboard[regular])}
+\ltindex{clone=clone (\faClone)}
+\ltindex{clone=clone (\faClone[regular])}
+\ltindex{closed captioning=closed captioning (\faClosedCaptioning)}
+\ltindex{closed captioning=closed captioning (\faClosedCaptioning[regular])}
+\ltindex{cloud download=cloud download (\faCloudDownload*)}
+\ltindex{cloud upload=cloud upload (\faCloudUpload*)}
+\ltindex{code branch=code branch (\faCodeBranch)}
+\ltindex{code=code (\faCode)}
+\ltindex{cog=cog (\faCog)}
+\ltindex{columns=columns (\faColumns)}
+\ltindex{comment with dollar=comment with dollar (\faCommentDollar)}
+\ltindex{comment with ellipsis=comment with ellipsis (\faCommentDots)}
+\ltindex{comment with ellipsis=comment with ellipsis (\faCommentDots[regular])}
+\ltindex{comments off=comments off (\faCommentSlash)}
+\ltindex{comment=comment (\faComment)}
+\ltindex{comment=comment (\faComment*)}
+\ltindex{comment=comment (\faComment*[regular])}
+\ltindex{comment=comment (\faComment[regular])}
+\ltindex{comments with dollar=comments with dollar (\faCommentsDollar)}
+\ltindex{comments=comments (\faComments)}
+\ltindex{comments=comments (\faComments[regular])}
+\ltindex{compress=compress (\faCompressArrows*)}
+\ltindex{compress=compress (\faCompress)}
+\ltindex{compress=compress (\faCompress*)}
+\ltindex{copy=copy (\faCopy)}
+\ltindex{copy=copy (\faCopy[regular])}
+\ltindex{crop=crop (\faCrop)}
+\ltindex{crop=crop (\faCrop*)}
+\ltindex{crosshairs=crosshairs (\faCrosshairs)}
+\ltindex{cut=cut (\faCut)}
+\ltindex{database=database (\faDatabase)}
+\ltindex{desktop=desktop (\faDesktop)}
+\ltindex{donate=donate (\faDonate)}
+\ltindex{download=download (\faDownload)}
+\ltindex{polygon=polygon (\faDrawPolygon)}
+\ltindex{edit=edit (\faEdit)}
+\ltindex{edit=edit (\faEdit[regular])}
+\ltindex{open envelope=open envelope (\faEnvelopeOpenText)}
+\ltindex{open envelope=open envelope (\faEnvelopeOpen)}
+\ltindex{open envelope=open envelope (\faEnvelopeOpen[regular])}
+\ltindex{envelope=envelope (\faEnvelopeSquare)}
+\ltindex{envelope=envelope (\faEnvelope)}
+\ltindex{envelope=envelope (\faEnvelope[regular])}
+\ltindex{eraser=eraser (\faEraser)}
+\ltindex{Ethernet=Ethernet (\faEthernet)}
+\ltindex{exchange=exchange (\faExchange*)}
+\ltindex{warning=warning (\faExclamationCircle)}
+\ltindex{warning=warning (\faExclamationTriangle)}
+\ltindex{expand=expand (\faExpandArrows*)}
+\ltindex{expand=expand (\faExpand)}
+\ltindex{expand=expand (\faExpand*)}
+\ltindex{external link=external link (\faExternalLinkSquare*)}
+\ltindex{external link=external link (\faExternalLink*)}
+\ltindex{hide=hide (\faEyeSlash)}
+\ltindex{hide=hide (\faEyeSlash[regular])}
+\ltindex{eye=eye (\faEye)}
+\ltindex{eye=eye (\faEye[regular])}
+\ltindex{show=show (\faEye)}
+\ltindex{show=show (\faEye[regular])}
+\ltindex{fill=fill (\faFillDrip)}
+\ltindex{fill=fill (\faFill)}
+\ltindex{film=film (\faFilm)}
+\ltindex{filter=filter (\faFilter)}
+\ltindex{fingerprint=fingerprint (\faFingerprint)}
+\ltindex{fire=fire (\faFire*)}
+\ltindex{font=font (\faFont)}
+\ltindex{grip horizontal=grip horizontal (\faGripHorizontal)}
+\ltindex{grip lines vertical=grip lines vertical (\faGripLinesVertical)}
+\ltindex{grip lines=grip lines (\faGripLines)}
+\ltindex{grip vertical=grip vertical (\faGripVertical)}
+\ltindex{hashtag=hashtag (\faHashtag)}
+\ltindex{heading=heading (\faHeading)}
+\ltindex{history=history (\faHistory)}
+\ltindex{icons=icons (\faIcons)}
+\ltindex{I cursor=I cursor (\faICursor)}
+\ltindex{image=image (\faImage)}
+\ltindex{image=image (\faImage[regular])}
+\ltindex{images=images (\faImages)}
+\ltindex{images=images (\faImages[regular])}
+\ltindex{inbox=inbox (\faInbox)}
+\ltindex{indent=indent (\faIndent)}
+\ltindex{info circle=info circle (\faInfoCircle)}
+\ltindex{information=information (\faInfo)}
+\ltindex{italics=italics (\faItalic)}
+\ltindex{language=language (\faLanguage)}
+\ltindex{code=code (\faLaptopCode)}
+\ltindex{layer group=layer group (\faLayerGroup)}
+\ltindex{level down=level down (\faLevelDown*)}
+\ltindex{level up=level up (\faLevelUp*)}
+\ltindex{link=link (\faLink)}
+\ltindex{ordered list=ordered list (\faListOl)}
+\ltindex{unordered list=unordered list (\faListUl)}
+\ltindex{list=list (\faList)}
+\ltindex{list=list (\faList*)}
+\ltindex{list=list (\faList*[regular])}
+\ltindex{location arrow=location arrow (\faLocationArrow)}
+\ltindex{bulk mail=bulk mail (\faMailBulk)}
+\ltindex{map, marked=map, marked (\faMapMarked)}
+\ltindex{map, marked=map, marked (\faMapMarked*)}
+\ltindex{map marker=map marker (\faMapMarker)}
+\ltindex{map marker=map marker (\faMapMarker*)}
+\ltindex{map pin=map pin (\faMapPin)}
+\ltindex{microphone off=microphone off (\faMicrophoneAltSlash)}
+\ltindex{microphone off=microphone off (\faMicrophoneSlash)}
+\ltindex{minus, circled=minus, circled (\faMinusCircle)}
+\ltindex{minus, squared=minus, squared (\faMinusSquare)}
+\ltindex{minus, squared=minus, squared (\faMinusSquare[regular])}
+\ltindex{mouse pointer=mouse pointer (\faMousePointer)}
+\ltindex{music=music (\faMusic)}
+\ltindex{network, wired=network, wired (\faNetworkWired)}
+\ltindex{group objects=group objects (\faObjectGroup)}
+\ltindex{group objects=group objects (\faObjectGroup[regular])}
+\ltindex{ungroup objects=ungroup objects (\faObjectUngroup)}
+\ltindex{ungroup objects=ungroup objects (\faObjectUngroup[regular])}
+\ltindex{outdent=outdent (\faOutdent)}
+\ltindex{paste=paste (\faPaste)}
+\ltindex{pause=pause (\faPauseCircle)}
+\ltindex{pause=pause (\faPauseCircle[regular])}
+\ltindex{pause=pause (\faPause)}
+\ltindex{photo and video=photo and video (\faPhotoVideo)}
+\ltindex{plus, circled=plus, circled (\faPlusCircle)}
+\ltindex{plus, squared=plus, squared (\faPlusSquare)}
+\ltindex{plus, squared=plus, squared (\faPlusSquare[regular])}
+\ltindex{podcast=podcast (\faPodcast)}
+\ltindex{poll=poll (\faPollH)}
+\ltindex{poll=poll (\faPoll)}
+\ltindex{portrait=portrait (\faPortrait)}
+\ltindex{power off=power off (\faPowerOff)}
+\ltindex{print=print (\faPrint)}
+\ltindex{project diagram=project diagram (\faProjectDiagram)}
+\ltindex{QR code=QR code (\faQrcode)}
+\ltindex{circled question mark=circled question mark (\faQuestionCircle)}
+\ltindex{circled question mark=circled question mark (\faQuestionCircle[regular])}
+\ltindex{random=random (\faRandom)}
+\ltindex{redo=redo (\faRedo)}
+\ltindex{redo=redo (\faRedo*)}
+\ltindex{remove formatting=remove formatting (\faRemoveFormat)}
+\ltindex{reply all=reply all (\faReplyAll)}
+\ltindex{reply=reply (\faReply)}
+\ltindex{retweet=retweet (\faRetweet)}
+\ltindex{route=route (\faRoute)}
+\ltindex{RSS=RSS (\faRssSquare)}
+\ltindex{RSS=RSS (\faRss)}
+\ltindex{save=save (\faSave)}
+\ltindex{save=save (\faSave[regular])}
+\ltindex{search with dollar sign=search with dollar sign (\faSearchDollar)}
+\ltindex{search with location=search with location (\faSearchLocation)}
+\ltindex{search with minus sign=search with minus sign (\faSearchMinus)}
+\ltindex{search with plus sign=search with plus sign (\faSearchPlus)}
+\ltindex{search=search (\faSearch)}
+\ltindex{server=server (\faServer)}
+\ltindex{shapes=shapes (\faShapes)}
+\ltindex{share=share (\faShareAltSquare)}
+\ltindex{share=share (\faShareSquare)}
+\ltindex{share=share (\faShareSquare[regular])}
+\ltindex{share=share (\faShare)}
+\ltindex{share=share (\faShare*)}
+\ltindex{sign in=sign in (\faSignIn*)}
+\ltindex{sign out=sign out (\faSignOut*)}
+\ltindex{signal=signal (\faSignal)}
+\ltindex{signature=signature (\faSignature)}
+\ltindex{sitemap=sitemap (\faSitemap)}
+\ltindex{sliders=sliders (\faSlidersH)}
+\ltindex{SMS=SMS (\faSms)}
+\ltindex{sort alpha down=sort alpha down (\faSortAlphaDown)}
+\ltindex{sort alpha down=sort alpha down (\faSortAlphaDown*)}
+\ltindex{sort alpha up=sort alpha up (\faSortAlphaUp)}
+\ltindex{sort alpha up=sort alpha up (\faSortAlphaUp*)}
+\ltindex{sort amount down=sort amount down (\faSortAmountDown)}
+\ltindex{sort amount down=sort amount down (\faSortAmountDown*)}
+\ltindex{sort amount up=sort amount up (\faSortAmountUp)}
+\ltindex{sort amount up=sort amount up (\faSortAmountUp*)}
+\ltindex{sort down=sort down (\faSortDown)}
+\ltindex{sort numeric down=sort numeric down (\faSortNumericDown)}
+\ltindex{sort numeric down=sort numeric down (\faSortNumericDown*)}
+\ltindex{sort numeric up=sort numeric up (\faSortNumericUp)}
+\ltindex{sort numeric up=sort numeric up (\faSortNumericUp*)}
+\ltindex{sort up=sort up (\faSortUp)}
+\ltindex{sort=sort (\faSort)}
+\ltindex{spell check=spell check (\faSpellCheck)}
+\ltindex{spinner=spinner (\faSpinner)}
+\ltindex{square root=square root (\faSquareRoot*)}
+\ltindex{store, slashed=store, slashed (\faStoreAltSlash)}
+\ltindex{store, slashed=store, slashed (\faStoreSlash)}
+\ltindex{stream=stream (\faStream)}
+\ltindex{street view=street view (\faStreetView)}
+\ltindex{strikethrough=strikethrough (\faStrikethrough)}
+\ltindex{subscript=subscript (\faSubscript)}
+\ltindex{superscript=superscript (\faSuperscript)}
+\ltindex{sync=sync (\faSync)}
+\ltindex{sync=sync (\faSync*)}
+\ltindex{table=table (\faTable)}
+\ltindex{tasks=tasks (\faTasks)}
+\ltindex{terminal=terminal (\faTerminal)}
+\ltindex{text height=text height (\faTextHeight)}
+\ltindex{text width=text width (\faTextWidth)}
+\ltindex{grid, large=grid, large (\faThLarge)}
+\ltindex{list=list (\faThList)}
+\ltindex{grid, small=grid, small (\faTh)}
+\ltindex{tint, slashed=tint, slashed (\faTintSlash)}
+\ltindex{tint=tint (\faTint)}
+\ltindex{toggle off=toggle off (\faToggleOff)}
+\ltindex{toggle on=toggle on (\faToggleOn)}
+\ltindex{trash, restore from=trash, restore from (\faTrashRestore)}
+\ltindex{trash, restore from=trash, restore from (\faTrashRestore*)}
+\ltindex{underline=underline (\faUnderline)}
+\ltindex{undo=undo (\faUndo)}
+\ltindex{undo=undo (\faUndo*)}
+\ltindex{universal access=universal access (\faUniversalAccess)}
+\ltindex{accessibility=accessibility (\faUniversalAccess)}
+\ltindex{unlink=unlink (\faUnlink)}
+\ltindex{upload=upload (\faUpload)}
+\ltindex{vector=vector (\faVectorSquare)}
+\ltindex{video, slashed=video, slashed (\faVideoSlash)}
+\ltindex{video=video (\faVideo)}
+\ltindex{voicemail=voicemail (\faVoicemail)}
+\ltindex{window close=window close (\faWindowClose)}
+\ltindex{window close=window close (\faWindowClose[regular])}
+\ltindex{window maximize=window maximize (\faWindowMaximize)}
+\ltindex{window maximize=window maximize (\faWindowMaximize[regular])}
+\ltindex{window minimize=window minimize (\faWindowMinimize)}
+\ltindex{window minimize=window minimize (\faWindowMinimize[regular])}
+\ltindex{window restore=window restore (\faWindowRestore)}
+\ltindex{window restore=window restore (\faWindowRestore[regular])}
+\label{fontawesome5-ui}
+\begin{longtable}{*2{ll}}
+\multicolumn{3}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{3}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\K\faAd                    & \K\faListUl              \\
+\K\faAddressBook           & \K\faLocationArrow       \\
+\KfaReg\faAddressBook      & \K\faMailBulk            \\
+\K\faAddressCard           & \K{\faMapMarked*}        \\
+\KfaReg\faAddressCard      & \K\faMapMarked           \\
+\K\faAdjust                & \K{\faMapMarker*}        \\
+\K\faAlignCenter           & \K\faMapMarker           \\
+\K\faAlignJustify          & \K\faMapPin              \\
+\K\faAlignLeft             & \K\faMicrophoneAltSlash  \\
+\K\faAlignRight            & \K\faMicrophoneSlash     \\
+\K{\faArrows*}             & \K\faMinusCircle         \\
+\K\faAudioDescription      & \K\faMinusSquare         \\
+\K\faBackspace             & \KfaReg\faMinusSquare    \\
+\K\faBars                  & \K\faMousePointer        \\
+\K\faBatteryEmpty          & \K\faMusic               \\
+\K\faBatteryFull           & \K\faNetworkWired        \\
+\K\faBatteryHalf           & \K\faObjectGroup         \\
+\K\faBatteryQuarter        & \KfaReg\faObjectGroup    \\
+\K\faBatteryThreeQuarters  & \K\faObjectUngroup       \\
+\K\faBellSlash             & \KfaReg\faObjectUngroup  \\
+\KfaReg\faBellSlash        & \K\faOutdent             \\
+\K\faBlog                  & \K\faPaste               \\
+\K\faBold                  & \K\faPause               \\
+\K\faBookmark              & \K\faPauseCircle         \\
+\KfaReg\faBookmark         & \KfaReg\faPauseCircle    \\
+\K\faBorderAll             & \K\faPhotoVideo          \\
+\K\faBorderNone            & \K\faPlusCircle          \\
+\K\faBorderStyle           & \K\faPlusSquare          \\
+\K\faCartArrowDown         & \KfaReg\faPlusSquare     \\
+\K\faCartPlus              & \K\faPodcast             \\
+\K\faChartArea             & \K\faPoll                \\
+\K\faChartBar              & \K\faPollH               \\
+\KfaReg\faChartBar         & \K\faPortrait            \\
+\K\faChartLine             & \K\faPowerOff            \\
+\K\faChartPie              & \K\faPrint               \\
+\K\faClipboard             & \K\faProjectDiagram      \\
+\KfaReg\faClipboard        & \K\faQrcode              \\
+\K\faClipboardCheck        & \K\faQuestionCircle      \\
+\K\faClone                 & \KfaReg\faQuestionCircle \\
+\KfaReg\faClone            & \K\faRandom              \\
+\K\faClosedCaptioning      & \K{\faRedo*}             \\
+\KfaReg\faClosedCaptioning & \K\faRedo                \\
+\K{\faCloudDownload*}      & \K\faRemoveFormat        \\
+\K{\faCloudUpload*}        & \K\faReply               \\
+\K\faCode                  & \K\faReplyAll            \\
+\K\faCodeBranch            & \K\faRetweet             \\
+\K\faCog                   & \K\faRoute               \\
+\K\faColumns               & \K\faRss                 \\
+\KfaReg{\faComment*}       & \K\faRssSquare           \\
+\K{\faComment*}            & \K\faSave                \\
+\K\faComment               & \KfaReg\faSave           \\
+\KfaReg\faComment          & \K\faSearch              \\
+\K\faCommentDollar         & \K\faSearchDollar        \\
+\K\faCommentDots           & \K\faSearchLocation      \\
+\KfaReg\faCommentDots      & \K\faSearchMinus         \\
+\K\faComments              & \K\faSearchPlus          \\
+\KfaReg\faComments         & \K\faServer              \\
+\K\faCommentsDollar        & \K\faShapes              \\
+\K\faCommentSlash          & \K{\faShare*}            \\
+\K{\faCompress*}           & \K\faShare               \\
+\K\faCompress              & \K\faShareAltSquare      \\
+\K{\faCompressArrows*}     & \K\faShareSquare         \\
+\K\faCopy                  & \KfaReg\faShareSquare    \\
+\KfaReg\faCopy             & \K\faSignal              \\
+\K{\faCrop*}               & \K\faSignature           \\
+\K\faCrop                  & \K{\faSignIn*}           \\
+\K\faCrosshairs            & \K{\faSignOut*}          \\
+\K\faCut                   & \K\faSitemap             \\
+\K\faDatabase              & \K\faSlidersH            \\
+\K\faDesktop               & \K\faSms                 \\
+\K\faDonate                & \K\faSort                \\
+\K\faDownload              & \K{\faSortAlphaDown*}    \\
+\K\faDrawPolygon           & \K\faSortAlphaDown       \\
+\K\faEdit                  & \K{\faSortAlphaUp*}      \\
+\KfaReg\faEdit             & \K\faSortAlphaUp         \\
+\K\faEnvelope              & \K{\faSortAmountDown*}   \\
+\KfaReg\faEnvelope         & \K\faSortAmountDown      \\
+\K\faEnvelopeOpen          & \K{\faSortAmountUp*}     \\
+\KfaReg\faEnvelopeOpen     & \K\faSortAmountUp        \\
+\K\faEnvelopeOpenText      & \K\faSortDown            \\
+\K\faEnvelopeSquare        & \K{\faSortNumericDown*}  \\
+\K\faEraser                & \K\faSortNumericDown     \\
+\K\faEthernet              & \K{\faSortNumericUp*}    \\
+\K{\faExchange*}           & \K\faSortNumericUp       \\
+\K\faExclamationCircle     & \K\faSortUp              \\
+\K\faExclamationTriangle   & \K\faSpellCheck          \\
+\K{\faExpand*}             & \K\faSpinner             \\
+\K\faExpand                & \K{\faSquareRoot*}       \\
+\K{\faExpandArrows*}       & \K\faStoreAltSlash       \\
+\K{\faExternalLink*}       & \K\faStoreSlash          \\
+\K{\faExternalLinkSquare*} & \K\faStream              \\
+\K\faEye                   & \K\faStreetView          \\
+\KfaReg\faEye              & \K\faStrikethrough       \\
+\K\faEyeSlash              & \K\faSubscript           \\
+\KfaReg\faEyeSlash         & \K\faSuperscript         \\
+\K\faFill                  & \K{\faSync*}             \\
+\K\faFillDrip              & \K\faSync                \\
+\K\faFilm                  & \K\faTable               \\
+\K\faFilter                & \K\faTasks               \\
+\K\faFingerprint           & \K\faTerminal            \\
+\K{\faFire*}               & \K\faTextHeight          \\
+\K\faFont                  & \K\faTextWidth           \\
+\K\faGripHorizontal        & \K\faTh                  \\
+\K\faGripLines             & \K\faThLarge             \\
+\K\faGripLinesVertical     & \K\faThList              \\
+\K\faGripVertical          & \K\faTint                \\
+\K\faHashtag               & \K\faTintSlash           \\
+\K\faHeading               & \K\faToggleOff           \\
+\K\faHistory               & \K\faToggleOn            \\
+\K\faIcons                 & \K{\faTrashRestore*}     \\
+\K\faICursor               & \K\faTrashRestore        \\
+\K\faImage                 & \K\faUnderline           \\
+\KfaReg\faImage            & \K{\faUndo*}             \\
+\K\faImages                & \K\faUndo                \\
+\KfaReg\faImages           & \K\faUniversalAccess     \\
+\K\faInbox                 & \K\faUnlink              \\
+\K\faIndent                & \K\faUpload              \\
+\K\faInfo                  & \K\faVectorSquare        \\
+\K\faInfoCircle            & \K\faVideo               \\
+\K\faItalic                & \K\faVideoSlash          \\
+\K\faLanguage              & \K\faVoicemail           \\
+\K\faLaptopCode            & \K\faWindowClose         \\
+\K\faLayerGroup            & \KfaReg\faWindowClose    \\
+\K{\faLevelDown*}          & \K\faWindowMaximize      \\
+\K{\faLevelUp*}            & \KfaReg\faWindowMaximize \\
+\K\faLink                  & \K\faWindowMinimize      \\
+\KfaReg{\faList*}          & \KfaReg\faWindowMinimize \\
+\K{\faList*}               & \K\faWindowRestore       \\
+\K\faList                  & \KfaReg\faWindowRestore  \\
+\K\faListOl                &                          \\
+\end{longtable}
+\end{longsymtable}
+
+
 \begin{symtable}[WASY]{\WASY\ Biological Symbols}
-\index{male}
-\index{female}
+\index{male sign}
+\index{female sign}
 \label{wasy-bio}
 \begin{tabular}{*2{ll}}
 \K\female & \K\male \\
@@ -13951,8 +16237,8 @@
 
 
 \begin{symtable}[STIX]{\STIX\ Biological Symbols}
-\index{male}
-\index{female}
+\index{male sign}
+\index{female sign}
 \label{stix-bio}
 \begin{tabular}{*2{ll}}
 \K[\STIXfemale]\female               & \K[\STIXmale]\male     \\
@@ -13963,8 +16249,8 @@
 
 \begin{symtable}[MARV]{\MARV\ Biological Symbols}
 \idxboth{biological}{symbols}
-\index{male}
-\index{female}
+\index{male sign}
+\index{female sign}
 \label{marv-bio}
 \begin{tabular}{*3{ll}ll}
 \K\FEMALE       & \K\FemaleMale    & \K\Male     & \K\Neutral \\
@@ -13976,8 +16262,8 @@
 
 \begin{symtable}[UTFSYM]{\UTFSYM\ Biological Symbols}
 \idxboth{biological}{symbols}
-\index{male}
-\index{female}
+\index{male sign}
+\index{female sign}
 \label{utfsym-bio}
 \begin{tabular}{*4{ll}}
 \Tutf{26A2} & \Tutf{26A4} & \Tutf{26A6} & \Tutf{26A8} \\
@@ -13991,32 +16277,47 @@
 
 \begin{symtable}[FNTAWE]{\FNTAWE\ Biological Symbols}
 \idxboth{biological}{symbols}
-\index{male}
-\index{female}
-\label{fontawesome-bio}
+\index{male sign}
+\index{female sign}
+\index{genderless=genderless (\faGenderless)}
+\index{male/male sign=male/male sign (\faMarsDouble)}
+\index{male with stroke=male with stroke (\faMarsStrokeH)}
+\index{male with stroke=male with stroke (\faMarsStrokeV)}
+\index{male with stroke=male with stroke (\faMarsStroke)}
+\index{male=make (\faMars)}
+\index{neuter=neuter (\faNeuter)}
+\index{transgender=transgender (\faTransgender*)}
+\index{transgender=transgender (\faTransgender)}
+\index{female/female sign=female/female sign (\faVenusDouble)}
+\index{female/male sign=female/male sign (\faVenusMars)}
+\index{female=female (\faVenus)}
+\label{fontawesome5-bio}
 \begin{tabular}{*3{ll}}
-\K\faGenderless & \K\faMarsStrokeH & \K\faTransgenderAlt \\
-\K\faMars       & \K\faMarsStrokeV & \K\faVenus          \\
-\K\faMarsDouble & \K\faNeuter      & \K\faVenusDouble    \\
-\K\faMarsStroke & \K\faTransgender & \K\faVenusMars      \\
+\K\faGenderless & \K\faMarsStrokeH                     & \K\faTransgender \\
+\K\faMars       & \K\faMarsStrokeV                     & \K\faVenus       \\
+\K\faMarsDouble & \K\faNeuter                          & \K\faVenusDouble \\
+\K\faMarsStroke & \K{\faTransgender*} & \K\faVenusMars   \\
 \end{tabular}
-
-\bigskip
-
-\begin{tablenote}
-  \FNTAWE\ defines \cmdI{\faIntersex} as a synonym for
-  \cmdI{\faTransgender}
-\end{tablenote}
 \end{symtable}
 
 
 \begin{symtable}[MARV]{\MARV\ Safety-related Symbols}
 \idxboth{safety-related}{symbols}
+\index{biohazard=biohazard (\Biohazard)}
+\index{CE mark=CE mark (\CEsign)}
+\index{explosion proof=explosion proof (\Explosionsafe)}
+\index{radiation=radiation (\Radioactivity)}
+\index{exchange eligible=exchange eligible (\BSEfree)}
+\index{electrostatic discharge=electrostatic discharge (\Estatically)}
+\index{laser beam=laser beam (\Laserbeam)}
+\index{stop sign=stop sign (\Stopsign)}
 \label{marv-safety}
+\begin{indexingoff}
 \begin{tabular}{*3{ll}ll}
 \K\Biohazard     & \K\CEsign        & \K\Explosionsafe & \K\Radioactivity \\
 \K\BSEfree       & \K\Estatically   & \K\Laserbeam     & \K\Stopsign      \\
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
@@ -14068,9 +16369,16 @@
 \begin{longsymtable}[SVR]{\SVR\ Physics Ideograms}
 \ltindex{particle-physics symbols}
 \ltindex{symbols>particle physics}
+\ltindex{subatomic particles}
+\ltindex{antiquarks}
+\ltindex{bosons}
 \ltindex{fermions}
-\ltindex{subatomic particles}
+\ltindex{gluons}
+\ltindex{kaons}
+\ltindex{mesons}
 \ltindex{photons}
+\ltindex{pions}
+\ltindex{quarks}
 \label{svrsymbols}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -14125,10 +16433,10 @@
 \idxbothend{technological}{symbols}
 
 
-\section{Dingbats}
+\chapter{Dingbats}
 \label{dingbat-symbols}
 \idxbothbegin{dingbat}{symbols}
-\tablesubsections
+\tablesections
 
 Dingbats are symbols such as stars, arrows, and geometric shapes.
 They are commonly used as bullets in itemized lists or, more
@@ -14148,6 +16456,7 @@
 
 
 \begin{symtable}[DING]{\DING\ Arrows}
+\subindex{arrows}{dingbat}
 \label{bbding-arrows}
 \begin{tabular}{*3{ll}}
 \K\ArrowBoldDownRight    & \K\ArrowBoldRightShort  & \K\ArrowBoldUpRight \\
@@ -14159,6 +16468,7 @@
 \begin{symtable}[PI]{\PI\ Arrows}
 \index{arrows}
 \idxboth{fletched}{arrows}
+\subindex{arrows}{dingbat}
 \label{pi-arrows}
 \begin{tabular}{*5{ll}}
 \Tding{212} & \Tding{221} & \Tding{230} & \Tding{239} & \Tding{249} \\
@@ -14175,7 +16485,7 @@
 
 
 \begin{symtable}[ADFSYM]{\ADFSYM\ Arrows}
-\index{arrows}
+\subindex{arrows}{dingbat}
 \label{adf-arrows}
 \begin{tabular}{*4{ll}}
 \Tarr{e}{1}  & \Tarr{ne}{1} & \Tarr{s}{1}  & \Tarr{sw}{1} \\
@@ -14215,7 +16525,8 @@
 
 
 \begin{symtable}[ADFORN]{\ADFORN\ Arrows}
-\index{arrows}
+\subindex{arrows}{dingbat}
+\index{arrowheads}
 \label{adforn-arrows}
 \begin{tabular}{*2{ll}}
 \K\adfhalfleftarrow      & \K\adfhalfrightarrowhead \\
@@ -14226,7 +16537,7 @@
 
 
 \begin{symtable}[AREV]{\AREV\ Arrows}
-\index{arrows}
+\subindex{arrows}{dingbat}
 \label{arev-arrows}
 \begin{tabular}{ll}
 \K[\AREVarrowbullet]\arrowbullet \\
@@ -14235,7 +16546,7 @@
 
 
 \begin{symtable}[UTFSYM]{\UTFSYM\ Arrows}
-\index{arrows}
+\subindex{arrows}{dingbat}
 \label{utfsym-arrows}
 \begin{tabular}{*4{ll}}
 \Tutf{2794} & \Tutf{27A1} & \Tutf{27AB} & \Tutf{27B6} \\
@@ -14255,36 +16566,68 @@
 \end{symtable}
 
 
-\begin{symtable}[FNTAWE]{\FNTAWE\ Arrows}
-\index{arrows}
-\label{fontawesome-arrows}
+\begin{symtable}[ASAP]{\ASAP\ Arrows}
+\subindex{arrows}{dingbat}
+\label{asapsym-arrows}
+\begin{tabular}{*2{ll}}
+\K\asapArrowCircleFillDown      & \K\asapArrowCircleOpenRight   \\
+\K\asapArrowCircleFillDownLeft  & \K\asapArrowCircleOpenUp      \\
+\K\asapArrowCircleFillDownRight & \K\asapArrowCircleOpenUpLeft  \\
+\K\asapArrowCircleFillLeft      & \K\asapArrowCircleOpenUpRight \\
+\K\asapArrowCircleFillRight     & \K\asapArrowDown              \\
+\K\asapArrowCircleFillUp        & \K\asapArrowDownLeft          \\
+\K\asapArrowCircleFillUpLeft    & \K\asapArrowDownRight         \\
+\K\asapArrowCircleFillUpRight   & \K\asapArrowLeft              \\
+\K\asapArrowCircleOpenDown      & \K\asapArrowRight             \\
+\K\asapArrowCircleOpenDownLeft  & \K\asapArrowUp                \\
+\K\asapArrowCircleOpenDownRight & \K\asapArrowUpLeft            \\
+\K\asapArrowCircleOpenLeft      & \K\asapArrowUpRight           \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\ASAP}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[TYPICOS]{\TYPICOS\ Arrows}
+\subindex{arrows}{dingbat}
+\label{typicons-arrows}
 \begin{tabular}{*3{ll}}
-\K\faArrowCircleDown   & \K\faArrowDown  & \K\faLongArrowDown  \\
-\K\faArrowCircleLeft   & \K\faArrowLeft  & \K\faLongArrowLeft  \\
-\K\faArrowCircleODown  & \K\faArrowRight & \K\faLongArrowRight \\
-\K\faArrowCircleOLeft  & \K\faArrows     & \K\faLongArrowUp    \\
-\K\faArrowCircleORight & \K\faArrowsAlt  & \K\faRepeat         \\
-\K\faArrowCircleOUp    & \K\faArrowsH    & \K\faUndo           \\
-\K\faArrowCircleRight  & \K\faArrowsV    &                     \\
-\K\faArrowCircleUp     & \K\faArrowUp    &                     \\
+\K\tiArrowBack           & \K\tiArrowMaximise        & \K\tiArrowSortedDown      \\
+\K\tiArrowBackOutline    & \K\tiArrowMaximiseOutline & \K\tiArrowSortedUp        \\
+\K\tiArrowDown           & \K\tiArrowMinimise        & \K\tiArrowSync            \\
+\K\tiArrowDownOutline    & \K\tiArrowMinimiseOutline & \K\tiArrowSyncOutline     \\
+\K\tiArrowDownThick      & \K\tiArrowMove            & \K\tiArrowUnsorted        \\
+\K\tiArrowForward        & \K\tiArrowMoveOutline     & \K\tiArrowUp              \\
+\K\tiArrowForwardOutline & \K\tiArrowRepeat          & \K\tiArrowUpOutline       \\
+\K\tiArrowLeft           & \K\tiArrowRepeatOutline   & \K\tiArrowUpThick         \\
+\K\tiArrowLeftOutline    & \K\tiArrowRight           & \K\tiLocationArrow        \\
+\K\tiArrowLeftThick      & \K\tiArrowRightOutline    & \K\tiLocationArrowOutline \\
+\K\tiArrowLoop           & \K\tiArrowRightThick      &                           \\
+\K\tiArrowLoopOutline    & \K\tiArrowShuffle         &                           \\
 \end{tabular}
 
 \bigskip
-
 \begin{tablenote}
-  \FNTAWE\ defines \cmdI{\faRotateLeft} as a synonym for \cmdI{\faUndo}
-  and \cmdI{\faRotateRight} as a synonym for \cmdI{\faRepeat}.
+  \luaxemessage{\TYPICOS}.
 \end{tablenote}
 \end{symtable}
 
 
-\begin{symtable}[FNTAWE]{\FNTAWE\ Chevrons}
-\index{chevrons}
-\label{fontawesome-chevrons}
+\begin{symtable}[FNTAWE]{\FNTAWE\ Arrows}
+\subindex{arrows}{dingbat}
+\label{fontawesome5-arrows}
 \begin{tabular}{*3{ll}}
-\K\faChevronCircleDown  & \K\faChevronCircleUp & \K\faChevronRight \\
-\K\faChevronCircleLeft  & \K\faChevronDown     & \K\faChevronUp    \\
-\K\faChevronCircleRight & \K\faChevronLeft     &                   \\
+\KfaReg\faArrowAltCircleDown  & \K\faArrowCircleDown  & \K\faArrowsAltV        \\
+\K\faArrowAltCircleDown       & \K\faArrowCircleLeft  & \K\faArrowUp           \\
+\KfaReg\faArrowAltCircleLeft  & \K\faArrowCircleRight & \K\faLongArrowAltDown  \\
+\K\faArrowAltCircleLeft       & \K\faArrowCircleUp    & \K\faLongArrowAltLeft  \\
+\K\faArrowAltCircleRight      & \K\faArrowDown        & \K\faLongArrowAltRight \\
+\KfaReg\faArrowAltCircleRight & \K\faArrowLeft        & \K\faLongArrowAltUp    \\
+\KfaReg\faArrowAltCircleUp    & \K\faArrowRight       &                        \\
+\K\faArrowAltCircleUp         & \K\faArrowsAltH       &                        \\
 \end{tabular}
 \end{symtable}
 
@@ -14351,11 +16694,30 @@
 \end{symtable}
 
 
-\begin{symtable}[FNTAWE]{\FNTAWE\ Pencils}
+\begin{symtable}[TYPICOS]{\TYPICOS\ Pencils and Pens}
 \index{pencils}
-\label{fontawesome-pencils}
+\index{pens}
+\label{typicons-pencils}
+\begin{tabular}{ll@{\qquad}ll}
+\K\tiPen & \K\tiPencil \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\TYPICOS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[FNTAWE]{\FNTAWE\ Pencils, Pens, and Nibs}
+\index{pencils}
+\index{pens}
+\index{nibs}
+\label{fontawesome5-pencils}
 \begin{tabular}{*3{ll}}
-\K\faPencil & \K\faPencilSquare & \K\faPencilSquareO \\
+\K\faHighlighter & \K\faPen       & \K\faPenNib    \\
+\K\faMarker      & \K{\faPencil*} & \K\faPenSquare \\
+\K{\faPen*}      & \K\faPenFancy  &                \\
 \end{tabular}
 \end{symtable}
 
@@ -14470,33 +16832,61 @@
 \end{symtable}
 
 
-\begin{symtable}[FNTAWE]{\FNTAWE\ Fists}
+\begin{symtable}[TYPICOS]{\TYPICOS\ Fists}
 \index{fists}
-\index{rock/paper/scissors}
-\index{roshambo}
-\label{fontawesome-hands}
-\begin{tabular}{*3{ll}}
-\K\faHandLizardO & \K\faHandPaperO    & \K\faHandSpockO  \\
-\K\faHandODown   & \K\faHandPeaceO    & \K\faThumbsDown  \\
-\K\faHandOLeft   & \K\faHandPointerO  & \K\faThumbsODown \\
-\K\faHandORight  & \K\faHandRockO     & \K\faThumbsOUp   \\
-\K\faHandOUp     & \K\faHandScissorsO & \K\faThumbsUp    \\
+\index{thumbs down=thumbs down (\tiThumbsDown)}
+\index{thumbs OK=thumbs OK (\tiThumbsOk)}
+\index{OK sign=OK sign (\tiThumbsOk)}
+\index{thumbs up=thumbs up (\tiThumbsUp)}
+\label{typicons-hands}
+\begin{tabular}{ll*2{@{\qquad}ll}}
+\K\tiThumbsDown & \K\tiThumbsOk & \K\tiThumbsUp \\
 \end{tabular}
 
 \bigskip
-
 \begin{tablenote}
-  \FNTAWE\ defines \cmdI{\faHandGrabO} as a synonym for
-  \cmdI{\faHandRockO} and \cmdI{\faHandStopO} as a synonym for
-  \cmdI{\faHandPaperO}.
+  \luaxemessage{\TYPICOS}.
 \end{tablenote}
 \end{symtable}
 
 
+\begin{symtable}[FNTAWE]{\FNTAWE\ Fists}
+\index{fists}
+\index{rock, paper, scissors}
+\index{roshambo}
+\idxboth{medical}{symbols}
+\label{fontawesome5-hands}
+\begin{tabular}{*2{ll}}
+\K\faFistRaised          & \K\faHandPointUp       \\
+\K\faHandHolding         & \KfaReg\faHandPointUp  \\
+\K\faHandHoldingHeart    & \K\faHandRock          \\
+\K\faHandHoldingMedical  & \KfaReg\faHandRock     \\
+\K\faHandHoldingUsd      & \K\faHands             \\
+\K\faHandHoldingWater    & \K\faHandScissors      \\
+\K\faHandLizard          & \KfaReg\faHandScissors \\
+\KfaReg\faHandLizard     & \K\faHandshake         \\
+\K\faHandMiddleFinger    & \KfaReg\faHandshake    \\
+\K\faHandPaper           & \K\faHandshakeAltSlash \\
+\KfaReg\faHandPaper      & \K\faHandshakeSlash    \\
+\K\faHandPeace           & \K\faHandsHelping      \\
+\KfaReg\faHandPeace      & \K\faHandSparkles      \\
+\K\faHandPointDown       & \K\faHandSpock         \\
+\KfaReg\faHandPointDown  & \KfaReg\faHandSpock    \\
+\K\faHandPointer         & \K\faHandsWash         \\
+\KfaReg\faHandPointer    & \K\faThumbsDown        \\
+\K\faHandPointLeft       & \KfaReg\faThumbsDown   \\
+\KfaReg\faHandPointLeft  & \K\faThumbsUp          \\
+\K\faHandPointRight      & \KfaReg\faThumbsUp     \\
+\KfaReg\faHandPointRight &                        \\
+\end{tabular}
+\end{symtable}
+
+
 \begin{symtable}[DING]{\DING\ Crosses and Plusses}
 \index{crosses}
 \index{plusses}
 \index{crucifixes}
+\idxboth{religious}{symbols}
 \label{crosses-plusses}
 \begin{tabular}{*3{ll}}
 \K[\dingCross]\Cross  & \K\CrossOpenShadow    & \K\PlusOutline        \\
@@ -14511,6 +16901,7 @@
 \index{crosses}
 \index{plusses}
 \index{crucifixes}
+\idxboth{religious}{symbols}
 \label{pi-crosses-plusses}
 \begin{tabular}{*4{ll}}
 \Tding{57} & \Tding{59} & \Tding{61} & \Tding{63} \\
@@ -14549,6 +16940,7 @@
 \begin{symtable}[AREV]{\AREV\ Crosses}
 \index{crosses}
 \index{crucifixes}
+\idxboth{religious}{symbols}
 \label{arev-crosses}
 \begin{tabular}{*2{ll}}
 \K[\AREVeastcross]\eastcross & \K[\AREVwestcross]\westcross \\
@@ -14632,25 +17024,45 @@
 \end{symtable}
 
 
-\begin{symtable}[FNTAWE]{\FNTAWE\ Xs and Check Marks}
+\begin{symtable}[TYPICOS]{\TYPICOS\ Xs and Check Marks}
 \index{check marks}
 \index{Xs}
-\label{fontawesome-check-marks}
+\index{delete=delete (\tiDeleteOutline)}
+\index{delete=delete (\tiDelete)}
+\index{input checked=input checked (\tiInputCheckedOutline)}
+\index{input checked=input checked (\tiInputChecked)}
+\index{tick mark=tick mark (\tiTickOutline)}
+\index{tick mark=tick mark (\tiTick)}
+\index{times=times (\tiTimesOutline)}
+\index{times=times (\tiTimes)}
+\label{typicons-check-marks}
 \begin{tabular}{*3{ll}}
-\K\faCheck        & \K\faCheckSquare  & \K\faTimesCircle  \\
-\K\faCheckCircle  & \K\faCheckSquareO & \K\faTimesCircleO \\
-\K\faCheckCircleO & \K\faTimes$^*$    &                   \\
+\K\tiDelete        & \K\tiInputCheckedOutline & \K\tiTimes        \\
+\K\tiDeleteOutline & \K\tiTick                & \K\tiTimesOutline \\
+\K\tiInputChecked  & \K\tiTickOutline         &                   \\
 \end{tabular}
 
 \bigskip
-
-\begin{tablenote}[*]
-  \FNTAWE\ defines both \cmdI{\faClose} and \cmdI{\faRemove} as
-  synonyms for \cmdI{\faTimes}.
+\begin{tablenote}
+  \luaxemessage{\TYPICOS}.
 \end{tablenote}
 \end{symtable}
 
 
+\begin{symtable}[FNTAWE]{\FNTAWE\ Xs and Check Marks}
+\index{check marks}
+\index{Xs}
+\label{fontawesome5-check-marks}
+\begin{tabular}{*2{ll}}
+\K\faCheck            & \KfaReg\faCheckSquare \\
+\K\faCheckCircle      & \K\faTimes            \\
+\KfaReg\faCheckCircle & \K\faTimesCircle      \\
+\K\faCheckDouble      & \KfaReg\faTimesCircle \\
+\K\faCheckSquare      &                       \\
+\end{tabular}
+\end{symtable}
+
+
 \begin{symtable}[PI]{\PI\ Circled Numerals}
 \idxboth{circled}{numerals}
 \label{circled-numerals}
@@ -14702,7 +17114,8 @@
 \begin{symtable}[WASY]{\WASY\ Stars}
 \index{stars}
 \index{Jewish star}
-\index{Star of David}
+\subindex{stars}{Jewish}
+\index{star of David}
 \label{wasy-stars}
 \begin{tabular}{*6l}
 \K\davidsstar & \K\hexstar & \K\varhexstar
@@ -14718,7 +17131,10 @@
 \index{sparkles}
 \index{snowflakes}
 \index{stars}
-\index{Jewish star}\index{Star of David}
+\index{Jewish star}
+\subindex{stars}{Jewish}
+\index{star of David}
+\index{sparkles}
 \label{star-like}
 \begin{tabular}{*3{ll}}
 \K\Asterisk                & \K\FiveFlowerPetal      & \K\JackStar                  \\
@@ -14786,10 +17202,11 @@
 \index{asterisks}
 \index{flowers}
 \index{Jewish star}
+\subindex{stars}{Jewish}
+\index{star of David}
 \index{ornaments}
 \index{snowflakes}
 \index{sparkles}
-\index{Star of David}
 \index{stars}
 \label{utfsym-star-like}
 \begin{tabular}{*4{ll}}
@@ -14827,22 +17244,36 @@
 \end{symtable}
 
 
-\begin{symtable}[FNTAWE]{\FNTAWE\ Stars}
+\begin{symtable}[TYPICOS]{\TYPICOS\ Stars}
 \index{stars}
-\label{fontawesome-stars}
-\begin{tabular}{*4{ll}}
-\K\faStar & \K\faStarHalf & \K\faStarHalfO & \K\faStarO \\
+\label{typicons-stars}
+\begin{tabular}{*3{ll}}
+\K\tiStar             & \K\tiStarFullOutline & \K\tiStarOutline \\
+\K\tiStarburst        & \K\tiStarHalf        &                  \\
+\K\tiStarburstOutline & \K\tiStarHalfOutline &                  \\
 \end{tabular}
 
 \bigskip
-
 \begin{tablenote}
-  \FNTAWE\ defines both \cmdI{\faStarHalfEmpty} and
-  \cmdI{\faStarHalfFull} as synonyms for \cmdI{\faStarHalfO}.
+  \luaxemessage{\TYPICOS}.
 \end{tablenote}
 \end{symtable}
 
 
+\begin{symtable}[FNTAWE]{\FNTAWE\ Stars}
+\index{stars}
+\index{star, half=star, half (\faStarHalf*)}
+\index{star, half=star, half (\faStarHalf)}
+\index{star of life=star of life (\faStarOfLife)}
+\index{star=star (\faStar)}
+\label{fontawesome5-stars}
+\begin{tabular}{*3{ll}}
+\K\faStar      & \K{\faStarHalf*} & \KfaReg\faStarHalf \\
+\KfaReg\faStar & \K\faStarHalf    & \K\faStarOfLife    \\
+\end{tabular}
+\end{symtable}
+
+
 \begin{symtable}[FOUR]{\FOUR\ Fleurons and Flowers}
 \index{flowers}
 \index{fleurons}
@@ -14850,6 +17281,7 @@
 \index{ornaments}
 \index{stars}
 \label{fourier-orns}
+\begin{indexingoff}
 \begin{tabular}{*3{ll}}
 \K\aldine        & \K\decoone        & \K\floweroneright \\
 \K\aldineleft    & \K\decosix        & \K\leafleft       \\
@@ -14858,6 +17290,7 @@
 \K\decofourleft  & \K\decotwo        & \K\starredbullet  \\
 \K\decofourright & \K\floweroneleft  &                   \\
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
@@ -14909,6 +17342,9 @@
 \index{polygons}
 \index{stars}
 \index{geometric shapes}
+\index{Jewish star}
+\subindex{stars}{Jewish}
+\index{star of David}
 \label{mns-geometrical}
 \begin{tabular}{*3{ll}}
 \K[\MNSfilledlargestar]\filledlargestar   & \K[\MNSlargelozenge]\largelozenge         & \K[\MNSmedlozenge]\medlozenge         \\
@@ -14941,6 +17377,9 @@
 \index{polygons}
 \index{stars}
 \index{geometric shapes}
+\index{Jewish star}
+\subindex{stars}{Jewish}
+\index{star of David}
 \label{fdsym-geometrical}
 \begin{tabular}{*3{ll}}
 \K[\FDSYMlargeblackcircle]\largeblackcircle & \K[\FDSYMlargetriangledown]\largetriangledown & \K[\FDSYMmedlozenge]\medlozenge               \\
@@ -14987,13 +17426,17 @@
 
 \begin{longsymtable}[STIX]{\STIX\ Geometric Shapes}
 \ltindex{circles}
+\ltindex{ellipses (ovals)}
+\ltindex{geometric shapes}
+\ltindex{hexagons}
+\ltindex{ovals}
+\ltindex{parallelograms}
+\ltindex{pentagons}
+\ltindex{polygons}
 \ltindex{rhombuses}
 \ltindex{squares}
+\ltindex{stars}
 \ltindex{triangles}
-\ltindex{polygons}
-\ltindex{stars}
-\ltindex{parallelograms}
-\ltindex{geometric shapes}
 \label{stix-geometrical}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -15095,9 +17538,9 @@
 
 
 \begin{longsymtable}[IFS]{\IFS\ Geometric Shapes}
+\ltindex{geometric shapes}
 \ltindex{circles}
 \ltindex{rhombuses}
-\ltindex{geometric shapes}
 \ltindex{squares}
 \ltindex{triangles}
 \label{ifs-geometrical}
@@ -15155,8 +17598,8 @@
 \index{circles}
 \index{rhombuses}
 \index{ellipses (ovals)}
+\index{ovals}
 \index{geometric shapes}
-\index{ovals}
 \index{rectangles}
 \index{squares}
 \index{triangles}
@@ -15209,6 +17652,7 @@
 \index{squares}
 \index{triangles}
 \index{ellipses (ovals)}
+\index{ovals}
 \label{adf-geometrical}
 \begin{tabular}{*4{ll}}
 \Tbul{27} & \Tbul{32} & \Tbul{43} & \Tbul{48} \\
@@ -15223,7 +17667,8 @@
 \begin{symtable}[UTFSYM]{\UTFSYM\ Geometric Shapes}
 \index{geometric shapes}
 \index{circles}
-\index{squares}
+\index{rhombuses}
+\index{triangles}
 \label{utfsym-geom}
 \begin{tabular}{*4{ll}}
 \Tutf{1F534} & \Tutf{1F537} & \Tutf{1F53A} & \Tutf{1F53D} \\
@@ -15241,9 +17686,10 @@
 \index{circles}
 \index{squares}
 \label{fontawesome-geometrical}
-\begin{tabular}{*4{ll}}
-\K\faCircle  & \K\faCircleONotch & \K\faDotCircleO & \K\faSquareO \\
-\K\faCircleO & \K\faCircleThin   & \K\faSquare     &              \\
+\begin{tabular}{*3{ll}}
+\K\faCircle      & \K\faDotCircle      & \KfaReg\faSquare \\
+\KfaReg\faCircle & \KfaReg\faDotCircle & \K\faSquareFull  \\
+\K\faCircleNotch & \K\faSquare         &                  \\
 \end{tabular}
 \end{symtable}
 
@@ -15250,13 +17696,13 @@
 
 \begin{longsymtable}[OPLOT]{\OPLOT\ Geometric Shapes}
 \ltindex{circles}
+\ltindex{geometric shapes}
 \ltindex{hexagons}
 \ltindex{pentagons}
+\ltindex{polygons}
 \ltindex{rhombuses}
-\ltindex{polygons}
 \ltindex{stars}
 \ltindex{triangles}
-\ltindex{geometric shapes}
 \label{oplot-geometrical}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -15362,6 +17808,7 @@
 \index{check marks}
 \index{carriage return}
 \index{squares}
+\index{borders}
 \label{ark-misc}
 \begin{tabular}{*3{ll}}
 \K\anchor         & \K\eye                     & \K\Sborder        \\
@@ -15418,6 +17865,7 @@
 
 \begin{symtable}[UTFSYM]{Miscellaneous \UTFSYM\ Dingbats}
 \idxboth{miscellaneous}{symbols}
+\index{square>shadowed}
 \label{utfsym-misc-ding}
 \begin{tabular}{*4{ll}}
 \Tutf{2706} & \Tutf{2755} & \Tutf{2762} & \Tutf{276F}  \\
@@ -15443,13 +17891,13 @@
 \idxbothend{dingbat}{symbols}
 
 
-\section{Ancient languages}
+\chapter{Ancient languages}
 \label{ancient-lang-symbols}
 \index{ancient-language symbols|(}
 \index{symbols>ancient language|(}
-\tablesubsections
+\tablesections
 
-This section presents letters and ideograms from various ancient
+This chapter presents letters and ideograms from various ancient
 scripts.  Some of these symbols may also be useful in other
 typesetting contexts because of their pictorial nature.
 
@@ -15462,7 +17910,53 @@
 \index{women}
 \index{animals}
 \index{arrows}
+\index{arrow=arrow (\PHarrow)}
+\index{bee=bee (\PHbee)}
+\index{beehive=beehive (\PHbeehive)}
+\index{boomerang=boomerang (\PHboomerang)}
+\index{bow=bow (\PHbow)}
+\index{bull leg=bull leg (\PHbullLeg)}
+\index{captive=captive (\PHcaptive)}
+\index{carpentry plane=carpentry plane (\PHcarpentryPlane)}
+\index{cat=cat (\PHcat)}
+\index{child=child (\PHchild)}
+\index{club=club (\PHclub)}
+\index{column=column (\PHcolumn)}
+\index{comb=comb (\PHcomb)}
+\index{dolium=dolium (\PHdolium)}
+\index{dove=dove (\PHdove)}
+\index{eagle=eagle (\PHeagle)}
+\index{flute=flute (\PHflute)}
+\index{gaunlet=gaunlet (\PHgaunlet)}
+\index{grater=grater (\PHgrater)}
+\index{helmet=helmet (\PHhelmet)}
+\index{hide=hide (\PHhide)}
+\index{horn=horn (\PHhorn)}
+\index{lid=lid (\PHlid)}
+\index{lily=lily (\PHlily)}
+\index{manacles=manacles (\PHmanacles)}
+\index{mattock=mattock (\PHmattock)}
+\index{ox back=ox back (\PHoxBack)}
+\index{papyrus=papyrus (\PHpapyrus)}
+\index{pedestrian=pedestrian (\PHpedestrian)}
+\index{plane tree=plane tree (\PHplaneTree)}
+\index{plumed head=plumed head (\PHplumedHead)}
+\index{ram=ram (\PHram)}
+\index{rosette=rosette (\PHrosette)}
+\index{saw=saw (\PHsaw)}
+\index{shield=shield (\PHshield)}
+\index{ship=ship (\PHship)}
+\index{sling=sling (\PHsling)}
+\index{small axe=small axe (\PHsmallAxe)}
+\index{strainer=strainer (\PHstrainer)}
+\index{tattooed head=tattooed head (\PHtattooedHead)}
+\index{tiara=tiara (\PHtiara)}
+\index{tuna=tuna (\PHtunny)}
+\index{vine=vine (\PHvine)}
+\index{wavy band=wavy band (\PHwavyBand)}
+\index{woman=woman (\PHwoman)}
 \label{phaistos}
+\begin{indexingoff}
 \begin{tabular}{*2{ll@{\qqquad}}ll}
 \K\PHarrow          & \K\PHeagle      & \K\PHplumedHead   \\
 \K\PHbee            & \K\PHflute      & \K\PHram          \\
@@ -15480,61 +17974,67 @@
 \K\PHdolium         & \K\PHpedestrian & \K\PHwavyBand     \\
 \K\PHdove           & \K\PHplaneTree  & \K\PHwoman        \\
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
 \begin{symtable}[PROTO]{\PROTO\ Proto-Semitic Characters}
 \idxboth{proto-Semitic}{symbols}
-\index{alphabets>proto-Semitic}
+\subindex{alphabets}{proto-Semitic}
 \index{men}
 \index{stick figures}
+% The following definitions were taken from
+% https://en.wikipedia.org/wiki/Proto-Sinaitic_script
+\index{ox=ox (\textproto{\AAaleph})}
+\index{ox=ox (\textproto{\Aaleph})}
+\index{house=house (\textproto{\AAbeth})}
+\index{house=house (\textproto{\Abeth})}
+\index{stick=stick (\textproto{\Agimel})}
+\index{fish=fish (\textproto{\AAdaleth})}
+\index{fish=fish (\textproto{\Adaleth})}
+\index{praise=praise (\textproto{\AAhe})}
+\index{praise=praise (\textproto{\Ahe})}
+\index{bird=bird (\textproto{\Avav})}
+\index{sword=sword (\textproto{\Azayin})}
+\index{thread=thread (\textproto{\AAheth})}
+\index{thread=thread (\textproto{\Aheth})}
+\index{good=good (\textproto{\Ateth})}
+\index{hand=hand (\textproto{\AAyod})}
+\index{hand=hand (\textproto{\Ayod})}
+\index{palm=palm (\textproto{\AAkaph})}
+\index{palm=palm (\textproto{\Akaph})}
+\index{goad=goad (\textproto{\AAlamed})}
+\index{goad=goad (\textproto{\Alamed})}
+\index{water=water (\textproto{\Amem})}
+\index{snake=snake (\textproto{\Anun})}
+\index{peg=peg (\textproto{\Asamekh})}
+\index{eye=eye (\textproto{\AAayin})}
+\index{eye=eye (\textproto{\Aayin})}
+\index{corner=corner (\textproto{\AApe})}
+\index{corner=corner (\textproto{\Ape})}
+\index{plant=plant (\textproto{\AAsade})}
+\index{plant=plant (\textproto{\Asade})}
+\index{monkey=monkey (\textproto{\AAqoph})}
+\index{monkey=monkey (\textproto{\Aqoph})}
+\index{head=head (\textproto{\AAresh})}
+\index{head=head (\textproto{\Aresh})}
+\index{bow=bow (\textproto{\Ashin})}
+\index{mark=mark (\textproto{\Atav})}
+\index{helmet=helmet (\textproto{\AAhelmet})}
+\index{helmet=helmet (\textproto{\Ahelmet})}
 \label{protosem}
+\begin{indexingoff}
 \begin{tabular}{*4{ll@{\qqquad}}ll}
-\K[\textproto\Aaleph]\Aaleph &
-\K[\textproto\AAhe]\AAhe &
-\K[\textproto\Akaph]\Akaph &
-\K[\textproto\Asamekh]\Asamekh &
-\K[\textproto\AAresh]\AAresh \\
-
-\K[\textproto\AAaleph]\AAaleph &
-\K[\textproto\Azayin]\Azayin &
-\K[\textproto\AAkaph]\AAkaph &
-\K[\textproto\Ape]\Ape &
-\K[\textproto\Ashin]\Ashin \\
-
-\K[\textproto\Abeth]\Abeth &
-\K[\textproto\Avav]\Avav &
-\K[\textproto\Alamed]\Alamed &
-\K[\textproto\AApe]\AApe &
-\K[\textproto\Ahelmet]\Ahelmet \\
-
-\K[\textproto\AAbeth]\AAbeth &
-\K[\textproto\Aheth]\Aheth &
-\K[\textproto\AAlamed]\AAlamed &
-\K[\textproto\Asade]\Asade &
-\K[\textproto\AAhelmet]\AAhelmet \\
-
-\K[\textproto\Agimel]\Agimel &
-\K[\textproto\AAheth]\AAheth &
-\K[\textproto\Am]\Amem &
-\K[\textproto\AAsade]\AAsade &
-\K[\textproto\Atav]\Atav \\
-
-\K[\textproto\Adaleth]\Adaleth &
-\K[\textproto\Ateth]\Ateth &
-\K[\textproto\Anun]\Anun &
-\K[\textproto\Aqoph]\Aqoph \\
-
-\K[\textproto\AAdaleth]\AAdaleth &
-\K[\textproto\Ayod]\Ayod &
-\K[\textproto\Aayin]\Aayin &
-\K[\textproto\AAqoph]\AAqoph \\
-
-\K[\textproto\Ahe]\Ahe &
-\K[\textproto\AAyod]\AAyod &
-\K[\textproto\AAayin]\AAayin &
-\K[\textproto\Aresh]\Aresh \\
+\K[\textproto\Aaleph]\Aaleph     & \K[\textproto\AAhe]\AAhe     & \K[\textproto\Akaph]\Akaph     & \K[\textproto\AAayin]\AAayin & \K[\textproto\AAresh]\AAresh     \\
+\K[\textproto\AAaleph]\AAaleph   & \K[\textproto\Avav]\Avav     & \K[\textproto\AAkaph]\AAkaph   & \K[\textproto\Ape]\Ape       & \K[\textproto\Ashin]\Ashin       \\
+\K[\textproto\Abeth]\Abeth       & \K[\textproto\Azayin]\Azayin & \K[\textproto\Alamed]\Alamed   & \K[\textproto\AApe]\AApe     & \K[\textproto\Atav]\Atav         \\
+\K[\textproto\AAbeth]\AAbeth     & \K[\textproto\Aheth]\Aheth   & \K[\textproto\AAlamed]\AAlamed & \K[\textproto\Asade]\Asade   & \K[\textproto\Ahelmet]\Ahelmet   \\
+\K[\textproto\Agimel]\Agimel     & \K[\textproto\AAheth]\AAheth & \K[\textproto\Am]\Amem         & \K[\textproto\AAsade]\AAsade & \K[\textproto\AAhelmet]\AAhelmet \\
+\K[\textproto\Adaleth]\Adaleth   & \K[\textproto\Ateth]\Ateth   & \K[\textproto\Anun]\Anun       & \K[\textproto\Aqoph]\Aqoph   &                                  \\
+\K[\textproto\AAdaleth]\AAdaleth & \K[\textproto\Ayod]\Ayod     & \K[\textproto\Asamekh]\Asamekh & \K[\textproto\AAqoph]\AAqoph &                                  \\
+\K[\textproto\Ahe]\Ahe           & \K[\textproto\AAyod]\AAyod   & \K[\textproto\Aayin]\Aayin     & \K[\textproto\Aresh]\Aresh   &                                  \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -15549,10 +18049,28 @@
 
 \begin{symtable}[HIER]{\HIER\ Hieroglyphics}
 \index{hieroglyphics}
-\index{alphabets>hieroglyphic}
+\subindex{alphabets}{hieroglyphic}
 \index{animals}
-\index{birds}
+\index{bird=bird (\textpmhg{\HA})}
+\index{bird=bird (\textpmhg{\Hibl})}
+\index{bird=bird (\textpmhg{\Hibp})}
+\index{bird=bird (\textpmhg{\Hibs})}
+\index{bird=bird (\textpmhg{\Hibw})}
+\index{bird=bird (\textpmhg{\Hw})}
+\index{face=face (\textpmhg{\HQ})}
+\index{face=face (\textpmhg{\Hq})}
+\index{man=man (\textpmhg{\Hman})}
+\index{man=man (\textpmhg{\HY})}
+\index{owl=owl (\textpmhg{\Hm})}
+\index{one=one (\textpmhg{\Hone})}
+\index{ten=ten (\textpmhg{\Hten})}
+\index{thousand=thousand (\textpmhg{\Hthousand})}
+\index{thousand=thousand (\textpmhg{\HXthousand})}
+\index{thousand=thousand (\textpmhg{\HCthousand})}
+\index{hundred=hundred (\textpmhg{\Hhundred})}
+\index{million=million (\textpmhg{\Hmillion})}
 \label{hieroglf}
+\begin{indexingoff}
 \begin{tabular}{*3{ll@{\qqquad}}ll}
 \K[\textpmhg\HA]\HA           & \K[\textpmhg\HI]\HI           & \K[\textpmhg\Hn]\Hn           & \K[\textpmhg\HT]\HT           \\
 \K[\textpmhg\Ha]\Ha           & \K[\textpmhg\Hi]\Hi           & \K[\textpmhg\HO]\HO           & \K[\textpmhg\Ht]\Ht           \\
@@ -15575,6 +18093,7 @@
 \K[\textpmhg\Hone]\Hone & \K[\textpmhg\Hhundred]\Hhundred & \K[\textpmhg\HXthousand]\HXthousand & \K[\textpmhg\Hmillion]\Hmillion \\
 \K[\textpmhg\Hten]\Hten & \K[\textpmhg\Hthousand]\Hthousand & \K[\textpmhg\HCthousand]\HCthousand \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -15588,9 +18107,10 @@
 
 
 \begin{longsymtable}[LINA]{\LINA\ Linear~A Script}
-\index{Linear A}
-\index{alphabets>Linear A}
+\idxboth{Linear A}{symbols}
+\subindex{alphabets}{Linear A}
 \label{linearA}
+\begin{indexingoff}
 \begin{longtable}{*3{ll@{\quad}}ll}
 \multicolumn{8}{l}{\small\textit{(continued from previous page)}} \\[1ex]
 \endhead
@@ -15698,13 +18218,15 @@
 \K\LinearAXCVII       & \K\LinearACXCV        & \K\LinearACCXCIII     &                       \\
 \K\LinearAXCVIII      & \K\LinearACXCVI       & \K\LinearACCXCIV      &                       \\
 \end{longtable}
+\end{indexingoff}
 \end{longsymtable}
 
 
 \begin{symtable}[LINB]{\LINB\ Linear~B Basic and Optional Letters}
-\index{Linear B}
-\index{alphabets>Linear B}
+\idxboth{Linear B}{symbols}
+\subindex{alphabets}{Linear B}
 \label{linearB}
+\begin{indexingoff}
 \begin{tabular}{*5{ll@{\qquad}}ll}
 \K[\textlinb{\Ba}]\Ba         & \K[\textlinb{\Bja}]\Bja       & \K[\textlinb{\Bmu}]\Bmu       & \K[\textlinb{\Bpte}]\Bpte     & \K[\textlinb{\Broii}]\Broii   & \K[\textlinb{\Bto}]\Bto       \\
 \K[\textlinb{\Baii}]\Baii     & \K[\textlinb{\Bje}]\Bje       & \K[\textlinb{\Bna}]\Bna       & \K[\textlinb{\Bpu}]\Bpu       & \K[\textlinb{\Bru}]\Bru       & \K[\textlinb{\Btu}]\Btu       \\
@@ -15720,6 +18242,7 @@
 \K[\textlinb{\Be}]\Be         & \K[\textlinb{\Bmi}]\Bmi       & \K[\textlinb{\Bpi}]\Bpi       & \K[\textlinb{\Bri}]\Bri       & \K[\textlinb{\Bte}]\Bte       &                               \\
 \K[\textlinb{\Bi}]\Bi         & \K[\textlinb{\Bmo}]\Bmo       & \K[\textlinb{\Bpo}]\Bpo       & \K[\textlinb{\Bro}]\Bro       & \K[\textlinb{\Bti}]\Bti       &                               \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -15732,8 +18255,8 @@
 
 
 \begin{symtable}[LINB]{\LINB\ Linear~B Numerals}
-\index{Linear B}
-\index{numerals>Linear B}
+\idxboth{Linear B}{symbols}
+\subindex{numerals}{Linear B}
 \index{tally markers}
 \label{linearB-nums}
 \begin{tabular}{*4{ll@{\qquad}}ll}
@@ -15753,12 +18276,14 @@
 
 
 \begin{symtable}[LINB]{\LINB\ Linear~B Weights and Measures}
-\index{Linear B}
+\idxboth{Linear B}{symbols}
 \label{linearB-weights}
+\begin{indexingoff}
 \begin{tabular}{*4{ll@{\qquad}}ll}
 \K[\textlinb{\BPtalent}]\BPtalent & \K[\textlinb{\BPvolb}]\BPvolb     & \K[\textlinb{\BPvolcf}]\BPvolcf   & \K[\textlinb{\BPwtb}]\BPwtb       & \K[\textlinb{\BPwtd}]\BPwtd       \\
 \K[\textlinb{\BPvola}]\BPvola     & \K[\textlinb{\BPvolcd}]\BPvolcd   & \K[\textlinb{\BPwta}]\BPwta       & \K[\textlinb{\BPwtc}]\BPwtc       &                                   \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -15768,12 +18293,51 @@
 
 
 \begin{symtable}[LINB]{\LINB\ Linear~B Ideograms}
-\index{Linear B}
+\idxboth{Linear B}{symbols}
 \index{animals}
 \index{arrows}
 \index{men}
 \index{women}
+\index{amphora=amphora (\textlinb{\BPamphora})}
+\index{arrow=arrow (\textlinb{\BParrow})}
+\index{barley=barley (\textlinb{\BPbarley})}
+\index{billy=billy (\textlinb{\BPbilly})}
+\index{boar=boar (\textlinb{\BPboar})}
+\index{bronze=bronze (\textlinb{\BPbronze})}
+\index{bull=bull (\textlinb{\BPbull})}
+\index{cauldron=cauldron (\textlinb{\BPcauldroni})}
+\index{cauldron=cauldron (\textlinb{\BPcauldronii})}
+\index{chariot=chariot (\textlinb{\BPchariot})}
+\index{chassis=chassis (\textlinb{\BPchassis})}
+\index{cloth=cloth (\textlinb{\BPcloth})}
+\index{cow=cow (\textlinb{\BPcow})}
+\index{cup=cup (\textlinb{\BPcup})}
+\index{ewe=ewe (\textlinb{\BPewe})}
+\index{foal=foal (\textlinb{\BPfoal})}
+\index{goat=goat (\textlinb{\BPgoat})}
+\index{goblet=goblet (\textlinb{\BPgoblet})}
+\index{gold=gold (\textlinb{\BPgold})}
+\index{horse=horse (\textlinb{\BPhorse})}
+\index{man=man (\textlinb{\BPman})}
+\index{nanny=nanny (\textlinb{\BPnanny})}
+\index{olive=olive (\textlinb{\BPolive})}
+\index{ox=ox (\textlinb{\BPox})}
+\index{pig=pig (\textlinb{\BPpig})}
+\index{ram=ram (\textlinb{\BPram})}
+\index{sheep=sheep (\textlinb{\BPsheep})}
+\index{sow=sow (\textlinb{\BPsow})}
+\index{spear=spear (\textlinb{\BPspear})}
+\index{sword=sword (\textlinb{\BPsword})}
+\index{wheat=wheat (\textlinb{\BPwheat})}
+\index{wheel=wheel (\textlinb{\BPwheel})}
+\index{wine=wine (\textlinb{\BPwine})}
+\index{wine=wine (\textlinb{\BPwineiih})}
+\index{wine=wine (\textlinb{\BPwineiiih})}
+\index{wine=wine (\textlinb{\BPwineivh})}
+\index{woman=woman (\textlinb{\BPwoman})}
+\index{wool=wool (\textlinb{\BPwool})}
 \label{linearB-objs}
+\begin{indexingoff}
 \begin{tabular}{*3{ll@{\qquad}}ll}
 \K[\textlinb{\BPamphora}]\BPamphora       & \K[\textlinb{\BPchassis}]\BPchassis       & \K[\textlinb{\BPman}]\BPman               & \K[\textlinb{\BPwheat}]\BPwheat           \\
 \K[\textlinb{\BParrow}]\BParrow           & \K[\textlinb{\BPcloth}]\BPcloth           & \K[\textlinb{\BPnanny}]\BPnanny           & \K[\textlinb{\BPwheel}]\BPwheel           \\
@@ -15786,6 +18350,7 @@
 \K[\textlinb{\BPcauldronii}]\BPcauldronii & \K[\textlinb{\BPgold}]\BPgold             & \K[\textlinb{\BPspear}]\BPspear           &                                           \\
 \K[\textlinb{\BPchariot}]\BPchariot       & \K[\textlinb{\BPhorse}]\BPhorse           & \K[\textlinb{\BPsword}]\BPsword           &                                           \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -15795,13 +18360,15 @@
 
 
 \begin{symtable}[LINB]{\LINB\ Unidentified Linear~B Symbols}
-\index{Linear B}
+\idxboth{Linear B}{symbols}
 \label{linearB-unknown}
+\begin{indexingoff}
 \begin{tabular}{*4{ll@{\qquad}}ll}
 \K[\textlinb{\BUi}]\BUi       & \K[\textlinb{\BUiv}]\BUiv     & \K[\textlinb{\BUvii}]\BUvii   & \K[\textlinb{\BUx}]\BUx       & \K[\textlinb{\Btwe}]\Btwe     \\
 \K[\textlinb{\BUii}]\BUii     & \K[\textlinb{\BUv}]\BUv       & \K[\textlinb{\BUviii}]\BUviii & \K[\textlinb{\BUxi}]\BUxi     &                               \\
 \K[\textlinb{\BUiii}]\BUiii   & \K[\textlinb{\BUvi}]\BUvi     & \K[\textlinb{\BUix}]\BUix     & \K[\textlinb{\BUxii}]\BUxii   &                               \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -15812,8 +18379,9 @@
 
 \begin{symtable}[CYPR]{\CYPR\ Cypriot Letters}
 \index{Cypriot}
-\index{alphabets>Cypriot}
+\subindex{alphabets}{Cypriot}
 \label{cypriot}
+\begin{indexingoff}
 \begin{tabular}{*5{ll@{\qquad}}ll}
 \K[\textcypr{\Ca}]\Ca   & \K[\textcypr{\Cku}]\Cku & \K[\textcypr{\Cmu}]\Cmu & \K[\textcypr{\Cpo}]\Cpo & \K[\textcypr{\Cso}]\Cso & \K[\textcypr{\Cwi}]\Cwi \\
 \K[\textcypr{\Ce}]\Ce   & \K[\textcypr{\Cla}]\Cla & \K[\textcypr{\Cna}]\Cna & \K[\textcypr{\Cpu}]\Cpu & \K[\textcypr{\Csu}]\Csu & \K[\textcypr{\Cwo}]\Cwo \\
@@ -15826,6 +18394,7 @@
 \K[\textcypr{\Cki}]\Cki & \K[\textcypr{\Cmi}]\Cmi & \K[\textcypr{\Cpe}]\Cpe & \K[\textcypr{\Cse}]\Cse & \K[\textcypr{\Cwa}]\Cwa &                         \\
 \K[\textcypr{\Cko}]\Cko & \K[\textcypr{\Cmo}]\Cmo & \K[\textcypr{\Cpi}]\Cpi & \K[\textcypr{\Csi}]\Csi & \K[\textcypr{\Cwe}]\Cwe &                         \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -15839,8 +18408,9 @@
 
 \begin{symtable}[SARAB]{\SARAB\ South Arabian Letters}
 \index{South Arabian alphabet}
-\index{alphabets>South Arabian}
+\subindex{alphabets}{South Arabian}
 \label{sarabian}
+\begin{indexingoff}
 \begin{tabular}{*4{ll@{\qquad}}ll}
 \K[\textsarab{\SAa}]\SAa   & \K[\textsarab{\SAz}]\SAz   & \K[\textsarab{\SAm}]\SAm   & \K[\textsarab{\SAsd}]\SAsd & \K[\textsarab{\SAdb}]\SAdb \\
 \K[\textsarab{\SAb}]\SAb   & \K[\textsarab{\SAhd}]\SAhd & \K[\textsarab{\SAn}]\SAn   & \K[\textsarab{\SAq}]\SAq   & \K[\textsarab{\SAtb}]\SAtb \\
@@ -15849,6 +18419,7 @@
 \K[\textsarab{\SAh}]\SAh   & \K[\textsarab{\SAk}]\SAk   & \K[\textsarab{\SAlq}]\SAlq & \K[\textsarab{\SAt}]\SAt   & \K[\textsarab{\SAsa}]\SAsa \\
 \K[\textsarab{\SAw}]\SAw   & \K[\textsarab{\SAl}]\SAl   & \K[\textsarab{\SAo}]\SAo   & \K[\textsarab{\SAhu}]\SAhu & \K[\textsarab{\SAdd}]\SAdd \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -15862,7 +18433,7 @@
 
 \begin{symtable}[PRSN]{\PRSN\ Cuneiform Letters}
 \index{cuneiform}
-\index{alphabets>Old Persian (cuneiform)}
+\subindex{alphabets}{Old Persian (cuneiform)}
 \label{oldprsn}
 \begin{tabular}{*4{ll@{\qquad}}ll}
 \K[\textcopsn{\Oa}]\Oa     & \K[\textcopsn{\Oga}]\Oga   & \K[\textcopsn{\Ola}]\Ola   & \K[\textcopsn{\Oru}]\Oru   & \K[\textcopsn{\Ovi}]\Ovi   \\
@@ -15887,7 +18458,7 @@
 
 \begin{symtable}[PRSN]{\PRSN\ Cuneiform Numerals}
 \index{cuneiform}
-\index{numerals>cuneiform}
+\subindex{numerals}{cuneiform}
 \label{oldprsn-nums}
 \begin{tabular}{*4{ll@{\qquad}}ll}
 \K[\textcopsn{\Oone}]\Oone & \K[\textcopsn{\Otwo}]\Otwo & \K[\textcopsn{\Oten}]\Oten & \K[\textcopsn{\Otwenty}]\Otwenty & \K[\textcopsn{\Ohundred}]\Ohundred \\
@@ -15919,7 +18490,7 @@
 
 \begin{symtable}[UGAR]{\UGAR\ Cuneiform Letters}
 \index{cuneiform}
-\index{alphabets>Ugarite (cuneiform)}
+\subindex{alphabets}{Ugarite (cuneiform)}
 \label{ugarite}
 \begin{tabular}{*4{ll@{\qquad}}ll}
 \K[\textcugar{\Arq}]\Arq & \K[\textcugar{\Az}]\Az   & \K[\textcugar{\Am}]\Am   & \K[\textcugar{\Asd}]\Asd & \K[\textcugar{\Au}]\Au   \\
@@ -15944,7 +18515,7 @@
 
 
 \begin{symtable}[TEUB]{\TEUB\ Archaic Greek Letters and Greek Numerals}
-\index{alphabets>Greek}
+\subindex{alphabets}{Greek}
 \index{Greek>letters}
 \index{Greek>numerals}
 \label{teubner}
@@ -15990,7 +18561,7 @@
 
 
 \begin{symtable}[BSK]{\BSK\ Archaic Greek Letters and Greek Numerals}
-\index{alphabets>Greek}
+\subindex{alphabets}{Greek}
 \index{Greek>letters}
 \index{Greek>numerals}
 \label{bsk-greek}
@@ -16008,7 +18579,160 @@
 \ltindex{Isthmian script}
 \ltindex{symbols>Epi-Olmec}
 \ltindex{symbols>Isthmian}
+\ltindex{after=after (\EOafter)}
+\ltindex{and then=and then (\EOandThen)}
+\ltindex{appear=appear (\EOAppear)}
+\ltindex{beard mask=beard mask (\EOBeardMask)}
+\ltindex{bedeck=bedeck (\EOBedeck)}
+\ltindex{blood=blood (\EOBlood)}
+\ltindex{brace=brace (\EObrace)}
+\ltindex{building=building (\EObuilding)}
+\ltindex{bundle=bundle (\EOBundle)}
+\ltindex{chop=chop (\EOChop)}
+\ltindex{chron=chron (\EOChronI)}
+\ltindex{cloth=cloth (\EOCloth)}
+\ltindex{deal with=deal with (\EODealWith)}
+\ltindex{deer=deer (\EODeer)}
+\ltindex{eat=eat (\EOeat)}
+\ltindex{flint=flint (\EOflint)}
+\ltindex{flower=flower (\EOflower)}
+\ltindex{fold=fold (\EOFold)}
+\ltindex{go up=go up (\EOGoUp)}
+\ltindex{god=god (\EOGod)}
+\ltindex{governor=governor (\EOgovernor)}
+\ltindex{guise=guise (\EOGuise)}
+\ltindex{hallow=hallow (\EOHallow)}
+%\ltindex{ja=ja (\EOja)}
+\ltindex{jaguar=jaguar (\EOjaguar)}
+%\ltindex{je=je (\EOje)}
+%\ltindex{ji=ji (\EOji)}
+%\ltindex{jo=jo (\EOjo)}
+%\ltindex{ju=ju (\EOju)}
+%\ltindex{kak=kak (\EOkak)}
+%\ltindex{ke=ke (\EOke)}
+%\ltindex{ki=ki (\EOki)}
+%\ltindex{kij=kij (\EOkij)}
+\ltindex{king=king (\EOKing)}
+\ltindex{knotted cloth straps=knotted cloth straps (\EOknottedClothStraps)}
+\ltindex{knotted cloth=knotted cloth (\EOknottedCloth)}
+%\ltindex{ko=ko (\EOko)}
+%\ltindex{ku=ku (\EOku)}
+%\ltindex{kuu=kuu (\EOkuu)}
+\ltindex{let blood=let blood (\EOLetBlood)}
+\ltindex{loin cloth=loin cloth (\EOloinCloth)}
+\ltindex{long lip=long lip (\EOlongLipII)}
+\ltindex{lord=lord (\EOLord)}
+\ltindex{lose=lose (\EOLose)}
+\ltindex{ma=ma (\EOma)}
+\ltindex{macaw=macaw (\EOmacaw)}
+\ltindex{macaw=macaw (\EOmacawI)}
+\ltindex{me=me (\EOme)}
+%\ltindex{mex new=mex new (\EOmexNew)}
+%\ltindex{mi=mi (\EOmi)}
+\ltindex{middle=middle (\EOMiddle)}
+\ltindex{monster=monster (\EOmonster)}
+\ltindex{mountain=mountain (\EOMountain)}
+%\ltindex{muu=muu (\EOmuu)}
+%\ltindex{na=na (\EOna)}
+%\ltindex{ne=ne (\EOne)}
+%\ltindex{ni=ni (\EOni)}
+\ltindex{now=now (\EOnow)}
+%\ltindex{nu=nu (\EOnu)}
+%\ltindex{nuu=nuu (\EOnuu)}
+\ltindex{officer=officer (\EOofficerI)}
+\ltindex{officer=officer (\EOofficerII)}
+\ltindex{officer=officer (\EOofficerIII)}
+\ltindex{officer=officer (\EOofficerIV)}
+%\ltindex{pa=pa (\EOpa)}
+%\ltindex{pak=pak (\EOpak)}
+\ltindex{patron=patron (\EOPatron)}
+\ltindex{patron=patron (\EOPatronII)}
+%\ltindex{pe=pe (\EOpe)}
+\ltindex{penis=penis (\EOpenis)}
+%\ltindex{pi=pi (\EOpi)}
+\ltindex{pierce=pierce (\EOPierce)}
+\ltindex{plant=plant (\EOPlant)}
+\ltindex{play=play (\EOPlay)}
+%\ltindex{po=po (\EOpo)}
+\ltindex{priest=priest (\EOpriest)}
+\ltindex{prince=prince (\EOPrince)}
+%\ltindex{pu=pu (\EOpu)}
+%\ltindex{puu=puu (\EOpuu)}
+%\ltindex{puuk=puuk (\EOpuuk)}
+\ltindex{rain=rain (\EORain)}
+%\ltindex{sa=sa (\EOSa)}
+%\ltindex{sa=sa (\EOsa)}
+\ltindex{sacrifice=sacrifice (\EOsacrifice)}
+\ltindex{saw=saw (\EOSaw)}
+\ltindex{scorpion=scorpion (\EOScorpius)}
+\ltindex{set=set (\EOset)}
+%\ltindex{si=si (\EOSi)}
+%\ltindex{si=si (\EOsi)}
+\ltindex{sing=sing (\EOsing)}
+%\ltindex{sini=sini (\EOSini)}
+\ltindex{skin=skin (\EOskin)}
+\ltindex{sky animal=sky animal (\EOskyAnimal)}
+\ltindex{sky pillar=sky pillar (\EOskyPillar)}
+\ltindex{sky=sky (\EOSky)}
+\ltindex{snake=snake (\EOsnake)}
+\ltindex{so=so (\EOSo)}
+\ltindex{span=span (\EOSpan)}
+\ltindex{sprinkle=sprinkle (\EOSprinkle)}
+\ltindex{star warrior=star warrior (\EOStarWarrior)}
+\ltindex{star warrior=star warrior (\EOstarWarrior)}
+\ltindex{star=star (\EOstar)}
+\ltindex{step=step (\EOstep)}
+%\ltindex{su=su (\EOSu)}
+%\ltindex{su=su (\EOsu)}
+\ltindex{sun=sun (\EOsun)}
+%\ltindex{suu=suu (\EOSuu)}
+%\ltindex{suu=suu (\EOsuu)}
+%\ltindex{ta=ta (\EOta)}
+%\ltindex{te=te (\EOte)}
+\ltindex{throne=throne (\EOthrone)}
+%\ltindex{ti=ti (\EOti)}
+\ltindex{time=time (\EOTime)}
+\ltindex{time=time (\EOtime)}
+\ltindex{title=title (\EOTitle)}
+\ltindex{title=title (\EOTitleII)}
+\ltindex{title=title (\EOTitleIV)}
+\ltindex{to=to (\EOto)}
+%\ltindex{tu=tu (\EOtu)}
+\ltindex{tuki=tuki (\EOtuki)}
+\ltindex{tukpa=tukpa (\EOtukpa)}
+\ltindex{turtle=turtle (\EOturtle)}
+%\ltindex{tuu=tuu (\EOtuu)}
+%\ltindex{tza=tza (\EOtza)}
+%\ltindex{tze=tze (\EOtze)}
+\ltindex{tzetze=tzetze (\EOtzetze)}
+%\ltindex{tzi=tzi (\EOtzi)}
+%\ltindex{tzu=tzu (\EOtzu)}
+%\ltindex{tzuu=tzuu (\EOtzuu)}
+%\ltindex{undef=undef (\EOundef)}
+\ltindex{beard mask=beard mask (\EOvarBeardMask)}
+%\ltindex{si=si (\EOvarSi)}
+\ltindex{year=year (\EOvarYear)}
+%\ltindex{ja=ja (\EOvarja)}
+%\ltindex{ji=ji (\EOvarji)}
+%\ltindex{ki=ki (\EOvarki)}
+%\ltindex{kuu=kuu (\EOvarkuu)}
+%\ltindex{ni=ni (\EOvarni)}
+%\ltindex{pa=pa (\EOvarpa)}
+%\ltindex{si=si (\EOvarsi)}
+%\ltindex{tza=tza (\EOvartza)}
+%\ltindex{wuu=wuu (\EOvarwuu)}
+%\ltindex{wa=wa (\EOwa)}
+%\ltindex{we=we (\EOwe)}
+%\ltindex{wi=wi (\EOwi)}
+%\ltindex{wo=wo (\EOwo)}
+%\ltindex{wuu=wuu (\EOwuu)}
+%\ltindex{ya=ya (\EOya)}
+%\ltindex{yaj=yaj (\EOyaj)}
+%\ltindex{ye=ye (\EOye)}
+\ltindex{year=year (\EOYear)}
+%\ltindex{yuu=yuu (\EOyuu)}
 \label{epi-olmec}
+\begin{indexingoff}
 \begin{longtable}{*2{ll@{\qqquad}}ll}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[1ex]
 \endhead
@@ -16069,6 +18793,7 @@
 \K\EOmexNew             & \K\EOstar        & \K\EOYear         \\
 \K\EOmi                 & \K\EOstarWarrior & \K\EOyuu          \\
 \end{longtable}
+\end{indexingoff}
 \end{longsymtable}
 
 
@@ -16077,8 +18802,8 @@
 \index{Isthmian script}
 \index{symbols>Epi-Olmec}
 \index{symbols>Isthmian}
-\index{numerals>Epi-Olmec}
-\index{numerals>Isthmian}
+\subindex{numerals}{Epi-Olmec}
+\subindex{numerals}{Isthmian}
 \label{epi-olmec-numerals}
 \begin{tabular}{*4{ll}}
 \K\EOzero & \K\EOvi   & \K\EOxii  & \K\EOxviii \\
@@ -16094,7 +18819,14 @@
 \begin{symtable}[ARUNE]{\ARUNE\ Runes}
 \index{runes}
 \index{symbols>runes}
+\index{3=3 (\ARUNEsthree)}
+\index{4=4 (\ARUNEsfour)}
+\index{5=5 (\ARUNEsfive)}
+\index{6=6 (\ARUNEssix)}
+\index{7=7 (\ARUNEsseven)}
+\index{8=8 (\ARUNEseight)}
 \label{allrunes}
+\begin{indexingoff}
 \begin{tabular}{ll*5{@{\qquad}ll}}
 \K[\ARUNEa]\a & \K[\ARUNECE]E & \K[\ARUNEING]\ING & \K[\ARUNECm]m   & \K[\ARUNECR]R           & \K[\ARUNEsthree]\sthree           \\
 \K[\ARUNEA]\A & \K[\ARUNECF]F & \K[\ARUNEing]\ing & \K[\ARUNECn]n   & \K[\ARUNERR]\RR         & \K[\ARUNECT]T                     \\
@@ -16107,6 +18839,7 @@
 \K[\ARUNECd]d & \K[\ARUNECi]i & \K[\ARUNECk]k     & \K[\ARUNER]\R   & \K[\ARUNEsseven]\sseven &                                   \\
 \K[\ARUNECe]e & \K[\ARUNECI]I & \K[\ARUNECl]l     & \K[\ARUNECr]r   & \K[\ARUNEssix]\ssix     &                                   \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 
@@ -16131,6 +18864,7 @@
 \begin{symtable}[ARUNE]{\ARUNE\ Rune Separators}
 \index{runes}
 \index{symbols>runes}
+\index{plusses}
 \label{allrunes-sep}
 \begin{tabular}{*4{ll}}
 \K[\ARUNEbar]\bar                 & \K[\ARUNEdoubleeye]\doubleeye   & \K[\ARUNEplus]\plus               & \K[\ARUNEtripledot]\tripledot   \\
@@ -16153,15 +18887,15 @@
 \index{symbols>ancient language|)}
 
 
-\section{Musical symbols}
+\chapter{Musical symbols}
 \label{musical-symbols}
 \idxbothbegin{musical}{symbols}
-\tablesubsections
+\tablesections
 
 The following symbols are used to typeset musical notation.
 \ifLILY
   The \LILY\ package provides a large subset of the symbols in this
-  section.  Note, however, that \LILY\ depends upon the
+  chapter.  Note, however, that \LILY\ depends upon the
   \pkgname{fontspec} package, OpenType\index{OpenType} (\fileext{otf})
   fonts, and some PDF\index{PDF} graphics and therefore works only
   with \lualatex\ or \xelatex.
@@ -16263,9 +18997,9 @@
 \idxboth{musical}{symbols}
 \label{utfsym-music}
 \begin{tabular}{*4{ll}}
-\Tutf{2669} & \Tutf{266C} & \Tutf{266F}  & \Tutf{1F3BC} \\
-\Tutf{266A} & \Tutf{266D} & \Tutf{1F3B5} &              \\
-\Tutf{266B} & \Tutf{266E} & \Tutf{1F3B6} &              \\
+\Tutf{2669} & \Tutf{266C} & \Tutf{266F}  & \Tutf{1F3B5} \\
+\Tutf{266A} & \Tutf{266D} & \Tutf{1F39C} & \Tutf{1F3B6} \\
+\Tutf{266B} & \Tutf{266E} & \Tutf{1F39D} & \Tutf{1F3BC} \\
 \end{tabular}
 
 \bigskip
@@ -16275,10 +19009,10 @@
 
 
 \begin{longsymtable}[MSX]{\MSX\ Musical Symbols}
-\ltidxboth{musical}{symbols}
 \ltindex{clefs}
 \ltindex{alla breve}
 \ltindex{cut time}
+\ltindex{musical meters}
 \label{musixtex-music}
 \renewcommand{\arraystretch}{1.75}   % Prevent tall symbols from touching.
 \begin{longtable}{*2{ll@{\qqquad}}ll}
@@ -16351,7 +19085,20 @@
 
 \begin{symtable}[HARM]{\HARM\ Musical Symbols}
 \idxboth{musical}{symbols}
+\index{whole note=whole note (\Ganz)}
+\index{whole note rest=whole note rest (\GaPa)}
+\index{half note=half note (\Halb)}
+\index{half note rest=half note rest (\HaPa)}
+\index{quarter note=quarter note (\Vier)}
+\index{quarter note rest=quarter note rest (\ViPa)}
+\index{eighth note=eighth note (\Acht)}
+\index{eighth note rest=eighth note rest (\AcPa)}
+\index{sixteenth note=sixteenth note (\Sech)}
+\index{sixteenth note rest=sixteenth note rest (\SePa)}
+\index{thirty-second note=thirty-second note (\Zwdr)}
+\index{thirty-second note rest=thirty-second note rest (\ZwPa)}
 \label{harmony-music}
+\begin{indexingoff}
 \begin{tabular}{*4{ll@{\qqquad}}ll}
 \K\AAcht  & \K\DDohne & \K\Halb   & \K\SechBR & \K\VM     \\
 \K\Acht   & \K\Dohne  & \K\HaPa   & \K\SechBr & \K\Zwdr   \\
@@ -16360,6 +19107,7 @@
 \K\AcPa   & \K\Ganz   & \K\SechBL & \K\Vier   &           \\
 \K\DD     & \K\GaPa   & \K\SechBl & \K\ViPa   &           \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -16385,7 +19133,7 @@
 \begin{tablenote}
   \MUSICOG\ defines \cmdI{\fl}, \cmdI{\sh}, and \cmdI{\na} as
   shorthands for \cmdI{\musFlat}, \cmdI{\musSharp}, and
-  \cmdI{musNatural}, respectively.  It also defines \cmdI{\musCorchea}
+  \cmdI{\musNatural}, respectively.  It also defines \cmdI{\musCorchea}
   as an alias for \cmdI{\musEighth}, \cmdI{\musCorcheaDotted} as an
   alias for \cmdI{\musEighthDotted}, \cmdI{\musFusa} as an alias for
   \cmdI{\musEighth}, \cmdI{\musFusaDotted} as an alias for
@@ -16407,6 +19155,7 @@
 \index{time signatures}
 \index{alla breve}
 \index{cut time}
+\index{musical meters}
 \label{musicography-time-sig}
 \renewcommand{\arraystretch}{1.25}   % Prevent tall symbols from touching.
 \begin{tabular}{*2{ll@{\qqquad}}ll}
@@ -16469,7 +19218,6 @@
 
 
 \begin{longsymtable}[LILY]{\LILY\ Single Notes}
-\ltidxboth{musical}{symbols}
 \label{lily-notes}
 \begin{longtable}{*2{ll}}
 \multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[1ex]
@@ -16578,6 +19326,7 @@
 
 \begin{symtable}[LILY]{\LILY\ Accidentals}
 \idxboth{musical}{symbols}
+\subindex{arrows}{on musical accidentals}
 \label{lily-accidentals}
 \renewcommand{\arraystretch}{1.5}   % Try to even out the line spacing a bit.
 \begin{tabular}{*2{ll}}
@@ -16615,7 +19364,8 @@
 \index{forte=forte (\LILYdyn{-1pt}{f})}
 \index{mezzo=mezzo (\LILYdyn{0pt}{m})}
 \index{piano=piano (\LILYdyn{-2pt}{p})}
-\index{rinforzando (\noexpand\lilyRF)}
+\index{rinforzando=rinforzando (\lilyRF)}
+\index{rinforzando=rinforzando (\lilyRFZ)}
 \idxboth{musical}{symbols}
 \label{lily-dyn-alpha}
 \begin{tabular}{ll@{\qquad}ll}
@@ -16645,7 +19395,7 @@
 
 
 \begin{symtable}[LILY]{\LILY\ Articulations}
-\index{thumb pizzicato|see{\texttt{\string\lilyThumb}}}
+\index{thumb pizzicato=thumb pizzicato (\lilyThumb)}
 \idxboth{musical}{symbols}
 \label{lily-articulations}
 \begin{tabular}{*3{ll}}
@@ -16709,7 +19459,7 @@
 
 
 \begin{longsymtable}[LILY]{\LILY\ Named Scripts}
-\ltidxboth{musical}{symbols}
+\ltindex{arrows}
 \label{lily-gen-scripts}
 \begin{longtable}{*2{ll}}
 \multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[1ex]
@@ -16857,7 +19607,6 @@
 
 \begin{longsymtable}[LILY]{\LILY\ Named Clefs}
 \ltindex{clefs}
-\ltidxboth{musical}{symbols}
 \label{lily-gen-clefs}
 \begin{longtable}{*2{ll}}
 \multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[1ex]
@@ -16913,7 +19662,6 @@
 \ltindex{polygons}
 \ltindex{triangles}
 \ltindex{geometric shapes}
-\ltidxboth{musical}{symbols}
 \label{lily-gen-noteheads}
 \begin{longtable}{ll}
 \multicolumn{2}{l}{\small\textit{(continued from previous page)}} \\[1ex]
@@ -17191,7 +19939,7 @@
 
 
 \begin{longsymtable}[LILY]{\LILY\ Named Accidentals}
-\ltidxboth{musical}{symbols}
+\ltsubindex{arrows}{on musical accidentals}
 \label{lily-gen-accidentals}
 \begin{longtable}{ll}
 \multicolumn{2}{l}{\small\textit{(continued from previous page)}} \\[1ex]
@@ -17246,6 +19994,7 @@
 
 \begin{symtable}[LILY]{\LILY\ Named Arrowheads}
 \idxboth{musical}{symbols}
+\index{arrowheads}
 \label{lily-gen-arrowheads}
 \begin{tabular}{*2{ll}}
 \Tlg{arrowheads.close.01}  & \Tlg{arrowheads.open.01}  \\
@@ -17302,12 +20051,12 @@
 \idxbothend{musical}{symbols}
 
 
-\section{Gaming symbols}
+\chapter{Gaming symbols}
 \label{gaming-symbols}
 \idxbothbegin{game-related}{symbols}
-\tablesubsections
+\tablesections
 
-This section presents symbols related to games and gaming:
+This chapter presents symbols related to games and gaming:
 playing-card suits, dice, and symbols used to represent pieces and
 moves in various games.
 \ifcomplete
@@ -17435,7 +20184,7 @@
 
 \bigskip
 \begin{tablenote}
-  \twemojismessage
+  \twemojismessage.
 \end{tablenote}
 \end{symtable}
 
@@ -17549,8 +20298,7 @@
 
 
 \begin{symtable}[UTFSYM]{\UTFSYM\ Dice}
-\index{dice}
-\index{dice>3D}
+\subindex{dice}{3D}
 \label{utfsym-dice}
 \begin{tabular}{*3{ll}}
 \Tutf{2680} & \Tutf{2682} & \Tutf{2684} \\
@@ -17562,6 +20310,18 @@
 \end{symtable}
 
 
+\begin{symtable}[FNTAWE]{\FNTAWE\ Dice}
+\subindex{dice}{20-sided=20-sided (\faDiceD20)}
+\subindex{dice}{3D=3D (\faDiceD6)}
+\label{fontawesome5-dice}
+\begin{tabular}{*3{ll}}
+\K\faDice      & \K\faDiceFive & \K\faDiceSix   \\
+\K{\faDiceD20} & \K\faDiceFour & \K\faDiceThree \\
+\K{\faDiceD6}  & \K\faDiceOne  & \K\faDiceTwo   \\
+\end{tabular}
+\end{symtable}
+
+
 \begin{longsymtable}[UTFSYM]{\UTFSYM\ Domino Tiles}
 \ltindex{domino tiles}
 \label{utfsym-dominoes}
@@ -17649,9 +20409,11 @@
 
 
 \begin{symtable}[SKAK]{\SKAK\ Chess Informator Symbols}
+\index{chess notation}
 \idxboth{chess}{symbols}
 \idxboth{informator}{symbols}
 \label{skak-inform}
+\begin{indexingoff}
 \begin{tabular}{*3{ll}}
 \K\bbetter            & \K\doublepawns  & \K\seppawns      \\
 \K\bdecisive          & \K\ending       & \K\shortcastling \\
@@ -17671,6 +20433,7 @@
 \K\devadvantage       & \K\qside        & \K\zugzwang      \\
 \K\diagonal           & \K\samebishops  &                  \\
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
@@ -17706,6 +20469,26 @@
 \end{symtable}
 
 
+\begin{symtable}[FNTAWE]{\FNTAWE\ Chess Pieces and Chessboards}
+\idxboth{chess}{symbols}
+\index{bishop=bishop (\faChessBishop)}
+\index{chessboard=chessboard (\faChessBoard)}
+\index{king=king (\faChessKing)}
+\index{knight=knight (\faChessKnight)}
+\index{pawn=pawn (\faChessPawn)}
+\index{queen=queen (\faChessQueen)}
+\index{rook=rook (\faChessRook)}
+\index{castle=castle (\faChessRook)}
+\index{chess pieces=chess pieces (\faChess)}
+\label{fontawesome5-chess}
+\begin{tabular}{*3{ll}}
+\K\faChess       & \K\faChessKing   & \K\faChessQueen \\
+\K\faChessBishop & \K\faChessKnight & \K\faChessRook  \\
+\K\faChessBoard  & \K\faChessPawn   &                 \\
+\end{tabular}
+\end{symtable}
+
+
 \begin{symtable}[IGO]{\IGO\ Go Symbols}
 \index{symbols>Go stones}
 \index{Go stones}
@@ -17778,16 +20561,462 @@
 \end{symtable}
 
 
+\begin{symtable}[FNTAWE]{\FNTAWE\ Sports}
+\idxboth{sports}{symbols}
+\index{baseball=baseball (\faBaseballBall)}
+\index{basketball=basketball (\faBasketballBall)}
+\index{biking=biking (\faBiking)}
+\index{bowling ball=bowling ball (\faBowlingBall)}
+\index{dumbbell=dumbbell (\faDumbbell)}
+\index{football=football (\faFootballBall)}
+\index{football=football (\faFutbol)}
+\index{golf ball=golf ball (\faGolfBall)}
+\index{hockey puck=hockey puck (\faHockeyPuck)}
+\index{ping pong=ping pong (\faTableTennis)}
+\index{quidditch=quidditch (\faQuidditch)}
+\index{skating=skating (\faSkating)}
+\index{skiing=skiing (\faSkiing)}
+\index{skiing=skiing (\faSkiingNordic)}
+\index{snowboarding=snowboarding (\faSnowboarding)}
+\index{soccer ball=soccer ball (\faFutbol)}
+\index{swimming=swimming (\faSwimmer)}
+\index{table tennis=table tennis (\faTableTennis)}
+\index{volleyball=volleyball (\faVolleyballBall)}
+\label{fontawesome5-sports}
+\begin{tabular}{*3{ll}}
+\K\faBaseballBall   & \K\faFootballBall & \K\faSkiing         \\
+\K\faBasketballBall & \K\faFutbol       & \K\faSkiingNordic   \\
+\K\faBiking         & \KfaReg\faFutbol  & \K\faSnowboarding   \\
+\K\faBowlingBall    & \K\faGolfBall     & \K\faSwimmer        \\
+\K\faDribbble       & \K\faHockeyPuck   & \K\faTableTennis    \\
+\K\faDribbbleSquare & \K\faQuidditch    & \K\faVolleyballBall \\
+\K\faDumbbell       & \K\faSkating      &                     \\
+\end{tabular}
+\end{symtable}
+
+
+\begin{symtable}[UTFSYM]{\UTFSYM\ Games and Sports}
+\idxboth{sports}{symbols}
+\idxboth{game-related}{symbols}
+\index{dice}
+\label{utfsym-games-sports}
+\begin{tabular}{*4{ll}}
+\Tutf{1F3AE} & \Tutf{1F3BF} & \Tutf{1F3C6} & \Tutf{1F3CF} \\
+\Tutf{1F3AF} & \Tutf{1F3C0} & \Tutf{1F3C7} & \Tutf{1F3D0} \\
+\Tutf{1F3B0} & \Tutf{1F3C1} & \Tutf{1F3C8} & \Tutf{1F3D1} \\
+\Tutf{1F3B1} & \Tutf{1F3C2} & \Tutf{1F3C9} & \Tutf{1F3D2} \\
+\Tutf{1F3B2} & \Tutf{1F3C3} & \Tutf{1F3CA} & \Tutf{1F3D3} \\
+\Tutf{1F3B3} & \Tutf{1F3C4} & \Tutf{1F3CB} & \Tutf{1F3F8} \\
+\Tutf{1F3BE} & \Tutf{1F3C5} & \Tutf{1F3CC} & \Tutf{1F3F9} \\
+\end{tabular}
+
+\bigskip
+\utfsymmessage[1F3B0]
+\end{symtable}
+
+
 \idxbothend{game-related}{symbols}
 
 
-\section{Other symbols}
+\chapter{Geographical Symbols}
+\label{geographical-symbols}
+\idxbothbegin{geographical}{symbols}
+\tablesections
+
+The symbols in this chapter relate in some manner to geography.
+\ifcomplete
+In particular, the following tables present both maps and
+national and regional flags.
+\fi
+
+
+\begin{longsymtable}[COE]{\COE\ Country Maps}
+\ltidxboth{European}{countries}
+\ltindex{symbols>countries}
+\ltindex{symbols>maps}
+\ltsubindex{maps}{European countries}
+\ltindex{land masses}
+\label{CountriesOfEurope}
+\renewcommand{\arraystretch}{2}   % Prevent tall symbols from touching.
+\begin{longtable}{@{}ll@{\hspace{4em}}ll@{}}
+\multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{4}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\Kcoe\Albania       & \Kcoe\Latvia        \\
+\Kcoe\Andorra       & \Kcoe\Liechtenstein \\
+\Kcoe\Austria       & \Kcoe\Lithuania     \\
+\Kcoe\Belarus       & \Kcoe\Luxembourg    \\
+\Kcoe\Belgium       & \Kcoe\Macedonia     \\
+\Kcoe\Bosnia        & \Kcoe\Malta         \\
+\Kcoe\Bulgaria      & \Kcoe\Moldova       \\
+\Kcoe\Croatia       & \Kcoe\Montenegro    \\
+\Kcoe\Czechia       & \Kcoe\Netherlands   \\
+\Kcoe\Denmark       & \Kcoe\Norway        \\
+\Kcoe\Estonia       & \Kcoe\Poland        \\
+\Kcoe\Finland       & \Kcoe\Portugal      \\
+\Kcoe\France        & \Kcoe\Romania       \\
+\Kcoe\Germany       & \Kcoe\Serbia        \\
+\Kcoe\GreatBritain  & \Kcoe\Slovakia      \\
+\Kcoe\Greece        & \Kcoe\Slovenia      \\
+\Kcoe\Hungary       & \Kcoe\Spain         \\
+\Kcoe\Iceland       & \Kcoe\Sweden        \\
+\Kcoe\Ireland       & \Kcoe\Switzerland   \\
+\Kcoe\Italy         &                     \\
+\end{longtable}
+
+\bigskip
+
+\begin{tablenote}
+  The preceding commands work only when the \texttt{CountriesOfEurope}
+  \fntfam[CountriesOfEurope] is active.  For convenience, the package
+  defines a \cmd{\countriesofeuropefamily} command that switches to
+  that \fntfam.
+
+  By default, countries are drawn in the current font size.  Hence,
+  ``\verb|{\countriesofeuropefamily\France}|'' draws a nearly
+  unrecognizable ``{\countriesofeuropefamily\France}''.  For clarity
+  of presentation, \ref{CountriesOfEurope} scales each glyph to
+  72\,pt.\ via an explicit \verb|\fontsize{72}{72}|.  An alternative
+  is to specify the \optname{CountriesOfEurope}{scaled} package option
+  to scale all country glyphs by a given factor of the font size.
+\end{tablenote}
+\end{longsymtable}
+
+
+\begin{longsymtable}[ROJUD]{\ROJUD\ Maps of Romanian Counties}
+\ltidxboth{Romanian}{counties}
+\ltindex{symbols>counties}
+\ltindex{symbols>maps}
+\ltsubindex{maps}{Romanian counties}
+\ltindex{land masses}
+\label{romanian-counties}
+\renewcommand{\arraystretch}{2}   % Prevent tall symbols from touching.
+\begin{longtable}{@{}ll*2{@{\hspace{4em}}ll}@{}}
+\multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{6}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\Krojud\jAB & \Krojud\jCT & \Krojud\jMS \\
+\Krojud\jAG & \Krojud\jCV & \Krojud\jNT \\
+\Krojud\jAR & \Krojud\jDB & \Krojud\jOT \\
+\Krojud\jBC & \Krojud\jDJ & \Krojud\jPH \\
+\Krojud\jBH & \Krojud\jGJ & \Krojud\jSB \\
+\Krojud\jBI & \Krojud\jGL & \Krojud\jSJ \\
+\Krojud\jBN & \Krojud\jGR & \Krojud\jSM \\
+\Krojud\jBR & \Krojud\jHD & \Krojud\jSV \\
+\Krojud\jBT & \Krojud\jHR & \Krojud\jTL \\
+\Krojud\jBV & \Krojud\jIF & \Krojud\jTM \\
+\Krojud\jBZ & \Krojud\jIL & \Krojud\jTR \\
+\Krojud\jCJ & \Krojud\jIS & \Krojud\jVL \\
+\Krojud\jCL & \Krojud\jMH & \Krojud\jVN \\
+\Krojud\jCS & \Krojud\jMM & \Krojud\jVS \\
+\end{longtable}
+\bigskip
+
+\begin{tablenote}
+  The preceding commands work only when the \texttt{rojud}
+  \fntfam[rojud] is active.  Use the OT1 \fntenc[OT1] in \pdflatex and
+  the TU \fntenc[TU] in \xelatex.  (\ROJUD\ requires one of those two
+  \tex\ engines.)  For example,
+  ``\verb|{\usefont{OT1}{rojud}{m}{n}\jBI}|'' draws
+  Bucharest\index{Bucharest}.\footnote{technically a municipality, not
+    a county}
+\end{tablenote}
+\end{longsymtable}
+
+
+\begin{symtable}[EUFLAG]{\EUFLAG\ European Union Flag}
+\index{flags}
+\label{euflag}
+\begin{tabular}{ll}
+\K\euflag \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  The \texttt{\string\euflag} flag is drawn using the
+  \latex\ \texttt{picture} environment.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{longsymtable}[WFLAGS]{\WFLAGS\ Flags of Sovereign States}
+\ltindex{flags}
+\label{worldflags-sovereign}
+\renewcommand{\arraystretch}{1.25}  % Keep flags from touching.
+\begin{longtable}{*4{ll}}
+\multicolumn{8}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{8}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\Twflag{AD} & \Twflag{EC} & \Twflag{LC} & \Twflag{RW} \\
+\Twflag{AE} & \Twflag{EE} & \Twflag{LI} & \Twflag{SA} \\
+\Twflag{AF} & \Twflag{EG} & \Twflag{LK} & \Twflag{SB} \\
+\Twflag{AG} & \Twflag{ER} & \Twflag{LR} & \Twflag{SC} \\
+\Twflag{AL} & \Twflag{ES} & \Twflag{LS} & \Twflag{SD} \\
+\Twflag{AM} & \Twflag{ET} & \Twflag{LT} & \Twflag{SE} \\
+\Twflag{AO} & \Twflag{FI} & \Twflag{LU} & \Twflag{SG} \\
+\Twflag{AR} & \Twflag{FJ} & \Twflag{LV} & \Twflag{SI} \\
+\Twflag{AT} & \Twflag{FM} & \Twflag{LY} & \Twflag{SK} \\
+\Twflag{AU} & \Twflag{FR} & \Twflag{MA} & \Twflag{SL} \\
+\Twflag{AZ} & \Twflag{GA} & \Twflag{MD} & \Twflag{SM} \\
+\Twflag{BA} & \Twflag{GB} & \Twflag{ME} & \Twflag{SN} \\
+\Twflag{BB} & \Twflag{GD} & \Twflag{MG} & \Twflag{SO} \\
+\Twflag{BD} & \Twflag{GE} & \Twflag{MH} & \Twflag{SR} \\
+\Twflag{BE} & \Twflag{GH} & \Twflag{MK} & \Twflag{SS} \\
+\Twflag{BF} & \Twflag{GM} & \Twflag{ML} & \Twflag{ST} \\
+\Twflag{BG} & \Twflag{GN} & \Twflag{MM} & \Twflag{SV} \\
+\Twflag{BH} & \Twflag{GQ} & \Twflag{MN} & \Twflag{SY} \\
+\Twflag{BI} & \Twflag{GR} & \Twflag{MR} & \Twflag{SZ} \\
+\Twflag{BJ} & \Twflag{GT} & \Twflag{MT} & \Twflag{TD} \\
+\Twflag{BN} & \Twflag{GW} & \Twflag{MU} & \Twflag{TG} \\
+\Twflag{BO} & \Twflag{GY} & \Twflag{MV} & \Twflag{TH} \\
+\Twflag{BR} & \Twflag{HN} & \Twflag{MW} & \Twflag{TJ} \\
+\Twflag{BS} & \Twflag{HR} & \Twflag{MX} & \Twflag{TL} \\
+\Twflag{BT} & \Twflag{HT} & \Twflag{MY} & \Twflag{TM} \\
+\Twflag{BW} & \Twflag{HU} & \Twflag{MZ} & \Twflag{TN} \\
+\Twflag{BY} & \Twflag{ID} & \Twflag{NA} & \Twflag{TO} \\
+\Twflag{BZ} & \Twflag{IE} & \Twflag{NE} & \Twflag{TR} \\
+\Twflag{CA} & \Twflag{IL} & \Twflag{NG} & \Twflag{TT} \\
+\Twflag{CD} & \Twflag{IN} & \Twflag{NI} & \Twflag{TV} \\
+\Twflag{CF} & \Twflag{IQ} & \Twflag{NL} & \Twflag{TW} \\
+\Twflag{CG} & \Twflag{IR} & \Twflag{NO} & \Twflag{TZ} \\
+\Twflag{CH} & \Twflag{IS} & \Twflag{NP} & \Twflag{UA} \\
+\Twflag{CI} & \Twflag{IT} & \Twflag{NR} & \Twflag{UG} \\
+\Twflag{CK} & \Twflag{JM} & \Twflag{NZ} & \Twflag{US} \\
+\Twflag{CL} & \Twflag{JO} & \Twflag{OM} & \Twflag{UY} \\
+\Twflag{CM} & \Twflag{JP} & \Twflag{PA} & \Twflag{UZ} \\
+\Twflag{CN} & \Twflag{KE} & \Twflag{PE} & \Twflag{VA} \\
+\Twflag{CO} & \Twflag{KG} & \Twflag{PG} & \Twflag{VC} \\
+\Twflag{CR} & \Twflag{KH} & \Twflag{PH} & \Twflag{VE} \\
+\Twflag{CU} & \Twflag{KI} & \Twflag{PK} & \Twflag{VN} \\
+\Twflag{CV} & \Twflag{KM} & \Twflag{PL} & \Twflag{VU} \\
+\Twflag{CY} & \Twflag{KN} & \Twflag{PS} & \Twflag{WS} \\
+\Twflag{CZ} & \Twflag{KO} & \Twflag{PT} & \Twflag{YE} \\
+\Twflag{DE} & \Twflag{KP} & \Twflag{PW} & \Twflag{ZA} \\
+\Twflag{DJ} & \Twflag{KR} & \Twflag{PY} & \Twflag{ZM} \\
+\Twflag{DK} & \Twflag{KW} & \Twflag{QA} & \Twflag{ZW} \\
+\Twflag{DM} & \Twflag{KZ} & \Twflag{RO} &             \\
+\Twflag{DO} & \Twflag{LA} & \Twflag{RS} &             \\
+\Twflag{DZ} & \Twflag{LB} & \Twflag{RU} &             \\
+\end{longtable}
+
+\begin{tablenote}
+  \worldflagsmessage.
+\end{tablenote}
+\end{longsymtable}
+
+
+\begin{symtable}[WFLAGS]{\WFLAGS\ Flags of Non-Sovereign Countries and Territories}
+\index{flags}
+\label{worldflags-territories}
+\renewcommand{\arraystretch}{1.25}  % Keep flags from touching.
+\begin{tabular}{*3{ll}}
+\Twflag{Abkhazia} & \Twflag{GF} & \Twflag{PR}           \\
+\Twflag{AQ}       & \Twflag{GG} & \Twflag{RE}           \\
+\Twflag{Artsakh}  & \Twflag{GI} & \Twflag{Saba}         \\
+\Twflag{AX}       & \Twflag{GL} & \Twflag{Somaliland}   \\
+\Twflag{Bonaire}  & \Twflag{IM} & \Twflag{StEustasius}  \\
+\Twflag{EH}       & \Twflag{JE} & \Twflag{Tibet}        \\
+\Twflag{FO}       & \Twflag{NU} & \Twflag{Transnistria} \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \worldflagsmessage.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[WFLAGS]{\WFLAGS\ Flags of Austrian Federal States}
+\index{flags}
+\label{worldflags-austria}
+\renewcommand{\arraystretch}{1.25}  % Keep flags from touching.
+\begin{tabular}{*3{ll}}
+\Twflag{AT-B} & \Twflag{AT-O}  & \Twflag{AT-T} \\
+\Twflag{AT-K} & \Twflag{AT-S}  & \Twflag{AT-V} \\
+\Twflag{AT-N} & \Twflag{AT-St} & \Twflag{AT-W} \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \worldflagsmessage.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{longsymtable}[TWEM]{\TWEM\ Flags}
+\ltindex{flags}
+\ltindex{emoji}
+\label{twemoji-flags}
+\begin{longtable}{*2{lp{\twemwidth}}}
+\multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{4}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\Ttwem{flag: {\AA}land Islands}{1f1e6-1f1fd}                     & \Ttwem{flag: Lesotho}{1f1f1-1f1f8}                                 \\
+\Ttwem{flag: Afghanistan}{1f1e6-1f1eb}                           & \Ttwem{flag: Liberia}{1f1f1-1f1f7}                                 \\
+\Ttwem{flag: Albania}{1f1e6-1f1f1}                               & \Ttwem{flag: Libya}{1f1f1-1f1fe}                                   \\
+\Ttwem{flag: Algeria}{1f1e9-1f1ff}                               & \Ttwem{flag: Liechtenstein}{1f1f1-1f1ee}                           \\
+\Ttwem{flag: American Samoa}{1f1e6-1f1f8}                        & \Ttwem{flag: Lithuania}{1f1f1-1f1f9}                               \\
+\Ttwem{flag: Andorra}{1f1e6-1f1e9}                               & \Ttwem{flag: Luxembourg}{1f1f1-1f1fa}                              \\
+\Ttwem{flag: Angola}{1f1e6-1f1f4}                                & \Ttwem{flag: Macao SAR China}{1f1f2-1f1f4}                         \\
+\Ttwem{flag: Anguilla}{1f1e6-1f1ee}                              & \Ttwem{flag: Madagascar}{1f1f2-1f1ec}                              \\
+\Ttwem{flag: Antarctica}{1f1e6-1f1f6}                            & \Ttwem{flag: Malawi}{1f1f2-1f1fc}                                  \\
+\Ttwem{flag: Antigua \& Barbuda}{1f1e6-1f1ec}                    & \Ttwem{flag: Malaysia}{1f1f2-1f1fe}                                \\
+\Ttwem{flag: Argentina}{1f1e6-1f1f7}                             & \Ttwem{flag: Maldives}{1f1f2-1f1fb}                                \\
+\Ttwem{flag: Armenia}{1f1e6-1f1f2}                               & \Ttwem{flag: Mali}{1f1f2-1f1f1}                                    \\
+\Ttwem{flag: Aruba}{1f1e6-1f1fc}                                 & \Ttwem{flag: Malta}{1f1f2-1f1f9}                                   \\
+\Ttwem{flag: Ascension Island}{1f1e6-1f1e8}                      & \Ttwem{flag: Marshall Islands}{1f1f2-1f1ed}                        \\
+\Ttwem{flag: Australia}{1f1e6-1f1fa}                             & \Ttwem{flag: Martinique}{1f1f2-1f1f6}                              \\
+\Ttwem{flag: Austria}{1f1e6-1f1f9}                               & \Ttwem{flag: Mauritania}{1f1f2-1f1f7}                              \\
+\Ttwem{flag: Azerbaijan}{1f1e6-1f1ff}                            & \Ttwem{flag: Mauritius}{1f1f2-1f1fa}                               \\
+\Ttwem{flag: Bahamas}{1f1e7-1f1f8}                               & \Ttwem{flag: Mayotte}{1f1fe-1f1f9}                                 \\
+\Ttwem{flag: Bahrain}{1f1e7-1f1ed}                               & \Ttwem{flag: Mexico}{1f1f2-1f1fd}                                  \\
+\Ttwem{flag: Bangladesh}{1f1e7-1f1e9}                            & \Ttwem{flag: Micronesia}{1f1eb-1f1f2}                              \\
+\Ttwem{flag: Barbados}{1f1e7-1f1e7}                              & \Ttwem{flag: Moldova}{1f1f2-1f1e9}                                 \\
+\Ttwem{flag: Belarus}{1f1e7-1f1fe}                               & \Ttwem{flag: Monaco}{1f1f2-1f1e8}                                  \\
+\Ttwem{flag: Belgium}{1f1e7-1f1ea}                               & \Ttwem{flag: Mongolia}{1f1f2-1f1f3}                                \\
+\Ttwem{flag: Belize}{1f1e7-1f1ff}                                & \Ttwem{flag: Montenegro}{1f1f2-1f1ea}                              \\
+\Ttwem{flag: Benin}{1f1e7-1f1ef}                                 & \Ttwem{flag: Montserrat}{1f1f2-1f1f8}                              \\
+\Ttwem{flag: Bermuda}{1f1e7-1f1f2}                               & \Ttwem{flag: Morocco}{1f1f2-1f1e6}                                 \\
+\Ttwem{flag: Bhutan}{1f1e7-1f1f9}                                & \Ttwem{flag: Mozambique}{1f1f2-1f1ff}                              \\
+\Ttwem{flag: Bolivia}{1f1e7-1f1f4}                               & \Ttwem{flag: Myanmar (Burma)}{1f1f2-1f1f2}                         \\
+\Ttwem{flag: Bosnia \& Herzegovina}{1f1e7-1f1e6}                 & \Ttwem{flag: Namibia}{1f1f3-1f1e6}                                 \\
+\Ttwem{flag: Botswana}{1f1e7-1f1fc}                              & \Ttwem{flag: Nauru}{1f1f3-1f1f7}                                   \\
+\Ttwem{flag: Bouvet Island}{1f1e7-1f1fb}                         & \Ttwem{flag: Nepal}{1f1f3-1f1f5}                                   \\
+\Ttwem{flag: Brazil}{1f1e7-1f1f7}                                & \Ttwem{flag: Netherlands}{1f1f3-1f1f1}                             \\
+\Ttwem{flag: British Indian Ocean Territory}{1f1ee-1f1f4}        & \Ttwem{flag: New Caledonia}{1f1f3-1f1e8}                           \\
+\Ttwem{flag: British Virgin Islands}{1f1fb-1f1ec}                & \Ttwem{flag: New Zealand}{1f1f3-1f1ff}                             \\
+\Ttwem{flag: Brunei}{1f1e7-1f1f3}                                & \Ttwem{flag: Nicaragua}{1f1f3-1f1ee}                               \\
+\Ttwem{flag: Bulgaria}{1f1e7-1f1ec}                              & \Ttwem{flag: Nigeria}{1f1f3-1f1ec}                                 \\
+\Ttwem{flag: Burkina Faso}{1f1e7-1f1eb}                          & \Ttwem{flag: Niger}{1f1f3-1f1ea}                                   \\
+\Ttwem{flag: Burundi}{1f1e7-1f1ee}                               & \Ttwem{flag: Niue}{1f1f3-1f1fa}                                    \\
+\Ttwem{flag: Cambodia}{1f1f0-1f1ed}                              & \Ttwem{flag: Norfolk Island}{1f1f3-1f1eb}                          \\
+\Ttwem{flag: Cameroon}{1f1e8-1f1f2}                              & \Ttwem{flag: North Korea}{1f1f0-1f1f5}                             \\
+\Ttwem{flag: Canada}{1f1e8-1f1e6}                                & \Ttwem{flag: North Macedonia}{1f1f2-1f1f0}                         \\
+\Ttwem{flag: Canary Islands}{1f1ee-1f1e8}                        & \Ttwem{flag: Northern Mariana Islands}{1f1f2-1f1f5}                \\
+\Ttwem{flag: Cape Verde}{1f1e8-1f1fb}                            & \Ttwem{flag: Norway}{1f1f3-1f1f4}                                  \\
+\Ttwem{flag: Caribbean Netherlands}{1f1e7-1f1f6}                 & \Ttwem{flag: Oman}{1f1f4-1f1f2}                                    \\
+\Ttwem{flag: Cayman Islands}{1f1f0-1f1fe}                        & \Ttwem{flag: Pakistan}{1f1f5-1f1f0}                                \\
+\Ttwem{flag: Central African Republic}{1f1e8-1f1eb}              & \Ttwem{flag: Palau}{1f1f5-1f1fc}                                   \\
+\Ttwem{flag: Ceuta \& Melilla}{1f1ea-1f1e6}                      & \Ttwem{flag: Palestinian Territories}{1f1f5-1f1f8}                 \\
+\Ttwem{flag: Chad}{1f1f9-1f1e9}                                  & \Ttwem{flag: Panama}{1f1f5-1f1e6}                                  \\
+\Ttwem{flag: Chile}{1f1e8-1f1f1}                                 & \Ttwem{flag: Papua New Guinea}{1f1f5-1f1ec}                        \\
+\Ttwem{flag: China}{1f1e8-1f1f3}                                 & \Ttwem{flag: Paraguay}{1f1f5-1f1fe}                                \\
+\Ttwem{flag: Christmas Island}{1f1e8-1f1fd}                      & \Ttwem{flag: Peru}{1f1f5-1f1ea}                                    \\
+\Ttwem{flag: Clipperton Island}{1f1e8-1f1f5}                     & \Ttwem{flag: Philippines}{1f1f5-1f1ed}                             \\
+\Ttwem{flag: Cocos (Keeling) Islands}{1f1e8-1f1e8}               & \Ttwem{flag: Pitcairn Islands}{1f1f5-1f1f3}                        \\
+\Ttwem{flag: Colombia}{1f1e8-1f1f4}                              & \Ttwem{flag: Poland}{1f1f5-1f1f1}                                  \\
+\Ttwem{flag: Comoros}{1f1f0-1f1f2}                               & \Ttwem{flag: Portugal}{1f1f5-1f1f9}                                \\
+\Ttwem{flag: Congo - Brazzaville}{1f1e8-1f1ec}                   & \Ttwem{flag: Puerto Rico}{1f1f5-1f1f7}                             \\
+\Ttwem{flag: Congo - Kinshasa}{1f1e8-1f1e9}                      & \Ttwem{flag: Qatar}{1f1f6-1f1e6}                                   \\
+\Ttwem{flag: Cook Islands}{1f1e8-1f1f0}                          & \Ttwem{flag: Romania}{1f1f7-1f1f4}                                 \\
+\Ttwem{flag: Costa Rica}{1f1e8-1f1f7}                            & \Ttwem{flag: Russia}{1f1f7-1f1fa}                                  \\
+\Ttwem{flag: Croatia}{1f1ed-1f1f7}                               & \Ttwem{flag: Rwanda}{1f1f7-1f1fc}                                  \\
+\Ttwem{flag: Cuba}{1f1e8-1f1fa}                                  & \Ttwem{flag: Réunion}{1f1f7-1f1ea}                                 \\
+\Ttwem{flag: Curaçao}{1f1e8-1f1fc}                               & \Ttwem{flag: Samoa}{1f1fc-1f1f8}                                   \\
+\Ttwem{flag: Cyprus}{1f1e8-1f1fe}                                & \Ttwem{flag: San Marino}{1f1f8-1f1f2}                              \\
+\Ttwem{flag: Czechia}{1f1e8-1f1ff}                               & \Ttwem{flag: Saudi Arabia}{1f1f8-1f1e6}                            \\
+\Ttwem{flag: Côte d'Ivoire}{1f1e8-1f1ee}                         & \Ttwem{flag: Scotland}{1f3f4-e0067-e0062-e0073-e0063-e0074-e007f}  \\
+\Ttwem{flag: Denmark}{1f1e9-1f1f0}                               & \Ttwem{flag: Senegal}{1f1f8-1f1f3}                                 \\
+\Ttwem{flag: Diego Garcia}{1f1e9-1f1ec}                          & \Ttwem{flag: Serbia}{1f1f7-1f1f8}                                  \\
+\Ttwem{flag: Djibouti}{1f1e9-1f1ef}                              & \Ttwem{flag: Seychelles}{1f1f8-1f1e8}                              \\
+\Ttwem{flag: Dominican Republic}{1f1e9-1f1f4}                    & \Ttwem{flag: Sierra Leone}{1f1f8-1f1f1}                            \\
+\Ttwem{flag: Dominica}{1f1e9-1f1f2}                              & \Ttwem{flag: Singapore}{1f1f8-1f1ec}                               \\
+\Ttwem{flag: Ecuador}{1f1ea-1f1e8}                               & \Ttwem{flag: Sint Maarten}{1f1f8-1f1fd}                            \\
+\Ttwem{flag: Egypt}{1f1ea-1f1ec}                                 & \Ttwem{flag: Slovakia}{1f1f8-1f1f0}                                \\
+\Ttwem{flag: El Salvador}{1f1f8-1f1fb}                           & \Ttwem{flag: Slovenia}{1f1f8-1f1ee}                                \\
+\Ttwem{flag: England}{1f3f4-e0067-e0062-e0065-e006e-e0067-e007f} & \Ttwem{flag: Solomon Islands}{1f1f8-1f1e7}                         \\
+\Ttwem{flag: Equatorial Guinea}{1f1ec-1f1f6}                     & \Ttwem{flag: Somalia}{1f1f8-1f1f4}                                 \\
+\Ttwem{flag: Eritrea}{1f1ea-1f1f7}                               & \Ttwem{flag: South Africa}{1f1ff-1f1e6}                            \\
+\Ttwem{flag: Estonia}{1f1ea-1f1ea}                               & \Ttwem{flag: South Georgia \& South Sandwich Islands}{1f1ec-1f1f8} \\
+\Ttwem{flag: Eswatini}{1f1f8-1f1ff}                              & \Ttwem{flag: South Korea}{1f1f0-1f1f7}                             \\
+\Ttwem{flag: Ethiopia}{1f1ea-1f1f9}                              & \Ttwem{flag: South Sudan}{1f1f8-1f1f8}                             \\
+\Ttwem{flag: European Union}{1f1ea-1f1fa}                        & \Ttwem{flag: Spain}{1f1ea-1f1f8}                                   \\
+\Ttwem{flag: Falkland Islands}{1f1eb-1f1f0}                      & \Ttwem{flag: Sri Lanka}{1f1f1-1f1f0}                               \\
+\Ttwem{flag: Faroe Islands}{1f1eb-1f1f4}                         & \Ttwem{flag: St. Barthélemy}{1f1e7-1f1f1}                          \\
+\Ttwem{flag: Fiji}{1f1eb-1f1ef}                                  & \Ttwem{flag: St. Helena}{1f1f8-1f1ed}                              \\
+\Ttwem{flag: Finland}{1f1eb-1f1ee}                               & \Ttwem{flag: St. Kitts \& Nevis}{1f1f0-1f1f3}                      \\
+\Ttwem{flag: France}{1f1eb-1f1f7}                                & \Ttwem{flag: St. Lucia}{1f1f1-1f1e8}                               \\
+\Ttwem{flag: French Guiana}{1f1ec-1f1eb}                         & \Ttwem{flag: St. Martin}{1f1f2-1f1eb}                              \\
+\Ttwem{flag: French Polynesia}{1f1f5-1f1eb}                      & \Ttwem{flag: St. Pierre \& Miquelon}{1f1f5-1f1f2}                  \\
+\Ttwem{flag: French Southern Territories}{1f1f9-1f1eb}           & \Ttwem{flag: St. Vincent \& Grenadines}{1f1fb-1f1e8}               \\
+\Ttwem{flag: Gabon}{1f1ec-1f1e6}                                 & \Ttwem{flag: Sudan}{1f1f8-1f1e9}                                   \\
+\Ttwem{flag: Gambia}{1f1ec-1f1f2}                                & \Ttwem{flag: Suriname}{1f1f8-1f1f7}                                \\
+\Ttwem{flag: Georgia}{1f1ec-1f1ea}                               & \Ttwem{flag: Svalbard \& Jan Mayen}{1f1f8-1f1ef}                   \\
+\Ttwem{flag: Germany}{1f1e9-1f1ea}                               & \Ttwem{flag: Sweden}{1f1f8-1f1ea}                                  \\
+\Ttwem{flag: Ghana}{1f1ec-1f1ed}                                 & \Ttwem{flag: Switzerland}{1f1e8-1f1ed}                             \\
+\Ttwem{flag: Gibraltar}{1f1ec-1f1ee}                             & \Ttwem{flag: Syria}{1f1f8-1f1fe}                                   \\
+\Ttwem{flag: Greece}{1f1ec-1f1f7}                                & \Ttwem{flag: São Tomé \& Príncipe}{1f1f8-1f1f9}                    \\
+\Ttwem{flag: Greenland}{1f1ec-1f1f1}                             & \Ttwem{flag: Taiwan}{1f1f9-1f1fc}                                  \\
+\Ttwem{flag: Grenada}{1f1ec-1f1e9}                               & \Ttwem{flag: Tajikistan}{1f1f9-1f1ef}                              \\
+\Ttwem{flag: Guadeloupe}{1f1ec-1f1f5}                            & \Ttwem{flag: Tanzania}{1f1f9-1f1ff}                                \\
+\Ttwem{flag: Guam}{1f1ec-1f1fa}                                  & \Ttwem{flag: Thailand}{1f1f9-1f1ed}                                \\
+\Ttwem{flag: Guatemala}{1f1ec-1f1f9}                             & \Ttwem{flag: Timor-Leste}{1f1f9-1f1f1}                             \\
+\Ttwem{flag: Guernsey}{1f1ec-1f1ec}                              & \Ttwem{flag: Togo}{1f1f9-1f1ec}                                    \\
+\Ttwem{flag: Guinea-Bissau}{1f1ec-1f1fc}                         & \Ttwem{flag: Tokelau}{1f1f9-1f1f0}                                 \\
+\Ttwem{flag: Guinea}{1f1ec-1f1f3}                                & \Ttwem{flag: Tonga}{1f1f9-1f1f4}                                   \\
+\Ttwem{flag: Guyana}{1f1ec-1f1fe}                                & \Ttwem{flag: Trinidad \& Tobago}{1f1f9-1f1f9}                      \\
+\Ttwem{flag: Haiti}{1f1ed-1f1f9}                                 & \Ttwem{flag: Tristan da Cunha}{1f1f9-1f1e6}                        \\
+\Ttwem{flag: Heard \& McDonald Islands}{1f1ed-1f1f2}             & \Ttwem{flag: Tunisia}{1f1f9-1f1f3}                                 \\
+\Ttwem{flag: Honduras}{1f1ed-1f1f3}                              & \Ttwem{flag: Turkey}{1f1f9-1f1f7}                                  \\
+\Ttwem{flag: Hong Kong SAR China}{1f1ed-1f1f0}                   & \Ttwem{flag: Turkmenistan}{1f1f9-1f1f2}                            \\
+\Ttwem{flag: Hungary}{1f1ed-1f1fa}                               & \Ttwem{flag: Turks \& Caicos Islands}{1f1f9-1f1e8}                 \\
+\Ttwem{flag: Iceland}{1f1ee-1f1f8}                               & \Ttwem{flag: Tuvalu}{1f1f9-1f1fb}                                  \\
+\Ttwem{flag: India}{1f1ee-1f1f3}                                 & \Ttwem{flag: U.S. Outlying Islands}{1f1fa-1f1f2}                   \\
+\Ttwem{flag: Indonesia}{1f1ee-1f1e9}                             & \Ttwem{flag: U.S. Virgin Islands}{1f1fb-1f1ee}                     \\
+\Ttwem{flag: Iran}{1f1ee-1f1f7}                                  & \Ttwem{flag: Uganda}{1f1fa-1f1ec}                                  \\
+\Ttwem{flag: Iraq}{1f1ee-1f1f6}                                  & \Ttwem{flag: Ukraine}{1f1fa-1f1e6}                                 \\
+\Ttwem{flag: Ireland}{1f1ee-1f1ea}                               & \Ttwem{flag: United Arab Emirates}{1f1e6-1f1ea}                    \\
+\Ttwem{flag: Isle of Man}{1f1ee-1f1f2}                           & \Ttwem{flag: United Kingdom}{1f1ec-1f1e7}                          \\
+\Ttwem{flag: Israel}{1f1ee-1f1f1}                                & \Ttwem{flag: United Nations}{1f1fa-1f1f3}                          \\
+\Ttwem{flag: Italy}{1f1ee-1f1f9}                                 & \Ttwem{flag: United States}{1f1fa-1f1f8}                           \\
+\Ttwem{flag: Jamaica}{1f1ef-1f1f2}                               & \Ttwem{flag: Uruguay}{1f1fa-1f1fe}                                 \\
+\Ttwem{flag: Japan}{1f1ef-1f1f5}                                 & \Ttwem{flag: Uzbekistan}{1f1fa-1f1ff}                              \\
+\Ttwem{flag: Jersey}{1f1ef-1f1ea}                                & \Ttwem{flag: Vanuatu}{1f1fb-1f1fa}                                 \\
+\Ttwem{flag: Jordan}{1f1ef-1f1f4}                                & \Ttwem{flag: Vatican City}{1f1fb-1f1e6}                            \\
+\Ttwem{flag: Kazakhstan}{1f1f0-1f1ff}                            & \Ttwem{flag: Venezuela}{1f1fb-1f1ea}                               \\
+\Ttwem{flag: Kenya}{1f1f0-1f1ea}                                 & \Ttwem{flag: Vietnam}{1f1fb-1f1f3}                                 \\
+\Ttwem{flag: Kiribati}{1f1f0-1f1ee}                              & \Ttwem{flag: Wales}{1f3f4-e0067-e0062-e0077-e006c-e0073-e007f}     \\
+\Ttwem{flag: Kosovo}{1f1fd-1f1f0}                                & \Ttwem{flag: Wallis \& Futuna}{1f1fc-1f1eb}                        \\
+\Ttwem{flag: Kuwait}{1f1f0-1f1fc}                                & \Ttwem{flag: Western Sahara}{1f1ea-1f1ed}                          \\
+\Ttwem{flag: Kyrgyzstan}{1f1f0-1f1ec}                            & \Ttwem{flag: Yemen}{1f1fe-1f1ea}                                   \\
+\Ttwem{flag: Laos}{1f1f1-1f1e6}                                  & \Ttwem{flag: Zambia}{1f1ff-1f1f2}                                  \\
+\Ttwem{flag: Latvia}{1f1f1-1f1fb}                                & \Ttwem{flag: Zimbabwe}{1f1ff-1f1fc}                                \\
+\Ttwem{flag: Lebanon}{1f1f1-1f1e7}                               &                                                                    \\
+\end{longtable}
+
+\begin{tablenote}
+  \twemojismessage.
+\end{tablenote}
+\end{longsymtable}
+
+
+\idxbothend{geographical}{symbols}
+
+
+
+\chapter{Other symbols}
 \label{other-symbols}
 \idxbothbegin{miscellaneous}{symbols}
-\tablesubsections
+\tablesections
 
 The following are all the symbols that didn't fit neatly or
-unambiguously into any of the previous sections.
+unambiguously into any of the previous chapters.
 \ifcomplete
   (Do weather symbols belong under ``Science and technology''?  Should
   tally markers be considered ``mathematics''?)  While some of the
@@ -17817,6 +21046,11 @@
 \index{check marks}
 \index{rhombuses}
 \index{suns}
+\index{sun=sun (\sun)}
+\index{lightning}
+\index{arrows}
+\index{bell=bell (\bell)}
+\index{clock=clock (\WASYclock)}
 \label{wasy-general}
 \begin{tabular}{*4{ll}}
 \K\ataribox          & \K\diameter    & \K\lightning  & \K\sun         \\
@@ -17900,80 +21134,16 @@
 \end{longsymtable}
 
 
-\begin{longsymtable}[TWEM]{\TWEM\ Transportation Emoji}
-\ltidxboth{transportation}{symbols}
-\ltindex{emoji}
-\label{twemoji-transport}
-\begin{longtable}{*2{ll}}
-\multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
-\endhead
-\endfirsthead
-\\[3ex]
-\multicolumn{4}{r}{\small\textit{(continued on next page)}}
-\endfoot
-\endlastfoot
-\Ttwem{1f6f0}{1f6f0}                                  & \Ttwem{mountain railway}{1f69e}                         \\
-\Ttwem{aerial tramway}{1f6a1}                         & \Ttwem{no bicycles}{1f6b3}                              \\
-\Ttwem{airplane}{2708}                                & \Ttwem{oncoming automobile}{1f698}                      \\
-\Ttwem{airplane arrival}{1f6ec}                       & \Ttwem{oncoming bus}{1f68d}                             \\
-\Ttwem{airplane departure}{1f6eb}                     & \Ttwem{oncoming police car}{1f694}                      \\
-\Ttwem{ambulance}{1f691}                              & \Ttwem{oncoming taxi}{1f696}                            \\
-\Ttwem{articulated lorry}{1f69b}                      & \Ttwem{passenger ship}{1f6f3}                           \\
-\Ttwem{auto rickshaw}{1f6fa}                          & \Ttwem{passport control}{1f6c2}                         \\
-\Ttwem{automobile}{1f697}                             & \Ttwem{person biking}{1f6b4}$^*$                        \\
-\Ttwem{baggage claim}{1f6c4}                          & \Ttwem{person mountain biking}{1f6b5}$^*$               \\
-\Ttwem{bicycle}{1f6b2}                                & \Ttwem{person rowing boat}{1f6a3}$^*$                   \\
-\Ttwem{bullet train}{1f685}                           & \Ttwem{pickup truck}{1f6fb}                             \\
-\Ttwem{bus}{1f68c}                                    & \Ttwem{police car}{1f693}                               \\
-\Ttwem{bus stop}{1f68f}                               & \Ttwem{police car light}{1f6a8}                         \\
-\Ttwem{canoe}{1f6f6}                                  & \Ttwem{racing car}{1f3ce}                               \\
-\Ttwem{construction}{1f6a7}                           & \Ttwem{railway car}{1f683}                              \\
-\Ttwem{customs}{1f6c3}                                & \Ttwem{railway track}{1f6e4}                            \\
-\Ttwem{delivery truck}{1f69a}                         & \Ttwem{rocket}{1f680}                                   \\
-\Ttwem{fire engine}{1f692}                            & \Ttwem{roller skate}{1f6fc}                             \\
-\Ttwem{flying saucer}{1f6f8}                          & \Ttwem{ship}{1f6a2}                                     \\
-\Ttwem{helicopter}{1f681}                             & \Ttwem{skateboard}{1f6f9}                               \\
-\Ttwem{high-speed train}{1f684}                       & \Ttwem{sled}{1f6f7}                                     \\
-\Ttwem{horizontal traffic light}{1f6a5}               & \Ttwem{small airplane}{1f6e9}                           \\
-\Ttwem{kick scooter}{1f6f4}                           & \Ttwem{speedboat}{1f6a4}                                \\
-\Ttwem{left luggage}{1f6c5}                           & \Ttwem{sport utility vehicle}{1f699}                    \\
-\Ttwem{light rail}{1f688}                             & \Ttwem{station}{1f689}                                  \\
-\Ttwem{locomotive}{1f682}                             & \Ttwem{suspension railway}{1f69f}                       \\
-\Ttwem{man biking}{1f6b4-200d-2642-fe0f}$^*$          & \Ttwem{taxi}{1f695}                                     \\
-\Ttwem{man mountain biking}{1f6b5-200d-2642-fe0f}$^*$ & \Ttwem{tractor}{1f69c}                                  \\
-\Ttwem{man rowing boat}{1f6a3-200d-2642-fe0f}$^*$     & \Ttwem{train2}{1f686}                                   \\
-\Ttwem{metro}{1f687}                                  & \Ttwem{tram}{1f68a}                                     \\
-\Ttwem{minibus}{1f690}                                & \Ttwem{tram car}{1f68b}                                 \\
-\Ttwem{monorail}{1f69d}                               & \Ttwem{trolleybus}{1f68e}                               \\
-\Ttwem{motor boat}{1f6e5}                             & \Ttwem{vertical traffic light}{1f6a6}                   \\
-\Ttwem{motor scooter}{1f6f5}                          & \Ttwem{woman biking}{1f6b4-200d-2640-fe0f}$^*$          \\
-\Ttwem{motorcycle}{1f3cd}                             & \Ttwem{woman mountain biking}{1f6b5-200d-2640-fe0f}$^*$ \\
-\Ttwem{motorway}{1f6e3}                               & \Ttwem{woman rowing boat}{1f6a3-200d-2640-fe0f}$^*$     \\
-\Ttwem{mountain cableway}{1f6a0}                      &                                                         \\
-\end{longtable}
-
-\begin{tablenote}
-  \twemojismessage
-\end{tablenote}
-
-\bigskip
-
-\begin{tablenote}[*]
-  Variants of this symbol portraying different colors and styles are
-  not shown.  An example is presented after \vref{twemoji-misc}.
-  \seedocs{\TWEM}.
-\end{tablenote}
-\end{longsymtable}
-
-
 \begin{symtable}[MAN]{\MAN\ Dangerous Bend Symbols}
 \idxboth{dangerous bend}{symbols}
 \index{symbols>Knuth's}
-\index{Knuth, Donald E.>symbols by}
+\subindex{Knuth, Donald E.}{symbols by}
 \idxTBsyms
 \label{dangerous-bend}
 \begin{tabular}{*3{ll}}
-\K\dbend & \K\lhdbend & \K\reversedvideodbend \\
+  \K[\dbend{\rule[-12pt]{0pt}{0pt}}]\dbend &
+  \K[\lhdbend{\rule[-12pt]{0pt}{0pt}}]\lhdbend &
+  \K[\reversedvideodbend{\rule[-12pt]{0pt}{0pt}}]\reversedvideodbend \\
 \end{tabular}
 
 \bigskip
@@ -17989,8 +21159,10 @@
 
 \begin{symtable}[MAN]{Miscellaneous \MAN\ Symbols}
 \index{symbols>Knuth's}
-\index{Knuth, Donald E.>symbols by}
+\subindex{Knuth, Donald E.}{symbols by}
 \index{symbols>Metafontbook=\MF{}book}\index{Metafontbook symbols=\MF{}book symbols}
+\index{arrows}
+\index{rhombuses}
 \idxTBsyms
 \label{knuth}
 \begin{tabular}{*2{ll}}
@@ -18012,16 +21184,140 @@
 \begin{symtable}[MARV]{\MARV\ Media Control Symbols}
 \idxboth{media control}{symbols}
 \label{marv-navigation}
-\begin{tabular}{*3{ll}ll}
-\K\Forward        & \K\MoveDown  & \K\RewindToIndex  & \K\ToTop \\
-\K\ForwardToEnd   & \K\MoveUp    & \K\RewindToStart  \\
-\K\ForwardToIndex & \K\Rewind    & \K\ToBottom       \\
+\begin{tabular}{*4{ll}}
+\K\Forward        & \K\MoveDown & \K\RewindToIndex & \K\ToTop \\
+\K\ForwardToEnd   & \K\MoveUp   & \K\RewindToStart &          \\
+\K\ForwardToIndex & \K\Rewind   & \K\ToBottom      &          \\
 \end{tabular}
 \end{symtable}
 
 
+\begin{symtable}[TYPICOS]{\TYPICOS\ Media Control Symbols}
+\idxboth{media control}{symbols}
+\index{eject=eject (\tiEjectOutline)}
+\index{eject=eject (\tiEject)}
+\index{eject=eject (\tiMediaEjectOutline)}
+\index{eject=eject (\tiMediaEject)}
+\index{fast forward=fast forward (\tiMediaFastForwardOutline)}
+\index{fast forward=fast forward (\tiMediaFastForward)}
+\index{pause=pause (\tiMediaPauseOutline)}
+\index{pause=pause (\tiMediaPause)}
+\index{play=play (\tiMediaPlayOutline)}
+\index{play reverse=play reverse (\tiMediaPlayReverseOutline)}
+\index{play reverse=play reverse (\tiMediaPlayReverse)}
+\index{play=play (\tiMediaPlay)}
+\index{record=record (\tiMediaRecordOutline)}
+\index{record=record (\tiMediaRecord)}
+\index{rewind=rewind (\tiMediaRewindOutline)}
+\index{rewind=rewind (\tiMediaRewind)}
+\index{stop=stop (\tiMediaStopOutline)}
+\index{stop=stop (\tiMediaStop)}
+\index{power=power (\tiPowerOutline)}
+\index{power=power (\tiPower)}
+\index{volume down=volume down (\tiVolumeDown)}
+\index{mute=mute (\tiVolumeMute)}
+\index{volume up=volume up (\tiVolumeUp)}
+\index{volume=volume (\tiVolume)}
+\label{typicos-navigation}
+\begin{tabular}{*3{ll}}
+\K\tiEject                   & \K\tiMediaPlay               & \K\tiMediaStop        \\
+\K\tiEjectOutline            & \K\tiMediaPlayOutline        & \K\tiMediaStopOutline \\
+\K\tiMediaEject              & \K\tiMediaPlayReverse        & \K\tiPower            \\
+\K\tiMediaEjectOutline       & \K\tiMediaPlayReverseOutline & \K\tiPowerOutline     \\
+\K\tiMediaFastForward        & \K\tiMediaRecord             & \K\tiVolume           \\
+\K\tiMediaFastForwardOutline & \K\tiMediaRecordOutline      & \K\tiVolumeDown       \\
+\K\tiMediaPause              & \K\tiMediaRewind             & \K\tiVolumeMute       \\
+\K\tiMediaPauseOutline       & \K\tiMediaRewindOutline      & \K\tiVolumeUp         \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\TYPICOS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[FNTAWE]{\FNTAWE\ Media Control Symbols}
+\idxboth{media control}{symbols}
+\index{backward=backward (\faBackward)}
+\index{eject=eject (\faEject)}
+\index{fast backward=fast backward (\faFastBackward)}
+\index{fast forward=fast forward (\faFastForward)}
+\index{forward=forward (\faForward)}
+\index{play=play (\faPlayCircle)}
+\index{play=play (\faPlay)}
+\index{step backward=step backward (\faStepBackward)}
+\index{step forward=step forward (\faStepForward)}
+\index{stop circle=stop circle (\faStopCircle)}
+\index{stop=stop (\faStop)}
+\index{volume down=volume down (\faVolumeDown)}
+\index{mute=mute (\faVolumeMute)}
+\index{volume off=volume off (\faVolumeOff)}
+\index{volume up=volume up (\faVolumeUp)}
+\label{fontawesome5-navigation}
+\begin{tabular}{*3{ll}}
+\K\faBackward     & \K\faPlayCircle      & \KfaReg\faStopCircle \\
+\K\faEject        & \KfaReg\faPlayCircle & \K\faVolumeDown      \\
+\K\faFastBackward & \K\faStepBackward    & \K\faVolumeMute      \\
+\K\faFastForward  & \K\faStepForward     & \K\faVolumeOff       \\
+\K\faForward      & \K\faStop            & \K\faVolumeUp        \\
+\K\faPlay         & \K\faStopCircle      &                      \\
+\end{tabular}
+\end{symtable}
+
+
+\begin{symtable}[UTFSYM]{\UTFSYM\ Media Control Symbols}
+\idxboth{media control}{symbols}
+\label{utfsym-navigation}
+\begin{tabular}{*4{ll}}
+\Tutf{1F500} & \Tutf{1F504} & \Tutf{1F508} & \Tutf{1F569} \\
+\Tutf{1F501} & \Tutf{1F505} & \Tutf{1F509} & \Tutf{1F56A} \\
+\Tutf{1F502} & \Tutf{1F506} & \Tutf{1F50A} &              \\
+\Tutf{1F503} & \Tutf{1F507} & \Tutf{1F568} &              \\
+\end{tabular}
+
+\bigskip
+\utfsymmessage
+\end{symtable}
+
+
+\begin{symtable}[TYPICOS]{\TYPICOS\ Left/Right Pointers}
+\index{chevrons}
+\label{typicos-pointers}
+\begin{tabular}{*2{ll}}
+\K\tiChevronLeft        & \K\tiChevronRight        \\
+\K\tiChevronLeftOutline & \K\tiChevronRightOutline \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\TYPICOS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[FNTAWE]{\FNTAWE\ Up/Down/Left/Right Pointers}
+\index{chevrons}
+\label{fontawesome5-pointers}
+\begin{tabular}{*3{ll}}
+\K\faAngleDoubleDown  & \K\faCaretRight            & \K\faChevronCircleDown  \\
+\K\faAngleDoubleLeft  & \K\faCaretSquareDown       & \K\faChevronCircleLeft  \\
+\K\faAngleDoubleRight & \KfaReg\faCaretSquareDown  & \K\faChevronCircleRight \\
+\K\faAngleDoubleUp    & \K\faCaretSquareLeft       & \K\faChevronCircleUp    \\
+\K\faAngleDown        & \KfaReg\faCaretSquareLeft  & \K\faChevronDown        \\
+\K\faAngleLeft        & \K\faCaretSquareRight      & \K\faChevronLeft        \\
+\K\faAngleRight       & \KfaReg\faCaretSquareRight & \K\faChevronRight       \\
+\K\faAngleUp          & \K\faCaretSquareUp         & \K\faChevronUp          \\
+\K\faCaretDown        & \KfaReg\faCaretSquareUp    &                         \\
+\K\faCaretLeft        & \K\faCaretUp               &                         \\
+\end{tabular}
+\end{symtable}
+
+
 \begin{symtable}[MARV]{\MARV\ Laundry Symbols}
 \idxboth{laundry}{symbols}
+\index{symbols>GINETEX}
+\index{GINETEX laundry symbols}
 \label{marv-laundry}
 \begin{tabular}{*3{ll}}
 \K\AtForty            & \K\Handwash           & \K\ShortNinetyFive    \\
@@ -18038,40 +21334,32 @@
 \end{symtable}
 
 
-\begin{symtable}[MARV]{\MARV\ Information Symbols}
-\idxboth{information}{symbols}
-\index{check marks}
-\index{Xs}
-\idxboth{clock}{symbols}
-\label{marv-info}
-\begin{tabular}{*3{ll}ll}
-\K\Bicycle      & \K\Gentsroom    & \K\PointingHand \\
-\K\ClockLogo    & \K\Industry     & \K\Wheelchair   \\
-\K\Coffeecup    & \K\Info         & \K\WritingHand  \\
-\K\Football     & \K\Ladiesroom   &                 \\
-\end{tabular}
-\end{symtable}
-
-
-\begin{symtable}[MARV]{Other \MARV\ Symbols}
+\begin{symtable}[MARV]{Miscellaneous \MARV\ Symbols}
 \idxboth{miscellaneous}{symbols}
 \idxboth{yin-yang}{symbols}
+\idxboth{religious}{symbols}
+\index{Celtic cross=Celtic cross (\Celtcross)}
 \index{crosses}
 \index{crucifixes}
-\index{smiley faces}
+\index{faces}
 \index{frowny faces}
-\index{faces}
+\index{globe}
+\index{hearts}
 \index{men}
+\index{restroom=restroom (\Gentsroom)}
+\index{restroom=restroom (\Ladiesroom)}
+\index{smiley faces}
 \index{women}
-\index{globe}
-\index{world}
 \label{marv-other}
 \begin{tabular}{*4{ll}}
-\K\Ankh      & \K\Bouquet   & \K\Heart     & \K\PeaceDove \\
-\K\Bat       & \K\Celtcross & \K\ManFace   & \K\Smiley    \\
-\K\BOLogo    & \K\CircledA  & \K\MineSign  & \K\WomanFace \\
-\K\BOLogoL   & \K\Cross     & \K\Mundus    & \K\Yinyang   \\
-\K\BOLogoP   & \K\Frowny    & \K\MVAt      &              \\
+\K\Ankh      & \K\CircledA  & \K\Industry   & \K\PointingHand \\
+\K\Bat       & \K\ClockLogo & \K\Info       & \K\Smiley       \\
+\K\Bicycle   & \K\Coffeecup & \K\Ladiesroom & \K\Wheelchair   \\
+\K\BOLogo    & \K\Cross     & \K\ManFace    & \K\WomanFace    \\
+\K\BOLogoL   & \K\Football  & \K\MineSign   & \K\WritingHand  \\
+\K\BOLogoP   & \K\Frowny    & \K\Mundus     & \K\Yinyang      \\
+\K\Bouquet   & \K\Gentsroom & \K\MVAt       &                 \\
+\K\Celtcross & \K\Heart     & \K\PeaceDove  &                 \\
 \end{tabular}
 \end{symtable}
 
@@ -18078,7 +21366,7 @@
 
 \begin{symtable}[UNI]{Miscellaneous \UNI\ Symbols}
 \index{faces}
-\index{arrows}
+\index{Bauhaus forms}
 \label{uni-misc}
 \begin{tabular}{*2{ll}}
 \K\bauforms & \K\bauhead \\
@@ -18090,6 +21378,9 @@
 \index{swords}
 \index{frowny faces}
 \index{faces}
+\index{bombs}
+\index{do not enter=do not enter (\noway)}
+\index{no entry=no entry (\noway)}
 \label{fourier-misc}
 \begin{tabular}{*4{ll}}
 \K\bomb    & \K\noway         & \K\textxswdown$^*$ & \K\warning \\
@@ -18109,6 +21400,8 @@
 \begin{symtable}[UTFSYM]{\UTFSYM\ Weather Symbols}
 \idxboth{weather}{symbols}
 \index{suns}
+\index{thermometers}
+\index{clouds}
 \label{utfsym-weather}
 \begin{tabular}{*4{ll}}
 \Tutf{1F321} & \Tutf{1F324} & \Tutf{1F327} & \Tutf{1F32A} \\
@@ -18125,6 +21418,9 @@
 \idxboth{weather}{symbols}
 \index{suns}
 \index{emoji}
+\index{lightning}
+\index{clouds}
+\index{thermometers}
 \label{twemojis-weather}
 \begin{tabular}{*2{ll}}
 \Ttwem{cloud}{2601}                         & \Ttwem{sun behind cloud}{26c5}        \\
@@ -18138,7 +21434,7 @@
 
 \bigskip
 \begin{tablenote}
-  \twemojismessage
+  \twemojismessage.
 \end{tablenote}
 \end{symtable}
 
@@ -18146,7 +21442,11 @@
 \begin{symtable}[IFS]{\IFS\ Weather Symbols}
 \idxboth{weather}{symbols}
 \index{suns}
-\label{weather}
+\index{sun=sun (\ifsSun)}
+\index{lightning}
+\index{thermometers}
+\index{clouds}
+\label{ifs-weather}
 \begin{tabular}{*4{ll}}
 \K\Cloud               & \K\Hail                     & \K\Sleet        & \K\WeakRain        \\
 \K\FilledCloud         & \K\HalfSun                  & \K\Snow         & \K\WeakRainCloud   \\
@@ -18179,10 +21479,108 @@
 \end{symtable}
 
 
+\begin{symtable}[TYPICOS]{\TYPICOS\ Weather Symbols}
+\idxboth{weather}{symbols}
+\index{suns}
+\index{thermometers}
+\index{clouds}
+\index{thermometer=thermometer (\tiThermometer)}
+\index{cloudy=cloudy (\tiWeatherCloudy)}
+\index{downpour=downpour (\tiWeatherDownpour)}
+\index{night=night (\tiWeatherNight)}
+\index{partly sunny=partly sunny (\tiWeatherPartlySunny)}
+\index{shower=shower (\tiWeatherShower)}
+\index{snow=snow (\tiWeatherSnow)}
+\index{stormy=stormy (\tiWeatherStormy)}
+\index{sunny=sunny (\tiWeatherSunny)}
+\index{windy cloudy=windy cloudy (\tiWeatherWindyCloudy)}
+\index{windy=windy (\tiWeatherWindy)}
+\label{typicos-weather}
+\begin{tabular}{*3{ll}}
+\K\tiThermometer     & \K\tiWeatherPartlySunny & \K\tiWeatherSunny       \\
+\K\tiWeatherCloudy   & \K\tiWeatherShower      & \K\tiWeatherWindy       \\
+\K\tiWeatherDownpour & \K\tiWeatherSnow        & \K\tiWeatherWindyCloudy \\
+\K\tiWeatherNight    & \K\tiWeatherStormy      &                         \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\TYPICOS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[FNTAWE]{\FNTAWE\ Weather Symbols}
+\idxboth{weather}{symbols}
+\index{suns}
+\index{thermometers}
+\index{clouds}
+\index{cloud with meatball=cloud with meatball (\faCloudMeatball)}
+\index{cloud with moon and rain=cloud with moon and rain (\faCloudMoonRain)}
+\index{cloud with moon=cloud with moon (\faCloudMoon)}
+\index{cloud with rain=cloud with rain (\faCloudRain)}
+\index{cloud with rain=cloud with rain (\faCloudShowersHeavy)}
+\index{cloud with sun and rain=cloud with sun and rain (\faCloudSunRain)}
+\index{cloud with sun=cloud with sun (\faCloudSun)}
+\index{cloud=cloud (\faCloud)}
+\index{icicles=icicles (\faIcicles)}
+\index{smog=smog (\faSmog)}
+\index{snowflake=snowflake (\faSnowflake)}
+\index{sun=sun (\faSun)}
+\index{temperature high=temperature high (\faTemperatureHigh)}
+\index{temperature low=temperature low (\faTemperatureLow)}
+\index{thermometer empty=thermometer empty (\faThermometerEmpty)}
+\index{thermometer full=thermometer full (\faThermometerFull)}
+\index{thermometer half=thermometer half (\faThermometerHalf)}
+\index{thermometer quarter=thermometer quarter (\faThermometerQuarter)}
+\index{thermometer three quarters=thermometer three quarters (\faThermometerThreeQuarters)}
+\index{wind=wind (\faWind)}
+\label{fontawesome5-weather}
+\begin{tabular}{*3{ll}}
+\K\faCloud             & \K\faIcicles         & \K\faThermometerEmpty         \\
+\K\faCloudMeatball     & \K\faSmog            & \K\faThermometerFull          \\
+\K\faCloudMoon         & \K\faSnowflake       & \K\faThermometerHalf          \\
+\K\faCloudMoonRain     & \KfaReg\faSnowflake  & \K\faThermometerQuarter       \\
+\K\faCloudRain         & \K\faSun             & \K\faThermometerThreeQuarters \\
+\K\faCloudShowersHeavy & \KfaReg\faSun        & \K\faWind                     \\
+\K\faCloudSun          & \K\faTemperatureHigh &                               \\
+\K\faCloudSunRain      & \K\faTemperatureLow  &                               \\
+\end{tabular}
+\end{symtable}
+
+
+\begin{symtable}[CHILD]{\CHILD\ Weather Symbols}
+\idxboth{weather}{symbols}
+\index{suns}
+\index{thermometers}
+\index{clouds}
+\index{cloud=cloud (\fcCloud)}
+\index{cloud=cloud (\fcCloudA)}
+\index{cloud=cloud (\fcCloudB)}
+\index{cloud=cloud (\fcCloudC)}
+\index{sun=sun (\fcSun)}
+\index{sun=sun (\fcSunA)}
+\index{sun=sun (\fcSunB)}
+\index{thermometer=thermometer (\fcThermometerA)}
+\index{thermometer=thermometer (\fcThermometerB)}
+\label{figchild-weather}
+\begin{tabular}{*3{ll}}
+\K\fcCloud  & \K\fcCloudC & \K\fcSunB         \\
+\K\fcCloudA & \K\fcSun    & \K\fcThermometerA \\
+\K\fcCloudB & \K\fcSunA   & \K\fcThermometerB \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \childmessage.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[IFS]{\IFS\ Alpine Symbols}
 \idxboth{alpine}{symbols}
 \index{flags}
-\label{alpine}
+\label{ifs-alpine}
 \begin{tabular}{*4{ll}}
 \K\SummitSign & \K\Summit         & \K\SurveySign & \K\HalfFilledHut \\
 \K\StoneMan   & \K\Mountain       & \K\Joch       & \K\VarSummit     \\
@@ -18195,11 +21593,20 @@
 
 \begin{symtable}[IFS]{\IFS\ Clocks}
 \idxboth{clock}{symbols}
+\index{time interval=time interval (\Interval)}
+\index{stopwatch=stopwatch (\StopWatchStart)}
+\index{clock=clock (\VarClock)}
+\index{alarm clock=alarm clock (\Wecker)}
+\index{stopwatch=stopwatch (\StopWatchEnd)}
+\index{pocket watch=pocket watch (\Taschenuhr)}
+\index{pocket watch=pocket watch (\VarTaschenuhr)}
 \index{time of day}
+\begin{indexingoff}
 \begin{tabular}{*4{ll}}
 \K\Interval     & \K\StopWatchStart & \K\VarClock       & \K\Wecker \\
 \K\StopWatchEnd & \K\Taschenuhr     & \K\VarTaschenuhr  \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
@@ -18235,16 +21642,9 @@
 \begin{symtable}[CLOCK]{\CLOCK\ Clocks}
 \idxboth{clock}{symbols}
 \index{time of day}
+\index{clock>showing a specific time}
+\index{clock>without a frame}
 \label{clock}
-\newcommand{\showCLOCK}[2]{%
-  \ClockStyle=#1
-  \ifx#2t
-    \ClockFrametrue
-  \else
-    \ClockFramefalse
-  \fi
-  \clock{15}{41}%
-}
 \begin{tabular}{@{}ccc@{}}
   \toprule
   \cmd{\ClockStyle} & \cmd{\ClockFramefalse} & \cmd{\ClockFrametrue} \\
@@ -18258,14 +21658,13 @@
 
 \bigskip
 \begin{tablenote}
-  The \CLOCK\ package provides a \cmdI[\string\clock{15}{41}]{\clock}
-  command to typeset an arbitrary time on an analog clock (and
-  \cmd{\clocktime} to typeset the document's build time).  For
-  example, the clocks in the above table were produced with
-  \verb|\clock{15}{41}|.  Clock symbols are composed from a font of
-  clock-face fragments using one of four values for \cmd{\ClockStyle}
-  and either \cmd{\ClockFrametrue} or \cmd{\ClockFrametrue} as
-  illustrated above.  \seedocs{\CLOCK}.
+  The \CLOCK\ package provides a \cmdI{\clock} command to typeset an
+  arbitrary time on an analog clock (and \cmd{\clocktime} to typeset
+  the document's build time).  For example, the clocks in the above
+  table were produced with \verb|\clock{15}{41}|.  Clock symbols are
+  composed from a font of clock-face fragments using one of four
+  values for \cmd{\ClockStyle} and either \cmd{\ClockFrametrue} or
+  \cmd{\ClockFrametrue} as illustrated above.  \seedocs{\CLOCK}.
 \end{tablenote}
 \end{symtable}
 
@@ -18274,6 +21673,7 @@
 \idxboth{clock}{symbols}
 \index{time of day}
 \index{emoji}
+\index{hourglasses}
 \label{twemoji-clocks}
 \begin{tabular}{*2{ll}}
 \Ttwem{one o'clock}{1f550}   & \Ttwem{eight-thirty}{1f563}      \\
@@ -18295,11 +21695,50 @@
 
 \bigskip
 \begin{tablenote}
-  \twemojismessage
+  \twemojismessage.
 \end{tablenote}
 \end{symtable}
 
 
+\begin{symtable}[TYPICOS]{\TYPICOS\ Time and Date Symbols}
+\idxboth{clock}{symbols}
+\idxboth{calendar}{symbols}
+\index{calendar=calendar (\tiCalendarOutline)}
+\index{calendar=calendar (\tiCalendar)}
+\index{stopwatch=stopwatch (\tiStopwatch)}
+\index{clock=clock (\tiTime)}
+\index{watch=watch (\tiWatch)}
+\label{typicos-time-date}
+\begin{tabular}{*3{ll}}
+\K\tiCalendar        & \K\tiStopwatch & \K\tiWatch \\
+\K\tiCalendarOutline & \K\tiTime      &            \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\TYPICOS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[FNTAWE]{\FNTAWE\ Time and Date Symbols}
+\idxboth{clock}{symbols}
+\idxboth{calendar}{symbols}
+\index{hourglasses}
+\label{fontawesome5-time-date}
+\begin{tabular}{*3{ll}}
+\K\faBusinessTime       & \K\faCalendarMinus      & \KfaReg\faClock        \\
+\KfaReg{\faCalendar*}   & \KfaReg\faCalendarMinus & \K\faDigitalTachograph \\
+\K{\faCalendar*}        & \K\faCalendarPlus       & \K\faHourglass         \\
+\K\faCalendar           & \KfaReg\faCalendarPlus  & \KfaReg\faHourglass    \\
+\KfaReg\faCalendar      & \K\faCalendarTimes      & \K\faHourglassEnd      \\
+\K\faCalendarCheck      & \KfaReg\faCalendarTimes & \K\faHourglassHalf     \\
+\KfaReg\faCalendarCheck & \K\faCalendarWeek       & \K\faHourglassStart    \\
+\K\faCalendarDay        & \K\faClock              & \K{\faTachometer*}     \\
+\end{tabular}
+\end{symtable}
+
+
 \begin{longsymtable}[TWEM]{\TWEM\ Animals}
 \ltindex{animals}
 \ltindex{emoji}
@@ -18342,7 +21781,7 @@
 \Ttwem{dolphin}{1f42c}                 & \Ttwem{rat}{1f400}                       \\
 \Ttwem{dragon}{1f409}                  & \Ttwem{rhinoceros}{1f98f}                \\
 \Ttwem{dragon face}{1f432}             & \Ttwem{rooster}{1f413}                   \\
-\Ttwem{dromedary\_camel}{1f42a}        & \Ttwem{sauropod}{1f995}                  \\
+\Ttwem{dromedary camel}{1f42a}         & \Ttwem{sauropod}{1f995}                  \\
 \Ttwem{duck}{1f986}                    & \Ttwem{scorpion}{1f982}                  \\
 \Ttwem{eagle}{1f985}                   & \Ttwem{seal}{1f9ad}                      \\
 \Ttwem{elephant}{1f418}                & \Ttwem{service dog}{1f415-200d-1f9ba}    \\
@@ -18374,15 +21813,194 @@
 \end{longtable}
 
 \begin{tablenote}
-  \twemojismessage
+  \twemojismessage.
 \end{tablenote}
 \end{longsymtable}
 
 
-\begin{longsymtable}[TWEM]{\TWEM\ Food Emoji}
-\ltindex{food}
-\ltindex{emoji}
-\label{twemoji-food}
+\begin{symtable}[FNTAWE]{\FNTAWE\ Animals}
+\index{animals}
+\index{bug=bug (\faBug)}
+\index{cat=cat (\faCat)}
+\index{crow=crow (\faCrow)}
+\index{dog=dog (\faDog)}
+\index{dove=dove (\faDove)}
+\index{dragon=dragon (\faDragon)}
+\index{fish=fish (\faFish)}
+\index{frog=frog (\faFrog)}
+\index{hippopotamus=hippopotamus (\faHippo)}
+\index{horse=horse (\faHorseHead)}
+\index{horse=horse (\faHorse)}
+\index{kiwi bird=kiwi bird (\faKiwiBird)}
+\index{otter=otter (\faOtter)}
+\index{spider=spider (\faSpider)}
+\label{fontawesome5-animals}
+\begin{tabular}{*4{ll}}
+\K\faBug  & \K\faDove   & \K\faHippo     & \K\faOtter  \\
+\K\faCat  & \K\faDragon & \K\faHorse     & \K\faSpider \\
+\K\faCrow & \K\faFish   & \K\faHorseHead &             \\
+\K\faDog  & \K\faFrog   & \K\faKiwiBird  &             \\
+\end{tabular}
+\end{symtable}
+
+
+\begin{longsymtable}[CHILD]{\CHILD\ Animals}
+\ltindex{alligator=alligator (\fcAlligator)}
+\ltindex{alligator=alligator (\fcAlligatorA)}
+\ltindex{ant=ant (\fcAnt)}
+\ltindex{ant=ant (\fcAntA)}
+\ltindex{antelope=antelope (\fcAntelope)}
+\ltindex{armadillo=armadillo (\fcArmadillo)}
+\ltindex{bat=bat (\fcBat)}
+\ltindex{bear=bear (\fcBear)}
+\ltindex{bear=bear (\fcBearA)}
+\ltindex{bear=bear (\fcBearB)}
+\ltindex{bear=bear (\fcBearC)}
+\ltindex{bear=bear (\fcBearD)}
+\ltindex{bears=bears (\fcBears)}
+\ltindex{bee=bee (\fcBee)}
+\ltindex{bee=bee (\fcBeeA)}
+\ltindex{bird=bird (\fcBird)}
+\ltindex{bird=bird (\fcBirdA)}
+\ltindex{bird=bird (\fcBirdB)}
+\ltindex{bird=bird (\fcBirdC)}
+\ltindex{bird=bird (\fcBirdD)}
+\ltindex{bird=bird (\fcBirdE)}
+\ltindex{bull=bull (\fcBull)}
+\ltindex{bunny=bunny (\fcBunnyA)}
+\ltindex{bunny=bunny (\fcBunnyB)}
+\ltindex{bunny=bunny (\fcBunnyC)}
+\ltindex{bunny=bunny (\fcBunnyD)}
+\ltindex{bunny=bunny (\fcBunnyE)}
+\ltindex{butterfly=butterfly (\fcButterfly)}
+\ltindex{butterfly=butterfly (\fcButterflyA)}
+\ltindex{butterfly=butterfly (\fcButterflyB)}
+\ltindex{butterfly=butterfly (\fcButterflyC)}
+\ltindex{calf=calf (\fcCalf)}
+\ltindex{cat=cat (\fcCat)}
+\ltindex{caterpillar=caterpillar (\fcCaterpillar)}
+\ltindex{catfish=catfish (\fcCatfish)}
+\ltindex{centipede=centipede (\fcCentipede)}
+\ltindex{chick=chick (\fcChick)}
+\ltindex{chicken=chicken (\fcChicken)}
+\ltindex{chicks=chicks (\fcChicks)}
+\ltindex{cobra=cobra (\fcCobrabebe)}
+\ltindex{cow=cow (\fcCow)}
+\ltindex{crab=crab (\fcCrabA)}
+\ltindex{crab=crab (\fcCrabB)}
+\ltindex{dinosaur=dinosaur (\fcDinosaurA)}
+\ltindex{dinosaur=dinosaur (\fcDinosaurB)}
+\ltindex{dinosaur=dinosaur (\fcDinosaurC)}
+\ltindex{dinosaur=dinosaur (\fcDinosaurD)}
+\ltindex{dinosaur=dinosaur (\fcDinosaurE)}
+\ltindex{dinosaur=dinosaur (\fcDinosaurF)}
+\ltindex{dinosaur=dinosaur (\fcDinosaurG)}
+\ltindex{dinosaur=dinosaur (\fcDinosaurH)}
+\ltindex{dinosaur=dinosaur (\fcDinosaurI)}
+\ltindex{dinosaur=dinosaur (\fcDinosaurJ)}
+\ltindex{dog=dog (\fcDog)}
+\ltindex{dolphin=dolphin (\fcDolphin)}
+\ltindex{dolphin=dolphin (\fcDolphinA)}
+\ltindex{dragonfly=dragonfly (\fcDragonFly)}
+\ltindex{duck=duck (\fcDuck)}
+\ltindex{duck=duck (\fcDuckA)}
+\ltindex{duck=duck (\fcDuckB)}
+\ltindex{duck=duck (\fcDuckC)}
+\ltindex{elephant=elephant (\fcElephant)}
+\ltindex{elephant=elephant (\fcElephantA)}
+\ltindex{elephant=elephant (\fcElephantB)}
+\ltindex{fish=fish (\fcFishA)}
+\ltindex{fish=fish (\fcFishB)}
+\ltindex{fish=fish (\fcFishC)}
+\ltindex{fish=fish (\fcFishD)}
+\ltindex{fish=fish (\fcFishE)}
+\ltindex{fish=fish (\fcFishF)}
+\ltindex{fish=fish (\fcFishG)}
+\ltindex{fish=fish (\fcFishH)}
+\ltindex{fish=fish (\fcFishI)}
+\ltindex{fish=fish (\fcFishK)}
+\ltindex{fish=fish (\fcFishL)}
+\ltindex{fish=fish (\fcFishM)}
+\ltindex{flamingo=flamingo (\fcFlamingo)}
+\ltindex{flamingo=flamingo (\fcFlamingoA)}
+\ltindex{frog=frog (\fcFrog)}
+\ltindex{giraffe=giraffe (\fcGiraffe)}
+\ltindex{giraffe=giraffe (\fcGiraffeA)}
+\ltindex{giraffe=giraffe (\fcGiraffeB)}
+\ltindex{giraffes=giraffes (\fcGiraffes)}
+\ltindex{gnat=gnat (\fcGnat)}
+\ltindex{goose=goose (\fcGoose)}
+\ltindex{grasshopper=grasshopper (\fcLocust)}
+\ltindex{herring=herring (\fcHerring)}
+\ltindex{hippopotamus=hippopotamus (\fcHippo)}
+\ltindex{horse=horse (\fcHorse)}
+\ltindex{horse=horse (\fcHorseA)}
+\ltindex{hummingbird=hummingbird (\fcHummingbird)}
+\ltindex{kitten=kitten (\fcKittenA)}
+\ltindex{kitten=kitten (\fcKittenB)}
+\ltindex{kittens=kittens (\fcKittensA)}
+\ltindex{kittens=kittens (\fcKittensB)}
+\ltindex{ladybug=ladybug (\fcLadyBug)}
+\ltindex{lamb=lamb (\fcLamb)}
+\ltindex{lion=lion (\fcLion)}
+\ltindex{lion=lion (\fcLionA)}
+\ltindex{locust=locust (\fcLocust)}
+\ltindex{macaw=macaw (\fcMacaw)}
+\ltindex{monkey=monkey (\fcMonkey)}
+\ltindex{monkey=monkey (\fcMonkeyA)}
+\ltindex{moose=moose (\fcMoose)}
+\ltindex{mouse=mouse (\fcLittleMouse)}
+\ltindex{mouse=mouse (\fcMouse)}
+\ltindex{mouse=mouse (\fcMouseA)}
+\ltindex{mouse=mouse (\fcMouseB)}
+\ltindex{octopus=octopus (\fcOctopus)}
+\ltindex{octopus=octopus (\fcOctopusA)}
+\ltindex{orca=orca (\fcOrca)}
+\ltindex{ostrich=ostrich (\fcOstrich)}
+\ltindex{owl=owl (\fcOwl)}
+\ltindex{owl=owl (\fcOwlA)}
+\ltindex{owl=owl (\fcOwlB)}
+\ltindex{ox=ox (\fcOx)}
+\ltindex{parrot=parrot (\fcParrot)}
+\ltindex{peacock=peacock (\fcPeacock)}
+\ltindex{penguin=penguin (\fcPenguin)}
+\ltindex{perch=perch (\fcPerch)}
+\ltindex{pig=pig (\fcPig)}
+\ltindex{pig=pig (\fcPigA)}
+\ltindex{pig=pig (\fcPigB)}
+\ltindex{pig=pig (\fcPigC)}
+\ltindex{pig=pig (\fcPigD)}
+\ltindex{pig=pig (\fcPigE)}
+\ltindex{praying mantis=praying mantis (\fcLouvadeus)}
+\ltindex{puppy=puppy (\fcPuppy)}
+\ltindex{rabbit=rabbit (\fcRabbit)}
+\ltindex{rabbit=rabbit (\fcRabbitA)}
+\ltindex{rabbits=rabbits (\fcRabbits)}
+\ltindex{raccoon=raccoon (\fcRaccoon)}
+\ltindex{scorpion=scorpion (\fcScorpion)}
+\ltindex{seahorse=seahorse (\fcSeahorse)}
+\ltindex{shark=shark (\fcShark)}
+\ltindex{sheep=sheep (\fcSheep)}
+\ltindex{sheep=sheep (\fcSheepA)}
+\ltindex{sheep=sheep (\fcSheepB)}
+\ltindex{sheep=sheep (\fcSheepC)}
+\ltindex{snail=snail (\fcSnailA)}
+\ltindex{snail=snail (\fcSnailB)}
+\ltindex{snail=snail (\fcSnailC)}
+\ltindex{spider=spider (\fcSpider)}
+\ltindex{spider=spider (\fcSpiderA)}
+\ltindex{spider=spider (\fcSpiderB)}
+\ltindex{squirrel=squirrel (\fcSquirrel)}
+\ltindex{squirrel=squirrel (\fcSquirrelA)}
+\ltindex{sturgeon=sturgeon (\fcSturgeon)}
+\ltindex{toucan=toucan (\fcToucan)}
+\ltindex{turkey=turkey (\fcPeruA)}
+\ltindex{turkey=turkey (\fcPeruB)}
+\ltindex{turtle=turtle (\fcTurtle)}
+\ltindex{turtle=turtle (\fcTurtleA)}
+\ltindex{turtle=turtle (\fcTurtleB)}
+\ltindex{zebra=zebra (\fcZebra)}
+\label{figchild-animals}
 \begin{longtable}{*2{ll}}
 \multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
 \endhead
@@ -18391,73 +22009,122 @@
 \multicolumn{4}{r}{\small\textit{(continued on next page)}}
 \endfoot
 \endlastfoot
-\Ttwem{avocado}{1f951}                   & \Ttwem{hot beverage}{2615}           \\
-\Ttwem{bacon}{1f953}                     & \Ttwem{hot dog}{1f32d}               \\
-\Ttwem{bagel}{1f96f}                     & \Ttwem{hot pepper}{1f336}            \\
-\Ttwem{baguette bread}{1f956}            & \Ttwem{ice}{1f9ca}                   \\
-\Ttwem{banana}{1f34c}                    & \Ttwem{ice cream}{1f368}             \\
-\Ttwem{beer mug}{1f37a}                  & \Ttwem{kiwi fruit}{1f95d}            \\
-\Ttwem{bell pepper}{1fad1}               & \Ttwem{leafy green}{1f96c}           \\
-\Ttwem{bento box}{1f371}                 & \Ttwem{lemon}{1f34b}                 \\
-\Ttwem{beverage box}{1f9c3}              & \Ttwem{lollipop}{1f36d}              \\
-\Ttwem{blueberries}{1fad0}               & \Ttwem{mango}{1f96d}                 \\
-\Ttwem{bottle with popping cork}{1f37e}  & \Ttwem{mate}{1f9c9}                  \\
-\Ttwem{bowl with spoon}{1f963}           & \Ttwem{meat on bone}{1f356}          \\
-\Ttwem{bread}{1f35e}                     & \Ttwem{melon}{1f348}                 \\
-\Ttwem{broccoli}{1f966}                  & \Ttwem{moon cake}{1f96e}             \\
-\Ttwem{bubble tea}{1f9cb}                & \Ttwem{mushroom}{1f344}              \\
-\Ttwem{burrito}{1f32f}                   & \Ttwem{oden}{1f362}                  \\
-\Ttwem{butter}{1f9c8}                    & \Ttwem{olive}{1fad2}                 \\
-\Ttwem{candy}{1f36c}                     & \Ttwem{onion}{1f9c5}                 \\
-\Ttwem{canned food}{1f96b}               & \Ttwem{pancakes}{1f95e}              \\
-\Ttwem{carrot}{1f955}                    & \Ttwem{peach}{1f351}                 \\
-\Ttwem{cheese wedge}{1f9c0}              & \Ttwem{peanuts}{1f95c}               \\
-\Ttwem{cherries}{1f352}                  & \Ttwem{pear}{1f350}                  \\
-\Ttwem{chocolate bar}{1f36b}             & \Ttwem{pie}{1f967}                   \\
-\Ttwem{chopsticks}{1f962}                & \Ttwem{pineapple}{1f34d}             \\
-\Ttwem{clinking beer mugs}{1f37b}        & \Ttwem{pizza}{1f355}                 \\
-\Ttwem{clinking glasses}{1f942}          & \Ttwem{popcorn}{1f37f}               \\
-\Ttwem{cocktail glass}{1f378}            & \Ttwem{pot of food}{1f372}           \\
-\Ttwem{coconut}{1f965}                   & \Ttwem{potato}{1f954}                \\
-\Ttwem{cooked rice}{1f35a}               & \Ttwem{poultry leg}{1f357}           \\
-\Ttwem{cookie}{1f36a}                    & \Ttwem{pretzel}{1f968}               \\
-\Ttwem{cooking}{1f373}                   & \Ttwem{red apple}{1f34e}             \\
-\Ttwem{croissant}{1f950}                 & \Ttwem{rice ball}{1f359}             \\
-\Ttwem{cucumber}{1f952}                  & \Ttwem{rice cracker}{1f358}          \\
-\Ttwem{cup with straw}{1f964}            & \Ttwem{roasted sweet potato}{1f360}  \\
-\Ttwem{cupcake}{1f9c1}                   & \Ttwem{sake}{1f376}                  \\
-\Ttwem{curry rice}{1f35b}                & \Ttwem{salt}{1f9c2}                  \\
-\Ttwem{custard}{1f36e}                   & \Ttwem{sandwich}{1f96a}              \\
-\Ttwem{cut of meat}{1f969}               & \Ttwem{shallow pan of food}{1f958}   \\
-\Ttwem{dango}{1f361}                     & \Ttwem{shaved ice}{1f367}            \\
-\Ttwem{doughnut}{1f369}                  & \Ttwem{shortcake}{1f370}             \\
-\Ttwem{dumpling}{1f95f}                  & \Ttwem{soft ice cream}{1f366}        \\
-\Ttwem{egg}{1f95a}                       & \Ttwem{spaghetti}{1f35d}             \\
-\Ttwem{eggplant}{1f346}                  & \Ttwem{steaming bowl}{1f35c}         \\
-\Ttwem{falafel}{1f9c6}                   & \Ttwem{strawberry}{1f353}            \\
-\Ttwem{fish cake with swirl}{1f365}      & \Ttwem{stuffed flatbread}{1f959}     \\
-\Ttwem{flatbread}{1fad3}                 & \Ttwem{sushi}{1f363}                 \\
-\Ttwem{fondue}{1fad5}                    & \Ttwem{taco}{1f32e}                  \\
-\Ttwem{fork and knife}{1f374}            & \Ttwem{takeout box}{1f961}           \\
-\Ttwem{fork and knife with plate}{1f37d} & \Ttwem{tamale}{1fad4}                \\
-\Ttwem{fortune cookie}{1f960}            & \Ttwem{tangerine}{1f34a}             \\
-\Ttwem{french fries}{1f35f}              & \Ttwem{teacup without handle}{1f375} \\
-\Ttwem{fried shrimp}{1f364}              & \Ttwem{teapot}{1fad6}                \\
-\Ttwem{garlic}{1f9c4}                    & \Ttwem{tomato}{1f345}                \\
-\Ttwem{glass of milk}{1f95b}             & \Ttwem{tropical drink}{1f379}        \\
-\Ttwem{grapes}{1f347}                    & \Ttwem{tumbler glass}{1f943}         \\
-\Ttwem{green apple}{1f34f}               & \Ttwem{waffle}{1f9c7}                \\
-\Ttwem{green salad}{1f957}               & \Ttwem{watermelon}{1f349}            \\
-\Ttwem{hamburger}{1f354}                 & \Ttwem{wine glass}{1f377}            \\
-\Ttwem{honey pot}{1f36f}                 &                                      \\
+\K\fcAlligator   & \K\fcGiraffeA    \\
+\K\fcAlligatorA  & \K\fcGiraffeB    \\
+\K\fcAnt         & \K\fcGiraffes    \\
+\K\fcAntA        & \K\fcGnat        \\
+\K\fcAntelope    & \K\fcGoose       \\
+\K\fcArmadillo   & \K\fcHerring     \\
+\K\fcBat         & \K\fcHippo       \\
+\K\fcBear        & \K\fcHorse       \\
+\K\fcBearA       & \K\fcHorseA      \\
+\K\fcBearB       & \K\fcHummingbird \\
+\K\fcBearC       & \K\fcKittenA     \\
+\K\fcBearD       & \K\fcKittenB     \\
+\K\fcBears       & \K\fcKittensA    \\
+\K\fcBee         & \K\fcKittensB    \\
+\K\fcBeeA        & \K\fcLadybirdA   \\
+\K\fcBird        & \K\fcLadybirdB   \\
+\K\fcBirdA       & \K\fcLadyBug     \\
+\K\fcBirdB       & \K\fcLamb        \\
+\K\fcBirdC       & \K\fcLion        \\
+\K\fcBirdD       & \K\fcLionA       \\
+\K\fcBirdE       & \K\fcLittleBirds \\
+\K\fcBull        & \K\fcLittleMouse \\
+\K\fcBunnyA      & \K\fcLocust      \\
+\K\fcBunnyB      & \K\fcLouvadeus   \\
+\K\fcBunnyC      & \K\fcMacaw       \\
+\K\fcBunnyD      & \K\fcMonkey      \\
+\K\fcBunnyE      & \K\fcMonkeyA     \\
+\K\fcButterfly   & \K\fcMoonfish    \\
+\K\fcButterflyA  & \K\fcMoose       \\
+\K\fcButterflyB  & \K\fcMouse       \\
+\K\fcButterflyC  & \K\fcMouseA      \\
+\K\fcCalf        & \K\fcMouseB      \\
+\K\fcCat         & \K\fcOctopus     \\
+\K\fcCaterpillar & \K\fcOctopusA    \\
+\K\fcCatfish     & \K\fcOrca        \\
+\K\fcCentipede   & \K\fcOstrich     \\
+\K\fcChick       & \K\fcOwl         \\
+\K\fcChicken     & \K\fcOwlA        \\
+\K\fcChicks      & \K\fcOwlB        \\
+\K\fcCobrabebe   & \K\fcOx          \\
+\K\fcCow         & \K\fcPandaBear   \\
+\K\fcCrabA       & \K\fcParrot      \\
+\K\fcCrabB       & \K\fcPeacock     \\
+\K\fcDinosaurA   & \K\fcPenguin     \\
+\K\fcDinosaurB   & \K\fcPerch       \\
+\K\fcDinosaurC   & \K\fcPeruA       \\
+\K\fcDinosaurD   & \K\fcPeruB       \\
+\K\fcDinosaurE   & \K\fcPig         \\
+\K\fcDinosaurF   & \K\fcPigA        \\
+\K\fcDinosaurG   & \K\fcPigB        \\
+\K\fcDinosaurH   & \K\fcPigC        \\
+\K\fcDinosaurI   & \K\fcPigD        \\
+\K\fcDinosaurJ   & \K\fcPigE        \\
+\K\fcDog         & \K\fcPuppy       \\
+\K\fcDolphin     & \K\fcRabbit      \\
+\K\fcDolphinA    & \K\fcRabbitA     \\
+\K\fcDragonFly   & \K\fcRabbits     \\
+\K\fcDuck        & \K\fcRaccoon     \\
+\K\fcDuckA       & \K\fcScorpion    \\
+\K\fcDuckB       & \K\fcSeahorse    \\
+\K\fcDuckC       & \K\fcShark       \\
+\K\fcElephant    & \K\fcSheep       \\
+\K\fcElephantA   & \K\fcSheepA      \\
+\K\fcElephantB   & \K\fcSheepB      \\
+\K\fcFishA       & \K\fcSheepC      \\
+\K\fcFishB       & \K\fcSnailA      \\
+\K\fcFishC       & \K\fcSnailB      \\
+\K\fcFishD       & \K\fcSnailC      \\
+\K\fcFishE       & \K\fcSpider      \\
+\K\fcFishF       & \K\fcSpiderA     \\
+\K\fcFishG       & \K\fcSpiderB     \\
+\K\fcFishH       & \K\fcSquirrel    \\
+\K\fcFishI       & \K\fcSquirrelA   \\
+\K\fcFishK       & \K\fcSturgeon    \\
+\K\fcFishL       & \K\fcToucan      \\
+\K\fcFishM       & \K\fcTurtle      \\
+\K\fcFlamingo    & \K\fcTurtleA     \\
+\K\fcFlamingoA   & \K\fcTurtleB     \\
+\K\fcFrog        & \K\fcUrchin      \\
+\K\fcGiraffe     & \K\fcZebra       \\
 \end{longtable}
 
 \begin{tablenote}
-  \twemojismessage
+  \childmessage.
 \end{tablenote}
 \end{longsymtable}
 
 
+\begin{symtable}[UTFSYM]{\UTFSYM\ Animals}
+\index{animals}
+\index{dragon}
+\label{utfsym-animals}
+\begin{tabular}{*4{ll}}
+\Tutf{1F400} & \Tutf{1F410} & \Tutf{1F420} & \Tutf{1F430} \\
+\Tutf{1F401} & \Tutf{1F411} & \Tutf{1F421} & \Tutf{1F431} \\
+\Tutf{1F402} & \Tutf{1F412} & \Tutf{1F422} & \Tutf{1F432} \\
+\Tutf{1F403} & \Tutf{1F413} & \Tutf{1F423} & \Tutf{1F433} \\
+\Tutf{1F404} & \Tutf{1F414} & \Tutf{1F424} & \Tutf{1F434} \\
+\Tutf{1F405} & \Tutf{1F415} & \Tutf{1F425} & \Tutf{1F435} \\
+\Tutf{1F406} & \Tutf{1F416} & \Tutf{1F426} & \Tutf{1F436} \\
+\Tutf{1F407} & \Tutf{1F417} & \Tutf{1F427} & \Tutf{1F437} \\
+\Tutf{1F408} & \Tutf{1F418} & \Tutf{1F428} & \Tutf{1F438} \\
+\Tutf{1F409} & \Tutf{1F419} & \Tutf{1F429} & \Tutf{1F439} \\
+\Tutf{1F40A} & \Tutf{1F41A} & \Tutf{1F42A} & \Tutf{1F43A} \\
+\Tutf{1F40B} & \Tutf{1F41B} & \Tutf{1F42B} & \Tutf{1F43B} \\
+\Tutf{1F40C} & \Tutf{1F41C} & \Tutf{1F42C} & \Tutf{1F43C} \\
+\Tutf{1F40D} & \Tutf{1F41D} & \Tutf{1F42D} & \Tutf{1F43F} \\
+\Tutf{1F40E} & \Tutf{1F41E} & \Tutf{1F42E} &              \\
+\Tutf{1F40F} & \Tutf{1F41F} & \Tutf{1F42F} &              \\
+\end{tabular}
+
+\bigskip
+\utfsymmessage[1F409]
+\end{symtable}
+
+
 \begin{symtable}[HHCNT]{\HHCNT\ Tally Markers}
 \index{tally markers}
 \label{hhtally}
@@ -18489,6 +22156,7 @@
 
 \begin{symtable}[BULL]{\BULL\ Tally Markers}
 \index{tally markers}
+\index{bullets, as tally markers}
 \label{bullcntr}
 \renewcommand{\arraystretch}{2}   % Prevent tall symbols from touching.
 \begin{tabular}{ll@{\qquad}ll@{\qquad}ll}
@@ -18525,8 +22193,9 @@
   \BULL's package options \optname{bullcntr}{smallctrbull},
   \optname{bullcntr}{largectrbull}, and
   \optname{bullcntr}{heartctrbull} and corresponding commands
-  \cmd{\smallctrbull}, \cmd{\largectrbull}, and \cmd{\heartctrbull}
-  control the formatting of each tally marker:
+  \cmd{\smallctrbull}, \cmd{\largectrbull}, and
+  \cmd{\heartctrbull}\index{hearts} control the formatting of each
+  tally marker:
 
   \qquad
   \begin{tabular}{@{}lccc@{}}
@@ -18550,9 +22219,9 @@
 
 
 \begin{symtable}[DOZ]{\DOZ\ Tally Markers}
-\index{dozenal (base 12)>tally markers}
-\index{base twelve>tally markers}
-\index{duodecimal (base 12)>tally markers}
+\subindex{dozenal (base 12)}{tally markers}
+\subindex{base twelve}{tally markers}
+\subindex{duodecimal (base 12)}{tally markers}
 \idxboth{Pitman's base 12}{symbols}
 \index{tally markers}
 \label{dozenal-tally}
@@ -18563,6 +22232,57 @@
 \end{symtable}
 
 
+\begin{symtable}[CHILD]{\CHILD\ Letters and Digits}
+\index{alphabets}
+\index{numerals}
+\index{1=1 (\fcNumberOne)}
+\index{2=2 (\fcNumberTwo)}
+\index{3=3 (\fcNumberThree)}
+\index{4=4 (\fcNumberFour)}
+\index{5=5 (\fcNumberFive)}
+\index{6=6 (\fcNumberSix)}
+\index{7=7 (\fcNumberSeven)}
+\index{8=8 (\fcNumberEight)}
+\index{9=9 (\fcNumberNine)}
+\index{10=10 (\fcNumberTen)}
+\index{K=K (\fcLetterK)}
+\index{L=L (\fcLetterL)}
+\index{M=M (\fcLetterM)}
+\index{N=N (\fcLetterN)}
+\index{O=O (\fcLetterO)}
+\index{P=P (\fcLetterP)}
+\index{Q=Q (\fcLetterQ)}
+\index{R=R (\fcLetterR)}
+\index{S=S (\fcLetterS)}
+\index{T=T (\fcLetterT)}
+\index{U=U (\fcLetterU)}
+\index{V=V (\fcLetterV)}
+\index{W=W (\fcLetterW)}
+\index{X=X (\fcLetterX)}
+\index{Y=Y (\fcLetterY)}
+\index{Z=Z (\fcLetterZ)}
+\label{figchild-letters-digits}
+\begin{tabular}{*3{ll}}
+\K\fcLetterK & \K\fcLetterT   & \K\fcNumberThree \\
+\K\fcLetterL & \K\fcLetterU   & \K\fcNumberFour  \\
+\K\fcLetterM & \K\fcLetterV   & \K\fcNumberFive  \\
+\K\fcLetterN & \K\fcLetterW   & \K\fcNumberSix   \\
+\K\fcLetterO & \K\fcLetterX   & \K\fcNumberSeven \\
+\K\fcLetterP & \K\fcLetterY   & \K\fcNumberEight \\
+\K\fcLetterQ & \K\fcLetterZ   & \K\fcNumberNine  \\
+\K\fcLetterR & \K\fcNumberOne & \K\fcNumberTen   \\
+\K\fcLetterS & \K\fcNumberTwo &                  \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  It's a mystery why \CHILD's alphabet begins with ``K''.
+
+  \childmessage.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[SKULL]{\SKULL\ Symbols}
 \index{skulls}
 \label{skull}
@@ -18580,10 +22300,11 @@
 \end{symtable}
 
 
-\begin{symtable}[IFS]{Other \IFS\ Symbols}
+\begin{symtable}[IFS]{Miscellaneous \IFS\ Symbols}
 \idxboth{miscellaneous}{symbols}
 \index{rhombuses}
-\index{telephones}
+\index{telephone=telephone (\Telephone)}
+\index{radiation=radiation (\Radiation)}
 \label{ifs-misc}
 \begin{tabular}{*3{ll}}
 \K\FilledSectioningDiamond & \K[\ifsLetter]\Letter
@@ -18594,9 +22315,47 @@
 \end{symtable}
 
 
+\begin{symtable}[ASAP]{\ASAP\ Signs}
+\index{signs}
+\index{dollar sign=dollar sign (\asapDollarSign)}
+\index{dollar sign>negated=negated (\asapNotDollarSign)}
+\index{emergency sign=emergency sign (\asapEmergencySign)}
+\index{help sign=help sign (\asapHelpSign)}
+\index{hospital sign=hospital sign (\asapHospitalSign)}
+\index{information sign=information sign (\asapInformationSign)}
+\index{no smoking=no smoking (\asapNotCigaretteSign)}
+\index{no dogsn=no dogs (\asapNotDogSign)}
+\index{no mobile phones=no mobile phones (\asapNotMobilePhoneSign)}
+\index{no parking=no parking (\asapNotParkingSign)}
+\index{no=no (\asapNotSign)}
+\index{do not walk=do not walk (\asapNotWalkSign)}
+\index{walk=walk (\asapWalkSign)}
+\label{asapsym-signs}
+\begin{tabular}{*2{ll}}
+\K\asapCigaretteSign    & \K\asapNotEmergencySign   \\
+\K\asapDogSign          & \K\asapNotHelpSign        \\
+\K\asapDollarSign       & \K\asapNotHospitalSign    \\
+\K\asapEmergencySign    & \K\asapNotInformationSign \\
+\K\asapHelpSign         & \K\asapNotMobilePhoneSign \\
+\K\asapHospitalSign     & \K\asapNotParkingSign     \\
+\K\asapInformationSign  & \K\asapNotSign            \\
+\K\asapMobilePhoneSign  & \K\asapNotWalkSign        \\
+\K\asapNotCigaretteSign & \K\asapParkingSign        \\
+\K\asapNotDogSign       & \K\asapWalkSign           \\
+\K\asapNotDollarSign    &                           \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\ASAP}.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[METRE]{\METRE\ Metrical Symbols}
 \idxboth{metrical}{symbols}
 \label{metre}
+\begin{indexingoff}
 \begin{tabular}{*5{ll@{\hspace*{2em}}}ll}
 \Mt\a     & \Mt\bBm   & \Mt\cc    & \Mt\Mbb   & \Mt\Pppp  & \Mt\t     \\
 \Mt\B     & \Mt\bbm   & \Mt\Ccc   & \Mt\mbbx  & \Mt\pppp  & \Mt\tsbm  \\
@@ -18609,11 +22368,12 @@
 \Mt\bbb   & \Mt\C     & \Mt\mbB   & \Mt\ppp   & \Mt\r                 \\
 \Mt\BBm   & \Mt\Cc    & \Mt\mbb   & \Mt\Ppp   & \Mt\T                 \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 \begin{tablenote}
   The preceding symbols are valid only within the argument to the
-  \cmd{metre} command.
+  \cmd{\metre} command.
 \end{tablenote}
 \end{symtable}
 
@@ -18642,6 +22402,7 @@
 \begin{symtable}[TEUB]{\TEUB\ Metrical Symbols}
 \idxboth{metrical}{symbols}
 \label{teubner-metric}
+\begin{indexingoff}
 \begin{tabular}{*2{ll@{\qquad}}ll}
 \K\aeolicbii     & \K\barbrevis     & \K\ipercatal     \\
 \K\aeolicbiii    & \K\bbrevis       & \K\longa         \\
@@ -18661,50 +22422,269 @@
   \cmdI{\barbbrevis}es, four \cmdI{\brevis}es, and a \cmdI{\dBar} into
   ``\pentam''. \seedocs{\TEUB}.
 \end{tablenote}
+\end{indexingoff}
 \end{symtable}
 
 
-\begin{symtable}[DICT]{\DICT\ Dictionary Symbols}
-\idxboth{dictionary}{symbols}
-\label{dictionary}
-\begin{tabular}{*2{ll@{\qqquad}}ll}
-\K\dsaeronautical  & \K\dscommercial    & \K\dsmedical       \\
-\K\dsagricultural  & \K\dsheraldical    & \K\dsmilitary      \\
-\K\dsarchitectural & \K\dsjuridical     & \K\dsrailways      \\
-\K\dsbiological    & \K\dsliterary      & \K\dstechnical     \\
-\K\dschemical      & \K\dsmathematical  &                    \\
+\begin{symtable}[HNS]{\HNS\ Hand Shapes}
+\index{Hamburg Notation System}
+\index{sign language}
+\label{hamnosys-hand-shapes}
+\begin{tabular}{*3{ll}}
+\K\hamceeall    & \K\hamfingertwothree         & \K\hamflathand        \\
+\K\hamceeonetwo & \K\hamfingertwothreefourfive & \K\hampinchall        \\
+\K\hamceeopen   & \K\hamfingertwothreespread   & \K\hampinchonetwo     \\
+\K\hamfingertwo & \K\hamfist                   & \K\hampinchonetwoopen \\
 \end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\HNS}.
+\end{tablenote}
 \end{symtable}
 
 
-\begin{symtable}[SIMP]{\SIMP\ Characters from \emph{The Simpsons}}
-\index{symbols>Simpsons characters}
-\index{Simpsons characters}
-\index{faces}
-\label{simpsons}
-\begin{tabular}{*3{ll@{\qqquad}}ll}
-\K\Bart  & \K\Homer & \K\Maggie & \K\SNPP \\
-\K\Burns & \K\Lisa  & \K\Marge  &         \\
+\begin{symtable}[HNS]{\HNS\ Hand-Shape Modifiers}
+\index{Hamburg Notation System}
+\index{sign language}
+\label{hamnosys-hand-shape-mods}
+\begin{tabular}{*3{ll}}
+\K\hamdoublebent    & \K\hamfingerhookmod     & \K\hamthumbopenmod \\
+\K\hamdoublehooked  & \K\hamfingerstraightmod & \K\hamthumboutmod  \\
+\K\hamfingerbendmod & \K\hamthumbacrossmod    &                    \\
 \end{tabular}
 
 \bigskip
+\begin{tablenote}
+  \luaxemessage{\HNS}.
+\end{tablenote}
+\end{symtable}
 
+
+\begin{symtable}[HNS]{\HNS\ Extended Finger Directions}
+\index{Hamburg Notation System}
+\index{sign language}
+\label{hamnosys-ext-fing-dirs}
+\begin{tabular}{*3{ll}}
+\K\hamextfingerd  & \K\hamextfingeril & \K\hamextfingerr  \\
+\K\hamextfingerdi & \K\hamextfingerir & \K\hamextfingeru  \\
+\K\hamextfingerdl & \K\hamextfingerl  & \K\hamextfingerui \\
+\K\hamextfingerdo & \K\hamextfingero  & \K\hamextfingerul \\
+\K\hamextfingerdr & \K\hamextfingerol & \K\hamextfingeruo \\
+\K\hamextfingeri  & \K\hamextfingeror & \K\hamextfingerur \\
+\end{tabular}
+
+\bigskip
 \begin{tablenote}
-  The location of the characters' pupils can be controlled with the
-  \cmd{\Goofy} command.  See \emph{A \MF\ of `Simpsons'
-  characters}~\cite{Chen1998} for more information.  Also, each of the
-  above can be prefixed with \cmd{\Left} to make the character face
-  left instead of right:
+  \luaxemessage{\HNS}.
+\end{tablenote}
+\end{symtable}
 
-  \begin{center}
-    \begin{tabular}{ll}
-      \Left\Bart & \verb|\Left\Bart| \\
-    \end{tabular}
-  \end{center}
+
+\begin{symtable}[HNS]{\HNS\ Palm Orientations}
+\index{Hamburg Notation System}
+\index{sign language}
+\label{hamnosys-palm-orient}
+\begin{tabular}{*4{ll}}
+\K\hampalmd  & \K\hampalmdr & \K\hampalmr & \K\hampalmul \\
+\K\hampalmdl & \K\hampalml  & \K\hampalmu & \K\hampalmur \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\HNS}.
 \end{tablenote}
 \end{symtable}
 
 
+\begin{symtable}[HNS]{\HNS\ Body Locations}
+\index{Hamburg Notation System}
+\index{sign language}
+\label{hamnosys-body-locs}
+\begin{tabular}{*3{ll}}
+\K\hambelowstomach   & \K\hamfingertip    & \K\hampinkyside   \\
+\K\hamcheek          & \K\hamforehead     & \K\hamringfinger  \\
+\K\hamchest          & \K\hamhandback     & \K\hamshoulders   \\
+\K\hamchin           & \K\hamhead         & \K\hamshouldertop \\
+\K\hamear            & \K\hamheadtop      & \K\hamstomach     \\
+\K\hamearlobe        & \K\hamindexfinger  & \K\hamteeth       \\
+\K\hamelbow          & \K\hamlips         & \K\hamthumb       \\
+\K\hamelbowinside    & \K\hamlowerarm     & \K\hamthumbball   \\
+\K\hameyebrows       & \K\hammiddlefinger & \K\hamthumbside   \\
+\K\hameyes           & \K\hamneck         & \K\hamtongue      \\
+\K\hamfingerbase     & \K\hamneutralspace & \K\hamunderchin   \\
+\K\hamfingermidjoint & \K\hamnose         & \K\hamupperarm    \\
+\K\hamfingernail     & \K\hamnostrils     & \K\hamwristback   \\
+\K\hamfingerpad      & \K\hampalm         & \K\hamwristpulse  \\
+\K\hamfingerside     & \K\hampinky        &                   \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\HNS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[HNS]{\HNS\ Location Modifiers}
+\index{Hamburg Notation System}
+\index{sign language}
+\label{hamnosys-loc-mods}
+\begin{tabular}{ll*4{@{\qquad}ll}}
+\K\hamcorefref & \K\hamcoreftag & \K\hamlrat & \K\hamlrbeside \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\HNS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{longsymtable}[HNS]{\HNS\ Movements}
+\ltindex{Hamburg Notation System}
+\ltindex{sign language}
+\ltindex{arrows}
+\ltindex{fists}
+\ltindex{crosses}
+\label{hamnosys-move}
+\begin{longtable}{*3{ll@{\qqquad}}ll}
+\multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{6}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\K\hamarcd        & \K\hamclockdl    & \K\hammoveil   \\
+\K\hamarcl        & \K\hamclockdr    & \K\hammoveir   \\
+\K\hamarcr        & \K\hamclockfull  & \K\hammovel    \\
+\K\hamarcu        & \K\hamclockl     & \K\hammoveo    \\
+\K\hamarmextended & \K\hamclockr     & \K\hammoveol   \\
+\K\hambehind      & \K\hamclocku     & \K\hammoveor   \\
+\K\hambrushing    & \K\hamclockul    & \K\hammover    \\
+\K\hamcircled     & \K\hamclockur    & \K\hammoveu    \\
+\K\hamcircledi    & \K\hamclose      & \K\hammoveui   \\
+\K\hamcircledl    & \K\hamcross      & \K\hammoveul   \\
+\K\hamcircledo    & \K\hamdecreasing & \K\hammoveuo   \\
+\K\hamcircledr    & \K\hamellipseh   & \K\hammoveur   \\
+\K\hamcirclei     & \K\hamellipseul  & \K\hamnodding  \\
+\K\hamcircleil    & \K\hamellipseur  & \K\hamnomotion \\
+\K\hamcircleir    & \K\hamellipsev   & \K\hamreplace  \\
+\K\hamcirclel     & \K\hamfast       & \K\hamrest     \\
+\K\hamcircleo     & \K\hamfingerplay & \K\hamslow     \\
+\K\hamcircleol    & \K\hamhalt       & \K\hamstirccw  \\
+\K\hamcircleor    & \K\hamincreasing & \K\hamstircw   \\
+\K\hamcircler     & \K\haminterlock  & \K\hamswinging \\
+\K\hamcircleu     & \K\hammoved      & \K\hamtense    \\
+\K\hamcircleui    & \K\hammovedi     & \K\hamtouch    \\
+\K\hamcircleul    & \K\hammovedl     & \K\hamtwisting \\
+\K\hamcircleuo    & \K\hammovedo     & \K\hamwavy     \\
+\K\hamcircleur    & \K\hammovedr     & \K\hamzigzag   \\
+\K\hamclockd      & \K\hammovei      &                \\
+\end{longtable}
+\begin{tablenote}
+  \luaxemessage{\HNS}.
+\end{tablenote}
+\end{longsymtable}
+
+
+\begin{symtable}[HNS]{\HNS\ Movement Modifiers}
+\index{Hamburg Notation System}
+\index{sign language}
+\label{hamnosys-move-mods}
+\begin{tabular}{ll@{\qquad}ll}
+\K\hamlargemod & \K\hamsmallmod \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\HNS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[HNS]{\HNS\ Obsolete Spacing Symbols}
+\index{Hamburg Notation System}
+\index{sign language}
+\index{arrows}
+\label{hamnosys-obs-spacing}
+\begin{tabular}{*3{ll}}
+\K\hammovecross & \K\hamwristtoback  & \K\hamwristtopulse \\
+\K\hammoveX     & \K\hamwristtopinky & \K\hamwristtothumb \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\HNS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[HNS]{Miscellaneous \HNS\ Symbols}
+\index{Hamburg Notation System}
+\index{sign language}
+\index{arrows}
+\label{hamnosys-misc}
+\begin{tabular}{*2{ll}}
+\K\hamalternatingmotion & \K\hamplus                   \\
+\K\hambetween           & \K\hamrepeatcontinue         \\
+\K\hametc               & \K\hamrepeatcontinueseveral  \\
+\K\hamfusionbegin       & \K\hamrepeatfromstart        \\
+\K\hamfusionend         & \K\hamrepeatfromstartseveral \\
+\K\hammime              & \K\hamrepeatreverse          \\
+\K\hamnondominant       & \K\hamseqbegin               \\
+\K\hamnonipsi           & \K\hamseqend                 \\
+\K\hamorirelative       & \K\hamsymmlr                 \\
+\K\hamparbegin          & \K\hamsymmpar                \\
+\K\hamparend            &                              \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\HNS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[DICT]{\DICT\ Dictionary Symbols}
+\idxboth{dictionary}{symbols}
+\idxboth{medical}{symbols}
+\index{caduceus=caduceus (\dscommercial)}
+\index{rod of Asclepius=rod of Asclepius (\dsmedical)}
+\index{scale=scale (\dsjuridical)}
+\index{book=book (\dsliterary)}
+\index{compass=compass (\dsmathematical)}
+\index{train=train (\dsrailways)}
+\index{shovel=shovel (\dsagricultural)}
+\index{retort=retort (\dschemical)}
+\index{aeronautics=aeronautics (\dsaeronautical)}
+\index{agriculture=agriculture (\dsagricultural)}
+\index{architecture=architecture (\dsarchitectural)}
+\index{biology=biology (\dsbiological)}
+\index{chemistry=chemistry (\dschemical)}
+\index{commerce=commerce (\dscommercial)}
+\index{heraldry=heraldry (\dsheraldical)}
+\index{justice=justice (\dsjuridical)}
+\index{literature=literature (\dsliterary)}
+\index{mathematics=mathematics (\dsmathematical)}
+\index{medicine=medicine (\dsmedical)}
+\index{military=military (\dsmilitary)}
+\index{railway=railway (\dsrailways)}
+\index{technical=technical (\dstechnical)}
+\label{dictionary}
+\begin{indexingoff}
+\begin{tabular}{*2{ll@{\qqquad}}ll}
+\K\dsaeronautical  & \K\dscommercial    & \K\dsmedical       \\
+\K\dsagricultural  & \K\dsheraldical    & \K\dsmilitary      \\
+\K\dsarchitectural & \K\dsjuridical     & \K\dsrailways      \\
+\K\dsbiological    & \K\dsliterary      & \K\dstechnical     \\
+\K\dschemical      & \K\dsmathematical  &                    \\
+\end{tabular}
+\end{indexingoff}
+\end{symtable}
+
+
 \begin{symtable}[PMBOX]{\PMBOX\ Box-Drawing Symbols}
 \idxboth{box-drawing}{symbols}
 \idxboth{block-element}{symbols}
@@ -18715,6 +22695,7 @@
 \index{code page 437}
 \label{box-drawing}
 \renewcommand{\arraystretch}{1.25}
+\begin{indexingoff}
 \begin{tabular}{*4{ll@{\quad}}ll}
 \K\textblock     & \K\textSFli      & \K\textSFxli     & \K\textSFxxiii   \\
 \K\textdkshade   & \K\textSFlii     & \K\textSFxlii    & \K\textSFxxiv    \\
@@ -18729,8 +22710,9 @@
 \K\textSFix      & \K\textSFxix     & \K\textSFxxi     & \K\textshade     \\
 \K\textSFl       & \K\textSFxl      & \K\textSFxxii    & \K\textupblock   \\
 \end{tabular}
+\end{indexingoff}
+
 \bigskip
-
 \begin{tablenote}
   Code Page~437 (CP437), which was first utilized by the original
   IBM~PC, contains the set of box-drawing symbols (sides, corners, and
@@ -18754,6 +22736,7 @@
 \index{staves}
 \index{Icelandic staves}
 \label{staves}
+\begin{indexingoff}
 \begin{longtable}{*2{ll@{\qqquad}}ll}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
 \endhead
@@ -18786,9 +22769,9 @@
 \K\staveXXII  & \K\staveXLV     & \K\staveLXVIII \\
 \K\staveXXIII & \K\staveXLVI    &                \\
 \end{longtable}
+\end{indexingoff}
 
 \bigskip
-
 \begin{tablenote}
   The meanings of these symbols are described on the Web site for the
   Museum of Icelandic Sorcery and Witchcraft\index{Museum of Icelandic
@@ -18854,11 +22837,62 @@
 
 \bigskip
 \begin{tablenote}
-  \twemojismessage
+  \twemojismessage.
 \end{tablenote}
 \end{symtable}
 
 
+\begin{symtable}[CHILD]{\CHILD\ Space Symbols}
+\idxboth{space}{symbols}
+\index{moons}
+\index{celestial bodies}
+\index{stars}
+\index{planets}
+\index{extraterrestrial=extraterrestrial (\fcET)}
+\index{flying saucer=flying saucer (\fcFlyingSaucer)}
+\index{moon=moon (\fcMoonA)}
+\index{moon=moon (\fcMoonB)}
+\index{planet=planet (\fcPlanetA)}
+\index{planet=planet (\fcPlanetB)}
+\index{planet=planet (\fcPlanetC)}
+\index{planet=planet (\fcPlanetD)}
+\index{planet=planet (\fcPlanetE)}
+\index{planet=planet (\fcPlanetF)}
+\index{planet=planet (\fcPlanetG)}
+\index{planets=planets (\fcPlanets)}
+\index{rocket=rocket (\fcRocket)}
+\index{rocket=rocket (\fcRocketA)}
+\index{rocket=rocket (\fcRocketB)}
+\index{rocket=rocket (\fcRocketC)}
+\index{saturn=saturn (\fcSaturnA)}
+\index{saturn=saturn (\fcSaturnB)}
+\index{shooting star=shooting star (\fcShootingStar)}
+\index{spacecraft=spacecraft (\fcSpacecraftA)}
+\index{spacecraft=spacecraft (\fcSpacecraftB)}
+\index{star=star (\fcStar)}
+\index{star=star (\fcStarA)}
+\index{galaxy=galaxy (\fcStarB)}
+\index{constellation=constellation (\fcStars)}
+\label{figchild-space}
+\begin{tabular}{*3{ll}}
+\K\fcET           & \K\fcPlanetF & \K\fcShootingStar \\
+\K\fcFlyingSaucer & \K\fcPlanetG & \K\fcSpacecraftA  \\
+\K\fcMoonA        & \K\fcPlanets & \K\fcSpacecraftB  \\
+\K\fcMoonB        & \K\fcRocket  & \K\fcStar         \\
+\K\fcPlanetA      & \K\fcRocketA & \K\fcStarA        \\
+\K\fcPlanetB      & \K\fcRocketB & \K\fcStarB        \\
+\K\fcPlanetC      & \K\fcRocketC & \K\fcStars        \\
+\K\fcPlanetD      & \K\fcSaturnA &                   \\
+\K\fcPlanetE      & \K\fcSaturnB &                   \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \childmessage.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{symtable}[CHINA]{\CHINA\ Recycling Symbols}
 \idxboth{recycling}{symbols}
 \label{china-recycle}
@@ -18893,6 +22927,15 @@
 \end{symtable}
 
 
+\begin{symtable}[FNTAWE]{\FNTAWE\ Recycling Symbols}
+\idxboth{recycling}{symbols}
+\label{fontawesome5-recycle}
+\begin{tabular}{ll}
+\K\faRecycle \\
+\end{tabular}
+\end{symtable}
+
+
 \begin{symtable}[RECYC]{\RECYC\ Recycling Symbols}
 \idxboth{recycling}{symbols}
 \label{recycling}
@@ -18924,9 +22967,41 @@
 \end{symtable}
 
 
-\begin{symtable}[CHINA]{Other \CHINA\ Symbols}
+\begin{symtable}[UTFSYM]{\UTFSYM\ Plants and Flowers}
+\index{flowers}
+\label{utfsym-plants-flowers}
+\begin{tabular}{*4{ll}}
+\Tutf{1F331} & \Tutf{1F337} & \Tutf{1F33C} & \Tutf{1F341} \\
+\Tutf{1F332} & \Tutf{1F338} & \Tutf{1F33D} & \Tutf{1F342} \\
+\Tutf{1F333} & \Tutf{1F339} & \Tutf{1F33E} & \Tutf{1F343} \\
+\Tutf{1F334} & \Tutf{1F33A} & \Tutf{1F33F} & \Tutf{1F3F5} \\
+\Tutf{1F335} & \Tutf{1F33B} & \Tutf{1F340} & \Tutf{1F3F6} \\
+\end{tabular}
+
+\bigskip
+\utfsymmessage
+\end{symtable}
+
+
+\begin{symtable}[UTFSYM]{\UTFSYM\ Clothing}
+\index{clothing}
+\label{utfsym-clothing}
+\begin{tabular}{*4{ll}}
+\Tutf{1F451} & \Tutf{1F456} & \Tutf{1F45B} & \Tutf{1F460} \\
+\Tutf{1F452} & \Tutf{1F457} & \Tutf{1F45C} & \Tutf{1F461} \\
+\Tutf{1F453} & \Tutf{1F458} & \Tutf{1F45D} & \Tutf{1F462} \\
+\Tutf{1F454} & \Tutf{1F459} & \Tutf{1F45E} &              \\
+\Tutf{1F455} & \Tutf{1F45A} & \Tutf{1F45F} &              \\
+\end{tabular}
+
+\bigskip
+\utfsymmessage
+\end{symtable}
+
+
+\begin{symtable}[CHINA]{Miscellaneous \CHINA\ Symbols}
 \index{envelopes}
-\index{telephones}
+\index{telephone=telephone (\chinaTelephone)}
 \label{china-misc}
 \begin{tabular}{*2{ll}}
 \K[\chinaInfo]\Info & \K\Request                    \\
@@ -18996,403 +23071,358 @@
 \end{symtable}
 
 
-\begin{longsymtable}[COE]{\COE\ Country Maps}
-\idxboth{European}{countries}
-\index{symbols>countries}
-\index{symbols>maps}
-\index{maps}
-\index{land masses}
-\label{CountriesOfEurope}
-\renewcommand{\arraystretch}{2}   % Prevent tall symbols from touching.
-\begin{longtable}{@{}ll@{\hspace{4em}}ll@{}}
-\multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
-\endhead
-\endfirsthead
-\\[3ex]
-\multicolumn{4}{r}{\small\textit{(continued on next page)}}
-\endfoot
-\endlastfoot
-\Kcoe\Albania       & \Kcoe\Latvia        \\
-\Kcoe\Andorra       & \Kcoe\Liechtenstein \\
-\Kcoe\Austria       & \Kcoe\Lithuania     \\
-\Kcoe\Belarus       & \Kcoe\Luxembourg    \\
-\Kcoe\Belgium       & \Kcoe\Macedonia     \\
-\Kcoe\Bosnia        & \Kcoe\Malta         \\
-\Kcoe\Bulgaria      & \Kcoe\Moldova       \\
-\Kcoe\Croatia       & \Kcoe\Montenegro    \\
-\Kcoe\Czechia       & \Kcoe\Netherlands   \\
-\Kcoe\Denmark       & \Kcoe\Norway        \\
-\Kcoe\Estonia       & \Kcoe\Poland        \\
-\Kcoe\Finland       & \Kcoe\Portugal      \\
-\Kcoe\France        & \Kcoe\Romania       \\
-\Kcoe\Germany       & \Kcoe\Serbia        \\
-\Kcoe\GreatBritain  & \Kcoe\Slovakia      \\
-\Kcoe\Greece        & \Kcoe\Slovenia      \\
-\Kcoe\Hungary       & \Kcoe\Spain         \\
-\Kcoe\Iceland       & \Kcoe\Sweden        \\
-\Kcoe\Ireland       & \Kcoe\Switzerland   \\
-\Kcoe\Italy         &                     \\
-\end{longtable}
+\begin{symtable}[WFLAGS]{\WFLAGS\ Nautical Symbol Flags}
+\index{flags}
+\label{worldflags-nautical}
+\renewcommand{\arraystretch}{1.25}  % Keep flags from touching.
+\begin{tabular}{*4{ll}}
+\Twflag{A} & \Twflag{J} & \Twflag{S} & \Twflag{1} \\
+\Twflag{B} & \Twflag{K} & \Twflag{T} & \Twflag{2} \\
+\Twflag{C} & \Twflag{L} & \Twflag{U} & \Twflag{3} \\
+\Twflag{D} & \Twflag{M} & \Twflag{V} & \Twflag{4} \\
+\Twflag{E} & \Twflag{N} & \Twflag{W} & \Twflag{5} \\
+\Twflag{F} & \Twflag{O} & \Twflag{X} & \Twflag{6} \\
+\Twflag{G} & \Twflag{P} & \Twflag{Y} & \Twflag{7} \\
+\Twflag{H} & \Twflag{Q} & \Twflag{Z} & \Twflag{8} \\
+\Twflag{I} & \Twflag{R} & \Twflag{0} & \Twflag{9} \\
+\end{tabular}
 
 \bigskip
-
 \begin{tablenote}
-  The preceding commands work only when the \texttt{CountriesOfEurope}
-  \fntfam[CountriesOfEurope] is active.  For convenience, the package
-  defines a \cmd{\countriesofeuropefamily} command that switches to
-  that \fntfam.
-
-  By default, countries are drawn in the current font size.  Hence,
-  ``\verb|{\countriesofeuropefamily\France}|'' draws a nearly
-  unrecognizable ``{\countriesofeuropefamily\France}''.  For clarity
-  of presentation, \ref{CountriesOfEurope} scales each glyph to
-  72\,pt.\ via an explicit \verb|\fontsize{72}{72}|.  An alternative
-  is to specify the \optname{CountriesOfEurope}{scaled} package option
-  to scale all country glyphs by a given factor of the font size.
+  \worldflagsmessage.
 \end{tablenote}
-\end{longsymtable}
+\end{symtable}
 
 
-\begin{longsymtable}[ROJUD]{\ROJUD\ Maps of Romanian Counties}
-\idxboth{Romanian}{counties}
-\index{symbols>counties}
-\index{symbols>maps}
-\index{maps}
-\index{land masses}
-\label{romanian-counties}
-\renewcommand{\arraystretch}{2}   % Prevent tall symbols from touching.
-\begin{longtable}{@{}ll*2{@{\hspace{4em}}ll}@{}}
-\multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
-\endhead
-\endfirsthead
-\\[3ex]
-\multicolumn{6}{r}{\small\textit{(continued on next page)}}
-\endfoot
-\endlastfoot
-\Krojud\jAB & \Krojud\jCT & \Krojud\jMS \\
-\Krojud\jAG & \Krojud\jCV & \Krojud\jNT \\
-\Krojud\jAR & \Krojud\jDB & \Krojud\jOT \\
-\Krojud\jBC & \Krojud\jDJ & \Krojud\jPH \\
-\Krojud\jBH & \Krojud\jGJ & \Krojud\jSB \\
-\Krojud\jBI & \Krojud\jGL & \Krojud\jSJ \\
-\Krojud\jBN & \Krojud\jGR & \Krojud\jSM \\
-\Krojud\jBR & \Krojud\jHD & \Krojud\jSV \\
-\Krojud\jBT & \Krojud\jHR & \Krojud\jTL \\
-\Krojud\jBV & \Krojud\jIF & \Krojud\jTM \\
-\Krojud\jBZ & \Krojud\jIL & \Krojud\jTR \\
-\Krojud\jCJ & \Krojud\jIS & \Krojud\jVL \\
-\Krojud\jCL & \Krojud\jMH & \Krojud\jVN \\
-\Krojud\jCS & \Krojud\jMM & \Krojud\jVS \\
-\end{longtable}
+\begin{symtable}[WFLAGS]{Other \WFLAGS\ Flags}
+\index{flags}
+\label{worldflags-other}
+\renewcommand{\arraystretch}{1.25}  % Keep flags from touching.
+\begin{tabular}{*3{ll}}
+\Twflag{Buddhism}   & \Twflag{NATO}        & \Twflag{RedCrystal} \\
+\Twflag{Christian}  & \Twflag{Olympics}    & \Twflag{UNESCO}     \\
+\Twflag{Esperanto}  & \Twflag{Rainbow}     & \Twflag{UNO}        \\
+\Twflag{EU}         & \Twflag{RedCrescent} & \Twflag{WB}         \\
+\Twflag{JollyRoger} & \Twflag{RedCross}    & \Twflag{WHO}        \\
+\end{tabular}
+
 \bigskip
-
 \begin{tablenote}
-  The preceding commands work only when the \texttt{rojud}
-  \fntfam[rojud] is active.  Use the OT1 \fntenc{OT1} in
-  pdf\LaTeX\index{pdfLaTeX=pdf\LaTeX} and the TU \fntenc[TU] in
-  \xelatex.  (\ROJUD\ requires one of those two \tex\ engines.)  For
-  example, ``\verb|{\usefont{OT1}{rojud}{m}{n}\jBI}|'' draws
-  Bucharest\index{Bucharest}.\footnote{technically a municipality, not
-    a county}
+  \worldflagsmessage.
 \end{tablenote}
-\end{longsymtable}
+\end{symtable}
 
 
-\begin{symtable}[EUFLAG]{\EUFLAG\ European Union Flag}
+\begin{symtable}[TWEM]{\TWEM\ Non-National Flags}
 \index{flags}
-\label{euflag}
-\begin{tabular}{ll}
-\K\euflag \\
+\label{twemiji-other-flags}
+\begin{tabular}{*2{ll}}
+\Ttwem{pirate flag}{1f3f4-200d-2620-fe0f}   & \Ttwem{transgender flag}{1f3f3-fe0f-200d-26a7-fe0f} \\
+\Ttwem{rainbow flag}{1f3f3-fe0f-200d-1f308} &                                                     \\
 \end{tabular}
 
 \bigskip
 \begin{tablenote}
-  The \texttt{\string\euflag} flag is drawn using the
-  \latex\ \texttt{picture} environment.
+  \twemojismessage.
 \end{tablenote}
 \end{symtable}
 
 
-\begin{longsymtable}[WFLAGS]{\WFLAGS\ World Flags}
-\ltindex{flags}
-\label{worldflags}
-\renewcommand{\arraystretch}{1.25}  % Keep flags from touching.
-\begin{longtable}{*3{ll}}
-\multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\begin{symtable}[FNTAWE]{\FNTAWE\ Flags}
+\subindex{flags}{United States=United States (\faFlagUsa)}
+\subindex{flags}{checkered=checkered (\faFlagCheckered)}
+\index{flag=flag (\faFlag)}
+\label{fontawesome5-flags}
+\begin{tabular}{*2{ll}}
+\K\faFlag      & \K\faFlagCheckered \\
+\KfaReg\faFlag & \K\faFlagUsa       \\
+\end{tabular}
+\end{symtable}
+
+
+\begin{symtable}[AREV]{Miscellaneous \AREV\ Symbols}
+\index{smiley faces}
+\index{frowny faces}
+\index{faces}
+\index{quotation marks}
+\index{skulls}
+\idxboth{miscellaneous}{symbols}
+\idxboth{recycling}{symbols}
+\idxboth{yin-yang}{symbols}
+\index{radiation=radiation (\AREVradiation)}
+\label{arev-misc}
+\begin{tabular}{*4{ll}}
+\K[\AREVanchor]\anchor             & \K[\AREVinvsmileface]\invsmileface & \K[\AREVskull]\skull         & \K[\AREVwarning]\warning \\
+\K[\AREVbiohazard]\biohazard       & \K[\AREVradiation]\radiation       & \K[\AREVsmileface]\smileface & \K[\AREVyinyang]\yinyang \\
+\K[\AREVheavyqtleft]\heavyqtleft   & \K[\AREVrecycle]\recycle           & \K[\AREVsteaming]\steaming   &                          \\
+\K[\AREVheavyqtright]\heavyqtright & \K[\AREVsadface]\sadface           & \K[\AREVswords]\swords       &                          \\
+\end{tabular}
+\end{symtable}
+
+
+\begin{longsymtable}[TWEM]{\TWEM\ Food Emoji}
+\ltindex{food}
+\ltindex{emoji}
+\label{twemoji-food}
+\begin{longtable}{*2{ll}}
+\multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
 \endhead
 \endfirsthead
 \\[3ex]
-\multicolumn{6}{r}{\small\textit{(continued on next page)}}
+\multicolumn{4}{r}{\small\textit{(continued on next page)}}
 \endfoot
 \endlastfoot
-\Twflag{Abkhazia}  & \Twflag{GL}         & \Twflag{NU}           \\
-\Twflag{AD}        & \Twflag{GM}         & \Twflag{NZ}           \\
-\Twflag{AE}        & \Twflag{GN}         & \Twflag{Olympics}     \\
-\Twflag{AF}        & \Twflag{GQ}         & \Twflag{OM}           \\
-\Twflag{AG}        & \Twflag{GR}         & \Twflag{PA}           \\
-\Twflag{AL}        & \Twflag{GT}         & \Twflag{PE}           \\
-\Twflag{AM}        & \Twflag{GW}         & \Twflag{PG}           \\
-\Twflag{AO}        & \Twflag{GY}         & \Twflag{PH}           \\
-\Twflag{AQ}        & \Twflag{HN}         & \Twflag{PK}           \\
-\Twflag{AR}        & \Twflag{HR}         & \Twflag{PL}           \\
-\Twflag{Artsakh}   & \Twflag{HT}         & \Twflag{PS}           \\
-\Twflag{AT}        & \Twflag{HU}         & \Twflag{PT}           \\
-\Twflag{AU}        & \Twflag{ID}         & \Twflag{PW}           \\
-\Twflag{AZ}        & \Twflag{IE}         & \Twflag{PY}           \\
-\Twflag{BA}        & \Twflag{IL}         & \Twflag{QA}           \\
-\Twflag{BB}        & \Twflag{IN}         & \Twflag{Rainbow}      \\
-\Twflag{BD}        & \Twflag{IQ}         & \Twflag{RedCross}     \\
-\Twflag{BE}        & \Twflag{IR}         & \Twflag{RO}           \\
-\Twflag{BF}        & \Twflag{IS}         & \Twflag{RS}           \\
-\Twflag{BG}        & \Twflag{IT}         & \Twflag{RU}           \\
-\Twflag{BH}        & \Twflag{JM}         & \Twflag{RW}           \\
-\Twflag{BI}        & \Twflag{JO}         & \Twflag{SA}           \\
-\Twflag{BJ}        & \Twflag{JollyRoger} & \Twflag{SB}           \\
-\Twflag{BN}        & \Twflag{JP}         & \Twflag{SC}           \\
-\Twflag{BO}        & \Twflag{KE}         & \Twflag{SD}           \\
-\Twflag{BR}        & \Twflag{KG}         & \Twflag{SE}           \\
-\Twflag{BS}        & \Twflag{KH}         & \Twflag{SG}           \\
-\Twflag{BT}        & \Twflag{KI}         & \Twflag{SI}           \\
-\Twflag{BW}        & \Twflag{KM}         & \Twflag{SK}           \\
-\Twflag{BY}        & \Twflag{KN}         & \Twflag{SL}           \\
-\Twflag{BZ}        & \Twflag{KO}         & \Twflag{SM}           \\
-\Twflag{CA}        & \Twflag{KP}         & \Twflag{SN}           \\
-\Twflag{CD}        & \Twflag{KR}         & \Twflag{SO}           \\
-\Twflag{CF}        & \Twflag{KW}         & \Twflag{Somaliland}   \\
-\Twflag{CG}        & \Twflag{KZ}         & \Twflag{SR}           \\
-\Twflag{CH}        & \Twflag{LA}         & \Twflag{SS}           \\
-\Twflag{CI}        & \Twflag{LB}         & \Twflag{ST}           \\
-\Twflag{CK}        & \Twflag{LC}         & \Twflag{SV}           \\
-\Twflag{CL}        & \Twflag{LI}         & \Twflag{SY}           \\
-\Twflag{CM}        & \Twflag{LK}         & \Twflag{SZ}           \\
-\Twflag{CN}        & \Twflag{LR}         & \Twflag{TD}           \\
-\Twflag{CO}        & \Twflag{LS}         & \Twflag{TG}           \\
-\Twflag{CR}        & \Twflag{LT}         & \Twflag{TH}           \\
-\Twflag{CU}        & \Twflag{LU}         & \Twflag{TJ}           \\
-\Twflag{CV}        & \Twflag{LV}         & \Twflag{TL}           \\
-\Twflag{CY}        & \Twflag{LY}         & \Twflag{TM}           \\
-\Twflag{CZ}        & \Twflag{MA}         & \Twflag{TN}           \\
-\Twflag{DE}        & \Twflag{MD}         & \Twflag{TO}           \\
-\Twflag{DJ}        & \Twflag{ME}         & \Twflag{TR}           \\
-\Twflag{DK}        & \Twflag{MG}         & \Twflag{Transnistria} \\
-\Twflag{DM}        & \Twflag{MH}         & \Twflag{TT}           \\
-\Twflag{DO}        & \Twflag{MK}         & \Twflag{TV}           \\
-\Twflag{DZ}        & \Twflag{ML}         & \Twflag{TW}           \\
-\Twflag{EC}        & \Twflag{MM}         & \Twflag{TZ}           \\
-\Twflag{EE}        & \Twflag{MN}         & \Twflag{UA}           \\
-\Twflag{EG}        & \Twflag{MR}         & \Twflag{UG}           \\
-\Twflag{EH}        & \Twflag{MT}         & \Twflag{UNO}          \\
-\Twflag{ER}        & \Twflag{MU}         & \Twflag{US}           \\
-\Twflag{ES}        & \Twflag{MV}         & \Twflag{UY}           \\
-\Twflag{Esperanto} & \Twflag{MW}         & \Twflag{UZ}           \\
-\Twflag{ET}        & \Twflag{MX}         & \Twflag{VA}           \\
-\Twflag{EU}        & \Twflag{MY}         & \Twflag{VC}           \\
-\Twflag{FI}        & \Twflag{MZ}         & \Twflag{VE}           \\
-\Twflag{FJ}        & \Twflag{NA}         & \Twflag{VN}           \\
-\Twflag{FM}        & \Twflag{NATO}       & \Twflag{VU}           \\
-\Twflag{FR}        & \Twflag{NE}         & \Twflag{WB}           \\
-\Twflag{GA}        & \Twflag{NG}         & \Twflag{WS}           \\
-\Twflag{GB}        & \Twflag{NI}         & \Twflag{YE}           \\
-\Twflag{GD}        & \Twflag{NL}         & \Twflag{ZA}           \\
-\Twflag{GE}        & \Twflag{NO}         & \Twflag{ZM}           \\
-\Twflag{GF}        & \Twflag{NP}         & \Twflag{ZW}           \\
-\Twflag{GH}        & \Twflag{NR}         &                       \\
+\Ttwem{avocado}{1f951}                   & \Ttwem{hot beverage}{2615}           \\
+\Ttwem{bacon}{1f953}                     & \Ttwem{hot dog}{1f32d}               \\
+\Ttwem{bagel}{1f96f}                     & \Ttwem{hot pepper}{1f336}            \\
+\Ttwem{baguette bread}{1f956}            & \Ttwem{ice}{1f9ca}                   \\
+\Ttwem{banana}{1f34c}                    & \Ttwem{ice cream}{1f368}             \\
+\Ttwem{beer mug}{1f37a}                  & \Ttwem{kiwi fruit}{1f95d}            \\
+\Ttwem{bell pepper}{1fad1}               & \Ttwem{leafy green}{1f96c}           \\
+\Ttwem{bento box}{1f371}                 & \Ttwem{lemon}{1f34b}                 \\
+\Ttwem{beverage box}{1f9c3}              & \Ttwem{lollipop}{1f36d}              \\
+\Ttwem{blueberries}{1fad0}               & \Ttwem{mango}{1f96d}                 \\
+\Ttwem{bottle with popping cork}{1f37e}  & \Ttwem{mate}{1f9c9}                  \\
+\Ttwem{bowl with spoon}{1f963}           & \Ttwem{meat on bone}{1f356}          \\
+\Ttwem{bread}{1f35e}                     & \Ttwem{melon}{1f348}                 \\
+\Ttwem{broccoli}{1f966}                  & \Ttwem{moon cake}{1f96e}             \\
+\Ttwem{bubble tea}{1f9cb}                & \Ttwem{mushroom}{1f344}              \\
+\Ttwem{burrito}{1f32f}                   & \Ttwem{oden}{1f362}                  \\
+\Ttwem{butter}{1f9c8}                    & \Ttwem{olive}{1fad2}                 \\
+\Ttwem{candy}{1f36c}                     & \Ttwem{onion}{1f9c5}                 \\
+\Ttwem{canned food}{1f96b}               & \Ttwem{pancakes}{1f95e}              \\
+\Ttwem{carrot}{1f955}                    & \Ttwem{peach}{1f351}                 \\
+\Ttwem{cheese wedge}{1f9c0}              & \Ttwem{peanuts}{1f95c}               \\
+\Ttwem{cherries}{1f352}                  & \Ttwem{pear}{1f350}                  \\
+\Ttwem{chocolate bar}{1f36b}             & \Ttwem{pie}{1f967}                   \\
+\Ttwem{chopsticks}{1f962}                & \Ttwem{pineapple}{1f34d}             \\
+\Ttwem{clinking beer mugs}{1f37b}        & \Ttwem{pizza}{1f355}                 \\
+\Ttwem{clinking glasses}{1f942}          & \Ttwem{popcorn}{1f37f}               \\
+\Ttwem{cocktail glass}{1f378}            & \Ttwem{pot of food}{1f372}           \\
+\Ttwem{coconut}{1f965}                   & \Ttwem{potato}{1f954}                \\
+\Ttwem{cooked rice}{1f35a}               & \Ttwem{poultry leg}{1f357}           \\
+\Ttwem{cookie}{1f36a}                    & \Ttwem{pretzel}{1f968}               \\
+\Ttwem{cooking}{1f373}                   & \Ttwem{red apple}{1f34e}             \\
+\Ttwem{croissant}{1f950}                 & \Ttwem{rice ball}{1f359}             \\
+\Ttwem{cucumber}{1f952}                  & \Ttwem{rice cracker}{1f358}          \\
+\Ttwem{cup with straw}{1f964}            & \Ttwem{roasted sweet potato}{1f360}  \\
+\Ttwem{cupcake}{1f9c1}                   & \Ttwem{sake}{1f376}                  \\
+\Ttwem{curry rice}{1f35b}                & \Ttwem{salt}{1f9c2}                  \\
+\Ttwem{custard}{1f36e}                   & \Ttwem{sandwich}{1f96a}              \\
+\Ttwem{cut of meat}{1f969}               & \Ttwem{shallow pan of food}{1f958}   \\
+\Ttwem{dango}{1f361}                     & \Ttwem{shaved ice}{1f367}            \\
+\Ttwem{doughnut}{1f369}                  & \Ttwem{shortcake}{1f370}             \\
+\Ttwem{dumpling}{1f95f}                  & \Ttwem{soft ice cream}{1f366}        \\
+\Ttwem{egg}{1f95a}                       & \Ttwem{spaghetti}{1f35d}             \\
+\Ttwem{eggplant}{1f346}                  & \Ttwem{steaming bowl}{1f35c}         \\
+\Ttwem{falafel}{1f9c6}                   & \Ttwem{strawberry}{1f353}            \\
+\Ttwem{fish cake with swirl}{1f365}      & \Ttwem{stuffed flatbread}{1f959}     \\
+\Ttwem{flatbread}{1fad3}                 & \Ttwem{sushi}{1f363}                 \\
+\Ttwem{fondue}{1fad5}                    & \Ttwem{taco}{1f32e}                  \\
+\Ttwem{fork and knife}{1f374}            & \Ttwem{takeout box}{1f961}           \\
+\Ttwem{fork and knife with plate}{1f37d} & \Ttwem{tamale}{1fad4}                \\
+\Ttwem{fortune cookie}{1f960}            & \Ttwem{tangerine}{1f34a}             \\
+\Ttwem{french fries}{1f35f}              & \Ttwem{teacup without handle}{1f375} \\
+\Ttwem{fried shrimp}{1f364}              & \Ttwem{teapot}{1fad6}                \\
+\Ttwem{garlic}{1f9c4}                    & \Ttwem{tomato}{1f345}                \\
+\Ttwem{glass of milk}{1f95b}             & \Ttwem{tropical drink}{1f379}        \\
+\Ttwem{grapes}{1f347}                    & \Ttwem{tumbler glass}{1f943}         \\
+\Ttwem{green apple}{1f34f}               & \Ttwem{waffle}{1f9c7}                \\
+\Ttwem{green salad}{1f957}               & \Ttwem{watermelon}{1f349}            \\
+\Ttwem{hamburger}{1f354}                 & \Ttwem{wine glass}{1f377}            \\
+\Ttwem{honey pot}{1f36f}                 &                                      \\
 \end{longtable}
 
-\bigskip
 \begin{tablenote}
-  All \WFLAGS\ symbols are implemented with \TikZ\ graphics, not with
-  a font.  The package provides a number of options for controlling
-  flag size and style.  \seedocs{\WFLAGS}.
+  \twemojismessage.
 \end{tablenote}
 \end{longsymtable}
 
 
-\begin{longsymtable}[TWEM]{\TWEM\ Flags}
-\ltindex{flags}
-\ltindex{emoji}
-\label{twemoji-flags}
-\begin{longtable}{*2{lp{\twemwidth}}}
-\multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\begin{longsymtable}[CHILD]{\CHILD\ Food and Cooking Symbols}
+\ltindex{food}
+\ltidxboth{cooking}{symbols}
+\ltindex{apple=apple (\fcApple)}
+\ltindex{barbecue=barbecue (\fcBarbecue)}
+\ltindex{kabob=kabob (\fcBarbecue)}
+\ltindex{bread=bread (\fcBread)}
+\ltindex{cupcake=cupcake (\fcBrownie)}
+\ltindex{candy=candy (\fcBullet)}
+\ltindex{burrito=burrito (\fcBurrito)}
+\ltindex{cabbage=cabbage (\fcCabbage)}
+\ltindex{carrot=carrot (\fcCarrot)}
+\ltindex{carrot=carrot (\fcCarrotA)}
+\ltindex{milk=milk (\fcCashier)}
+\ltindex{cheese=cheese (\fcCheese)}
+\ltindex{cherry=cherry (\fcCherry)}
+\ltindex{chicken thigh=chicken thigh (\fcChickenThigh)}
+\ltindex{cucumber=cucumber (\fcCucumber)}
+\ltindex{cupcake=cupcake (\fcCupcake)}
+\ltindex{cupcake=cupcake (\fcCupcakeA)}
+\ltindex{cupcake=cupcake (\fcCupcakeB)}
+\ltindex{cutting board=cutting board (\fcCuttingBoard)}
+\ltindex{egg=egg (\fcEgg)}
+\ltindex{egg=egg (\fcEggA)}
+\ltindex{egg=egg (\fcEggB)}
+\ltindex{eggplant=eggplant (\fcEggplant)}
+\ltindex{french fries=french fries (\fcFrenchFries)}
+\ltindex{refrigerator=refrigerator (\fcFridge)}
+\ltindex{hamburger=hamburger (\fchamburger)}
+\ltindex{ice cream=ice cream (\fcIceCreamA)}
+\ltindex{ice cream=ice cream (\fcIceCreamB)}
+\ltindex{ice cream=ice cream (\fcIceCreamC)}
+\ltindex{ice cream=ice cream (\fcIceCreamD)}
+\ltindex{ice cream=ice cream (\fcIceCreamE)}
+\ltindex{ice cream=ice cream (\fcIceCreamF)}
+\ltindex{ice cream=ice cream (\fcIceCreamG)}
+\ltindex{ice cream=ice cream (\fcIceCreamH)}
+\ltindex{ketchup=ketchup (\fcKetchup)}
+\ltindex{condiments=condiments (\fcKetchup)}
+\ltindex{kettle=kettle (\fcKettle)}
+\ltindex{tea kettle=tea kettle (\fcKettle)}
+\ltindex{knife=knife (\fcKnife)}
+\ltindex{mug=mug (\fcMug)}
+\ltindex{mushroom=mushroom (\fcMushroom)}
+\ltindex{mushroom=mushroom (\fcMushroomA)}
+\ltindex{mushroom=mushroom (\fcMushroomB)}
+\ltindex{nuggets=nuggets (\fcNuggets)}
+\ltindex{onion=onion (\fcOnion)}
+\ltindex{pan=pan (\fcPanA)}
+\ltindex{skillet=skillet (\fcPanA)}
+\ltindex{spatula=spatula (\fcPanB)}
+\ltindex{pimiento=pimiento (\fcPimento)}
+\ltindex{bell pepper=bell pepper (\fcPimento)}
+\ltindex{pineapple=pineapple (\fcPineapple)}
+\ltindex{popsicle=popsicle (\fcPopsicle)}
+\ltindex{potato=potato (\fcPotato)}
+\ltindex{kettle=kettle (\fcPulse)}
+\ltindex{roast chicken=roast chicken (\fcRoastChicken)}
+\ltindex{chicken>roasted=roasted (\fcRoastChicken)}
+\ltindex{rolling pin=rolling pin (\fcRoller)}
+\ltindex{scallions=scallions (\fcScallion)}
+\ltindex{egg=egg (\fcScaredEgg)}
+\ltindex{knife=knife (\fcSharpKnife)}
+\ltindex{ladle=ladle (\fcShell)}
+\ltindex{shrimp=shrimp (\fcShrimp)}
+\ltindex{spatulas=spatulas (\fcSpatulas)}
+\ltindex{steak=steak (\fcSteak)}
+\ltindex{strawberry=strawberry (\fcStrawberry)}
+\ltindex{strawberry=strawberry (\fcStrawberryA)}
+\ltindex{sugar=sugar (\fcSugar)}
+\ltindex{tomato=tomato (\fcTomato)}
+\ltindex{sweet potato=sweet potato (\fcTony)}
+\ltindex{watermelon=watermelon (\fcWatermelon)}
+\label{figchild-food}
+\begin{longtable}{*3{ll}}
+\multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
 \endhead
 \endfirsthead
 \\[3ex]
-\multicolumn{4}{r}{\small\textit{(continued on next page)}}
+\multicolumn{6}{r}{\small\textit{(continued on next page)}}
 \endfoot
 \endlastfoot
-\Ttwem{flag: Afghanistan}{1f1e6-1f1eb}                           & \Ttwem{flag: Libya}{1f1f1-1f1fe}                                   \\
-\Ttwem{flag: Albania}{1f1e6-1f1f1}                               & \Ttwem{flag: Liechtenstein}{1f1f1-1f1ee}                           \\
-\Ttwem{flag: Algeria}{1f1e9-1f1ff}                               & \Ttwem{flag: Lithuania}{1f1f1-1f1f9}                               \\
-\Ttwem{flag: American Samoa}{1f1e6-1f1f8}                        & \Ttwem{flag: Luxembourg}{1f1f1-1f1fa}                              \\
-\Ttwem{flag: Andorra}{1f1e6-1f1e9}                               & \Ttwem{flag: Macao SAR China}{1f1f2-1f1f4}                         \\
-\Ttwem{flag: Angola}{1f1e6-1f1f4}                                & \Ttwem{flag: Madagascar}{1f1f2-1f1ec}                              \\
-\Ttwem{flag: Anguilla}{1f1e6-1f1ee}                              & \Ttwem{flag: Malawi}{1f1f2-1f1fc}                                  \\
-\Ttwem{flag: Antarctica}{1f1e6-1f1f6}                            & \Ttwem{flag: Malaysia}{1f1f2-1f1fe}                                \\
-\Ttwem{flag: Antigua \& Barbuda}{1f1e6-1f1ec}                    & \Ttwem{flag: Maldives}{1f1f2-1f1fb}                                \\
-\Ttwem{flag: Argentina}{1f1e6-1f1f7}                             & \Ttwem{flag: Mali}{1f1f2-1f1f1}                                    \\
-\Ttwem{flag: Armenia}{1f1e6-1f1f2}                               & \Ttwem{flag: Malta}{1f1f2-1f1f9}                                   \\
-\Ttwem{flag: Aruba}{1f1e6-1f1fc}                                 & \Ttwem{flag: Marshall Islands}{1f1f2-1f1ed}                        \\
-\Ttwem{flag: Ascension Island}{1f1e6-1f1e8}                      & \Ttwem{flag: Martinique}{1f1f2-1f1f6}                              \\
-\Ttwem{flag: Australia}{1f1e6-1f1fa}                             & \Ttwem{flag: Mauritania}{1f1f2-1f1f7}                              \\
-\Ttwem{flag: Austria}{1f1e6-1f1f9}                               & \Ttwem{flag: Mauritius}{1f1f2-1f1fa}                               \\
-\Ttwem{flag: Azerbaijan}{1f1e6-1f1ff}                            & \Ttwem{flag: Mayotte}{1f1fe-1f1f9}                                 \\
-\Ttwem{flag: Bahamas}{1f1e7-1f1f8}                               & \Ttwem{flag: Mexico}{1f1f2-1f1fd}                                  \\
-\Ttwem{flag: Bahrain}{1f1e7-1f1ed}                               & \Ttwem{flag: Micronesia}{1f1eb-1f1f2}                              \\
-\Ttwem{flag: Bangladesh}{1f1e7-1f1e9}                            & \Ttwem{flag: Moldova}{1f1f2-1f1e9}                                 \\
-\Ttwem{flag: Barbados}{1f1e7-1f1e7}                              & \Ttwem{flag: Monaco}{1f1f2-1f1e8}                                  \\
-\Ttwem{flag: Belarus}{1f1e7-1f1fe}                               & \Ttwem{flag: Mongolia}{1f1f2-1f1f3}                                \\
-\Ttwem{flag: Belgium}{1f1e7-1f1ea}                               & \Ttwem{flag: Montenegro}{1f1f2-1f1ea}                              \\
-\Ttwem{flag: Belize}{1f1e7-1f1ff}                                & \Ttwem{flag: Montserrat}{1f1f2-1f1f8}                              \\
-\Ttwem{flag: Benin}{1f1e7-1f1ef}                                 & \Ttwem{flag: Morocco}{1f1f2-1f1e6}                                 \\
-\Ttwem{flag: Bermuda}{1f1e7-1f1f2}                               & \Ttwem{flag: Mozambique}{1f1f2-1f1ff}                              \\
-\Ttwem{flag: Bhutan}{1f1e7-1f1f9}                                & \Ttwem{flag: Myanmar (Burma)}{1f1f2-1f1f2}                         \\
-\Ttwem{flag: Bolivia}{1f1e7-1f1f4}                               & \Ttwem{flag: Namibia}{1f1f3-1f1e6}                                 \\
-\Ttwem{flag: Bosnia \& Herzegovina}{1f1e7-1f1e6}                 & \Ttwem{flag: Nauru}{1f1f3-1f1f7}                                   \\
-\Ttwem{flag: Botswana}{1f1e7-1f1fc}                              & \Ttwem{flag: Nepal}{1f1f3-1f1f5}                                   \\
-\Ttwem{flag: Bouvet Island}{1f1e7-1f1fb}                         & \Ttwem{flag: Netherlands}{1f1f3-1f1f1}                             \\
-\Ttwem{flag: Brazil}{1f1e7-1f1f7}                                & \Ttwem{flag: New Caledonia}{1f1f3-1f1e8}                           \\
-\Ttwem{flag: British Indian Ocean Territory}{1f1ee-1f1f4}        & \Ttwem{flag: New Zealand}{1f1f3-1f1ff}                             \\
-\Ttwem{flag: British Virgin Islands}{1f1fb-1f1ec}                & \Ttwem{flag: Nicaragua}{1f1f3-1f1ee}                               \\
-\Ttwem{flag: Brunei}{1f1e7-1f1f3}                                & \Ttwem{flag: Niger}{1f1f3-1f1ea}                                   \\
-\Ttwem{flag: Bulgaria}{1f1e7-1f1ec}                              & \Ttwem{flag: Nigeria}{1f1f3-1f1ec}                                 \\
-\Ttwem{flag: Burkina Faso}{1f1e7-1f1eb}                          & \Ttwem{flag: Niue}{1f1f3-1f1fa}                                    \\
-\Ttwem{flag: Burundi}{1f1e7-1f1ee}                               & \Ttwem{flag: Norfolk Island}{1f1f3-1f1eb}                          \\
-\Ttwem{flag: Cambodia}{1f1f0-1f1ed}                              & \Ttwem{flag: North Korea}{1f1f0-1f1f5}                             \\
-\Ttwem{flag: Cameroon}{1f1e8-1f1f2}                              & \Ttwem{flag: North Macedonia}{1f1f2-1f1f0}                         \\
-\Ttwem{flag: Canada}{1f1e8-1f1e6}                                & \Ttwem{flag: Northern Mariana Islands}{1f1f2-1f1f5}                \\
-\Ttwem{flag: Canary Islands}{1f1ee-1f1e8}                        & \Ttwem{flag: Norway}{1f1f3-1f1f4}                                  \\
-\Ttwem{flag: Cape Verde}{1f1e8-1f1fb}                            & \Ttwem{flag: Oman}{1f1f4-1f1f2}                                    \\
-\Ttwem{flag: Caribbean Netherlands}{1f1e7-1f1f6}                 & \Ttwem{flag: Pakistan}{1f1f5-1f1f0}                                \\
-\Ttwem{flag: Cayman Islands}{1f1f0-1f1fe}                        & \Ttwem{flag: Palau}{1f1f5-1f1fc}                                   \\
-\Ttwem{flag: Central African Republic}{1f1e8-1f1eb}              & \Ttwem{flag: Palestinian Territories}{1f1f5-1f1f8}                 \\
-\Ttwem{flag: Ceuta \& Melilla}{1f1ea-1f1e6}                      & \Ttwem{flag: Panama}{1f1f5-1f1e6}                                  \\
-\Ttwem{flag: Chad}{1f1f9-1f1e9}                                  & \Ttwem{flag: Papua New Guinea}{1f1f5-1f1ec}                        \\
-\Ttwem{flag: Chile}{1f1e8-1f1f1}                                 & \Ttwem{flag: Paraguay}{1f1f5-1f1fe}                                \\
-\Ttwem{flag: China}{1f1e8-1f1f3}                                 & \Ttwem{flag: Peru}{1f1f5-1f1ea}                                    \\
-\Ttwem{flag: Christmas Island}{1f1e8-1f1fd}                      & \Ttwem{flag: Philippines}{1f1f5-1f1ed}                             \\
-\Ttwem{flag: Clipperton Island}{1f1e8-1f1f5}                     & \Ttwem{flag: Pitcairn Islands}{1f1f5-1f1f3}                        \\
-\Ttwem{flag: Cocos (Keeling) Islands}{1f1e8-1f1e8}               & \Ttwem{flag: Poland}{1f1f5-1f1f1}                                  \\
-\Ttwem{flag: Colombia}{1f1e8-1f1f4}                              & \Ttwem{flag: Portugal}{1f1f5-1f1f9}                                \\
-\Ttwem{flag: Comoros}{1f1f0-1f1f2}                               & \Ttwem{flag: Puerto Rico}{1f1f5-1f1f7}                             \\
-\Ttwem{flag: Congo - Brazzaville}{1f1e8-1f1ec}                   & \Ttwem{flag: Qatar}{1f1f6-1f1e6}                                   \\
-\Ttwem{flag: Congo - Kinshasa}{1f1e8-1f1e9}                      & \Ttwem{flag: Romania}{1f1f7-1f1f4}                                 \\
-\Ttwem{flag: Cook Islands}{1f1e8-1f1f0}                          & \Ttwem{flag: Russia}{1f1f7-1f1fa}                                  \\
-\Ttwem{flag: Costa Rica}{1f1e8-1f1f7}                            & \Ttwem{flag: Rwanda}{1f1f7-1f1fc}                                  \\
-\Ttwem{flag: Croatia}{1f1ed-1f1f7}                               & \Ttwem{flag: Réunion}{1f1f7-1f1ea}                                 \\
-\Ttwem{flag: Cuba}{1f1e8-1f1fa}                                  & \Ttwem{flag: Samoa}{1f1fc-1f1f8}                                   \\
-\Ttwem{flag: Curaçao}{1f1e8-1f1fc}                               & \Ttwem{flag: San Marino}{1f1f8-1f1f2}                              \\
-\Ttwem{flag: Cyprus}{1f1e8-1f1fe}                                & \Ttwem{flag: Saudi Arabia}{1f1f8-1f1e6}                            \\
-\Ttwem{flag: Czechia}{1f1e8-1f1ff}                               & \Ttwem{flag: Scotland}{1f3f4-e0067-e0062-e0073-e0063-e0074-e007f}  \\
-\Ttwem{flag: Côte d'Ivoire}{1f1e8-1f1ee}                         & \Ttwem{flag: Senegal}{1f1f8-1f1f3}                                 \\
-\Ttwem{flag: Denmark}{1f1e9-1f1f0}                               & \Ttwem{flag: Serbia}{1f1f7-1f1f8}                                  \\
-\Ttwem{flag: Diego Garcia}{1f1e9-1f1ec}                          & \Ttwem{flag: Seychelles}{1f1f8-1f1e8}                              \\
-\Ttwem{flag: Djibouti}{1f1e9-1f1ef}                              & \Ttwem{flag: Sierra Leone}{1f1f8-1f1f1}                            \\
-\Ttwem{flag: Dominica}{1f1e9-1f1f2}                              & \Ttwem{flag: Singapore}{1f1f8-1f1ec}                               \\
-\Ttwem{flag: Dominican Republic}{1f1e9-1f1f4}                    & \Ttwem{flag: Sint Maarten}{1f1f8-1f1fd}                            \\
-\Ttwem{flag: Ecuador}{1f1ea-1f1e8}                               & \Ttwem{flag: Slovakia}{1f1f8-1f1f0}                                \\
-\Ttwem{flag: Egypt}{1f1ea-1f1ec}                                 & \Ttwem{flag: Slovenia}{1f1f8-1f1ee}                                \\
-\Ttwem{flag: El Salvador}{1f1f8-1f1fb}                           & \Ttwem{flag: Solomon Islands}{1f1f8-1f1e7}                         \\
-\Ttwem{flag: England}{1f3f4-e0067-e0062-e0065-e006e-e0067-e007f} & \Ttwem{flag: Somalia}{1f1f8-1f1f4}                                 \\
-\Ttwem{flag: Equatorial Guinea}{1f1ec-1f1f6}                     & \Ttwem{flag: South Africa}{1f1ff-1f1e6}                            \\
-\Ttwem{flag: Eritrea}{1f1ea-1f1f7}                               & \Ttwem{flag: South Georgia \& South Sandwich Islands}{1f1ec-1f1f8} \\
-\Ttwem{flag: Estonia}{1f1ea-1f1ea}                               & \Ttwem{flag: South Korea}{1f1f0-1f1f7}                             \\
-\Ttwem{flag: Eswatini}{1f1f8-1f1ff}                              & \Ttwem{flag: South Sudan}{1f1f8-1f1f8}                             \\
-\Ttwem{flag: Ethiopia}{1f1ea-1f1f9}                              & \Ttwem{flag: Spain}{1f1ea-1f1f8}                                   \\
-\Ttwem{flag: European Union}{1f1ea-1f1fa}                        & \Ttwem{flag: Sri Lanka}{1f1f1-1f1f0}                               \\
-\Ttwem{flag: Falkland Islands}{1f1eb-1f1f0}                      & \Ttwem{flag: St. Barthélemy}{1f1e7-1f1f1}                          \\
-\Ttwem{flag: Faroe Islands}{1f1eb-1f1f4}                         & \Ttwem{flag: St. Helena}{1f1f8-1f1ed}                              \\
-\Ttwem{flag: Fiji}{1f1eb-1f1ef}                                  & \Ttwem{flag: St. Kitts \& Nevis}{1f1f0-1f1f3}                      \\
-\Ttwem{flag: Finland}{1f1eb-1f1ee}                               & \Ttwem{flag: St. Lucia}{1f1f1-1f1e8}                               \\
-\Ttwem{flag: France}{1f1eb-1f1f7}                                & \Ttwem{flag: St. Martin}{1f1f2-1f1eb}                              \\
-\Ttwem{flag: French Guiana}{1f1ec-1f1eb}                         & \Ttwem{flag: St. Pierre \& Miquelon}{1f1f5-1f1f2}                  \\
-\Ttwem{flag: French Polynesia}{1f1f5-1f1eb}                      & \Ttwem{flag: St. Vincent \& Grenadines}{1f1fb-1f1e8}               \\
-\Ttwem{flag: French Southern Territories}{1f1f9-1f1eb}           & \Ttwem{flag: Sudan}{1f1f8-1f1e9}                                   \\
-\Ttwem{flag: Gabon}{1f1ec-1f1e6}                                 & \Ttwem{flag: Suriname}{1f1f8-1f1f7}                                \\
-\Ttwem{flag: Gambia}{1f1ec-1f1f2}                                & \Ttwem{flag: Svalbard \& Jan Mayen}{1f1f8-1f1ef}                   \\
-\Ttwem{flag: Georgia}{1f1ec-1f1ea}                               & \Ttwem{flag: Sweden}{1f1f8-1f1ea}                                  \\
-\Ttwem{flag: Germany}{1f1e9-1f1ea}                               & \Ttwem{flag: Switzerland}{1f1e8-1f1ed}                             \\
-\Ttwem{flag: Ghana}{1f1ec-1f1ed}                                 & \Ttwem{flag: Syria}{1f1f8-1f1fe}                                   \\
-\Ttwem{flag: Gibraltar}{1f1ec-1f1ee}                             & \Ttwem{flag: São Tomé \& Príncipe}{1f1f8-1f1f9}                    \\
-\Ttwem{flag: Greece}{1f1ec-1f1f7}                                & \Ttwem{flag: Taiwan}{1f1f9-1f1fc}                                  \\
-\Ttwem{flag: Greenland}{1f1ec-1f1f1}                             & \Ttwem{flag: Tajikistan}{1f1f9-1f1ef}                              \\
-\Ttwem{flag: Grenada}{1f1ec-1f1e9}                               & \Ttwem{flag: Tanzania}{1f1f9-1f1ff}                                \\
-\Ttwem{flag: Guadeloupe}{1f1ec-1f1f5}                            & \Ttwem{flag: Thailand}{1f1f9-1f1ed}                                \\
-\Ttwem{flag: Guam}{1f1ec-1f1fa}                                  & \Ttwem{flag: Timor-Leste}{1f1f9-1f1f1}                             \\
-\Ttwem{flag: Guatemala}{1f1ec-1f1f9}                             & \Ttwem{flag: Togo}{1f1f9-1f1ec}                                    \\
-\Ttwem{flag: Guernsey}{1f1ec-1f1ec}                              & \Ttwem{flag: Tokelau}{1f1f9-1f1f0}                                 \\
-\Ttwem{flag: Guinea}{1f1ec-1f1f3}                                & \Ttwem{flag: Tonga}{1f1f9-1f1f4}                                   \\
-\Ttwem{flag: Guinea-Bissau}{1f1ec-1f1fc}                         & \Ttwem{flag: Trinidad \& Tobago}{1f1f9-1f1f9}                      \\
-\Ttwem{flag: Guyana}{1f1ec-1f1fe}                                & \Ttwem{flag: Tristan da Cunha}{1f1f9-1f1e6}                        \\
-\Ttwem{flag: Haiti}{1f1ed-1f1f9}                                 & \Ttwem{flag: Tunisia}{1f1f9-1f1f3}                                 \\
-\Ttwem{flag: Heard \& McDonald Islands}{1f1ed-1f1f2}             & \Ttwem{flag: Turkey}{1f1f9-1f1f7}                                  \\
-\Ttwem{flag: Honduras}{1f1ed-1f1f3}                              & \Ttwem{flag: Turkmenistan}{1f1f9-1f1f2}                            \\
-\Ttwem{flag: Hong Kong SAR China}{1f1ed-1f1f0}                   & \Ttwem{flag: Turks \& Caicos Islands}{1f1f9-1f1e8}                 \\
-\Ttwem{flag: Hungary}{1f1ed-1f1fa}                               & \Ttwem{flag: Tuvalu}{1f1f9-1f1fb}                                  \\
-\Ttwem{flag: Iceland}{1f1ee-1f1f8}                               & \Ttwem{flag: U.S. Outlying Islands}{1f1fa-1f1f2}                   \\
-\Ttwem{flag: India}{1f1ee-1f1f3}                                 & \Ttwem{flag: U.S. Virgin Islands}{1f1fb-1f1ee}                     \\
-\Ttwem{flag: Indonesia}{1f1ee-1f1e9}                             & \Ttwem{flag: Uganda}{1f1fa-1f1ec}                                  \\
-\Ttwem{flag: Iran}{1f1ee-1f1f7}                                  & \Ttwem{flag: Ukraine}{1f1fa-1f1e6}                                 \\
-\Ttwem{flag: Iraq}{1f1ee-1f1f6}                                  & \Ttwem{flag: United Arab Emirates}{1f1e6-1f1ea}                    \\
-\Ttwem{flag: Ireland}{1f1ee-1f1ea}                               & \Ttwem{flag: United Kingdom}{1f1ec-1f1e7}                          \\
-\Ttwem{flag: Isle of Man}{1f1ee-1f1f2}                           & \Ttwem{flag: United Nations}{1f1fa-1f1f3}                          \\
-\Ttwem{flag: Israel}{1f1ee-1f1f1}                                & \Ttwem{flag: United States}{1f1fa-1f1f8}                           \\
-\Ttwem{flag: Italy}{1f1ee-1f1f9}                                 & \Ttwem{flag: Uruguay}{1f1fa-1f1fe}                                 \\
-\Ttwem{flag: Jamaica}{1f1ef-1f1f2}                               & \Ttwem{flag: Uzbekistan}{1f1fa-1f1ff}                              \\
-\Ttwem{flag: Japan}{1f1ef-1f1f5}                                 & \Ttwem{flag: Vanuatu}{1f1fb-1f1fa}                                 \\
-\Ttwem{flag: Jersey}{1f1ef-1f1ea}                                & \Ttwem{flag: Vatican City}{1f1fb-1f1e6}                            \\
-\Ttwem{flag: Jordan}{1f1ef-1f1f4}                                & \Ttwem{flag: Venezuela}{1f1fb-1f1ea}                               \\
-\Ttwem{flag: Kazakhstan}{1f1f0-1f1ff}                            & \Ttwem{flag: Vietnam}{1f1fb-1f1f3}                                 \\
-\Ttwem{flag: Kenya}{1f1f0-1f1ea}                                 & \Ttwem{flag: Wales}{1f3f4-e0067-e0062-e0077-e006c-e0073-e007f}     \\
-\Ttwem{flag: Kiribati}{1f1f0-1f1ee}                              & \Ttwem{flag: Wallis \& Futuna}{1f1fc-1f1eb}                        \\
-\Ttwem{flag: Kosovo}{1f1fd-1f1f0}                                & \Ttwem{flag: Western Sahara}{1f1ea-1f1ed}                          \\
-\Ttwem{flag: Kuwait}{1f1f0-1f1fc}                                & \Ttwem{flag: Yemen}{1f1fe-1f1ea}                                   \\
-\Ttwem{flag: Kyrgyzstan}{1f1f0-1f1ec}                            & \Ttwem{flag: Zambia}{1f1ff-1f1f2}                                  \\
-\Ttwem{flag: Laos}{1f1f1-1f1e6}                                  & \Ttwem{flag: Zimbabwe}{1f1ff-1f1fc}                                \\
-\Ttwem{flag: Latvia}{1f1f1-1f1fb}                                & \Ttwem{flag: Åland Islands}{1f1e6-1f1fd}                           \\
-\Ttwem{flag: Lebanon}{1f1f1-1f1e7}                               & \Ttwem{pirate flag}{1f3f4-200d-2620-fe0f}                          \\
-\Ttwem{flag: Lesotho}{1f1f1-1f1f8}                               & \Ttwem{rainbow flag}{1f3f3-fe0f-200d-1f308}                        \\
-\Ttwem{flag: Liberia}{1f1f1-1f1f7}                               & \Ttwem{transgender flag}{1f3f3-fe0f-200d-26a7-fe0f}                \\
+\K\fcApple        & \K\fcFrenchFries & \K\fcPimento      \\
+\K\fcBarbecue     & \K\fcFridge      & \K\fcPineapple    \\
+\K\fcBread        & \K\fchamburger   & \K\fcPopsicle     \\
+\K\fcBrownie      & \K\fcIceCreamA   & \K\fcPotato       \\
+\K\fcBullet       & \K\fcIceCreamB   & \K\fcPulse        \\
+\K\fcBurrito      & \K\fcIceCreamC   & \K\fcRoastChicken \\
+\K\fcCabbage      & \K\fcIceCreamD   & \K\fcRoller       \\
+\K\fcCarrot       & \K\fcIceCreamE   & \K\fcScallion     \\
+\K\fcCarrotA      & \K\fcIceCreamF   & \K\fcScaredEgg    \\
+\K\fcCashier      & \K\fcIceCreamG   & \K\fcSharpKnife   \\
+\K\fcCheese       & \K\fcIceCreamH   & \K\fcShell        \\
+\K\fcCherry       & \K\fcKetchup     & \K\fcShrimp       \\
+\K\fcChickenThigh & \K\fcKettle      & \K\fcSpatulas     \\
+\K\fcCucumber     & \K\fcKnife       & \K\fcSteak        \\
+\K\fcCupcake      & \K\fcMug         & \K\fcStrawberry   \\
+\K\fcCupcakeA     & \K\fcMushroom    & \K\fcStrawberryA  \\
+\K\fcCupcakeB     & \K\fcMushroomA   & \K\fcSugar        \\
+\K\fcCuttingBoard & \K\fcMushroomB   & \K\fcTomato       \\
+\K\fcEgg          & \K\fcNuggets     & \K\fcTony         \\
+\K\fcEggA         & \K\fcOnion       & \K\fcWatermelon   \\
+\K\fcEggB         & \K\fcPanA        &                   \\
+\K\fcEggplant     & \K\fcPanB        &                   \\
 \end{longtable}
 
 \begin{tablenote}
-  \twemojismessage
+  \childmessage.
 \end{tablenote}
 \end{longsymtable}
 
 
-\begin{symtable}[AREV]{Miscellaneous \AREV\ Symbols}
-\index{smiley faces}
-\index{frowny faces}
-\index{faces}
-\index{quotation marks}
-\index{skulls}
-\idxboth{miscellaneous}{symbols}
-\idxboth{recycling}{symbols}
-\idxboth{yin-yang}{symbols}
-\label{arev-misc}
+\begin{symtable}[UTFSYM]{\UTFSYM\ Food and Cooking Symbols}
+\index{food}
+\label{utfsym-food}
 \begin{tabular}{*4{ll}}
-\K[\AREVanchor]\anchor             & \K[\AREVinvsmileface]\invsmileface & \K[\AREVskull]\skull         & \K[\AREVwarning]\warning \\
-\K[\AREVbiohazard]\biohazard       & \K[\AREVradiation]\radiation       & \K[\AREVsmileface]\smileface & \K[\AREVyinyang]\yinyang \\
-\K[\AREVheavyqtleft]\heavyqtleft   & \K[\AREVrecycle]\recycle           & \K[\AREVsteaming]\steaming   &                          \\
-\K[\AREVheavyqtright]\heavyqtright & \K[\AREVsadface]\sadface           & \K[\AREVswords]\swords       &                          \\
+\Tutf{1F32D} & \Tutf{1F350} & \Tutf{1F362} & \Tutf{1F372} \\
+\Tutf{1F32E} & \Tutf{1F351} & \Tutf{1F363} & \Tutf{1F373} \\
+\Tutf{1F32F} & \Tutf{1F352} & \Tutf{1F364} & \Tutf{1F374} \\
+\Tutf{1F336} & \Tutf{1F353} & \Tutf{1F365} & \Tutf{1F375} \\
+\Tutf{1F344} & \Tutf{1F354} & \Tutf{1F366} & \Tutf{1F376} \\
+\Tutf{1F345} & \Tutf{1F355} & \Tutf{1F367} & \Tutf{1F377} \\
+\Tutf{1F346} & \Tutf{1F356} & \Tutf{1F368} & \Tutf{1F378} \\
+\Tutf{1F347} & \Tutf{1F357} & \Tutf{1F369} & \Tutf{1F379} \\
+\Tutf{1F348} & \Tutf{1F35A} & \Tutf{1F36A} & \Tutf{1F37A} \\
+\Tutf{1F349} & \Tutf{1F35B} & \Tutf{1F36B} & \Tutf{1F37B} \\
+\Tutf{1F34A} & \Tutf{1F35C} & \Tutf{1F36C} & \Tutf{1F37C} \\
+\Tutf{1F34B} & \Tutf{1F35D} & \Tutf{1F36D} & \Tutf{1F37D} \\
+\Tutf{1F34C} & \Tutf{1F35E} & \Tutf{1F36E} & \Tutf{1F37E} \\
+\Tutf{1F34D} & \Tutf{1F35F} & \Tutf{1F36F} & \Tutf{1F37F} \\
+\Tutf{1F34E} & \Tutf{1F360} & \Tutf{1F370} & \Tutf{1F382} \\
+\Tutf{1F34F} & \Tutf{1F361} & \Tutf{1F371} &              \\
 \end{tabular}
+
+\bigskip
+\utfsymmessage
 \end{symtable}
 
 
 \begin{symtable}[COOK]{\COOK\ Cooking Symbols}
 \idxboth{cooking}{symbols}
+\index{oven>bottom heat=bottom heat (\Bottomheat)}
+\index{fork=fork (\Fork)}
+\index{knife=knife (\Knife)}
+\index{oven>top and bottom heat=top and bottom heat (\Topbottomheat)}
+\index{dish=dish (\Dish)}
+\index{oven>gas=gas (\Gasstove)}
+\index{oven=oven (\Oven)}
+\index{oven>top heat=top heat (\Topheat)}
+\index{oven>convection=convection (\Fanoven)}
+\index{oven mitts=oven mitts (\Gloves)}
+\index{spoon=spoon (\Spoon)}
 \label{cookingsymbols}
+\begin{indexingoff}
 \begin{tabular}{*4{ll}}
 \K\Bottomheat & \K\Fork     & \K\Knife & \K\Topbottomheat \\
 \K\Dish       & \K\Gasstove & \K\Oven  & \K\Topheat       \\
 \K\Fanoven    & \K\Gloves   & \K\Spoon &                  \\
 \end{tabular}
+\end{indexingoff}
 \end{symtable}
 
 
 \begin{symtable}[TIKZSYM]{\TIKZSYM\ Cooking Symbols}
 \idxboth{cooking}{symbols}
+\index{baking plate=baking plate (\bakingplate)}
+\index{eggbeater=eggbeater (\eggbeater)}
+\index{pan=pan (\pan)}
+\index{squeezer=squeezer (\squeezer)}
+\index{blender=blender (\blender)}
+\index{frying pan=frying pan (\fryingpan)}
+\index{peeler=peeler (\peeler)}
+\index{trident=trident (\trident)}
+\index{bottle=bottle (\bottle)}
+\index{garlic press=garlic press (\garlicpress)}
+\index{pot=pot (\pot)}
+\index{bowl=bowl (\bowl)}
+\index{grater=grater (\grater)}
+\index{rolling pin=rolling pin (\rollingpin)}
+\index{cooker=cooker (\cooker)}
+\index{oven=oven (\oven)}
+\index{sieve=sieve (\sieve)}
 \label{tikzsym-cooking}
+\begin{indexingoff}
 \begin{tabular}{*4{ll}}
 \K\bakingplate & \K\eggbeater   & \K\pan        & \K\squeezer \\
 \K\blender     & \K\fryingpan   & \K\peeler     & \K\trident  \\
@@ -19400,21 +23430,24 @@
 \K\bowl        & \K\grater      & \K\rollingpin &             \\
 \K\cooker      & \K\oven        & \K\sieve      &             \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
-
 \begin{tablenote}
-  \TIKZSYM\ defines German-language aliases for each of the above:
-  \cmdI{\Backblech} for \cmdI{\bakingplate}, \cmdI{\Bratpfanne} for
-  \cmdI{\fryingpan}, \cmdI{\Dreizack} for \cmdI{\trident}, \cmdI{\Flasche}
-  for \cmdI{\bottle}, \cmdI{\Herd} for \cmdI{\cooker}, \cmdI{\Kochtopf} for
-  \cmdI{\pot}, \cmdI{\Knoblauchpresse} for \cmdI{\garlicpress},
-  \cmdI{\Nudelholz} for \cmdI{\rollingpin}, \cmdI{\Ofen} for \cmdI{\oven},
-  \cmdI{\Pfanne} for \cmdI{\pan}, \cmdI{\Purierstab} for \cmdI{\blender},
-  \cmdI{\Reibe} for \cmdI{\grater}, \cmdI{\Saftpresse} for
-  \cmdI{\squeezer}, \cmdI{\Schaler} for \cmdI{\peeler}, \cmdI{\Schneebesen}
-  for \cmdI{\eggbeater}, \cmdI{\Schussel} for \cmdI{\bowl}, and
-  \cmdI{\Sieb} for \cmdI{\sieve}.
+  \begin{indexingoff}
+    \TIKZSYM\ defines German-language aliases for each of the above:
+    \cmdI{\Backblech} for \cmdI{\bakingplate}, \cmdI{\Bratpfanne} for
+    \cmdI{\fryingpan}, \cmdI{\Dreizack} for \cmdI{\trident},
+    \cmdI{\Flasche} for \cmdI{\bottle}, \cmdI{\Herd} for \cmdI{\cooker},
+    \cmdI{\Kochtopf} for \cmdI{\pot}, \cmdI{\Knoblauchpresse} for
+    \cmdI{\garlicpress}, \cmdI{\Nudelholz} for \cmdI{\rollingpin},
+    \cmdI{\Ofen} for \cmdI{\oven}, \cmdI{\Pfanne} for \cmdI{\pan},
+    \cmdI{\Purierstab} for \cmdI{\blender}, \cmdI{\Reibe} for
+    \cmdI{\grater}, \cmdI{\Saftpresse} for \cmdI{\squeezer},
+    \cmdI{\Schaler} for \cmdI{\peeler}, \cmdI{\Schneebesen} for
+    \cmdI{\eggbeater}, \cmdI{\Schussel} for \cmdI{\bowl}, and \cmdI{\Sieb}
+    for \cmdI{\sieve}.
+  \end{indexingoff}
 
   \tikzsymbolsaregraphics.
 \end{tablenote}
@@ -19426,9 +23459,30 @@
 \index{smiley faces}
 \index{frowny faces}
 \index{faces}
+\index{smiling face=3D smiley face (\Smiley)}
+\index{sad face=sad face (\Sadey)}
+\index{neutral face=neutral face (\Neutrey)}
+\index{laughing face=laughing face (\Laughey)}
+\index{annoyed face=annoyed face (\Annoey)}
+\index{winking face=winking face (\Winkey)}
+\index{S-mouth face=S-mouth face (\Sey)}
+\index{X-eyes face=X-eyes face (\Xey)}
+\index{innocent face=innocent face (\Innocey)}
+\index{cool face=cool face (\Cooley)}
+\index{tongue-out face=tongue-out face (\Tongey)}
+\index{nurse face=nurse face (\Nursey)}
+\index{vomiting face=vomiting face (\Vomey)}
+\index{pounding on wall face=pounding on wall face (\Walley)}
+\index{pounding on wall face=pounding on wall face (\rWalley)}
+\index{ninja face=ninja face (\Ninja)}
+\index{sleepy face=sleepy face (\Sleepey)}
+\index{cat face=cat face (\Cat)}
+\index{Grim Reaper=Grim Reaper (\NiceReapey)}
+\index{Schroedinger's cat=Schr\"odinger's cat (\SchrodingersCat{0})}
 \label{tikzsym-emoji}
 \newcommand*{\zero}{\texttt{\string{0\string}}}
 \newcommand*{\one}{\texttt{\string{1\string}}}
+\begin{indexingoff}
 \begin{tabular}{*4{ll}}
 \K\Annoey   & \K\Laughey    & \K\rWalley         & \K\Tongey   \\
 \K\Cat      & \K\Neutrey    & \K\Sadey           & \K\Vomey    \\
@@ -19440,6 +23494,7 @@
 \K\Cooley   & \K\Nursey     & \K\Sleepey         & \K\wInnocey \\
 \K\Innocey  & \K\oldWinkey  & \K\Smiley          & \K\Xey      \\
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 
@@ -19455,13 +23510,29 @@
 
 
 \begin{symtable}[TIKZSYM]{\TIKZSYM\ 3D Emoji}
-\index{emoji}
-\index{emoji>3D}
+\subindex{emoji}{3D}
 \index{smiley faces}
 \index{frowny faces}
-\index{faces}
+\subindex{faces}{3D}
+\index{smiling face, 3D=3D smiley face (\dSmiley)}
+\index{sad face, 3D=sad face, 3D (\dSadey)}
+\index{neutral face, 3D=neutral face, 3D (\dNeutrey)}
+\index{laughing face, 3D=laughing face, 3D (\dLaughey)}
+\index{annoyed face, 3D=annoyed face, 3D (\dAnnoey)}
+\index{winking face, 3D=winking face, 3D (\dWinkey)}
+\index{S-mouth face, 3D=S-mouth face, 3D (\dSey)}
+\index{X-eyes face, 3D=X-eyes face, 3D (\dXey)}
+\index{innocent face, 3D=innocent face, 3D (\dInnocey)}
+\index{cool face, 3D=cool face, 3D (\dCooley)}
+\index{tongue-out face, 3D=tongue-out face, 3D (\dTongey)}
+\index{nurse face, 3D=nurse face, 3D (\dNursey)}
+\index{vomiting face, 3D=vomiting face, 3D (\dVomey)}
+\index{pounding on wall face, 3D=pounding on wall face, 3D (\dWalley)}
+\index{ninja face, 3D=ninja face, 3D (\dNinja)}
+\index{sleepy face, 3D=sleepy face, 3D (\dSleepey)}
 \label{tikzsym-emoji-3d}
 \newcommand*{\one}{\texttt{\string{1\string}}}
+\begin{indexingoff}
 \begin{tabular}{*4{ll}}
 \K\dAnnoey   & \K\dLaughey & \K\dSadey   & \K\dVomey     \\
 \K[\dcChangey{1}]\dcChangey\one
@@ -19470,8 +23541,8 @@
              & \K\dNinja   & \K\dSleepey & \K\dWinkey    \\
 \K\dCooley   & \K\dNursey  & \K\dSmiley  & \K\dXey       \\
 \K\dInnocey  & \K\drWalley & \K\dTongey  & \K\olddWinkey \\
-
 \end{tabular}
+\end{indexingoff}
 
 \bigskip
 
@@ -19538,6 +23609,23 @@
 \end{symtable}
 
 
+\begin{symtable}[UTFSYM]{\UTFSYM\ Love Symbols}
+\index{hearts}
+\label{utfsym-love}
+\begin{tabular}{*4{ll}}
+\Tutf{1F394} & \Tutf{1F490} & \Tutf{1F496} & \Tutf{1F49C} \\
+\Tutf{1F48B} & \Tutf{1F491} & \Tutf{1F497} & \Tutf{1F49D} \\
+\Tutf{1F48C} & \Tutf{1F492} & \Tutf{1F498} & \Tutf{1F49E} \\
+\Tutf{1F48D} & \Tutf{1F493} & \Tutf{1F499} & \Tutf{1F49F} \\
+\Tutf{1F48E} & \Tutf{1F494} & \Tutf{1F49A} & \Tutf{1F54A} \\
+\Tutf{1F48F} & \Tutf{1F495} & \Tutf{1F49B} & \Tutf{1F5A4} \\
+\end{tabular}
+
+\bigskip
+\utfsymmessage[1F492]
+\end{symtable}
+
+
 \begin{symtable}[TIKZSYM]{Miscellaneous \TIKZSYM\ Symbols}
 \idxboth{miscellaneous}{symbols}
 \index{men}
@@ -19561,20 +23649,37 @@
 
 
 \begin{longsymtable}[TWEM]{Miscellaneous \TWEM\ Emoji}
+\ltidxboth{chess}{symbols}
 \ltidxboth{computer hardware}{symbols}
 \ltidxboth{currency}{symbols}
-\ltidxboth{miscellaneous}{symbols}
+\ltidxboth{medical}{symbols}
 \ltidxboth{monetary}{symbols}
+\ltidxboth{peace}{symbols}
 \ltidxboth{recycling}{symbols}
 \ltidxboth{sporting}{symbols}
 \ltidxboth{yin-yang}{symbols}
+\ltindex{Islamic star and crescent}
+\ltindex{Jewish star}
+\ltindex{arrows}
+\ltindex{asterisks}
+\ltindex{bombs}
+\ltindex{credit cards}
 \ltindex{emoji}
 \ltindex{faces}
+\ltindex{flowers}
 \ltindex{frowny faces}
+\ltindex{globe}
+\ltindex{hearts}
+\ltindex{locks}
 \ltindex{men}
+\ltindex{people}
 \ltindex{skulls}
 \ltindex{smiley faces}
 \ltindex{snowmen}
+\ltindex{sparkles}
+\ltindex{star of David}
+\ltsubindex{stars}{Jewish}
+\ltsubindex{stars}{with crescent}
 \ltindex{women}
 \label{twemoji-misc}
 \begin{longtable}{*2{lp{\twemwidth}}}
@@ -20183,7 +24288,7 @@
 \end{longtable}
 
 \begin{tablenote}
-  \twemojismessage
+  \twemojismessage.
 \end{tablenote}
 
 \bigskip
@@ -20202,17 +24307,17 @@
   \begin{tabularx}{\linewidth}{@{}*6{>{\centering\arraybackslash}X}@{}}
     \twemoji{thumbs up}
     & \twemoji{thumbs up: dark skin tone}
-    & \twemoji{thumbs up: light skin tone}
+    & \twemoji{thumbs up: medium-dark skin tone}
     & \twemoji{thumbs up: medium skin tone}
-    & \twemoji{thumbs up: medium-dark skin tone}
     & \twemoji{thumbs up: medium-light skin tone}
+    & \twemoji{thumbs up: light skin tone}
     \\
     \TWEMtu{thumbs up}{1f44d}
     & \TWEMtu{thumbs up: dark skin tone}{1f44d-1f3ff}
-    & \TWEMtu{thumbs up: light skin tone}{1f44d-1f3fb}
+    & \TWEMtu{thumbs up: medium-dark skin tone}{1f44d-1f3fe}
     & \TWEMtu{thumbs up: medium skin tone}{1f44d-1f3fd}
-    & \TWEMtu{thumbs up: medium-dark skin tone}{1f44d-1f3fe}
     & \TWEMtu{thumbs up: medium-light skin tone}{1f44d-1f3fc}
+    & \TWEMtu{thumbs up: light skin tone}{1f44d-1f3fb}
   \end{tabularx}
 
   \seedocs{\TWEM}.
@@ -20220,6 +24325,235 @@
 \end{longsymtable}
 
 
+\begin{longsymtable}[FNTAWE]{\FNTAWE\ Faces}
+\ltindex{faces}
+\ltindex{frowny faces}
+\ltindex{smiley faces}
+\label{fontawesome5-faces}
+\begin{longtable}{*2{ll}}
+\multicolumn{4}{l}{\small\textit{(continued from previous page)}} \\[3ex]
+\endhead
+\endfirsthead
+\\[3ex]
+\multicolumn{4}{r}{\small\textit{(continued on next page)}}
+\endfoot
+\endlastfoot
+\K\faAngry                 & \K\faGrinWink            \\
+\KfaReg\faAngry            & \KfaReg\faGrinWink       \\
+\K\faDizzy                 & \K\faKiss                \\
+\KfaReg\faDizzy            & \KfaReg\faKiss           \\
+\K\faFlushed               & \K\faKissBeam            \\
+\KfaReg\faFlushed          & \KfaReg\faKissBeam       \\
+\K\faFrown                 & \K\faKissWinkHeart       \\
+\KfaReg\faFrown            & \KfaReg\faKissWinkHeart  \\
+\K\faFrownOpen             & \K\faLaugh               \\
+\KfaReg\faFrownOpen        & \KfaReg\faLaugh          \\
+\K\faGrimace               & \K\faLaughBeam           \\
+\KfaReg\faGrimace          & \KfaReg\faLaughBeam      \\
+\KfaReg{\faGrin*}          & \K\faLaughSquint         \\
+\K{\faGrin*}               & \KfaReg\faLaughSquint    \\
+\K\faGrin                  & \K\faLaughWink           \\
+\KfaReg\faGrin             & \KfaReg\faLaughWink      \\
+\K\faGrinBeam              & \K\faMeh                 \\
+\KfaReg\faGrinBeam         & \KfaReg\faMeh            \\
+\K\faGrinBeamSweat         & \K\faMehBlank            \\
+\KfaReg\faGrinBeamSweat    & \KfaReg\faMehBlank       \\
+\K\faGrinHearts            & \K\faMehRollingEyes      \\
+\KfaReg\faGrinHearts       & \KfaReg\faMehRollingEyes \\
+\K\faGrinSquint            & \K\faSadCry              \\
+\KfaReg\faGrinSquint       & \KfaReg\faSadCry         \\
+\K\faGrinSquintTears       & \K\faSadTear             \\
+\KfaReg\faGrinSquintTears  & \KfaReg\faSadTear        \\
+\K\faGrinStars             & \K\faSmile               \\
+\KfaReg\faGrinStars        & \KfaReg\faSmile          \\
+\K\faGrinTears             & \K\faSmileBeam           \\
+\KfaReg\faGrinTears        & \KfaReg\faSmileBeam      \\
+\K\faGrinTongue            & \K\faSmileWink           \\
+\KfaReg\faGrinTongue       & \KfaReg\faSmileWink      \\
+\K\faGrinTongueSquint      & \K\faSurprise            \\
+\KfaReg\faGrinTongueSquint & \KfaReg\faSurprise       \\
+\K\faGrinTongueWink        & \K\faTired               \\
+\KfaReg\faGrinTongueWink   & \KfaReg\faTired          \\
+\end{longtable}
+\end{longsymtable}
+
+
+\begin{symtable}[SIMP]{\SIMP\ Characters from \emph{The Simpsons}}
+\index{symbols>Simpsons characters}
+\index{Simpsons characters}
+\index{faces}
+\label{simpsons}
+\begin{tabular}{*3{ll@{\qqquad}}ll}
+\K\Bart  & \K\Homer & \K\Maggie & \K\SNPP \\
+\K\Burns & \K\Lisa  & \K\Marge  &         \\
+\end{tabular}
+
+\bigskip
+
+\begin{tablenote}
+  The location of the characters' pupils can be controlled with the
+  \cmd{\Goofy} command.  See \emph{A \MF\ of `Simpsons'
+  characters}~\cite{Chen1998} for more information.  Also, each of the
+  above can be prefixed with \cmd{\Left} to make the character face
+  left instead of right:
+
+  \begin{center}
+    \begin{tabular}{ll}
+      \Left\Bart & \verb|\Left\Bart| \\
+    \end{tabular}
+  \end{center}
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[ASAP]{\ASAP\ People}
+\index{people}
+\index{men}
+\index{women}
+\index{cycling=cycling (\asapCycling)}
+\index{female adult=female adult (\asapFemaleAdult)}
+\index{female at drinking fountain=female at drinking fountain (\asapFemaleAtDrinkingFountain)}
+\index{female at help desk=female at help desk (\asapFemaleAtHelpDesk)}
+\index{female child=female child (\asapFemaleChild)}
+\index{female discarding trash=female discarding trash (\asapFemaleDiscardingTrash)}
+\index{female holding infant=female holding infant (\asapFemaleHoldingInfant)}
+\index{female walking dog=female walking dog (\asapFemaleWalkingDog)}
+\index{female walking stroller=female walking stroller (\asapFemaleWalkingStroller)}
+\index{female walking=female walking (\asapFemaleWalking)}
+\index{female with child=female with child (\asapFemaleWithChild)}
+\index{female with luggage waiting=female with luggage waiting (\asapFemaleWithLuggageWaiting)}
+\index{female with luggage waving=female with luggage waving (\asapFemaleWithLuggageWaving)}
+\index{female with service animal=female with service animal (\asapFemaleWithServiceAnimal)}
+\index{group meeting=group meeting (\asapGroupMeeting)}
+\index{infant=infant (\asapInfant)}
+\index{male adult=male adult (\asapMaleAdult)}
+\index{male at drinking fountain=male at drinking fountain (\asapMaleAtDrinkingFountain)}
+\index{male at help desk=male at help desk (\asapMaleAtHelpDesk)}
+\index{male child=male child (\asapMaleChild)}
+\index{male discarding trash=male discarding trash (\asapMaleDiscardingTrash)}
+\index{male holding infant=male holding infant (\asapMaleHoldingInfant)}
+\index{male walking dog=male walking dog (\asapMaleWalkingDog)}
+\index{male walking stroller=male walking stroller (\asapMaleWalkingStroller)}
+\index{male walking=male walking (\asapMaleWalking)}
+\index{male with child=male with child (\asapMaleWithChild)}
+\index{male with luggage waiting=male with luggage waiting (\asapMaleWithLuggageWaiting)}
+\index{male with luggage waving=male with luggage waving (\asapMaleWithLuggageWaving)}
+\index{male with service animal=male with service animal (\asapMaleWithServiceAnimal)}
+\index{pregnant=pregnant (\asapPregnant)}
+\index{waiting seated=waiting seated (\asapWaitingSeated)}
+\index{walking cane=walking cane (\asapWalkingCane)}
+\index{wheelchair stationary=wheelchair stationary (\asapWheelchairStationary)}
+\label{asapsym-users}
+\begin{tabular}{*2{ll}}
+\K\asapCycling                  & \K\asapMaleAtDrinkingFountain \\
+\K\asapFemaleAdult              & \K\asapMaleAtHelpDesk         \\
+\K\asapFemaleAtDrinkingFountain & \K\asapMaleChild              \\
+\K\asapFemaleAtHelpDesk         & \K\asapMaleDiscardingTrash    \\
+\K\asapFemaleChild              & \K\asapMaleHoldingInfant      \\
+\K\asapFemaleDiscardingTrash    & \K\asapMaleWalking            \\
+\K\asapFemaleHoldingInfant      & \K\asapMaleWalkingDog         \\
+\K\asapFemaleWalking            & \K\asapMaleWalkingStroller    \\
+\K\asapFemaleWalkingDog         & \K\asapMaleWithChild          \\
+\K\asapFemaleWalkingStroller    & \K\asapMaleWithLuggageWaiting \\
+\K\asapFemaleWithChild          & \K\asapMaleWithLuggageWaving  \\
+\K\asapFemaleWithLuggageWaiting & \K\asapMaleWithServiceAnimal  \\
+\K\asapFemaleWithLuggageWaving  & \K\asapPregnant               \\
+\K\asapFemaleWithServiceAnimal  & \K\asapWaitingSeated          \\
+\K\asapGroupMeeting             & \K\asapWalkingCane            \\
+\K\asapInfant                   & \K\asapWheelchairStationary   \\
+\K\asapMaleAdult                &                               \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\ASAP}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[UTFSYM]{\UTFSYM\ People and Faces}
+\index{faces}
+\index{people}
+\index{men}
+\index{women}
+\label{utfsym-people}
+\begin{tabular}{*4{ll}}
+\Tutf{1F464} & \Tutf{1F46C} & \Tutf{1F474} & \Tutf{1F47E} \\
+\Tutf{1F465} & \Tutf{1F46D} & \Tutf{1F475} & \Tutf{1F47F} \\
+\Tutf{1F466} & \Tutf{1F46E} & \Tutf{1F476} & \Tutf{1F480} \\
+\Tutf{1F467} & \Tutf{1F46F} & \Tutf{1F477} & \Tutf{1F481} \\
+\Tutf{1F468} & \Tutf{1F470} & \Tutf{1F478} & \Tutf{1F482} \\
+\Tutf{1F469} & \Tutf{1F471} & \Tutf{1F479} & \Tutf{1F483} \\
+\Tutf{1F46A} & \Tutf{1F472} & \Tutf{1F47A} & \Tutf{1F486} \\
+\Tutf{1F46B} & \Tutf{1F473} & \Tutf{1F47D} & \Tutf{1F487} \\
+\end{tabular}
+
+\bigskip
+\utfsymmessage[1F475]
+\end{symtable}
+
+
+\begin{symtable}[SILLY]{\SILLY\ Silly Walks}
+\index{silly walks}
+\index{Monty Python's Flying Circus}
+\index{men}
+\index{people}
+\label{sillypage}
+\begin{tabular}{ll*2{@{\qquad}ll}}
+\Tsilly{1} & \Tsilly{5} & \Tsilly{9}  \\
+\Tsilly{2} & \Tsilly{6} & \Tsilly{10} \\
+\Tsilly{3} & \Tsilly{7} & \Tsilly{11} \\
+\Tsilly{4} & \Tsilly{8} & \Tsilly{12} \\
+\end{tabular}
+
+\bigskip
+
+\begin{tablenote}
+  All \SILLY\ symbols are implemented with PDF\index{PDF} graphics,
+  not with a font.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[TYPICOS]{\TYPICOS\ Users}
+\index{users}
+\index{user add=user add (\tiUserAddOutline)}
+\index{user add=user add (\tiUserAdd)}
+\index{user delete=user delete (\tiUserDeleteOutline)}
+\index{user delete=user delete (\tiUserDelete)}
+\index{user=user (\tiUserOutline)}
+\index{user=user (\tiUser)}
+\label{typicons-users}
+\begin{tabular}{*3{ll}}
+\K\tiUser    & \K\tiUserAddOutline & \K\tiUserDeleteOutline \\
+\K\tiUserAdd & \K\tiUserDelete     & \K\tiUserOutline       \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\TYPICOS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[FNTAWE]{\FNTAWE\ Users}
+\index{users}
+\label{fontawesome5-users}
+\begin{tabular}{*3{ll}}
+\K{\faUser*}         & \K\faUserEdit     & \K\faUsers      \\
+\K\faUser            & \K\faUserFriends  & \K\faUsersCog   \\
+\KfaReg\faUser       & \K\faUserGraduate & \K\faUserSecret \\
+\K\faUserAltSlash    & \K\faUserInjured  & \K\faUserShield \\
+\K\faUserAstronaut   & \K\faUserLock     & \K\faUserSlash  \\
+\K\faUserCheck       & \K\faUserMd       & \K\faUsersSlash \\
+\K\faUserCircle      & \K\faUserMinus    & \K\faUserTag    \\
+\KfaReg\faUserCircle & \K\faUserNinja    & \K\faUserTie    \\
+\K\faUserClock       & \K\faUserNurse    & \K\faUserTimes  \\
+\K\faUserCog         & \K\faUserPlus     &                 \\
+\end{tabular}
+\end{symtable}
+
+
 \begin{symtable}[SCSNOW]{\SCSNOW\ Snowmen}
 \index{snowmen}
 \label{scsnowman}
@@ -20250,20 +24584,155 @@
 \end{symtable}
 
 
+\begin{symtable}[TYPICOS]{\TYPICOS\ Files and Folders}
+\idxboth{file}{symbols}
+\idxboth{folder}{symbols}
+\index{document add=document add (\tiDocumentAdd)}
+\index{document delete=document delete (\tiDocumentDelete)}
+\index{document text=document text (\tiDocumentText)}
+\index{document=document (\tiDocument)}
+\index{folder add=folder add (\tiFolderAdd)}
+\index{folder delete=folder delete (\tiFolderDelete)}
+\index{folder open=folder open (\tiFolderOpen)}
+\index{folder=folder (\tiFolder)}
+\label{typicons-files}
+\begin{tabular}{*3{ll}}
+\K\tiDocument       & \K\tiDocumentText & \K\tiFolderDelete \\
+\K\tiDocumentAdd    & \K\tiFolder       & \K\tiFolderOpen   \\
+\K\tiDocumentDelete & \K\tiFolderAdd    &                   \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\TYPICOS}.
+\end{tablenote}
+\end{symtable}
+
+
+\begin{symtable}[FNTAWE]{\FNTAWE\ Files and Folders}
+\idxboth{file}{symbols}
+\idxboth{folder}{symbols}
+\label{fontawesome5-files}
+\begin{tabular}{*3{ll}}
+\KfaReg{\faFile*}     & \KfaReg\faFileExcel      & \K\faFileSignature   \\
+\K{\faFile*}          & \K\faFileExport          & \K\faFileUpload      \\
+\K\faFile             & \K\faFileImage           & \K\faFileVideo       \\
+\KfaReg\faFile        & \KfaReg\faFileImage      & \KfaReg\faFileVideo  \\
+\K\faFileArchive      & \K\faFileImport          & \K\faFileWord        \\
+\KfaReg\faFileArchive & \K\faFileInvoice         & \KfaReg\faFileWord   \\
+\K\faFileAudio        & \K\faFileInvoiceDollar   & \K\faFolder          \\
+\KfaReg\faFileAudio   & \K{\faFileMedical*}      & \KfaReg\faFolder     \\
+\K\faFileCode         & \K\faFileMedical         & \K\faFolderMinus     \\
+\KfaReg\faFileCode    & \K\faFilePdf             & \K\faFolderOpen      \\
+\K\faFileContract     & \KfaReg\faFilePdf        & \KfaReg\faFolderOpen \\
+\K\faFileCsv          & \K\faFilePowerpoint      & \K\faFolderPlus      \\
+\K\faFileDownload     & \KfaReg\faFilePowerpoint &                      \\
+\K\faFileExcel        & \K\faFilePrescription    &                      \\
+
+\end{tabular}
+\end{symtable}
+
+
+\begin{symtable}[FNTAWE]{\FNTAWE\ Religion}
+\idxboth{religious}{symbols}
+\idxboth{yin-yang}{symbols}
+\subindex{stars}{with crescent}
+\subindex{stars}{Jewish}
+\index{star of David}
+\index{crosses}
+\index{crucifixes}
+\index{houses of worship}
+\index{ankh=ankh (\faAnkh)}
+\index{Baha'i=Bah{\'a}'{\'i} (\faBahai)}
+\index{Bible=Bible (\faBible)}
+\index{church=church (\faChurch)}
+\index{cross=cross (\faCross)}
+\index{dharmachakra=dharmachakra (\faDharmachakra)}
+\index{gopuram=gopuram (\faGopuram)}
+\index{hamsa=hamsa (\faHamsa)}
+\index{hanukiah=hanukiah (\faHanukiah)}
+\index{kaaba=kaaba (\faKaaba)}
+\index{khanda=khanda (\faKhanda)}
+\index{menorah=menorah (\faMenorah)}
+\index{mosque=mosque (\faMosque)}
+\index{om=om (\faOm)}
+\index{Pastafarianism=Pastafarianism (\faPastafarianism)}
+\index{place of worship=place of worship (\faPlaceOfWorship)}
+\index{pray=pray (\faPray)}
+\index{praying hands=praying hands (\faPrayingHands)}
+\index{Quran=Quran (\faQuran)}
+\index{Koran=Koran (\faQuran)}
+\index{star and crescent=star and crescent (\faStarAndCrescent)}
+\index{star of David=star of David (\faStarOfDavid)}
+\index{synagogue=synagogue (\faSynagogue)}
+\index{torah=torah (\faTorah)}
+\index{torii gate=torii gate (\faToriiGate)}
+\index{vihara=vihara (\faVihara)}
+\index{yin yang=yin yang (\faYinYang)}
+\idxboth{yin-yang}{symbols}
+\label{fontawesome5-religious}
+\begin{tabular}{*3{ll}}
+\K\faAnkh         & \K\faKaaba          & \K\faQuran           \\
+\K\faBahai        & \K\faKhanda         & \K\faStarAndCrescent \\
+\K\faBible        & \K\faMenorah        & \K\faStarOfDavid     \\
+\K\faChurch       & \K\faMosque         & \K\faSynagogue       \\
+\K\faCross        & \K\faOm             & \K\faTorah           \\
+\K\faDharmachakra & \K\faPastafarianism & \K\faToriiGate       \\
+\K\faGopuram      & \K\faPlaceOfWorship & \K\faVihara          \\
+\K\faHamsa        & \K\faPray           & \K\faYinYang         \\
+\K\faHanukiah     & \K\faPrayingHands   &                      \\
+\end{tabular}
+\end{symtable}
+
+
+\begin{symtable}[UTFSYM]{\UTFSYM\ Religion}
+\idxboth{religious}{symbols}
+\index{houses of worship}
+\index{menorahs}
+\label{utfsym-religious}
+\begin{tabular}{*4{ll}}
+\Tutf{1F543} & \Tutf{1F545} & \Tutf{1F54B} & \Tutf{1F54D} \\
+\Tutf{1F544} & \Tutf{1F549} & \Tutf{1F54C} & \Tutf{1F54E} \\
+\end{tabular}
+
+\bigskip
+\utfsymmessage[1f54b]
+\end{symtable}
+
+
+\begin{symtable}[ASAP]{\ASAP\ Elevators, Escalators, and Stairs}
+\index{elevators}
+\index{escalators}
+\index{stairs}
+\label{asapsym-elevators}
+\begin{tabular}{*3{ll}}
+\K\asapElevator      & \K\asapEscalatorUp & \K\asapStairUp \\
+\K\asapEscalator     & \K\asapStair       &                \\
+\K\asapEscalatorDown & \K\asapStairDown   &                \\
+\end{tabular}
+
+\bigskip
+\begin{tablenote}
+  \luaxemessage{\ASAP}.
+\end{tablenote}
+\end{symtable}
+
+
 \begin{longsymtable}[BCLOGO]{Miscellaneous \BCLOGO\ Symbols}
-\ltindex{bomb}
-\ltindex{male}
-\ltindex{female}
+\ltindex{bombs}
+\ltindex{card suits}
+\ltindex{clefs}
+\ltindex{clouds}
+\ltindex{faces}
+\ltindex{female sign}
 \ltindex{flags}
-\ltindex{clefs}
-\ltindex{smiley faces}
+\ltindex{flowers}
 \ltindex{frowny faces}
-\ltindex{faces}
-\ltindex{card suits}
 \ltindex{hearts}
+\ltindex{male sign}
+\ltindex{paperclip}
+\ltindex{smiley faces}
 \ltindex{spades}
-\ltindex{flowers}
-\ltindex{paperclip}
 \ltindex{suns}
 \ltidxboth{yin-yang}{symbols}
 \ltidxboth{weather}{symbols}
@@ -20270,7 +24739,69 @@
 \ltidxboth{clock}{symbols}
 \ltidxboth{recycling}{symbols}
 \ltidxboth{musical}{symbols}
-\ltidxboth{miscellaneous}{symbols}
+\ltidxboth{peace}{symbols}
+\ltidxboth{dangerous bend}{symbols}
+\ltindex{bomb=bomb (\bcbombe)}
+\ltindex{key=key (\bccle)}
+\ltindex{clefa=clefa (\bcclefa)}
+\ltindex{clesol=clesol (\bcclesol)}
+\ltindex{heart=heart (\bccoeur)}
+\ltindex{pencil=pencil (\bccrayon)}
+\ltindex{cube=cube (\bccube)}
+\ltsubindex{flags}{Germany=Germany (\bcdallemagne)}
+\ltindex{danger=danger (\bcdanger)}
+\ltsubindex{flags}{Austria=Austria (\bcdautriche)}
+\ltsubindex{flags}{Belgium=Belgium (\bcdbelgique)}
+\ltsubindex{flags}{Bulgaria=Bulgaria (\bcdbulgarie)}
+\ltsubindex{flags}{France=France (\bcdfrance)}
+\ltsubindex{flags}{Italy=Italy (\bcditalie)}
+\ltsubindex{flags}{Luxembourg=Luxembourg (\bcdluxembourg)}
+\ltindex{dodecaedron=dodecaedron (\bcdodecaedre)}
+\ltsubindex{flags}{Netherlands=Netherlands (\bcdpaysbas)}
+\ltindex{dangerous bend=dangerous bend (\bcdz)}
+\ltindex{partly sunny=partly sunny (\bceclaircie)}
+\ltindex{star=star (\bcetoile)}
+\ltindex{female=female (\bcfemme)}
+\ltindex{yellow stoplight=yellow stoplight (\bcfeujaune)}
+\ltindex{red stoplight=red stoplight (\bcfeurouge)}
+\ltindex{stoplight=stoplight (\bcfeutricolore)}
+\ltindex{green stoplight=green stoplight (\bcfeuvert)}
+\ltindex{flower=flower (\bcfleur)}
+\ltindex{male=male (\bchomme)}
+\ltindex{clock=clock (\bchorloge)}
+\ltindex{icosahedron=icosahedron (\bcicosaedre)}
+\ltindex{information=information (\bcinfo)}
+\ltindex{do not enter=do not enter (\bcinterdit)}
+\ltindex{light bulb=light bulb (\bclampe)}
+\ltindex{magnifying glass=magnifying glass (\bcloupe)}
+\ltindex{snow=snow (\bcneige)}
+\ltindex{musical note=musical note (\bcnote)}
+\ltindex{radiation=radiation (\bcnucleaire)}
+\ltindex{octahedron=octahedron (\bcoctaedre)}
+\ltindex{eye=eye (\bcoeil)}
+\ltindex{ornament=ornament (\bcorne)}
+\ltindex{bear=bear (\bcours)}
+\ltindex{wrench=wrench (\bcoutil)}
+\ltindex{man working sign=man working sign (\bcpanchant)}
+\ltindex{peace=peace (\bcpeaceandlove)}
+\ltindex{rain cloud=rain cloud (\bcpluie)}
+\ltindex{feather=feather (\bcplume)}
+\ltindex{fish=fish (\bcpoisson)}
+\ltindex{question mark=question mark (\bcquestion)}
+\ltindex{recycling symbol=recycling symbol (\bcrecyclage)}
+\ltindex{compass=compass (\bcrosevents)}
+\ltindex{smiling face=smiling face (\bcsmbh)}
+\ltindex{frowning face=frowning face (\bcsmmh)}
+\ltindex{sun=sun (\bcsoleil)}
+\ltindex{spade suit=spade suit (\bcspadesuit)}
+\ltindex{stop sign=stop sign (\bcstop)}
+\ltindex{caution sign=caution sign (\bctakecare)}
+\ltindex{tetrahedron=tetrahedron (\bctetraedre)}
+\ltindex{clover=clover (\bctrefle)}
+\ltindex{paperclip=paperclip (\bctrombone)}
+\ltindex{jack of hearts=jack of hearts (\bcvaletcoeur)}
+\ltindex{bicycle=bicycle (\bcvelo)}
+\ltindex{yin yang=yin yang (\bcyin)}
 \label{bclogo}
 \begin{longtable}{*3{ll}}
 \multicolumn{6}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -20312,34 +24843,35 @@
 \end{longsymtable}
 
 
-\begin{longsymtable}[UTFSYM]{Miscellaneous \UTFSYM\ Pictographs}
+\begin{longsymtable}[UTFSYM]{Miscellaneous \UTFSYM\ Symbols}
 \ltidxboth{computer hardware}{symbols}
 \ltidxboth{currency}{symbols}
-\ltidxboth{miscellaneous}{symbols}
+\ltidxboth{media control}{symbols}
 \ltidxboth{monetary}{symbols}
+\ltidxboth{musical}{symbols}
 \ltidxboth{sporting}{symbols}
-\ltindex{animals}
 \ltindex{callouts}
 \ltindex{Earth}
 \ltindex{envelopes}
-\ltindex{faces}
 \ltindex{flowers}
-\ltindex{fruits}
-\ltindex{globes}
+\ltindex{globe}
 \ltindex{hearts}
 \ltindex{keys}
 \ltindex{land masses}
 \ltindex{locks}
 \ltindex{maps}
-\ltindex{men}
-\ltindex{menorahs}
 \ltindex{plants}
 \ltindex{skulls}
 \ltindex{symbols>maps}
-\ltindex{telephones}
 \ltindex{tools}
-\ltindex{women}
 \ltindex{word balloons}
+\ltindex{telephone=telephone (\usym{1F57B})}
+\ltindex{telephone=telephone (\usym{1F57C})}
+\ltindex{telephone=telephone (\usym{1F57D})}
+\ltindex{telephone=telephone (\usym{1F57E})}
+\ltindex{telephone=telephone (\usym{1F57F})}
+\ltindex{telephone=telephone (\usym{1F580})}
+\ltindex{telephone=telephone (\usym{1F581})}
 \label{utfsym-misc}
 \begin{longtable}{*4{ll}}
 \multicolumn{8}{l}{\small\textit{(continued from previous page)}} \\[3ex]
@@ -20349,169 +24881,102 @@
 \multicolumn{8}{r}{\small\textit{(continued on next page)}}
 \endfoot
 \endlastfoot
-\Tutf{1F300} & \Tutf{1F3C2} & \Tutf{1F472} & \Tutf{1F515}  \\
-\Tutf{1F301} & \Tutf{1F3C3} & \Tutf{1F473} & \Tutf{1F516}  \\
-\Tutf{1F302} & \Tutf{1F3C4} & \Tutf{1F474} & \Tutf{1F517}  \\
-\Tutf{1F303} & \Tutf{1F3C5} & \Tutf{1F475} & \Tutf{1F518}  \\
-\Tutf{1F304} & \Tutf{1F3C6} & \Tutf{1F476} & \Tutf{1F519}  \\
-\Tutf{1F305} & \Tutf{1F3C7} & \Tutf{1F477} & \Tutf{1F51A}  \\
-\Tutf{1F306} & \Tutf{1F3C8} & \Tutf{1F478} & \Tutf{1F51B}  \\
-\Tutf{1F307} & \Tutf{1F3C9} & \Tutf{1F479} & \Tutf{1F51C}  \\
-\Tutf{1F308} & \Tutf{1F3CA} & \Tutf{1F47A} & \Tutf{1F51D}  \\
-\Tutf{1F309} & \Tutf{1F3CB} & \Tutf{1F47B} & \Tutf{1F51E}  \\
-\Tutf{1F30A} & \Tutf{1F3CC} & \Tutf{1F47C} & \Tutf{1F51F}  \\
-\Tutf{1F30B} & \Tutf{1F3CF} & \Tutf{1F47D} & \Tutf{1F520}  \\
-\Tutf{1F30C} & \Tutf{1F3D0} & \Tutf{1F47E} & \Tutf{1F521}  \\
-\Tutf{1F30D} & \Tutf{1F3D1} & \Tutf{1F47F} & \Tutf{1F522}  \\
-\Tutf{1F30E} & \Tutf{1F3D2} & \Tutf{1F480} & \Tutf{1F523}  \\
-\Tutf{1F30F} & \Tutf{1F3D3} & \Tutf{1F481} & \Tutf{1F524}  \\
-\Tutf{1F310} & \Tutf{1F3D4} & \Tutf{1F482} & \Tutf{1F525}  \\
-\Tutf{1F32D} & \Tutf{1F3D5} & \Tutf{1F483} & \Tutf{1F526}  \\
-\Tutf{1F32E} & \Tutf{1F3D6} & \Tutf{1F484} & \Tutf{1F527}  \\
-\Tutf{1F32F} & \Tutf{1F3D7} & \Tutf{1F485} & \Tutf{1F528}  \\
-\Tutf{1F330} & \Tutf{1F3D8} & \Tutf{1F486} & \Tutf{1F529}  \\
-\Tutf{1F331} & \Tutf{1F3D9} & \Tutf{1F487} & \Tutf{1F52A}  \\
-\Tutf{1F332} & \Tutf{1F3DA} & \Tutf{1F488} & \Tutf{1F52B}  \\
-\Tutf{1F333} & \Tutf{1F3DB} & \Tutf{1F489} & \Tutf{1F52C}  \\
-\Tutf{1F334} & \Tutf{1F3DC} & \Tutf{1F48A} & \Tutf{1F52D}  \\
-\Tutf{1F335} & \Tutf{1F3DD} & \Tutf{1F48B} & \Tutf{1F52E}  \\
-\Tutf{1F336} & \Tutf{1F3DE} & \Tutf{1F48C} & \Tutf{1F530}  \\
-\Tutf{1F337} & \Tutf{1F3DF} & \Tutf{1F48D} & \Tutf{1F531}  \\
-\Tutf{1F338} & \Tutf{1F3E0} & \Tutf{1F48E} & \Tutf{1F532}  \\
-\Tutf{1F339} & \Tutf{1F3E1} & \Tutf{1F48F} & \Tutf{1F533}  \\
-\Tutf{1F33A} & \Tutf{1F3E2} & \Tutf{1F490} & \Tutf{1F53E}  \\
-\Tutf{1F33B} & \Tutf{1F3E3} & \Tutf{1F491} & \Tutf{1F53F}  \\
-\Tutf{1F33C} & \Tutf{1F3E4} & \Tutf{1F492} & \Tutf{1F540}  \\
-\Tutf{1F33D} & \Tutf{1F3E5} & \Tutf{1F493} & \Tutf{1F541}  \\
-\Tutf{1F33E} & \Tutf{1F3E6} & \Tutf{1F494} & \Tutf{1F542}  \\
-\Tutf{1F33F} & \Tutf{1F3E7} & \Tutf{1F495} & \Tutf{1F543}  \\
-\Tutf{1F340} & \Tutf{1F3E8} & \Tutf{1F496} & \Tutf{1F544}  \\
-\Tutf{1F341} & \Tutf{1F3E9} & \Tutf{1F497} & \Tutf{1F545}  \\
-\Tutf{1F342} & \Tutf{1F3EA} & \Tutf{1F498} & \Tutf{1F549}  \\
-\Tutf{1F343} & \Tutf{1F3EB} & \Tutf{1F499} & \Tutf{1F54A}  \\
-\Tutf{1F344} & \Tutf{1F3EC} & \Tutf{1F49A} & \Tutf{1F54B}  \\
-\Tutf{1F345} & \Tutf{1F3ED} & \Tutf{1F49B} & \Tutf{1F54C}  \\
-\Tutf{1F346} & \Tutf{1F3EE} & \Tutf{1F49C} & \Tutf{1F54D}  \\
-\Tutf{1F347} & \Tutf{1F3EF} & \Tutf{1F49D} & \Tutf{1F54E}  \\
-\Tutf{1F348} & \Tutf{1F3F0} & \Tutf{1F49E} & \Tutf{1F54F}  \\
-\Tutf{1F349} & \Tutf{1F3F1} & \Tutf{1F49F} & \Tutf{1F568}  \\
-\Tutf{1F34A} & \Tutf{1F3F2} & \Tutf{1F4A0} & \Tutf{1F569}  \\
-\Tutf{1F34B} & \Tutf{1F3F3} & \Tutf{1F4A1} & \Tutf{1F56A}  \\
-\Tutf{1F34C} & \Tutf{1F3F4} & \Tutf{1F4A2} & \Tutf{1F56B}  \\
-\Tutf{1F34D} & \Tutf{1F3F5} & \Tutf{1F4A3} & \Tutf{1F56C}  \\
-\Tutf{1F34E} & \Tutf{1F3F6} & \Tutf{1F4A4} & \Tutf{1F56D}  \\
-\Tutf{1F34F} & \Tutf{1F3F7} & \Tutf{1F4A5} & \Tutf{1F56E}  \\
-\Tutf{1F350} & \Tutf{1F3F8} & \Tutf{1F4A6} & \Tutf{1F56F}  \\
-\Tutf{1F351} & \Tutf{1F3F9} & \Tutf{1F4A7} & \Tutf{1F571}  \\
-\Tutf{1F352} & \Tutf{1F3FA} & \Tutf{1F4A8} & \Tutf{1F572}  \\
-\Tutf{1F353} & \Tutf{1F3FB} & \Tutf{1F4A9} & \Tutfw{1F573} \\
-\Tutf{1F354} & \Tutf{1F3FC} & \Tutf{1F4AA} & \Tutf{1F574}  \\
-\Tutf{1F355} & \Tutf{1F3FD} & \Tutf{1F4AB} & \Tutf{1F575}  \\
-\Tutf{1F356} & \Tutf{1F3FE} & \Tutf{1F4AC} & \Tutfw{1F576} \\
-\Tutf{1F357} & \Tutf{1F3FF} & \Tutf{1F4AD} & \Tutf{1F577}  \\
-\Tutf{1F358} & \Tutf{1F400} & \Tutf{1F4AE} & \Tutf{1F578}  \\
-\Tutf{1F359} & \Tutf{1F401} & \Tutf{1F4AF} & \Tutf{1F579}  \\
-\Tutf{1F35A} & \Tutf{1F402} & \Tutf{1F4B0} & \Tutf{1F57A}  \\
-\Tutf{1F35B} & \Tutf{1F403} & \Tutf{1F4B1} & \Tutf{1F57B}  \\
-\Tutf{1F35C} & \Tutf{1F404} & \Tutf{1F4B2} & \Tutf{1F57C}  \\
-\Tutf{1F35D} & \Tutf{1F405} & \Tutf{1F4B3} & \Tutf{1F57D}  \\
-\Tutf{1F35E} & \Tutf{1F406} & \Tutf{1F4B4} & \Tutf{1F57E}  \\
-\Tutf{1F35F} & \Tutf{1F407} & \Tutf{1F4B5} & \Tutf{1F57F}  \\
-\Tutf{1F360} & \Tutf{1F408} & \Tutf{1F4B6} & \Tutf{1F580}  \\
-\Tutf{1F361} & \Tutf{1F409} & \Tutf{1F4B7} & \Tutf{1F581}  \\
-\Tutf{1F362} & \Tutf{1F40A} & \Tutf{1F4B8} & \Tutf{1F582}  \\
-\Tutf{1F363} & \Tutf{1F40B} & \Tutf{1F4B9} & \Tutf{1F583}  \\
-\Tutf{1F364} & \Tutf{1F40C} & \Tutf{1F4BA} & \Tutf{1F584}  \\
-\Tutf{1F365} & \Tutf{1F40D} & \Tutf{1F4BB} & \Tutf{1F585}  \\
-\Tutf{1F366} & \Tutf{1F40E} & \Tutf{1F4BC} & \Tutf{1F586}  \\
-\Tutf{1F367} & \Tutf{1F40F} & \Tutf{1F4BD} & \Tutf{1F587}  \\
-\Tutf{1F368} & \Tutf{1F410} & \Tutf{1F4BE} & \Tutf{1F588}  \\
-\Tutf{1F369} & \Tutf{1F411} & \Tutf{1F4BF} & \Tutf{1F5A4}  \\
-\Tutf{1F36A} & \Tutf{1F412} & \Tutf{1F4C0} & \Tutf{1F5A5}  \\
-\Tutf{1F36B} & \Tutf{1F413} & \Tutf{1F4C1} & \Tutf{1F5A6}  \\
-\Tutf{1F36C} & \Tutf{1F414} & \Tutf{1F4C2} & \Tutf{1F5A7}  \\
-\Tutf{1F36D} & \Tutf{1F415} & \Tutf{1F4C3} & \Tutf{1F5A8}  \\
-\Tutf{1F36E} & \Tutf{1F416} & \Tutf{1F4C4} & \Tutf{1F5A9}  \\
-\Tutf{1F36F} & \Tutf{1F417} & \Tutf{1F4C5} & \Tutf{1F5AA}  \\
-\Tutf{1F370} & \Tutf{1F418} & \Tutf{1F4C6} & \Tutf{1F5AB}  \\
-\Tutf{1F371} & \Tutf{1F419} & \Tutf{1F4C7} & \Tutf{1F5AC}  \\
-\Tutf{1F372} & \Tutf{1F41A} & \Tutf{1F4C8} & \Tutf{1F5AD}  \\
-\Tutf{1F373} & \Tutf{1F41B} & \Tutf{1F4C9} & \Tutf{1F5AE}  \\
-\Tutf{1F374} & \Tutf{1F41C} & \Tutf{1F4CA} & \Tutf{1F5AF}  \\
-\Tutf{1F375} & \Tutf{1F41D} & \Tutf{1F4CB} & \Tutf{1F5B0}  \\
-\Tutf{1F376} & \Tutf{1F41E} & \Tutf{1F4CC} & \Tutf{1F5B1}  \\
-\Tutf{1F377} & \Tutf{1F41F} & \Tutf{1F4CD} & \Tutf{1F5B2}  \\
-\Tutf{1F378} & \Tutf{1F420} & \Tutf{1F4CE} & \Tutf{1F5B3}  \\
-\Tutf{1F379} & \Tutf{1F421} & \Tutf{1F4CF} & \Tutfw{1F5B4} \\
-\Tutf{1F37A} & \Tutf{1F422} & \Tutf{1F4D0} & \Tutf{1F5B5}  \\
-\Tutf{1F37B} & \Tutf{1F423} & \Tutf{1F4D1} & \Tutf{1F5B6}  \\
-\Tutf{1F37C} & \Tutf{1F424} & \Tutf{1F4D2} & \Tutf{1F5B7}  \\
-\Tutf{1F37D} & \Tutf{1F425} & \Tutf{1F4D3} & \Tutf{1F5B8}  \\
-\Tutf{1F37E} & \Tutf{1F426} & \Tutf{1F4D4} & \Tutf{1F5B9}  \\
-\Tutf{1F37F} & \Tutf{1F427} & \Tutf{1F4D5} & \Tutf{1F5BA}  \\
-\Tutf{1F380} & \Tutf{1F428} & \Tutf{1F4D6} & \Tutf{1F5BB}  \\
-\Tutf{1F381} & \Tutf{1F429} & \Tutf{1F4D7} & \Tutf{1F5BC}  \\
-\Tutf{1F382} & \Tutf{1F42A} & \Tutf{1F4D8} & \Tutf{1F5BD}  \\
-\Tutf{1F383} & \Tutf{1F42B} & \Tutf{1F4D9} & \Tutf{1F5BE}  \\
-\Tutf{1F384} & \Tutf{1F42C} & \Tutf{1F4DA} & \Tutf{1F5BF}  \\
-\Tutf{1F385} & \Tutf{1F42D} & \Tutf{1F4DB} & \Tutf{1F5C0}  \\
-\Tutf{1F386} & \Tutf{1F42E} & \Tutf{1F4DC} & \Tutf{1F5C1}  \\
-\Tutf{1F387} & \Tutf{1F42F} & \Tutf{1F4DD} & \Tutf{1F5C2}  \\
-\Tutf{1F388} & \Tutf{1F430} & \Tutf{1F4DE} & \Tutf{1F5C3}  \\
-\Tutf{1F389} & \Tutf{1F431} & \Tutf{1F4DF} & \Tutf{1F5C4}  \\
-\Tutf{1F38A} & \Tutf{1F432} & \Tutf{1F4E0} & \Tutf{1F5C5}  \\
-\Tutf{1F38B} & \Tutf{1F433} & \Tutf{1F4E1} & \Tutf{1F5C6}  \\
-\Tutf{1F38C} & \Tutf{1F434} & \Tutf{1F4E2} & \Tutf{1F5C7}  \\
-\Tutf{1F38D} & \Tutf{1F435} & \Tutf{1F4E3} & \Tutf{1F5C8}  \\
-\Tutf{1F38E} & \Tutf{1F436} & \Tutf{1F4E4} & \Tutf{1F5C9}  \\
-\Tutf{1F38F} & \Tutf{1F437} & \Tutf{1F4E5} & \Tutf{1F5CA}  \\
-\Tutf{1F390} & \Tutf{1F438} & \Tutf{1F4E6} & \Tutf{1F5CB}  \\
-\Tutf{1F391} & \Tutf{1F439} & \Tutf{1F4E7} & \Tutf{1F5CC}  \\
-\Tutf{1F392} & \Tutf{1F43A} & \Tutf{1F4E8} & \Tutf{1F5CD}  \\
-\Tutf{1F393} & \Tutf{1F43B} & \Tutf{1F4E9} & \Tutf{1F5CE}  \\
-\Tutf{1F394} & \Tutf{1F43C} & \Tutf{1F4EA} & \Tutf{1F5CF}  \\
-\Tutf{1F395} & \Tutf{1F43D} & \Tutf{1F4EB} & \Tutf{1F5D0}  \\
-\Tutf{1F396} & \Tutf{1F43E} & \Tutf{1F4EC} & \Tutf{1F5D1}  \\
-\Tutf{1F397} & \Tutf{1F43F} & \Tutf{1F4ED} & \Tutf{1F5D2}  \\
-\Tutf{1F398} & \Tutf{1F440} & \Tutf{1F4EE} & \Tutf{1F5D3}  \\
-\Tutf{1F399} & \Tutf{1F441} & \Tutf{1F4EF} & \Tutf{1F5D4}  \\
-\Tutf{1F39A} & \Tutf{1F442} & \Tutf{1F4F0} & \Tutfw{1F5D5} \\
-\Tutf{1F39B} & \Tutf{1F443} & \Tutf{1F4F1} & \Tutf{1F5D6}  \\
-\Tutf{1F39C} & \Tutf{1F444} & \Tutf{1F4F2} & \Tutf{1F5D7}  \\
-\Tutf{1F39D} & \Tutf{1F445} & \Tutf{1F4F3} & \Tutf{1F5D8}  \\
-\Tutf{1F39E} & \Tutf{1F451} & \Tutf{1F4F4} & \Tutf{1F5D9}  \\
-\Tutf{1F39F} & \Tutf{1F452} & \Tutf{1F4F5} & \Tutf{1F5DA}  \\
-\Tutf{1F3A0} & \Tutf{1F453} & \Tutf{1F4F6} & \Tutf{1F5DB}  \\
-\Tutf{1F3A1} & \Tutf{1F454} & \Tutf{1F4F7} & \Tutf{1F5DC}  \\
-\Tutf{1F3A2} & \Tutf{1F455} & \Tutf{1F4F8} & \Tutf{1F5DD}  \\
-\Tutf{1F3A3} & \Tutf{1F456} & \Tutf{1F4F9} & \Tutf{1F5DE}  \\
-\Tutf{1F3A4} & \Tutf{1F457} & \Tutf{1F4FA} & \Tutf{1F5DF}  \\
-\Tutf{1F3A5} & \Tutf{1F458} & \Tutf{1F4FB} & \Tutf{1F5E0}  \\
-\Tutf{1F3A6} & \Tutf{1F459} & \Tutf{1F4FC} & \Tutf{1F5E1}  \\
-\Tutf{1F3A7} & \Tutf{1F45A} & \Tutf{1F4FD} & \Tutf{1F5E2}  \\
-\Tutf{1F3A8} & \Tutf{1F45B} & \Tutf{1F4FE} & \Tutf{1F5E3}  \\
-\Tutf{1F3A9} & \Tutf{1F45C} & \Tutf{1F4FF} & \Tutf{1F5E4}  \\
-\Tutf{1F3AA} & \Tutf{1F45D} & \Tutf{1F500} & \Tutf{1F5E5}  \\
-\Tutf{1F3AB} & \Tutf{1F45E} & \Tutf{1F501} & \Tutf{1F5E6}  \\
-\Tutf{1F3AC} & \Tutf{1F45F} & \Tutf{1F502} & \Tutf{1F5E7}  \\
-\Tutf{1F3AD} & \Tutf{1F460} & \Tutf{1F503} & \Tutf{1F5E8}  \\
-\Tutf{1F3AE} & \Tutf{1F461} & \Tutf{1F504} & \Tutf{1F5E9}  \\
-\Tutf{1F3AF} & \Tutf{1F462} & \Tutf{1F505} & \Tutf{1F5EA}  \\
-\Tutf{1F3B0} & \Tutf{1F463} & \Tutf{1F506} & \Tutf{1F5EB}  \\
-\Tutf{1F3B1} & \Tutf{1F464} & \Tutf{1F507} & \Tutf{1F5EC}  \\
-\Tutf{1F3B2} & \Tutf{1F465} & \Tutf{1F508} & \Tutf{1F5ED}  \\
-\Tutf{1F3B3} & \Tutf{1F466} & \Tutf{1F509} & \Tutf{1F5EE}  \\
-\Tutf{1F3B4} & \Tutf{1F467} & \Tutf{1F50A} & \Tutf{1F5EF}  \\
-\Tutf{1F3B7} & \Tutf{1F468} & \Tutf{1F50B} & \Tutf{1F5F0}  \\
-\Tutf{1F3B8} & \Tutf{1F469} & \Tutf{1F50C} & \Tutf{1F5F1}  \\
-\Tutf{1F3B9} & \Tutf{1F46A} & \Tutf{1F50D} & \Tutf{1F5F2}  \\
-\Tutf{1F3BA} & \Tutf{1F46B} & \Tutf{1F50E} & \Tutf{1F5F3}  \\
-\Tutf{1F3BB} & \Tutf{1F46C} & \Tutf{1F50F} & \Tutf{1F5FA}  \\
-\Tutf{1F3BD} & \Tutf{1F46D} & \Tutf{1F510} & \Tutf{1F5FB}  \\
-\Tutf{1F3BE} & \Tutf{1F46E} & \Tutf{1F511} & \Tutf{1F5FC}  \\
-\Tutf{1F3BF} & \Tutf{1F46F} & \Tutf{1F512} & \Tutf{1F5FD}  \\
-\Tutf{1F3C0} & \Tutf{1F470} & \Tutf{1F513} & \Tutf{1F5FE}  \\
-\Tutf{1F3C1} & \Tutf{1F471} & \Tutf{1F514} & \Tutf{1F5FF}  \\
+\Tutf{1F300} & \Tutf{1F3EF} & \Tutf{1F4E3} & \Tutf{1F583}  \\
+\Tutf{1F301} & \Tutf{1F3F0} & \Tutf{1F4E4} & \Tutf{1F584}  \\
+\Tutf{1F302} & \Tutf{1F3F1} & \Tutf{1F4E5} & \Tutf{1F585}  \\
+\Tutf{1F303} & \Tutf{1F3F2} & \Tutf{1F4E6} & \Tutf{1F586}  \\
+\Tutf{1F304} & \Tutf{1F3F3} & \Tutf{1F4E7} & \Tutf{1F587}  \\
+\Tutf{1F305} & \Tutf{1F3F4} & \Tutf{1F4E8} & \Tutf{1F588}  \\
+\Tutf{1F306} & \Tutf{1F3F7} & \Tutf{1F4E9} & \Tutf{1F5A5}  \\
+\Tutf{1F307} & \Tutf{1F3FA} & \Tutf{1F4EA} & \Tutf{1F5A6}  \\
+\Tutf{1F308} & \Tutf{1F3FB} & \Tutf{1F4EB} & \Tutf{1F5A7}  \\
+\Tutf{1F309} & \Tutf{1F3FC} & \Tutf{1F4EC} & \Tutf{1F5A8}  \\
+\Tutf{1F30A} & \Tutf{1F3FD} & \Tutf{1F4ED} & \Tutf{1F5A9}  \\
+\Tutf{1F30B} & \Tutf{1F3FE} & \Tutf{1F4EE} & \Tutf{1F5AA}  \\
+\Tutf{1F30C} & \Tutf{1F3FF} & \Tutf{1F4EF} & \Tutf{1F5AB}  \\
+\Tutf{1F30D} & \Tutf{1F43D} & \Tutf{1F4F0} & \Tutf{1F5AC}  \\
+\Tutf{1F30E} & \Tutf{1F43E} & \Tutf{1F4F1} & \Tutf{1F5AD}  \\
+\Tutf{1F30F} & \Tutf{1F440} & \Tutf{1F4F2} & \Tutf{1F5AE}  \\
+\Tutf{1F310} & \Tutf{1F441} & \Tutf{1F4F3} & \Tutf{1F5AF}  \\
+\Tutf{1F330} & \Tutf{1F442} & \Tutf{1F4F4} & \Tutf{1F5B0}  \\
+\Tutf{1F358} & \Tutf{1F443} & \Tutf{1F4F5} & \Tutf{1F5B1}  \\
+\Tutf{1F359} & \Tutf{1F444} & \Tutf{1F4F6} & \Tutf{1F5B2}  \\
+\Tutf{1F380} & \Tutf{1F445} & \Tutf{1F4F7} & \Tutf{1F5B3}  \\
+\Tutf{1F381} & \Tutf{1F463} & \Tutf{1F4F8} & \Tutf{1F5B5}  \\
+\Tutf{1F383} & \Tutf{1F47B} & \Tutf{1F4F9} & \Tutf{1F5B6}  \\
+\Tutf{1F384} & \Tutf{1F47C} & \Tutf{1F4FA} & \Tutf{1F5B7}  \\
+\Tutf{1F385} & \Tutf{1F484} & \Tutf{1F4FB} & \Tutf{1F5B8}  \\
+\Tutf{1F386} & \Tutf{1F485} & \Tutf{1F4FC} & \Tutf{1F5B9}  \\
+\Tutf{1F387} & \Tutf{1F488} & \Tutf{1F4FD} & \Tutf{1F5BA}  \\
+\Tutf{1F388} & \Tutf{1F489} & \Tutf{1F4FE} & \Tutf{1F5BB}  \\
+\Tutf{1F389} & \Tutf{1F48A} & \Tutf{1F4FF} & \Tutf{1F5BC}  \\
+\Tutf{1F38A} & \Tutf{1F4A0} & \Tutf{1F50B} & \Tutf{1F5BD}  \\
+\Tutf{1F38B} & \Tutf{1F4A1} & \Tutf{1F50C} & \Tutf{1F5BE}  \\
+\Tutf{1F38C} & \Tutf{1F4A2} & \Tutf{1F50D} & \Tutf{1F5BF}  \\
+\Tutf{1F38D} & \Tutf{1F4A3} & \Tutf{1F50E} & \Tutf{1F5C0}  \\
+\Tutf{1F38E} & \Tutf{1F4A4} & \Tutf{1F50F} & \Tutf{1F5C1}  \\
+\Tutf{1F38F} & \Tutf{1F4A5} & \Tutf{1F510} & \Tutf{1F5C2}  \\
+\Tutf{1F390} & \Tutf{1F4A6} & \Tutf{1F511} & \Tutf{1F5C3}  \\
+\Tutf{1F391} & \Tutf{1F4A7} & \Tutf{1F512} & \Tutf{1F5C4}  \\
+\Tutf{1F392} & \Tutf{1F4A8} & \Tutf{1F513} & \Tutf{1F5C5}  \\
+\Tutf{1F393} & \Tutf{1F4A9} & \Tutf{1F514} & \Tutf{1F5C6}  \\
+\Tutf{1F395} & \Tutf{1F4AA} & \Tutf{1F515} & \Tutf{1F5C7}  \\
+\Tutf{1F396} & \Tutf{1F4AB} & \Tutf{1F516} & \Tutf{1F5C8}  \\
+\Tutf{1F397} & \Tutf{1F4AC} & \Tutf{1F517} & \Tutf{1F5C9}  \\
+\Tutf{1F398} & \Tutf{1F4AD} & \Tutf{1F518} & \Tutf{1F5CA}  \\
+\Tutf{1F399} & \Tutf{1F4AE} & \Tutf{1F519} & \Tutf{1F5CB}  \\
+\Tutf{1F39A} & \Tutf{1F4AF} & \Tutf{1F51A} & \Tutf{1F5CC}  \\
+\Tutf{1F39B} & \Tutf{1F4B0} & \Tutf{1F51B} & \Tutf{1F5CD}  \\
+\Tutf{1F39E} & \Tutf{1F4B1} & \Tutf{1F51C} & \Tutf{1F5CE}  \\
+\Tutf{1F39F} & \Tutf{1F4B2} & \Tutf{1F51D} & \Tutf{1F5CF}  \\
+\Tutf{1F3A0} & \Tutf{1F4B3} & \Tutf{1F51E} & \Tutf{1F5D0}  \\
+\Tutf{1F3A1} & \Tutf{1F4B4} & \Tutf{1F51F} & \Tutf{1F5D1}  \\
+\Tutf{1F3A2} & \Tutf{1F4B5} & \Tutf{1F520} & \Tutf{1F5D2}  \\
+\Tutf{1F3A3} & \Tutf{1F4B6} & \Tutf{1F521} & \Tutf{1F5D3}  \\
+\Tutf{1F3A4} & \Tutf{1F4B7} & \Tutf{1F522} & \Tutf{1F5D4}  \\
+\Tutf{1F3A5} & \Tutf{1F4B8} & \Tutf{1F523} & \Tutf{1F5D6}  \\
+\Tutf{1F3A6} & \Tutf{1F4B9} & \Tutf{1F524} & \Tutf{1F5D7}  \\
+\Tutf{1F3A7} & \Tutf{1F4BA} & \Tutf{1F525} & \Tutf{1F5D8}  \\
+\Tutf{1F3A8} & \Tutf{1F4BB} & \Tutf{1F526} & \Tutf{1F5D9}  \\
+\Tutf{1F3A9} & \Tutf{1F4BC} & \Tutf{1F527} & \Tutf{1F5DA}  \\
+\Tutf{1F3AA} & \Tutf{1F4BD} & \Tutf{1F528} & \Tutf{1F5DB}  \\
+\Tutf{1F3AB} & \Tutf{1F4BE} & \Tutf{1F529} & \Tutf{1F5DC}  \\
+\Tutf{1F3AC} & \Tutf{1F4BF} & \Tutf{1F52A} & \Tutf{1F5DD}  \\
+\Tutf{1F3AD} & \Tutf{1F4C0} & \Tutf{1F52B} & \Tutf{1F5DE}  \\
+\Tutf{1F3B4} & \Tutf{1F4C1} & \Tutf{1F52C} & \Tutf{1F5DF}  \\
+\Tutf{1F3B7} & \Tutf{1F4C2} & \Tutf{1F52D} & \Tutf{1F5E0}  \\
+\Tutf{1F3B8} & \Tutf{1F4C3} & \Tutf{1F52E} & \Tutf{1F5E1}  \\
+\Tutf{1F3B9} & \Tutf{1F4C4} & \Tutf{1F530} & \Tutf{1F5E2}  \\
+\Tutf{1F3BA} & \Tutf{1F4C5} & \Tutf{1F531} & \Tutf{1F5E3}  \\
+\Tutf{1F3BB} & \Tutf{1F4C6} & \Tutf{1F532} & \Tutf{1F5E4}  \\
+\Tutf{1F3BD} & \Tutf{1F4C7} & \Tutf{1F533} & \Tutf{1F5E5}  \\
+\Tutf{1F3D4} & \Tutf{1F4C8} & \Tutf{1F53E} & \Tutf{1F5E6}  \\
+\Tutf{1F3D5} & \Tutf{1F4C9} & \Tutf{1F53F} & \Tutf{1F5E7}  \\
+\Tutf{1F3D6} & \Tutf{1F4CA} & \Tutf{1F540} & \Tutf{1F5E8}  \\
+\Tutf{1F3D7} & \Tutf{1F4CB} & \Tutf{1F541} & \Tutf{1F5E9}  \\
+\Tutf{1F3D8} & \Tutf{1F4CC} & \Tutf{1F542} & \Tutf{1F5EA}  \\
+\Tutf{1F3D9} & \Tutf{1F4CD} & \Tutf{1F54F} & \Tutf{1F5EB}  \\
+\Tutf{1F3DA} & \Tutf{1F4CE} & \Tutf{1F56B} & \Tutf{1F5EC}  \\
+\Tutf{1F3DB} & \Tutf{1F4CF} & \Tutf{1F56C} & \Tutf{1F5ED}  \\
+\Tutf{1F3DC} & \Tutf{1F4D0} & \Tutf{1F56D} & \Tutf{1F5EE}  \\
+\Tutf{1F3DD} & \Tutf{1F4D1} & \Tutf{1F56E} & \Tutf{1F5EF}  \\
+\Tutf{1F3DE} & \Tutf{1F4D2} & \Tutf{1F56F} & \Tutf{1F5F0}  \\

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list.