Lualatex:如何避免这种“非自然”

Lualatex:如何避免这种“非自然”

我有一个lua函数,我想传递一些额外的可选latex代码(基本上是一个带参数的宏,宏可以改变,参数也可以改变)。我必须在宏的名称上加两个反斜杠,我明白为什么,我希望有一个巧妙的方法来避免这种“不自然的”双反斜杠(乳胶视图方面)?

在此处输入图片描述

\documentclass[french]{article}
\usepackage{polyglossia,xcolor}
\directlua{require("bob.lua")}


\def\Red{red}
\newcommand{\MyC}[1]{\colorbox{\Red}{#1}}

\newcommand{\TP}[1][]{%
    \directlua{Semaine("\unexpanded{#1}")}
    }

\begin{document}

% How to avoid this following double \\ ?
% if possible ...

\TP
\TP[\\MyC{works}]
\TP{\MyC{doesn't'}}
\end{document}

bob.lua文件 :

t = {}
sem = 1
t[1] = "31 Août" -- the Semaine function calculates this values
t[2] = "5 Sept"
t[3] = "A"

function Semaine (option)
tex.print ("\\rule[.5em]{0pt}{1em}\\colorbox{gray!30!white}{"
..sem.." -- "
..t[3].."}\\quad"..option.."\\hfill\\textit{"
..t[1].." -- "..t[2].."}\\par")
end

答案1

问题是

\directlua{Semaine("\unexpanded{#1}")}

至少它可以防止#1过早扩展。但#1用户贡献的内容可能包含任何内容,包括引号,这会破坏预期的 Lua 语法。因此 LuaTeX 提供了\luaescapestring,可以像\luatexluaescapestring在 LuaLaTeX 中一样使用。它会自动引用特殊字符以获得安全的 Lua 字符串:

\directlua(Semaine("\luatexluaescapestring{\unexpanded{#1}}")}%

然后\MyC保留为宏并\\保留新行的命令。

相关内容