Bestimmte Dokumententypen nicht mit im Literaturverzeichnis ausgeben

Philip S. hinzugefügt 10 Monaten her
beantwortet

Hallo,

es gibt schon ein ähnliches Thema zu dieser Frage, allerdings findet mein Kommentar dort bisher keine Beachtung: Titel eines bestimmten Dokumententyps nicht in das Literaturverzeichnis aufnehmen

Peter berichtet dort von zwei Möglichkeiten das Thema zu lösen: a) mit einem gruppierten Literaturverzeichnis und b) mit einem integrierten Skrip im Zitationsstil.

Die Option (a) geht zwar, muss aber in jedem neuen Projekt angepasst werden bzw. als Gruppierungsdefinition importiert werden. Eleganter fände ich es, wenn diese Anpassung direkt im Zitationsstil liegen würde.

Kann mir einer die Anpassung (Skript) für die direkte Lösung im Zitationsstil liefern?

Vielen Dank im Voraus!


Freundliche Grüße

Philip

Beste Antwort
Foto

Hallo Philipp

Löschen Sie den Programmcode in Ihrem Stil unter Datei > Eigenschaften des Zitationsstils > Literaturverzeichnis > Sortierung > Programmieren. (Screenshot) Fügen Sie stattdessen diesen Code ein:using System;

using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Citations;
using SwissAcademic.Citavi.Metadata;
using SwissAcademic.Collections;

namespace SwissAcademic.Citavi.Comparers
{
	public class CustomCitationComparer
		:
		ICustomCitationComparerMacro
	{
		public int Compare(Citation x, Citation y)
		{
			//First we make sure we are comparing BibliographyCitations only
			var xBibliographyCitation = x as BibliographyCitation;
			var yBibliographyCitation = y as BibliographyCitation;

			if (xBibliographyCitation == null || yBibliographyCitation == null) return 0;
			var xReference = xBibliographyCitation.Reference;
			var yReference = yBibliographyCitation.Reference;
			if (xReference == null || yReference == null) return 0;
		
			#region Ausschluss Dokumententypen vom Literaturverzeichnis
			
			//Set the NoBib flag to true for File ("Akte")
			if (xReference.ReferenceType == ReferenceType.File) xBibliographyCitation.NoBib = true;
			if (yReference.ReferenceType == ReferenceType.File) yBibliographyCitation.NoBib = true;
			
			//Set the NoBib flag to true for StatuteOrRegulation ("Gesetz / Verordnung")
			if (xReference.ReferenceType == ReferenceType.StatuteOrRegulation) xBibliographyCitation.NoBib = true;
			if (yReference.ReferenceType == ReferenceType.StatuteOrRegulation) yBibliographyCitation.NoBib = true;
			

			
			#endregion
			
		
			Template xTemplate = xBibliographyCitation.Template;
			Template yTemplate = yBibliographyCitation.Template;
			if (xTemplate == null || xTemplate.ComponentParts == null || !xTemplate.ComponentParts.Any()) return 0;
			if (yTemplate == null || yTemplate.ComponentParts == null || !yTemplate.ComponentParts.Any()) return 0;
			
			ComponentPart xFirstComponentPart = xTemplate.ComponentParts.FirstOrDefault();
			ComponentPart yFirstComponentPart = yTemplate.ComponentParts.FirstOrDefault();
			if (xFirstComponentPart == null || yFirstComponentPart == null) return 0;
			
			IEnumerable<ITextUnit> xOutput = xFirstComponentPart.GetTextUnits(xBibliographyCitation, xTemplate);
			IEnumerable<ITextUnit> yOutput = yFirstComponentPart.GetTextUnits(yBibliographyCitation, yTemplate);
			if (xOutput == null || !xOutput.Any()) xOutput = xBibliographyCitation.GetTextUnits();
			if (yOutput == null || !yOutput.Any()) yOutput = yBibliographyCitation.GetTextUnits();
			
			if (xOutput == null || !xOutput.Any()) return 0;
			if (yOutput == null || !yOutput.Any()) return 0;
			
			
			string xOutputString = xOutput.ToString();
			string yOutputString = yOutput.ToString();
				
			int firstResult = xOutputString.CompareTo(yOutputString);
			if (firstResult != 0) return firstResult;
			
			var yearTitleVolumeSortDescriptors = new List<PropertySortDescriptor<Reference>>();
			yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor<Reference>(ReferencePropertyDescriptor.Title));
			yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor<Reference>(ReferencePropertyDescriptor.YearResolved));
			yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor<Reference>(ReferencePropertyDescriptor.Volume));
			yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor<Reference>(ReferencePropertyDescriptor.Number));
			var yearTitleVolumeComparer = new CitationComparer(yearTitleVolumeSortDescriptors);
			
			return yearTitleVolumeComparer.Compare(xBibliographyCitation, yBibliographyCitation);
		}
	}
}

