
事前に定義されたテーブル ( ) テンプレート\newcommand
内に値を配置するに似たものを定義できるかどうか疑問に思っています。tabular
上記の表を見ると、これを何度も複製することを想像できます (たとえば、新しく定義されたコマンドを使用するなど\workpackage
)。そのコマンドの入力引数は次のようになります。
\workpackage {2}{
\begin{itemize}......
}{none}
レイアウト自体はテーブルです。このような複雑なレイアウトを一種のテンプレートとして新しいコマンドに配置するのは良い考えでしょうか?
この例は機能しません:(
\newcommand{\wp}[3]{
\begin{tabular}{ l l }
Effort & #1 \\
Content & #2 \\
Pre-Requisites & #3 \\
\end{tabular}
}
これが私の最終的な解決策です。これは、以下の回答からヒントを得たものです。
\usepackage{tabularx}
\usepackage{xkeyval}
% define the key (arguments)
\makeatletter
\define@key{wpkeys}{title}{%
\def\wptitle{#1}
}
\define@key{wpkeys}{number}{%
\def\wpnumber{#1}
}
\define@key{wpkeys}{weeks}{%
\def\wpweeks{#1 person weeks}
}
\define@key{wpkeys}{results}{%
\def\wpresults{#1}
}
\makeatother
% end of key definition
% new command for a work package
\newcommand{\workpackage}[2][]{%
\setkeys{wpkeys}{#1}%
\subsection*{WP\wpnumber: \wptitle}
\begin{tabularx}{\linewidth}{|p{3cm}|X|}
\hline
Effort & \wpweeks \tabularnewline
\hline
Content & #2 \tabularnewline
\hline
Expected results & \wpresults \tabularnewline
\hline
\end{tabularx}
}
% end of command definition
次のように使用します:
\workpackage[number=1, title={Project Management \& Reporting}, weeks=3,results={MS1}]{
\begin{itemize}
\item foo
\item baa
\end{itemize}
}
答え1
インターフェースアプローチは次のとおりですkeyvalue
。
キー ファミリに「任意の」キーを定義します。たとえば、wpkeys
を使用し、 をキーと似た名前 (覚えやすい) を持つマクロに\define@key
割り当てます。これらのキーは、オプションの引数として に指定できます。key-value
\workpackage
実際の内容は、たとえば最初の必須引数として指定されます。
と
\setkeys{wpkeys}{prerequisites=none,leftheader={Effort},#1}%
明示的に指定されていない場合に、いくつかの値を設定するキーを事前に設定することができます。
この例は短いため、マクロ\leftheader
を次に使用する場合も etc. の内容が定義されたままになることに注意してください\workpackage
。
\documentclass{article}
\usepackage{tabularx}
\usepackage{xkeyval}
\makeatletter
\define@key{wpkeys}{leftheader}{%
\def\leftheader{#1}
}
\define@key{wpkeys}{rightheader}{%
\def\rightheader{#1}
}
\define@key{wpkeys}{prerequisites}{%
\def\prerequisites{#1}
}
\makeatother
\newcommand{\workpackage}[2][]{%
\setkeys{wpkeys}{prerequisites=none,leftheader={Effort},#1}%
\begin{tabularx}{\linewidth}{|p{3cm}|X|}
\hline
\leftheader & \rightheader \tabularnewline
\hline
Content & #2 \tabularnewline
\hline
Pre-requisites & \prerequisites \tabularnewline
\hline
\end{tabularx}
}
\begin{document}
\workpackage[rightheader={2 person weeks}]{\begin{itemize} \item foo \item foobar \end{itemize}}
\workpackage[rightheader={5 person weeks},prerequisites={a lot}]{\begin{itemize} \item foo \item foobar \end{itemize}}
\end{document}
テーブルのデザインはOPに任せます
アップデート少し使いやすくなりました:
\documentclass{article}
\usepackage[x11names]{xcolor}
\usepackage{tabularx}
\usepackage{xkeyval}
\makeatletter
\define@key{wpkeys}{leftheader}{%
\def\leftheader{#1}
}
\define@key{wpkeys}{rightheader}{%
\def\rightheader{#1}
}
\define@key{wpkeys}{prerequisites}{%
\def\prerequisites{#1}
}
\define@key{wpkeys}{contentname}{%
\def\contentcolumnheadername{#1}
}
\define@key{wpkeys}{prerequisitesname}{%
\def\prerequisitescolumnheadername{#1}
}
\define@key{wpkeys}{contentheaderstyle}{%
\def\contentheaderstyle{#1}%
}
\define@key{wpkeys}{prerequisitesheaderstyle}{%
\def\prerequisitesheaderstyle{#1}%
}
\define@key{wpkeys}{leftheaderstyle}{%
\def\leftheaderstyle{#1}%
}
\define@key{wpkeys}{rightheaderstyle}{%
\def\rightheaderstyle{#1}%
}
% Tabular lengths etc.
\newlength\wp@leftcolumnwidth
\setlength{\wp@leftcolumnwidth}{3cm} % A default value
\define@key{wpkeys}{leftcolumnwidth}{%
\setlength{\wp@leftcolumnwidth}{#1}%
}
\define@key{wpkeys}{arraystretch}{%
\renewcommand{\arraystretch}{#1}%
}
\presetkeys{wpkeys}{%
arraystretch=1.5,
contentheaderstyle={\textbf},
prerequisitesheaderstyle={\textit},
rightheaderstyle={\large\bfseries\textcolor{blue}},
leftheaderstyle={\large\bfseries\textcolor{red}},
}{}
\newcommand{\workpackage}[2][]{%
\begingroup
\setkeys{wpkeys}{contentname={Content},prerequisitesname={Pre - Requisites},prerequisites=none,leftheader={Effort},#1}%
\begin{tabularx}{\linewidth}{|p{\wp@leftcolumnwidth}|X|}
\hline
\leftheaderstyle{\leftheader} & \rightheaderstyle{\rightheader} \tabularnewline
\hline
\contentheaderstyle{\contentcolumnheadername} & #2 \tabularnewline
\hline
\prerequisitesheaderstyle{\prerequisitescolumnheadername} & \topsep=0pt\prerequisites \tabularnewline
\hline
\end{tabularx}
\endgroup
}
\makeatother
\begin{document}
\workpackage[rightheader={2 person weeks}]{\begin{itemize} \item foo \item foobar \end{itemize}}
\workpackage[rightheader={5 person weeks},prerequisites={\begin{itemize} \item A nice list \item that ends \item after three items\end{itemize}}]{\begin{itemize} \item foo \item foobar \end{itemize}}
\end{document}