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.

Erneute Veröffentlichungen im Literaturverzeichnis ergänzen

Fragen zur Bedienung von Citavi 5

Re: Erneute Veröffentlichungen im Literaturverzeichnis ergän

Postby sandra_wirth » 2016-02-11 15:32

Vielen Dank für Ihre Hinweise! Jedoch habe ich praktisch noch keine sinnvolle Umsetzung gefunden.. Was wohl wesentlich daran liegt, dass ich Neuling in diesem Programm bin, bitte sehen Sie mir meine vielleicht naiven Fragen nach.

Lieber Herr Meurer, wie Sie schon ahnten funktioniert diese (Punkt 4) Sortierung nicht, da die Autoren mehrfach vorkommen.
Lieber/lieber JJ, ich gestehen, dass ich nicht ganz durchsehe, was genau gemeint ist: "einen Titel zu sortieren nicht unter Verwendung der Daten dieses Titels, sondern eines anderen Titels. Dieser andere Titel muss natürlich irgendwie ermittelt werden." <- wie erreiche ich diese Sortierung? Wenn ich bspw. im Freitextfeld eine einheitliche Zuordnung (bleiben wir bei "KarlHeinz") für die 2-4 zusammenhängenden Beiträge habe, kann ich zwar zuerst nach dem Freitext und dann nach dem Erscheinungsjahr sortieren, aber dann wirft es mir ja die gesamte Literaturliste durcheinander...

Am Ende sollte die Aufzählung in der Literaturliste ja beispielhaft folgendermaßen sein:
Mustermann, Max, 2015: Titel x.
Mustermann, Max, 2005: Titel y.
- erneut abgedruckt in: Mustermann, Max, 2010: Titel y.
- erneut abgedruckt in: Mustermann, Max, 2016: Titel y.
Mustermann, Max 1990: Titel z.
usw.

D.h. die "y"-Titel müssten alle einander zugeordnet werden (reicht der gleiche Eintrag im Freitext aus?), von diesen taucht nur der älteste Titel (Erstveröffentlichung) selbstständig in der Literaturliste auf. Die übrigen Titel müssten wiederum untereinander (nach Jahreszahl) sortiert werden.
Nun die Frage: wie erreiche ich diese "zweistufige" Sortierung?

Vielen Dank!
sandra_wirth
 

Re: Erneute Veröffentlichungen im Literaturverzeichnis ergän

Postby jay-squared » 2016-02-12 16:19

Liebe Frau Wirth,

nehmen wir mal folgenden Sortiercode:

Code: Select all
    using System;
    using System.Linq;
   using System.Collections;
    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)
          {

            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 || yBibliographyCitation.Reference == null) return 0;
         
         var xFifthCriterion = 0;
         
         //  We first see if xReference is the child of a main reference
                  
         if (!string.IsNullOrEmpty(xReference.Notes))
            {
               foreach(Reference reference in xReference.Project.References)
               {
                  if(reference.Notes.Contains(xReference.Notes) && (
                  String.CompareOrdinal(reference.Year, xReference.Year) < 0 ||
                  ((String.CompareOrdinal(reference.Year, xReference.Year) == 0) && (String.CompareOrdinal(reference.Number, xReference.Number) < 0))
                  ))
                     {
                         xReference = reference;
                  xFifthCriterion = -1;
                     }
               }
            }             

            // Now we define the primary sort criteria for x that depend on x's relationship to a main title
         
         string xFirstCriterion = "";
         
            // If there is no author, we use title instead
            string xSecondCriterion = "";
            if (xReference.AuthorsOrEditorsOrOrganizations.Count != 0)
            {
               xSecondCriterion = xReference.AuthorsOrEditorsOrOrganizations.ToString();
            }
            else
            {
               xSecondCriterion = xReference.Title;
            }         
            var xThirdCriterion = xReference.YearResolved;
            var xFourthCriterion = xReference.Title;

            // Now we define the same  sort criteria for y
         
         var yFifthCriterion = 0;
         
         if (!string.IsNullOrEmpty(yReference.Notes))
            {
               foreach(Reference reference in yReference.Project.References)
               {
                  if(reference.Notes.Contains(yReference.Notes) && (
                  String.CompareOrdinal(reference.Year, yReference.Year) < 0 ||
                  ((String.CompareOrdinal(reference.Year, yReference.Year) == 0) && (String.CompareOrdinal(reference.Number, yReference.Number) < 0))
                  ))
                     {
                         yReference = reference;
                  yFifthCriterion = -1;
                     }
               }
            }
         
         string yFirstCriterion = "";
         
            string ySecondCriterion = "";
            if (yReference.AuthorsOrEditorsOrOrganizations.Count != 0)
            {
               ySecondCriterion = yReference.AuthorsOrEditorsOrOrganizations.ToString();
            }
            else
            {
               ySecondCriterion = yReference.Title;
            }         
            var yThirdCriterion = yReference.YearResolved;
            var yFourthCriterion = yReference.Title;   

             // And now we simply compare each criteria, starting with the first criterion, provided its values differ between x and y, going on to the second, provided its values differ between x and y, and so on.           
             if (xFirstCriterion != yFirstCriterion)
             {
                return xFirstCriterion.CompareTo(yFirstCriterion);
             }
             else if (xSecondCriterion != ySecondCriterion)
             {
                return xSecondCriterion.CompareTo(ySecondCriterion);
             }
             else if (xThirdCriterion != yThirdCriterion)
             {
                return xThirdCriterion.CompareTo(yThirdCriterion);
             }
          else if (xFourthCriterion != yFourthCriterion)
             {
                return xFourthCriterion.CompareTo(yFourthCriterion);
             }
         else if (xFifthCriterion != yFifthCriterion)
         {
                return xFifthCriterion.CompareTo(yFifthCriterion);
            }
            else
            {
               return 0;
            }             
             
          }
       }
    }


