如果价值无缘无故发生变化

如果价值无缘无故发生变化

我正在尝试创建一个水平枚举环境,每行有 3 个项目。如示例中所示,\ifferstitem条件似乎毫无理由地从 FALSE 变为 TRUE(至少对我来说)。我怀疑存在一个有关条件值的深奥程序,但我在通常的 TEX 书籍中没有找到任何内容。

A。我的代码有什么问题?

B.由于我不熟练使用宏,有没有更好的方法来实现这个?(例如,我觉得\taband可以避免使用命令)

\documentclass[11pt]{article}
\begin{document}
\newcounter{tabi}\stepcounter{tabi}
\newcounter{tabirow}
\newif \iffirstitem
\firstitemtrue 
 \newcommand{\taband}{&}
 \newcommand{\addand}{\iffirstitem \firstitemfalse TruetoFalse
                 \else\taband \& Added
                 \fi}
%If 3 items in the row then change row and reset tabirow
\newcommand{\hitem}{\ifnum \thetabirow<3  
                                    \addand 
                                    \hbox to 3em{\hfil \roman{tabi}) \thetabirow}
                                    \stepcounter{tabi}
                                    \stepcounter{tabirow}
                \else 
                                    \\[2ex]
                                    \firstitemtrue
                                    \setcounter{tabirow}{0} 
                                    \addand 
                                    \hbox to 3em{\hfil \roman{tabi})         \thetabirow}
                                    \stepcounter{tabi}
                                    \stepcounter{tabirow}
                \fi
           }
\newenvironment{henumerate}[1]
    {    \setcounter{tabi}{1}
        \setcounter{tabirow}{0}
        \begin{tabular}{| l | l | l |}
        \hline
    }
    {\\\hline
     \end{tabular}
}

\begin{henumerate}{5}
\hitem First 
\hitem Second 
\hitem Wrong
\hitem D
\hitem E
\hitem F
\hitem G
\hitem H
\end{henumerate}
\\

\end{document}

在此处输入图片描述

答案1

您正在更改表格单元格内的条件值。TeX 中的表格单元格是组,因此其中的本地赋值仅在&(或\\)之前有效。

您可以通过进行分配来更改此设置。只需在每个and之前\global添加:\global\firstitemtrue\firstitemfalse

\documentclass[11pt]{article}
\begin{document}
\newcounter{tabi}\stepcounter{tabi}
\newcounter{tabirow}
\newif \iffirstitem
\global\firstitemtrue 
 \newcommand{\taband}{&}
 \newcommand{\addand}{\iffirstitem \global\firstitemfalse TruetoFalse
                 \else\taband \& Added
                 \fi}
%If 3 items in the row then change row and reset tabirow
\newcommand{\hitem}{\ifnum \thetabirow<3  
                                    \addand 
                                    \hbox to 3em{\hfil \roman{tabi}) \thetabirow}
                                    \stepcounter{tabi}
                                    \stepcounter{tabirow}
                \else 
                                    \\[2ex]
                                    \global\firstitemtrue
                                    \setcounter{tabirow}{0} 
                                    \addand 
                                    \hbox to 3em{\hfil \roman{tabi})         \thetabirow}
                                    \stepcounter{tabi}
                                    \stepcounter{tabirow}
                \fi
           }
\newenvironment{henumerate}[1]
    {    \setcounter{tabi}{1}
        \setcounter{tabirow}{0}
        \begin{tabular}{| l | l | l |}
        \hline
    }
    {\\\hline
     \end{tabular}
}

\begin{henumerate}{5}
\hitem First 
\hitem Second 
\hitem Wrong
\hitem D
\hitem E
\hitem F
\hitem G
\hitem H
\end{henumerate}
\\

\end{document}

导致您使用的问题\taband在处理 TeX 条件时很常见:对于哪些代码可以出现在 then 和 else 块中有一些限制。这可以通过改用bools from 来避免etoolbox

\documentclass[11pt]{article}
\usepackage{etoolbox}
\begin{document}
\newcounter{tabi}\stepcounter{tabi}
\newcounter{tabirow}
\newbool{firstitem}
\global\booltrue{firstitem}
\newcommand{\addand}{%
  \ifbool{firstitem}%
    {\global\boolfalse{firstitem}TruetoFalse}%
    {&\& Added}%
}
%If 3 items in the row then change row and reset tabirow
\newcommand{\hitem}{\ifnum \thetabirow<3  
                                    \addand 
                                    \hbox to 3em{\hfil \roman{tabi}) \thetabirow}
                                    \stepcounter{tabi}
                                    \stepcounter{tabirow}
                \else 
                                    \\[2ex]
                                    \global\booltrue{firstitem}
                                    \setcounter{tabirow}{0} 
                                    \addand 
                                    \hbox to 3em{\hfil \roman{tabi})         \thetabirow}
                                    \stepcounter{tabi}
                                    \stepcounter{tabirow}
                \fi
           }
\newenvironment{henumerate}[1]
    {    \setcounter{tabi}{1}
        \setcounter{tabirow}{0}
        \begin{tabular}{| l | l | l |}
        \hline
    }
    {\\\hline
     \end{tabular}
}

\begin{henumerate}{5}
\hitem First 
\hitem Second 
\hitem Wrong
\hitem D
\hitem E
\hitem F
\hitem G
\hitem H
\end{henumerate}
\\

\end{document}

相关内容