This forum is read-only - Please use our new Citavi Forum instead.
Dieses Forum dient nur zur Recherche - Bitte nutzen Sie das neue Citavi Forum für Ihre Fragen.

Elemente (Gericht, Fundstelle) bei Aufzählung unterdrücken Topic is solved

Erhalten Sie Hilfe bei der Anwendung juristischer Zitationsstile.

Elemente (Gericht, Fundstelle) bei Aufzählung unterdrücken

Postby kai.h » 2014-02-13 21:18

Liebes Citavi-Team,

gerade bei offiziellen Entscheidungssammlungen ist es nicht unüblich, die Fundstelle bei einer Aufzählung von Gerichtsurteilen nicht immer wieder mit zu zitieren.
Bsp: Statt
BVerfGE[Fundstelle] 1 [Jahrgang], 23[Startseite], 28]Zitatseite]; BVerfGE 7, 456, 460; BVerfGE 15, 69, 78
heißt es nur
BVerfGE 1, 23, 28; 7, 456, 460; 15, 69, 78


Hier müsste also abhängig von dem unmittelbaren Vorgänger innerhalb derselben Fußnote die Fundstelle unterdrückt werden. Kann man das über eine Bedingung in der Komponente Fundstelle lösen, oder braucht man hierfür eine neue Vorlage?

Bei nichtoffiziellen Fundstelle wird eine ähnliche Praxis vollzogen. Hier wird das Gericht vor der Fundstelle erwähnt, aber bei Wiederholung weggelassen.
Bsp: Statt
BGH[Gericht], NJW[Fundstelle] 2004[Jahr], 13[Startseite], 15[Zitat-Seite]; BGH NJW 2005, 34, 36; BGH GRUR 2011, 57, 59
heißt es nur
BGH, NJW 2004, 13, 15; NJW 2005, 34, 36; GRUR 2011, 57, 59

Wenn ich das richtig sehe, korrespondiert das Feld Gericht mit dem Feld Autor/Bearbeiter. Könnte man hier die ders./dies.-Programmierung entsprechend zum vollständigen unterdrücken anpassen? Und könnte man diese Programmierung auch für die Unterdrückung der Fundstellen verwenden.

Meine Programmierung von ders./dies. unterscheidet sich mittlerweile wahrscheinlich von der auf der Homepage angebotenen, zum einen, weil sie vom Support schon mal geändert wurde (Problem bei unterdrückten Einträgen im Lit.Verz.), zum zweiten, weil ich die Programmierung von Prof. Riehm für uneindeutige Namen eingefügt habe. Ich gebe sie darum hier vorsichtshalber wieder.

Code: Select all
using System;
using System.Linq;
using System.Collections.Generic;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Metadata;

