Comando de glossários compostos com sub e sobrescritos adequados e argumentos personalizados

Comando de glossários compostos com sub e sobrescritos adequados e argumentos personalizados

Eu gostaria de criar uma macro que ajudasse na combinação de símbolos gls. Cada símbolo composto deve consistir em um corpo e (opcionalmente) um super e um subscrito (que são símbolos gls e são listados em diferentes listas de símbolos para sub/sobrescritos). Além disso, gostaria de adicionar argumentos personalizados para alguns dos símbolos compostos. Um exemplo do que eu gostaria de alcançar: insira a descrição da imagem aqui

O seguinte é o meu problema:

  1. Para ter certeza de que os sub/sobrescritos adicionados após o composto estão sendo adicionados aos sub/sobrescritos "compostos", preciso usar a funcionalidade de enfeites dos xparsedois últimos parâmetros da minha macro definida ( E{^_}{{}{}})
  2. Como não sei antecipadamente quantos argumentos personalizados serão adicionados, args=não sei qual número de parâmetro os enfeites terão (ou seja, tenho que contar o número de argumentos e adicionar os números dos parâmetros dinamicamente).

Eu criei o seguinte código (que não funciona). Acho que o principal problema aqui é a expansão correta, de modo que as variáveis ​​que contêm os números dos parâmetros dos enfeites ( \l_compound_supparameter_tle \l_compound_subparameter_tl) sejam expandidas antes que a macro seja finalmente definida. Além disso, eu só poderia passar especificações de argumentos separados por vírgula para 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}

Se você pudesse me ajudar com essa bagunça de expansão, eu ficaria muito grato!

Responder1

  • Primeiro de tudo você precisa de uma rotina para contar a quantidade de argumentos especificados por uma assinatura de argumento xparse.

    No exemplo abaixo, esta é a rotina \MYSTUFF_xparse_arg_signature_count:n.

    Eu escrevi plagiando o código da rotina \__cmd_split_signature:ndescrita nocomentou Fontes LaTeX 2ε, Arquivo g: ltcmd.dtx Data: 2023-08-19 Versão v1.2a, seção "1.7.2 Mostrando a definição de um comando".

    A rotina \MYSTUFF_xparse_arg_signature_count:nrecebe um argumento que deve formar uma assinatura de argumento x-parse para uma instância de \NewDocumentCommand.
    A rotina após duas etapas de expansão retorna uma sequência de tokens de dígitos denotando a quantidade de argumentos especificados pela assinatura do argumento x-parse em notação decimal.

  • Outro problema é obter o sublinhado ( _) da categoria 8 (subscrito) na especificação de embelezamento do Eargumento -type do comando definido por \NewGlsCompoundquando a definição \NewGlsCompoundwhile \ExplSyntaxOnestá em vigor para que o undescore tenha o código de categoria 11 (letra).

É assim que eu poderia fazer:

%\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}

insira a descrição da imagem aqui

Ressalvas:

  • Por favor, não faça coisas como \Body^_{down}onde _será obtido o valor do argumento embellishment ^.

  • Além dos argumentos de embelezamento opcionais indicados por ^e _a macro \Bodytambém possui dois [...]argumentos opcionais subsequentes delimitados por -. Portanto, não há como desviar-se do valor padrão apenas para o segundo desses [...]argumentos opcionais delimitados, mantendo o valor padrão do primeiro [...]argumento opcional delimitado, além de especificar explicitamente o primeiro [...]argumento opcional delimitado também, fornecendo seu valor padrão .

  • Parece que atualmente (13 de janeiro de 2024, 07:18:40 (UTC + 0000)) não existe uma interface oficial adequada para contar os argumentos indicados por uma assinatura de argumento xparse.
    Assim, \MYSTUFF_xparse_arg_signature_count:npode ocorrer uma falha quando as coisas internas mudarem em versões futuras do LaTeX - por exemplo, no caso de mais tipos de argumentos xparse com análise/contagem não padrão serem adicionados para que o mecanismo para analisar a assinatura do argumento precise ser adaptado.

  • Como \MYSTUFF_xparse_arg_signature_count:nnão há verificação de erros implementada no argumento, sendo uma assinatura de argumento xparse válida. A verificação de erros também não é implementada no valor da chave argsdo segundo argumento da macro, \NewGlsCompoundsendo uma assinatura de argumento xparse válida. Portanto, caso esse valor não forme uma assinatura de argumento xparse válida, as tentativas acionadas pela \NewGlsCompounddefinição por meio \NewDocumentCommanddo comando indicado em seu primeiro argumento podem gerar mensagens de erro sobre tipos de argumentos desconhecidos e similares.

informação relacionada