Verbesserungen zu eigener Zitierregel auf Basis von numeric

Inhalt, Abbildungen, Tabellen, Quellcodes und andere Verzeichnisse


TheChosen0ne
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Di 27. Apr 2021, 11:33

Verbesserungen zu eigener Zitierregel auf Basis von numeric

Beitrag von TheChosen0ne »

Hallo zusammen!
Ich nutze biblatex mit dem style=numeric, wodurch ein Quellenverweis wiefolgt aussieht:
\parencite[vgl.][71]{test1} => [vgl. 1, S. 71].
Auf Anforderung meines Profs habe ich im Thread viewtopic.php?f=7&t=23792 angefragt, die Zitierregel so abzuändern, dass es sich wiefolgt verhält:

  • \parencite[vgl.][71]{test1} => (vgl. [1], S. 71)

  • \parencite[vgl.][]{test1} => (vgl. [1])

  • \parencite[71]{test1} => ([1], S. 71)

  • \parencite{test1} => [1]

Eine Antwort hat mir geholfen, dies umzusetzen. Es gibt allerdings offene Punkte die ich nun unbedingt beheben muss:

  • Mir ist in Captions (wie bspw. unter Abbildungen) aufgefallen, dass dort das Muster garnicht angewandt wird. Das liegt wohl daran, weil ich dort i.d.R. \cite anstelle \parencite verwende. Es wäre toll, wenn auch der Cite-Befehl so angepasst werden könnte, dass es die selben Ausgaben erzeugt, nur ohne die runden Klammern außen rum:

    • \cite[vgl.][71]{test1} => vgl. [1], S. 71

    • \cite[vgl.][]{test1} => vgl. [1]

    • \cite[71]{test1} => [1], S. 71

    • \cite{test1} => [1]

  • Ausgaben für mehrere Verweise auf mehrere Quellen (also bspw. \parencites[vgl.][71]{test1}) in demselben Muster, ebenso mit \cites.

Folgendes Minimalbeispiel zeigt die bisherige eigene Zitierregel und ihre Anwendung:

\documentclass[
	12pt,
	a4paper,
	draft,
	ngerman
]{article}

\usepackage[ngerman]{babel} %Silbentrennung
\usepackage[utf8]{inputenc} %Umlaute

\usepackage[T1]{fontenc} %Silbentrennung mit Umlauten
\usepackage[a4paper,lmargin={4cm},rmargin={2cm},tmargin={2.5cm},bmargin = {2.5cm}]{geometry} %Randabstand
\usepackage[onehalfspacing]{setspace} % 1,5facher Zeilenabstand

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib} 
	@Book{test1, 
		author    = {Goossens, Michel and Mittelbach, 
			Frank and Samarin, Alexander}, 
		title     = {The LaTeX Companion}, 
		publisher = {Addison-Wesley}, 
		location  = {Reading, Mass.}, 
		year      = {1994},
	}
	@Book{test2,
		author = "John Doe",
		title = "Untitled Book",
		publisher = "Dummy Publisher",
		year = 2019,
	}
\end{filecontents} 
\usepackage[backend=biber, style=numeric]{biblatex}
\addbibresource{\jobname.bib} % Einbindung der Literatur-Datei

\makeatletter
\newcommand*{\ifnopreorpostnote}{%
	\iffieldundef{prenote}
	{\iffieldundef{postnote}}
	{\@secondoftwo}}
\makeatother

\DeclareCiteCommand{\parencite}
{\ifnopreorpostnote
	{}
	{\printtext{\bibopenparen}}%
	\usebibmacro{prenote}%
	\printtext{\bibopenbracket}}
{\usebibmacro{citeindex}%
	\usebibmacro{cite}}
{\multicitedelim}
{\printtext{\bibclosebracket}%
	\usebibmacro{postnote}%
	\ifnopreorpostnote
	{}
	{\printtext{\bibcloseparen}}}



