空格宏

空格宏

我想要一个宏,如果像这样调用,它会产生 N 个空格

\mulspc{3} % Produces exactly 3 spaces

\newcommand{\mulspc}[1]{
    \newcounter{ctra}
    \setcounter{ctra}{0}
    \whiledo {\value{ctra} < #1}%
    {
      \hspace*{2mm}
      \stepcounter{ctra}
    }
}

但是我遇到了一个问题,如果我调用零次,这个宏不会在表格单元格中产生 0mm 间距(就在单元格的开头!)\multspc{0}。总是会有一些缩进,但这是从哪里来的呢?

我需要这个宏来在表格单元格中缩进一些算法,它很讨厌,但手动格式化给了我在长表中最好的结果,因为它有多页长......

感谢您的帮助!

答案1

不需要使用循环:

\newlength\Unit
\setlength\Unit{2mm}
\newcommand\mulspc[1]{\hspace*{#1\Unit}}
        
        
        


foo\mulspc{4}bar

答案2

当前宏的问题在于,由于缩进,它添加了不必要的空格。添加一些%行尾来消除这些空格。但是,当前定义在使用\mulspc多次后也会产生警告。这是因为计数器定义\newcounter{ctra}包含在内\newcommand{\mulspc}。而是定义计数器外部宏定义。另一个缺点是,提供的空间\mulspc{0}应该不存在,即使您添加以删除不需要的空格,事实并非如此%。例如,代码:

\documentclass{article}
\usepackage{xifthen}
\newcounter{ctra}%
\newcommand{\mulspc}[1]{
    \setcounter{ctra}{0}%
    \whiledo {\value{ctra} < #1}%
    {\hspace*{2mm}\stepcounter{ctra}}%
}
\begin{document}

\fbox{\mulspc{0}}% Zero spaces

\fbox{}% Empty \fbox

\fbox{\mulspc{1}} % One space

\fbox{\mulspc{3}} % Produces exactly 3 spaces

\end{document}

生成:

\mulspc 中不需要的间距

为了消除这种间距,您可以对传递给的参数使用条件\mulspc

\newcommand{\mulspc}[1]{
  \ifthenelse{#1>0}{%
    \setcounter{ctra}{0}%
    \whiledo {\value{ctra} < #1}%
    {\hspace*{2mm}\stepcounter{ctra}}%
  }{\unskip}%
}

\unskip如果传递的参数值小于,则提供以下内容1。这将产生:

\mulspc 中不需要的空格消失了


另一种选择是使用multido包裹,并定义(比如)

\usepackage{multido}% A loop facility for Generic TeX
...
\newcommand{\Mulspc}[1]{%
  \multido{\iA=0+1}{#1}{\hspace*{2mm}}%
}

您可以以类似的方式使用它,并且代码更加简洁。

答案3

eTeX 现在随时可用,因此你可以简单地使用

\newcommand\mulspc[1]{\hspace*{#1\dimexpr2mm}}

相关内容