Cómo usar \hline en la macro \edef para generar una tabla

Cómo usar \hline en la macro \edef para generar una tabla

¿Alguien sabe cómo agregar \hlinea una macro que se usa para generar una tabla?

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

que produce

ingrese la descripción de la imagen aquí

Pero me gustaría tener \hlinedespués de cada entrada de la lista.¿Cómo agregar \hline a la expansión macro?Podría ir en la dirección correcta, pero no puedo aplicar esto a mi ejemplo.

Respuesta1

Puede utilizar \DeclareRobustCommandpara definir un \hlinefinal de línea robusto o (como se muestra en el ejemplo) tabular con \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}

Como alternativa puedes ampliar y eliminar el \protectantes de usar \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}

Respuesta2

A continuación, inserté una macro \trulesque originalmente está configurada \relax(no expandible) como parte de la \applicabledocumententriesconstrucción. \trulesluego se establece \hlinecomo parte de \applicabledocumentstable:

ingrese la descripción de la imagen aquí

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

Sin embargo, la mesa se ve mucho mejor sin él. Aquí hay una versión que usabooktabs:

ingrese la descripción de la imagen aquí

información relacionada