Kommentare (4)

Foto
1

Hallo Philip

Entschuldigen Sie, dass Ihr Kommentar ohne Reaktion blieb.

Möchten Sie diese Dokumententypen im Literaturverzeichnis unterdrücken?

  • Beitrag im Gesetzeskommentar
  • Sammelwerk
  • Gerichtsentscheidung

Freundliche Grüsse

Peter

Foto
1

Hallo Peter,

konkret für meinen Zitationsstil wären es folgende Dokumententypen:

  • Akte
  • Gesetz / Verordnung im Sammelwerk
  • Gesetz / Verordnung in Zeitschrift

Freundliche Grüße

Philip

Foto
2

Hallo Philipp

Löschen Sie den Programmcode in Ihrem Stil unter Datei > Eigenschaften des Zitationsstils > Literaturverzeichnis > Sortierung > Programmieren. (Screenshot) Fügen Sie stattdessen diesen Code ein:using System;

using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Citations;
using SwissAcademic.Citavi.Metadata;
using SwissAcademic.Collections;

namespace SwissAcademic.Citavi.Comparers
{
	public class CustomCitationComparer
		:
		ICustomCitationComparerMacro
	{
		public int Compare(Citation x, Citation y)
		{
			//First we make sure we are comparing BibliographyCitations only
			var xBibliographyCitation = x as BibliographyCitation;
			var yBibliographyCitation = y as BibliographyCitation;

			if (xBibliographyCitation == null || yBibliographyCitation == null) return 0;
			var xReference = xBibliographyCitation.Reference;
			var yReference = yBibliographyCitation.Reference;
			if (xReference == null || yReference == null) return 0;
		
			#region Ausschluss Dokumententypen vom Literaturverzeichnis
			
			//Set the NoBib flag to true for File ("Akte")
			if (xReference.ReferenceType == ReferenceType.File) xBibliographyCitation.NoBib = true;
			if (yReference.ReferenceType == ReferenceType.File) yBibliographyCitation.NoBib = true;
			
			//Set the NoBib flag to true for StatuteOrRegulation ("Gesetz / Verordnung")
			if (xReference.ReferenceType == ReferenceType.StatuteOrRegulation) xBibliographyCitation.NoBib = true;
			if (yReference.ReferenceType == ReferenceType.StatuteOrRegulation) yBibliographyCitation.NoBib = true;
			

			
			#endregion
			
		
			Template xTemplate = xBibliographyCitation.Template;
			Template yTemplate = yBibliographyCitation.Template;
			if (xTemplate == null || xTemplate.ComponentParts == null || !xTemplate.ComponentParts.Any()) return 0;
			if (yTemplate == null || yTemplate.ComponentParts == null || !yTemplate.ComponentParts.Any()) return 0;
			
			ComponentPart xFirstComponentPart = xTemplate.ComponentParts.FirstOrDefault();
			ComponentPart yFirstComponentPart = yTemplate.ComponentParts.FirstOrDefault();
			if (xFirstComponentPart == null || yFirstComponentPart == null) return 0;
			
			IEnumerable<ITextUnit> xOutput = xFirstComponentPart.GetTextUnits(xBibliographyCitation, xTemplate);
			IEnumerable<ITextUnit> yOutput = yFirstComponentPart.GetTextUnits(yBibliographyCitation, yTemplate);
			if (xOutput == null || !xOutput.Any()) xOutput = xBibliographyCitation.GetTextUnits();
			if (yOutput == null || !yOutput.Any()) yOutput = yBibliographyCitation.GetTextUnits();
			
			if (xOutput == null || !xOutput.Any()) return 0;
			if (yOutput == null || !yOutput.Any()) return 0;
			
			
			string xOutputString = xOutput.ToString();
			string yOutputString = yOutput.ToString();
				
			int firstResult = xOutputString.CompareTo(yOutputString);
			if (firstResult != 0) return firstResult;
			
			var yearTitleVolumeSortDescriptors = new List<PropertySortDescriptor<Reference>>();
			yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor<Reference>(ReferencePropertyDescriptor.Title));
			yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor<Reference>(ReferencePropertyDescriptor.YearResolved));
			yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor<Reference>(ReferencePropertyDescriptor.Volume));
			yearTitleVolumeSortDescriptors.Add(new PropertySortDescriptor<Reference>(ReferencePropertyDescriptor.Number));
			var yearTitleVolumeComparer = new CitationComparer(yearTitleVolumeSortDescriptors);
			
			return yearTitleVolumeComparer.Compare(xBibliographyCitation, yBibliographyCitation);
		}
	}
}

