PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Glossaryeinträge in equation benutzen



Wruschel
06-04-2011, 04:27
Hallo Leute, seid gegrüßt, ich bin ganz neu hier.
Ich habe schon oft hier in den Beiträgen sehr hilfreiche Tips für mein Latexdokument gefunden. Aber nun stehe ich vor einem Problem, welches ich einfach nich gelöst bekomme und wofür ich auch keinerlei Ansätze gefunden habe.

Ich schreibe meine Bachelorarbeit über Windkraftanlagen. Ich habe mir mit dem glossaries-paket eine List of Symbols erstellt. (Ich schreibe in Englisch)
Es ist euch bestimmt bekannt, dass das erstellen von Glossaren unter windows damit nicht ganz trivial ist, aber das habe ich eigentlich soweit hinbekommen. Nun möchte ich in meinem Dokument per \gls{name des eintrags} die Einträge auch in einer equation-umgebung benutzen. (Ihr müsst das PERL-script benutzen, nachdem ihr einmal kompiliert habt um das Glossar zu erstellen.) Ich benutze TexWorks 0.3 r670 (MikTex 2.9) und kompiliere mit pdfLaTex+MakeIndex+BibTex.

Hier mein minimalbeispiel:


\documentclass[12pt,a4paper,]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage{amsmath, amsthm, amssymb} %Matheformatierung

\usepackage[nonumberlist]{glossaries} %kompliziert unter windows, anleitung siehe http://mrunix.de/forums/showthread.php?t=68892&highlight=nomenclature
\renewcommand*{\glspostdescription}{}%Den Punkt am Ende jeder Beschreibung deaktivieren
\newglossarystyle{symbols}{%
% put the glossary in a longtable environment:
\renewenvironment{theglossary}%
{\begin{longtable}{lp{\glsdescwidth}cccp{\glspagel istwidth}}}%
{\end{longtable}}%
% Set the table’s header:
\renewcommand*{\glossaryheader}{%
\bfseries Term & \bfseries Description & \bfseries Unit
\\\endhead}%
% No heading between groups:
\renewcommand*{\glsgroupheading}[1]{}%
% Main (level 0) entries displayed in a row:
\renewcommand*{\glossaryentryfield}[4]{%
\glstarget{##1}{##2}% Name
& ##3% Description
& [##4]% Symbol (wird von mir als Unit verwendet)
\\% end of row
}%
}
%------------------------------------------------------------------------

\begin{document}
\newglossaryentry{U1}{name={$U_\infty$},symbol=$\f rac{\text{m}}{\text{s}}$,sort=U1,description={wind velocity far upstream}}
\makeglossaries

\tableofcontents
\newpage
\addcontentsline{toc}{section}{List of Symbols}

Hier soll jetzt \gls{U1} im Text erscheinen. Das klappt auch.

\printglossary[title=List of Symbols,style=symbols]

Auch die Ausgabe der List of Symbols sieht so aus, wie ich mir das wuensche.

Nun soll aber das gleiche auch in einer equation passieren.
\begin{equation}
U_\infty
\gls{U1} %kommentiert diese Zeile aus und alles sollte laufen
\end{equation}

\end{document}


Er scheint das Problem zu haben, dass in dem Glossaryeintrag bereits $-Zeichen stehen, aber ich habe schon versucht, das zu umgehen, erfolglos. Mit \begin{math} klappt es leider auch nicht.

Hat jemand eine Idee?? Ich wäre euch sehr dankbar!

Viele Grüße,
Wruschel

Schweinebacke
06-04-2011, 07:55
Einfach keine $, sondern \ensuremath verwenden, beispielsweise:
\newglossaryentry{U1}{name={\ensuremath{U_\infty}} ,symbol=\ensuremath{\frac{\text{m}}{\text{s}}},sor t=U1,description={wind velocity far upstream}}

Wruschel
12-04-2011, 03:40
Hey, danke, das war ja einfach.
Allerdings gibt es nun ein größeres Problem. Ich habe in meinem glossarie natürlich mehrere Einträge.
Ich habe ein neues Minimalbeispiel:


\documentclass[12pt,a4paper,]{scrartcl}
\usepackage[latin1]{inputenc}
%\usepackage[ngerman]{babel}
\usepackage{amsmath, amsthm, amssymb} %Matheformatierung
\usepackage[nonumberlist]{glossaries} %kompliziert unter windows, anleitung siehe http://mrunix.de/forums/showthread.php?t=68892&highlight=nomenclature
\renewcommand*{\glspostdescription}{}%Den Punkt am Ende jeder Beschreibung deaktivieren
\newglossarystyle{symbols}{%
% put the glossary in a longtable environment:
\renewenvironment{theglossary}%
{\begin{longtable}{lp{\glsdescwidth}cccp{\glspagel istwidth}}}%
{\end{longtable}}%
% Set the table’s header:
\renewcommand*{\glossaryheader}{%
\bfseries Term & \bfseries Description & \bfseries Unit
\\\endhead}%
% No heading between groups:
\renewcommand*{\glsgroupheading}[1]{}%
% Main (level 0) entries displayed in a row:
\renewcommand*{\glossaryentryfield}[4]{%
\glstarget{\ensuremath{##1}}{\ensuremath{##2}}% Name
& ##3% Description
& [\ensuremath{##4}]% Symbol (wird von mir als Unit verwendet)
\\% end of row
}%
}


%-------------------------------------------------------------------------------------------------------------------------

\begin{document}
\newglossaryentry{A1}{name={A_\infty},symbol={\tex t{m}^2},sort={A1},description={stream-tube's cross-sectional area far upstream}}
\newglossaryentry{T}{name={T},symbol={\text{N}},so rt={T},description={thrust on the actuator disc}}
\makeglossaries

\newpage
\tableofcontents
\newpage
\addcontentsline{toc}{section}{List of Symbols}

\printglossary[title=List of Symbols,style=symbols]

\begin{eqnarray}
\gls{T}\\
\gls{A1}
\end{eqnarray}

\end{document}


Mehrere Male kompilieren funktioniert. Nachdem ich jedoch das perl-script benutzt habe, um die .gls zu erstellen, erhalte ich folgende Fehlermeldung:
(MeinPfad\minimalbeispiel.gls ("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsfonts\umsa.fd")
("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\amsfonts\umsb.fd")
! Missing } inserted.
<inserted text>
}
l.5 ...ter{page}\glsnumberformat{2}}}\glsgroupskip

Dies bezieht sich auf die erstellte .gls. Ich habe diese geöffnet und konnte keine fehlende } finden. Kenne mich aber mit diesen Dateien nicht aus.

Weiß jemand, warum er das nicht kompilieren kann?

Danke schonmal.
Wruschel

Schweinebacke
12-04-2011, 10:13
Deine Stildefinition ist AFAIK fehlerhaft. So hat beispielsweise \glossaryentryfield AFAIK 5 Argument. Bei Deiner Redefinition hat es aber nur 4. \glsgroupskip solltest Du ggf. auch noch definieren. Keine Ahnung, ob das dann das liefert, was Du willst, aber Fehlermeldungen gibt es nicht mehr:
\newglossarystyle{symbols}{%
% put the glossary in a longtable environment:
\renewenvironment{theglossary}%
{\begin{longtable}{lp{\glsdescwidth}cccp{\glspagel istwidth}}}%
{\end{longtable}}%
% Set the table’s header:
\renewcommand*{\glossaryheader}{%
\bfseries Term & \bfseries Description & \bfseries Unit
\\\endhead}%
% No heading between groups:
\renewcommand*{\glsgroupheading}[1]{}%
% Main (level 0) entries displayed in a row:
\renewcommand*{\glossaryentryfield}[5]{%
\glstarget{##1}{##2}% Name
& ##3% Description
& [##4]% Symbol (wird von mir als Unit verwendet)
\\% end of row
}%
\renewcommand*{\glsgroupskip}{&\\}%
}
Ich habe mich dabei einfach an der Definition in glossaries-long.sty orientiert. Meist ist es einfacher, einen vorhandenen Stil zu ändern, statt einen komplett neu zu definieren. Das hat auch den Vorteil, dass man Schritt für Schritt vorgehen kann und dann schnell sieht, welche Änderung ggf. zu einem Fehler führt.

Wruschel
18-04-2011, 04:49
Ich danke dir vielmals! Klappt.
Das ist noch mein Problem, dass ich nicht genau einschätzen kann, welche Befehle dort nun wirklich neu definiert werden müssen, und welche nicht.

Ich hatte in einer recht guten Beschreibung gelesen, dass theoretisch nur die Befehle neu definiert werden müssen, die auch genutzt werden.
Aber so ist es jedenfalls perfekt.

Jetzt kann es weitergehen :)

Cheers,
Wruschel