PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nomenklatur



DrHoas
03-10-2013, 08:15
Hallo,

kann man eigentlich automatisch eine Nomenklatur erstellen lassen? Ich hab schon das nomencl-Paket gefunden. Das macht aber glaub nicht das, was ich mir vorstelle. Ich dachte mir das so:
Alle Formeln werden beim Kompilieren durchsucht und die gefundenen Formelzeichen mit einer Datei abgeglichen. Wenn jetzt in der Datei z. B. p{Druck}{Pa} steht ist alles gut und der Eintrag wird übernommen. Ist ein Eintrag nicht vorhanden oder unvollständig, wird eine Warnung ausgegeben.

Dank und Gruß

Philipp

rais
03-10-2013, 11:25
Moin moin,
so ein Automatismus ist mir nicht bekannt.
Du kannst Dir ja mal überlegen, wie ein Programm entscheiden könnte, was ein Formelzeichen ist -- und was alles dazugehört -- bzw. was definitiv kein Formelzeichen ist.

MfG

DrHoas
03-10-2013, 12:49
Sagen wir mal eine Formel würde lauten:


$s=0,5gt^2=0,5\cdot9,81\,\frac{m}{s^2}\cdot5\,s^2$

Beim Kompilieren würde eine Datei mit folgendem Inhalt erstellt:


g{}{}
gt{}{}
m{}{}
s{}{}
t{}{}

Beim zweiten Kompilieren gäbe es fünf Warnungen: "Einheit und Beschreibung für g fehlt." usw. Trotzdem würde eine Nomenklatur/Tabelle mit folgenden Zeilen erstellt:


g & &
gt & &
m & &
s & &
t & &

Also öffnet der Benutzer die erstellte Datei und editiert sie:


g{Erdbeschleunigung}{\frac{m}{s^2}}
\ignore gt{}{}
\ignore m{}{}
s{Strecke}{m}
t{Zeit}{s}

Jetzt nochmal kompilieren und schon hat man die Nomenklatur. Das klingt jetzt vielleicht aufwändig. Der große Vorteil wäre aber, dass man nichts vergessen kann.
Ich kann leider keine Latex-Packages programmieren, prinzipiell klingt es aber nicht allzu kompliziert, oder?

Philipp

rais
04-10-2013, 09:07
Dazu müsste diese selbst erstellte Datei -- sofern vorhanden -- zu Dokumentbeginn eingelesen werden, damit gemachte Eintragungen mit übernommen werden können -- AFAIR kann TeX nur Dateien überschreiben, nicht anhängen -- und damit der Parser entscheiden kann, ob ein `Formelzeichen' bereits in der Datei steht (letzteres ginge auch mit einer beim Schreiben erstellten Liste).
Eine etwaige Warnung könnte dann beim Schreiben-in-Datei mit abgehakt werden.

Ein etwaiger $v=\frac{s}{t}$ soll sicher nur `v' ergänzen und nicht `s' und `t' nochmal. Oder?
Aber was wäre dann mit $F=m\cdot a$? `m' hätte hier eine ganz andere Bedeutung als `m' zuvor, welches Du auf ignorieren gesetzt hast.
Wie soll ein Programm den Kontext erkennen?
Es müsste in so einem Fall Dein \ignore ignorieren...

Einen Parser in die Mathshift-Routine einzuklinken dürfte auch nicht gerade trivial sein (dazu hätte ich noch nicht mal eine Idee).

