将大宏块从 Lua 打印到 TeX

将大宏块从 Lua 打印到 TeX

我有一大段 TeX 宏代码,在 TeX 中执行没有问题,但我想在 Lua 中创建宏

该宏包含各种 TeX 宏字符 ( \, %, [, ])

我怎样才能轻松地格式化这个宏而不需要手动处理它,以便我可以将tex.print它放入 TeX 中?

我曾尝试在 's后使用[[ ]]and以及其他各种东西,但都无法让 TeX 满意,或者即使它能工作,也无法找到宏。\n%

答案1

你可能谈论的是定界符Lua 中的语法,根据你的评论猜测

我试过使用 [[ ]]

假设您正在编写一个宏,需要捕获一段相当长的文本。您可以将其封装为:

    [[..]]

如果它括起其他方括号,则需要将其转义为:

    ([=[[[Anger Management]]
    ...        
    ]=])

这是一个完整的最小值:

\documentclass{article}
\usepackage[listings]{tcolorbox}
\begin{document}
\begin{tcblisting}{}
\ttfamily \directlua{
 tex.sprint([=[
    [[Anger Management]]Mild-mannered timid businessman Dave Buznik who works for a pet clothing company out of New York City. He's got an abrasive boss named Mr. Frank Head who frequently takes credit for his work and steps on him in return. He's got a loving girlfriend, Linda, whose best friend is her condescending college ex, Andrew. But when a misunderstanding aboard an airplane goes haywire, Dave is ordered by the court to undergo anger management therapy at the hands of specialist Dr. Buddy Rydell, who is an unpredictable, psychopathic character. As the relationship between Dave and Buddy becomes more tense, when the unorthodox treatment wreaks havoc Dave's life, and Buddy might be the only one who can save him from a problem he recognizes right away in his patient, that could only get worse.
]=])
}
\end{tcblisting}
\end{document}

这应该产生以下输出:

在此处输入图片描述

如上所述较早编程需要耐心。

答案2

虽然从您的问题中不清楚您想要做什么,但我会尽力回答。

  1. 永远不要使用,使用来自的\directlua环境luacode*lua代码包裹。
  2. 使用 lua 函数时tex.sprint(),请tex.print()使用“-2”作为第一个参数。这是包含安全 catcode 的 catcode 表。所有字符(例如%$、 )\都具有“字母”的含义,因此不会造成伤害。
  3. 如果确实需要中间的命令名称,请使用tex.tprint({},{},{},{}...)。在这些表中,您可以选择将 catcode 作为第一个元素:tex.tprint({"\\command{"},{-2,"%$~safe"},{"}"})结果为:

    \command{%$~safe}
    

带有“无意义”的字符%$~safe

相关内容