我正在努力尝试理解如何实际使用luacode*
环境,这样我就不必\
在发送给 Tex 之前转义 Lua 构建的字符串中的所有字符。
luacode*
使用vs.的全部意义luacode
在于,在将内部 lua 字符串发送给 Tex 之前,不必对其进行转义\
。根据下表https://www.ctan.org/pkg/luacode?lang=en
但在创建字符串并使用时tex.print
,Latex 会出错。所以我做错了什么,或者我不了解这方面的一些基本知识。
这是 MWE
\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
i=6
j=8
tex.print("\begin{tabular}{|l|l|}\hline")
tex.print(i.."&"..j)
tex.print("\\\hline")
tex.print("\end{tabular}")
\end{luacode*}
\end{document}
lualatex foo.tex
给出
(./foo1.aux)
! LuaTeX error [\directlua]:3: invalid escape sequence near '\h'.
\luacode@dbg@exec ...code@maybe@printdbg {#1} #1 }
l.13 \end{luacode*}
只有当逃避所有它\
才有效:
\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
i=6
j=8
tex.print("\\begin{tabular}{|l|l|}\\hline")
tex.print(i.."&"..j)
tex.print("\\\\ \\hline")
tex.print("\\end{tabular}")
\end{luacode*}
\end{document}
我看过了在我应该将哪个 lua 环境与 luatex 一起使用 - lualatex和从 luacode 环境打印反斜杠并且没有看到此问题的解决方案。即如何按原样编写上述代码,而无需转义\
或进行任何其他特殊处理。因为这应该是使用的全部要点luacode*
。我不想在外部文件中编写代码。我需要按上面所示进行处理,但要避免转义\
。
使用 TL 2015。
*File List*
article.cls 2014/09/29 v1.4h Standard LaTeX document class
size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
luacode.sty 2012/01/23 v1.2a lua-in-tex helpers (mpg)
ifluatex.sty 2010/03/01 v1.3 Provides the ifluatex switch (HO)
luatexbase.sty 2013/05/11 v0.6 Resource management for the LuaTeX macro progr
ammer
luatex.sty 2010/03/09 v0.4 LuaTeX basic definition package (HO)
infwarerr.sty 2010/04/08 v1.3 Providing info/warning/error messages (HO)
etex.sty 2015/03/02 v2.1 eTeX basic definition package (PEB,DPC)
luatex-loader.sty 2010/03/09 v0.4 Lua module loader (HO)
luatexbase-compat.sty 2011/05/24 v0.4 Compatibility tools for LuaTeX
luatexbase-modutils.sty 2013/05/11 v0.6 Module utilities for LuaTeX
luatexbase-loader.sty 2013/05/11 v0.6 Lua module loader for LuaTeX
luatexbase-regs.sty 2011/05/24 v0.4 Registers allocation for LuaTeX
luatexbase-attr.sty 2013/05/11 v0.6 Attributes allocation for LuaTeX
luatexbase-cctb.sty 2013/05/11 v0.6 Catcodetable allocation for LuaTeX
luatexbase-mcb.sty 2013/05/11 v0.6 Callback management for LuaTeX
***********
(网上关于如何在 Latex 内部使用 lua 的例子太少了)
答案1
在 Lua 本身中, 内的反斜杠也是一个转义字符"..."
。 替换"..."
为[[...]]
。 后者\
不再是转义字符:
\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
i=6
j=8
tex.print([[\begin{tabular}{|l|l|}\hline]])
tex.print(i.."&"..j)
tex.print([[\\ \hline]])
tex.print([[\end{tabular}]])
\end{luacode*}
\end{document}
根据我的经验,双括号内的新行会出现问题,因此我会避免使用它们。