条件和 arrayjobx

条件和 arrayjobx

我正在努力使用条件,下面给出了一个基本示例,它将输出所包含的表格。

代码首先定义\myletterA为 A 字符,然后是一个名为\testA、B、C 的数组。我有一个名为的函数\indenterer,我在下面的表格循环中调用它。

\documentclass[12pt]{article}
\usepackage[a6paper,landscape]{geometry}

\usepackage{arrayjobx}
\usepackage{ifthen}

\def\tand{&}

\begin{document}

\newcommand{\myletterA}{}
\newcommand{\myletterwriter}[1]{\renewcommand\myletterA{#1}}
    \myletterwriter{A}

\newarray\test
\newcommand{\indenterer}{%
    \readarray{test}{A&B&C}%writes A,B,C to array test
    \checktest(1)%reads the first value
    \cachedata%returns the value last read by \checktest
    \myletterA%returns the value stored i.e. A
    \ifx\cachedata\myletterA%
    a% \true case
    \else%
    b% false case
    \fi%
}

\newcounter{it}
\begin{tabular}{ll}%
\hline%
  \setcounter{it}{1}%
  \whiledo{\theit<4}{%
    {\indenterer} Y \tand z \\%
  \stepcounter{it}%
  }%
\end{tabular}

space
    \checktest(1)
    \cachedata
    \myletterA

\end{document}

表格的输出行应显示\cachedata\myletterA_ Y Z_ 为 a 或 b。所以我的问题是,为什么此代码始终执行错误的情况(请注意字母 b 而不是 a),即使\cashdata\myletterA扩展都给出相同的结果?

在此处输入图片描述

答案1

这很简单;-)

\newcommand{\myletterwriter}[1]{\renewcommand\myletterA{#1}}

\myletterA\long,而\cachedata用 定义,\def这使其成为非\long

做就是了

\newcommand{\myletterwriter}[1]{\renewcommand*\myletterA{#1}}

在此处输入图片描述

相关内容