namespace SwissAcademic.Citavi.Citations
{
   public class ComponentPartFilter
      :
      IComponentPartFilter
   {
      //Version 1.8 GetPreviousVisibleCitation() method gets first previous citation where nobib = false or bibonly = false
      //Version 1.7 Single N(neutral) or unknown author yields "ders." instead of "dies."
      //Version 1.6 New variable "deactivateFilterWithOption1Switch"
      //Version 1.5 New variable "outputInItalics": output can quickly be changed between font style italics and neutral
      //Version 1.4 New variable "deactivateFilterInsideMultipleCitations": inside multiple citations, filter can be switched off to allow for cite collapsing (see below)
      //Version 1.3 Footnote index difference must not be > 0
      //Version 1.2 Takes all combinations of number/sex into account
      //Version 1.1 Takes organizations into account
      public IEnumerable<ITextUnit> GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled)
      {
         //new in VErsion 1.6
         //if the following is set to true a placeholder citation's output will not show ders./dies. although this would normally be the case
         //as e.g. the second one of the following two: {Meier 2010 #2} and {Meier 2010 #2:17-19 /opt1}
         var deactivateFilterWithOption1Switch = true;      

         //new in Version 1.4:
         //if the following is set to true, the citation collapsing can take place (if the style is set to omit author names)
         //true:    (Mueller 2010, S. 10; 2011, S. 12f.; 2012, S. 17)
         //false:    (Mueller 2010, S. 10; ders. 2011, S. 12 f; ders. 2012, S. 17)
         var deactivateFilterInsideMultipleCitations = true;
         var outputInItalics = true;

         
         handled = false;
         var thisCitationIsPartOfMultipleCitation = false;

         if (citation == null) return null;
         if (citation.Reference == null) return null;

         // Autoren ggfs. Vornamen hinzufügen
         if (componentPart == null) return null;
         if (componentPart.Elements == null || componentPart.Elements.Count == 0) return null;

         IEnumerable<PersonFieldElement> personFieldElements = componentPart.Elements.OfType<PersonFieldElement>();
         if (personFieldElements == null || personFieldElements.Count() != 1) return null;

         PersonFieldElement personFieldElement = personFieldElements.ElementAt(0);

         if (personFieldElement == null) return null;

         IList<IPerson> AuthorsList = citation.Reference.GetAuthors();
         if(AuthorsList.Count==0)
            return null;
         if(AuthorsList[0].Notes.Equals("Uneindeutig"))
         {
            personFieldElement.FirstGroupPersonNameOrder=PersonNameOrder.FirstNameLastName;
            personFieldElement.FirstGroupFirstNameFormat=NameFormat.AbbreviatedCompact;
            personFieldElement.FirstGroupMiddleNameUsage=MiddleNameUsage.FirstOnly;
            personFieldElement.FirstGroupMiddleNameFormat=NameFormat.AbbreviatedCompact;
         }
               // more than two authors: use "FirstGroup", "SecondGroup" and "LastPerson"
               // note that the citation style truncates the list aftre the third author, so we can content ourselves with the first three
               // and use "LastPerson" for the third one
         if(AuthorsList.Count==2) // only two authors - no need for "LastPerson"
            personFieldElement.UseDifferentFormatForLastPerson=false;
         else // more than two authors
            personFieldElement.UseDifferentFormatForLastPerson=true;
         if(AuthorsList.Count>1&& AuthorsList[1].Notes.Equals("Uneindeutig"))
         {
            personFieldElement.SecondGroupPersonNameOrder=PersonNameOrder.FirstNameLastName;
            personFieldElement.SecondGroupFirstNameFormat=NameFormat.AbbreviatedCompact;
            personFieldElement.SecondGroupMiddleNameUsage=MiddleNameUsage.FirstOnly;
            personFieldElement.SecondGroupMiddleNameFormat=NameFormat.AbbreviatedCompact;
         }
         if(AuthorsList.Count>2 && AuthorsList[2].Notes.Equals("Uneindeutig")) // third Person last - we don't show more than three here
         {
            personFieldElement.LastPersonPersonNameOrder=PersonNameOrder.FirstNameLastName;
            personFieldElement.LastPersonFirstNameFormat=NameFormat.AbbreviatedCompact;
            personFieldElement.LastPersonMiddleNameUsage=MiddleNameUsage.FirstOnly;
            personFieldElement.LastPersonMiddleNameFormat=NameFormat.AbbreviatedCompact;
         }

         
         var previousVisibleCitation = GetPreviousVisibleCitation(citation);
         if (previousVisibleCitation == null) return null;
         if (previousVisibleCitation.Reference == null) return null;


         //SPECIAL: if this citation has the /opt1 switch set, this filter should be deactivated
         var placeholderCitation = citation as PlaceholderCitation;
         if (deactivateFilterWithOption1Switch && placeholderCitation != null && placeholderCitation.FormatOption1)
         {
            return null;
         }
         
         //if this citation is a footnote citation it must share the same footnote index with its predecessor
         var thisFootnoteCitation = citation as FootnoteCitation;
         if (thisFootnoteCitation != null)
         {
            //var previousFootnoteCitation = thisFootnoteCitation.PreviousFootnoteCitation;
            var previousVisibleFootnoteCitation = previousVisibleCitation as FootnoteCitation;
            if (previousVisibleFootnoteCitation == null) return null;
            if (thisFootnoteCitation.FootnoteIndex != previousVisibleFootnoteCitation.FootnoteIndex) return null;
         }
         
         //if this citation is part of a multiple citation ...
         var thisInTextCitation = citation as InTextCitation;
         if (thisInTextCitation != null)
         {
            var printingEntries = thisInTextCitation.Entry.Placeholder.GetPrintingEntries();
            if (printingEntries != null && printingEntries.Count() > 1)
            {
               //thisInTextCitation IS part of a multiple citation
               thisCitationIsPartOfMultipleCitation = true;
               
               //... and we switch of "ders./dies." completely ... or ...
               if (deactivateFilterInsideMultipleCitations)
               {
                  return null;
               }
               
               //... at least for the very first printing entry in a multiple citation
               var index = printingEntries.IndexOf(thisInTextCitation.Entry);
               if (index != null && index == 0) return null;
            }
            else
            {
               thisCitationIsPartOfMultipleCitation = false;
            }
         }
         
         //if this citations predecessor is part of a multiple citation, but THIS is NOT, switch off filter
         if (thisInTextCitation != null && !thisCitationIsPartOfMultipleCitation)
         {
            //var previousInTextCitation = thisInTextCitation.PreviousInTextCitation;
            var previousVisibleInTextCitation = previousVisibleCitation as InTextCitation;
            if (previousVisibleInTextCitation == null) return null;
            var printingEntries = previousVisibleInTextCitation.Entry.Placeholder.GetPrintingEntries();
            if (printingEntries != null && printingEntries.Count() > 1)
            {
               //previousVisibleInTextCitation IS part of a multiple citation
               return null;
            }
         }
         

         //check for 1st PersonFieldElement in ComponentPart
         var firstPersonFieldElement = componentPart.Elements.FirstOrDefault(item => item is PersonFieldElement) as PersonFieldElement;
         if (firstPersonFieldElement == null) return null;

         //determine Persons to compare
         List<IPerson> thesePersons = null;
         List<IPerson> previousPersons = null;

         switch (firstPersonFieldElement.PropertyId)
         {
            #region Authors

            case ReferencePropertyId.Authors:
               {
                  thesePersons = citation.Reference.GetAuthors() as List<IPerson>;
                  previousPersons = previousVisibleCitation.Reference.GetAuthors() as List<IPerson>;
               }
               break;

            #endregion Authors

            #region Editors

            case ReferencePropertyId.Editors:
               {
                  thesePersons = citation.Reference.GetEditors() as List<IPerson>;
                  previousPersons = previousVisibleCitation.Reference.GetEditors() as List<IPerson>;
               }
               break;

            #endregion Editors

            #region AuthorsEditorsOrganizations

            case ReferencePropertyId.AuthorsOrEditorsOrOrganizations:
               {
                  thesePersons = citation.Reference.GetAuthorsOrEditorsOrOrganizations() as List<IPerson>;
                  previousPersons = previousVisibleCitation.Reference.GetAuthorsOrEditorsOrOrganizations() as List<IPerson>;
               }
               break;

            #endregion AuthorsEditorsOrganizations

            #region Collaborators

            case ReferencePropertyId.Collaborators:
               {
                  thesePersons = citation.Reference.GetCollaborators() as List<IPerson>;
                  previousPersons = previousVisibleCitation.Reference.GetCollaborators() as List<IPerson>;
               }
               break;

            #endregion Collaborators

            #region OthersInvolved

            case ReferencePropertyId.OthersInvolved:
               {
                  thesePersons = citation.Reference.GetOthersInvolved() as List<IPerson>;
                  previousPersons = previousVisibleCitation.Reference.GetOthersInvolved() as List<IPerson>;
               }
               break;

            #endregion OthersInvolved
         }

         if (thesePersons == null || thesePersons.Count == 0) return null;
         if (previousPersons == null || previousPersons.Count == 0) return null;

         var equality = CheckPersonEquality(thesePersons, previousPersons);
         if (equality == PersonEquality.None) return null;

         #region Equality detected - generate output

         //we DO have some equality, so let's check what we need to output instead of the person's name(s)
         var text = string.Empty;
         switch (equality)
         {
            case PersonEquality.M:
            case PersonEquality.N:
               text = "ders.";
               break;

            default: //all others
               text = "dies.";
               break;

         }

         var output = new TextUnitCollection();
         var fontStyle = outputInItalics ? SwissAcademic.Drawing.FontStyle.Italic : SwissAcademic.Drawing.FontStyle.Neutral;
         output.Add(new LiteralTextUnit(text, fontStyle));

         handled = true;
         return output;

         #endregion Equality detected - generate output
      }

