new指令內的表格佈局

new指令內的表格佈局

我想知道是否可以定義類似於\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給與鍵具有相似名稱的巨集(更容易記住)。這些鍵可以作為 then 的可選參數給出\workpackage

例如,真實內容作為第一個強制參數給出。

\setkeys{wpkeys}{prerequisites=none,leftheader={Effort},#1}%

如果沒有明確給出的話,可以預設一些應該具有某些值的鍵。

請注意,由於我的範例很短,因此\leftheader即使下次使用\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}

在此輸入影像描述

相關內容