
Ich frage mich, ob ich etwas Ähnliches definieren kann, \newcommand
das die Werte in eine vordefinierte Tabellenvorlage ( tabular
) einfügt.
Wenn Sie die Tabelle oben sehen, stellen Sie sich vor, Sie würden diese oft duplizieren (beispielsweise mithilfe eines neu definierten Befehls \workpackage
). Die Eingabeargumente für diesen Befehl wären:
\workpackage {2}{
\begin{itemize}......
}{none}
Das Layout selbst ist eine Tabelle. Ist es eine gute Idee, ein so komplexes Layout als eine Art Vorlage in einen neuen Befehl einzufügen?
Dieses Beispiel funktioniert nicht :(
\newcommand{\wp}[3]{
\begin{tabular}{ l l }
Effort & #1 \\
Content & #2 \\
Pre-Requisites & #3 \\
\end{tabular}
}
Hier ist meine endgültige Lösung, die von den unten gegebenen Antworten inspiriert ist:
\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
So verwendet:
\workpackage[number=1, title={Project Management \& Reporting}, weeks=3,results={MS1}]{
\begin{itemize}
\item foo
\item baa
\end{itemize}
}
Antwort1
Hier ist ein keyvalue
Schnittstellenansatz.
Definieren Sie „beliebige“ Schlüssel für eine Schlüsselfamilie, z. B. wpkeys
mit, \define@key
und weisen Sie sie key-value
einem Makro zu, das einen ähnlichen Namen wie der Schlüssel hat (leichter zu merken). Diese Schlüssel können dann als optionales Argument angegeben werden \workpackage
.
Der eigentliche Inhalt wird beispielsweise als erstes Pflichtargument angegeben.
Mit
\setkeys{wpkeys}{prerequisites=none,leftheader={Effort},#1}%
Es ist möglich, einige Schlüssel voreinzustellen, die bestimmte Werte enthalten sollten, wenn sie nicht explizit angegeben sind.
Bitte beachten Sie, dass aufgrund der Kürze meines Beispiels der Inhalt \leftheader
usw. auch für die nächste Verwendung des \workpackage
Makros definiert bleibt.
\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}
Die Tabellengestaltung überlasse ich dem OP
AktualisierenEtwas schöner/einfacher zu bedienen:
\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}