Bearbeitung 1: M(N)WE

Bearbeitung 1: M(N)WE

Ich migriere derzeit von xltabular zu tabularray. Dabei möchte ich meinen benutzerdefinierten Glossarstil für die Symbolliste und die Abkürzungsliste (gleicher Stil) anpassen.

Dies ist mein alter Code:

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

Ich möchte loswerden:

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

Daher muss ich mich anpassen \newglossarystyle{customlong}{...}. Das ist mein aktueller Stand:

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

Die Kompilierung schlägt mit „Falsch platziertes Tabulatorzeichen &.“ fehl. Wenn ich es &durch \&in \renewcommand{\glossentry}[2]{...}und ersetze \renewcommand{\subglossentry}[3]{...}, ist die Kompilierung erfolgreich, aber die Ausgabe enthält offensichtlich „&“.

Ich gehe davon aus, dass dieser Fehler mit dem folgenden Inhalt der Paketdokumentation von tabularray zusammenhängt:

"Im Gegensatz zu herkömmlichen Tabellenumgebungen müssen Tabularray-Umgebungen jedes & und \ sehen, wenn der Tabellenkörper mit l3regex geteilt wird. Und Sie können keinen Zelltext in einen Tabellenbefehl einfügen, der mit \NewTableCommand definiert ist. Sie können jedoch den äußeren Schlüssel expand verwenden, damit Tabularray jedes Vorkommen eines angegebenen Makros einmal expandiert, bevor der Tabellenkörper geteilt wird. Beachten Sie, dass Sie einen mit \NewDocumentCommand definierten Befehl nicht expandieren können." (https://ftp.gwdg.de/pub/ctan/macros/latex/contrib/tabularray/tabularray.pdf, S. 30)

Das würde bedeuten, dass ich erweitern muss \renewcommand{\glossentry}[2]{...}und \renewcommand{\subglossentry}[3]{...}. Ich habe keine Ahnung, wie ich das erreichen soll. Kann mir jemand helfen?

Dank im Voraus.

Bearbeitung 1: M(N)WE

Dies ist mein aktueller Code, der '&' ausgibt. Einige nicht verwandte Inhalte wurden entfernt. Ich baue mit latexmk.

main.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}

glossaries.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;
}

verwandte Informationen