Ich versuche, mithilfe des Pakets listofsymbols
ein Symbol zu definieren, das in eine Symbolliste in einem Buch aufgenommen werden soll. Ich habe Probleme, mithilfe des Befehls \newsym
ein 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, pdflatex
werden 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 \cdots
durch eine Zeichenfolge wie xxxx
oder einen Befehl wie ersetzt wird, wird das Dokument kompiliert.\alpha
pdflatex
Könnte mir jemand helfen, dieses Problem zu lösen? Ich wäre für jede Hilfe sehr dankbar.
Antwort1
Der Fehler liegt im listofsymbols
Paket, das verwendet \immediate\write
, was falsch ist und die Ursache Ihrer Probleme darstellt.
Das Laden amsmath
nach der Liste mit den neuen Symbolen ist keine wirkliche Lösung, da andere Befehle davon betroffen sein können. Beispielsweise \sqrt
funktioniert es nicht, egal in welcher Reihenfolge Sie es verwenden.
Besser ist die Änderung \immediate\write
in \protected@iwrite
wie 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}
Bei diesen Neudefinitionen können einige Symbole immer noch Probleme bereiten. Fügen Sie sie in diesem Fall \protect
vor dem fehlerhaften Symbol hinzu.
Übrigens sollten Sie \cdots
in diesem Kontext nicht „verwenden“, sondern einfach „ \dots
: Auslassungspunkte zwischen Kommas sollten immer mit tiefen Punkten gesetzt werden.“
Antwort2
Aktualisieren
wie egreg erwähnt inhis comment
Dies ist nur eine Teillösung.
In den Kommentaren zur Frage wurde das Problem auf die Verwendung des amsmath
Pakets 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}