кто-нибудь знает, как добавить \hline
макрос, который используется для генерации таблицы?
Мой МВЭ
\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}
который производит
Но я бы хотел иметь \hline
после каждой записи списка.Как добавить \hline в макрорасширение?возможно, это направит в правильном направлении, но я не могу применить это к своему примеру.
решение1
Вы можете использовать \DeclareRobustCommand
для определения надежной \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}
В качестве альтернативы вы можете расширить и исключить \protect
перед использованием \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}
решение2
Ниже я вставил макрос \trules
, который изначально установлен как \relax
(нерасширяемый) как часть конструкции \applicabledocumententries
. \trules
затем установлен \hline
как часть \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}
Хотя таблица выглядит намного лучше без него. Вот версия с использованиемbooktabs
: