Komplexer Zitationsbefehl

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


faultier
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 53
Registriert: Mi 30. Sep 2015, 18:23

Komplexer Zitationsbefehl

Beitrag von faultier »

Guten Tag,

ich bin gerade an der Entwicklung eines komplexen Zitationsbefehls.

Ursprünglich hatte ich einen Befehl für die direkten Zitate und einen für die indirekten Zitate:
 \DeclareCiteCommand{\citeindirekt}[\unspace] 
  {} 
  {\usebibmacro{citeindex}% 
     \iffieldundef{shorthand}  {\mkbibfootnote{\usebibmacro{prenote}\usebibmacro{cite}\usebibmacro{cite:postnote}}}      {\space\mkbibparens{\usebibmacro{prenote}\printfield{shorthand}\usebibmacro{cite:postnote}}}}
  {\multicitedelim}
  {}
\NewDocumentCommand\citedirekt{ o m m }{%
  {\blockquote[{\citeindirekt[#1]{#2}}]{#3}}}
Wie man anhand des Codes sieht, nutzt der Befehl für die direkten Zitate den Befehl für die indirekten Zitate, bettet ihn aber in eine Quote-Umgebung ein, damit abhängig von der Länge Anführungszeichen bzw. Ausgabe in kleinerer Schrift und mit Einrückungen erfolgen kann.

Zwischenzeitlich habe ich einen Befehl geschrieben, der abfragt, ob im prenote-Feld eine Eingabe getätigt wurde und daraufhin erkennt, ob es sich um ein direktes oder indirektes Zitat handelt.
\NewDocumentCommand\GemeinsamesZitat{ o m m m }{%
  \IfNoValueTF{#1}
   {\citedirekt[#2]{#3}{#4}}%
   {{#4}\citeindirekt[#1][#2]{#3}}%
   }
An dieser Lösung stört mich, dass die Seitenangaben in geschweiften Klammern erfolgen müssten, da das gegen das übliche Format der Zitationsbefehle in Latex verstößt.

Ideal wäre als Eingabe:
\GemeinsamesZitat[prenote][postnote]{bibkey}{Text}
Momentan wär es:
\GemeinsamesZitat[prenote]{postnote}{bibkey}{Text}
Also dachte ich mir, ich deklariere einfach einen Zitatbefehl mit dem \DeclareCiteCommand. Komme hier aber nicht so recht weiter, da ich nicht weiß, wie ich das Blockquote Kommando an dieser Stelle umsetzen muss.

Der momentane Code wäre:
\DeclareCiteCommand{\ZITAT}[\unspace] 
  {} 
  {\usebibmacro{citeindex}% 
   \iffieldundef{prenote}
   {\blockquote{Das ist ein kurzes direktes Zitat ohne Vgl.}}
   {%
     \iffieldundef{shorthand}      {\mkbibfootnote{\usebibmacro{prenote}\usebibmacro{cite}\usebibmacro{cite:postnote}}}      {\space\mkbibparens{\usebibmacro{prenote}\printfield{shorthand}\usebibmacro{cite:postnote}}}}}
  {\multicitedelim}
  {}
Gruss,Faultier

Gast

Beitrag von Gast »

Ich halte das immer noch für die falsche Idee. Du solltest biblatex anhand der Zitatbefehle erklären, welche Ausgabe Du gerne hättest, und nicht alles in \multihypereverycite stopfen. Außerdem stelle ich fest, dass \citeindirekt, wie ich hoffentlich gewarnt habe, so einige Funktionen von biblatex auf bösartige Weise zerstört.


Statt Deiner Definition von \citedirekt habe ich \newcommand{\citedirekt}{\blockcquote} benutzt.

Das Herzstück ist dann
\NewDocumentCommand\GemeinsamesZitat{ O{} o m m }{%
  \IfNoValueTF{#2}
    {\citedirekt[#1]{#3}{#4}}%
    {{#4}\citeindirekt[#1][#2]{#3}}}
MWE
\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{xparse}
\usepackage{csquotes}
\usepackage[style=authoryear-ibid]{biblatex}
\addbibresource{biblatex-examples.bib}

\DeclareCiteCommand{\citeindirekt}[\unspace]
  {}
  {\usebibmacro{citeindex}%
   \iffieldundef{shorthand}
     {\mkbibfootnote{\usebibmacro{prenote}\usebibmacro{cite}\usebibmacro{cite:postnote}}}
     {\space\mkbibparens{\usebibmacro{prenote}\printfield{shorthand}\usebibmacro{cite:postnote}}}}
  {\multicitedelim}
  {}

\SetCiteCommand{\citeindirekt}
\renewcommand{\mkcitation}[1]{#1}
\newcommand{\citedirekt}{\blockcquote}

\NewDocumentCommand\GemeinsamesZitat{ O{} o m m }{%
  \IfNoValueTF{#2}
    {\citedirekt[#1]{#3}{#4}}%
    {{#4}\citeindirekt[#1][#2]{#3}}}
 

\begin{document}
Lorem\citeindirekt{sigfridsson} ipsum\citeindirekt{kant:ku}

\GemeinsamesZitat[Vgl.][2]{sigfridsson}{Lorem ipsum.}

\GemeinsamesZitat[2]{kant:ku}{Lorem ipsum.}

\GemeinsamesZitat{geer}{Dolor sit.}
\end{document}
Es wäre übrigens unglaublich hilfreich, wenn Du Deiner Frage ein laufendes Minimalbeispiel beifügen würdest. Ich musste einige Zeit aufwenden, um alles zum Fliegen zu bekommen; Dich hätte es nur ein paar Sekunden gekostet eine Beispiel zu posten. Außerdem ist so garantiert, dass die Lösung tatsächlich zu Deinen Anforderungen passen.

faultier
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 53
Registriert: Mi 30. Sep 2015, 18:23

Beitrag von faultier »

Danke für die Hilfe. Leider bekomme ich so ein Minimalbeispiel noch nicht in wenigen Sekunden hin, weil ich noch nicht so ganz durch die Latex-Struktur durchsteige.

So habe ich z.B. bestimmt eine Woche mich durch's Netz gegoogelt, um eine Möglichkeit der Verwendung mehrerer optionaler Argumente zu finden. Überall fand sich nur der Hinweis, dass man nur ein optionales Argument verwenden könne. Mit NewDocumentCommand - oder auch /def - gab es zwar eine prinzipielle Definitionsmöglichkeit, aber keine von einem fehlenden ersten Argument auszugehen. Das konnte ich noch nachvollziehen, denn woher sollte Latex wissen können, dass es nicht das erste Argument ist, sondern das eigentlich zweit.

Dein Beispiel mit "O{}" habe ich nirgendwo als Vorschlag gefunden, woran liegt das? Ich nehme mal an, das optionale Argument vor {} wird aus der Prüfung herausgenommen.

Dass meine Definition einige Funktionen von biblatex zerstört, habe ich nicht gesehen. Woran lässt sich das erkennen?

Aus welchen Gründen empfiehlst Du, keinen "allround" Cite Befehl zu verwenden? Was ich sehe, dass vielleicht das Risiko besteht, bei den Zitaten durcheinander zu geraten, wenn man nur einmal ein Vgl. oder ähnliches vergisst. Gerade dort, wo vorgegeben ist, in welcher Weise Zitate gesetzt werden sollen, erscheint mir der Einsatz verschiedener Citebefehle nur bedingt sinnvoll, schließlich entscheide ich nicht beim Schreiben, wie ich ein Werk zitieren möchte, sondern darüber entscheidet die Art des Werkes. Welche Erfahrungswerte sprechen gegen einen Cite-Befehl?

Nachvollziehbar ist für mich noch eine bestimmte Kompatibilität und Einheitlichkeit. Deshalb habe ich jetzt \citeindirekt als \autocite gesetzt, so dass ich im Text \autocite verwenden kann für die reinen Referenzen/indirekten Zitate. Nur arbeitet niemand außer mir mit dem Code und ich werde auch nicht morgen eine Physik Dissertation schreiben, so dass ich auf einmal andere Vorgaben berücksichtigen müsste, daher erschließt sich nur bedingt, warum es sich nicht empfiehlt, einen Citebefehl zu verwenden, der dann die Vorgaben umsetzt, die benötigt werden.

Vielleicht hast Du ja einen Gedanken für mich, der mir hilft den Ansatz zu verstehen.

Viele Grüße
Faultier

Gast

Beitrag von Gast »

faultier hat geschrieben:Danke für die Hilfe. Leider bekomme ich so ein Minimalbeispiel noch nicht in wenigen Sekunden hin, weil ich noch nicht so ganz durch die Latex-Struktur durchsteige.
Gut, aber die paar Brocken, die Du uns hingeworfen hast, hättest Du eben noch ein echtes Dokument einbetten können, das wirklich kompiliert (ich musste zum Beispiel raten, welchen Bibliographie-Stil Du benutzt).
faultier hat geschrieben:Dein Beispiel mit "O{}" habe ich nirgendwo als Vorschlag gefunden, woran liegt das? Ich nehme mal an, das optionale Argument vor {} wird aus der Prüfung herausgenommen.
Das O{} ist ein optionales Argument, das, wenn es nicht angegeben wird, leer ist. Da biblatex selbst Tests nach leeren Argumenten macht, funktionierte das hier. Sonst hätten wir unter Umständen noch ein paar Test mehr benutzen müssen. Außerdem muss man zunächst wissen, was passiert, wenn man nur ein optionales Argument angibt (ob es als #1 oder #2 gewertet wird). Ein Problem hier ist, dass die neuen LaTeX3-Features von [d]xparse[/d] nicht überall zu finden sind, da muss man meist direkt an die Quelle (also die Dokumentation).
faultier hat geschrieben:Dass meine Definition einige Funktionen von biblatex zerstört, habe ich nicht gesehen. Woran lässt sich das erkennen?
Zunächst funktionieren Zitate wie \citeindirekt{foo,bar} nicht mehr so gut. Damit könnte man wohl noch leben, aber mit einigen von mir getesteten Stilen zerschießt das die "ibid"-Funktionalität.

faultier hat geschrieben:Aus welchen Gründen empfiehlst Du, keinen "allround" Cite Befehl zu verwenden? Was ich sehe, dass vielleicht das Risiko besteht, bei den Zitaten durcheinander zu geraten, wenn man nur einmal ein Vgl. oder ähnliches vergisst. Gerade dort, wo vorgegeben ist, in welcher Weise Zitate gesetzt werden sollen, erscheint mir der Einsatz verschiedener Citebefehle nur bedingt sinnvoll, schließlich entscheide ich nicht beim Schreiben, wie ich ein Werk zitieren möchte, sondern darüber entscheidet die Art des Werkes.
Gut, das mit der Werksart lasse ich gerade noch gelten, das ist wohl eher ein ungünstiger Zitierstil als ein konzeptionelles Problem. Bei direkten vs. indirekten Zitaten allerdings finde ich es gefährlich, einen kombinierten Befehl zu nutzen. Während Du schreibst, weißt Du sehr genau, was ein indirektes und was ein direktes Zitat ist. Direkte Zitate sollten in eine ...quote-Umgebung und dann wird das Zitat mit \...cite angegeben (oder schöner in einem mit ...cquote). Bei indirekten Zitaten wird an der richtigen Stelle ein \...cite gesetzt. Das erfordert kein größeres zusätzliches Mitdenken als die korrekte Übernahme des zitierten Texts.
Genau das Problem mit dem vergessenen "Vgl." macht mir auch Sorgen, es ist viel schwieriger in der normalen Methode einen Fehler zu machen und ein Fehler ist leichter zu erkennen. Wenn Du mit Deinem Universalbefehl in einem Direktzitat versehentlich ein "Vgl." dazutust, dann ist in der PDF noch nicht mal mehr zu erkennen, dass das eigentlich ein Direktzitat ist.

Antworten