期望行为

期望行为

期望行为

这款乳胶:

\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。为了修复第一列的宽度,我wlarray包中使用了它,而包又已通过 加载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}

相关内容