Estoy intentando utilizar el paquete listofsymbols
para definir un símbolo que se incluirá en una lista de símbolos de un libro. Tengo problemas al usar el comando \newsym
para 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, pdflatex
genera 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 \cdots
se reemplaza con una cadena como xxxx
o un comando como \alpha
, en la definición de símbolo anterior, pdflatex
se compila el documento.
Alguien podría ayudarme a solucionar este problema. Cualquier ayuda será muy apreciada.
Respuesta1
El error está en el listofsymbols
paquete que utiliza \immediate\write
, que es incorrecto y es la causa de sus problemas.
Cargar amsmath
después de la lista de nuevos símbolos no es realmente una solución, porque otros comandos pueden verse afectados; por ejemplo, \sqrt
no funcionará en cualquier orden que utilice.
Mejor es cambiar \immediate\write
a\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}
Con estas redefiniciones algunos símbolos todavía pueden dar problemas; en este caso agregue \protect
antes del infractor.
Por cierto, no deberías usarlo \cdots
en este contexto, sino simplemente \dots
: los puntos suspensivos entre comas siempre deben tener puntos bajos.
Respuesta2
Actualizar
como menciona egreg enhis comment
esto es sólo una solución parcial.
En los comentarios a la pregunta, el problema se ha reducido al uso del amsmath
paquete 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}