是否可以让包 listofsymbols 识别 \cdots 命令?

是否可以让包 listofsymbols 识别 \cdots 命令?

我正在尝试使用包listofsymbols来定义一个符号,以便将其包含在书中的符号列表中。我在使用命令\newsym定义涉及命令的符号时遇到了问题\cdots

以下是一个说明该问题的简单符号定义:

\opensymdef
\newsym[A family of sets]{sFam}{A_{1},\cdots,A_{n}}
\closesymdef

当编译包含符号文件的文档时,pdflatex发出以下错误消息:

Undefined control sequence.
Undefined control sequence.
Undefined control sequence.
Undefined control sequence.
Undefined control sequence.

错误的描述是:

... family of sets]{sFam}{A_{1},\cdots,A_{n}}

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.

如果将上述符号定义中的\cdots替换为诸如 的字符串xxxx或诸如 的命令,则编译该文档。\alphapdflatex

有人能帮我解决这个问题吗?任何帮助我都会非常感激。

答案1

错误出现在listofsymbols使用的包中\immediate\write,它是错误的并且是导致您遇到麻烦的原因。

amsmath在新的符号列表之后加载并不是真正的解决方案,因为其他命令可能会受到影响;例如,\sqrt无论您使用什么顺序都不会起作用。

更好是变成\immediate\write定义\protected@iwrite我的一个答案

\documentclass{article} 
\usepackage{listofsymbols} 
\usepackage{amsmath}
\usepackage{xpatch}

\makeatletter
% get a copy of \protected@write
\let\protected@iwrite\protected@write
% patch the copy to add \immediate
\xpatchcmd{\protected@iwrite}{\write}{\immediate\write}{}{}
% patch \addsymline to use \protected@iwrite instead of \immediate\write
\xpatchcmd{\addsymline}
  {\immediate\write#5}
  {\protected@iwrite{#5}{}}
  {}{}
\makeatother

\opensymdef 
\newsym[A family of sets]{sFam}{A_{1},\cdots,A_{n}} 
\closesymdef

\begin{document} 

\listofsymbols

test The symbol \sFam means \sFamdoc 
\end{document}

在此处输入图片描述

通过这种重新定义,一些符号仍然会产生问题;在这种情况下,请\protect在有问题的符号前面添加。

顺便说一句,你不应该\cdots在这种情况下使用,而应该简单地使用\dots:逗号之间的省略号应该始终带有低点。

答案2

更新

正如 egreg 提到的his comment这只是一个部分解决方案。

在对问题的评论中,问题已经简化为使用包amsmath以及listofsymbols;这个简单的文档

\documentclass{article} 
\usepackage[draft]{listofsymbols} 
\usepackage{amsmath}

\opensymdef 
\newsym[A family of sets]{sFam}{A_{1},\cdots,A_{n}} 
\closesymdef 

\begin{document} 
test The symbol \sFam means \sFamdoc 
\end{document}

触发错误消息

! Undefined control sequence.
\DN@ ->\def \next@ 
                   
l.6 ...A family of sets]{sFam}{A_{1},\cdots,A_{n}}
                                                  
? 

可以通过加载来解决此问题amsmath 所有符号的定义,例如:

\documentclass{article} 
\usepackage[draft]{listofsymbols} 

\opensymdef 
\newsym[A family of sets]{sFam}{A_{1},\cdots,A_{n}} 
\closesymdef 

\usepackage{amsmath}

\begin{document} 
test The symbol \sFam means \sFamdoc 
\end{document}

在此处输入图片描述

相关内容