期望行为
这款乳胶:
\documentclass{scrreprt}
\usepackage{usecases}
\setlength{\parindent}{0em}
\setlength{\parskip}{1em}
\begin{document}
\subsubsection{Example Use Case}
\begin{usecase}
\name{Some Use Case Name}
\actor{User}
\description{This is some very complex use case}
\precondition{X has to be true}
\scenario{
\item System show something
\item User do this
\item System do that
}
\result{Something happens}
\extension{
\item[3a] If something do something
}
\exceptions{
\item[2.1] System message: "Nope"
\item[2.2] System message: "Bad action"
}
\end{usecase}
\end{document}
会产生这样的结果:
注意:表格应该跨越文档可写区域的整个宽度。
我目前拥有的
目前我正在创建一个usecases.sty
包并且得到了这个:
\usepackage{tabularx}
% template %
\newcommand\addrow[2]{#1 & #2\\ \hline}
\newcommand\additemizedrow[2]{#1 &
\begin{enumerate}
\forcsvlist{\item}{#2}
\end{enumerate}
\\}
% making stuff convenient %
\newcommand\name[1]{\addrow{Name}{#1}}
\newcommand\actor[1]{\addrow{Actor}{#1}}
\newcommand\udescription[1]{\addrow{Description}{#1}}
\newcommand\precondition[1]{\addrow{Precondition}{#1}}
\newcommand\scenario[1]{\additemizedrow{Scenario}{#1}}
\newcommand\result[1]{\addrow{Result}{#1}}
\newcommand\extensions[1]{\additemizedrow{Extensions}{#1}}
\newcommand\exceptions[1]{\additemizedrow{Exceptions}{#1}}
\newcolumntype{b}{X}
\newcolumntype{s}{>{\hsize=.5\hsize}X}
\newenvironment{usecase}{\tabularx{\textwidth}{|s|b|}\hline}{\endtabularx}
我的问题
当将枚举列表作为参数获取时,如何正确呈现它们?(指我的additemizedrow
命令没有按预期工作)
如何使表格宽度跨越文档的整个可写区域?(左列的大小固定)
如何在表格的单元格中添加一些内边距(见上图)?
答案1
以下可能更接近期望的输出:
与您的原始代码相比,我使用enumitem
包来定义一个自定义的enumerate
类似 环境,为此我更改了上下间距以及左边距/缩进。为了使表格与 textwidt 一样宽,我使用了包tabularx
。为了修复第一列的宽度,我wl
从array
包中使用了它,而包又已通过 加载tabularx
。(此解决方案不允许在第一列内换行。如果您想要那样,请替换wl{2cm}
为p{2cm}
。)为了增加单元格内文本和 s 之间的间距\hline
,我使用了cellspace
包。当然,您可以根据需要自定义这个空间。如果您希望表格超过一页,则可以使用包xltabular
而不是tabularx
。(使用此方法,请记住分页符只能发生在后续表格行之间,而不能发生在表格行内。)
\documentclass{scrreprt}
\usepackage{enumitem}
\newlist{tabenum}{enumerate}{1}
\setlist[tabenum]{label*=\arabic*.,
labelwidth=2em,
leftmargin=2em,
nosep,
before=\begin{minipage}[t]{\hsize},
after=\end{minipage}}
\usepackage{tabularx}
\usepackage[column=0]{cellspace}
\setlength{\cellspacetoplimit}{\tabcolsep}
\setlength{\cellspacebottomlimit}{\cellspacetoplimit}
\addparagraphcolumntypes{X}
% template %
\newcommand\addrow[2]{#1 & #2\\ \hline}
\newcommand\additemizedrow[2]{#1 &
\begin{tabenum}
#2
\end{tabenum}
\\ \hline}
% making stuff convenient %
\newcommand\name[1]{\addrow{Name}{#1}}
\newcommand\actor[1]{\addrow{Actor}{#1}}
\newcommand\udescription[1]{\addrow{Description}{#1}}
\newcommand\precondition[1]{\addrow{Precondition}{#1}}
\newcommand\scenario[1]{\additemizedrow{Scenario}{#1}}
\newcommand\result[1]{\addrow{Result}{#1}}
\newcommand\extensions[1]{\additemizedrow{Extensions}{#1}}
\newcommand\exceptions[1]{\additemizedrow{Exceptions}{#1}}
\newenvironment{usecase}{\tabularx{\textwidth}{|0{wl{3cm}}|0{X}|}\hline}{\endtabularx}
\setlength{\parindent}{0em}
\setlength{\parskip}{1em}
\begin{document}
\subsubsection{Example Use Case}
\begin{usecase}
\name{Some Use Case Name}
\actor{User}
\udescription{This is some very complex use case}
\precondition{X has to be true}
\scenario{
\item System show something
\item User do this
\item System do that
}
\result{Something happens}
\extensions{
\item[3a] If something do something
}
\exceptions{
\item[2.1] System message: "Nope"
\item[2.2] System message: "Bad action"
}
\end{usecase}
\end{document}