I created a custom environment to separate the semantics from design and formatting of use case tables. Everything works fine except the tabularx
environment is unable to break across columns which creates nasty looking areas of white space when several (especially longer) use cases follow right after one another. Is there any way I can enable them to break across columns?
\documentclass[10pt]{scrartcl}
\usepackage[english]{babel}
\usepackage[margin=15mm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[svgnames,table]{xcolor}
\usepackage{booktabs,tabularx,multicol,enumitem,blindtext}
\setlist{leftmargin=*,nosep}
\newcommand{\tabhead}[2][DarkBlue]{\textbf{\large\sffamily\color{#1} #2}}
\newcounter{usecase}
\newenvironment{usecase}[1]{
\refstepcounter{usecase}
\noindent\tabularx{\linewidth}{lX}
\rowcolor{gray!20}\tabhead{Case~\theusecase} & \tabhead[DarkGreen]{#1}\\
\toprule
}
{\bottomrule\endtabularx\medskip}
\newcommand{\actor}[1]{Actor & #1\\\midrule}
\newcommand{\precondition}[1]{Needs & #1\\\midrule}
\newcommand{\mainpath}[1]{
Path & \begin{minipage}[t]{\linewidth}\blindenumerate[20]
\end{minipage}\\}
\setlength{\footskip}{1cm}
\begin{document}
\title{The Title}
\author{Casimir}
\date{\today}
\maketitle
\begin{abstract}
\blindtext
\end{abstract}
\begin{multicols}{2}
\section{First Section}
\blindtext
\subsection{First Subsection}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{}
\end{usecase}
\end{multicols}
\end{document}
Update
New implementation with inspiration from David Carlisle.
\documentclass[10pt]{scrartcl}
\usepackage[english]{babel}
\usepackage[margin=15mm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[svgnames,table]{xcolor}
\usepackage{multicol,enumitem,blindtext}
\setlist{leftmargin=*,nosep}
\newcommand{\uchead}[2][DarkBlue]{\textbf{\large\sffamily\color{#1} #2}}
\newcounter{usecase}
\newenvironment{usecase}[1]{
\refstepcounter{usecase}
\noindent\colorbox{gray!20}{%
\makebox[\dimexpr\linewidth-2\fboxsep][l]{%
\uchead{Case~\theusecase}~~\uchead[DarkGreen]{#1}}}\par
\hrule}
{\bigskip}
\newlength\lcol\setlength{\lcol}{1.2cm}
\newcommand{\ucentry}[1]{\noindent\strut\makebox[\lcol][l]{\textbf{#1}}}
\newcommand{\actor}[1]{%
\ucentry{Actor} #1\hrule}
\newcommand{\precondition}[1]{%
\ucentry{Needs} #1\hrule}
\newcommand{\mainpath}[1]{%
\ucentry{Path}
\vspace{-\dimexpr\parskip+\baselineskip}%
\setlist[enumerate]{labelindent=\dimexpr\lcol+\fboxsep} #1\smallskip\hrule}
\setlength{\footskip}{1cm}
\begin{document}
\title{The Title}
\author{Casimir}
\date{\today}
\maketitle
\begin{abstract}
\blindtext
\end{abstract}
\begin{multicols}{2}
\section{First Section}
\blindtext
\subsection{First Subsection}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{\blindenumerate[9]}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{\blindenumerate[9]}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{\blindenumerate[9]}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{\blindenumerate[9]}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{\blindenumerate[9]}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{\blindenumerate[9]}
\end{usecase}
\begin{usecase}{Some use case}
\actor{Some actor}
\precondition{User logged in}
\mainpath{\blindenumerate[9]}
\end{usecase}
\end{multicols}
\end{document}