如何使用 luacode* 来消除转义“\”的需要?

如何使用 luacode* 来消除转义“\”的需要?

我正在努力尝试理解如何实际使用luacode*环境,这样我就不必\在发送给 Tex 之前转义 Lua 构建的字符串中的所有字符。

luacode*使用vs.的全部意义luacode在于,在将内部 lua 字符串发送给 Tex 之前,不必对其进行转义\。根据下表https://www.ctan.org/pkg/luacode?lang=en

enter image description here

但在创建字符串并使用时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}

Mathematica graphics

我看过了我应该将哪个 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}

根据我的经验,双括号内的新行会出现问题,因此我会避免使用它们。

相关内容