Programmatische Änderung des Citavi-Projektes durch Komponentenfilter im Word-AddIn

SirPounce hinzugefügt 46 Tagen her
beantwortet

Liebes Citavi-Team,


Folgende Aufgabenstellung:

1. Ein Nachweis soll eine eindeutige Kurzform erhalten.

2. Wenn im gesamten Buch nur ein Titel des Autors genannt ist, ist diese Kurzform der Nachname des Autors. Hat der Autor aber mehr als einen Titel, so ist die Kurzform Nachname + Titel.

3. Die Zählung der Fußnoten erfolgt kapitelweise.

4. Innerhalb eines Kapitels erfolgt bei einem Folgezitat ein Rückverweis auf das Erstzitat innerhalb des Kapitels.

Konsequenz von 3 und 4 ist, dass das Buch in mehrere Teildokumente aufgesplittet werden muss. Konsequenz von 1 und 2 ist, dass ein Test nach dem Muster

public static bool AuthorHasMultipleTitles(this Citation citation)
        {
            if (citation == null) return false;

            CitationManager citationManager = citation.CitationManager;
            if (citationManager == null) return false;

            List<BibliographyCitation> bibliographyCitations = citationManager.BibliographyCitations.ToList();
            if (bibliographyCitations == null) return false;

            Reference reference = citation.Reference;
            if (reference == null) return false;			
						
            if (reference.AuthorsOrEditorsOrOrganizations == null) return false;

            bool AuthorHasMultipleTitlesBool = false;

            if (bibliographyCitations.Where(b =>
                        b.Reference != reference
                        && b.Reference.AuthorsOrEditorsOrOrganizations != null
                        && b.Reference.AuthorsOrEditorsOrOrganizations.SequenceEqual(reference.AuthorsOrEditorsOrOrganizations)
                    ).ToList().Count > 0)
                AuthorHasMultipleTitlesBool = true;			

            return AuthorHasMultipleTitlesBool;
        }
aber für das gesamte Buch erfolgen muss. Nun denn, dachte ich mir, füge ich einfach alle Dokumente in ein Masterdokument zusammen, und lass da einmal den Zitationsstil drüber gehen, um zu überprüfen, ob der Autor eindeutig ist. Dann muss ich aber natürlich das Ergebnis auf eine Art und weise speichern, dass es auch bei den kapitelweisen Citavi-Durchgängen zur Verfügung steht. Also dachte ich mir, ich mache eine Rückkopplung, von der Publikation ins Projekt. So ähnlich wie die angewandte Chemie mit Parallelveröffentlichungen. Also so was hier:
public static bool AuthorHasMultipleTitles(this Citation citation)
        {
            if (citation == null) return false;

            CitationManager citationManager = citation.CitationManager;
            if (citationManager == null) return false;

            List<BibliographyCitation> bibliographyCitations = citationManager.BibliographyCitations.ToList();
            if (bibliographyCitations == null) return false;

            Reference reference = citation.Reference;
            if (reference == null) return false;
			
			if (reference.CustomField1.Contains("AuthorHasMultipleTitles")) return true;
			
            if (reference.AuthorsOrEditorsOrOrganizations == null) return false;

            bool AuthorHasMultipleTitlesBool = false;

            if (bibliographyCitations.Where(b =>
                        b.Reference != reference
                        && b.Reference.AuthorsOrEditorsOrOrganizations != null
                        && b.Reference.AuthorsOrEditorsOrOrganizations.SequenceEqual(reference.AuthorsOrEditorsOrOrganizations)
                    ).ToList().Count > 0)
                AuthorHasMultipleTitlesBool = true;
			
			if (AuthorHasMultipleTitlesBool)
			{
				if (!string.IsNullOrEmpty(reference.CustomField1)) reference.CustomField1 +=  ", ";
				reference.CustomField1 += "AuthorHasMultipleTitles";
			}

            return AuthorHasMultipleTitlesBool;
        }
In dem primär auf CustomField1 getestet wird, und CustomField1 von der Komponente beschrieben wird, steht das Ergebnis des Citavi-Durchlaufs über das gesamte Buch auch zur Verfügung, wenn kapitelweise Citavi ausgeführt wird.

Allein: reference.CustomField1 += "AuthorHasMultipleTitles"; zeitigt keine Wirkung. Der Komponentenfilter schreibt nicht ins Projekt. Wie erreiche ich das?

Alternativ: Welch trivialen Weg, Anforderung 1-4 zu erfüllen habe ich übersehen (sieht man mal von "CustomField1" selber ausfüllen ab).

Beste Grüße

JJ

Kommentare (7)

Foto
1

Eine andere Alternative ist noch das Filtern nach Titeln in der aktuellen Publikation innerhalb Citavis, und dann ein Makro, welches für jeden Titel im aktuellen Filter überprüft, ob mehr als ein Tiel mit identischem Autorenfeld im aktuellen Filter vorhanden ist. Ich fände die Lösung aus dem Zitationsstil etwas eleganter, aber performanzmäßig würde die Makrolösung wahrscheinlich sogar noch mehr Schwuppdizität aufzeigen.

