如何将命令的参数拆分到多行

如何将命令的参数拆分到多行

我已定义一个,newcommand以便为我的 LaTeX 文档创建可重复使用的“需求”组件。我遇到的问题是,似乎我需要将整个命令放在一行中,这使其非常难以阅读。

我想这样写:

\newcommand{\requirement}[5]{
    \vspace{1cm}
    \large\textsf{\textbf{#1}}

    \textsc{Type: #2 | Supported by: #3}

    \textsf{Description:}

    #4

    \textsf{Justification:}

    #5
}

\requirement
{R1: Should display available products}
{MVP}
{Interview with client}
{At the front page of the webshop there should be a grid displaying the available products.}
{Users visiting the site need a way to discover products.}

但编译时出现错误:

! Paragraph ended before \text@command was complete.
<to be read again>
                   \par
l.1348 \{R1:

目前我知道的唯一能编译的方法就是将所有内容放在一行上:

\requirement{R1: Should display available products}{MVP}{Interview with client}{At the front page of the webshop there should be a grid displaying the available products.}{Users visiting the site need a way to discover products.}

这个例子很短,有些需求可能有几百个字,这意味着一行就会长得可笑。有没有办法将参数拆分为多行命令?

编辑

由于某种原因(不要问我为什么),我忽略了我正在使用 Pandoc 编译文档的事实,通过查看这里的一些答案,似乎 Pandoc 是导致“行分割”不起作用的原因。但我还没有解决这个问题。

答案1

问题是,您在一个参数内部或两个参数之间有一个完全空白的行。完全空白的行(不计算空格)会变成\par。单个换行符会变成空格,因此这对您的参数来说没有问题(正常参数之间的空格会被忽略)。

因此,您可以将它们拆分到多行,例如:

\requirement
{R1: Should display available products}
{MVP}
{Interview with client}
{At the front page of the webshop there should be a grid displaying the available products.}
{Users visiting the site need a way to discover products.}

下面的做法同样适用:

\requirement
  {R1: Should display available products}
  {MVP}
  {Interview with client}
  {%
    At the front page of the webshop there should be a grid displaying the
    available products.%
  }
  {Users visiting the site need a way to discover products.}

(请注意,我使用 a%删除了第四个参数开始和结束处的空格,这是由换行符引起的)

并且您可以通过在空白行中放置 来忽略它%,因此以下方法同样有效,因为没有隐式\par标记(%不必是行中的第一个东西,行首的空格会被忽略,只需在行中放置 就会%删除\par):

\requirement
  %
  {R1: Should display available products}
  %
  {MVP}
  %
  {Interview with client}
  %
  {%
    At the front page of the webshop there should be a grid displaying the
    available products.%
  }
  %
  {Users visiting the site need a way to discover products.}

\large请注意,您提供的代码中的 的使用是错误的,\large如果您不想将当前组/文档的其余部分变成 ,则必须将其放入范围中\large。此外,我会\par在宏的定义中使用显式标记,而不是两个连续的换行符:

\newcommand{\requirement}[5]{%
    \vspace{1cm}%
    {\large\textsf{\textbf{#1}}\par}%
    \textsc{Type: #2 | Supported by: #3}\par
    \textsf{Description:}\par
    #4\par
    \textsf{Justification:}\par
    #5\par
}

您可能需要考虑使用description环境来输出。以下用于enumitem自定义使用的description环境。

\documentclass[]{article}

\usepackage{enumitem}

\newcommand\requirement[5]
  {%
    \vspace{1cm}%
    {\large\sffamily\bfseries#1\par}%
    \textsc{Type: #2 | Supported by: #3}\par
    \begin{description}[font=\normalfont\sffamily,nosep,style=nextline]
      \item[Description:] #4
      \item[Justification:] #5
    \end{description}%
  }

\begin{document}

\requirement
  {R1: Should display available products}
  {MVP}
  {Interview with client}
  {%
    At the front page of the webshop there should be a grid displaying the
    available products.%
  }
  {Users visiting the site need a way to discover products.}

\end{document}

在此处输入图片描述

答案2

请给予

\requirement%
{R1: Should display available products}%
{MVP}%
{Interview with client}%
{At the front page of the webshop there should be a grid 
 displaying the available products.}%
{Users visiting the site need a way to discover products.}

既然你这样做了,也请改变

\newcommand{\requirement}[5]{

\newcommand{\requirement}[5]{%

一个完整的最小工作示例 - 请注意,我在代码中添加了一些基本的管理功能 - 以及它的输出:

在此处输入图片描述

\documentclass{article}
\newcommand{\requirement}[5]{%
\begingroup
\setlength\parindent{0pt}
    \vspace{1cm}
    \par\noindent
    {\large\textsf{\textbf{#1}}\par}

    \textsc{Type: #2 | Supported by: #3}

    \textsf{Description:}

    #4

    \textsf{Justification:}

    #5
\endgroup\par\vspace{1cm}
}

\begin{document}

\requirement
{R1: Should display available products}
{MVP}
{Interview with client}
{At the front page of the webshop there should be a grid displaying the available products.}
{Users visiting the site need a way to discover products.}

\end{document}

答案3

你的代码不可能产生错误。输入以下命令几乎可以重现该错误

\requirement

{R1: Should display available products}
{MVP}
{Interview with client}
{At the front page of the webshop there should be a grid displaying the available products.}
{Users visiting the site need a way to discover products.}

另一方面,您的代码在很多方面都很薄弱。

  1. 您正在声明\large哪个将从第一次调用开始影响整个文档\requirement(仅受组端的限制)。

  2. 所有段落都受到标准缩进的影响;也许您将其设置\parindent为零,但无论如何最好说明\noindent

  3. \vspace最好发行之间段落;但是,您应该使用\addvspace,这样就不会添加到使用相同\addvspace宏定义的其他垂直空间(例如在章节标题之后)。

  4. 定义内部可以使用空行,但是它们会\par在需求中间形成分页符,而您也不希望如此。

这是修复版本。您可以在新行中输入每个参数,但保留参数之间留空行。我认为,在每个参数前留几个空格更好,这样更容易阅读代码。

我认为 1cm 不是一个好的间距,可能\bigskipamount更好。

\documentclass{article}

\newcommand{\requirement}[5]{%
  \par% <--- very important
  \addvspace{1cm}% better than \vspace in this case
  \noindent{\large\textsf{\textbf{#1}}\par}\nopagebreak
  \noindent\textsc{Type: #2 | Supported by: #3}\\*
  \textsf{Description:}\\*
  #4\\*
  \textsf{Justification:}\\*
  #5\par
}

\begin{document}

\requirement
  {R1: Should display available products}
  {MVP}
  {Interview with client}
  {At the front page of the webshop there should be a grid displaying the available products.}
  {Users visiting the site need a way to discover products.}

\end{document}

在此处输入图片描述

相关内容