From 5d714d9476cbb90b125ff14a9d764ad90bb7c2ed Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Fri, 24 Sep 2021 03:01:47 +0000
Subject: CTAN sync 202109240301

---
 .../contrib/glossaries-extra/glossaries-extra.dtx  | 906 ++++++++++++++++++---
 1 file changed, 780 insertions(+), 126 deletions(-)

(limited to 'macros/latex/contrib/glossaries-extra/glossaries-extra.dtx')

diff --git a/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx b/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx
index b9f90f6ca8..da86005507 100644
--- a/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx
+++ b/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx
@@ -1,12 +1,10 @@
 %\iffalse
 % glossaries-extra.dtx generated using makedtx version 1.2 (c) Nicola Talbot
 % Command line args:
-%   -setambles ".*\.bib=>\nopreamble\nopostamble"
-%   -section "chapter"
-%   -doc "glossaries-extra-codedoc.tex"
-%   -author "Nicola Talbot"
 %   -macrocode ".*\.tex"
 %   -macrocode ".*\.bib"
+%   -setambles ".*\.bib=>\nopreamble\nopostamble"
+%   -section "chapter"
 %   -src "glossaries-extra.sty\Z=>glossaries-extra.sty"
 %   -src "glossaries-extra-bib2gls.sty\Z=>glossaries-extra-bib2gls.sty"
 %   -src "glossaries-extra-stylemods.sty\Z=>glossaries-extra-stylemods.sty"
@@ -15,11 +13,13 @@
 %   -src "glossary-topic.sty\Z=>glossary-topic.sty"
 %   -src "(example-glossaries-.+\.tex)\Z=>\1"
 %   -src "(example-glossaries-.+\.bib)\Z=>\1"
+%   -codetitle "Main Package Code (\\styfmt{glossaries-extra.sty})"
+%   -author "Nicola Talbot"
+%   -doc "glossaries-extra-codedoc.tex"
 %   -comment ".*\.tex"
 %   -comment ".*\.bib"
-%   -codetitle "Main Package Code (\\styfmt{glossaries-extra.sty})"
 %   glossaries-extra
-% Created on 2020/4/1 13:56
+% Created on 2021/9/22 14:44
 %\fi
 %\iffalse
 %<*package>
@@ -42,7 +42,7 @@
 %\fi
 % \iffalse
 % Doc-Source file to use with LaTeX2e
-% Copyright (C) 2020 Nicola Talbot, all rights reserved.
+% Copyright (C) 2021 Nicola Talbot, all rights reserved.
 % \fi
 % \iffalse
 %<*driver>
@@ -142,7 +142,7 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of
 
 \setcounter{IndexColumns}{2}
 
-\CheckSum{27181}
+\CheckSum{27294}
 
 \newcommand*{\ifirstuse}{\iterm{first use}}
 \newcommand*{\firstuse}{\gls{firstuse}}
@@ -182,13 +182,13 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of
  \raggedright
 }
 
