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.

Makro gesucht, das alle Direktzitate eines Titels durchläuft Topic is solved

Fragen zur Bedienung von Citavi 5

Makro gesucht, das alle Direktzitate eines Titels durchläuft

Postby Marc_222 » 2018-01-02 18:24

Systeminformationen: [ Citavi Version 5.7, Windows 10, Deutsch, Anderer Browser, MS Office 2016, Acrobat DC ]

Hallo,

zunächst ein frohes neues Jahr an alle Mitleser hier im Forum.
Ich habe derzeit ein Problem mit einem bug in Citavi 5.7, das ich hier https://support.citavi.com/forum/viewtopic.php?f=163&t=18646 beschrieben habe.

Mittlerweile habe ich viele Textstellen aus pdf-Dateien zitiert und habe dabei unbemerkt viele Direktzitate mit dem Zitat-Standardtyp "Seiten von-bis" anstelle von "Randnr. von - bis" erfasst. Das erfolgte aufgrund des bugs und weil ich beim Zitieren nicht aufgepasst habe. Die händische Korrektur wäre sehr aufwändig.

Ich habe eine Idee, wie ich jedenfalls die falsch erfassten Zitate für die Vergangenheit in einem Rutsch mit dem richtigen Zitat-Standardtyp korrigieren kann:
Vielleicht kann man ein Makro schreiben, in dem alle Zitate des jeweils ausgewählten Titels ('reference') durchlaufen werden und automatisch auf den richtigen Zitat-Standardtyp umgestellt werden. Leider bin ich nicht so gut im Objektmodell von Citavi 5 zu Hause. Daher meine Fragen:

1. Wie kann ich mittels einer for...next oder foreach-Schleife alle Zitate, die zu einem Titel ('reference', wie ich auf diese zugreifen kann, weiß ich) gehören, durchlaufen? Mit reference.Quotations komme ich leider nicht weiter.
2. Wenn es eine Antwort zu Frage 1 gibt: welche Eigenschaft muss angesprochen werden, um den Zitat-Standardtyp zu ändern?

Ich habe schon das Forum auf vergleichbare Beiträge durchsucht, habe aber leider nichts gefunden. Jeder Hinweis ist willkommen.

Viele Grüße
Marc_222
Marc_222
 

Re: Makro gesucht, das alle Direktzitate eines Titels durchl

Postby Sebastian Pabel » 2018-01-03 10:58

Hallo, Marc_222

Zunächst benötigen Sie einmal die direkten Zitate des Titels (reference). Die bekommen Sie so:

Code: Select all
List<KnowledgeItem> directQuotations = reference.Quotations.Where(x => x.QuotationType == QuotationType.DirectQuotation).ToList();


Dann können Sie mit einer foreach-Schleife über die Zitate iterieren und jeweils den NumberingType von Page (= Seite) auf Margin (= Randnummer) stellen. Das geht über die Update-Methode, deren Ergebnis man wiederum dem PageRange-Objekt des Zitats zuweisen muss:

Code: Select all
foreach (KnowledgeItem knowledgeItem in directQuotations)
{            
   knowledgeItem.PageRange = knowledgeItem.PageRange.Update(SwissAcademic.NumberingType.Margin);               
}


Viele Grüße
Sebastian

Wurde Ihre Frage vollständig beantwortet? Bitte klicken Sie auf das grüne Häkchen (= Antwort akzeptieren) oben rechts in meiner Antwort. Andere Forenbenutzer können sich dann leichter orientieren, wenn sie auf der Suche nach einer Lösung sind.
Sebastian Pabel
Site Admin
 

Re: Makro gesucht, das alle Direktzitate eines Titels durchl

Postby Marc_222 » 2018-01-03 11:02

Hallo Sebastian,

vielen Dank für diese code-Zeilen. Das sieht gut aus, ich werde es gleich heute Nachmittag ausprobieren und ein feedback geben. Wenn ich daraus ein ganzes Makro bastele, stelle ich es gerne hier ein.

