Estou tentando usar o pacote listofsymbols
para definir um símbolo a ser incluído em uma lista de símbolos de um livro. Tenho problemas ao usar o comando \newsym
para 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, pdflatex
emite 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 \cdots
for substituído por uma string como xxxx
ou um comando como \alpha
, na definição do símbolo acima, então pdflatex
compila o documento.
Alguém poderia me ajudar a resolver esse problema. Qualquer ajuda seria muito apreciada.
Responder1
O erro está no listofsymbols
pacote que usa \immediate\write
, o que está errado e é a causa dos seus problemas.
Carregar amsmath
depois da lista de novos símbolos não é realmente uma solução, pois outros comandos podem ser afetados; por exemplo, \sqrt
não funcionará em qualquer ordem que você usar.
Melhor é mudar \immediate\write
para \protected@iwrite
conforme 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}
Com estas redefinições alguns símbolos ainda podem dar problemas; neste caso, adicione \protect
antes do infrator.
Aliás, você não deve usar \cdots
neste contexto, mas simplesmente \dots
: reticências entre vírgulas devem estar sempre com pontos baixos.
Responder2
Atualizar
como egreg menciona emhis comment
esta é apenas uma solução parcial.
Nos comentários à pergunta, o problema foi reduzido ao uso do amsmath
pacote 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}