Ist es möglich, das Paket „listofsymbols“ so zu gestalten, dass es den Befehl \cdots erkennt?

Ist es möglich, das Paket „listofsymbols“ so zu gestalten, dass es den Befehl \cdots erkennt?

Ich versuche, mithilfe des Pakets listofsymbolsein Symbol zu definieren, das in eine Symbolliste in einem Buch aufgenommen werden soll. Ich habe Probleme, mithilfe des Befehls \newsymein Symbol zu definieren, das den Befehl beinhaltet \cdots.

Nachfolgend sehen Sie eine einfache Symboldefinition, die das Problem veranschaulicht:

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

Beim Kompilieren eines Dokuments, das die Symboldatei enthält, pdflatexwerden die folgenden Fehlermeldungen ausgegeben:

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

Die Fehlerbeschreibung lautet:

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

Wenn in der obigen Symboldefinition \cdotsdurch eine Zeichenfolge wie xxxxoder einen Befehl wie ersetzt wird, wird das Dokument kompiliert.\alphapdflatex

Könnte mir jemand helfen, dieses Problem zu lösen? Ich wäre für jede Hilfe sehr dankbar.

Antwort1

Der Fehler liegt im listofsymbolsPaket, das verwendet \immediate\write, was falsch ist und die Ursache Ihrer Probleme darstellt.

Das Laden amsmathnach der Liste mit den neuen Symbolen ist keine wirkliche Lösung, da andere Befehle davon betroffen sein können. Beispielsweise \sqrtfunktioniert es nicht, egal in welcher Reihenfolge Sie es verwenden.

Besser ist die Änderung \immediate\writein \protected@iwritewie ineine meiner Antworten.

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

Bildbeschreibung hier eingeben

Bei diesen Neudefinitionen können einige Symbole immer noch Probleme bereiten. Fügen Sie sie in diesem Fall \protectvor dem fehlerhaften Symbol hinzu.

Übrigens sollten Sie \cdotsin diesem Kontext nicht „verwenden“, sondern einfach „ \dots: Auslassungspunkte zwischen Kommas sollten immer mit tiefen Punkten gesetzt werden.“

Antwort2

Aktualisieren

wie egreg erwähnt inhis commentDies ist nur eine Teillösung.

In den Kommentaren zur Frage wurde das Problem auf die Verwendung des amsmathPakets zusammen mit reduziert listofsymbols; dieses einfache Dokument

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

löst die Fehlermeldung aus

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

Das Problem kann gelöst werden durch Ladenamsmath nachalle Definitionen von Symbolen, wie in:

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

Bildbeschreibung hier eingeben

verwandte Informationen