Viele Grüße
Marc_222
Marc_222
 

Re: Makro gesucht, das alle Direktzitate eines Titels durchl

Postby jay-squared » 2018-01-03 12:12

Ich hatte das für mich mal anders gelöst.Da es meiner Ansicht nach nicht immer sinnvoll ist, dass sich die Nummerierungart der Zitate überhaupt nach der Nummerierungsart des Titels richten soll, habe ich ein eigenes Feld "Paginationtype" (wenn man so will, es ist das Freitextfeld 6) definiert, in welches ich die Nummerierungsart der Wissenselemente eintrage, und dann lasse ich ein Makro drüber laufen, dass die Nummerierungsarten in einem Rutsch ändert.


Anmerkung: Da darf ich dann jedesmal, wenn ich ein Wissenselement erfasse, einen modalen Dialog wegklicken, weil Citavi der Ansicht ist, dass das Wissenselement nicht im richtigen Bereich liegt (ich bin wirklich nicht begeistert davon, wie Citavi das handlet - das klappt vorne und hinten nicht, sobald Nummerierungsart des Seitenbereichs des Titels und Nummerierungsart der einzelnen Wissenselemente nicht übereinstimmen, was bei englischen Gerichtsentscheidungen eigentlich immer der Fall ist, und hat BGHZ nicht inzwischen auch Randnummern? da wäre das Problem dann auch), das Problem stellt sich aber nicht, wenn man bei Kommentaren den Seitenbereich des Titels von Anfang an leer lässt, und man es nur dazu nutzt den "Standard-Zitattyp" einzustellen (was ja meines Erachtens nichts miteinander zu tun hat, aber Citavi zwingt einen dazu, das Feld so zu missbrauchen).

Code: Select all
using System;
using System.Linq;
using System.ComponentModel;
using System.Collections.Generic;
using System.Windows.Forms;

using SwissAcademic;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Metadata;
using SwissAcademic.Citavi.Shell;
using SwissAcademic.Collections;

public static class CitaviMacro
{
   public static void Main()
   {   
      List<KnowledgeItem> knowledgeItems = Program.ActiveProjectShell.PrimaryMainForm.GetSelectedQuotations();
      Reference reference = Program.ActiveProjectShell.PrimaryMainForm.GetSelectedReferences()[0];
      
      string column = "column";
      string margin = "margin";
      string page = "page";         
      
      NumberingType numberingType = new NumberingType();
      
      if (reference.CustomField6.Equals(column))
      {
         numberingType = NumberingType.Column;
      }
      else if (reference.CustomField6.Equals(margin))
      {
         numberingType = NumberingType.Margin;
      }
      else if (reference.CustomField6.Equals(page))
      {
         numberingType = NumberingType.Page;
      }
      
      foreach (KnowledgeItem knowledgeItem in knowledgeItems)
      {
         knowledgeItem.PageRange = knowledgeItem.PageRange.Update(numberingType);
      }      
   }
}
jay-squared
Citavi Expert
 

Re: Makro gesucht, das alle Direktzitate eines Titels durchl

Postby Marc_222 » 2018-01-03 12:46

Das Problem mit den nervigen Fehlermeldungen kenne ich auch. Hatte es hier http://support.citavi.de/forum/viewtopic.php?f=163&t=17703&sid=cb4442e5ceb413fdc1ee9f846f1a4c81 schon einmal beschrieben, aber andere Foren-User hatten ebenfalls davon berichtet.
Der Workaround mit dem Freitextfeld ist eine Überlegung wert, mal sehen ob ich das brauche. Ich arbeite derzeit nahezu ausschließlich mit deutschen Titeln (überwiegend Urteile, Kommentare, Aufsätze, Beiträge in Sammelwerken, z.B. Festschriften).
Bei den Kommentaren wird ausschließlich nach Randziffern zitiert, wobei diese unterschiedlich formatiert sind. Einige arbeiten mit laufenden Nummern, bei anderen (insbes. bei Loseblattwerken) sind im im Laufe der Zeit zusätzliche Buchstaben dazugekommen (128, 128a, 128b, 129, 130, 130a etc). dann gibt es noch die Variante, dass, je nach Abschnitt, ein Buchstabe vorangestellt wird (A 1, A 2, ... A 140, B 1, B 2...).
Da kann Citavi natürlich nie wissen, wo ich bin. Aber mit der späteren Änderung des Standard-Zitattyps per Makro kann ich mir jedenfalls schon mal einige Arbeit sparen. Der Rest muss dann mit Citavi 5.8 kommen ;)

