未定义的控制序列、标题、数学和新命令

未定义的控制序列、标题、数学和新命令

处理所有,

我有以下几个新命令,使用 amsmath 和 relsize 包:

\newcommand*{\chiffraged}[2]{$\genfrac{}{}{0pt}{}{\mathlarger{#1}}{\mathlarger{#2}}$}
\newcommand*{\sixcinqbarre}{\chiffraged{6}{\cancel{5}}}

它允许我在常规文本中显示这样的音乐和弦符号(和弦 C): 在此处输入图片描述

\sixcinqbarre当我在文本中使用我的时,没有问题,一切正常(例如法语,抱歉):

     On trouvera tout naturellement l'écriture \textit{do ré}\quartesixte~\textit{mi}6
précédée du \textit{si}\sixcinqbarre .
     L'accord de passage est en général faible tandis que les deux accords de tonique sont
    placés sur les temps forts.
    L'accord sur la sensible est ainsi lui aussi en position faible. On a
    donc \textit{si do ré mi}. Nous en donnons un exemple.

给出:

在此处输入图片描述

当我在不带目录引用的标题中使用它时,例如\subsection*{\sixcinqbarre},同样,没有问题。但是当我在常规标题中使用它时,例如这个\subsection{\sixcinqbarre},我出现以下错误:

! Undefined control sequence.
\rs@makelargerchoice ...displaystyle \rs@mathatom
\m@th $}}{\displaystyle \l...
l.197 ...\sixcinqbarre ~avec la basse descendante}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

有人知道这个吗?

编辑:经过一些测试,似乎使用 hyperref 包是导致错误的原因。这里有一个代码来测试:

\documentclass[a4paper]{book}
\usepackage[]{hyperref}
\usepackage{cancel}
\usepackage{amsmath}
\usepackage{relsize}

\DeclareRobustCommand*{\chiffraged}[2]{$\protect\genfrac{}{}{0pt}{}{\protect\mathlarger{#1}}{\protect\mathlarger{#2}}$}
\DeclareRobustCommand*{\sixcinqbarre}{\chiffraged{6}{\cancel{5}}}

\begin{document}
\section{\sixcinqbarre}
\end{document}

评论一下\usepackage[]{hyperref},它就起作用了!不过我想保留它...有什么想法吗?

答案1

使用hyperref需要另一级别的保护:

\documentclass[a4paper]{book}
\usepackage{cancel}
\usepackage{amsmath}
\usepackage{relsize}
\usepackage[]{hyperref}
\usepackage{bookmark} % recommended

\DeclareRobustCommand*{\chiffraged}[2]{%
  $\genfrac{}{}{0pt}{}{\mathlarger{#1}}{\mathlarger{#2}}$%
}
\DeclareRobustCommand*{\sixcinqbarre}{\chiffraged{6}{\cancel{5}}}
% also protect the commands for the bookmarks
\pdfstringdefDisableCommands{%
  % provide an approximate representation for the bookmarks
  \renewcommand\chiffraged[2]{#1 #2}%
  \renewcommand\sixcinqbarre{6/5}%
}

\begin{document}

\section{\sixcinqbarre{} \chiffraged{6}{4}}

\end{document}

您可以考虑对 做出不同的定义\chiffraged

\DeclareRobustCommand*{\chiffraged}[2]{%
  \begingroup\renewcommand{\arraystretch}{0}%
  \begin{tabular}{@{}c@{}}#1\\[1pt]#2\end{tabular}%
  \endgroup
}

答案2

pdf 书签中不允许使用特殊符号。由于 hyperref 根据章节标题生成这些名称,因此您必须提供替代文本\section{\texorpdfstring{\sixcinqbarre}{Bla}}

\documentclass[a4paper]{book}
\usepackage{cancel}
\usepackage{amsmath}
\usepackage{relsize}
\usepackage{hyperref}

\DeclareRobustCommand*{\chiffraged}[2]{$\protect\genfrac{}{}{0pt}{}{\protect\mathlarger{#1}}{\protect\mathlarger{#2}}$}
\DeclareRobustCommand*{\sixcinqbarre}{\chiffraged{6}{\cancel{5}}}

\begin{document}
\section{\texorpdfstring{\sixcinqbarre}{Bla}}
\end{document}

在此处输入图片描述

相关内容