这实际上是一个独立的后续问题解决 \scantokens 中打开 lualatex 错误的办法?。
我尝试使用并希望它能够像我直接在 TeX 中tex.print("<some tex macro>{<something with a newline inside>}")
输入内容一样工作。tex.print
更确切地说,我尝试写
\pgfplotstabletypeset{A B
2 3
4 5
}
在 里面tex.print
。全部动机都在链接的问题中。无论我怎么尝试,我都无法获得与在 TeX 中输入的(强制)换行符相同的处理。
所以,问题是:我如何使用tex.print
Lua 来获得与直接将内容写入 TeX 相同的效果?
以下是我尝试过的列表。也许我忽略了一些或多或少显而易见的事情。您会看到我从一些琐碎的事情开始(打印两个空行来生成一个段落),看看如何处理这个问题:
\documentclass{article}
\usepackage{pgfplotstable}
\begin{document}
\parskip=20pt
\parindent=0pt
\expandafter\ifx\csname directlua\endcsname \relax \else
\directlua {tex.enableprimitives('',tex.extraprimitives ())}
%
% using tex.print(42, ...) does not make a difference:
%\savecatcodetable 42
\fi
This is what I would like to generate -- from within LUA:
\pgfplotstabletypeset{A B
2 3
4 5
}
FAIL:
\def\n{\noexpand\n}
Here is a lua paragraph\directlua{tex.print("\n\n")}And here is the rest.
GOOD:
Here is a lua paragraph\directlua{tex.print("", "")}And here is the rest.
FAIL:
Here is a lua paragraph\directlua{tex.sprint("", "")}And here is the rest.
FAIL:
\directlua{
% FAILS: the newline appears to have some strange catcode- and is
% reported in a different way
%tex.print("\noexpand\\pgfplotstabletypeset{A B\n 2 3\n 4 5\n}")
}
FAIL:
\directlua{
% FAILS: the newline appears to have some strange catcode- and is
% reported in a different way
%tex.sprint("\noexpand\\pgfplotstabletypeset{A B\n 2 3\n 4 5\n}")
}
FAIL:
\directlua{%
%
% FAILS: the curly brackets do not match, it interpretes
% \pgfplotstabletypeset{A B
%
% as first statement and does not see the rest
%tex.print("\noexpand\\pgfplotstabletypeset{A B", "2 3", "4 5}")
}
FAIL:
\directlua{%
%
% FAILS: the curly brackets do not match, it interpretes
% \pgfplotstabletypeset{A B
%
% as first statement and does not see the rest
%tex.sprint("\noexpand\\pgfplotstabletypeset{A B", "2 3", "4 5}")
}
\end{document}
我取消了导致编译失败的项目的注释。
需要注意的是,\pgfplotstabletypeset
将换行符的类别代码重新定义为 12(其他),然后执行操作。我猜这就是导致问题的原因(与 Lua 的 catcodetables 结合使用)。
答案1
一次调用会tex.print
产生一行输入,因此你必须每行调用一次。例如,要获取两个换行符,请执行
Here is a Lua paragraph\directlua{tex.print("") tex.print("")}And here is another one.
在这些行之前发出\tracingall
表明确实有一个\par
,而不是两个。
对于表格来说也是如此:
\documentclass{article}
\usepackage{pgfplotstable}
\begin{document}
\directlua{tex.print("\string\\pgfplotstabletypeset{A B")
tex.print("2 3")tex.print("4 5")tex.print("}")}
\end{document}