VG
Marc_222
Marc_222
 

Re: Makro gesucht, das alle Direktzitate eines Titels durchl  Topic is solved

Postby Marc_222 » 2018-01-03 17:20

So, um die Sache rundzumachen, insbes. für diejenigen, die - wie ich - gerne auf fertige Makros zurückgreifen, habe ich jetzt das ganze Makro - mit der unten stehenden Hilfe von Sebastian --> vielen Dank!!! - fertiggestellt und noch mit ein paar Kommentaren versehen, wo das Makro vom user noch angepasst werden kann.

Das Makro ändert bei dem ausgewählten Dokumententyp (im Beispiel: 'Beitrag im Gesetzeskommentar', kann aber geändert werden) den Zitattyp bei den Direktzitaten (kann auch angepasst werden, z.B. auf Kommentare o.ä.) auf 'Randnummer von-bis' (ebenfalls anpassbar). Es wird auf die vom Benutzer in der Ansicht 'Literaturverwaltung' ausgewählten Titel (ggf. Mehrfachauswahl) angewendet.

Sieht bei mir wie folgt aus:
Code: Select all
using System;
using System.Linq;
using System.ComponentModel;
using System.Collections.Generic;
using System.Windows.Forms;

using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Metadata;
using SwissAcademic.Citavi.Shell;
using SwissAcademic.Collections;

// Implementation of macro editor is preliminary and experimental.
// The Citavi object model is subject to change in future version.

public static class CitaviMacro
{
   public static void Main()
   {
      List<Reference> references = Program.ActiveProjectShell.PrimaryMainForm.GetSelectedReferences();
      SwissAcademic.Citavi.Project activeProject = Program.ActiveProjectShell.Project;

      foreach (Reference reference in references)
      {
         ReferenceType referenceType = reference.ReferenceType;
         
         // In der nächsten Anweisung ggf. einen anderen Dokumenttyp auswählen, z.B.:
         // ReferenceType.Book  ||  ReferenceType.Contribution  ||  /ReferenceType.CourtDecision  ||  ReferenceType.JournalArticle  ||  ReferenceType.Manuscript
         ReferenceType selectedType = ReferenceType.ContributionInLegalCommentary;
         
         if (reference.ReferenceType == selectedType)
         {
            // Standardmäßig werden nur Direkte Zitate ("Wörtliches Zitat") geändert. Falls erforderlich muss der Typ in der nächsten Zeile (QuotationType.DirectQuotation) angepasst werden, z.B. QuotationType.Comment
            List<KnowledgeItem> directQuotations = reference.Quotations.Where(x => x.QuotationType == QuotationType.DirectQuotation).ToList();
            foreach (KnowledgeItem knowledgeItem in directQuotations)
            {
               // als nächstes die gewünschte Art des Zitattyps ggf. ändern:
               // Seite von-bis = SwissAcademic.NumberingType.Page
               // Randnummer von-bis = SwissAcademic.NumberingType.Margin
               // Spalte von-bis = SwissAcademic.NumberingType.Column
               // Paragraph von-bis = SwissAcademic.NumberingType.Paragraph
               // Andere von-bis = SwissAcademic.NumberingType.Other
               SwissAcademic.NumberingType changeIntoType = SwissAcademic.NumberingType.Margin;
               knowledgeItem.PageRange = knowledgeItem.PageRange.Update(changeIntoType);
            }
         }
      }
   }
}
Marc_222
 


Return to Citavi 5 Support (Deutsch)