传递给 scaleBox 的宏的扩展

传递给 scaleBox 的宏的扩展

我试图在宏中计算一些宽度,并将该宏用于scalebox。然而,当我尝试将宏传递给 scalebox 时,我得到了大量错误。

最小示例:

\documentclass{article}

\usepackage{pgf}

\newcounter{Counter}
\setcounter{Counter}{1}

\newcommand{\testOk}{1}
\newcommand{\testFail}{
 \theCounter
 \stepcounter{Counter}
}


\setlength\parindent{0pt}
\begin{document}
  \testFail %ok
  \scalebox{\testFail}{a} %ok
  \scalebox{\testFail}{a} %fails
\end{document}

更新

因为我想在新的环境中透明地使用 scalebox,所以我决定尝试 Steven B. Segletes 指出的方法。重新定义宏以首先执行宏扩展,然后使用该值调用底层宏。我试过:

\newenvironment{imageRow}{
 \begingroup\imageRow@reset
 \LetLtxMacro{\oldScalebox}{\scalebox}
 \renewcommand{\scalebox}[2]{
    \edef\tmpValue{##1}
    \oldScalebox{\tmpValue}{##2}
 }
}{
 \imageRow@complete\endgroup
}

但是我不断收到“缺少 endcsname”错误。(并且随后出现洪水)。

如果这很重要的话,这是我当前尝试作为第一个参数传递的函数:

\newcommand{\getIt}{%
    \stepcounter{imageRow@getCount}%
    %   
    \expandafter\ifx\csname imageRow@scale@Image@\theimageRow@rowCount @\alph{imageRow@getCount}\endcsname\relax
        1%
        \PackageWarning{imageRow}{Return to get correct scaling factors.}%
    \else
        \csname imageRow@scale@Image@\theimageRow@rowCount @\alph{imageRow@getCount}\endcsname\relax
    \fi
}

答案1

引入\tfscalebox,以便计数器索引发生在\scalebox参数之外。

\documentclass{article}

\usepackage{pgf}

\newcounter{Counter}
\setcounter{Counter}{1}

\newcommand{\testOk}{1}

\newcommand\tfscalebox[1]{\scalebox{\arabic{Counter}}{#1}\stepcounter{Counter}}

\setlength\parindent{0pt}
\begin{document}
  \tfscalebox{a} %ok
  \tfscalebox{a} %ok
  \tfscalebox{a} %ok
\end{document}

在此处输入图片描述

\scalebox如果您希望宏在决定输出或增加之前执行测试Counter,那么您可以始终将第二个参数传递给要测试的宏。 下面,我将其作为可选参数[F]来减少比例:

\documentclass{article}
\usepackage{pgf}
\newcounter{Counter}
\setcounter{Counter}{1}
\newcommand\tfscalebox[2][T]{\scalebox{\arabic{Counter}}{#2}%
  \if#1F\addtocounter{Counter}{-1}\else\stepcounter{Counter}\fi%
  \if0\arabic{Counter}\stepcounter{Counter}\fi}
\setlength\parindent{0pt}
\begin{document}
  \tfscalebox{a} %ok
  \tfscalebox{b} %ok
  \tfscalebox{c} %ok
  \tfscalebox[F]{d} %ok
  \tfscalebox[F]{e} %ok
  \tfscalebox{a} %ok
  \tfscalebox[F]{e} %ok
  \tfscalebox[F]{e} %ok
  \tfscalebox[F]{e} %ok
  \tfscalebox[F]{e} %ok
\end{document}

在此处输入图片描述

相关内容