PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Formatierung des Abkürzungsverzeichnisses (nomencl)



mueslifix
23-04-2007, 16:37
Hallo an alle,

dies ist mein erster Post, hoffe ich habe DIE Lösung nicht übersehen.
Ich habe ein Abkürzungsverzeichnis mit nomencl erstellt. Funktioniert prima, habe aber ein Problem mit der Darstellung. Eine Lösung habe ich zwar gefunden, aber sie ist in meinen Augen nicht befriedigend.

Beispiel


\documentclass[ pdftex, a4paper,twoside,openright,12pt]{scrbook}

\usepackage[intoc,german]{nomencl}

%Abkürzungsverzeichnis -- Definition
\let\abk\nomenclature
\renewcommand{\nomname}{Abkürzungsverzeichnis}
\setlength{\nomlabelwidth}{.25\hsize}
\renewcommand{\nomlabel}[1]{#1 \dotfill}
\setlength{\nomitemsep}{-\parsep}
\renewcommand{\nomgroup}[1]{
\bigskip%%
\item[]\hspace*{-\leftmargin}%%
\textbf{\Large#1}\hfill
\smallskip
}

\makenomenclature

\begin{document}

\abk[A]{ABC}{Alphabet}

\markboth{\nomname}{\nomname}
\printnomenclature
\newpage
\end{document}


Problem:
Das Abk.Verzeichnis sieht so aus:

A.........
ABC.....Alphabet

Die Gruppenüberschriften A,B,C usw. werden mit den "....." versehen.
Es soll aber so aussehen:

A
ABC........Alphabet

In Alter Thread (http://www.mrunix.de/forums/showthread.php?t=44269&highlight=nomencl) habe ich eine Lösung gesehen, auf die ich auch selbst gekommen bin:

Präambel:


\renewcommand{\nomlabel}[1]{#1}


und im Text dann


\abk[A]{ABC\dotfill}{Alphabet}


Diese Lösung funktioniert, nur muss das doch eleganter gehen ? Der Alte Thread ist bereits ein Jahr alt, vielleicht hat ja dieses Jahr jemand eine Idee oder sogar Lösung.

Danke und Grüße

mueslifix

rais
23-04-2007, 18:32
Moin moin,

(..)
Diese Lösung funktioniert, nur muss das doch eleganter gehen ? Der Alte Thread ist bereits ein Jahr alt, vielleicht hat ja dieses Jahr jemand eine Idee oder sogar Lösung.

Etwa so vllt:


%\let\abk\nomenclature
\newcommand\abk[3][A]{%
\nomenclature[#1]{#2\dotfill}{#3}%
}

(ungetestet) -- Im Text dann wieder mit
\abk{MB}{Minimalbeispiel}
MfG,

mueslifix
23-04-2007, 21:17
\newcommand\abk[3][A]{%
\nomenclature[#1]{#2\dotfill}{#3}%
}


das war bereits die Lösung! VIELEN DANK :)

Allerdings muss man im Text dann


\abk[M]{MB}{Minimalbeispiel}

verwenden, damit in der Gruppe M die Abkürzung MB erscheint.

Ich bin wirklich beeindruckt @rais, wie kompetent Du hier die Lösungen postest, hatte mich den halben Tag mit den sonstigen Threads zum Thema nomencl beschäftigt. Sauber! Danke !


Nachdem ich das nun getestet habe, ist mir aufgefallen, dass

a) die Abstände zwischen den einzelnen Punkten im Inhalts-, Abbildungs- und Tabellenverzeichnis einerseits und dem jetzt entstandenen Abkürzungsverzeichnis andererseits unterschiedlich breit sind. Ohne recherchiert zu haben: Wie könnte man den Befehl \dotfill so umdefinieren, dass man die Leerzeichenbreite beeinflussen kann ?

Grüße

mueslifix

mueslifix
23-04-2007, 21:52
Hab die Lösung auf meine Frage hier im Forum gefunden



\renewcommand{\dotfill}{\leaders\hbox to 5pt{\hss.\hss}\hfill}


Dank an localghost

rais
23-04-2007, 22:45
Moin moin,

das war bereits die Lösung! VIELEN DANK :)
gern geschehen :)

Allerdings muss man im Text dann


\abk[M]{MB}{Minimalbeispiel}

verwenden, damit in der Gruppe M die Abkürzung MB erscheint.

Oh ja, sonst wär' ja alles unter `A´... etwa so nicht mehr:


\documentclass{article}
\usepackage{nomencl}
\renewcommand\nomgroup[1]{\item[\textbf{#1}]~}
\newcommand\abk[3][\empty]{%
\ifx#1\empty%
\nomenclature[#2]{#2\dotfill}{#3}%
\else%
\nomenclature[#1]{#2\dotfill}{#3}%
\fi%
}
\setlength{\nomlabelwidth}{.25\hsize}
\makenomenclature
\begin{document}
MB\abk{MB}{Minimalbeispiel}
\abk[x]{zB}{zum Bleistift}
\printnomenclature
\end{document}
-- sollen \abk und makeindex den Kram doch gleich selbst sortieren... so brauchst Du den optionalen Parameter nur noch gelegentlich zu gebrauchen -- wenn überhaupt.;)
Die Sache mit dem \dotfill hast Du hier (http://www.mrunix.de/forums/showthread.php?t=48271) ja bereits gefunden... wo ich den Thread gerade noch vor Augen hab' :D
MfG,

mueslifix
24-04-2007, 11:59
Habe das mal getestet:



\newcommand\abk[3][\empty]{%
\ifx#1\empty%
\nomenclature[#2]{#2\dotfill}{#3}%
\else%
\nomenclature[#1]{#2\dotfill}{#3}%
\fi%
}


Die Sortierreihenfolge stimmt nicht mehr, wenn man mal \abk[B]{BND}{Bundesnachrichten Dienst} und mal \abk{BGB}{Bürgerliches Gesetzbuch} verwendet.

In den Fällen, in denen entweder alle Abkürzung mit der Option [A..Z] ausgestattet sind, oder alle ohne diese Option, ist die Sortierreihenfolge richtig.

Ich bleibe bei der Lösung



\newcommand\abk[3][\empty]{%
\nomenclature[#1]{#2\dotfill}{#3}%
}


Danke für die Hilfe.

rais
25-04-2007, 00:13
Moin moin,


Die Sortierreihenfolge stimmt nicht mehr, wenn man mal \abk[B]{BND}{Bundesnachrichten Dienst} und mal \abk{BGB}{Bürgerliches Gesetzbuch} verwendet.

stimmt schon, Afaik wird so `BGB´ unter `BGBBGB´ einsortiert und `BND´ unter `bBND´, somit landet `BND´ dann vor `BGB´. Zumindest die Verdoppelung ließe sich durch


\usepackage[noprefix]{nomencl}
:
\newcommand\abk[3][\empty]{%
\ifx#1\empty%
\nomenclature{#2\dotfill}{#3}%
\else%
:

unterdrücken -- `BND´ wäre dann trotzdem noch vor `BGB´, weil `bB..´ immer noch vor `BG..´ einsortiert wird... aber der optionale Parameter ist ja nicht an einen einzelnen Buchstaben gebunden:


\abk[bnd]{BND}{Bundesnachrichtendienst}

MfG,

Salnic
25-04-2007, 04:10
den ersten Buchstaben eines Strings kann man wohl nicht einfach so "extrahieren"? Oder anders gefragt, gibt es Befehle zur Stringmanipulation?

Salnic

mueslifix
25-04-2007, 16:47
Test....

Das heißt, um ein korrektes Ergebnis zu erhalten, muss man
entweder die Gruppen-Option weglassen, oder sie komplett angeben.

Dies funktioniert dann aber sowohl mit



\usepackage[noprefix]{nomencl}
\newcommand\abk[3][\empty]{%
\ifx#1\empty%
\nomenclature[#2]{#2\dotfill}{#3}%
\else%
\nomenclature[#1]{#2\dotfill}{#3}%
\fi%
}


als auch mit



\usepackage{nomencl}
\newcommand\abk[3][\empty]{%
\nomenclature[#1]{#2\dotfill}{#3}%
}


Beispiel:
\abk[BND]{BND}{Bundesnachrichten Dienst}
\abk{BGB}{Bürgerliches Gesetzbuch}

in beiden Fällen wird ja dann BND mit BGB verglichen bzw. BNDBND mit BGB.

D.h. deine erste Lösung @Rais ist die kompaktere.

rais
28-04-2007, 01:32
den ersten Buchstaben eines Strings kann man wohl nicht einfach so "extrahieren"?

Man vllt, ich noch nicht;-)
Ein Ansatz wäre, \@ifnextchar unter die Lupe zu nehmen oder vllt \xspace -- aus dem gleichnamigen Paket -- hmm, beide benutzen \futurelet...
Otoh find' ich's wesentlich bequemer, Strings zusammenzufügen, statt auseinanderzunehmen -- aber da steh' ich wohl nicht ganz alleine da :)


Das heißt, um ein korrektes Ergebnis zu erhalten, muss man
entweder die Gruppen-Option weglassen, oder sie komplett angeben.

Es reicht eigentlich, wenn der Sortierschlüssel eindeutig ist: bei BGB vs. BND also \abk[bn]{BND}{Bundes..} -- was wohlmöglich nicht mehr ausreicht, wenn Du mehrere solcher Abkürzungen mit ``BN'' beginnend hast (und die auch noch gemischt: mit/ohne eigenen Sortierschlüssel) -- andererseits: wozu diesen Schlüssel überhaupt angeben, wenn's irgendwie vermieden werden kann?
MfG,

mueslifix
30-04-2007, 12:27
@rais eben. Ich bin ganz Deiner Meinung. Ich benutze diese Option jetzt auch nicht mehr. Ich dachte zunächst, dass über diese Angaben die Teilüberschriften "A", "B" usw. entstehen würden. Darum hatte ich sie zunächst auch bei jeder Abkürzung angegeben.

Die Lösung ist auf alle Fälle sehr schick.

mueslifix
30-04-2007, 12:35
Um abschließend die gefundene Lösung zu präsentieren (vllt nützt es ja jemandem?):



\documentclass[a4paper,twoside,openright,12pt]{scrbook}
\usepackage[intoc,german,noprefix]{nomencl}

\newcommand{\correctdotfill}{\leaders\hbox to 9.25pt{\hss.\hss}\hfill}

\newcommand\abk[3][\empty]{
\nomenclature[#1]{#2\correctdotfill}{#3}
}

\renewcommand{\nomname}{Abkürzungsverzeichnis}
\setlength{\nomlabelwidth}{.25\hsize}
\setlength{\nomitemsep}{-\parsep}
\renewcommand{\nomgroup}[1]{
\bigskip%
\item[]\hspace*{-\leftmargin}%
\textbf{\Large#1}\hfill
\smallskip
}
\makenomenclature

\begin{document}

\abk{BND}{Bundes Nachrichtendienst}
\abk{BKA}{Bundes Kriminalamt}
\abk{USW}{Und So Weiter}

\markboth{\nomname}{\nomname}
\printnomenclature
\newpage

\end{document}

% makeindex nicht vergessen ;-)