Und für den Parser selbst stellt sich immer noch die Frage: wo beginnt und endet ein `Formelzeichen'?

MfG

DrHoas
04-10-2013, 13:04
Also entweder verstehe ich einfach zu wenig von der Materie um die Probleme zu sehen oder Du denkst zu kompliziert. Wahrscheinlich ist es eine Mischung aus beidem.
Ich beschreib mal, was das Paket machen müsste, wenn bereits eine tex-Datei vorliegt, der Benutzer dann auf die Idee kommt, er könnte ja das Paket einbinden und sein Dokument hinterher noch ändert. Ich denke schlimmer kann es nicht kommen.

Erstes Kompilieren nach dem Einbinden des Pakets:
Der Compiler trifft auf ein "$" (oder ähnliches). Ab jetzt werden alle Ascii-Zeichen die Buchstaben darstellen einzeln und in jeder vorkommenden Kombination in eine neue Datei geschrieben und die Kombination "{}{}" angehängt. Solange bis eine weiteres "$" gefunden wird. Das wird für alle Formeln durchgeführt. Der Inhalt der Datei wird alphabetisch geordnet. Dann:


Call "Duplikate aus Datei einfernen"
Call "Leere Klammernpaare {} finden und Warnung ausgeben"

Die Datei sieht jetzt so aus:


g{}{}
gt{}{}
m{}{}
s{}{}
t{}{}

Es werden Warnungen ausgegeben:
"In der Nomenklatur wurde der leere Eintrag g{}{} gefunden."
"In der Nomenklatur wurde der leere Eintrag gt{}{} gefunden."
usw.

Der Nutzer kann jetzt in die Datei gehen und sie editieren:


g{Erdbeschleunigung}{\frac{m}{s^2}}
\ignore gt{}{}
m{}{}
s{Strecke}{m}
t{Zeit}{s}

Du siehst, ich habe m{}{} nicht auf \ignore gesetzt. Bei "gt" bin ich mir sicher, dass ich es niemals als Formelzeichen verwenden werde.

Zweites Kompilieren:
Die Nomenklatur wird mit den Einträgen g, s und t erstellt. Außerdem erhält man eine Warnung: "In der Nomenklatur wurde der leere Eintrag m{}{} gefunden.". Der Kompiliervorgang geht weiter:
An die Datei werden alle Buchstabenkominationen aus allen Formel angehängt (Falls das nicht geht, muss mit einer temp-Datei gearbeitet werden.) Die Datei wird sortiert, Duplikate werden entfernt. Außerdem wir der Eintrag "gt{}{}" entfernt, da es auch einen Eintrag "\ignore gt{}{}" gibt. Des Weiteren werden die Einträge "g{}{}", "s{}{}" und "t{}{}" entfernt, da es auch Einträge gibt, bei denen die jeweiligen Klammern nicht leer sind. Die Datei sieht jetzt also genau gleich aus wie vorher. Um die Warnungen temporär zu ignorieren, könnte es einen Befehl \ignorenomenclaturewarnings{m,...} geben.

Jetzt werden neue Formeln eingetippt:


%\ignorenomenclaturewarnings{m}
$v=\frac{s}{t}$
$F=m\cdot a$


Kompilieren:
Die Datei sieht so aus:


a{}{}
F{}{}
g{Erdbeschleunigung}{\frac{m}{s^2}}
\ignore gt{}{}
m{}{}
s{Strecke}{m}
t{Zeit}{s}
v{}{}

Natürlich erhält man wieder Warnungen... Rein in die Datei:


a{Beschleunigung}{\frac{m}{s^2}}
F{Kraft}{N}
g{Erdbeschleunigung}{\frac{m}{s^2}}
\ignore gt{}{}
m{Masse}{kg}
s{Strecke}{m}
t{Zeit}{s}
v{Geschwindigkeit}{\frac{m}{s}}


Kompilieren und die vollständige Nomenklatur bestaunen.

Gruß

Philipp

rais
06-10-2013, 10:58
Also entweder verstehe ich einfach zu wenig von der Materie um die Probleme zu sehen oder Du denkst zu kompliziert. Wahrscheinlich ist es eine Mischung aus beidem.

Mag sein. Du kannst Dich ja mal ein wenig mit der Materie beschäftigen. Dann siehst Du vllt, dass einige Deiner Vorstellungen nicht ganz sooo leicht mit (La)TeX umsetzbar sind.


Erstes Kompilieren nach dem Einbinden des Pakets:
Der Compiler trifft auf ein "$" (oder ähnliches).

Ja. Das meinte ich mit `in die Mathshift-Routine einklinken'.
Normalerweise stellen Pakete ihre Funktionen in Form von Makros bereit und beissen sich nicht in TeXs Innereien...
Und Du willst hier zwei Dinge: Deinen Parser starten und das was da steht auch nach wie vor ausgeben.


Ab jetzt werden alle Ascii-Zeichen die Buchstaben darstellen

Definiere den Begriff `Buchstabe'.
Für (La)TeX sind es in der Regel genau 52 (A--Z und a--z).
Ganz zu schweigen von \eta, \rho und wie sie alle heißen: was ist mit Dingen wie \mathcal{..}? \mathbb{..} (amsfonts o.ä.)?
Gehört bei indizierten Einträgen der Index mit zum Formelzeichen?


Der Inhalt der Datei wird alphabetisch geordnet.

Das allein kann unter (La)TeX schon eine Herausforderung sein.
Bei Paketen wie nomencl oder glossaries kümmert sich ein externes Programm ums Sortieren (makeindex bzw. xindy).


Dann:


Call "Duplikate aus Datei einfernen"
Call "Leere Klammernpaare {} finden und Warnung ausgeben"


Ich versteh Dich nicht. Wenn Du die Einträge eh sortieren willst, könntest Du sie statt in einer Datei auch erstmal in einer Liste lassen. Bevor Du einen neuen Eintrag in dieser Liste aufnimmst, könntest Du schauen, ob dieser Eintrag bereits drinsteht und so Duplikate vermeiden, bevor sie entstehen. Die Warnung könntest Du dann daran koppeln, ob ein neuer Eintrag in dieser Liste gemacht wurde. Initialisieren könntest Du diese Liste zu Dokumentbeginn mit dem Inhalt der Datei, dabei kannst Du Dir dann auch gleich merken, welche Einträge bereits gemacht wurden.
Ob wohl das richtige Ergebnis erzielt wird, wenn eine Formel wieder gelöscht wird?


Die Datei sieht jetzt so aus:


g{}{}


vllt mit einem Wrapper-Befehl drumherum


\irgendwas{g}{}{}

d.h. wenn dieser \irgendwas auch noch \nomenclatureentry getauft wird, könntest Du Deine Idee mit dem nomencl- bzw. nomentbl-Paket koppeln und bräuchtest Dich z.B. ums Sortieren nicht zu kümmern. Eigentlich bräuchtest Du `nur' noch die Warnungen zu generieren, ein \nomenclature{g}{} würde fehlen.
Und den könntest Du dann in Deiner .tex-Datei ergänzen.

MfG