JJ-Skripte für das Literaturverzeichnis

Vorlagen helfen, Wenn-Dann-Regeln auf Formatierungen anzuwenden. Hier finden Sie zusätzliche Vorlagen.

Re: JJ-Skripte für das Literaturverzeichnis

Postby jay-squared » 2017-02-27 23:00

Ein Bild sagt mehr als 1000 Worte. Wie eine Forumssuche vielleicht zu Tage fördert, habe ich eh ein Skript (inzwischen AddOn), welches innerhalb einer Kategorie alle Wissenselemente nach Titel sortiert, und innerhalb eines Titels nach Position des Wissenselement innerhalb einer angefügten PDF. Jetzt wollte ich halt nur noch schnell auf einen Blick sehen, wo in einer Kategorie die Wissenselemente eines Titels aufhören, und die des nächsten Titels anfangen.

Capture.PNG
jay-squared
Citavi Expert
 

Re: JJ-Skripte für das Literaturverzeichnis

Postby Bebbi » 2017-03-22 23:56

Naja, gehört eigentlich in eine eigene Rubrik ...

Addon zum Ändern des Kurztitels
Bebbi
Citavi Expert
 


Re: JJ-Skripte für das Literaturverzeichnis

Postby jay-squared » 2017-06-28 21:24

Nicht fürs Literaturverzeichnis. Folgendes Makro lädt eine PDF runter, welche online verfügbar ist und mit dem Titel verknüpft ist, wenn der Titel noch mit keiner lokalen Datei verknüpft ist.

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

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

public static class CitaviMacro
{
   public static void Main()
   {
      List<Reference> references = Program.ActiveProjectShell.PrimaryMainForm.GetSelectedReferences();
      
      Project activeProject = Program.ActiveProjectShell.Project;
      string rootPath = activeProject.Addresses.AttachmentsFolderPath;         

      foreach (Reference reference in references)
      {
         List<Location> locations = reference.Locations.ToList();
         if (locations.Count() == 0) continue;
         if (locations.Where(o => o.AddressUri.AbsoluteUri.GetFileInfo() != null).ToList().Count > 0) continue;
         
         int i = 0;
         
         foreach (Location location in locations)
         {
            if (location == null) return;
            if (location.AddressUri == null) continue;
            if (location.AddressUri.AbsoluteUri == null) continue;
            
            i = i + 1;
            
            string absoluteURI = location.AddressUri.AbsoluteUri.ToString();
            
            if (!absoluteURI.Contains("http")) continue;
            if (!absoluteURI.Contains("pdf")) continue;
            
            string newFileName = CleanString(reference.ShortTitle);
            
            newFileName = rootPath + @"\" + newFileName + ".pdf";
            
            using (var client = new WebClient())
            {
                   client.DownloadFile(absoluteURI, newFileName);
            }
            
            Location newLocation = new Location(reference, LocationType.ElectronicAddress, newFileName);
            
            if (i > 1) newFileName += " (" + i.ToString() + ")";
            
            reference.Locations.Add(newLocation);
            
         }         
      }
   }
   private static string CleanString(string input)
   {
      char[] BAD_CHARS = new char[] { '?', '\\', '/', '?', '*', ':', '"', '“', '”', '‘', '’' };
      string output;
      output = input;
      output = RemoveDiacritics(output);
      output = string.Concat(output.Split(BAD_CHARS,StringSplitOptions.RemoveEmptyEntries));
      
      return output;
   }
   private static string RemoveDiacritics(string text)
   {
      var normalizedString = text.Normalize(NormalizationForm.FormD);
      var stringBuilder = new StringBuilder();

      foreach (var c in normalizedString)
      {
         var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
         if (unicodeCategory != UnicodeCategory.NonSpacingMark)
         {
            stringBuilder.Append(c);
         }
      }
      return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
   }
}
jay-squared
Citavi Expert
 

Re: JJ-Skripte für das Literaturverzeichnis

Postby Bebbi » 2017-06-29 01:07

Hallo JJ,

quasi "Gucken, ob schon vorhanden" und "Lokale Kopie speichern" in einem, ja? Bezieht sich das nur auf den aktuell aufgerufen Titel?

Grüße

Bebbi
Bebbi
Citavi Expert
 

Re: JJ-Skripte für das Literaturverzeichnis

Postby jay-squared » 2017-06-29 01:22

Auf alle markierten. Der Insider merkt das daran, dass da einmal steht

Code: Select all
List<Reference> references = Program.ActiveProjectShell.PrimaryMainForm.GetSelectedReferences();


und dann

Code: Select all
foreach (Reference reference in references)
jay-squared
Citavi Expert
 

Re: JJ-Skripte für das Literaturverzeichnis

Postby Bebbi » 2017-07-02 00:50

… aber NICHT NUR die PDF, die im URL-Feld ist. Eine interessante Idee!
Bebbi
Citavi Expert
 


Re: JJ-Skripte für das Literaturverzeichnis

Postby Bebbi » 2017-08-09 15:19

Komponente unterdrücken, wenn im Projekt kein Titel mit gleicher üblicher Abkürzung aber höherer Auflage vorhanden ist. (s. auch hier)

Das Anwendungsproblem:

Alma wrote:Ich möchte die Altauflage eines Gesetzeskommentars neben der Neuauflage zitieren, was üblicherweise derart gemacht wird, dass einerseits LK/Bearbeiter und andererseits LK11/Bearbeiter zitiert wird, wobei das 11 hochzustellen ist.

Die Abkürzung LK bzw. LK11 gebe ich in das Feld "Übliche Abk." ein.
Bebbi
Citavi Expert
 


PreviousNext

Return to Mit Vorlagen komplexe Formatierungen erzeugen



cron