我想newif
在循环中使用定义一组条件。循环变量应该成为条件名称的一部分。但是,当我尝试设置条件以及在一个循环中定义多个条件时,我遇到了麻烦。
当我尝试使用相同的代码结构定义第二个条件时,最终出现以下错误:Missing \endcsname inserted.
。尝试设置 if 条件时也会发生同样的情况。
梅威瑟:
\documentclass{article}
\makeatletter
\count@=0
\loop
\advance\count@ 1
\expandafter\newif\csname ifrst@onlyheight\@Alph\count@\endcsname%
%\expandafter\newif\csname ifrst@onlywidth\@Alph\count@\endcsname%
%\csname rst@onlyheight\@Alph\count@ true\endcsname
\csname rst@onlyheightAtrue\endcsname
\ifnum\count@<6
\repeat
\makeatother
\begin{document}
More code here.
\end{document}
答案1
\count@
在处理过程中设置\newif
:
% latex.ltx, line 910:
\def\newif#1{%
\count@\escapechar \escapechar\m@ne
\let#1\iffalse
\@if#1\iftrue
\@if#1\iffalse
\escapechar\count@}
改用\@tempcnta
。
不同的循环:
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\int_step_inline:nnnn { 1 } { 1 } { 5 }
{
\exp_args:Nc \newif { ifrst@onlyheight \int_to_Alph:n { #1 } }
\exp_args:Nc \newif { ifrst@onlywidth \int_to_Alph:n { #1 } }
\use:c { rst@onlywidth \int_to_Alph:n { #1 } true }
}
\ExplSyntaxOff
\begin{document}
\makeatletter\ttfamily\noindent
\meaning\ifrst@onlyheightA \\
\meaning\ifrst@onlyheightB \\
\meaning\ifrst@onlyheightC \\
\meaning\ifrst@onlyheightD \\
\meaning\ifrst@onlyheightE \\
\meaning\ifrst@onlywidthA \\
\meaning\ifrst@onlywidthB \\
\meaning\ifrst@onlywidthC \\
\meaning\ifrst@onlywidthD \\
\meaning\ifrst@onlywidthE
\makeatother
\end{document}