Comando de glosarios compuestos con subíndices y superíndices adecuados y argumentos personalizados

Comando de glosarios compuestos con subíndices y superíndices adecuados y argumentos personalizados

Me gustaría crear una macro que ayude a combinar símbolos gls. Cada símbolo compuesto debe constar de un cuerpo y (opcionalmente) un superíndice y un subíndice (que en sí mismos son símbolos gls y se enumeran en una lista diferente de símbolos para subíndices/superíndices). Además, me gustaría agregar argumentos personalizados para algunos de los símbolos compuestos. Un ejemplo de lo que me gustaría lograr: ingrese la descripción de la imagen aquí

El siguiente es mi problema:

  1. Para asegurarme de que los subíndices/superíndices que se agregan después del compuesto se agreguen a los subíndices/superíndices "compuestos", necesito usar la funcionalidad de adornos xparsecomo los dos últimos parámetros de mi macro definida ( E{^_}{{}{}})
  2. Como no sé de antemano cuántos argumentos personalizados se agregan, args=no sé qué número de parámetro tendrán los adornos (es decir, tengo que contar el número de argumentos y agregar los números de parámetro dinámicamente).

Se me ocurrió el siguiente código (que no funciona). Creo que el problema principal aquí es la expansión correcta, de modo que las variables que contienen los números de parámetros para los adornos ( \l_compound_supparameter_tly \l_compound_subparameter_tl) se expandan antes de que finalmente se defina la macro. Además, solo podía pasar especificaciones de argumentos separados por comas a args.

\documentclass[margin=5mm]{standalone}

\usepackage[symbols]{glossaries}
\newglossaryentry{body}{
    type=symbols,
    name={body},
    symbol={B},
    description={A body.}
}
\newglossaryentry{phase}{
    type=symbols,
    name={phase},
    symbol={\alpha},
    description={A material phase.}
}
\newglossaryentry{index}{
    type=symbols,
    name={index},
    symbol={i},
    description={A body index.}
}

\ExplSyntaxOn

% Define the keys
\keys_define:nn { my/glscompound }{
    body        .tl_set:N = \l_compound_body_tl,
    args        .tl_set:N = \l_compound_args_tl,
    superscript .tl_set:N = \l_compound_superscript_tl,
    superscript .initial:n = {},
    subscript   .tl_set:N = \l_compound_subscript_tl,
    subscript   .initial:n = {},
}