      #region GetPreviousVisibleCitation
      
      private static Citation GetPreviousVisibleCitation(Citation citation)
      {
         if (citation == null) return null;
         
         #region Bibliography
         
         if (citation.CitationType == CitationType.Bibliography)
         {
            BibliographyCitation previousBibliographyCitation = citation as BibliographyCitation;
            if (previousBibliographyCitation == null) return null;
            
            //consider nobib
            do
            {
               previousBibliographyCitation = previousBibliographyCitation.PreviousBibliographyCitation;
               if (previousBibliographyCitation == null) return null;
            
            } while (previousBibliographyCitation.NoBib == true);
               
            //still here? found one!
            return previousBibliographyCitation;
         }
         
         #endregion Bibliography
         
         #region InText
         
         if (citation.CitationType == CitationType.InText)
         {
            InTextCitation previousInTextCitation = citation as InTextCitation;
            if (previousInTextCitation == null) return null;
            
            //consider bibonly
            do
            {
               previousInTextCitation = previousInTextCitation.PreviousInTextCitation;
               if (previousInTextCitation == null) return null;
               
            } while (previousInTextCitation.BibOnly == true);
            
            //still here? found one!
            return previousInTextCitation;
         }
         
         #endregion InText
         
         #region Footnote
         
         if (citation.CitationType == CitationType.Footnote)
         {
            FootnoteCitation previousFootnoteCitation = citation as FootnoteCitation;
            if (previousFootnoteCitation == null) return null;
            
            //consider bibonly
            do
            {
               previousFootnoteCitation = previousFootnoteCitation.PreviousFootnoteCitation;
               if (previousFootnoteCitation == null) return null;
               
            } while (previousFootnoteCitation.BibOnly == true);
            
            //still here? found one!
            return previousFootnoteCitation;
         }
         
         #endregion Footnote
         
         //still here? no previous citation found!
         return null;
      }
      
      
      #endregion GetPreviousCitation
      
