Große Leerstelle vor \cite

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


IrenaSekuta
Forum-Century
Forum-Century
Beiträge: 230
Registriert: Di 2. Dez 2008, 10:05

Große Leerstelle vor \cite

Beitrag von IrenaSekuta »

Hallo zusammen,

in folgendem Beitrag wurde mir geholfen, einen eigenen Befehl zu erzeugen: http://www.golatex.de/viewtopic.php?t=3 ... 5fafcf6326

Anbei ein Minimalbeispiel aus dem mein Problem ersichtlich wird:

Code: Alles auswählen

\documentclass[ngerman]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{cite}

\makeatletter
\newcommand*{\Quelle}{
	\@ifnextchar{[}
		{\Quell@}
		{\Qu@lle}}
\def\Quell@[#1]#2{\cite[S.~#1]{#2}}
\def\Qu@lle#1{\cite{#1}}
\makeatother

\begin{document}

Hier wird nun ein Querverweis auf die Literaturstelle \Quelle{Lit1} gesetzt und hier auf die gleiche Literaturstelle jedoch mit Zusatzinformation \Quelle[12]{Lit1}. Leider gibt es unschöne, zu große Leerzeichen vor den Verweisenstellen.

Hier wird nun ein Querverweis auf die Literaturstelle\Quelle{Lit1} gesetzt und hier auf die gleiche Literaturstelle jedoch mit Zusatzinformation\Quelle[12]{Lit1}. Nun gibt es keine unschönen, zu großen Leerzeichen, jedoch ist dafür der Quelltext unschön ''formatiert''.

\begin{thebibliography}{Literatur}
\bibitem{Lit1}
	Text\par
	Text\par
\end{thebibliography}

\end{document}
Gruß,

Irena

Syralist
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 71
Registriert: Di 8. Jul 2008, 09:26
Wohnort: Bremen

Beitrag von Syralist »

Hallo Irena.

Es gibt bei meinem MikTex gar kein Paket cite. Wo kommt das denn her?
Aber das Minimalbeispiel funktioniert auch ohne.

Zu deinem Problem:
Der Zeilenumbruch in der Zeile mit \newcommand wird von LaTeX als Leerzeichen gesetzt. Wenn du den auskommentierst, funktioniert der Befehl wie gewünscht.

Code: Alles auswählen

\makeatletter
\newcommand*{\Quelle}{%
   \@ifnextchar{[}
      {\Quell@}
      {\Qu@lle}}
\def\Quell@[#1]#2{\cite[S.~#1]{#2}}
\def\Qu@lle#1{\cite{#1}}
\makeatother 
Ich hab meinen Befehl für Quellenangaben so ähnlich gebaut:

Code: Alles auswählen

\newcommand{\vergleiche}[2][\empty]{\xspace [vgl.: \ifthenelse{\equal{#1}{\empty}}{\cite{#2}}{\cite[#1]{#2}}]}
Find ich persönlich schicker im Quellcode weil ohne @, macht "nach aussen" aber fast das gleiche ;)
Ubuntu 11.10 / Windows 7
TexLive 2011 / MikTeX 2.8
vim / TeXworks 0.3
---
Dass jemand paranoid ist heißt nicht, dass er nicht verfolgt wird.

cliffhanger
Forum-Century
Forum-Century
Beiträge: 137
Registriert: Di 25. Aug 2009, 11:25
Wohnort: Regensburg

Beitrag von cliffhanger »

Hi Irena,

versuch mal, ob sich was ändert, wenn du in deiner Befehlsdefinition an das Ende jeder Zeile ein %-Zeichen (Kommentarzeichen) setzt. Möglicherweise sammeln sich in deinem Befehl durch die Zeilenwechsel mehrere Leerzeichen, die dir einen zu großen Abstand machen.

Gruß
Benedikt

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

Hallo,

ich habe im anderen Thread gerade eine Antwort geschrieben, siehe die Bemerkung zu Leerzeichen. In diesem Fall könnte die Definition so lauten:

Code: Alles auswählen

\newcommand*{\Quelle}{%
  \@ifnextchar[\Quell@\Qu@lle
}
Oder so:

Code: Alles auswählen

\newcommand*{\Quelle}{%
  \@ifnextchar[%
  \Quell@
  \Qu@lle
}
Die Kommentarzeichen sind dabei enorm wichtig!

IrenaSekuta
Forum-Century
Forum-Century
Beiträge: 230
Registriert: Di 2. Dez 2008, 10:05

Danke schön !!!

Beitrag von IrenaSekuta »

Hallo zusammen,

recht herzlichen Dank für die toller Erklärungen.
Es gibt bei meinem MikTex gar kein Paket cite. Wo kommt das denn her?
Sorry, hab das wohl im Eifer des Gefächtes spontan hinzugefügt.
Der Zeilenumbruch in der Zeile mit \newcommand wird von LaTeX als Leerzeichen gesetzt. Wenn du den auskommentierst, funktioniert der Befehl wie gewünscht.
Und ich hatte mich schon die ganze Zeit gefragt, warum %-Zeichen ans Ende einer Zeile gesetzt wurden, ohne einen Kommentar zu schreiben. Jetzt habe ich auch diesen Sinn verstanden: Damit kann ich einen Code über mehrere Zeilen schreiben, Latex interpretiert ihn jedoch als eine Zeile.

@phi
Habe deine Erklärung im anderen Thread gelesen. Herzlichen Dank! Leider verstehe ich noch nicht alles, hoffe jedoch, dass sich das mit der Zeit ändern wird.

Gruß,

Irena

Antworten