Die Sortierung erfolgt hier nach in erster Linie dreit Kriterien: Primär Autor, sekundär Jahr, tertiär Titel (der Code ist insofern ein wenig verwirrend, dass auch ein "FirstCriterion" gibt, das immer leer bleibt). Der Code vergleicht zuerst die Autoren zweier Werke, wenn diese identisch sind, die Jahre beider Werke, und wenn das auch identisch ist, den Titel zweier Werke. Der Witz an dem Code ist aber, dass bevor Autor, Jahr, und Titel eines Werkes ermittelt werden, der Code guckt, ob es einen Titel im Projekt gibt, der im Notizfeld mit dem gerade zu sortierenden Werk identisch ist, welches aber im Jahr vorher liegt, und wenn dass der Fall ist, nimmt es nicht Autor, Jahr, und Titel des aktuellen Werkes, sondern eben des anderen Werkes mit identischem Notizfeld.

Das macht dieser Teil hier:

Code: Select all
 foreach(Reference reference in xReference.Project.References)
               {
                  if(reference.Notes.Contains(xReference.Notes) && (
                  String.CompareOrdinal(reference.Year, xReference.Year) < 0 ||
                  ((String.CompareOrdinal(reference.Year, xReference.Year) == 0) && (String.CompareOrdinal(reference.Number, xReference.Number) < 0))
                  ))
                     {
                         xReference = reference;
                  xFifthCriterion = -1;
                     }
               }
            }   


Nun stammt der Code aus einem anderen Beispiel, und deckt wahrscheinlich Ihren Anwendungsfall nicht ganz ab, insbesondere da es sehr gut passieren kann, dass Hauptveröffentlichung und Neuveröffentlichung im selben Jahr waren. Solange ich immer noch nicht verstehe, wie das mit den entityLinks im Word-AddIn funktioniert, müsste man sich wahrscheinlich so behelfen, dass im Haupttitel "Karlheinz" + "Haupttitel" steht, in den Nachveröffentlichungen hingegen nur "Karlheinz". Wenn ich mal ein Beispielprojekt mit ein paar Neuveröffentlichungen sehen könnte, und wüsse, was die eigentlichen Sortierkriterien sind (Autor, dann Jahr, dann Titel? oder Autor, dann Titel, dann Jahr?) könnte ich den Code mal ein wenig anpassen.

Beste Grüße
JJ
jay-squared
Citavi Expert
 

Re: Erneute Veröffentlichungen im Literaturverzeichnis ergän

Postby sandra_wirth » 2016-02-20 10:17

Hallo JJ!
Die Sortierung spart sich schon mal den Autor, da ich eine gruppierte Literaturliste habe und in den Gruppen mit den Mehrfachveröffentlichungen ohnehin nur ein Autor vorkommt.
Ich habe zudem zwei Freifelder genutzt: das eine vergibt eine inhaltliche Zuordnung der zusammengehörigen Werke (zB. steht bei Original und allen Neuveröffentlichungen "Umweltschutz" etc.) und das andere zeichnet "Neuveröffentlichung"en aus (in den Originalen ist das Freitextfeld leer). Welche Texte zusammengehören und welcher davon der Original-Text ist, ist damit schon händisch vorgegeben.
Die Sotierung im Literaturverzeichnis wäre: erst Jahr, dann Titel.

Das Projekt sende ich Ihnen gern zu, wenn das weiter hilft...
sandra_wirth
 

Re: Erneute Veröffentlichungen im Literaturverzeichnis ergän

Postby jay-squared » 2016-02-20 12:04

Liebe Frau Wirth,

das Problem ist das folgende: Wenn man einmal einen eigenen Code zur Sortierung nimmt, dann sortiert der auch alles. Daher die Fragen:

1. Wie wird denn die Gruppierung vorgenommen? Ist das das Freitext-Feld 1?
2. Sie schreiben "in Gruppen mit den Mehrfachveröffentlichungen kommt ohnehin nur ein Autor vor". Wie ist es denn in den anderen Gruppen? Die muessen wir schliesslich auch per Code sortieren. Ist da auch nur eine Sortierung nach Jahr, Titel vorgesehen?

Beste Gruesse
JJ
jay-squared
Citavi Expert
 

Re: Erneute Veröffentlichungen im Literaturverzeichnis ergän

Postby sandra_wirth » 2016-02-20 12:31

Hallo JJ,
1. Die Gruppierung erfolgt durch im Citavi einstellbare "Gruppen" (also nicht über die Freitexte).
2. Daran hatte ich zunächst gar nicht gedacht. In den derzeit 14 Gruppen ist lediglich in 7 der Autor gleich. Demnach müsste (wenn es sich nicht gruppenspezifisch sortieren lässt) in allen Gruppe nach Autor (a-z), Jahr (neu-alt), Titel (a-z) sortiert werden.

Viele Grüße,
S. Wirth

P.S.: Der Verweis auf Neuveröffentlichung erscheint im Freitext 3 und die zugeordnete Thematik bei Mehrfachdrucken im Freitext 4. (Falls das für die Sortierung von Relevanz ist)
sandra_wirth
 

Re: Erneute Veröffentlichungen im Literaturverzeichnis ergän

Postby jay-squared » 2016-02-20 12:55

Liebe Frau Wirth,

Vielleicht noch eine Frage, damit ich auch gucken kann, ob das ganze schön aussieht: Welchen Zitationsstil nehmen Sie denn?

Herzliche Grüße
JJ
jay-squared
Citavi Expert
 

Re: Erneute Veröffentlichungen im Literaturverzeichnis ergän

Postby sandra_wirth » 2016-02-20 13:31

Der Zitationsstil ist selbst "zusammengebastelt" und folgt dem Muster:

Nachname1, Vorname1/Nachname2, Vorname2, Jahr: Titel. Untertitel. Ort, Auflage.
und
Nachname, Vorname, Jahr: Titel. Untertitel. In: Nachname, Vorname (Hrsg.): Titel. Untertitel. Ort, Auflage, S. x-y.
sandra_wirth
 

Re: Erneute Veröffentlichungen im Literaturverzeichnis ergän

Postby sandra_wirth » 2016-02-20 13:34

P.S.: Den vorherigen Tipp habe ich schon berücksichtigt und für alle Neuveröffentlichungen eine eigene Bedingung in der Zitierweise ("erneut abgedruckt") angelegt. Insofern sieht es im Literaturverzeichnis schon gut aus, nur dass sie Neuveröffentlichungen eben den Originalen zugeordnet sein sollten.
sandra_wirth
 

Re: Erneute Veröffentlichungen im Literaturverzeichnis ergän

Postby jay-squared » 2016-02-20 14:53

Macht folgender Code als programmierte Sortierung das, was Sie wollen?

