So fügen Sie einer Tabelle über einen Befehl Zeilen hinzu

So fügen Sie einer Tabelle über einen Befehl Zeilen hinzu

Ich möchte etwas sehr Ähnliches wie diese Frage hier machen: Mit Makro Zeilen zur Tabelle hinzufügen

tabularrayIn meinem Fall einer mit dem Paket und den Befehlen erstellten Versionsprotokolltabelle gelingt es mir jedoch nicht, es zum Laufen zu bringen xparse.

Mein aktuelles MNWE (Minimum Not Working Example ...) ist folgendes:

\documentclass{article}

\usepackage{xparse}
\usepackage{tabularray}

\makeatletter

\let\@history\@empty
\NewDocumentCommand \historyentry {m m m} {%
  \g@addto@macro\@history{#1 & #2 & #2\\}
}

\NewDocumentCommand \history {} {%
  \begin{tblr}{colspec={l l l}}
    Version & Date & Comment \\ 
    \@history{}
  \end{tblr}
}
\makeatother

\historyentry{1.0}{2023-03-01}{First release}
\historyentry{2.0}{2023-03-15}{Second release}

\begin{document}
\history
\end{document}

was beim Kompilieren mit LuaLaTeX (oder auch PDFLaTeX) zu diesem Fehler führt:

This is LuaHBTeX, Version 1.15.0 (TeX Live 2022) 
 restricted system commands enabled.
(./test.tex
LaTeX2e <2022-11-01> patch level 1
 L3 programming layer <2023-01-24> (/home/mnoethe/.local/texlive/2022/texmf-dist/tex/latex/base/article.cls
Document Class: article 2022/07/02 v1.4n Standard LaTeX document class
(/home/mnoethe/.local/texlive/2022/texmf-dist/tex/latex/base/size10.clo)) (/home/mnoethe/.local/texlive/2022/texmf-dist/tex/latex/l3packages/xparse/xparse.sty (/home/mnoethe/.local/texlive/2022/texmf-dist/tex/latex/l3kernel/expl3.sty (/home/mnoethe/.local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-luatex.def))) (/home/mnoethe/.local/texlive/2022/texmf-dist/tex/latex/tabularray/tabularray.sty) (./test.aux) (/home/mnoethe/.local/texlive/2022/texmf-dist/tex/latex/base/ts1cmr.fd)
! Misplaced alignment tab character &.
\@history ->1.0 &
                  2023-03-01 & 2023-03-01\\2.0 & 2023-03-15 & 2023-03-15\\
l.25 \history
           
? 

Ich wäre für jede Hilfe dankbar!

Der gleiche Code funktioniert, wenn Sie \begin{tabular}{l l l}anstelle von einen Standard verwenden \begin{tblr}{colspec={l l l}}.

Antwort1

Sie müssen angeben, tabularraydass das Makro zuerst erweitert werden soll \@history, bevor die Tabelle gesetzt wird. Dies können Sie mit der expandOption tun (siehe Abschnitt 3.2.3 „Erst Makros erweitern“ im tabularrayPakethandbuch):

\documentclass{article}
\usepackage{tabularray}

\makeatletter
\let\@history\@empty
\NewDocumentCommand \historyentry {m m m} {%
  \g@addto@macro\@history{#1 & #2 & #3 \\}
}

\NewDocumentCommand \history {} {%
  \begin{tblr}[expand=\@history]{colspec={l l l}}
    Version & Date & Comment \\ 
    \@history{}
  \end{tblr}
}
\makeatother

\historyentry{1.0}{2023-03-01}{First release}
\historyentry{2.0}{2023-03-15}{Second release}

\begin{document}
\history
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen