Edición 1: M(N)NOSOTROS

Edición 1: M(N)NOSOTROS

Actualmente estoy migrando de xltabular a tabularray. Como parte de eso, quiero adaptar mi estilo de glosario personalizado para Lista de símbolos y Lista de abreviaturas (mismo estilo).

Este es mi antiguo código:

% tables
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{xltabular}
\usepackage{tabularray}
\addto\captionsngerman{
    \DefTblrTemplate{contfoot-text}{default}{Fortsetzung auf der n\"achsten Seite}
    \DefTblrTemplate{conthead-text}{default}{(fortgesetzt)}
}

% glossaries
\usepackage[
    abbreviations,
    nonumberlist,
    record,
    symbols
]{glossaries-extra}
\GlsXtrLoadResources[
    src=glossaries,
    not-match={entrytype=symbol}
]
\GlsXtrLoadResources[
    selection=all,
    src=glossaries,
    type=symbols,
    match={entrytype=symbol}
]
\newglossarystyle{customlong}{
    \setglossarystyle{long}
    \renewenvironment{theglossary}{\xltabular{\textwidth}{llX}}{\endxltabular}
    \renewcommand{\glossentry}[2]{
        \glsentryitem{##1}\textbf{\glstarget{##1}{\glossentryname{##1}}} & \multicolumn{2}{X}{\glossentrydesc{##1}}\\
    }
    \renewcommand{\subglossentry}[3]{
        & \glssubentryitem{##2}\glstarget{##2}{\strut} & \glossentrydesc{##2}\\
    }
    \ifglsnogroupskip
        \renewcommand*{\glsgroupskip}{}%
    \else
        \renewcommand*{\glsgroupskip}{\\}%
    \fi
}

Me gustaría deshacerme de:

\usepackage{booktabs}
\usepackage{multirow}
\usepackage{xltabular}

Por lo tanto, necesito adaptarme \newglossarystyle{customlong}{...}. Este es mi estado actual:

\newglossarystyle{customlong}{
    \setglossarystyle{long}
    \renewenvironment{theglossary}{
        \begin{longtblr}[
            entry=none,
            label=none
        ]{
            colspec={llX},
            hspan=minimal,
            stretch=1,
            width=\textwidth
        }
    }{\end{longtblr}}
    \renewcommand{\glossentry}[2]{
        \glsentryitem{##1}\textbf{\glstarget{##1}{\glossentryname{##1}}} & \SetCell[c=2]{l}\glossentrydesc{##1}\\
    }
    \renewcommand{\subglossentry}[3]{
        & \glssubentryitem{##2}\glstarget{##2}{\strut} & \glossentrydesc{##2}\\
    }
    \ifglsnogroupskip
        \renewcommand*{\glsgroupskip}{}%
    \else
        \renewcommand*{\glsgroupskip}{\\}%
    \fi
}

La compilación falla con el 'Carácter de tabulación de alineación fuera de lugar &.'. Cuando lo reemplazo &con \&in \renewcommand{\glossentry}[2]{...}y \renewcommand{\subglossentry}[3]{...}, la compilación se realiza correctamente pero el resultado obviamente contiene '&'.

Supongo que este error está relacionado con el siguiente contenido de la documentación del paquete de tabularray:

"A diferencia del entorno tabular tradicional, los entornos tabularray necesitan ver cada & y \ al dividir el cuerpo de la tabla con l3regex. Y no se puede colocar texto de celda dentro de ningún comando de tabla definido con \NewTableCommand. Pero se puede usar la tecla externa expandir para hacer tabularray expande cada aparición de una macro especificada una vez antes de dividir el cuerpo de la tabla. Tenga en cuenta que no puede expandir un comando definido con \NewDocumentCommand". (https://ftp.gwdg.de/pub/ctan/macros/latex/contrib/tabularray/tabularray.pdf, pag. 30)

Esto significaría que necesito expandir \renewcommand{\glossentry}[2]{...}y \renewcommand{\subglossentry}[3]{...}. No tengo idea de cómo lograr eso. ¿Alguien puede ayudar?

Gracias de antemano.

Edición 1: M(N)NOSOTROS

Este es mi código actual que imprime '&'. Se han eliminado algunos contenidos no relacionados. Yo construyo con latexmk.

principal.tex

\documentclass{scrbook}

\usepackage{tabularray}

\usepackage[
    abbreviations,
    nonumberlist,
    record,
    symbols
]{glossaries-extra}
\GlsXtrLoadResources[
    src=glossaries,
    not-match={entrytype=symbol}
]
\GlsXtrLoadResources[
    selection=all,
    src=glossaries,
    type=symbols,
    match={entrytype=symbol}
]
\newglossarystyle{customlong}{
    \setglossarystyle{long}
    \renewenvironment{theglossary}{
        \begin{longtblr}[
            entry=none,
            label=none
        ]{
            colspec={llX},
            hspan=minimal,
            stretch=1,
            width=\textwidth
        }
    }{\end{longtblr}}
    \renewcommand{\glossentry}[2]{
        \glsentryitem{##1}\textbf{\glstarget{##1}{\glossentryname{##1}}} \& \SetCell[c=2]{l}\glossentrydesc{##1}\\
    }
    \renewcommand{\subglossentry}[3]{
        \& \glssubentryitem{##2}\glstarget{##2}{\strut} \& \glossentrydesc{##2}\\
    }
    \ifglsnogroupskip
        \renewcommand*{\glsgroupskip}{}%
    \else
        \renewcommand*{\glsgroupskip}{\\}%
    \fi
}
\newglossarystyle{customindex}{
    \setglossarystyle{index}
    \renewcommand{\glstreeitem}{\parindent0pt\par}
    \renewcommand{\glstreepredesc}{\par\glstreeitem\parindent40pt\hangindent40pt}
}

\begin{document}
    \frontmatter
        \printunsrtabbreviations[style=customlong]
        \printunsrtsymbols[style=customlong]

    \mainmatter

    \appendix

    \backmatter
            \printunsrtglossary[style=customindex]
\end{document}

glosarios.bib

@entry{gls-uml,
    name        = {Unified Modeling Language},
    description = {\enquote{A specification defining a graphical language for visualizing, specifying, constructing, and documenting the artifacts of distributed object systems.}\footnote{\url{https://www.omg.org/spec/UML}, aufgerufen am 20.02.2023}.}
}

@abbreviation{auv,
    description = {\gls{gls-auv}},
    short       = {AUV},
    long        = {Autonomous Underwater Vehicle}
}

@symbol{v-desired,
    name        = {\ensuremath{\overrightarrow{v_{desired}}}},
    description = {Wunschgeschwindigkeit}
}

.latexmkrc

@default_files = ('main');

$pdf_mode = 4;
$dvi_mode = 0;
$postscript_mode = 0;

$lualatex = 'lualatex -synctex=1 -interaction=nonstopmode %O %S';

push @generated_exts, 'glstex', 'glg';

$clean_ext .= ' %R.bbl %R.glstex %R.lol %R.run.xml %R-1.glstex ';

add_cus_dep( 'aux', 'glstex', 0, 'run_bib2gls' );

sub run_bib2gls {
        if ($silent) {
                my $ret = system "bib2gls --silent --group $_[0]";
        }
        else {
                my $ret = system "bib2gls --group $_[0]";
        }

        my ( $base, $path ) = fileparse( $_[0] );
        if ( $path && -e "$base.glstex" ) {
                rename "$base.glstex", "$path$base.glstex";
        }

        # Analyze log file.
        local *LOG;
        $LOG = "$_[0].glg";
        if ( !$ret && -e $LOG ) {
                open LOG, "<$LOG";
                while (<LOG>) {
                        if (/^Reading (.*\.bib)\s$/) {
                                rdb_ensure_file( $rule, $1 );
                        }
                }
                close LOG;
        }
        return $ret;
}

información relacionada