-\title{glossaries-extra.sty v1.45:
+\title{glossaries-extra.sty v1.46:
  documented code}
 \author{Nicola L.C. Talbot\\[10pt]
 Dickimaw Books\\
 \url{http://www.dickimaw-books.com/}}
 
-\date{2020-04-01}
+\date{2021-09-20}
 
 \begin{document}
 \DocInput{glossaries-extra.dtx}
@@ -233,7 +233,7 @@ Dickimaw Books\\
 %\section{Package Initialisation and Options}
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossaries-extra}[2020/04/01 v1.45 (NLCT)]
+\ProvidesPackage{glossaries-extra}[2021/09/20 v1.46 (NLCT)]
 %    \end{macrocode}
 % Requires \sty{xkeyval} to define package options.
 %    \begin{macrocode}
@@ -355,10 +355,11 @@ Dickimaw Books\\
 %
 %\begin{macro}{\@glsxtr@do@redef@forglsentries}
 %\changes{1.11}{2017-01-19}{new}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\@glsxtr@do@redef@forglsentries}{%
   \renewcommand*{\forglsentries}[3][\glsdefaulttype]{%
-    \edef\@@glo@list{\csname glolist@##1\endcsname}%
+    \protected@edef\@@glo@list{\csname glolist@##1\endcsname}%
     \ifdefstring{\@@glo@list}{,}%
     {%
       \GlossariesExtraWarning{No entries defined in glossary `##1'}%
@@ -449,7 +450,10 @@ Dickimaw Books\\
  \begingroup
    \ifKV@glslink@noindex
    \else
-     \edef\@gls@label{\glsdetoklabel{#1}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+     \protected@edef\@gls@label{\glsdetoklabel{#1}}%
      \let\glslabel\@gls@label
      \glswriteentry{#1}%
      {%
@@ -515,8 +519,9 @@ Dickimaw Books\\
 %Save the label in case it's needed. This needs to be outside the
 %existence check to allow the post-link hook to reference it.
 %\changes{1.42}{2020-02-03}{moved label definition outside of conditional}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
- \edef\@gls@label{\glsdetoklabel{#2}}%
+ \protected@edef\@gls@label{\glsdetoklabel{#2}}%
  \let\glslabel\@gls@label
  \ifglsentryexists{#2}{}%
  {%
@@ -654,7 +659,7 @@ Dickimaw Books\\
 %\begin{macro}{\@glsxtr@dorecord}
 %\changes{1.08}{2016-12-13}{new}
 %\changes{1.15}{2017-05-10}{corrected premature expansion of \cs{@glslocref}}
-%If \pkgopt[alsoindex]{record} is used, then \cs{@glslocref} may
+%If \pkgopt[alsoindex]{record} or \pkgopt[hybrid]{record} is used, then \cs{@glslocref} may
 %have been escaped, but this isn't appropriate here.
 %\changes{1.19}{2017-09-09}{Use \cs{@glsrecordlocref} instead of \cs{@glslocref}}
 %    \begin{macrocode}
@@ -808,16 +813,17 @@ Dickimaw Books\\
 %    \begin{macrocode}
 \newcommand*{\@glsxtr@noop@recordcounter}[1]{%
   \PackageError{glossaries-extra}{\string\GlsXtrRecordCounter\space
-   requires record=only or record=alsoindex package option}{}%
+   requires record=only or record=hybrid package option}{}%
 }
 %    \end{macrocode}
 %\end{macro}
 %
 %\begin{macro}{\@glsxtr@op@recordcounter}
 %\changes{1.12}{2017-02-03}{new}
+%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}}
 %    \begin{macrocode}
 \newcommand*{\@glsxtr@op@recordcounter}[1]{%
-  \eappto\@glsxtr@counterrecordhook{\noexpand\@glsxtr@docounterrecord{#1}}%
+  \protected@eappto\@glsxtr@counterrecordhook{\noexpand\@glsxtr@docounterrecord{#1}}%
 }
 %    \end{macrocode}
 %\end{macro}
@@ -927,6 +933,12 @@ Dickimaw Books\\
 %
 %\begin{macro}{\@glsxtr@record@setting@alsoindex}
 %\changes{1.19}{2017-09-09}{new}
+%As from v1.46, the \pkgopt[alsoindex]{record} is renamed to
+%\pkgopt[hybrid]{record} with \pkgopt[alsoindex]{record} as a
+%deprecated synonym to avoid confusion. The internal commands 
+%that include \texttt{alsoindex} in the name will remain unchanged
+%to avoid breaking things, but this command will need to be
+%redefined by \pkgopt[hybrid]{record}.
 %    \begin{macrocode}
 \newcommand*{\@glsxtr@record@setting@alsoindex}{alsoindex}
 %    \end{macrocode}
@@ -970,6 +982,29 @@ Dickimaw Books\\
 %    \end{macrocode}
 %\end{macro}
 %
+%\begin{macro}{\@glsxtr@warn@hybrid@noprintgloss}
+%\changes{1.46}{2021-09-20}{new}
+%Used by hybrid method if \cs{printglossary} isn't used.
+%    \begin{macrocode}
+\newcommand\@glsxtr@warn@hybrid@noprintgloss{%
+  \ifdefstring{\@glo@types}{,}%
+  {%
+    \GlossariesExtraWarningNoLine{No glossaries have been defined}%
+  }%
+  {%
+    \GlossariesExtraWarningNoLine{No \string\printglossary\space 
+      or \string\printglossaries\space
+      found. ^^JYou have requested the hybrid setting 
+      record=\@glsxtr@record@setting\space which requires a
+      combination of bib2gls (to fetch entries) and makeindex/xindy
+      (to sort and collate the entries). If you only want to use
+      bib2gls then change the option to record=only or record=nameref}%
+  }%
+}
+%    \end{macrocode}
+%\end{macro}
+%
+%
 %\begin{macro}{\@glsxtr@record@only@setup}
 %\changes{1.37}{2018-11-30}{new}
 %Initialisation code for record=only and record=nameref
@@ -1016,10 +1051,13 @@ Dickimaw Books\\
 %\begin{option}{record}
 %Now define the \pkgopt{record} package option.
 %\changes{1.08}{2016-12-13}{added \pkgopt{record} package option}
+%\changes{1.46}{2021-09-20}{added hybrid}
+% As from v1.46, \pkgopt[alsoindex]{record} is a deprecated synonym of
+% \pkgopt[hybrid]{record} to avoid confusion.
 %    \begin{macrocode}
 \define@choicekey{glossaries-extra.sty}{record}
  [\@glsxtr@record@setting\glsxtr@record@nr]%
- {off,only,alsoindex,nameref}%
+ {off,only,alsoindex,nameref,hybrid}%
  [only]%
  {%
    \ifcase\glsxtr@record@nr\relax
@@ -1046,9 +1084,14 @@ Dickimaw Books\\
 %    \end{macrocode}
 %Record and index. This option doesn't load
 %\sty{glossaries-extra-bib2gls} as the sorting is performed by
-%\app{xindy} or \app{makeindex}.
+%\app{xindy} or \app{makeindex}. Index in this sense refers to the
+%indexing mechanism used with indexing applications such as
+%makeindex and xindy, but this could be confused with recording
+%locations so \qt{alsoindex} is now deprecated in favour of
+%\qt{hybrid}, which is more obvious.
 %    \begin{macrocode}
      \def\glsxtr@setup@record{%
+       \renewcommand*{\@glsxtr@record@setting@alsoindex}{alsoindex}%
        \renewcommand*{\@do@seeglossary}{\@glsxtr@dosee@alsoindex@glossary}%
        \let\@glsxtr@record\@@glsxtr@record
        \let\@@do@wrglossary\glsxtr@do@alsoindex@wrglossary
@@ -1069,6 +1112,24 @@ Dickimaw Books\\
      {\GlossariesExtraWarning{You have requested record=nameref but
       the document doesn't support hyperlinks}}%
      {}%
+   \or
+%   \end{macrocode}
+% Hybrid record (use bib2gls to fetch definitions) and index (use
+% makeindex/xindy to sort and collate).
+%   \begin{macrocode}
+     \def\glsxtr@setup@record{%
+       \renewcommand*{\@glsxtr@record@setting@alsoindex}{hybrid}%
+       \renewcommand*{\@do@seeglossary}{\@glsxtr@dosee@alsoindex@glossary}%
+       \let\@glsxtr@record\@@glsxtr@record
+       \let\@@do@wrglossary\glsxtr@do@alsoindex@wrglossary
+       \let\@gls@saveentrycounter\glsxtr@indexonly@saveentrycounter
+       \let\glsxtrundefaction\@glsxtr@warn@undefaction
+       \let\glsxtr@warnonexistsordo\@glsxtr@warn@onexistsordo
+       \glsxtr@addloclistfield
+       \let\@@glsxtr@recordcounter\@glsxtr@op@recordcounter
+       \def\printunsrtglossaryunit{\print@op@unsrtglossaryunit}%
+       \undef\glsxtrsetaliasnoindex
+     }%
    \fi
  }
 %    \end{macrocode}
@@ -2458,9 +2519,10 @@ Dickimaw Books\\
 %label.
 %\changes{1.43}{2020-02-28}{changed \cs{def} to \cs{edef} to avoid
 %infinite recursion}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
  {%
-   \edef\glslabel{#1}%
+   \protected@edef\glslabel{#1}%
    \glsdoifexistsordo{#1}%
    {%
      \ifglshasfield{\GlsXtrFmtField}{#1}%
@@ -3446,10 +3508,13 @@ Dickimaw Books\\
   {%
     \ifdefempty\@ignored@glossaries
     {%
-      \edef\@ignored@glossaries{#1}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+      \protected@edef\@ignored@glossaries{#1}%
     }%
     {%
-      \eappto\@ignored@glossaries{,#1}%
+      \protected@eappto\@ignored@glossaries{,#1}%
     }%
     \csgdef{glolist@#1}{,}%
     \ifcsundef{gls@#1@entryfmt}%
@@ -3462,7 +3527,10 @@ Dickimaw Books\\
        \renewcommand*{\@gls@nohyperlist}{#1}%
     }%
     {%
-       \eappto\@gls@nohyperlist{,#1}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}}
+%    \begin{macrocode}
+       \protected@eappto\@gls@nohyperlist{,#1}%
     }%
   }%
 }
@@ -3480,12 +3548,15 @@ Dickimaw Books\\
     \glsxtrundefaction{Glossary type `#1' already exists}{}%
   }%
   {%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
     \ifdefempty\@ignored@glossaries
     {%
-      \edef\@ignored@glossaries{#1}%
+      \protected@edef\@ignored@glossaries{#1}%
     }%
     {%
-      \eappto\@ignored@glossaries{,#1}%
+      \protected@eappto\@ignored@glossaries{,#1}%
     }%
     \csgdef{glolist@#1}{,}%
     \ifcsundef{gls@#1@entryfmt}%
@@ -3546,12 +3617,15 @@ Dickimaw Books\\
   \ifcsdef{glolist@#1}
   {}%
   {%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
     \ifdefempty\@ignored@glossaries
     {%
-      \edef\@ignored@glossaries{#1}%
+      \protected@edef\@ignored@glossaries{#1}%
     }%
     {%
-      \eappto\@ignored@glossaries{,#1}%
+      \protected@eappto\@ignored@glossaries{,#1}%
     }%
     \csgdef{glolist@#1}{,}%
     \ifcsundef{gls@#1@entryfmt}%
@@ -3564,7 +3638,10 @@ Dickimaw Books\\
        \renewcommand*{\@gls@nohyperlist}{#1}%
     }%
     {%
-       \eappto\@gls@nohyperlist{,#1}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}}
+%    \begin{macrocode}
+       \protected@eappto\@gls@nohyperlist{,#1}%
     }%
   }%
 }
@@ -3579,12 +3656,15 @@ Dickimaw Books\\
   \ifcsdef{glolist@#1}
   {}%
   {%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
     \ifdefempty\@ignored@glossaries
     {%
-      \edef\@ignored@glossaries{#1}%
+      \protected@edef\@ignored@glossaries{#1}%
     }%
     {%
-      \eappto\@ignored@glossaries{,#1}%
+      \protected@eappto\@ignored@glossaries{,#1}%
     }%
     \csgdef{glolist@#1}{,}%
     \ifcsundef{gls@#1@entryfmt}%
@@ -3629,8 +3709,9 @@ Dickimaw Books\\
 % Define \cs{glslabel} in case it's needed after this command (for
 % example in the post-link hook).
 %\changes{1.08}{2016-12-13}{now defines \cs{glslabel}}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-    \edef\glslabel{\glsdetoklabel{#1}}%
+    \protected@edef\glslabel{\glsdetoklabel{#1}}%
     \glsxtrundefaction{Glossary entry `\glslabel'
     has not been defined}{You need to define a glossary entry before
     you can reference it.}%
@@ -3993,9 +4074,10 @@ Dickimaw Books\\
 %Fully expands argument before passing to \cs{glsseelist}.
 %(The argument to \cs{glsseelist} must be a comma-separated list of
 %entry labels.)
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newrobustcmd{\glsxtrseelist}[1]{%
-  \edef\@glo@tmp{\noexpand\glsseelist{#1}}\@glo@tmp
+  \protected@edef\@glo@tmp{\noexpand\glsseelist{#1}}\@glo@tmp
 }
 %    \end{macrocode}
 %\end{macro}
@@ -4143,7 +4225,10 @@ Dickimaw Books\\
       \ifdefvoid\@glo@seealso
       {}%
       {%
-        \edef\@do@glssee{\noexpand\glsxtrindexseealso
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\@do@glssee{\noexpand\glsxtrindexseealso
           {\@glo@label}{\@glo@seealso}}%
         \@do@glssee
       }%
@@ -4151,10 +4236,11 @@ Dickimaw Books\\
     {%
 %    \end{macrocode}
 %Add cross-reference if see key hasn't been used.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
       \ifdefvoid\@glo@see
       {%
-        \edef\@do@glssee{\noexpand\glssee{\@glo@label}{\@glo@alias}}%
+        \protected@edef\@do@glssee{\noexpand\glssee{\@glo@label}{\@glo@alias}}%
         \@do@glssee
       }%
       {}%
@@ -4192,7 +4278,10 @@ Dickimaw Books\\
       \ifcsvoid{glo@\@glo@label @seealso}%
       {}%
       {%
-        \edef\@do@glssee{\noexpand\glsxtrindexseealso
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\@do@glssee{\noexpand\glsxtrindexseealso
           {\@glo@label}{\csuse{glo@\@glo@label @seealso}}}%
         \@do@glssee
       }%
@@ -4203,7 +4292,10 @@ Dickimaw Books\\
 %    \begin{macrocode}
       \ifdefvoid\@glo@see
       {%
-        \edef\@do@glssee{\noexpand\glssee
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\@do@glssee{\noexpand\glssee
           {\@glo@label}{\csuse{glo@\@glo@label @alias}}}%
         \@do@glssee
       }%
@@ -4373,7 +4465,10 @@ Dickimaw Books\\
 %    \begin{macrocode}
     \renewcommand{\@do@seeglossary}[2]{%
       \@@glsxtrwrglossmark
-      \edef\@gls@label{\glsdetoklabel{##1}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+      \protected@edef\@gls@label{\glsdetoklabel{##1}}%
       \protected@write\@auxout{}{%
         \string\@gls@reference
           {\csname glo@\@gls@label @type\endcsname}%
@@ -5363,12 +5458,15 @@ Dickimaw Books\\
 %    \begin{macrocode}
 \def\@gls@link[#1]#2#3{%
   \leavevmode
-  \edef\glslabel{\glsdetoklabel{#2}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+  \protected@edef\glslabel{\glsdetoklabel{#2}}%
   \def\@gls@link@opts{#1}%
   \let\@gls@link@label\glslabel
   \let\@glsnumberformat\@glsxtr@defaultnumberformat
-  \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}%
-  \edef\glstype{\csname glo@\glslabel @type\endcsname}%
+  \protected@edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}%
+  \protected@edef\glstype{\csname glo@\glslabel @type\endcsname}%
   \let\org@ifKV@glslink@hyper\ifKV@glslink@hyper
 %    \end{macrocode}
 %Save current value of \cs{glolinkprefix}:
@@ -5447,10 +5545,11 @@ Dickimaw Books\\
   \ifx\@glsxtr@local@textformat\relax
 %    \end{macrocode}
 % Check \catattr{textformat} attribute (new to v1.21).
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
      \glshasattribute{\glslabel}{textformat}%
      {%
-       \edef\@glsxtr@attrval{\glsgetattribute{\glslabel}{textformat}}%
+       \protected@edef\@glsxtr@attrval{\glsgetattribute{\glslabel}{textformat}}%
        \ifcsdef{\@glsxtr@attrval}%
        {%
          \letcs{\@glsxtr@textformat}{\@glsxtr@attrval}%
@@ -5548,7 +5647,10 @@ Dickimaw Books\\
       \glsdoifexists{#2}%
       {%
         \let\@glsnumberformat\@glsxtr@defaultnumberformat
-        \edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}%
         \def\@glsxtr@thevalue{}%
         \def\@glsxtr@theHvalue{\@glsxtr@thevalue}%
 %    \end{macrocode}
@@ -6785,8 +6887,9 @@ Dickimaw Books\\
    {\let\glsxtrifwasfirstuse\@firstoftwo}%
 %    \end{macrocode}
 % Store the category label for convenience.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-  \edef\glscategorylabel{\glscategory{\glslabel}}%
+  \protected@edef\glscategorylabel{\glscategory{\glslabel}}%
   \ifglsused{\glslabel}%
   {%
     \glsifcategoryattribute{\glscategorylabel}{nohypernext}{true}%
@@ -6870,9 +6973,11 @@ Dickimaw Books\\
 %\changes{1.12}{2017-02-03}{new}
 %\changes{1.21}{2017-11-03}{changed to use \cs{glsxtrifhasfield} instead of
 %\cs{ifglshasfield}}
+%\changes{1.46}{2021-09-18}{changed to use starred version of
+%\cs{glsxtrifhasfield}}
 %    \begin{macrocode}
 \newcommand*{\@glsxtrsetaliasnoindex}{%
- \glsxtrifhasfield{alias}{\glslabel}%
+ \s@glsxtrifhasfield{alias}{\glslabel}%
  {%
    \let\glsxtrindexaliased\@glsxtrindexaliased
    \glsxtrsetaliasnoindex
@@ -6891,7 +6996,10 @@ Dickimaw Books\\
  \else
    \begingroup
    \let\@glsnumberformat\@glsxtr@defaultnumberformat
-   \edef\@gls@counter{\csname glo@\glsdetoklabel{\glslabel}@counter\endcsname}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+   \protected@edef\@gls@counter{\csname glo@\glsdetoklabel{\glslabel}@counter\endcsname}%
    \glsxtr@saveentrycounter
    \@@do@wrglossary{\glsxtralias{\glslabel}}%
    \endgroup
@@ -7108,7 +7216,10 @@ Dickimaw Books\\
 \ifdef\glsnavhyperlink
 {
   \renewcommand*{\glsnavhyperlink}[3][\@glo@type]{%
-    \edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+    \protected@edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}%
 %    \end{macrocode}
 %Scope:
 %    \begin{macrocode}
@@ -7220,7 +7331,10 @@ Dickimaw Books\\
  \glsdoifexists{#2}%
  {%
    \def\@glo@label{#2}%
-   {\edef\glslabel{#2}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+   {\protected@edef\glslabel{#2}%
    \@glslink{\glolinkprefix\glslabel}{#1}}%
  }%
 }
@@ -8560,9 +8674,10 @@ Dickimaw Books\\
 %
 %\begin{macro}{\@@newglossaryentry@defunitcounters}
 %\changes{0.5.4}{2015-12-15}{new}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\@@newglossaryentry@defunitcounters}{%
-  \edef\@glo@countunit{\csuse{@glsxtr@categoryattr@@\@glo@category @unitcount}}%
+  \protected@edef\@glo@countunit{\csuse{@glsxtr@categoryattr@@\@glo@category @unitcount}}%
   \ifdefvoid\@glo@countunit
   {}%
   {%
@@ -8628,11 +8743,12 @@ Dickimaw Books\\
 %
 %\begin{macro}{\@gls@increment@currunitcount}
 %\changes{0.5.4}{2015-12-15}{new}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\@gls@increment@currunitcount}[1]{%
   \glshasattribute{#1}{unitcount}%
   {%
-    \edef\@glsxtr@csname{\@glsxtr@currentunitcount{#1}}%
+    \protected@edef\@glsxtr@csname{\@glsxtr@currentunitcount{#1}}%
     \ifcsundef{\@glsxtr@csname}%
     {%
       \csgdef{\@glsxtr@csname}{1}%
@@ -8654,11 +8770,12 @@ Dickimaw Books\\
 %
 %\begin{macro}{\@gls@local@increment@currunitcount}
 %\changes{0.5.4}{2015-12-15}{new}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\@gls@local@increment@currunitcount}[1]{%
   \glshasattribute{#1}{unitcount}%
   {%
-    \edef\@glsxtr@csname{\@glsxtr@currentunitcount{#1}}%
+    \protected@edef\@glsxtr@csname{\@glsxtr@currentunitcount{#1}}%
     \ifcsundef{\@glsxtr@csname}%
     {%
       \csdef{\@glsxtr@csname}{1}%
@@ -8770,7 +8887,10 @@ Dickimaw Books\\
   \renewcommand*{\glsxtrpostreset}[1]{%
     \glshasattribute{##1}{unitcount}%
     {%
-      \edef\@glsxtr@csname{\@glsxtr@currentunitcount{##1}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+      \protected@edef\@glsxtr@csname{\@glsxtr@currentunitcount{##1}}%
       \ifcsundef{\@glsxtr@csname}%
       {}%
       {\csgdef{\@glsxtr@csname}{0}}%
@@ -8782,7 +8902,10 @@ Dickimaw Books\\
     \@glsxtr@entryunitcount@org@localreset{##1}%
     \glshasattribute{##1}{unitcount}%
     {%
-      \edef\@glsxtr@csname{\@glsxtr@currentunitcount{##1}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+      \protected@edef\@glsxtr@csname{\@glsxtr@currentunitcount{##1}}%
       \ifcsundef{\@glsxtr@csname}%
       {}%
       {\csdef{\@glsxtr@csname}{0}}%
@@ -9067,17 +9190,21 @@ Dickimaw Books\\
 %
 %\begin{macro}{\@glsxtr@addabbreviationlist}
 %\changes{1.42}{2020-02-03}{new}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\@glsxtr@addabbreviationlist}[1]{%
-  \edef\@glo@type{#1}%
+  \protected@edef\@glo@type{#1}%
   \ifdefempty\@glsxtr@abbrlists
   {\let\@glsxtr@abbrlists\@glo@type}%
   {%
     \ifdefequal\@glsxtr@abbrlists\@glo@type
     {}%
     {%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}}
+%    \begin{macrocode}
       \expandafter\DTLifinlist\expandafter{\@glo@type}{\@glsxtr@abbrlists}{}%
-      {\eappto\@glsxtr@abbrlists{,\@glo@type}}%
+      {\protected@eappto\@glsxtr@abbrlists{,\@glo@type}}%
     }%
   }%
 }
@@ -9237,6 +9364,27 @@ Dickimaw Books\\
 \let\@glsxtr@org@makeglossaries\makeglossaries
 %    \end{macrocode}
 %
+%\begin{macro}{\@makeglossaries@warn@noprintglossary}
+%\changes{1.46}{2021-09-20}{new}
+%This command was only introduced to \sty{glossaries} v4.47 so it
+%may not be defined.
+%    \begin{macrocode}
+\providecommand\@makeglossaries@warn@noprintglossary{%
+  \ifdefstring{\@glo@types}{,}%
+  {%
+    \GlossariesWarningNoLine{No glossaries have been defined}%
+  }%
+  {%
+    \GlossariesWarningNoLine{No \string\printglossary\space 
+      or \string\printglossaries\space
+      found. ^^J(Remove \string\makeglossaries\space if you 
+      don't want any glossaries.) ^^JThis document will not 
+      have a glossary}%
+  }%
+}%
+%    \begin{macrocode}
+%\end{macro}
+%
 %\begin{macro}{\@domakeglossaries}
 %\changes{1.42}{2020-02-03}{provided definition for \cs{@domakeglossaries}}
 % \sty{glossaries} v4.45 introduced \cs{@domakeglossaries} to
@@ -9266,24 +9414,33 @@ Dickimaw Books\\
      not permitted\MessageBreak with record=\@glsxtr@record@setting\space 
      package option}%
     {You may only use \string\makeglossaries\space with
-     record=off or record=alsoindex options}%
+     record=off or record=hybrid options}%
    }%
    {%
      \ifblank{#1}%
-     {\@glsxtr@org@makeglossaries}%
+     {%
+        \@glsxtr@org@makeglossaries
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{adjust warning on missing glossary for \qt{alsoindex}}
+%    \begin{macrocode}
+        \ifx\@glsxtr@record@setting\@glsxtr@record@setting@alsoindex
+          \let\warn@noprintglossary\@glsxtr@warn@hybrid@noprintgloss
+        \fi
+     }%
      {%
        \ifx\@glsxtr@record@setting\@glsxtr@record@setting@alsoindex
          \PackageError{glossaries-extra}{\string\makeglossaries[#1]\space
-         not permitted\MessageBreak with record=alsoindex package option}%
+         not permitted\MessageBreak with record=\@glsxtr@record@setting\space package option}%
          {You may only use the hybrid \string\makeglossaries[...]\space with
           record=off option}%
        \else
 %    \end{macrocode}
 %\cs{@gls@@automake@immediate} was introduced to \sty{glossaries}
 %v4.42 so it may not be defined.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
          \ifdef\@gls@@automake@immediate{\@gls@@automake@immediate}{}%
-         \edef\@glsxtr@reg@glosslist{#1}%
+         \protected@edef\@glsxtr@reg@glosslist{#1}%
          \ifundef{\glswrite}{\newwrite\glswrite}{}%
          \protected@write\@auxout{}{\string\providecommand
            \string\@glsorder[1]{}}
@@ -9334,8 +9491,11 @@ Dickimaw Books\\
           \renewcommand*{\@do@seeglossary}[2]{%
             \glsdoifexists{##1}%
             {%
-              \edef\@gls@label{\glsdetoklabel{##1}}%
-              \edef\@gls@type{\csname glo@\@gls@label @type\endcsname}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+              \protected@edef\@gls@label{\glsdetoklabel{##1}}%
+              \protected@edef\@gls@type{\csname glo@\@gls@label @type\endcsname}%
               \expandafter\DTLifinlist\expandafter{\@gls@type}{\@glsxtr@reg@glosslist}%
               {\@glsxtr@org@doseeglossary{##1}{##2}}%
               {%
@@ -9352,7 +9512,10 @@ Dickimaw Books\\
 %    \begin{macrocode}
           \let\@glsxtr@@do@@wrglossary\@@do@@wrglossary
           \def\@@do@@wrglossary{%
-            \edef\@gls@type{\csname glo@\@gls@label @type\endcsname}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+            \protected@edef\@gls@type{\csname glo@\@gls@label @type\endcsname}%
             \expandafter\DTLifinlist\expandafter{\@gls@type}{\@glsxtr@reg@glosslist}%
             {\@glsxtr@@do@@wrglossary}%
             {\gls@noidxglossary}%
@@ -9361,17 +9524,15 @@ Dickimaw Books\\
 % Suppress warning about no \cs{makeglossaries}
 %    \begin{macrocode}
           \let\warn@nomakeglossaries\relax
-          \def\warn@noprintglossary{%
-            \GlossariesWarningNoLine{No \string\printglossary\space
-              or \string\printglossaries\space
-              found.^^J(Remove \string\makeglossaries\space if you don't want
-              any glossaries.)^^JThis document will not have a glossary}%
-          }%
+          \let\warn@noprintglossary\@makeglossaries@warn@noprintglossary
 %    \end{macrocode}
 % Only warn for glossaries not listed.
 %    \begin{macrocode}
           \renewcommand{\@gls@noref@warn}[1]{%
-            \edef\@gls@type{##1}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+            \protected@edef\@gls@type{##1}%
             \expandafter\DTLifinlist\expandafter{\@gls@type}{\@glsxtr@reg@glosslist}%
             {%
               \GlossariesExtraWarning{Can't use
@@ -9548,6 +9709,7 @@ Dickimaw Books\\
 %    \end{macrocode}
 %\changes{1.22}{2017-11-08}{changed explicit \cs{let} for \cs{nopostdesc}
 %to \cs{glsxtractivatenopost}}
+%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}}
 %    \begin{macrocode}
     \glsxtractivatenopost
     \gls@dotoctitle
@@ -9555,11 +9717,11 @@ Dickimaw Books\\
     \let\gls@org@glossaryentryfield\glossentry
     \let\gls@org@glossarysubentryfield\subglossentry
     \renewcommand{\glossentry}[1]{%
-      \xdef\glscurrententrylabel{\glsdetoklabel{##1}}%
+      \protected@xdef\glscurrententrylabel{\glsdetoklabel{##1}}%
       \gls@org@glossaryentryfield{##1}%
     }%
     \renewcommand{\subglossentry}[2]{%
-      \xdef\glscurrententrylabel{\glsdetoklabel{##2}}%
+      \protected@xdef\glscurrententrylabel{\glsdetoklabel{##2}}%
       \gls@org@glossarysubentryfield{##1}{##2}%
     }%
     \@gls@preglossaryhook
@@ -9812,7 +9974,10 @@ Dickimaw Books\\
 %\changes{1.09}{2016-12-16}{new}
 %    \begin{macrocode}
 \newcommand\@glsxtr@mixed@assign@sortkey[1]{%
-  \edef\@glo@type{\@glo@type}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+  \protected@edef\@glo@type{\@glo@type}%
   \expandafter\DTLifinlist\expandafter{\@glo@type}{\@glsxtr@reg@glosslist}%
   {%
     \@glo@no@assign@sortkey{#1}%
@@ -10133,9 +10298,10 @@ Dickimaw Books\\
 %\begin{macro}{\glsxtrdisplaystartloc}
 %\changes{1.12}{2017-02-03}{new}
 %Start of a location range.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\glsxtrdisplaystartloc}[2]{%
-  \edef\glsxtrlocrangefmt{#1}%
+  \protected@edef\glsxtrlocrangefmt{#1}%
   \ifx\glsxtrlocrangefmt\empty
     \def\glsxtrlocrangefmt{glsnumberformat}%
   \fi
@@ -10149,9 +10315,10 @@ Dickimaw Books\\
 %\changes{1.12}{2017-02-03}{new}
 %\changes{1.14}{2017-04-18}{added check for empty format}
 %End of a location range.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\glsxtrdisplayendloc}[2]{%
-  \edef\@glsxtr@tmp{#1}%
+  \protected@edef\@glsxtr@tmp{#1}%
   \ifdefempty{\@glsxtr@tmp}{\def\@glsxtr@tmp{glsnumberformat}}{}%
   \ifx\glsxtrlocrangefmt\@glsxtr@tmp
   \else
@@ -10936,8 +11103,11 @@ Dickimaw Books\\
     \glsdoifexists{#1}%
     {%
       \begingroup
-        \edef\glscurrententrylabel{\glsdetoklabel{#1}}%
-        \edef\currentglossary{\GlsXtrStandaloneGlossaryType}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\glscurrententrylabel{\glsdetoklabel{#1}}%
+        \protected@edef\currentglossary{\GlsXtrStandaloneGlossaryType}%
         \ifglshasparent{#1}%
         {\GlsXtrStandaloneSubEntryItem{#1}}%
         {\glsentryitem{#1}}%
@@ -11026,8 +11196,11 @@ Dickimaw Books\\
     \glsdoifexists{#1}%
     {%
       \begingroup
-        \edef\glscurrententrylabel{\glsdetoklabel{#1}}%
-        \edef\currentglossary{\GlsXtrStandaloneGlossaryType}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\glscurrententrylabel{\glsdetoklabel{#1}}%
+        \protected@edef\currentglossary{\GlsXtrStandaloneGlossaryType}%
         \ifglshasparent{#1}%
         {\GlsXtrStandaloneSubEntryItem{#1}}%
         {\glsentryitem{#1}}%
@@ -11168,7 +11341,10 @@ Dickimaw Books\\
                 {\@glsxtr@groupheading}%
             }%
           \fi
-          \eappto\@glsxtr@doglossary{%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}}
+%    \begin{macrocode}
+          \protected@eappto\@glsxtr@doglossary{%
             \noexpand\@printunsrt@glossary@handler{\glscurrententrylabel}}%
         }%
       }%
@@ -11253,12 +11429,15 @@ Dickimaw Books\\
   \@glossarystyle
   \let\gls@org@glossaryentryfield\glossentry
   \let\gls@org@glossarysubentryfield\subglossentry
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}}
+%    \begin{macrocode}
   \renewcommand{\glossentry}[1]{%
-    \xdef\glscurrententrylabel{\glsdetoklabel{##1}}%
+    \protected@xdef\glscurrententrylabel{\glsdetoklabel{##1}}%
     \gls@org@glossaryentryfield{##1}%
   }%
   \renewcommand{\subglossentry}[2]{%
-    \xdef\glscurrententrylabel{\glsdetoklabel{##2}}%
+    \protected@xdef\glscurrententrylabel{\glsdetoklabel{##2}}%
     \gls@org@glossarysubentryfield{##1}{##2}%
   }%
   \@gls@preglossaryhook
@@ -11330,7 +11509,10 @@ Dickimaw Books\\
                 {\@glsxtr@groupheading}%
             }%
           \fi
-          \eappto\@glsxtr@doglossary{%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}}
+%    \begin{macrocode}
+          \protected@eappto\@glsxtr@doglossary{%
             \noexpand\@printunsrt@glossary@handler{\glscurrententrylabel}}%
         }%
       }%
@@ -11381,9 +11563,10 @@ can only be used within \string\printunsrtglossaryentryprocesshook}{}%
 %
 %\begin{macro}{\@printunsrt@glossary@handler}
 %\changes{1.16}{2017-06-15}{new}
+%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}}
 %    \begin{macrocode}
 \newcommand{\@printunsrt@glossary@handler}[1]{%
-  \xdef\glscurrententrylabel{#1}%
+  \protected@xdef\glscurrententrylabel{#1}%
   \printunsrtglossaryhandler\glscurrententrylabel
 }
 %    \end{macrocode}
@@ -11531,7 +11714,7 @@ can only be used within \string\printunsrtglossaryentryprocesshook}{}%
   {%
     \ifdefempty{\@gls@currentlettergroup}{}%
     {\def\@glsxtr@groupheading{\glsgroupskip}}%
-    \eappto\@glsxtr@groupheading{%
+    \protected@eappto\@glsxtr@groupheading{%
       \noexpand\glsgroupheading{\expandonce\@glo@thislettergrp}%
     }%
   }%
@@ -11904,15 +12087,16 @@ defined}{}%
 %\begin{macro}{\@glsxtr@rglstrigger@record}
 %\changes{1.21}{2017-11-03}{new}
 %Still need a record to ensure that \app{bib2gls} selects the entry.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newcommand*{\@glsxtr@rglstrigger@record}[3]{%
-  \edef\glslabel{\glsdetoklabel{#2}}%
+  \protected@edef\glslabel{\glsdetoklabel{#2}}%
   \let\@gls@link@label\glslabel
   \def\@glsxtr@thevalue{}%
   \def\@glsxtr@theHvalue{\@glsxtr@thevalue}%
   \def\@glsnumberformat{glstriggerrecordformat}%
-  \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}%
-  \edef\glstype{\csname glo@\glslabel @type\endcsname}%
+  \protected@edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}%
+  \protected@edef\glstype{\csname glo@\glslabel @type\endcsname}%
   \def\@glsxtr@thevalue{}%
   \def\@glsxtr@theHvalue{\@glsxtr@thevalue}%
   \glsxtrinitwrgloss
@@ -12233,11 +12417,12 @@ defined}{}%
      {%
 %    \end{macrocode}
 %Need to ensure values are fully expanded.
+%\changes{1.46}{2021-09-20}{changed \cs{x} to \cs{@glo@tmp}}
 %    \begin{macrocode}
        \begingroup
-        \edef\x{\endgroup\noexpand\@addtoreset{glsxtr@linkcount@\glslabel}%
+        \edef\@glo@tmp{\endgroup\noexpand\@addtoreset{glsxtr@linkcount@\glslabel}%
          {\glsgetattribute{\glslabel}{linkcountmaster}}}%
-       \x
+       \@glo@tmp
      }%
      {}%
    }%
@@ -13091,11 +13276,14 @@ defined}{}%
       {}%
       \ifdefempty\@gls@longaccess
       {%
-        \edef\@gls@shortaccess{\glsdefaultshortaccess
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\@gls@shortaccess{\glsdefaultshortaccess
           {\expandonce\@gls@actuallong}{\expandonce\@gls@actualshort}}%
       }%
       {%
-        \edef\@gls@shortaccess{\glsdefaultshortaccess
+        \protected@edef\@gls@shortaccess{\glsdefaultshortaccess
           {\expandonce\@gls@longaccess}{\expandonce\@gls@actualshort}}%
       }%
       \eappto\ExtraCustomAbbreviationFields{shortaccess={\@gls@shortaccess},}%
@@ -13120,11 +13308,14 @@ defined}{}%
         }%
       \ifdefempty\@gls@longaccesspl
       {%
-        \edef\@gls@shortaccesspl{\glsdefaultshortaccess
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\@gls@shortaccesspl{\glsdefaultshortaccess
           {\expandonce\@gls@actuallongpl}{\expandonce\@gls@actualshortpl}}%
       }%
       {%
-        \edef\@gls@shortaccesspl{\glsdefaultshortaccess
+        \protected@edef\@gls@shortaccesspl{\glsdefaultshortaccess
           {\expandonce\@gls@longaccesspl}{\expandonce\@gls@actualshort}}%
       }%
       \eappto\ExtraCustomAbbreviationFields{shortpluralaccess={\@gls@shortaccesspl},}%
@@ -14095,10 +14286,11 @@ defined}{}%
 % As from version 1.04, allow the \catattr{glossdescfont} attribute
 % to determine the font applied.
 %\changes{1.04}{2016-05-02}{added glossdescfont attribute check}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
       \glshasattribute{#1}{glossdescfont}%
       {%
-        \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossdescfont}}%
+        \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossdescfont}}%
         \ifcsdef{\@glsxtr@attrval}%
         {%
           \letcs{\@glsxtr@glossdescfont}{\@glsxtr@attrval}%
@@ -14139,7 +14331,10 @@ defined}{}%
       \glssetabbrvfmt{\glscategory{#1}}%
       \glshasattribute{#1}{glossdescfont}%
       {%
-        \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossdescfont}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossdescfont}}%
         \ifcsdef{\@glsxtr@attrval}%
         {%
           \letcs{\@glsxtr@glossdescfont}{\@glsxtr@attrval}%
@@ -14187,10 +14382,11 @@ defined}{}%
 % As from version 1.04, allow the \catattr{glossnamefont} attribute
 % to determine the font applied.
 %\changes{1.04}{2016-05-02}{added glossnamefont attribute check}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
       \glshasattribute{#1}{glossnamefont}%
       {%
-        \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}%
+        \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}%
         \ifcsdef{\@glsxtr@attrval}%
         {%
           \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}%
@@ -14258,7 +14454,10 @@ defined}{}%
       \glssetabbrvfmt{\glscategory{#1}}%
       \glshasattribute{#1}{glossnamefont}%
       {%
-        \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}%
         \ifcsdef{\@glsxtr@attrval}%
         {%
           \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}%
@@ -14329,7 +14528,10 @@ defined}{}%
 %    \begin{macrocode}
       \glshasattribute{#1}{glossnamefont}%
       {%
-        \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}%
         \ifcsdef{\@glsxtr@attrval}%
         {%
           \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}%
@@ -14361,7 +14563,10 @@ defined}{}%
       \glssetabbrvfmt{\glscategory{#1}}%
       \glshasattribute{#1}{glossnamefont}%
       {%
-        \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+        \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}%
         \ifcsdef{\@glsxtr@attrval}%
         {%
           \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}%
@@ -14441,13 +14646,14 @@ defined}{}%
 %This is essentially the reverse of \cs{@gls@fetchfield}, since the
 %field supplied to \cs{glossentryname} has to be the internal label,
 %but the \cs{gls\meta{field}accessdisplay} commands use the key name.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
-       \edef\@gls@thisval{#1}%
+       \protected@edef\@gls@thisval{#1}%
        \@for\@gls@map:=\@gls@keymap\do{%
-        \edef\@this@key{\expandafter\@secondoftwo\@gls@map}%
+        \protected@edef\@this@key{\expandafter\@secondoftwo\@gls@map}%
         \ifdefequal{\@this@key}{\@gls@thisval}%
         {%
-          \edef\@gls@thisval{\expandafter\@firstoftwo\@gls@map}%
+          \protected@edef\@gls@thisval{\expandafter\@firstoftwo\@gls@map}%
           \@endfortrue
         }%
         {}%
@@ -14480,11 +14686,12 @@ defined}{}%
     \glsxtr@setaccessdisplay{#2}%
 %    \end{macrocode}
 %Set the abbreviation format:
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
     \glssetabbrvfmt{\glscategory{#1}}%
     \glshasattribute{#1}{glossnamefont}%
     {%
-      \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}%
+      \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}%
       \ifcsdef{\@glsxtr@attrval}%
       {%
         \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}%
@@ -14604,9 +14811,12 @@ defined}{}%
         \let\@glsxtr@attrval\@glsnumberformat
       \fi
     \fi
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}}
+%    \begin{macrocode}
     \ifdefstring{\@glsxtr@attrval}{true}%
     {}%
-    {\eappto\@glo@name{\@glsxtr@autoindex@encap\@glsxtr@attrval}}%
+    {\protected@eappto\@glo@name{\@glsxtr@autoindex@encap\@glsxtr@attrval}}%
     \expandafter\glsxtrautoindex\expandafter{\@glo@name}%
   }%
   {}%
@@ -14918,6 +15128,7 @@ defined}{}%
 %\changes{1.4.2}{??}{new}
 %There are no case-changing attributes as it's less usual for
 %symbols.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \newrobustcmd*{\@glossentrysymbol}[1]{%
   \glsdoifexistsorwarn{#1}%
@@ -14926,7 +15137,7 @@ defined}{}%
       \glssetabbrvfmt{\glscategory{#1}}%
       \glshasattribute{#1}{glosssymbolfont}%
       {%
-        \edef\@glsxtr@attrval{\glsgetattribute{#1}{glosssymbolfont}}%
+        \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glosssymbolfont}}%
         \ifcsdef{\@glsxtr@attrval}%
         {%
           \letcs{\@glsxtr@glosssymbolfont}{\@glsxtr@attrval}%
@@ -15509,9 +15720,10 @@ defined}{}%
 %
 % If there's a style for the given category, it needs to be applied
 % by \cs{newabbreviation}.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
 \define@key{glsxtrabbrv}{category}{%
- \edef\glscategorylabel{#1}%
+ \protected@edef\glscategorylabel{#1}%
 }
 %    \end{macrocode}
 % Save the short plural form. This may be needed before the entry is
@@ -17028,9 +17240,10 @@ defined}{}%
        \@glsxtr@dostylewarn
 %    \end{macrocode}
 % Set up the style for the given category.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
        \csdef{@glsabbrv@current@#1}{#2}%
-       \edef\glscategorylabel{#1}%
+       \protected@edef\glscategorylabel{#1}%
        \glsxtr@applyabbrvstyle{#2}%
      }%
   }%
@@ -25645,7 +25858,7 @@ defined}{}%
 %automatically loaded by the record option.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossaries-extra-bib2gls}[2020/04/01 v1.45 (NLCT)]
+\ProvidesPackage{glossaries-extra-bib2gls}[2021/09/20 v1.46 (NLCT)]
 %    \end{macrocode}
 %Provide convenient shortcut commands for predefined glossary types.
 %\begin{macro}{\printunsrtacronyms}
@@ -26045,17 +26258,20 @@ defined}{}%
 \def\@glsxtr@bibgls@removespaces#1 #2\@nil{%
  \toks@=\expandafter{\the\toks@#1}%
  \ifx\\#2\\%
-   \edef\x{\the\toks@}%
-   \ifx\x\empty
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{x} to \cs{@glo@tmp}}
+%    \begin{macrocode}
+   \edef\@glo@tmp{\the\toks@}%
+   \ifx\@glo@tmp\empty
    \else
-     \protected@edef\x{\glsentrycounter\@glo@counterprefix\the\toks@}%
+     \protected@edef\@glo@tmp{\glsentrycounter\@glo@counterprefix\the\toks@}%
      \ifdefvoid\glsxtrsupplocationurl
      {%
-       \expandafter\glsxtrfmtinternalnameref\expandafter{\x}%
+       \expandafter\glsxtrfmtinternalnameref\expandafter{\@glo@tmp}%
        {\@glsnumberformat}{\glsxtr@locationhypertext}%
      }%
      {%
-       \expandafter\glsxtrfmtexternalnameref\expandafter{\x}%
+       \expandafter\glsxtrfmtexternalnameref\expandafter{\@glo@tmp}%
        {\@glsnumberformat}{\glsxtr@locationhypertext}{\glsxtrsupplocationurl}%
      }%
    \fi
@@ -26363,14 +26579,18 @@ defined}{}%
 %    \end{macrocode}
 %Initialise to the unprefixed label in the event that the list is
 %empty.
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
 %    \begin{macrocode}
- \edef\@gls@thislabel{#1}%
+ \protected@edef\@gls@thislabel{#1}%
  \@for\@glsxtr@prefix:=\@glsxtr@labelprefixes\do
  {%
-   \edef\@gls@thislabel{\@glsxtr@prefix#1}%
+   \protected@edef\@gls@thislabel{\@glsxtr@prefix#1}%
    \ifglsentryexists{\@gls@thislabel}{\@endfortrue}{}%
  }%
- \edef\x{\endgroup\noexpand\def\noexpand\@gls@thislabel{\@gls@thislabel}}\x
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{x} to \cs{@glo@tmp}}
+%    \begin{macrocode}
+ \edef\@glo@tmp{\endgroup\noexpand\def\noexpand\@gls@thislabel{\@gls@thislabel}}\@glo@tmp
 }
 %    \end{macrocode}
 %\end{macro}
@@ -28730,7 +28950,7 @@ defined}{}%
 % First identify package:
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossaries-extra-stylemods}[2020/04/01 v1.45 (NLCT)]
+\ProvidesPackage{glossaries-extra-stylemods}[2021/09/20 v1.46 (NLCT)]
 %    \end{macrocode}
 % Provide package options to automatically load required predefined
 % styles. The simplest method is to just test for the existence of
@@ -29622,6 +29842,22 @@ defined}{}%
 \ifdef{\@glsstyle@tree}
 {%
 %    \end{macrocode}
+% The original \glostyle{alttree} style doesn't use \cs{glstreepredesc}
+% but since v1.42 the modified style (below) has switched to using
+% \cs{glstreeDescLoc} so provide an alternative that can be used
+% with \glostyle{alttree}.
+%\begin{macro}{\glsxtrtreepredesc}
+%\changes{1.46}{2021-09-20}{new}
+%    \begin{macrocode}
+\newcommand{\glsxtrtreepredesc}{\glstreepredesc}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsxtrtreechildpredesc}
+%\changes{1.46}{2021-09-20}{new}
+%    \begin{macrocode}
+\newcommand{\glsxtrtreechildpredesc}{\glstreechildpredesc}
+%    \end{macrocode}
+%\end{macro}
 %Provide a command for use with the \glostyle{tree} styles that displays
 %the pre-description separator, the
 %description and post-description hook.
@@ -29629,7 +29865,7 @@ defined}{}%
 %\changes{1.31}{2018-05-09}{new}
 %    \begin{macrocode}
   \newcommand{\glstreedesc}[1]{%
-    \glstreepredesc\glossentrydesc{#1}\glspostdescription
+    \glsxtrtreepredesc\glossentrydesc{#1}\glspostdescription
   }
 %    \end{macrocode}
 %\end{macro}
@@ -29674,7 +29910,7 @@ defined}{}%
 %\changes{1.31}{2018-05-09}{new}
 %    \begin{macrocode}
   \newcommand{\glstreechilddesc}[1]{%
-    \glstreechildpredesc\glossentrydesc{#1}\glspostdescription
+    \glsxtrtreechildpredesc\glossentrydesc{#1}\glspostdescription
   }%
 %    \end{macrocode}
 %\end{macro}
@@ -29909,6 +30145,18 @@ defined}{}%
 %    \end{macrocode}
 % Only redefine this style if it's already been defined.
 %
+%\begin{macro}{\glsalttreepredesc}
+%\changes{1.46}{2021-09-20}{new}
+%    \begin{macrocode}
+\newcommand{\glsalttreepredesc}{}
+%    \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsalttreechildpredesc}
+%\changes{1.46}{2021-09-20}{new}
+%    \begin{macrocode}
+\newcommand{\glsalttreechildpredesc}{\glsalttreepredesc}
+%    \end{macrocode}
+%\end{macro}
 %\begin{macro}{\glsxtralttreeSymbolDescLocation}
 %\changes{1.05}{2016-06-10}{new}
 %\begin{definition}
@@ -29920,6 +30168,12 @@ defined}{}%
   \newcommand{\glsxtralttreeSymbolDescLocation}[2]{%
     {%
       \let\par\glsxtrAltTreePar
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{switch to using \cs{glsalttreepredesc} and
+%\cs{glsalttreechildpredesc}}
+%    \begin{macrocode}
+      \let\glsxtrtreepredesc\glsalttreepredesc
+      \let\glsxtrtreechildpredesc\glsalttreechildpredesc
       \ifglshassymbol{#1}{(\glossentrysymbol{#1})\space}{}%
 %    \end{macrocode}
 %\changes{1.41}{2019-04-09}{added check for description}
@@ -30225,10 +30479,13 @@ defined}{}%
         {%
           \ifglshasparent{\@glo@label}%
           {%
-            \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@label}@parent}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+            \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@label}@parent}}%
             \ifglshasparent{\@glo@parent}%
             {%
-              \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@parent}@parent}}%
+              \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@parent}@parent}}%
               \ifglshasparent{\@glo@parent}%
               {}%
               {%
@@ -30280,10 +30537,13 @@ defined}{}%
       {%
         \ifglshasparent{\@glo@label}%
         {%
-          \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@label}@parent}}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}}
+%    \begin{macrocode}
+          \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@label}@parent}}%
           \ifglshasparent{\@glo@parent}%
           {%
-            \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@parent}@parent}}%
+            \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@parent}@parent}}%
             \ifglshasparent{\@glo@parent}%
             {}%
             {%
@@ -31053,7 +31313,7 @@ defined}{}%
 %\section{Package Initialisation and Options}
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossary-bookindex}[2020/04/01 v1.45 (NLCT)]
+\ProvidesPackage{glossary-bookindex}[2021/09/20 v1.46 (NLCT)]
 %    \end{macrocode}
 %Load required packages.
 %    \begin{macrocode}
@@ -31549,7 +31809,7 @@ defined}{}%
 %Provides additional long styles.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossary-longextra}[2020/04/01 v1.45 (NLCT)]
+\ProvidesPackage{glossary-longextra}[2021/09/20 v1.46 (NLCT)]
 %    \end{macrocode}
 %Load required packages.
 %    \begin{macrocode}
@@ -32978,7 +33238,7 @@ defined}{}%
 %topic.
 %    \begin{macrocode}
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossary-topic}[2020/04/01 v1.45 (NLCT)]
+\ProvidesPackage{glossary-topic}[2021/09/20 v1.46 (NLCT)]
 %    \end{macrocode}
 %Load required package.
 %    \begin{macrocode}
@@ -33021,8 +33281,18 @@ defined}{}%
   \renewcommand{\subglossentry}[3]{%
     \ifnum\glstopic@prevlevel=0\relax\glstopic@prechildren\fi
     \def\glstopic@prevlevel{##1}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{grouping added to scope \cs{everypar} (bug 182)}
+%Grouping is added to scope the effect of \cs{everypar}.
+%    \begin{macrocode}
+    \begingroup
     \glstopicAssignSubIndent{##1}%
     \glstopicSubItem{##1}{##2}{##3}%
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{added \cs{par} (bug 176)}
+%    \begin{macrocode}
+    \par
+    \endgroup
   }%
   \renewcommand*{\glsgroupskip}{}%
 }
@@ -33133,11 +33403,32 @@ defined}{}%
   \par
   \parindent\dimexpr#1\glstopicSubIndent-\glstopicSubIndent\relax
   \glstopicAssignWidest{#1}%
-  \hangindent\dimexpr\parindent+\glstopicwidest\relax
+  \glstopicsubitemhangindent=\dimexpr\parindent+\glstopicwidest\relax
+  \hangindent\glstopicsubitemhangindent\relax
+%    \end{macrocode}
+%\changes{1.46}{2021-09-20}{bug 182 maintain hangindent for multiple paragraphs}
+%    \begin{macrocode}
+  \everypar{\hangindent\glstopicsubitemhangindent\relax
+    \parindent\dimexpr\glstopicSubItemParIndent+\glstopicsubitemhangindent\relax}%
 }
 %    \end{macrocode}
 %\end{macro}
 %
+%\begin{macro}{\glstopicsubitemhangindent}
+%\changes{1.46}{2021-09-20}{new}
+%    \begin{macrocode}
+\newlength\glstopicsubitemhangindent
+%    \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glstopicSubItemParIndent}
+%\changes{1.46}{2021-09-20}{new}
+%    \begin{macrocode}
+\newlength\glstopicSubItemParIndent
+\glstopicSubItemParIndent\parindent
+%    \end{macrocode}
+%\end{macro}
+%
 %\begin{macro}{\glstopicwidest}
 %\changes{1.40}{2019-03-22}{new}
 %    \begin{macrocode}
@@ -34127,6 +34418,182 @@ risus ut urna}
 %\fi
 %\iffalse
 %    \begin{macrocode}
+%<*example-glossaries-childmultipar.bib>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+% Encoding: UTF-8
+@entry{hiersedmattis,
+  user1 = {example-image},
+  name = {sed mattis},
+  description = {Erat sit amet dolor sit amet, consectetuer adipiscing elit. Ut purus
+elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
+dictum gravida mauris. Ut pellentesque augue sed urna. Vestibulum
+diam eros, fringilla et, consectetuer eu, nonummy id, sapien. Nullam
+at lectus. In sagittis ultrices mauris. Curabitur malesuada erat sit
+amet massa. Fusce blandit. Aliquam erat volutpat.}
+}
+
+@entry{hierloremi-ii,
+  parent = {hiersedmattis},
+  name = {lorem 1--2},
+  description = {Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
+vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
+dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer
+id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque
+habitant morbi tristique senectus et netus et malesuada fames ac
+turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla
+et lectus vestibulum urna fringilla ultrices.  Phasellus eu tellus
+sit amet tortor gravida placerat. Integer sapien est, iaculis in,
+pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices
+bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar
+at, mollis ac, nulla.  Curabitur auctor semper nulla. Donec varius
+orci eget risus. Duis nibh mi, congue eu, accumsan eleifend,
+sagittis quis, diam. Duis eget orci sit amet orci dignissim rutrum.
+
+Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel,
+wisi. Morbi auctor lorem non justo. Nam lacus libero, pretium at,
+lobortis vitae, ultricies et, tellus. Donec aliquet, tortor sed
+accumsan bibendum, erat ligula aliquet magna, vitae ornare odio
+metus a mi. Morbi ac orci et nisl hendrerit mollis. Suspendisse ut
+massa. Cras nec ante. Pellentesque a nulla.  Cum sociis natoque
+penatibus et magnis dis parturient montes, nascetur ridiculus mus.
+Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis.
+Pellentesque cursus luctus mauris.}
+}
+
+@entry{hierloremiii-iv,
+  user1 = {example-image},
+  parent = {hiersedmattis},
+  name = {lorem 3--4},
+  description = {Nulla malesuada porttitor diam. Donec felis erat, congue non,
+volutpat at, tincidunt tristique, libero.  Vivamus viverra fermentum
+felis. Donec nonummy pellentesque ante.  Phasellus adipiscing semper
+elit. Proin fermentum massa ac quam. Sed diam turpis, molestie
+vitae, placerat a, molestie nec, leo. Maecenas lacinia. Nam ipsum
+ligula, eleifend at, accumsan nec, suscipit a, ipsum. Morbi blandit
+ligula feugiat magna. Nunc eleifend consequat lorem. Sed lacinia
+nulla vitae enim. Pellentesque tincidunt purus vel magna. Integer
+non enim. Praesent euismod nunc eu purus. Donec bibendum quam in
+tellus. Nullam cursus pulvinar lectus. Donec et mi.  Nam vulputate
+metus eu enim. Vestibulum pellentesque felis eu massa. 
+
+Quisque ullamcorper placerat ipsum. Cras nibh.  Morbi vel justo
+vitae lacus tincidunt ultrices. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. In hac habitasse platea dictumst.
+Integer tempus convallis augue. Etiam facilisis. Nunc elementum
+fermentum wisi. Aenean placerat. Ut imperdiet, enim sed gravida
+sollicitudin, felis odio placerat quam, ac pulvinar elit purus eget
+enim. Nunc vitae tortor. Proin tempus nibh sit amet nisl.  Vivamus
+quis tortor vitae risus porta vehicula.}
+}
+
+@entry{hierloremv-vi,
+  parent = {hiersedmattis},
+  name = {lorem 5--6},
+  description = {Fusce mauris. Vestibulum luctus nibh at lectus.  Sed bibendum, nulla
+a faucibus semper, leo velit ultricies tellus, ac venenatis arcu
+wisi vel nisl. Vestibulum diam. Aliquam pellentesque, augue quis
+sagittis posuere, turpis lacus congue quam, in hendrerit risus eros
+eget felis. Maecenas eget erat in sapien mattis porttitor.
+Vestibulum porttitor. Nulla facilisi. Sed a turpis eu lacus commodo
+facilisis. Morbi fringilla, wisi in dignissim interdum, justo lectus
+sagittis dui, et vehicula libero dui cursus dui. Mauris tempor
+ligula sed lacus. Duis cursus enim ut augue.  Cras ac magna. Cras
+nulla. Nulla egestas. Curabitur a leo. Quisque egestas wisi eget
+nunc. Nam feugiat lacus vel est. Curabitur consectetuer.%
+
+
+Suspendisse vel felis. Ut lorem lorem, interdum eu, tincidunt sit
+amet, laoreet vitae, arcu. Aenean faucibus pede eu ante. Praesent
+enim elit, rutrum at, molestie non, nonummy vel, nisl. Ut lectus
+eros, malesuada sit amet, fermentum eu, sodales cursus, magna. Donec
+eu purus. Quisque vehicula, urna sed ultricies auctor, pede lorem
+egestas dui, et convallis elit erat sed nulla.  Donec luctus.
+Curabitur et nunc. Aliquam dolor odio, commodo pretium, ultricies
+non, pharetra in, velit. Integer arcu est, nonummy in, fermentum
+faucibus, egestas vel, odio.}
+}
+
+@entry{hiergravida,
+  name = {gravida},
+  description = {Malesuada libero, nonummy eget, consectetuer id, vulputate a, magna. Donec
+vehicula augue eu neque. Pellentesque habitant morbi tristique
+senectus et netus et malesuada fames ac turpis egestas. Mauris ut
+leo.
+
+Morbi ultrices rutrum lorem. Nam elementum ullamcorper
+leo. Morbi dui. Aliquam sagittis. Nunc placerat.  Pellentesque
+tristique sodales est. Maecenas imperdiet lacinia velit. Cras non
+urna. Morbi eros pede, suscipit ac, varius vel, egestas non, eros.}
+}
+
+@entry{hierloremvii-viii,
+  user1 = {example-image-b},
+  parent = {hiergravida},
+  name = {lorem 7--8},
+  description = {Sed commodo posuere pede. Mauris ut est. Ut quis purus. Sed ac odio.
+Sed vehicula hendrerit sem. Duis non odio.  Morbi ut dui. Sed
+accumsan risus eget odio. In hac habitasse platea dictumst.
+Pellentesque non elit. Fusce sed justo eu urna porta tincidunt.
+Mauris felis odio, sollicitudin sed, volutpat a, ornare ac, erat.
+Morbi quis dolor. Donec pellentesque, erat ac sagittis semper, nunc
+dui lobortis purus, quis congue purus metus ultricies tellus. Proin
+et quam. Class aptent taciti sociosqu ad litora torquent per conubia
+nostra, per inceptos hymenaeos. Praesent sapien turpis, fermentum
+vel, eleifend faucibus, vehicula eu, lacus.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada
+fames ac turpis egestas. Donec odio elit, dictum in, hendrerit sit
+amet, egestas sed, leo. Praesent feugiat sapien aliquet odio.
+Integer vitae justo. Aliquam vestibulum fringilla lorem. Sed neque
+lectus, consectetuer at, consectetuer sed, eleifend ac, lectus.
+Nulla facilisi. Pellentesque eget lectus.  Proin eu metus. Sed
+porttitor. In hac habitasse platea dictumst.  Suspendisse eu lectus.
+Ut mi mi, lacinia sit amet, placerat et, mollis vitae, dui. Sed ante
+tellus, tristique ut, iaculis eu, malesuada ac, dui.  Mauris nibh
+leo, facilisis non, adipiscing quis, ultrices a, dui.}
+}
+
+@entry{hierloremix-x,
+  user1 = {example-image-c},
+  parent = {hiergravida},
+  name = {lorem 9--10},
+  description = {Morbi luctus, wisi viverra faucibus pretium, nibh est placerat odio,
+nec commodo wisi enim eget quam. Quisque libero justo, consectetuer
+a, feugiat vitae, porttitor eu, libero.  Suspendisse sed mauris
+vitae elit sollicitudin malesuada. Maecenas ultricies eros sit amet
+ante. Ut venenatis velit. Maecenas sed mi eget dui varius euismod.
+Phasellus aliquet volutpat odio.  Vestibulum ante ipsum primis in
+faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque
+sit amet pede ac sem eleifend consectetuer. Nullam elementum, urna
+vel imperdiet sodales, elit ipsum pharetra ligula, ac pretium ante
+justo a nulla. Curabitur tristique arcu eu metus. Vestibulum lectus.
+Proin mauris. Proin eu nunc eu urna hendrerit faucibus. Aliquam
+auctor, pede consequat laoreet varius, eros tellus scelerisque quam,
+pellentesque hendrerit ipsum dolor sed augue. Nulla nec lacus.
+
+Suspendisse vitae elit. Aliquam arcu neque, ornare in, ullamcorper
+quis, commodo eu, libero. Fusce sagittis erat at erat tristique
+mollis. Maecenas sapien libero, molestie et, lobortis in, sodales
+eget, dui. Morbi ultrices rutrum lorem. Nam elementum ullamcorper
+leo. Morbi dui. Aliquam sagittis. Nunc placerat.  Pellentesque
+tristique sodales est. Maecenas imperdiet lacinia velit. Cras non
+urna. Morbi eros pede, suscipit ac, varius vel, egestas non, eros.
+Praesent malesuada, diam id pretium elementum, eros sem dictum
+tortor, vel consectetuer odio sem sed wisi.}
+}
+
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%</example-glossaries-childmultipar.bib>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
 %<*example-glossaries-childnoname.bib>
 %    \end{macrocode}
 %\fi
@@ -34888,6 +35355,193 @@ bibendum quam in tellus.}
 %\fi
 %\iffalse
 %    \begin{macrocode}
+%<*example-glossaries-longchild.bib>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+% Encoding: UTF-8
+@entry{longsedmattis,
+  name = {sed mattis},
+  description = {erat sit amet dolor sit amet, consectetuer adipiscing elit. Ut purus
+elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
+dictum gravida mauris.}
+}
+
+@entry{longgravida,
+  parent = {longsedmattis},
+  name = {gravida},
+  description = {malesuada libero, nonummy eget, consectetuer id, vulputate a, magna. Donec
+vehicula augue eu neque. Pellentesque habitant morbi tristique
+senectus et netus et malesuada fames ac turpis egestas. Mauris ut
+leo.}
+}
+
+@entry{longelitaugue,
+  parent = {longsedmattis},
+  name = {elit augue},
+  description = {egestas diam metus rhoncus sem. Nulla et lectus vestibulum
+urna fringilla ultrices.  Phasellus eu tellus sit amet tortor gravida
+placerat.}
+}
+
+@entry{longtempus,
+  parent = {longsedmattis},
+  name = {tempus},
+  description = {scelerisque est, iaculis in, pretium quis, viverra ac,
+nunc. Praesent eget sem vel leo ultrices bibendum. Aenean
+faucibus.}
+}
+
+@entry{longnunc,
+  name = {nunc},
+  description = {nisl vitae nulla, malesuada eu, pulvinar at, mollis ac, nulla.
+Curabitur auctor semper nulla. Donec varius orci eget risus. Duis
+nibh mi, congue eu, accumsan eleifend, sagittis quis, diam. Duis
+eget orci sit amet orci dignissim rutrum.}
+}
+
+@entry{longlibero,
+  parent = {longnunc},
+  name = {libero},
+  description = {sed consequat ligula, fringilla a, euismod sodales,
+sollicitudin vel, wisi. Morbi auctor lorem non justo.}
+}
+
+@entry{longfeugiat,
+  parent = {longnunc},
+  name = {feugiat},
+  description = {massa libero, pretium at, lobortis vitae, ultricies et,
+tellus. Donec aliquet, tortor sed accumsan bibendum, erat ligula aliquet magna,
+vitae ornare odio metus a mi.}
+}
+
+@entry{longporta,
+  parent = {longnunc},
+  name = {porta},
+  description = {eros in eleifend orci et nisl hendrerit mollis. Suspendisse ut massa.
+Cras nec ante. Pellentesque a nulla.  Cum sociis natoque penatibus
+et magnis dis parturient montes, nascetur ridiculus mus.}
+}
+
+@entry{longvariuserat,
+  parent = {longnunc},
+  name = {varius erat},
+  description = {leo rutrum dui tincidunt urna. Nulla ullamcorper
+vestibulum turpis. Pellentesque cursus luctus mauris.}
+}
+
+@entry{longnonconvallis,
+  name = {non convallis},
+  description = {lectus orci ut nibh porttitor diam. Donec felis erat,
+congue non, volutpat at, tincidunt tristique, libero.  Vivamus
+viverra fermentum felis.}
+}
+
+@entry{longsedlorem,
+  parent = {longnonconvallis},
+  name = {sedlorem},
+  description = {massa pellentesque ante. Phasellus
+adipiscing semper elit. Proin fermentum massa ac quam. Sed diam
+turpis, molestie vitae, placerat a, molestie nec, leo.}
+}
+
+@entry{longnonummyquis,
+  parent = {longnonconvallis},
+  name = {nonummy
+quis},
+  description = {egestas id nam ipsum ligula, eleifend at, accumsan nec, suscipit
+a, ipsum. Morbi blandit ligula feugiat magna. Nunc eleifend consequat
+lorem.}
+}
+
+@entry{longcondimentum,
+  name = {condimentum},
+  description = {at nisl nulla vitae enim. Pellentesque tincidunt purus
+vel magna. Integer non enim. Praesent euismod nunc eu purus. Donec
+bibendum quam in tellus.}
+}
+
+@entry{longmaecenas,
+  parent = {longcondimentum},
+  name = {maecenas},
+  description = {at nibh fringilla a, euismod sodales, sollicitudin vel,
+wisi. Morbi auctor lorem non justo. Nam lacus libero, pretium at,
+lobortis vitae, ultricies et, tellus. Donec aliquet, tortor sed
+accumsan bibendum, erat ligula aliquet magna, vitae ornare odio
+metus a mi. Morbi ac orci et nisl hendrerit mollis. Suspendisse ut
+massa. Cras nec ante. Pellentesque a nulla.  Cum sociis natoque
+penatibus et magnis dis parturient montes, nascetur ridiculus mus.
+Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis.
+Pellentesque cursus luctus mauris.}
+}
+
+@entry{longaliquamet,
+  name = {aliquam et},
+  description = {augue felis erat, congue non,
+volutpat at, tincidunt tristique, libero.  Vivamus viverra fermentum
+felis. Donec nonummy pellentesque ante.}
+}
+
+@entry{longatnunc,
+  parent = {longaliquamet},
+  name = {at nunc},
+  description = {pellentesque ullamcorper el justo
+vitae lacus tincidunt ultrices. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit.}
+}
+
+@entry{longduisnisl,
+  parent = {longatnunc},
+  name = {duisnisl},
+  description = {laoreet suscipit ac venenatis arcu
+wisi vel nisl. Vestibulum diam. Aliquam pellentesque, augue quis
+sagittis posuere, turpis lacus congue quam, in hendrerit risus eros
+eget felis. Maecenas eget erat in sapien mattis porttitor.}
+}
+
+@entry{longduisnibh,
+  parent = {longatnunc},
+  name = {duisnibh},
+  description = {convallis ut justo lectus
+sagittis dui, et vehicula libero dui cursus dui. Mauris tempor
+ligula sed lacus. Duis cursus enim ut augue.  Cras ac magna.}
+}
+
+@entry{longrutrum,
+  name = {rutrum},
+  description = {id, enim elit, rutrum at, molestie non, nonummy vel, nisl. Ut lectus
+eros, malesuada sit amet, fermentum eu, sodales cursus, magna. Donec
+eu purus. Quisque vehicula, urna sed ultricies auctor, pede lorem
+egestas dui, et convallis elit erat sed nulla.}
+}
+
+@entry{longphasellus,
+  parent = {longrutrum},
+  name = {phasellus},
+  description = {odio volutpat a, ornare ac, erat.
+Morbi quis dolor. Donec pellentesque, erat ac sagittis semper, nunc
+dui lobortis purus, quis congue purus metus ultricies tellus. Proin
+et quam.}
+}
+
+@entry{longnullanulla,
+  parent = {longrutrum},
+  name = {nulla nulla},
+  description = {elit, molestie non wisi viverra faucibus pretium, nibh est placerat odio,
+nec commodo wisi enim eget quam. Quisque libero justo, consectetuer
+a, feugiat vitae, porttitor eu, libero.}
+}
+
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
+%</example-glossaries-longchild.bib>
+%    \end{macrocode}
+%\fi
+%\iffalse
+%    \begin{macrocode}
 %<*example-glossaries-multipar.bib>
 %    \end{macrocode}
 %\fi
-- 
cgit v1.2.3

