简单的新命令引发的争论

简单的新命令引发的争论

我有这个宏:

\newcommand\myvspace[1][]{
  \foreach \i in {1,...,#1} {
    \hfill \break
  }
}

我只是想创建一些空白,所以我像这样使用它:

foo
\myvspace{3}
bar

但是我收到了这个错误。

Runaway argument?
ndefined\let \pgffor@dotsend =\pgffor@dotsvalue \pgffor@dots@value@process \ETC
.
! Paragraph ended before \pgffor@@dotscharcheck was complete.
<to be read again>
                   \par
l.120

尚不确定如何调试,这是迄今为止我的第一个宏 :)。不确定如何修复它。

答案1

您已创建了一个包含一个默认为空的可选参数的宏。默认值在第二对括号中给出。

目前尚不完全清楚您想要的行为是什么,但这至少可以修复您的错误。

\documentclass{article}
\usepackage{pgffor}

\newcommand\myvspace[1]{%
  \foreach \i in {1,...,#1} {%
    \hfill \break
  }%
}
\begin{document}

foo
\myvspace{3}
bar
\end{document}

我禁不住认为您应该使用\vspace\vspace*\\

也许类似

\newcommand*\myvspace[1]{%
  \\[#1\baselineskip]%
}

但是可选参数用于额外的空间,因此您需要使用它\myvspace{2}来实现您的效果。(或者,您可以做一些数学运算并减去一个。)

相关内容