我有一个像这样的用户定义符号:
\newcommand{\myexclam}{\mathrel{\stackinset{c}{}{t}{}{\rotatebox{-45}{\scalebox{.5}{$/$}}}{$!$}}}
此符号应在我的词汇表的某个条目中使用,如下所示(gloss.tex
):
\newglossaryentry{mykey}{name={\ensuremath{\delta_{\text{act}}(a,\tau)\myexclam}}, description={Activity automaton}}
下面是main.tex
:
\documentclass[doublespaced,12pt]{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[english]{babel}
\usepackage[symbols]{glossaries}
\usepackage{stackengine}
\usepackage{hyperref}
\newcommand{\myexclam}{\mathrel{\stackinset{c}{}{t}{}{\rotatebox{-45}{\scalebox{.5}{$/$}}}{$!$}}}
\makenoidxglossaries
\loadglsentries{gloss}
\begin{document}
Here is my formula \gls{mykey}
\printnoidxglossary[sort=standard,title={List of Symbols}]
\end{document}
但编译时抛出了undefined control sequence
相应的\myexclam
。
如何在我的词汇表中正确使用此命令?
答案1
在这种情况下,\myexclam
必须\protect
在 中进行编辑\newglossaryentry
。
已编辑,根据 Nicola 的指示,为 添加了一个sort=
键\newglossaryentry
,因为name
不是字母表。此外,hyperref
在 之前加载glossaries
。
\documentclass[doublespaced,12pt]{article}
\usepackage{filecontents}
\begin{filecontents*}{gloss.tex}
\newglossaryentry{mykey}{name={\ensuremath{\delta_{\text{act}}(a,\tau)\protect\myexclam}},
description={Activity automaton},sort={delta activity}}
\end{filecontents*}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[english]{babel}
\usepackage{hyperref}
\usepackage[symbols]{glossaries}
\usepackage{stackengine}
\newcommand{\myexclam}{\mathrel{\stackinset{c}{}{t}{}{\rotatebox{-45}{%
\scalebox{.5}{$/$}}}{$!$}}}
\makenoidxglossaries
\loadglsentries{gloss}
\begin{document}
Here is my formula \gls{mykey}
\printnoidxglossary[sort=standard,title={List of Symbols}]
\end{document}
如果有多个宏需要保护(例如,如果\myexclam
使用多次),则可能更容易以这种方式定义它,以便只\protect
需要一个:
\begin{filecontents*}{gloss.tex}
\newcommand\newname{\ensuremath{\myexclam\delta_{\text{act}}(a,\tau)\myexclam}}
\newglossaryentry{mykey}{name={\protect\newname}, description={Activity automaton},
sort={delta activity}}
\end{filecontents*}