以下是文档的代码myfile.tex
。
\documentclass{article}
\usepackage{test}
\begin{document}
\begin{tabular}{|ccc|c|c|}
\myPrint[trtext=Yes, fltext=No]{p,q,r}{stu} \\
\end{tabular}
\end{document}
以下是test.sty
文件的代码。
\ProvidesPackage{luatruthtables}
\RequirePackage{xkeyval}
\RequirePackage{luacode}
\begin{luacode*}
function test(x,y,trtext,fltext)
trtext= trtext or "Tr"
fltext = fltext or "Fl"
return x .. " " .. y .. " " .. trtext .. " " .. fltext
end
\end{luacode*}
% ========= KEY DEFINITIONS =========
\define@key{someop}{trtext}{\def\mop@type{#1}}
\define@key{someop}{fltext}{\def\mop@truncate{#1}}
% ========= KEY DEFAULTS =========
\setkeys{someop}{trtext=Tr,fltext=Fl}%
% ========= Defining Command =========
\newcommand{\myPrint}[3][]{%
\begingroup%
\setkeys{someop}{#1}
\directlua{tex.sprint(test(\luastringN{#2},\luastringN{#3},"\mop@type","\mop@truncate"))}
%
\endgroup%
}
\endinput
它工作正常。但是,当我逐行更改时return x .. " " .. y .. " " .. trtext .. " " .. fltext
,return x .. " & " .. y .. " " .. trtext .. " " .. fltext
它会抛出错误! Extra }, or forgotten \endgroup.
。请注意,我只是&
在代码中添加内容。这会导致错误吗?
答案1
一个更简单的例子
\documentclass{article}
\begin{document}
\begin{tabular}{cc}
\begingroup x & y \endgroup
\end{tabular}
\end{document}
这给出了错误
! Extra }, or forgotten \endgroup.
<template> \unskip \hfil }
\hskip \tabcolsep \endtemplate
l.6 \begingroup x &
y \endgroup
?
由于表格单元格是一个组,因此您不能以 结束以 开始的组\begingroup
,也不能以结束&
以 开始的组。&
\endgroup
在这种情况下,只需删除\begingroup\endgroup
他发布的修复,但这取决于为什么在你的实际代码中拥有该组。
您还会\begingroup
遇到这样的问题:所有关键设置都会丢失,因此&
仅在行的第一个单元格中可用。