É possível fazer com que o pacote listofsymbols reconheça o comando \cdots?

É possível fazer com que o pacote listofsymbols reconheça o comando \cdots?

Estou tentando usar o pacote listofsymbolspara definir um símbolo a ser incluído em uma lista de símbolos de um livro. Tenho problemas ao usar o comando \newsympara definir um símbolo que envolve o comando \cdots.

A seguir está uma definição de símbolo simples que ilustra o problema:

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

Quando um documento que inclui o arquivo de símbolos é compilado, pdflatexemite as seguintes mensagens de erro:

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

A descrição do erro é:

... 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.

Se \cdotsfor substituído por uma string como xxxxou um comando como \alpha, na definição do símbolo acima, então pdflatexcompila o documento.

Alguém poderia me ajudar a resolver esse problema. Qualquer ajuda seria muito apreciada.

Responder1

O erro está no listofsymbolspacote que usa \immediate\write, o que está errado e é a causa dos seus problemas.

Carregar amsmathdepois da lista de novos símbolos não é realmente uma solução, pois outros comandos podem ser afetados; por exemplo, \sqrtnão funcionará em qualquer ordem que você usar.

Melhor é mudar \immediate\writepara \protected@iwriteconforme definido emuma das minhas respostas.

\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}

insira a descrição da imagem aqui

Com estas redefinições alguns símbolos ainda podem dar problemas; neste caso, adicione \protectantes do infrator.

Aliás, você não deve usar \cdotsneste contexto, mas simplesmente \dots: reticências entre vírgulas devem estar sempre com pontos baixos.

Responder2

Atualizar

como egreg menciona emhis commentesta é apenas uma solução parcial.

Nos comentários à pergunta, o problema foi reduzido ao uso do amsmathpacote junto com listofsymbols; este simples documento

\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}

dispara a mensagem de erro

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

O problema pode ser resolvido carregandoamsmath depoistodas as definições de símbolos, como em:

\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}

insira a descrição da imagem aqui

informação relacionada