Foto
1

Hallo Peter,

vielen Dank für die schnelle Antwort, allerdings erscheinen die betreffenden Dokumententypen weiterhin im Literaturverzeichnis bzw. folgender Text: "[Der Titel "Beispieltitel" kann nicht dargestellt werden. Die Vorlage "Literaturverzeichnis - Akte - (Standardvorlage)" enthält keine Informationen.]"

Das klingt auch pausibel, weil die Vorlage für das Literaturverzeichnis der betreffenden Dokumententypen keine Komponenten enthält.

Freundliche Grüße

Philip

Foto
1

Hallo Philip

Senden Sie uns bitte Ihren Zitationsstil.

Freundliche Grüsse

Peter

Foto
1

Hallo Peter,

die Ticket ID lautet 69367-01-24.

Freundliche Grüße

Philip

Foto
1

Hallo Philip

Ich habe per Mail geantwortet.

Freundliche Grüsse

Peter

Foto
1

Hallo Peter,

vielen Dank für die Rückmeldung.

Ich habe es selbst jetzt auch noch einmal probiert und im Grunde funktioniert es jetzt auch wie gewünscht. Allerdings gibt es noch einen kleinen Haken: Es funktioniert erst ab zwei verschiedenen Dokumententypen. Wenn ich mehrmals nur aus einer Akte oder einem Gesetz zitiere erscheint ein entsprechender Eintrag im Literaturverzeichnis. Sobald nun beispielsweise eine Monographie dazu kommt, verschwindet der Eintrag.

In der Praxis wird man wohl immer mehr als nur ein Dokumententyp nutzen. Trotzdem will ich an dieser Stelle darauf hinweisen, dass der zur Verfügung gestellte Programmcode diesen Sonderfall nicht abdeckt.


Freundliche Grüße

Philip

Foto
1

Hallo Philip

Weil die Frage sicherlich auch die Mitleserinnen und Mitleser interessiert, hier meine Antwort, die Sie schon per Mail erhaltne haben:

Das von Ihnen beobachtete Verhalten ist "by design". Es muss mindestens ein Titel vorhanden sein, der im Literaturverzeichnis ausgegeben werden soll, damit die anderen Titel/Dokumententypen unterdrückt werden können.

Freundliche Grüsse

Peter

Foto
1

Hallo Peter,

genau deswegen habe auch ich meine Reaktion nochmal hier öffentlich gepostet, damit es alle nachvollziehen können.

Der Anwendungsfall war konstruiert und damit nicht praxisnah, da das Ausschließen von bestimmten Dokumententypen ja impliziert, dass ich auch andere Dokumententypen nutze, die unbedingt ausgegeben werden sollen. Somit löst der Programmcode meine Anfordungen im Grunde vollumfänglich.

Vielen Dank für alles. Großes Lob an den Support hier: Ihr leistet echt eine tolle Arbeit!


Freundliche Grüße

Philip

Foto
1

:-) :-) :-)

Foto
2
Foto
1

Lieber Citavi-Support,

ich würde gern in meinem Zitationsstil folgende Dokumententypen im Literaturverzeichnis unterdrücken:

  • Beitrag im Gesetzeskommentar
  • Beitrag im Sammelwerk
  • Gesetz / Verordnung
  • Gerichtsentscheidung
  • Tagungsband

