如何在另一个命令中的 \foreach 循环中传递格式化的数字?

如何在另一个命令中的 \foreach 循环中传递格式化的数字?

我希望你们中有人能帮助我解决以下问题。在过去的几个小时里,我读了很多关于在结果再次使用之前扩展命令的帖子,但我仍然无法实现我的目标。

我的问题是,我有一个带有 2 个输入参数的自定义命令\printConvTablesd{"FileName"}{"Number"},该命令会根据输入导入一个表。在命令内部,它看起来类似于此\input{dri1/dir2/FileName_someotherStuff_Number}"Number"然后也用于表的标签,因此标签遵循输入。

当且仅当我插入两个输入参数的硬编码值时,此命令才会按预期工作。

我的想法是建立一个循环,以使文档更清晰,更容易更改,因为我需要多次使用循环。

最佳输出看起来类似于此:

\foreach \Name in {Name1,Name2,...}
{
    \foreach \n in {0.05,0.10,0.55}
    {
        def\d\num[round-mode=places,round-precision=2]{\n}
        \printConvTablesd{\Name}{\d}
    }
}

由于我需要一种特殊的格式来导入表格文件,因此需要-command \num。这段代码会产生以下错误缺少插入 \endcsname...

如果我稍微修改一下代码,使其看起来像下面这样,它就可以正常工作:

\foreach \Name in {Name1,Name2,...}
{
    \printConvTablesd{\Name}{0.05}
    \printConvTablesd{\Name}{0.10}
    ...
    \printConvTablesd{\Name}{0.50}
}

所以我猜问题发生的原因是第二个参数是作为命令序列而不是命令的结果传递的\num[...]{...}。我还猜测我需要在之前进行某种形式的代码扩展

如果你们能帮我解决这个问题,我将不胜感激。如果需要更多信息,请告诉我。

答案1

\foreach使用该符号时可能会出现一些舍入误差...pgf手动的(参见章节83 重复的事情:Foreach 语句)。但是,这里似乎没有必要这样做,因为枚举相当简单:

\documentclass{article}

\usepackage{pgffor}

\newcommand{\printConvTablesd}[2]{%
  \par
  1: #1; 2: #2
}

\begin{document}

\foreach \Name in {Name1,Name2,Name4,Name10}
{%
  \foreach \Num in {5,10,...,55}
  {%
    % https://tex.stackexchange.com/q/56207/5764
    \printConvTablesd{\Name}{0.\ifnum\Num<10 0\fi\Num}%
  }%
}

\end{document}

您对两位数的需求可以通过在0if \Numis前添加一个前缀来解决5。请参见如何将一位数转换为两位数

相关内容