PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abkürzungspunkt nicht als Satzzeichen: Probleme mit eigenem Makro



slowfox
10-11-2010, 14:45
Ich habe mir für mein Dokument eine Reihe von Abkürzungen über ein Makro definiert. Um nur nötigenfalls ein nachfolgendes Leerzeichen anzugeben verwende ich xspace. Um den Abkürzungspunkt von Latex nicht als Satzendzeichen mit nachfolgendem vergrößerten Leerzeichen interpretieren zu lassen packe ich die Abkürzungen samt Punkt in eine mbox. (Alternativ könnte ich dies auch durch \@ nach dem Punkt lösen, da ich aber auch mehrteilige Abkürzungen habe, wie bspw. "z.B." verhindert mbox auch den Zeilenumbruch zwischen den einzelnen Teilen.) Das funktioniert soweit zufriedenstellend.

Nun verwende ich die Abkürzungen auch in den optionalen Parametern des cite-Befehls (ich verwende BibLatex), und dort verursacht mein Makro ein größeres Leerzeichen. Zur Kontrolle habe ich die im Makro verwendete Formulierung direkt als optionales Argument eingegeben und dabei festgestellt, das xspace das Problem ist.

Wie kann ich mein Abkürzungsmakro anpassen, um dieses Problem zu beseitigen?


\begin{filecontents}{\jobname.bib}
@BOOK{beispiel,
title = {Buchtitel},
publisher = {Verlag},
year = {2010},
author = {Autor, Vorname},
}
\end{filecontents}

\documentclass[ngerman]{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{babel}

\usepackage[style=authoryear-comp]{biblatex}
\bibliography{\jobname}

\usepackage{xspace}

\makeatletter
\newcommand\abk@vgl{\mbox{vgl.}\xspace}
%oder: \newcommand\abk@vgl{vgl.\@\xspace}
\makeatother
\newcommand\abk[1]{\csname abk@#1\endcsname}

\begin{document}

\noindent (\abk{vgl} Autor 2010).

\noindent (\abk{vgl} \cite{beispiel}).

\noindent \parencite[\abk{vgl}][]{beispiel}.

\noindent \parencite[\mbox{vgl.}\xspace][]{beispiel}.

\noindent \parencite[\mbox{vgl.}][]{beispiel}.

\end{document}

rais
10-11-2010, 21:26
Moin moin,

Ich habe mir für mein Dokument eine Reihe von Abkürzungen über ein Makro definiert. Um nur nötigenfalls ein nachfolgendes Leerzeichen anzugeben verwende ich xspace. Um den Abkürzungspunkt von Latex nicht als Satzendzeichen mit nachfolgendem vergrößerten Leerzeichen interpretieren zu lassen packe ich die Abkürzungen samt Punkt in eine mbox. (Alternativ könnte ich dies auch durch \@ nach dem Punkt lösen, da ich aber auch mehrteilige Abkürzungen habe, wie bspw. "z.B." verhindert mbox auch den Zeilenumbruch zwischen den einzelnen Teilen.) Das funktioniert soweit zufriedenstellend.

Nun verwende ich die Abkürzungen auch in den optionalen Parametern des cite-Befehls (ich verwende BibLatex), und dort verursacht mein Makro ein größeres Leerzeichen. Zur Kontrolle habe ich die im Makro verwendete Formulierung direkt als optionales Argument eingegeben und dabei festgestellt, das xspace das Problem ist.

Wie kann ich mein Abkürzungsmakro anpassen, um dieses Problem zu beseitigen?

lass \xspace in Deiner Definition weg und mach Dir vllt Gedanken darüber, was passieren soll, wenn auf so ein Abkürzungsmakro tatsächlich ein Satzendezeichen folgt -- oder was versteh ich nicht?

MfG

slowfox
11-11-2010, 11:00
Auf die Abkürzungen folgen sowohl Leerzeichen als auch schließende Klammern, den Fall eines Satzendzeichens habe ich tatsächlich nie. Ich verwende \xspace, um automatisch ein nachfolgendes Leerzeichen nur dann zu setzen, wenn dies notwendig ist, also bspw. nicht im Falle einer nachfolgenden Klammer. Sicherlich könnte ich manuell das Leerzeichen an den notwendigen Stellen erzwingen (ich muss dies ja explizit machen, da ein Leerzeichen nach einem Befehl ignoriert wird), aber dies ist mit einigem Mehraufwand verbunden, zumal meine Befehlsdefinition bislang zufriedenstellend funktionierte. Nur leider versagt sie, wenn ich sie als optionales Argument für den cite-Befehl verwende.

Die Anwendung im Text ist der Regelfall, im cite die Ausnahme. Ich kann mir natürlich für die Anwendung in cite einen zweiten Befehl definieren, aber ich hätte es schon gerne einheitlich. Für Hinweise bin ich immer dankbar!

rais
13-11-2010, 16:27
Moin moin,

Auf die Abkürzungen folgen sowohl Leerzeichen als auch schließende Klammern, den Fall eines Satzendzeichens habe ich tatsächlich nie. Ich verwende \xspace, um automatisch ein nachfolgendes Leerzeichen nur dann zu setzen, wenn dies notwendig ist, also bspw. nicht im Falle einer nachfolgenden Klammer. Sicherlich könnte ich manuell das Leerzeichen an den notwendigen Stellen erzwingen (ich muss dies ja explizit machen, da ein Leerzeichen nach einem Befehl ignoriert wird), aber dies ist mit einigem Mehraufwand verbunden, zumal meine Befehlsdefinition bislang zufriedenstellend funktionierte.
so ganz versteh ich Dein Problem noch nicht:


(\abk{vgl}) foo

(\abk{vgl} ) foo
zeigt mir -- unabhängig davon, ob ich \xspace innerhalb der \abk-Definition verwende, oder nicht -- in der Ausgabe


(vgl.) foo
(vgl. ) foo

MfG

slowfox
13-11-2010, 22:10
so ganz versteh ich Dein Problem noch nicht:

Das Problem kann man auch nicht verstehen, das war nämlich Blödsinn. Danke fürs Augenöffnen. xspace in meinem Makro stammt noch aus einer Zeit, in der ich es anders definiert und aufgerufen hatte. Da war es notwendig. Doch jetzt ist es überflüssig, mehr noch, es führt zu Fehlern. Nochmals danke!