如何理解“未定义的控制序列。”消息中未定义的控制序列是什么?

如何理解“未定义的控制序列。”消息中未定义的控制序列是什么?

我收到了"Undefined control sequence."消息,但...sdir{\directlua{tex.sprint(lfs.currentdir())}我不明白 LuaLaTeX 指的是哪个控制序列:

在此处输入图片描述

我该如何探索它?

MWE 是

\documentclass[a4paper, twoside]{ltjsarticle}

\usepackage{luatexja-fontspec}

\edef\currfileabsdir{\directlua{tex.sprint(lfs.currentdir())}/}

\begin{document}
    done
\end{document} 

答案1

未定义的控制序列是换行符之前的内容:

\documentclass{article}
\begin{document}
\quad\acommandthatdoesntexist\quad
\end{document}

有输出:

! Undefined control sequence.
<*> \quad\acommandthatdoesntexist
                    \quad

在你的情况下,这似乎是\Users,这可能表明 TeX 正在尝试读取 Windows 路径并将 解释\为命令的开头。你可能需要一个可以导航 Windows 目录的包。

答案2

未定义的控制序列是\Users路径的一部分。尽管此处\应为路径分隔符,但 LuaTeX 并不知道这一点,只是将带有当前活动 catcode 的路径反馈给 TeX,而此处\恰好是转义字符。幸运的是,您可以tex.sprint使用可选参数来指示使用不同的 catcode 表。要使用逐字 catcode(所有内容都是 catcode 12,除了空格保留 catcode 10),请使用带有数字的 catcode 表-2

\edef\currfileabsdir{\directlua{tex.sprint(-2, lfs.currentdir())}/}

相关内容