为什么 lua 多行字符串 [[ ]] 无法从 Lua 转换到 Latex?

为什么 lua 多行字符串 [[ ]] 无法从 Lua 转换到 Latex?

lua支持多行字符串

Mathematica 图形

我需要将这样的字符串从 Lua 发送回 Latex。我首先使用 lua 验证了代码是否有效独立引擎

Mathematica 图形

但 lualatex 不喜欢某些东西。这是 MWE

\documentclass[11pt]{article}
\IfFileExists{luatex85.sty}
{\usepackage{luatex85}}{}

\usepackage{amsmath}
\usepackage{luacode}

\begin{luacode}

  function foo(arg)
  local x = [[\\begin{align*}
              x &=y\\\\
              z &=r\\\\
             \\end{align*}
            ]]
  tex.print(x)
  end
\end{luacode}
\begin{document}

\directlua{foo()}
\end{document}

错误是

(/usr/local/texlive/2016/texmf-dist/tex/luatex/ctablestack/ctablestack.sty)))
No file foo7.aux.

! LaTeX Error: There's no line here to end.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.22 \directlua{foo()}

? 

将其作为长字符串打印在一行上时有效:

\begin{luacode}    
      function foo(arg)
      local x = "\\begin{align*} x &=y\\\\ z &=r\\\\ \\end{align*}"
      tex.sprint(x)
      end
\end{luacode}

如果我逐行打印它也可以工作

\begin{luacode}    
      function foo(arg)      
      tex.print("\\begin{align*}")
      tex.print("x &=y\\\\")
      tex.print("z &=r\\\\")
      tex.print("\\end{align*}")
      end
\end{luacode}

如果可以使用多行语法的话会更容易[[ ]]

问题是:是否可以使用[[ .. ]]语法将多行字符串从 Lua 发送到 Latex,或者必须一次打印每一行?

2016 年

答案1

一些评论:

以下代码:

\documentclass[11pt,twocolumn]{article}
\usepackage{amsmath}
\usepackage{luacode}
% \usepackage{fontspec}
\pagestyle{empty}
\begin{luacode*}
  require("lualibs") -- for 'string.split'
  function foo(arg)
  local a = "\\begin{align*} x &=y\\\\ z &=r\\\\ \\end{align*}\\par"
  local b = [[\begin{align*} x &=y\\ z &=r\\ \end{align*}\par]]
  local c = [[\begin{align*}
                x &=y \\
                z &=r \\
              \end{align*}\par]]
  print()
  print(a)
  tex.print(a)
  print(b)
  tex.print(b)
  print(c)
  tex.print(c)
  tex.print(string.split(c,"\n"))
  end
\end{luacode*}

\begin{document}
\directlua{foo()}
\end{document}

产生以下日志:

\begin{align*} x &=y\\ z &=r\\ \end{align*}\par
\begin{align*} x &=y\\ z &=r\\ \end{align*}\par
\开始{对齐*}
x &=y \\
単位 &=r \\
\end{对齐*}\par

结果如下:

在此处输入图片描述

附言:取消注释\usepackage{fontspec},Omega 就会消失......

相关内容