alguém sabe como adicionar \hline
a uma macro que é usada para gerar uma tabela?
Meu 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 produz
Mas eu gostaria de ter\hline
após cada entrada da lista.Como adicionar \hline à expansão macro?pode ir na direção correta, mas não sou capaz de aplicar isso ao meu exemplo.
Responder1
Você pode usar \DeclareRobustCommand
para definir uma linha robusta \hline
ou (como mostrado no exemplo) uma linha tabular que termina com \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, você pode expandir e eliminar o \protect
antes 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}
Responder2
Abaixo inseri uma macro \trules
que está originalmente definida como \relax
(não expansível) como parte da \applicabledocumententries
construção. \trules
é então definido \hline
como parte de \applicabledocumentstable
:
\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}
A mesa parece muito melhor sem ela. Aqui está uma versão usandobooktabs
: