LuaTeX 中的函数定义中的 \newif

LuaTeX 中的函数定义中的 \newif

在我正在处理的包中的一个函数中,我试图添加以下行:

\expandafter\newif\csname ifgre@scale@#1\endcsname%

现在,这在 LuaLaTeX 下运行良好,但该包应该在 LuaLaTeX 和 LuaTeX 下兼容,当我尝试在 LuaTeX 中编译文档时,出现以下错误:

! Forbidden control sequence found while scanning definition of \grechangedim.
<inserted text> 
}
<to be read again> 
\newif 
l.828           \expandafter\newif
                         \csname ifgre@scale@#1\endcsname%
? 

是否存在与 PlainTeX 兼容的方法在函数内创建新的条件?

LuaLaTeX 消息格式:

\documentclass[11pt]{article}

\usepackage{testing}

\begin{document}
\grechangedim{test}
Hello.
\end{document}

LuaTeX MWE:

\pdfpagewidth210mm
\pdfpageheight297mm
\input testing-input.tex
\grechangedim{test}
Hello.
\bye

测试.sty:

% ------IDENTIFICATION------
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{testing}
% For testing package code.

% ------INITIAL CODE------

% ------DECLARATION OF OPTIONS------

% ------EXECUTION OF OPTIONS------
\ProcessOptions

% ------PACKAGE LOADING------

% ------MAIN CODE------

\AtBeginDocument{}

\AtEndDocument{}

\input testing-input.tex

测试输入.tex:

\def\grechangedim#1{%
    \expandafter\newif\csname ifgre@scale@#1\endcsname%
}

答案1

该命令\newif在纯 TeX 中是“外部”的:它不能出现在任何其他宏内。但是,\csname newif\endcsname可以出现,因此您可以执行

\csname newif\expandafter\endcsname\csname ifgre@scale@#1\endcsname

一切都会好起来。这不是 LuaTeX 独有的:这是使用 plain 的一般特性。

相关内容