xkeyval 错误:‘HEIGHT’(‘WIDTH’)在家族‘psvectorian’中未定义

xkeyval 错误:‘HEIGHT’(‘WIDTH’)在家族‘psvectorian’中未定义

我想更改我的词汇表的标题,比如“符号列表”,如下所示(使用从包中借用的一些实体psvectorian)。

\hfil\hspace*{-3.5cm}\psvectorian[height=3mm, width=8cm]{88}\hfil\\[\baselineskip]List of Symbols\\[0.9\baselineskip]\hfil\hspace*{-3.5cm}\psvectorian[height=3mm, width=8cm]{88}\hfil\\

这是我的MWE

\documentclass{memoir}

\usepackage{psvectorian}
\usepackage[english]{babel}
\usepackage{tikz}
\usepackage{tocloft}
\usepackage{glossaries}
\usepackage{fontspec}

\renewcommand*\glspostdescription{\dotfill}

\newcommand{\abc}[1]{\hfil\hspace*{-3.5cm}\psvectorian[height=3mm, width=8cm]{88}\hfil\\[\baselineskip]#1\\[0.9\baselineskip]\hfil\hspace*{-3.5cm}\psvectorian[height=3mm, width=8cm]{88}\hfil\\}

\loadglsentries{gloss-symb}

\newglossarystyle{mylong}{%
    \setglossarystyle{long}%
    \renewenvironment{theglossary}%
    {\begin{longtable}[l]{@{}p{\dimexpr 2.5cm-\tabcolsep}p{0.8\hsize}}}
        {\end{longtable}}%
}

\makenoidxglossaries

\begin{document}

    \tableofcontents
    
    \clearpage
    
    \renewcommand{\glossaryname}{\abc{List of Symbols}}
    
        \addcontentsline{toc}{chapter}{List of Symbols}
        \printnoidxglossary[style=mylong]

    \newpage
    
    \gls{sigma} is an event set.
\end{document}

其中gloss-symb.tex仅包括

\newglossaryentry{sigma}{name={\ensuremath{\Sigma}}, description={Event set}}

但是,我遇到了以下错误:

Package xkeyval Error: `HEIGHT' undefined in families `psvectorian'. \end{document}

Package xkeyval Error: `WIDTH' undefined in families `psvectorian'. \end{document}

psvectorian 手动的(第 2 页)已经指出widthheight确实是有效密钥。那么,我在这里做错了什么?

答案1

widthheight确实存在,但WIDTHHEIGHT不存在。问题是,在排版时,\glossaryname宏被展开,\MakeUppercased,因此width变成WIDTH,然后您就会得到错误。这是将代码(\psvectorian和诸如此类)与文本混合的问题:一些需要纯文本的代码与一般命令无法很好地配合。

一个简单的解决方法是将\psvectorian命令打包成\protected宏,这样它们在大写之前就不会扩展(因此它们也不会大写)。将你的定义分成\abc三个部分就可以完成工作:

\protected\def\abcbefore{\hfil\hspace*{-3.5cm}\psvectorian[height=3mm, width=8cm]{88}\hfil\\[\baselineskip]}
\protected\def\abcafter{\\[0.9\baselineskip]\hfil\hspace*{-3.5cm}\psvectorian[height=3mm, width=8cm]{88}\hfil\\}
\newcommand{\abc}[1]{\abcbefore#1\abcafter}

可编译代码:

\documentclass{memoir}
\usepackage{psvectorian}
\usepackage{glossaries}

\begin{filecontents*}{gloss-symb}
\newglossaryentry{sigma}{name={\ensuremath{\Sigma}}, description={Event set}}
\end{filecontents*}

\renewcommand*\glspostdescription{\dotfill}

\protected\def\abcbefore{\hfil\hspace*{-3.5cm}\psvectorian[height=3mm, width=8cm]{88}\hfil\\[\baselineskip]}
\protected\def\abcafter{\\[0.9\baselineskip]\hfil\hspace*{-3.5cm}\psvectorian[height=3mm, width=8cm]{88}\hfil\\}
\newcommand{\abc}[1]{\abcbefore#1\abcafter}

\loadglsentries{gloss-symb}

\newglossarystyle{mylong}{%
    \setglossarystyle{long}%
    \renewenvironment{theglossary}%
    {\begin{longtable}[l]{@{}p{\dimexpr 2.5cm-\tabcolsep}p{0.8\hsize}}}
        {\end{longtable}}%
}

\makenoidxglossaries

\begin{document}

\tableofcontents

\clearpage

\renewcommand{\glossaryname}{\abc{List of Symbols}}

\addcontentsline{toc}{chapter}{List of Symbols}
\printnoidxglossary[style=mylong]

\newpage

\gls{sigma} is an event set.
\end{document}

相关内容