\begin{document} 
	\section{MiniBsp}
	Parencite:\\
	\parencite[vgl.][71]{test1}\\
	\parencite[vgl.][]{test1}\\
	\parencite[71]{test1}\\
	\parencite{test1}\\
	\\
	Parencites:\\
	\parencites[vgl.][11]{test1}[vgl.][22]{test2}\\
	\parencites[vgl.][]{test1}[vgl.][]{test2}\\
	\parencites[11]{test1}[22]{test2}\\
	\parencites{test1}{test2}\\
	\\
	Cite:\\
	\cite[vgl.][71]{test1}\\
	\cite[vgl.][]{test1}\\
	\cite[71]{test1}\\
	\cite{test1}\\
	\\
	Cites:\\
	\cites[vgl.][11]{test1}[vgl.][22]{test2}\\
	\cites[vgl.][]{test1}[vgl.][]{test2}\\
	\cites[11]{test1}[22]{test2}\\
	\cites{test1}{test2}\\
	
\nocite{*} 
\printbibliography 
\end{document}

Die Regeln sind sehr wichtig für die Umsetzung der Anforderungen meines Profs und meiner Betreuer. Ich wäre sehr froh und dankbar, wenn ihr mir hierbei helfen könnt.

Viele Grüße

Zuletzt geändert von TheChosen0ne am So 6. Jun 2021, 14:14, insgesamt 1-mal geändert.

MoeWe
Forum-Guru
Forum-Guru
Beiträge: 461
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Verbesserungen zu eigener Zitierregel auf Basis von numeric

Beitrag von MoeWe »

Zu Punkt 1:

