¿Por qué aparece un error "Falta = insertado para \ifnum" para secuencias l3seq vacías?

¿Por qué aparece un error "Falta = insertado para \ifnum" para secuencias l3seq vacías?

Estoy intentando utilizar expl3secuencias para almacenar 0, 1 o más afiliaciones a 1 o más autores almacenados en una datatoolbase de datos. El siguiente MWE funciona bien:

\documentclass{article}
\usepackage{xparse}
\usepackage{datatool}

\ExplSyntaxOn

\DTLnewdb{_mymodule_authors}

\seq_new:N \g_mymodule_author_affiliations_seq

\keys_define:nn { mymodule/authors }
{
  affiliation .code:n = \seq_gput_right:Nn \g_mymodule_author_affiliations_seq {#1}
}

\cs_new_protected:Nn \_mymodule_authors:nn
{
  \DTLnewrow{_mymodule_authors}
  \DTLnewdbentry{_mymodule_authors}{name}{#1}
  \DTLnewdbentry{_mymodule_authors}{affiliations}{#2}
}

\cs_generate_variant:Nn \_mymodule_authors:nn { nV }

\RenewDocumentCommand \author { o m } {
  \IfValueTF {#1}
  {
    \keys_set:nn { mymodule/authors } { #1 }
    \_mymodule_authors:nV {#2}{\g_mymodule_author_affiliations_seq}
  }
  {
    \_mymodule_authors:nV {#2}{\c_empty_tl}
  }
  \seq_gclear:N \g_mymodule_author_affiliations_seq
}

\NewDocumentCommand \showauthors {  } {
  \DTLforeach*{_mymodule_authors}{
    \l_tmpa_tl=name,
    \l_tmpa_seq=affiliations
  }{
    \mymodule_display_author:nn {\l_tmpa_tl}{\l_tmpa_seq}
    \DTLiflastrow{
    }{
      \DTLpar
    }
  }
}

\cs_new_protected:Nn \mymodule_display_author:nn
{
  #1
  \seq_if_empty:NF {\l_tmpa_seq}
  {
    \space(\seq_use:Nn \l_tmpa_seq { ,~ })
  }
}

\ExplSyntaxOff

\begin{document}
%\author{Foo, Bar 0}
\author[affiliation=Blah]{Foo, Bar 1}
\author[affiliation=Bleh,affiliation=Blih]{Foo, Bar 2}
\author[affiliation=Bloh,affiliation=Bluh,affiliation=Blyh]{Foo, Bar 3}
%
\showauthors
\end{document}

Pero, tan pronto como comento \author{Foo, Bar 0}, el autor con 0 afiliación, me enfrento al siguiente error que no entiendo:

! Missing = inserted for \ifnum.
<to be read again> 
                   {

Respuesta1

Una secuencia no se puede utilizar como argumento para un Vespecificador porque no tiene un valor único.

Entonces, en lugar de almacenar una secuencia en la base de datos, puede almacenar unapunteroa una secuencia. Como indicador, utilizo la versión "encadenada" del nombre del autor.

\documentclass{article}
\usepackage{xparse}
\usepackage{datatool}

\ExplSyntaxOn

\DTLnewdb{_mymodule_authors}

\seq_new:N \l_mymodule_author_affiliations_seq

\keys_define:nn { mymodule/authors }
 {
  affiliation .code:n = \seq_put_right:Nn \l_mymodule_author_affiliations_seq {#1}
 }

\cs_new_protected:Nn \_mymodule_authors:n
 {
  \DTLnewrow{_mymodule_authors}
  \DTLnewdbentry{_mymodule_authors}{name}{#1}
  \DTLnewdbentry{_mymodule_authors}{affiliations}{\tl_to_str:n{#1}}
 }

\RenewDocumentCommand \author { O{} m }
 {
  \seq_clear:N \l_mymodule_author_affiliations_seq
  \keys_set:nn { mymodule/authors } { #1 }
  \_mymodule_authors:n {#2}
  \seq_new:c { g_mymodule_affiliation_ \tl_to_str:n{#2} _seq }
  \seq_gset_eq:cN { g_mymodule_affiliation_ \tl_to_str:n{#2} _seq } \l_mymodule_author_affiliations_seq
 }

\NewDocumentCommand \showauthors {  }
 {
  \DTLforeach*{_mymodule_authors}
   {
    \l_tmpa_tl=name,
    \l_tmpb_tl=affiliations
   }
   {
    \mymodule_display_author:VV \l_tmpa_tl \l_tmpb_tl
    \DTLiflastrow { }{ \DTLpar }
   }
 }

\cs_new_protected:Nn \mymodule_display_author:nn
 {
  #1
  \seq_if_empty:cF { g_mymodule_affiliation_#2_seq }
  {
   \c_space_tl(\seq_use:cn { g_mymodule_affiliation_#2_seq } { ,~ })
  }
 }

\cs_generate_variant:Nn \mymodule_display_author:nn { VV }

\ExplSyntaxOff

\begin{document}
\author{Foo, Bar 0}
\author[affiliation=Blah]{Foo, Bar 1}
\author[affiliation=Bleh,affiliation=Blih]{Foo, Bar 2}
\author[affiliation=Bloh,affiliation=Bluh,affiliation=Blyh]{Foo, Bar 3}

\showauthors
\end{document}

ingrese la descripción de la imagen aquí

información relacionada