Можно ли заставить пакет 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}

введите описание изображения здесь

Связанный контент