Zeilenumbrüche in eigener Umgebung?

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


tom72
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Di 11. Dez 2012, 19:56

Zeilenumbrüche in eigener Umgebung?

Beitrag von tom72 »

Hallo,

ich würde mein Literaturverzeichnis gerne manuell erstellen.
Dafür habe ich mir eine eigenen Umgebung gebastelt:
\newenvironment{literatur}{%
\parindent0pt \def\lititem{\hangindent=1cm \hangafter1}}
{\par \ignorespaces}
Funktioniert gut. Leider wird nach einem lititem keine Zeilenumbruch eingefügt. Ich habe das nun erst einmal so gelöst:
\newenvironment{literatur}{%
\parskip0pt \parindent0pt \def\lititem{\hangindent=1cm \hangafter1 \par}}{\par\ignorespaces}
Kann man das so machen, oder ist das unsauber?
Gibt es eine elegantere Lösung?

Viele Grüße,
Tom

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2765
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Beitrag von Stefan Kottwitz »

Hallo Tom,

für einen Absatzumbruch lasse einfach eine Leerzeile zwischen den Einträgen. Wenn es implizit passieren soll, muss \par ja in \lititem eingefügt werden. Du hast es an den Anfang gesetzt, dadurch gibt es am Beginn natürlich zwangsläufig einen Absatzumbruch, vor dem ersten item. Etwas logischer wäre es am Ende, dann muss man jedoch einen Parameter einführen:
\newenvironment{literatur}{%
  \parskip0pt \parindent0pt \def\lititem##1{\hangindent=1cm
  \hangafter1 ##1\par}}
  {\par\ignorespaces}
Ich würde \lititem eher in der Präambel definieren und nicht innerhalb der Umgebung, und LaTeX-Syntax verwenden statt TeX-Syntax, und eigentlich nicht das Rad neu erfinden ;-) sondern bestehende Features verwenden und ggf. anpassen, also etwa LaTeX-Listen (wie itemize oder description) verwenden.

Stefan

Besserwisser

Beitrag von Besserwisser »

Ich würde es allerdings für eleganter halten, die thebibliography-Umgebung so umzukonfigurieren, dass sie passt. Dann kann man außerdem auch \cite verwenden und hat ggf. mit hyperref auch noch Links vom Text zur zitierten Literatur.

tom72
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Di 11. Dez 2012, 19:56

Beitrag von tom72 »

Hallo Stefan,

danke für deine vielen Tipps!

Wie du an meiner Frage sicher gemerkt hast, habe ich nicht unbedingt den Durchblick.

Um das ein wenig zu beheben, traue ich mich jetzt einfach noch eine weitere Frage zu stellen.

Ich möchte nun also eine LaTeX-Liste so abändern, daß sie das selbe leistet, wie die erste Lösung. Hättest du da möglicherweise einen Tipp wo ich etwas darüber lesen kann? In meinem Buch "Wissenschaftliche Arbeiten schreiben mit LaTeX" von Schlosser werden mir nur weitere Pakete vorgestellt. Ich würde die Umgebungen aber lieber direkt verändern.

Viele Grüße,
Tom

Besserwisser

Beitrag von Besserwisser »

Auch, wenn Du explizit mich nicht angesprochen hast:

Das, was die erste Lösung leistet, ist ja eigentlich genau das, was die thebibliography-Umgebung in der Voreinstellung leistet, wenn man als Label-Muster (Parameter der Umgebung) etwas nimmt, was 1cm breit ist:
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{blindtext}

\begin{document}
\begin{thebibliography}{\hspace{1em}}
\bibitem[Erster Eintrag]{KeyA}\newblock
  \blindtext
\bibitem[Zweiter Eintrag]{KeyB}\newblock
  \blindtext
\end{thebibliography}
\end{document}
Will man nun zusätzlich, dass das optionale \bibitem-Argument nicht in eckigen Klammern erscheint, dann kann man diese eckigen Klammern einfach wegdefinieren:
\makeatletter
\renewcommand*{\@biblabel}[1]{#1}% \bibitem ohne die eckigen Klammern
\makeatother
Soll zusätzlich ein Umbruch zwischen dem Label und dem Rest, dann geht das durch umdefinieren von \newblock:
\renewcommand*{\newblock}{\hfill\\}
Insgesammt ergibt sich so:
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage{blindtext}

\makeatletter
\renewcommand*{\@biblabel}[1]{#1}% \bibitem ohne die eckigen Klammern
\makeatother
\renewcommand*{\newblock}{\hfill\\}% Umbruch nach dem Label

\begin{document}
\begin{thebibliography}{\hspace{1em}}
\bibitem[Erster Eintrag]{KeyA}\newblock
  \blindtext
\bibitem[Zweiter Eintrag]{KeyB}\newblock
  \blindtext
\end{thebibliography}
\end{document}
Soll der Einzug gar nicht erscheinen, dann setzt man einfach ein anderes Label-Muster, muss aber außerdem auch noch den in die thebibliography-Umgebung eingreifen, um den durch \labelsep verursachten Einzug ganz weg zu bekommen. Das ist ggf. abhängig von der Dokumentklasse, weshalb spätestens dann von Dir ein vollständiges Minimalbeispiel benötigt wird.

Es gibt auch unzählige Pakete, um das Literaturverzeichnis den eigenen Wünschen entsprechend zu setzen. Diese kann man teilweise auch ohne BibTeX verwenden. Das gilt beispielsweise für natbib, jurabib, babelbib etc. Ich würde jedoch zur Verwendung von biblatex mit biber raten. Man muss den Umgang zwar zunächst einmal erst erlernen, auf längere Sicht lohne sich das aber.

tom72
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Di 11. Dez 2012, 19:56

Beitrag von tom72 »

Hallo Besserwisser,

danke, das ist auch eine gute Lösung.

Mit biblatex und biber habe ich schon ein paar Erfahrungen sammeln können. Im Prinzip ist es auch mein Ziel diese beiden Pakete zu benutzen.
Mein Problem dabei ist, daß der Aufwand für die Anpassung der Zitat- und Bibliographiestile schon nicht unerheblich ist.

Ich habe mich in Dominik Waßenhovens Anleitung eingelesen und auch schon das ein oder andere erfolgreich angepasst. Aber ich verstehe nicht wirklich was ich da tue. Vieles war nur try&error. Leider.

Viele Grüße,
Tom

Antworten