Code: Select all
using System;
using System.Linq;
using System.Collections;
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)
      {
         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 || yBibliographyCitation.Reference == null) return 0;

         // Let's gather the data for the sort criteria for x

         string xCriterionOne = String.Empty; // Group
         string xCriterionTwo = String.Empty; // Author
         string xCriterionThree = String.Empty; // Year, depending on first publication
         string xCriterionFour = String.Empty; // Title, depending on first publication
         int xCriterionFive = new Int16(); // Making sure the first publication comes first, even where an alphanumerically higher re-publication came in the same year
         string xCriterionSix = String.Empty; // Year, independent
         string xCriterionSeven = String.Empty; // Title, independent
         
         // First let's assign values to those criteria that do not - necessarily - depend on x's relationship to a main title
         
         xCriterionFive = 0;
         xCriterionSix = xReference.YearResolved;
         xCriterionSeven = xReference.Title;

         //  We then see if xReference is the child of a main reference
               
         if (!string.IsNullOrEmpty(xReference.Notes) && xReference.CustomField3.Equals("Neuveröffentlichung"))
         {
            foreach(Reference reference in xReference.Project.References)
            {
               if(reference.Notes.Contains(xReference.Notes) && (!reference.CustomField3.Equals("Neuveröffentlichung")))
                  {
                     xReference = reference;
                     xCriterionFive = 1;
                  }
            }
         }            

         // Now we define the primary sort criteria for x that depend on x's relationship to a main title

         xCriterionOne = xReference.Groups.ToString();

         // If there is no author, we use title instead
         if (xReference.AuthorsOrEditorsOrOrganizations.Count != 0)
         {
            xCriterionTwo = xReference.AuthorsOrEditorsOrOrganizations.ToString();
         }
         else
         {
            xCriterionTwo = xReference.Title;
         }         
         xCriterionThree = xReference.YearResolved;
         xCriterionFour = xReference.Title;

         // Now we do the same for y

         string yCriterionOne = String.Empty;
         string yCriterionTwo = String.Empty;
         string yCriterionThree = String.Empty;
         string yCriterionFour = String.Empty;
         int yCriterionFive = new Int16();
         string yCriterionSix = String.Empty; // Year
         string yCriterionSeven = String.Empty; // Title
         
         yCriterionFive = 0;
         yCriterionSix = yReference.YearResolved;
         yCriterionSeven = yReference.Title;

         if (!string.IsNullOrEmpty(yReference.Notes) && yReference.CustomField3.Equals("Neuveröffentlichung"))
         {
            foreach(Reference reference in yReference.Project.References)
            {
               if(reference.Notes.Contains(yReference.Notes) && (!reference.CustomField3.Equals("Neuveröffentlichung")))
                  {
                     yReference = reference;
                     yCriterionFive = 1;
                  }
            }
         }   

         yCriterionOne = yReference.Groups.ToString();

         if (yReference.AuthorsOrEditorsOrOrganizations.Count != 0)
         {
            yCriterionTwo = yReference.AuthorsOrEditorsOrOrganizations.ToString();
         }
         else
         {
            yCriterionTwo = yReference.Title;
         }
         yCriterionThree = yReference.YearResolved;   
         yCriterionFour = yReference.Title;         

         // And now we simply compare each criteria, starting with criterion one, provided its values differ
         // between x and y, going on to criterion two, provided its values differ between x and y, and so on.

         if (xCriterionOne != yCriterionOne)
         {
            return xCriterionOne.CompareTo(yCriterionOne);
         }
         else if (xCriterionTwo != yCriterionTwo)
         {
            return xCriterionTwo.CompareTo(yCriterionTwo);
         }
         else if (xCriterionThree != yCriterionThree)
         {
            return xCriterionThree.CompareTo(yCriterionThree);
         }
         else if (xCriterionFour != yCriterionFour)
         {
            return xCriterionFour.CompareTo(yCriterionFour);
         }
         else if (xCriterionFive != yCriterionFive)
         {
            return xCriterionFive.CompareTo(yCriterionFive);
         }
         else if (xCriterionSix != yCriterionSix)
         {
            return xCriterionSix.CompareTo(yCriterionSix);
         }
         else if (xCriterionSeven != yCriterionSeven)
         {
            return xCriterionSeven.CompareTo(yCriterionSeven);
         }
         else
         {
            return 0;
         }      
      }
   }
}


Bei mir sieht das damit so aus

Test.PNG


Das Ganze setzt aber wohl voraus, dass jeder Titel nur in hoechstens einer Gruppe ist.

PS: Der 1917er Beitrag ist wirklich keine Neuveroeffentlichung des 1913er-Beitrags. Hohfeld sind nur die Namen ausgegangen.
jay-squared
Citavi Expert
 

Re: Erneute Veröffentlichungen im Literaturverzeichnis ergän

Postby sandra_wirth » 2016-02-20 15:22

Jeder Titel ist nur in einer Gruppe, dennoch funktioniert die Sortierung bei mir nicht: Es werden alle Titl (einschl. Neuveröffentlichung) nach Jahr sortiert angezeigt.
sandra_wirth
 

PreviousNext

Return to Citavi 5 Support (Deutsch)