luatex 并启动处理换行符的 TeX 宏

luatex 并启动处理换行符的 TeX 宏

这实际上是一个独立的后续问题解决 \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.printLua 来获得与直接将内容写入 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}

相关内容