Foto
1

Hallo JJ,

vielen Dank für Ihre Frage und entschuldigen Sie bitte die späte Antwort. Ich habe noch ausführlich mit unserem Entwickler gesprochen.

Die Frage, ob von einem bestimmten Autor/Autorenkollektiv mehr als ein Titel zitiert wird, muss nicht mit einer eigenen Funktion gelöst werden. Es gibt zum einen die Template-Bedingung "Andere Titel desselben Autors, Herausgebers oder Organisation werden ebenfalls zitiert". Zum anderen gibt es bei JEDER BibliographyCitation eine einmal populierte Eigenschaft "bibliographyCitation.HasOtherCitationsBySameAuthorsEditorsOrOrganizations". Auf diese kann in allen Komponentenskripts zurückgegriffen werden. Damit wäre die AuthorHasMultipleTitles(this Citation citation) entweder hinfällig oder kann einfach so umgeschrieben werden, dass sie die vorgenannte Eigenschaft nutzt.

Zur Illustration folgt nun Screenshot einer einfachen Alternative zu Ihrer Funktion "AuthorHasMultipleTitles". Im Gegensatz zu dieser geht die folgende Alternative nicht immer durch alle Zitationen im Literaturverzeichnis durch, sondern fragt die simple Eigenschaft "HasOtherCitationsBySameAuthorsEditorsOrOrganizations" ab (das geht auch bei Platzhalterzitationen über die Eigenschaft "placeholderCitation.CorrespondingBibliographyCitation").

12efa5ef89484fcfb8009d8e1f9bd2e9

Mein Kollege hat den Fall extra nachgestellt: Wenn Sie das Zentraldokument öffnen und in Citavis Word Add-in auf "Aktualisieren" klicken, dann werden auch Filialdokument-übergreifende Wiederholungen (also auch mehrere Titel desselben Autors) korrekt festgestellt.

Uns ist daher noch nicht ganz klar, warum Sie auch beim Formatieren eines einzelnen Filialdokumentes bereits das endgültige Aussehen der Referenzen benötigen (also ob nur "Autor" oder "Autor Titel"), wenn man diese auch später im Zentraldokument durch den Aktualisieren-Button erhalten kann.

Das Problem an der Speicherung der Zitier-Informationen im Projekt ist, dass prinzipiell diese Information ggf. ja auch wieder entfernt werden muss, denn es kann ja sein, dass später Referenzen im Text gelöscht werden und mithin die Bedingung "Andere Titel desselben Autors werden zitiert" nicht mehr gegeben ist.

Zur Frage, warum der Zitationsstil bei Ihnen nicht ins Projekt schreibt: Wir gehen davon aus, dass Ihr Daten änderndes Skript bei Ausgabe von In-Text- oder Fussnotenzitationen in Word getriggert wird. Diese werden aber einzig im Kontext von Word ausgeführt und haben darum auch nur Zugriff auf die Daten der sogenannten Travelling-Library in Word. Diese beinhaltet bekanntermaßen aktuelle Kopien der Literaturdaten aus dem Projekt und werden auch bei jeder Aktualisierung mit den neuesten Daten überschrieben.

Der Trick bei der Angewandten Chemie (s. alter Forenbeitrag) funktionierte bewusst über ein Skript zur Ausgabe im Literaturverzeichnis als Trigger. Wir haben die Nutzer nämlich in den Zusammenhang gebeten, im Hauptprogramm von Citavi den Befehl "Aktuellen Titel im Zitationsstil anzeigen" zu wählen. Das ist das Vorschaufenster links oberhalb der Titel-Liste, welches die Standardvorlage des Literaturverzeichnisses verwendet. Dann und nur dann arbeitet ein Teil der Skripte des Zitationsstils im Kontext des Hauptprogramms und vermag mithin Daten im Projekt zu modifizieren.

Über die o.g. Speziallösung hinaus gibt es zur Zeit keinen Weg, per Zitationsstil-Skript die Daten im Projekt zu modifizieren und wir planen aktuell auch nicht, daran etwas zu ändern.

Viele Grüße

Susanne

Foto
1

Liebe Susanne,

Vielen Dank für die umfangreiche Antwort, welche sich mit einem "Nein" konzise zusammenfassen lässt.

Ich erlaube mir, die angesprochenen Nebenkriegsschauplätze anzusprechen.

1. HasOtherCitationsBySameAuthorsEditorsOrOrganizations gab es nicht schon immer. Das ist das Problem an der undokumentierten API. Der Nutzer kriegt von solchen Innovationen (welche ja enorm performanzsteigernd sind) nichts mit.

2. Wenn ich das über eine Vorlagenbedingung mache, muss ich zwanzig neue Vorlagen erstellen. Der Weg über Komponentenfilter ist meines Erachtens fast immer sinnvoller.

