使用 LuaLaTeX 进行编译时 xkeyval 包和特殊字符的问题

使用 LuaLaTeX 进行编译时 xkeyval 包和特殊字符的问题

以下是文档的代码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 .. " " .. fltextreturn 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遇到这样的问题:所有关键设置都会丢失,因此&仅在行的第一个单元格中可用。

相关内容