在我正在处理的包中的一个函数中,我试图添加以下行:
\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 的一般特性。