3. Der Sinn des Ganzen: Der Einwand "Uns ist daher noch nicht ganz klar, warum Sie auch beim Formatieren eines einzelnen Filialdokumentes bereits das endgültige Aussehen der Referenzen benötige" verwirrt mich etwas. Ich kann nur nochmal die die letzten beiden der vier Anforderungen wiederholen, mit Kursivierung.

"3. Die Zählung der Fußnoten erfolgt kapitelweise.

4. Innerhalb eines Kapitels erfolgt bei einem Folgezitat ein Rückverweis auf das Erstzitat innerhalb des Kapitels."

Die Anwendung der Citavi-Formatierung auf das Zentraldokument, welche ja gerade notwendig ist, um den HasOtherCitationsBySameAuthorsEditorsOrOrganizations-Test auszuführen, macht 3 und 4 erst einmal kaputt. Daher muss im Anschluss an die Zentraldokumentformatierung jedes Filialdokument erneut formatiert werden, um die kapitelweise Fußnotennummerierung wiederherzustellen. Da die Filialdokumentenformatierung wiederum die für Bedingung 1 und 2 notwendige Ermittlung des HasOtherCitationsBySameAuthorsEditorsOrOrganizations zerstört (bzw. diese dann nur noch kapitelweise, nicht buchübergreifend funktioniert), suchte ich nach einer Möglichkeit, Ergebnisse der Tests, welche während der Zentraldokumentformatierung möglich sind, im Projekt persistent zwischenzuspeichern.

4. Ich erlaube mir den Hinweis, dass die Notwendigkeit, im Hauptprogramm von Citavi den Befehl "Aktuellen Titel im Zitationsstil anzeigen" zu wählen in der Dokumentation der Angewandten Chemie (Parallelveröffentlichung) nicht enthalten ist. Was da auch nicht steht: das ganze funktioniert auch nicht, wenn der im Dokument zitierte Titel nach dem Hinzufügen der Parallelveröffentlichung nie mehr in Citavi betrachtet wird. Das ist zwar logisch, aber sollte vielleicht auch dem Nutzer mitgeteilt werden.

5. Wie gesagt, das Ganze ist auch per Makro möglich. Die Zitationsstil-Lösung hätte ich nur eleganter gefunden.

Beste Grüße

JJ

Foto
1

Guten Tag SirPounce

Weil Susanne heute frei hat, übernehme ich kurz (in dem Sinne, dass ich die Informationen eines unserer Entwickler weiterreiche).

Zu 1.) HasOtherCitationsBySameAuthorsEditorsOrOrganizations ist der interne Name für eine Eigenschaft, die die Template-Bedingung "Andere Titel desselben Autors ... werden ebenfalls zitiert" verwendet. Diese Bedingung ist seit C6.0 in Citavi enthalten.

Zu 2.) Sie müssten nicht den Weg über Vorlagenbedingungen wählen; das geht auch mit einem Komponentenfilter. Das war der Grund, warum meine Kollegin die Eigenschaft "HasOtherCitationsBySameAuthorsEditorsOrOrganizations" anhand eines Beispiel-Komponentenfilters illustriert hat.

Zu 3.) und 4.) Wenn die Filialdokumentformatierung wegen der Fußnotenproblematik NACH der Zentraldokumentformatierung erfolgen muss, wie erstellen Sie das kapitelübergreifende Literaturverzeichnis?

Zu 5.) Den FAQ-Artikel haben wir Dank Ihres Hinweises verbessert.

Freundliche Grüsse

Peter

Foto
1

Lieber Peter,

Nur der Klarstellung halber: Meine Frage als solche ist ja beantwortet, es geht nur noch darum, wie Citavi in der Praxis genutzt wird.

Nochmal kurz zu 1 und 2) HasOtherCitationsBySameAuthorsEditorsOrOrganizations scheint die Performanz der Komponentenfilter echt zu steigern. Also ein Danke dafür!

Zu 3. und 4.) So ganz verstehe ich die Frage nicht. Wenn ich in einem ersten Schritt das Zentraldokument formatiere – sei es um, was ja nun nicht geht, das Ergebnis von HasOtherCitationsBySameAuthorsEditorsOrOrganizations kapitelübergreifend und persistent (an letzterem scheitert es) zu ermitteln, sei es, um das Literaturverzeichnis zu erstellen – und danach im zweiten Schritt jedes Filialdokument noch einmal einzeln formatiere, um die kapitelweise Zählung wiederherzustellen, dann führt der zweite Schritt ja nicht dazu, dass das Literaturverzeichnis, welches im ersten Schritt erstellt wurde, weg ist. Das ist also kein Problem.

Zu 7) Ich muss noch lernen, korrekt von 1 bis 6 zu zählen.

Beste Grüße

JJ

Foto
1

Lieber JJ

Darf ich diese Anfrage jetzt auf "beantwortet" stellen - oder habe ich noch etwas übersehen?

Freundliche Grüsse

Peter

Foto
1

Auf jeden Fall. M.E hätte man das schon nach der ersten Antwort machen können. Wenn es nicht geht, geht es nicht.