      #region CheckPersonEquality

      private static PersonEquality CheckPersonEquality(IList<IPerson> personsA, IList<IPerson> personsB)
      {
         var personListA = personsA as List<IPerson>;
         var personListB = personsB as List<IPerson>;

         if (personListA == null || personListA.Count == 0) return PersonEquality.None;
         if (personListB == null || personListB.Count == 0) return PersonEquality.None;
         if (personListA.Count != personListB.Count) return PersonEquality.None;

         //we DO have two lists of persons of same length
         //FIRST sort by id for comparison
         var personIdComparer = new PersonIdComparer();
         personListA.Sort(personIdComparer);
         personListB.Sort(personIdComparer);


         var allCounter = personListA.Count;
         var maleCounter = 0;
         var femaleCounter = 0;
         var neutralCounter = 0;

         //loop, compare GUID/id and determine/count sex
         for (int i = 0; i < personListA.Count; i++)
         {
            var idA = personListA[i].GetValue(PersonPropertyId.Id).ToString();
            var idB = personListB[i].GetValue(PersonPropertyId.Id).ToString();

            if (!idA.Equals(idB, StringComparison.Ordinal)) return PersonEquality.None;

            //identical!
            //determine sex (just need to look at one of them, because they are identical)
            if (personListA[i].Sex == Sex.Male) maleCounter++;
            if (personListA[i].Sex == Sex.Female) femaleCounter++;
            if (personListA[i].Sex == Sex.Neutral || personListA[i].Sex == Sex.Unknown) neutralCounter++;
         }

         //still here, so ALL persons are equal, now return equality based on sex
         if (allCounter == 1 && maleCounter == 1) return PersonEquality.M;
         else if (allCounter == 1 && femaleCounter == 1) return PersonEquality.F;
         else if (allCounter == 1 && neutralCounter == 1) return PersonEquality.N;

         else if (allCounter > 1 && maleCounter == allCounter) return PersonEquality.MM;
         else if (allCounter > 1 && femaleCounter == allCounter) return PersonEquality.FF;
         else if (allCounter > 1 && neutralCounter == allCounter) return PersonEquality.NN;

         else if (allCounter > 1 && maleCounter + femaleCounter == allCounter) return PersonEquality.FM;
         else if (allCounter > 1 && femaleCounter + neutralCounter == allCounter) return PersonEquality.FN;
         else if (allCounter > 1 && maleCounter + neutralCounter == allCounter) return PersonEquality.MN;

         else if (allCounter >= 3
            && maleCounter >= 1 && femaleCounter >= 1 && neutralCounter >= 1
            && maleCounter + femaleCounter + neutralCounter == allCounter) return PersonEquality.FMN;
         else return PersonEquality.None;

      }

      #endregion CheckPersonEquality

      #region Enum PersonEquality

      public enum PersonEquality
      {
         /// <summary>
         /// None: Different persons and/or different numbers of persons.
         /// </summary>
         /// <returns></returns>
         None,

         /// <summary>
         /// Identical person, a single female (Latin: eadem)
         /// </summary>
         F,
         /// <summary>
         /// Identical person, a single male (Latin: idem)
         /// </summary>
         M,
         /// <summary>
         /// Identical persons, a single (neutral) organization (Latin: idem)
         /// </summary>
         N,

         /// <summary>
         /// Identical persons, only females, 2 or more (Latin: eaedem)
         /// </summary>
         FF,
         /// <summary>
         /// Identical persons, only males, 2 or more (Latin: eidem)
         /// </summary>
         MM,
         /// <summary>
         /// Identical persons, only (neutral) organizations, 2 or more (Latin: eadem)
         /// </summary>
         NN,

