Page 1 of 1

Interpunktion unterdrücken per \option1

PostPosted: 2017-05-23 13:44
by maier.de
Hallo zusammen,

ich würde gerne einen Stil entwickeln, bei dem die Nachweise in den Fussnoten standardmässig mit einem Punkt enden. Das ist an sich kein Problem. Aber: Gelegentlich werden die Nachweise in einen Satz integriert, etwa so:

"Wie NACHWEIS meisterhaft darstellt, verhält es sich so und nicht anders."

Hier wäre dann natürlich der abschliessende Punkt falsch und ich möchte ihn gerne in einzelnen Fällen deaktivieren.

Mögliche Lösung: Definiere eine neue Vorlage mit der Bedingung "Wenn \option1 gewählt ist, dann ..."
=> Funktioniert. Doch es wird schnell unübersichtlich, da das dann für alle Vorlagen gemacht werden muss.

Eine bessere Lösung wäre wohl, diese Abfrage auf der Ebene einer einzelnen Komponente zu machen. Ich würde gerne eine Textkomponente erstellen, die einfach den abschliessenden Punkt enthält, die aber unterdrückt wird, wenn die \option1 gewählt wird.
Die Frage lautet also: Wie kann ich auf der Ebene einer einzelnen Komponente eine solche Abfrage machen?

Viele Grüsse
Denis

Re: Interpunktion unterdrücken per \option1  Topic is solved

PostPosted: 2017-05-23 14:12
by jay-squared
Programmierte Komponenten
Code: Select all
using System.Linq;
using System.Collections.Generic;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Metadata;
using SwissAcademic.Collections;
using SwissAcademic.Drawing;

namespace SwissAcademic.Citavi.Citations
{
   public class ComponentPartFilter
      :
      IComponentPartFilter
   {
      public IEnumerable<ITextUnit> GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled)
      {
         handled = false;
         
         PlaceholderCitation thisPlaceholderCitation = citation as PlaceholderCitation;
         if (thisPlaceholderCitation == null) return null;
         
         if (thisPlaceholderCitation.FormatOption1 == true) handled = true;
         
         return null;
      }
   }
}


Aber ich mach das seit Jahr und Tag so, dass ich stattdessen den Punkt per Word-Makro setzen lasse.

Re: Interpunktion unterdrücken per \option1

PostPosted: 2017-05-24 09:40
by maier.de
Besten Dank. Das funktioniert perfekt.

Vielen Dank auch für den Hinweis auf die Word-Makros. Das ist prinzipiell natürlich auch eine mögliche Lösung und hat wohl den Vorteil, dass man dann von einzelnen Stilen unabhängig ist. Allerdings finde ich es schöner, wenn derartige Formatierungen vom Stil gesteuert werden. Scheint mir irgendwie sauberer und weniger anfällig für doppelte Punkte bei "Ebd.", "f." oder "ff." Die kann man ja dann automatisch über die im Stil definierten Ersetzungen abfangen, sodass man am Ende weniger nachbearbeiten muss.

Gerade sehe ich übrigens, dass man bei den Eigenschaften des Zitationsstils Affixe definieren kann. Dort könnte man prinzipiell auch den Punkt als abschliessendes Zeichen definieren, allerdings fehlt die Möglichkeit den Zitattyp "Keine" zu definieren. Das wäre vermutlich die eleganteste Lösung, und käme auch ohne Formatoptionen aus, da man dann selektiv die Affixe im Addin deaktiveren kann.

Re: Interpunktion unterdrücken per \option1

PostPosted: 2017-05-24 11:00
by maier.de
Noch eine kurze Nachfrage: Kann man den Code auch so modifizieren, dass der Punkt nur beim letzten Element eines Mehrfachnachweises ausgegeben wird?

Re: Interpunktion unterdrücken per \option1

PostPosted: 2017-05-24 11:16
by jay-squared
Geht das hier?

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

namespace SwissAcademic.Citavi.Citations
{
   public class ComponentPartFilter
    :
    IComponentPartFilter
   {
    public IEnumerable<ITextUnit> GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled)
    {
      handled = false;
      
      bool HasSuccessorInSamePlaceholder = false;
      
      if (citation == null) return null;
      Reference reference = citation.Reference;
      if (reference == null) return null;
      
      PlaceholderCitation thisPlaceholderCitation = citation as PlaceholderCitation;
      if (thisPlaceholderCitation == null) return null;
      if (thisPlaceholderCitation.Entry == null) return null;
      if (thisPlaceholderCitation.Entry.Placeholder == null) return null;
   
      CitationManager citationManager = thisPlaceholderCitation.CitationManager;
      if (citationManager == null) return null;
   
      FootnoteCitation footnoteCitation = thisPlaceholderCitation as FootnoteCitation;
      if (footnoteCitation == null) return null;
      
      bool HasPredecessorInSameRange = false;
      bool HasPredecessorInSamePlaceholder = false;
      PlaceholderCitation nextPlaceholderCitation = null;
      
      if (footnoteCitation != null)
      {
         nextPlaceholderCitation = footnoteCitation.NextFootnoteCitation as PlaceholderCitation;
         if (nextPlaceholderCitation != null) HasPredecessorInSameRange = true;
      }      
            
      if (HasPredecessorInSameRange)
      {   
         if (nextPlaceholderCitation.Entry == null) return null;
         if (nextPlaceholderCitation.Entry.Placeholder == null) return null;
         if (nextPlaceholderCitation.Entry.Placeholder == thisPlaceholderCitation.Entry.Placeholder) HasSuccessorInSamePlaceholder = true;         
      }      
      
      if (HasSuccessorInSamePlaceholder == true || thisPlaceholderCitation.FormatOption1 == true) handled = true;
      
      return null;
    }
   }
}

Re: Interpunktion unterdrücken per \option1

PostPosted: 2017-05-24 13:05
by jay-squared
Ooops, im Sinne einer sinnvollen Variablenbenennung hätte ich alle "Predecessor" natürlich in "Successor" umbenennnen sollen. Ist aber nur Schall und Rauch. Sollte trotzdem funktionieren, aber ich habe nichts zum ausprobieren.

Re: Interpunktion unterdrücken per \option1

PostPosted: 2017-05-25 09:47
by maier.de
Funktioniert bestens. Vielen Dank.