我不明白为什么我不能在插入 tex 文档的 lua 代码中插入换行符。如果我这样做,我会得到错误
! LaTeX Error: Missing \begin{document}.
梅威瑟:
文件test.lua
:
tex.print("\\usepackage{tikz}\n\\usetikzlibrary{calc}")
文件test.tex
:
\documentclass{article}
\usepackage{lipsum}
\directlua{dofile("test.lua")}
\begin{document}%
\lipsum[1-20]
\end{document}
用 编译lualatex test.tex
。
答案1
Lua 所认识的字符\n
在 TeX 中被称为^^J
。它的类别代码为 12(其他),因此当 TeX 在定义或类似内容之外遇到它时,它会尝试对其进行排版。由于 LaTeX 不允许在序言内进行排版,因此您会收到您注意到的错误。
如果你读过tex.print
LuaTeX 手册,你可能会注意到这一点:
每个字符串参数都被 TEX 视为单独的输入行。
因此,你可以通过以下方式实现你(可能)想要的
tex.print("\\usepackage{tikz}","\\usetikzlibrary{calc}")
但是,这完全没有必要,因为将这两个命令放在同一行就可以了。
在 TeX 世界中,您可能想用\n
( 来\r
替换^^M
),但这也行不通,因为 TeX 现在将看到一行中间有一个结束符。这会导致 TeX 完全忽略行的其余部分,这几乎肯定不是您想要的。