\edef マクロで \hline を使用してテーブルを生成する方法

\edef マクロで \hline を使用してテーブルを生成する方法

\hlineテーブルを生成するために使用されるマクロを追加する方法を誰か知っていますか?

私の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}

生成する

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

関連情報