在 \title 中使用非英语语言时,出现“\reserved@a 的参数有一个额外的 }”错误

在 \title 中使用非英语语言时,出现“\reserved@a 的参数有一个额外的 }”错误

(其他答案(A) 带有类似错误消息但实际上并未处理该情况。

我有一份回忆录文件,其中应包含孟加拉语和英语的标题。但在编译时(使用 xelatex),我收到一条错误消息,

! \reserved@a 的参数有一个额外的 }。

这是导致错误的 MWE。

\documentclass{memoir}

\usepackage{polyglossia}
\setmainlanguage{english}
\setotherlanguage[numerals=Devanagari]{bengali}

\title{\begin{bengali} বইয়ের টাইটেল\end{bengali}
  Book Title}

\begin{document}

\maketitle

\end{document}

\begin{bengali} বইয়ের টাইটেল\end{bengali}如果从文件中删除该部分,错误就会消失。所以,那行一定是罪魁祸首。

正如上面提到的问题(或答案)所建议的那样,我需要保护一些东西。然而,我有点困惑该怎么做保护这里。我甚至尝试过\protect\begin{bengali} বইয়ের টাইটেল\end{bengali}但没有任何效果。(只是一种直觉,而不是有根据的直觉。)

答案1

\begin 启动环境的宏是“脆弱的”,这意味着它不能在移动参数内使用。该命令\title会扩展其参数,因此脆弱的命令不能在其内部使用。

请参阅以下问题以获取对此的解释。

所以解决办法就是不要使用{bengali}标题里的环境。

(您实际上可以通过使用来“保护”环境\protect\begin{bengali} .... \protect\end{bengali})但有一个更简单的解决方案:

只需使用\textbengali{}

\documentclass{memoir}

\usepackage{polyglossia}
\setmainlanguage{english}
\setotherlanguage[numerals=Devanagari]{bengali}
\newfontfamily\bengalifont[]{Bangla MN}
\title{\textbengali{বইয়ের টাইটেল}
  Book Title}

\begin{document}

\maketitle
\end{document}

代码输出

答案2

为了补充一下。将 texlive 2017 升级到 2019 后,我遇到了同样的问题。

我通过添加 \protect 来解决问题,在 \lettrine 中使用 \includegraphics

\documentclass{book}
% test-remarque_01
\usepackage{graphics}
\graphicspath{{images/}}
\usepackage[most]{tcolorbox}
\usepackage{lettrine}

\newtcolorbox{myremarque}{
enhanced,
boxrule=0pt,frame hidden,
borderline west={4pt}{0pt}{red},
colback=white,
sharp corners
}

\newcommand{\remarquestart}{\lettrine[findent=2pt]{\protect\includegraphics[height=\baselineskip]{remarque.png}}{ }\textbf{Remarque:}\quad}

\usepackage{lipsum}

\begin{document}
\begin{myremarque}
  \remarquestart
  \lipsum[4]
\end{myremarque}
\lipsum[1]
\end{document} 

相关内容