Fragen

  1. Könnt ihr mir für diese Reference Types bitte auch ein Makro bereit stellen?
  2. Gibt es ein Liste möglicher ReferenceTypes, die man ggf. selber manuell im Macro Editor bearbeiten kann und falls ja, wo finde ich diese?
  3. Ich nutze momentan noch Citavi 5. Muss ich ein Upgrade auf Version 6 durchführen, um euer vorgeschlagenes Makro ausführen zu können?

Mit besten Grüßen

Tine

Foto
1

Guten Morgen Tine

Sie können noch einfacher als über das Makro selbst dafür sorgen, dass die gewünschten Dokumententypen im Literaturverzeichnis nicht auftauchen, wenn Sie die Funktion "Gruppiertes Literaturverzeichnis" nutzen, die es ab Citavi 5.5 gibt. Sie wählen dort aus, dass Citavi die Literatur bestimmter Dokumententypen zusammenfassen soll und diese Gruppe nicht im Literaturverzeichnis anzeigen soll.

Möchten Sie es einmal anhand der Handbuch-Anleitung (s.o.) versuchen? Wenn es nicht auf Anhieb klappt, gebe ich gerne weitere Hilfestellungen.

Freundliche Grüsse

Peter

Foto
1

Hallo Peter,


vielen Dank für die schnelle Antwort.


Makro-Code wär mir lieber, da ich bereits Erfahrung damit gesammelt habe und ich quasi nicht nochmal umdenken (gruppiertes Literaturverzeichnis) muss.

Foto
1

Hallo Tine

Sie könnten dazu diesen Code kopieren und anpassen. Ab Zeile 42 ergänzen die gewünschten Dokumententypen. Kopieren Sie dazu die Zeilen 45 und 46, und ersetzen Sie jeweils in der Kopie den Dokumententyp "ContributionInLegalCommentary" durch den gewünschten Dokumententyp:

  • Beitrag im Sammelwerk = Contribution
  • Tagungsband = ConferenceProceedings

Weitere interne Feldbezeichnungen finden Sie im Handbuch.

Falls Sie doch noch umdenken möchten: Dieses Video zeigt, wie Sie in unter 90 Sekunden mit dem Gruppierten Literaturverzeichnis zum selben Ziel kommen.


Freundliche Grüsse

Peter

Foto
Foto
1

Hallo Peter,


ein ähnliches Skript hab ich bereits in Benutzung.


Ich hab folgende Herausforderung:

* Beitrag im Sammelwerk (Contribution) soll nicht erscheinen,

* Beitrag im Tagungsband (reference type kenne ich nicht) soll erscheinen.


Deckt ihr Vorschlag mein Szenario ab?


Beste Grüße

Tine

Foto
1

Hallo Tine

Der Beitrag im Tagungsband wird auch durch "Contribution" abgedeckt.

Freundliche Grüsse

Peter

Foto
1

Dass Contribution beide Fälle abdeckt, habe ich vermutet. Danke für die Bestätigung.


Gibt es ein Skript, mit welchem ich beide Fälle voneinander separieren kann?


Alternativ müsste ich bestimmte Quellen in einen anderen Dokumententypen überführen und diesen Typ dann vom Literaturverzeichnis exkludieren.

Foto
Foto
1

Hallo Tine

Nein, mit unserem Skript können nicht zwischen "Beitrag im Tagungsband" und "Beitrag im Sammelwerk" differenzieren.

Freundliche Grüsse

Peter

Foto
1

Hallo Peter, vielen Dank für die Rückmeldung. Ich werd nun das Skript für die funktionierenden Use Cases nutzen u bei.Contributions meinen Workaround probieren.

Foto
1

Ich würde auch sagen, wenn es nur um einmal geht, sollte man die Gruppierung andenken. Aber man kann das Skript einfach anpassen, und auf die Art des Elters testen. Aus der Hüfte geschossen würde


if (xReference.ParentReference != null && xReference.ParentReference.ReferenceType == ReferenceType.BookEdited) xBibliographyCitation.NoBib = true;
if (yReference.ParentReference != null && yReference.ParentReference.ReferenceType == ReferenceType.BookEdited) yBibliographyCitation.NoBib = true;
etwa nur die Titel filtern, deren Elter BookEdited sind, nicht aber die, deren Elter ConferenceProceedings sind.

Foto