Du kannst natürlich die Definition von \parencite nehmen, sie kopieren und statt \parencite einfach \cite in das erste Argument von \DeclareCiteCommand schreiben. Dann wird auch \cite umdefiniert. Aber ehrlich gesagt würde ich einfach meinen Editor nehmen und mit der Suchen-und-Ersetzen-Funktion \cite[ zu \parencite[ und \cite{ zu \parencite{ umwandeln und fertig.


TheChosen0ne
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Di 27. Apr 2021, 11:33

Re: Verbesserungen zu eigener Zitierregel auf Basis von numeric

Beitrag von TheChosen0ne »

MoeWe hat geschrieben:
So 6. Jun 2021, 14:00

Zu Punkt 1:

Du kannst natürlich die Definition von \parencite nehmen, sie kopieren und statt \parencite einfach \cite in das erste Argument von \DeclareCiteCommand schreiben. Dann wird auch \cite umdefiniert. Aber ehrlich gesagt würde ich einfach meinen Editor nehmen und mit der Suchen-und-Ersetzen-Funktion \cite[ zu \parencite[ und \cite{ zu \parencite{ umwandeln und fertig.

Hi! Danke für die Antwort. Wie im Ursprungspost beschrieben, soll die Ausgabe nicht exakt gleich aussehen, die runden Klammern außen rum sollen weg. Habe mal den Ursprungspost bearbeitet, damit das deutlicher wird.

EDIT: Habe das für \cite nun doch selbst hinbekommen:

\DeclareCiteCommand{\cite}
{%
	\usebibmacro{prenote}%
	\printtext{\bibopenbracket}}
{\usebibmacro{citeindex}%
	\usebibmacro{cite}}
{\multicitedelim}
{\printtext{\bibclosebracket}%
	\usebibmacro{postnote}}

Es bleibt jedoch die Frage offen, wie ich die Ausgaben für \cites und \parencites umsetzen kann. Das kriege ich leider nicht hin.


MoeWe
Forum-Guru
Forum-Guru
Beiträge: 461
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Verbesserungen zu eigener Zitierregel auf Basis von numeric

Beitrag von MoeWe »

Hupps, das hatte ich überlesen, sorry.

In der Definition von \parencite gibt es ein \printtext{\bibopenparen} und ein \printtext{\bibcloseparen}. Die sorgen für die Klammern und müssen bei \cite weg.

\documentclass[
	12pt,
	a4paper,
	draft,
	ngerman
]{article}

\usepackage[ngerman]{babel} %Silbentrennung
\usepackage[utf8]{inputenc} %Umlaute

\usepackage[T1]{fontenc} %Silbentrennung mit Umlauten
\usepackage[a4paper,lmargin={4cm},rmargin={2cm},tmargin={2.5cm},bmargin = {2.5cm}]{geometry} %Randabstand
\usepackage[onehalfspacing]{setspace} % 1,5facher Zeilenabstand

\usepackage[backend=biber, style=numeric]{biblatex}


\makeatletter
\newcommand*{\ifnopreorpostnote}{%
  \iffieldundef{prenote}
    {\iffieldundef{postnote}}
    {\@secondoftwo}}
\makeatother

\DeclareCiteCommand{\parencite}
  {\ifnopreorpostnote
     {}
     {\printtext{\bibopenparen}}%
      \usebibmacro{prenote}%
      \printtext{\bibopenbracket}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\printtext{\bibclosebracket}%
   \usebibmacro{postnote}%
   \ifnopreorpostnote
     {}
     {\printtext{\bibcloseparen}}}

\DeclareCiteCommand{\cite}
  {\usebibmacro{prenote}%
   \printtext{\bibopenbracket}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\printtext{\bibclosebracket}%
   \usebibmacro{postnote}}
\DeclareMultiCiteCommand{\cites}{\cite}{\multicitedelim}

\addbibresource{biblatex-examples.bib}

\begin{document}
  \section{MiniBsp}
  \paragraph{Parencite}
  Lorem \parencite[vgl.][71]{sigfridsson}
  ipsum \parencite[vgl.][]{sigfridsson}
  dolor \parencite[71]{sigfridsson}
  sit \parencite{sigfridsson}

  \paragraph{Parencites}
  Lorem \parencites[vgl.][11]{sigfridsson}[vgl.][22]{geer}
  ipsum \parencites[vgl.][]{sigfridsson}[vgl.][]{geer}
  dolor \parencites[11]{sigfridsson}[22]{geer}
  sit \parencites{sigfridsson}{geer}

  \paragraph{Cite}
  Lorem \cite[vgl.][71]{sigfridsson}
  ipsum \cite[vgl.][]{sigfridsson}
  dolor \cite[71]{sigfridsson} 
  sit \cite{sigfridsson}

  \paragraph{Cites}
  Lorem \cites[vgl.][11]{sigfridsson}[vgl.][22]{geer}
  ipsum \cites[vgl.][]{sigfridsson}[vgl.][]{geer}
  dolor \cites[11]{sigfridsson}[22]{geer}
  sit \cites{sigfridsson}{geer}

  \printbibliography
\end{document}

Wobei ich nicht ganz verstehe, wieso Du in Deinem ursprünglichen Beispiel nicht

\caption{Dies ist eine Caption \parencite[in Anlehnung an][3]{test1}}

statt \caption{Dies ist eine Caption (in Anlehnung an: \cite[3]{test1})} verwendest.


Es mag ein Artefakt des Beispiels sein, aber auf die Gefahr hin, dass es auch im echten Dokument auftaucht: In normalem Fließtext sollte man eigentlich nie \\ nutzen. Absätze werden mit einer Leerzeile oder \par beendet und innerhalb eines Absatzes werden keine weiteren Umbrüche gemacht als die, die automatisch am Zeilenende passieren (\\ kann für manuelle Anpassung schlechter Umbrüche nötig sein, aber das ist sehr selten).


TheChosen0ne
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Di 27. Apr 2021, 11:33

Re: Verbesserungen zu eigener Zitierregel auf Basis von numeric

Beitrag von TheChosen0ne »

MoeWe hat geschrieben:
So 6. Jun 2021, 15:04
\documentclass[
	12pt,
	a4paper,
	draft,
	ngerman
]{article}

\usepackage[ngerman]{babel} %Silbentrennung
\usepackage[utf8]{inputenc} %Umlaute

\usepackage[T1]{fontenc} %Silbentrennung mit Umlauten
\usepackage[a4paper,lmargin={4cm},rmargin={2cm},tmargin={2.5cm},bmargin = {2.5cm}]{geometry} %Randabstand
\usepackage[onehalfspacing]{setspace} % 1,5facher Zeilenabstand

\usepackage[backend=biber, style=numeric]{biblatex}


\makeatletter
\newcommand*{\ifnopreorpostnote}{%
  \iffieldundef{prenote}
    {\iffieldundef{postnote}}
    {\@secondoftwo}}
\makeatother

\DeclareCiteCommand{\parencite}
  {\ifnopreorpostnote
     {}
     {\printtext{\bibopenparen}}%
      \usebibmacro{prenote}%
      \printtext{\bibopenbracket}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\printtext{\bibclosebracket}%
   \usebibmacro{postnote}%
   \ifnopreorpostnote
     {}
     {\printtext{\bibcloseparen}}}

\DeclareCiteCommand{\cite}
  {\usebibmacro{prenote}%
   \printtext{\bibopenbracket}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\printtext{\bibclosebracket}%
   \usebibmacro{postnote}}
\DeclareMultiCiteCommand{\cites}{\cite}{\multicitedelim}

\addbibresource{biblatex-examples.bib}

\begin{document}
  \section{MiniBsp}
  \paragraph{Parencite}
  Lorem \parencite[vgl.][71]{sigfridsson}
  ipsum \parencite[vgl.][]{sigfridsson}
  dolor \parencite[71]{sigfridsson}
  sit \parencite{sigfridsson}

  \paragraph{Parencites}
  Lorem \parencites[vgl.][11]{sigfridsson}[vgl.][22]{geer}
  ipsum \parencites[vgl.][]{sigfridsson}[vgl.][]{geer}
  dolor \parencites[11]{sigfridsson}[22]{geer}
  sit \parencites{sigfridsson}{geer}

  \paragraph{Cite}
  Lorem \cite[vgl.][71]{sigfridsson}
  ipsum \cite[vgl.][]{sigfridsson}
  dolor \cite[71]{sigfridsson} 
  sit \cite{sigfridsson}

  \paragraph{Cites}
  Lorem \cites[vgl.][11]{sigfridsson}[vgl.][22]{geer}
  ipsum \cites[vgl.][]{sigfridsson}[vgl.][]{geer}
  dolor \cites[11]{sigfridsson}[22]{geer}
  sit \cites{sigfridsson}{geer}

  \printbibliography
\end{document}

Vielen Dank für den Tipp mit dem DeclareMultiCiteCommand! Wir kommen dem ganzen näher.

MoeWe hat geschrieben:
So 6. Jun 2021, 15:04

Wobei ich nicht ganz verstehe, wieso Du in Deinem ursprünglichen Beispiel nicht

\caption{Dies ist eine Caption \parencite[in Anlehnung an][3]{test1}}

statt \caption{Dies ist eine Caption (in Anlehnung an: \cite[3]{test1})} verwendest.

Berechtigte Frage... habe vor lauter Bäumen den Wald nicht gesehen - zumindest was die Captions angeht. Allerdings benutze ich auch im Text \cite und dafür wäre die Regeländerung ebenfalls notwendig gewesen. Von daher passt das. Danke auch für den Tipp mit den "\\". War jetzt tatsächlich nur für das Beispiel.

Ich habe jetzt mit deiner Hilfe die Kommandos so angepasst, dass bei Multicites die verschiedenen Quellen mit Semikolon statt Komma getrennt werden (ist zwar nicht so mit dem Prof abgesprochen, aber ist durch die Kommas der Seitenangaben sicherlich übersichtlicher - ansonsten kann ich den Einzeiler ja easy wieder löschen):

\documentclass[
12pt,
a4paper,
draft,
ngerman
]{article}

\usepackage[ngerman]{babel} %Silbentrennung
\usepackage[utf8]{inputenc} %Umlaute

\usepackage[T1]{fontenc} %Silbentrennung mit Umlauten
\usepackage[a4paper,lmargin={4cm},rmargin={2cm},tmargin={2.5cm},bmargin = {2.5cm}]{geometry} %Randabstand
\usepackage[onehalfspacing]{setspace} % 1,5facher Zeilenabstand

\usepackage[backend=biber, style=numeric]{biblatex}

\makeatletter
\newcommand*{\ifnopreorpostnote}{%
	\iffieldundef{prenote}
	{\iffieldundef{postnote}}
	{\@secondoftwo}}
\makeatother

\renewcommand{\multicitedelim}{\addsemicolon\space}

\DeclareCiteCommand{\parencite}
{\ifnopreorpostnote
	{}
	{\printtext{\bibopenparen}}%
	\usebibmacro{prenote}%
	\printtext{\bibopenbracket}}
{\usebibmacro{citeindex}%
	\usebibmacro{cite}}
{\postnotedelim}
{\printtext{\bibclosebracket}%
	\usebibmacro{postnote}%
	\ifnopreorpostnote
	{}
	{\printtext{\bibcloseparen}}}
\DeclareMultiCiteCommand{\parencites}{\parencite}{\multicitedelim}

\DeclareCiteCommand{\cite}
{%
	\usebibmacro{prenote}%
	\printtext{\bibopenbracket}}
{\usebibmacro{citeindex}%
	\usebibmacro{cite}}
{\postnotedelim}
{\printtext{\bibclosebracket}%
	\usebibmacro{postnote}}
\DeclareMultiCiteCommand{\cites}{\cite}{\multicitedelim}

\addbibresource{biblatex-examples.bib}
\begin{document} 
	\section{MiniBsp}
	Parencite:\\
	\parencite[vgl.][71]{geer}\\
	\parencite[vgl.][]{geer}\\
	\parencite[71]{geer}\\
	\parencite{geer}\\
	\\
	Cite:\\
	\cite[vgl.][71]{geer}\\
	\cite[vgl.][]{geer}\\
	\cite[71]{geer}\\
	\cite{geer}\\
	\\
	Parencites:\\
	\parencites[vgl.][11]{geer}[vgl.][22]{sigfridsson}\\
	\parencites[vgl.][]{geer}[vgl.][]{sigfridsson}\\
	\parencites[11]{geer}[22]{sigfridsson}\\
	\parencites{geer}{sigfridsson}\\
	\\
	Cites:\\
	\cites[vgl.][11]{geer}[vgl.][22]{sigfridsson}\\
	\cites[vgl.][]{geer}[vgl.][]{sigfridsson}\\
	\cites[11]{geer}[22]{sigfridsson}\\
	\cites{geer}{sigfridsson}\\
	
\printbibliography 
\end{document}

Wenn wir jetzt noch den \parencites-Befehl so ändern können, dass die verschiedenen Quellen nicht jeweils runde Klammern verwenden, sondern der ganze Block zusammen, bin ich rundum glücklich!
Also so:

  • \parencites[vgl.][11]{geer}[vgl.][22]{sigfridsson} => (vgl. [1], S. 11; vgl. [2], S.22)

  • \parencites[vgl.][]{geer}[vgl.][]{sigfridsson} => (vgl. [1]; vgl. [2])

  • \parencites[11]{geer}[22]{sigfridsson} => ([1], S. 11; [2], S. 22)

  • \parencites{geer}{sigfridsson} => [1]; [2]


MoeWe
Forum-Guru
Forum-Guru
Beiträge: 461
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Verbesserungen zu eigener Zitierregel auf Basis von numeric

Beitrag von MoeWe »

Die gewünschte Ausgabe für \parencites ist sehr tricky, da \parencites seine geschweiften Klammern einzeln abarbeitet (soll heißen in \parencites[pre1][post1]{key1}[pre2][post2]{key2} werden [pre1][post1]{key1} und [pre2][post2]{key2} weitestgehend unabhängig betrachtet). Insbesondere weiß der erste Eintrag nicht, ob später weiter hinten noch pre- oder postnotes kommen, kann also zu dem Zeitpunkt nicht entscheiden, ob runde Klammern gesetzt werden sollen. Theoretisch wäre es möglich, wie bei der Implementation von \textcite in einigen Stilen die Zitate einmal mit einem internen Befehl "vorzubereiten" und dort die pre- und postnotes zu zählen. Aber das ist frickelig. Vielleicht gibt es auch eine andere Methode, aber da müsste man dann wohl in der Implementierung der Multi-Cite-Befehle herumwühlen - auch keine so schöne Vorstellung.


Antworten