So verwenden Sie \hline im \edef-Makro zum Generieren einer Tabelle

So verwenden Sie \hline im \edef-Makro zum Generieren einer Tabelle

weiß jemand, wie man \hlineein Makro ergänzt, das zum Generieren einer Tabelle verwendet wird?

Mein MWE

\documentclass{article}

\RequirePackage{tabularx}

\makeatletter
\newcounter{appdocs}
\setcounter{appdocs}{1}
\renewcommand{\theappdocs}{AD\arabic{appdocs}}
\newcommand{\appdocsCnt}[1]{%
  \theappdocs% Print counter
  \refstepcounter{appdocs}\label{#1}}% Mark with label

\newcommand{\applicabledocumententries}{}
\newcommand{\applicabledocument}[3]{%
\protected@xdef\applicabledocumententries{\applicabledocumententries \protect\appdocsCnt{#1} & #2 & #3 \protect\\}}

\newcommand{\applicabledocumentstable}{%
\begin{tabularx}{\textwidth}{p{2cm}|X|p{4cm}}%9.8
    \hline
    {\bfseries Ref.} & {\bfseries Title} & {\bfseries Reference and Issue} \\\hline
    \applicabledocumententries
    \hline
\end{tabularx}
}
\makeatother

\begin{document}

\applicabledocument{ad:1}{myTexta}{someDate}
\applicabledocument{ad:2}{myTextb}{anotherDate}
\applicabledocument{ad:3}{myTextc}{randomDate}
\applicabledocumentstable

\end{document}

das erzeugt

Bildbeschreibung hier eingeben

Ich hätte es aber gerne \hlinenach jedem Eintrag der Liste.Wie füge ich \hline zur Makroerweiterung hinzu?geht vielleicht in die richtige Richtung, kann es aber auf mein Beispiel nicht anwenden.

Antwort1

Mit können Sie ein robustes oder (wie im Beispiel) tabellarisches Zeilenende \DeclareRobustCommanddefinieren mit :\hline\hline

\documentclass{article}

\usepackage{tabularx}% Don't use \RequirePackage in document preamble after \documentclass

\makeatletter
\newcounter{appdocs}
\setcounter{appdocs}{1}
\renewcommand{\theappdocs}{AD\arabic{appdocs}}
\newcommand{\appdocsCnt}[1]{%
  \theappdocs% Print counter
  \refstepcounter{appdocs}\label{#1}}% Mark with label

\newcommand{\applicabledocumententries}{}
\DeclareRobustCommand*{\tabularnewlinewithhline}{\\\hline}
\newcommand{\applicabledocument}[3]{%
\protected@xdef\applicabledocumententries{\applicabledocumententries \protect\appdocsCnt{#1} & #2 & #3 \tabularnewlinewithhline}}

\newcommand{\applicabledocumentstable}{%
\begin{tabularx}{\textwidth}{p{2cm}|X|p{4cm}}%9.8
    \hline
    {\bfseries Ref.} & {\bfseries Title} & {\bfseries Reference and Issue} \\\hline
    \applicabledocumententries
\end{tabularx}
}
\makeatother

\begin{document}

\applicabledocument{ad:1}{myTexta}{someDate}
\applicabledocument{ad:2}{myTextb}{anotherDate}
\applicabledocument{ad:3}{myTextc}{randomDate}
\applicabledocumentstable

\end{document}

Alternativ können Sie \protectvor der Verwendung Folgendes erweitern und entfernen \applicabledocumententries:

\documentclass{article}

\usepackage{tabularx}
\makeatletter
\newcounter{appdocs}
\setcounter{appdocs}{1}
\renewcommand{\theappdocs}{AD\arabic{appdocs}}
\newcommand{\appdocsCnt}[1]{%
  \theappdocs% Print counter
  \refstepcounter{appdocs}\label{#1}}% Mark with label

\newcommand{\applicabledocumententries}{}
\DeclareRobustCommand*{\tabularnewlinewithhline}{\\\hline}
\newcommand{\applicabledocument}[3]{%
\protected@xdef\applicabledocumententries{\applicabledocumententries \protect\appdocsCnt{#1} & #2 & #3 \protect\\\protect\hline}}

\newcommand{\applicabledocumentstable}{%
\begin{tabularx}{\textwidth}{p{2cm}|X|p{4cm}}%9.8
    \hline
    {\bfseries Ref.} & {\bfseries Title} & {\bfseries Reference and Issue}
  \\\hline
    \let\protect\noexpand
    \edef\applicabledocumententries{\applicabledocumententries}%
    \applicabledocumententries
\end{tabularx}
}
\makeatother

\begin{document}

\applicabledocument{ad:1}{myTexta}{someDate}
\applicabledocument{ad:2}{myTextb}{anotherDate}
\applicabledocument{ad:3}{myTextc}{randomDate}
\applicabledocumentstable

\end{document}

Antwort2

Unten habe ich ein Makro eingefügt \trules, das ursprünglich \relaxals Teil der \applicabledocumententriesKonstruktion auf (nicht erweiterbar) eingestellt ist. \truleswird dann \hlineals Teil von eingestellt \applicabledocumentstable:

Bildbeschreibung hier eingeben

\documentclass{article}

\usepackage{tabularx}

\makeatletter
\newcounter{appdocs}
\renewcommand{\theappdocs}{AD\arabic{appdocs}}
\newcommand{\appdocsCnt}[1]{%
  \mbox{}\refstepcounter{appdocs}\label{#1}% Mark with label
  \theappdocs% Print counter
}

\newcommand{\applicabledocumententries}{}
\let\trules\relax
\newcommand{\applicabledocument}[3]{%
  \protected@xdef\applicabledocumententries{%
    \applicabledocumententries \protect\appdocsCnt{#1} & #2 & #3 \protect\\ \trules}}
\makeatother

\newcommand{\applicabledocumentstable}{%
  \let\trules\hline
  \begin{tabularx}{\textwidth}{ p{2cm} | X | p{4cm} }
    \hline
    {\bfseries Ref.} & {\bfseries Title} & {\bfseries Reference and Issue} \\
    \hline
    \applicabledocumententries
  \end{tabularx}
}
\makeatother

\begin{document}

\applicabledocument{ad:1}{myTexta}{someDate}
\applicabledocument{ad:2}{myTextb}{anotherDate}
\applicabledocument{ad:3}{myTextc}{randomDate}
\noindent
\applicabledocumentstable

\end{document}

Die Tabelle sieht jedoch ohne sie viel besser aus. Hier ist eine Version mitbooktabs:

Bildbeschreibung hier eingeben

verwandte Informationen