         /// <summary>
         /// Identical persons, mixed group of females and males only
         /// </summary>
         FM,
         /// <summary>
         /// Identical persons, mixed group of females and neutrals only
         /// </summary>
         FN,
         /// <summary>
         /// Identical persons, mixed group of males and neutrals only
         /// </summary>
         MN,

         /// <summary>
         /// Identical persons, mixed group of females, males and neutrals
         /// </summary>
         FMN
      }

      #endregion PersonEquality

      #region PersonIdComparer

      //The following is a sort comparer that will bring all person collections into a well defined order
      //namely in the order of their internal GUID values.
      public class PersonIdComparer : IComparer<IPerson>
      {
         public int Compare(IPerson person1, IPerson person2)
         {
            int returnValue = 1;
            if (person1 != null && person2 != null)
            {
               returnValue = person1.GetValue(PersonPropertyId.Id).ToString().CompareTo(person2.GetValue(PersonPropertyId.Id).ToString());
            }
            return returnValue;
         }
      }

      #endregion PersonIdComparer
      
   }
}


Die Vorlagenbedingung "Gleicher Eintrag wie vorheriger" ignoriert leider Fußnotengrenzen und ist darum unbrauchbar.

Vielen Dank für Ihre Hilfe

Mit freundlichen Grüßen

Kai Hofmann
kai.h
 

Re: Elemente (Gericht, Fundstelle) bei Aufzählung unterdrück

Postby Jörg Pasch » 2014-02-14 17:58

Lieber Herr Hofmann,

ich poste Ihnen hier nachfolgend zwei programmierte Komponenten, die bei einer unmittelbaren Wiederholung innerhalb einer Fußnote (also unter Beachtung der Fußnoten-Grenze) die Ausgabe von Gericht bzw. Fundstelle unterdrücken.

Beide Komponenten können Sie bei Bedarf mit einem Optionen-Schalter auch deaktivieren, so dass Gericht bzw. Fundstelle trotz unmittelbarer Wiederholung angezeigt werden (zwecks separater Ansteuerung der Komponenten ist der Schalter zum Wieder-Anzeigen des Gerichts "/option1" und der Fundstelle "/option2").

Sie haben natürlich recht: Das Feld "Gericht" geht zurück auf das allgemeine Feld "Organisation", wobei diese in der Liste der Personen und Organisationen geführt werden, und das Feld "Fundstelle" auf das allgemeine Feld "Zeitschrift". Dennoch möchte ich davon absehen, die Funktionalität zur Unterdrückung des Gerichts in die Komponente für "ders./dies." zu integrieren, da diese bereits recht komplex ist und somit die künftige Wartung zu aufwändig wird.

Exemplarisches Template.jpg

Ausgabe des Gerichtes unterdrücken bei WDH
Ausgabe der Fundstelle unterdrücken bei WDH

Mit freundlichen Grüßen
Jörg Pasch
Last edited by Peter Meurer on 2015-01-09 18:07, edited 1 time in total.
Reason: Skript neu in FAQ verfügbar
Jörg Pasch
Citavi Customer Service
 

Re: Elemente (Gericht, Fundstelle) bei Aufzählung unterdrück

Postby kai.h » 2015-01-08 15:26

Lieber Herr Pasch,

die Programmierung funktioniert hervorragend in Fußnoten. Ich möchte sie nun gern in einem Stil für Kurznachweise im Text verwenden. Hier scheint es aber zu Komplikationen zu kommen. In einem Mehrfachnachweis (BVerfG; BGH 1; BGH 2; BGH 3) wird auch "BGH 1" unterdrückt, obwohl vorher ein anderes Gericht (BVerfG) steht.
Das Feld scheint bereits dann unterdrückt zu werden, wenn irgendein Gericht unmittelbar davor steht.

Könnten Sie die Programmierung auf Kurznachweise im Text anpassen?
kai.h
 

Re: Elemente (Gericht, Fundstelle) bei Aufzählung unterdrück  Topic is solved

Postby kai.h » 2015-01-08 21:28

Lieber Herr Pasch,

ich habe den Fehler gefunden. Es fehlte beim Nachweis im Text die Zeile

[Skripte neu in der FAQ]
Last edited by Peter Meurer on 2015-01-09 18:05, edited 1 time in total.
Reason: Skript neu in FAQ verfügbar
kai.h
 


Return to Juristische Zitationsstile anwenden