文档(LuaLaTeX)中的小页面(在 lua 脚本中创建)存在问题

文档(LuaLaTeX)中的小页面(在 lua 脚本中创建)存在问题

我想让每个区块都包含一个问题minipage

在创建minipage函数时printall出现错误: Extra \endgroup. \print, Too many }'s. \print ...

如何修复?

梅威瑟:

% !TeX program = lualatex
% !TeX encoding = utf-8
%============================================================================================
\documentclass[14pt]{extarticle}
\usepackage{polyglossia}
%==========================================================
\usepackage{amsmath,amssymb}
\usepackage{unicode-math}
%==========================================================
\setdefaultlanguage[spelling=modern]{russian}
\setotherlanguage{english}
\defaultfontfeatures{Ligatures={TeX}}
\setmainfont{Times New Roman}
\newfontfamily{\cyrillicfont}{Times New Roman}
\setsansfont{Arial}
\newfontfamily{\cyrillicfontsf}{Arial}
\setmonofont{Courier New}
\newfontfamily\cyrillicfonttt[Script=Cyrillic]{Courier New}
%==========================================================
\usepackage[tracking=true]{microtype}
\microtypecontext{kerning=russian}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{hyperref}
\hypersetup{%
    pdfencoding=auto
}
\usepackage[a4paper, left=25mm, right=20mm, top=20mm, bottom=20mm]{geometry}
\usepackage{indentfirst}
\usepackage{luacode}
%==========================================================
\begin{luacode*}
function createtbl()
    tbl=tbl or {}
    table.insert(tbl, {q="Какое из свойств \\textbf{реляционной алгебры} представлено далее?\\par \\begin{equation*} \\begin{aligned}U(U(R, S), T) &\\rightarrow U(R, U(S, T)) \\\\ CP(CP(R, S), T) &\\rightarrow CP(R, CP(S, T)) \\\\ J_{F_2}(J_{F_1}(R, S), T)&\\rightarrow J_{F_1}(R, J_{F_2}(S, T)) \\end{aligned} \\end{equation*}",
    a=2,
    [1]="{=1}~Коммутативность",
    [2]="{=2}~Ассоциативность бинарных операций",
    [3]="{=3}~Идемпотентность унарных операций",
    [4]="{=4}~Дистрибутивность бинарных операций между бинарными",
    [5]="{=5}~Факторизация унарных операций"
    })

    table.insert(tbl, {q="С помощью какого тега в \\textbf{XML} объявляют пространства имен?",
    a=1,
    [1]="{=1}~xmlns",
    [2]="{=2}~xhtml",
    [3]="{=3}~xmlds",
    [4]="{=4}~xslns"
    })
    tex.print("\\newcommand{\\nvopr}{" .. #tbl .. "}")
end

function printall(arr)
    local ans = "["
--  tex.print("\\medskip\\noindent\\hrule height 1pt\\medskip")
    tex.print("\\noindent\\fbox{\\begin{minipage}[c]{\\dimexpr\\linewidth-1ex\\relax}")
    for i,n in ipairs(arr) do
        ans = ans .. n.a .. ","
        tex.print("\\noindent", i .. ".", n.q, "\\par")
        tex.print("\\begin{Form}")
        for j = 1, #n do
            local s = "\\ChoiceMenu[radio, borderwidth=0.5pt, bordercolor=black, radiosymbol=\\ding{52}, name=button" .. i .. "]{}" .. n[j]
            if j == #n then s = s .. ".\\par"
            else s = s .. ";\\par"
            end
            tex.print(s)
        end
        tex.print("\\end{Form}")
        tex.print("\\end{minipage}}")
--      tex.print("\\medskip\\noindent\\hrule height 1pt\\medskip")
    end
    ans = ans:sub(1, ans:len()-1) .. "]"
    tex.print("\\newcommand{\\answer}{" .. ans .. "}")
end
\end{luacode*}
%==========================================================
\def\print{\directlua{printall(tbl)}}
\makeatletter
\def\DefaultHeightofChoiceMenu{3mm}
\def\DefaultWidthofChoiceMenu{4mm}
\makeatother
\begin{document}
%==========================================================
\directlua{createtbl()}
\print
\centerline{\textcolor{red}{minipage works:}}
\noindent\fbox{\begin{minipage}[c]{\dimexpr\linewidth-1ex\relax}
1111\par
1223\\
12232
\end{minipage}}
%==========================================================
\end{document}

结果有错误:

在此处输入图片描述

答案1

如果你在主函数中将tex.print其更改为print,你就会看到它所写的内容

\noindent
\fbox{\begin{minipage}[c]{\dimexpr\linewidth-1ex\relax}
\noindent
1.      Какое из свойств \textbf{реляционной алгебры} представлено далее?\par
\begin{equation*} \begin{aligned}U(U(R, S), T) &\rightarrow U(R, U(S, T)) \\ CP(CP(R, S), T) &\rightarrow CP(R, CP(S, T)) \\ J_{F_2}(J_{F_1}(R, S), T)&\rightarrow J_{F_1}(R, J_{F_2}(S, T)) \end{aligned}
\end{equation*}\par
\begin{Form}
\end{Form}
\end{minipage}}
\noindent       2.      С помощью какого тега в \textbf{XML} объявляют пространства имен?       \par
\begin{Form}
\end{Form}
\end{minipage}}
\newcommand{\answer}{[2,1]}

因此,您开始一个minipage但结束两个,因此出现错误。

我怀疑你是故意的

tex.print("\\end{minipage}}

位于 之后end,因此位于循环之外。

相关内容