当 tex.sprint 位于 \chapter 命令内部时,出现错误消息“\%”附近的转义序列无效

当 tex.sprint 位于 \chapter 命令内部时,出现错误消息“\%”附近的转义序列无效

仅当 \luaexec tex.sprint 位于 \chapter 命令内部时,才会出现错误消息““\%”附近的转义序列无效”:为什么?

\documentclass{book}
\usepackage{luacode}
\begin{document}

\def\CalculusResult{
\luaexec{Calculus = 1/3 tex.sprint (string.format("\%0.5f", Calculus))}}%

\chapter{\huge When placed inside a chapter command, the  CalculusResult \CalculusResult ~  prints well but produces an error message: invalid escape sequence near "\%" }% 

\huge No error message if the CalculusResult \CalculusResult ~ is in the text. 

\end{document}

在此处输入图片描述

答案1

\chapter{abc \eqref{def}}它与诸如(\eqref是少数脆弱的命令之一)之类的东西没有太大区别。

该宏\luaexec很脆弱,因此应该受到保护;将其埋入另一个命令中是不够的,除非另一个命令受到保护。

\documentclass{book}
\usepackage{luacode}

\newcommand\CalculusResult{%
  \luaexec{Calculus = 1/3 tex.sprint (string.format("\%0.5f", Calculus))}%
}

\begin{document}

\tableofcontents

\chapter{When placed inside a chapter command, the
  CalculusResult \protect\CalculusResult{} prints
  well but produces an error message: invalid escape sequence near "\%"}

No error message if the CalculusResult \CalculusResult{} is in the text.

\end{document}

请注意,我用%在了正确的地方。你用了两个无用的地方,却在重要的地方漏掉了一个。

相关内容