\tl_new:N \l_compound_supparameter_tl  % stores the macro parameter for superscript (e.g. #3)
\tl_new:N \l_compound_subparameter_tl  % stores the macro parameter for subscript (e.g. #4)

\cs_generate_variant:Nn \exp_args:Nnnx { NnVx }

\NewDocumentCommand{\NewGlsCompound}{ m m }{
    \tl_clear:N \l_compound_body_tl
    \tl_clear:N \l_compound_args_tl
    \tl_clear:N \l_compound_superscript_tl
    \tl_clear:N \l_compound_subscript_tl
    \tl_set:Nn \l_compound_supparameter_tl { # }
    \tl_set:Nn \l_compound_subparameter_tl { # }

    \keys_set:nn { my/glscompound } { #2 }

    % convert tl to sequence of arguments
    \seq_set_split:NnV \l_tmpa_seq { , } \l_compound_args_tl

    % get the count of the seq to determine the number of custom arguments
    \int_set:Nn \l_tmpa_int { \seq_count:N \l_tmpa_seq }

    % parameter number of superscript
    \int_incr:N \l_tmpa_int 
    \tl_put_right:NV \l_compound_supparameter_tl \l_tmpa_int

    % parameter number of subscript
    \int_incr:N \l_tmpa_int 
    \tl_put_right:NV \l_compound_subparameter_tl \l_tmpa_int

    % convert the arument seq to a single tl
    \tl_set:No \l_compound_args_tl { \seq_use:Nn \l_tmpa_seq { , } }

    % append the sub/superscript arguments
    \tl_put_right:Nn \l_compound_args_tl { ~E{^_}{{}{}} }

    % Define the new command
    \exp_args:NnVx \NewDocumentCommand {#1} \l_compound_args_tl {
        \l_compound_body_tl

        % superscript

        % evaluated during runtime, if an additional superscript as parameter
        % '\l_compound_supparameter_tl' is given
        \IfValueT{ \l_compound_supparameter_tl }{ 
            % append the custom superscript to the body of the compound superscript
            \tl_put_right:Nn \l_compound_superscript_tl { \l_compound_supparameter_tl } 
        }
        % if the body of the superscript is not empty, call the superscript macro
        \tl_if_blank:VF \l_compound_superscript_tl { \sp{ \l_compound_superscript_tl } } 
        
        % subscript (same as superscript)
        \IfValueT{ \l_compound_supparameter_tl }{ 
            \tl_put_right:Nn \l_compound_subscript_tl { \l_compound_supparameter_tl }
        }
        \tl_if_blank:VF \l_compound_subscript_tl { \sb{ \l_compound_subscript_tl } }
    }
}
\ExplSyntaxOff

\NewGlsCompound{\Body}{
    body = { \glssymbol{body} },
    args = { O{arg1}, O{arg2} }, % this is comma separated list of arguments
    superscript = { \glssymbol{phase},#1 },
    subscript   = { \glssymbol{index},#2 },
}

\begin{document}
\begin{minipage}{.7\textwidth}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{l l}
    \verb+\Body+                &\(\rightarrow \Body\)\\
    \verb+\Body^{,a}_{,y}+      &\(\rightarrow \Body^{,a}_{,y}\)\\
    \verb+\Body[foo]+           &\(\rightarrow \Body[foo]\)\\
    \verb+\Body[foo]^{,x}+      &\(\rightarrow \Body[foo]^{,x}\)\\
    \verb+\Body[foo][bar]^{,x}+ &\(\rightarrow \Body[foo][bar]^{,x}\)
\end{tabular}
\end{minipage}
\end{document}

Si pudieras ayudarme con ese lío de expansión, ¡te lo agradecería mucho!

Respuesta1

  • En primer lugar, necesita una rutina para contar la cantidad de argumentos especificados por una firma de argumento xparse.

    En el siguiente ejemplo, esta es la rutina \MYSTUFF_xparse_arg_signature_count:n.

    Lo escribí plagiando el código de la rutina \__cmd_split_signature:ndescrita en elcomentó LaTeX 2ε Fuentes, Archivo g: ltcmd.dtx Fecha: 2023-08-19 Versión v1.2a, sección "1.7.2 Mostrando la definición de un comando".

    La rutina \MYSTUFF_xparse_arg_signature_count:ntoma un argumento que debe formar una firma de argumento de análisis x para una instancia de \NewDocumentCommand.
    La rutina después de dos pasos de expansión devuelve una secuencia de tokens de dígitos que denotan la cantidad de argumentos especificados por la firma-argumento-x-parse en notación decimal.

  • Otro problema es conseguir el guión bajo ( _) de la categoría 8 (subíndice) en la especificación de adorno del Eargumento -type del comando definido por \NewGlsCompoundcuando se define \NewGlsCompoundwhile \ExplSyntaxOn, de modo que undescore tiene el código de categoría 11 (letra).

Así es como podría hacerlo:

%\errorcontextlines=10000
\ExplSyntaxOn
%-------------------------------------------------------------------------------
\cs_new:Nn \MYSTUFF_xparse_arg_signature_count:n 
  {
    \exp:w \exp_after:wN \exp_after:wN \exp_after:wN \exp_end:
    \int_eval:n
      {
        0 \__MYSTUFF_xparse_arg_signature_count_loop:Nw #1 
        \q_recursion_tail \q_recursion_stop
      }
  }
\cs_new:Npn \__MYSTUFF_xparse_arg_signature_count_loop:Nw #1
  {
    \quark_if_recursion_tail_stop:N #1
    \tl_if_exist:cTF
      { c_MYSTUFF_xparse_map_arg_type_to_argclass_\tl_to_str:n{#1}_tl }
      {
        \tl_use:c
          { c_MYSTUFF_xparse_map_arg_type_to_argclass_\tl_to_str:n{#1}_tl }
      }
      { +1 \__MYSTUFF_xparse_arg_signature_count_loop:Nw }
  }
\cs_set:Npn \__cmd_tmp:w #1 #2
  {
    \quark_if_nil:nF
      {#1}
      { 
        \tl_const:cn { c_MYSTUFF_xparse_map_arg_type_to_argclass_#1_tl } {#2} 
        \__cmd_tmp:w 
      }
  }
\__cmd_tmp:w
  t{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_delim:w}
  r{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_delims:w}
  d{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_delims:w}
  R{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_delims_opt:w}
  D{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_delims_opt:w}
  O{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_opt:w}
  e{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_e:w}
  E{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_E:w}
  +{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_prefix:w}
  !{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_prefix:w}
  >{\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_processor:w}
  ={\__MYSTUFF_xparse_arg_remove_arg_specification_of_class_processor:w}
  \q_nil \q_nil
  %------------
\cs_new:Npn \__MYSTUFF_xparse_arg_remove_arg_specification_of_class_delim:w
            #1
            { +1 \__MYSTUFF_xparse_arg_signature_count_loop:Nw }
\cs_new:Npn \__MYSTUFF_xparse_arg_remove_arg_specification_of_class_delims:w
            #1 #2
            { +1 \__MYSTUFF_xparse_arg_signature_count_loop:Nw }
\cs_new:Npn \__MYSTUFF_xparse_arg_remove_arg_specification_of_class_delims_opt:w
            #1 #2 #3
            { +1 \__MYSTUFF_xparse_arg_signature_count_loop:Nw }
\cs_new:Npn \__MYSTUFF_xparse_arg_remove_arg_specification_of_class_opt:w
            #1
            { +1 \__MYSTUFF_xparse_arg_signature_count_loop:Nw }
\cs_new:Npn \__MYSTUFF_xparse_arg_remove_arg_specification_of_class_e:w
            #1
            { +\tl_count:n{#1} \__MYSTUFF_xparse_arg_signature_count_loop:Nw }
\cs_new:Npn \__MYSTUFF_xparse_arg_remove_arg_specification_of_class_E:w
            #1 #2
            { +\tl_count:n{#1} \__MYSTUFF_xparse_arg_signature_count_loop:Nw }
\cs_new:Npn \__MYSTUFF_xparse_arg_remove_arg_specification_of_class_prefix:w
            { \__MYSTUFF_xparse_arg_signature_count_loop:Nw }
\cs_new:Npn \__MYSTUFF_xparse_arg_remove_arg_specification_of_class_processor:w
            #1
            { \__MYSTUFF_xparse_arg_signature_count_loop:Nw }
%-------------------------------------------------------------------------------
\cs_if_exist:NF \IfBlankF { \cs_new_eq:NN \IfBlankF \tl_if_blank:nF }
\cs_if_exist:NF \IfBlankT { \cs_new_eq:NN \IfBlankT \tl_if_blank:nT }
\cs_if_exist:NF \IfBlankTF { \cs_new_eq:NN \IfBlankTF \tl_if_blank:nTF }
%-------------------------------------------------------------------------------
\tl_new:N \l_MYSTUFF_GLSCOMPOUND_body_tl
\tl_new:N \l_MYSTUFF_GLSCOMPOUND_args_tl
\tl_new:N \l_MYSTUFF_GLSCOMPOUND_superscript_tl
\tl_new:N \l_MYSTUFF_GLSCOMPOUND_subscript_tl
\tl_new:N \l_MYSTUFF_GLSCOMPOUND_supparameter_tl
\tl_new:N \l_MYSTUFF_GLSCOMPOUND_subparameter_tl
%-------------------------------------------------------------------------------
\keys_define:nn { MYSTUFF/GLSCOMPOUND }{
  body.tl_set:N = \l_MYSTUFF_GLSCOMPOUND_body_tl,
  args.tl_set:N = \l_MYSTUFF_GLSCOMPOUND_args_tl,
  superscript.tl_set:N = \l_MYSTUFF_GLSCOMPOUND_superscript_tl,
  subscript.tl_set:N = \l_MYSTUFF_GLSCOMPOUND_subscript_tl,
}
% ------------------------------------------------------------------------------
% Use expl3-infrastructure for providing error-message in case the key
% "body" is not specified in the 2nd argument of \NewGlsCompound.
% ..............................................................................
\prop_gput:Nnn \g_msg_module_type_prop { MYSTUFF_GLSCOMPOUND } {}
\prop_gput:Nnn
  \g_msg_module_name_prop
  { MYSTUFF_GLSCOMPOUND } 
  {Macro-Defined-In-Preamble:}
\msg_new:nnnn {MYSTUFF_GLSCOMPOUND} 
              {No Value specified}
              {Macro~#1:~No~value~for~key~"#3"~specified.}
              {In~the~#2~argument~a~value~for~key~"#3"~must~be~specified~%
               when~calling~macro~#1.}
\cs_new:Npn \NoValueSpecifiedError #1#2#3 {
  \exp_args:Nne \use:nn {
    \msg_error:nnnnn {MYSTUFF_GLSCOMPOUND} {No Value specified}
   }{{\iow_char:N \\ \cs_to_str:N#1}}{#2}{#3}
}%
%-------------------------------------------------------------------------------
% In order to get _ of category 8(subscript) and ^ of category 7(superscript)
% into the embellishment specification of the E-type argument of the command
% defined via \NewGlsCompound, define a scratch variant of \NewGlsCompound
% which as arguments grabs these tokens and redefines itself.
\group_begin:
\cs_set:Npn \NewGlsCompound #1#2
  {
    \group_end:
    \NewDocumentCommand \NewGlsCompound {mm} {
      \group_begin:
      \exp_args:Nnx \keys_set:nn { MYSTUFF/GLSCOMPOUND } { 
        body={\exp_not:o{\c_novalue_tl}},
        args={},
        superscript={},
        subscript={}
      }
      \keys_set:nn { MYSTUFF/GLSCOMPOUND } { ##2 }
      \exp_args:NV \tl_if_novalue:nTF
        \l_MYSTUFF_GLSCOMPOUND_body_tl
        { \group_end: \NoValueSpecifiedError{\NewGlsCompound}{second}{body} }
        {
          \tl_set:Nf \l_MYSTUFF_GLSCOMPOUND_supparameter_tl 
            {
              \int_eval:n
                {
                  \exp_args:No \MYSTUFF_xparse_arg_signature_count:n
                               {\l_MYSTUFF_GLSCOMPOUND_args_tl} + 1 
                } 
            }
          \tl_set:Nf \l_MYSTUFF_GLSCOMPOUND_subparameter_tl
            {
              \int_eval:n
                {
                  \tl_use:N \l_MYSTUFF_GLSCOMPOUND_supparameter_tl + 1
                }
            }
          \tl_put_left:Nn \l_MYSTUFF_GLSCOMPOUND_supparameter_tl {####}
          \tl_put_left:Nn \l_MYSTUFF_GLSCOMPOUND_subparameter_tl {####}
          \tl_put_right:Nn \l_MYSTUFF_GLSCOMPOUND_args_tl { E{#1#2}{{}{}} }
          \__MYSTUFF_GLSCOMPOUND_set_scriptdirective_to_tokenlist:NNN
              \l_MYSTUFF_GLSCOMPOUND_superscript_tl
              \l_MYSTUFF_GLSCOMPOUND_supparameter_tl
              #1
          \__MYSTUFF_GLSCOMPOUND_set_scriptdirective_to_tokenlist:NNN
              \l_MYSTUFF_GLSCOMPOUND_subscript_tl
              \l_MYSTUFF_GLSCOMPOUND_subparameter_tl
              #2
          \exp_args:Nnx 
            \use:nn 
            { \group_end: \NewDocumentCommand {##1} }
            {
              { \exp_not:o{\l_MYSTUFF_GLSCOMPOUND_args_tl} }
              {
                \exp_not:o{ \l_MYSTUFF_GLSCOMPOUND_body_tl}
                \exp_not:o{\l_MYSTUFF_GLSCOMPOUND_superscript_tl}
                \exp_not:o{\l_MYSTUFF_GLSCOMPOUND_subscript_tl} 
              }
            }
        }
    }
  }
\char_set_catcode_math_superscript:N \^
\char_set_catcode_math_subscript:N \_
\NewGlsCompound{^}{_}
% Scratch-\NewGlsCompound im the line above does 
% \group_end:
%--------------------
\cs_new:Nn \__MYSTUFF_GLSCOMPOUND_set_scriptdirective_to_tokenlist:NNN
  {
    % #1 = \l_MYSTUFF_GLSCOMPOUND_superscript_tl / 
    %      \l_MYSTUFF_GLSCOMPOUND_subscript_tl
    % #2 = \l_MYSTUFF_GLSCOMPOUND_supparameter_tl /
    %      \l_MYSTUFF_GLSCOMPOUND_subparameter_tl
    % #3 = _ (subscript) or  ^ (subscript)
    \__MYSTUFF_GLSCOMPOUND_set_scriptdirective_to_tokenlist:NVVN#1#1#2#3
  }
\cs_new:Nn \__MYSTUFF_GLSCOMPOUND_set_scriptdirective_to_tokenlist:NnnN
  {
    % #1 = \l_MYSTUFF_GLSCOMPOUND_superscript_tl /
    %      \l_MYSTUFF_GLSCOMPOUND_subscript_tl
    % #2 = content of \l_MYSTUFF_GLSCOMPOUND_superscript_tl /
    %      content of \l_MYSTUFF_GLSCOMPOUND_subscript_tl
    % #3 = content of \l_MYSTUFF_GLSCOMPOUND_supparameter_tl /
    %      content of \l_MYSTUFF_GLSCOMPOUND_subparameter_tl
    % #4 = _ (subscript) or  ^ (subscript)
    \tl_if_blank:nTF{#2}
      {
        \tl_set:Nn
          #1 
          { 
            \tl_if_blank:oF 
              {
                \exp:w
                \tl_if_blank:nTF{#3}{\use:n}{\use_ii_i:nn{#3}}{\exp_end:} 
              }
              {
                #4
                {
                  \exp:w
                  \tl_if_blank:nTF{#3}{\use:n}{\use_ii_i:nn{#3}}{\exp_end:}
                }
              }
          }
      }
      {
        \tl_set:Nn
          #1
          { 
            \tl_if_blank:oF
              {
                \exp:w 
                \tl_if_blank:nTF{#3}{\use:n}{\use_ii_i:nn{,#3}}{\exp_end:#2}
              }
              {
                #4
                {
                  \exp:w
                  \tl_if_blank:nTF{#3}{\use:n}{\use_ii_i:nn{,#3}}{\exp_end: #2}
                }
              }
          }
      }
  }
\cs_generate_variant:Nn
  \__MYSTUFF_GLSCOMPOUND_set_scriptdirective_to_tokenlist:NnnN
  { NVVN }
\ExplSyntaxOff


\documentclass[margin=5mm]{standalone}

\usepackage{array}

\usepackage[symbols]{glossaries}
\newglossaryentry{body}{
    type=symbols,
    name={body},
    symbol={B},
    description={A body.}
}
\newglossaryentry{phase}{
    type=symbols,
    name={phase},
    symbol={\alpha},
    description={A material phase.}
}
\newglossaryentry{index}{
    type=symbols,
    name={index},
    symbol={i},
    description={A body index.}
}

\NewGlsCompound{\Body}{
  body = {\glssymbol{body}},
  args = {O{arg1} O{arg2}}, 
  superscript = {\glssymbol{phase}\IfBlankF{#1}{,#1}},
  subscript   = {\glssymbol{index}\IfBlankF{#2}{,#2}}
}

%\NewGlsCompound{\Stuff}{
%%  body = {stuff},
%  args = { }, 
%  superscript = {up},
%  subscript   = {down}
%}

\begin{document}

\begin{minipage}{\textwidth}
%  \(\Stuff^{2up}_{2down}\) \par\bigskip
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{l>{\(\rightarrow\)}c>{\(}l<{\)}}
\verb|\Body|&&\Body\\
\verb|\Body[foo]|&&\Body[foo]\\
\verb|\Body[foo][bar]|&&\Body[foo][bar]\\
\verb|\Body^{X}|&&\Body^{X}\\
\verb|\Body[foo]^{X}|&&\Body[foo]^{X}\\
\verb|\Body[foo][bar]^{X}|&&\Body[foo][bar]^{X}\\
\verb|\Body_{Y}|&&\Body_{Y}\\
\verb|\Body[foo]_{Y}|&&\Body[foo]_{Y}\\
\verb|\Body[foo][bar]_{Y}|&&\Body[foo][bar]_{Y}\\
\verb|\Body^{X}_{Y}|&&\Body^{X}_{Y}\\
\verb|\Body[foo]^{X}_{Y}|&&\Body[foo]^{X}_{Y}\\
\verb|\Body[foo][bar]^{X}_{Y}|&&\Body[foo][bar]^{X}_{Y}\\
\multicolumn{3}{l}{Behavior when specifying optional arguments blank:}\\
\verb|\Body[ ]|&&\Body[ ]\\
\verb|\Body[ ][ ]|&&\Body[ ][ ]\\
\verb|\Body[ ]^{X}|&&\Body[ ]^{X}\\
\verb|\Body[ ][ ]^{X}|&&\Body[ ][ ]^{X}\\
\verb|\Body[ ]_{Y}|&&\Body[ ]_{Y}\\
\verb|\Body[ ][ ]_{Y}|&&\Body[ ][ ]_{Y}\\
\verb|\Body[ ]^{X}_{Y}|&&\Body[ ]^{X}_{Y}\\
\verb|\Body[ ][ ]^{X}_{Y}|&&\Body[ ][ ]^{X}_{Y}\\
\multicolumn{3}{l}{Behavior when specifying embellishments blank:}\\
\verb|\Body^{ }|&&\Body^{ }\\
\verb|\Body[foo]^{ }|&&\Body[foo]^{ }\\
\verb|\Body[foo][bar]^{ }|&&\Body[foo][bar]^{ }\\
\verb|\Body_{ }|&&\Body_{ }\\
\verb|\Body[foo]_{ }|&&\Body[foo]_{ }\\
\verb|\Body[foo][bar]_{ }|&&\Body[foo][bar]_{ }\\
\verb|\Body^{ }_{ }|&&\Body^{ }_{ }\\
\verb|\Body[foo]^{ }_{ }|&&\Body[foo]^{ }_{ }\\
\verb|\Body[foo][bar]^{ }_{ }|&&\Body[foo][bar]^{ }_{ }\\
\multicolumn{3}{l}{Behavior when specifying optional args and
                   embellishments blank:}\\
\verb|\Body[ ]^{ }|&&\Body[ ]^{ }\\
\verb|\Body[ ][ ]^{ }|&&\Body[ ][ ]^{ }\\
\verb|\Body[ ]_{ }|&&\Body[ ]_{ }\\
\verb|\Body[ ][ ]_{ }|&&\Body[ ][ ]_{ }\\
\verb|\Body[ ]^{ }_{ }|&&\Body[ ]^{ }_{ }\\
\verb|\Body[ ][ ]^{ }_{ }|&&\Body[ ][ ]^{ }_{ }
\end{tabular}
\end{minipage}

\end{document}

ingrese la descripción de la imagen aquí

Advertencias:

  • Por favor, no haga cosas como \Body^_{down}dónde _se tomará el valor del argumento de embellecimiento ^.

  • Además de los argumentos de adorno opcionales indicados por ^y, _la macro \Bodytambién tiene dos [...]argumentos opcionales delimitados posteriores. Por lo tanto, no hay forma de desviarse del valor predeterminado solo para el segundo de estos [...]argumentos opcionales delimitados mientras se mantiene el valor predeterminado del primer [...]argumento opcional delimitado aparte de especificar explícitamente [...]también el primer argumento opcional delimitado, proporcionando su valor predeterminado. .

  • Parece que actualmente (13 de enero de 2024, 07:18:40 (UTC + 0000)) no existe una interfaz oficial adecuada para contar los argumentos indicados por una firma de argumento xparse.
    Por lo tanto, \MYSTUFF_xparse_arg_signature_count:npodría romperse cuando en futuras versiones de LaTeX las cosas internas cambien, por ejemplo, en caso de que se agreguen más tipos de argumentos xparse con análisis/conteo no estándar, de modo que sea necesario adaptar el mecanismo para analizar la firma del argumento.

  • No \MYSTUFF_xparse_arg_signature_count:nse implementa ninguna verificación de errores si el argumento es una firma de argumento xparse válida. Tampoco se implementa la verificación de errores si el valor de la clave argsdel segundo argumento de la macro \NewGlsCompoundes una firma de argumento xparse válida. Por lo tanto, en caso de que ese valor no forme una firma de argumento xparse válida, los intentos activados al \NewGlsCompounddefinir mediante \NewDocumentCommandel comando indicado en su primer argumento pueden generar mensajes de error sobre tipos de argumentos desconocidos y similares.

información relacionada