¿Es posible hacer que el paquete listofsymbols reconozca el comando \cdots?

¿Es posible hacer que el paquete listofsymbols reconozca el comando \cdots?

Estoy intentando utilizar el paquete listofsymbolspara definir un símbolo que se incluirá en una lista de símbolos de un libro. Tengo problemas al usar el comando \newsympara definir un símbolo que involucra el comando \cdots.

La siguiente es una definición de símbolo simple que ilustra el problema:

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

Cuando se compila un documento que incluye el archivo de símbolos, pdflatexgenera los siguientes mensajes de error:

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

La descripción del error es:

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

Si \cdotsse reemplaza con una cadena como xxxxo un comando como \alpha, en la definición de símbolo anterior, pdflatexse compila el documento.

Alguien podría ayudarme a solucionar este problema. Cualquier ayuda será muy apreciada.

Respuesta1

El error está en el listofsymbolspaquete que utiliza \immediate\write, que es incorrecto y es la causa de sus problemas.

Cargar amsmathdespués de la lista de nuevos símbolos no es realmente una solución, porque otros comandos pueden verse afectados; por ejemplo, \sqrtno funcionará en cualquier orden que utilice.

Mejor es cambiar \immediate\writea\protected@iwrite como se define enuna de mis respuestas.

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

ingrese la descripción de la imagen aquí

Con estas redefiniciones algunos símbolos todavía pueden dar problemas; en este caso agregue \protectantes del infractor.

Por cierto, no deberías usarlo \cdotsen este contexto, sino simplemente \dots: los puntos suspensivos entre comas siempre deben tener puntos bajos.

Respuesta2

Actualizar

como menciona egreg enhis commentesto es sólo una solución parcial.

En los comentarios a la pregunta, el problema se ha reducido al uso del amsmathpaquete junto con listofsymbols; este sencillo 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}

desencadena el mensaje de error

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

El problema se puede solucionar cargandoamsmath despuéstodas las definiciones de símbolos, como en:

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

ingrese la descripción de la imagen aquí

información relacionada