Page 1 of 1

Anpassung Zitationsstil American Economic Review

PostPosted: 2011-03-07 10:58
by dour24
Systeminformationen: [ Citavi Version 3.0.11, -, -, -, -, - ]

Liebes Citavi-Team,

kann ich den American Economic Review Zitationsstil so anpassen, dass nur Jahr und Seitenzahl in Klammer stehen (dies habe ich erfolgreich umgesetzt) und gleichzeitig Kurznachweise im Text, die schon in Klammer stehen nicht nochmals eine Klammer um Jahr und Seitenzahl bekommen?

Im Moment sieht ein formatierter Text bei mir so aus:

In their review, Camerer and Hogarth (1999, 21) discuss - das wäre in Ordnung

aber:

... (cf. Camerer and Hogarth (1999, 21)) - da sollte die innere Klammer nicht erscheinen.

Vielen Dank,
Dour

Re: Anpassung Zitationsstil American Economic Review

PostPosted: 2011-03-07 19:29
by Jörg Pasch
Hallo Dour,

nein, das geht leider nicht. Citavi spürt diese durch Sie in Word eingetippten Klammern zwar auf, lässt die inneren Klammern, die durch die Auflösung seiner Platzhalter hinzukommen, aber nur dann weg, wenn die Klammern den Kurznachweis unmittelbar einleiten und abschließen.

Bei Ihnen befinden sich die Klammern aber (irgendwo) innerhalb des Kurznachweises (zumindest die erste, was für Citavi hinreichend ist, das Klammernpaar nicht einfach zu unterdrücken).

In Ihrem Fall müssten Sie in Word entweder nach dem Formatieren manuell eingreifen oder durch einen Suchen&Ersetzen-Vorgang "Klammern in Klammern" entfernen. Letzteres könnte mit einem Word-Makro funktionieren. Die eingebaute Suchen&Ersetzen Funktion von Word allerdings ist da höchstwahrscheinlich nicht geeignet.

Ich kann versuchen, dieses Makro in den nächsten Tagen mal zu erstellen, kann aber noch nichts versprechen.
Vielleicht hat ja einer der anderen Power-User hier im Forum solch ein Makro zur Hand!?

Mit besten Grüßen,
Jörg

Re: Anpassung Zitationsstil American Economic Review

PostPosted: 2011-03-08 06:12
by dour24
Hallo Jörg,

vielen Dank für die Antwort. Über so ein Makro wäre ich sehr dankbar, da es sich um einen längeren Text handelt.

Mit besten Grüßen,
Dour

Re: Anpassung Zitationsstil American Economic Review

PostPosted: 2011-03-08 15:16
by Jörg Pasch
Hallo Dour,

nachfolgend finden Sie das Word-Makro, welches Klammern innerhalb von Klammern entfernt.
Ich habe es in Word 2007 geschrieben und getestet. Es sollte aber auch in Word 2003 und 2010 funktionieren.

Das Makro leitet Sie von Fundstelle zu Fundstelle durch Verschieben der Textmarkierung. Sie können dann interaktiv entscheiden, ob Sie die Ersetzung an der aktuellen Fundstelle durchführen möchten oder nicht.
Erwähnenswert wäre noch, dass das Makro natürlich ins Stolpern gerät, wenn Sie mal vergessen haben sollten, eine Klammer zu schließen. Das merken Sie aber sehr schnell dadurch, dass es unerwartet viel Text markiert und zur Ersetzung vorschlägt. Klicken Sie dann auf "Abbrechen", ergänzen Sie die fehlende Klammer im Text. Anschließend können Sie das Makro neu starten.

Eine Kurz-Anleitung zum Einsatz des Makros finden Sie unten.

Viel Erfolg und beste Grüße,
Jörg

Anleitung: Makro zum Entfernen von Klammern innerhalb von Klammern

  1. Starten Sie Word und öffnen Sie das Dokument, in dem nach verschachtelten Klammern gesucht werden soll.
  2. Bitte stellen Sie unbedingt sicher, dass Sie von diesem Dokument ein aktuelles Backup angefertigt haben. Das Makro nimmt Änderungen an Ihrem Text vor; auch wenn diese i.d.Regel im Rückgängig-Puffer von Word abgelegt werden und über diese Funktion rückgängig gemacht werden können, ist ein Backup sicherer.
  3. Nehmen Sie den nachfolgenden Makro-Code mit Alles Auswählen und STRG+C in die Zwischenablage.

    Code: Select all
    Sub RemoveParenthesesWithinParentheses()

    On Error Resume Next

    Dim doc As Document
    If Application.ActiveDocument Is Nothing Then Exit Sub
    Set doc = Application.ActiveDocument

    Dim regEx As RegExp
    Dim hit As match
    Dim matches As MatchCollection
    Dim cancelled As Boolean
    cancelled = False

    Dim countHits As Integer
    Dim countReplacements As Integer
    countHits = 0
    countReplacements = 0

    Dim rngHit As Range
    Dim rngSubMatch0 As Range   'Opening outer parenthesis and text before opening inner parenthesis
    Dim rngSubMatch1 As Range   'Complete inner parenthesis expression
    Dim rngSubMatch2 As Range   'Contents of inner parenthesis
    Dim rngSubMatch3 As Range   'Text after closing inner parenthesis up to and inlcuding outer closing parenthesis
    Dim rngInsert As Range
    Dim rngSearch As Range

    Set rngSearch = doc.Range

    Dim msgText As String
    Dim replaceText As String
    Dim msgAnswer As VbMsgBoxResult


    Rem Advise user to have backup of this document, otherwise he/she should cancel
    msgText = "This macro makes changes to your document. "
    msgText = msgText + "Make sure you have saved a backup of the document! "
    msgText = msgText + "If you have not, click 'Cancel' and make a backup." + vbCrLf + vbCrLf
    msgText = msgText + "Do you want to continue?"

    msgAnswer = MsgBox(msgText, vbExclamation + vbOKCancel, "Citavi")
    If msgAnswer = vbCancel Then
        Exit Sub
    End If


    Set regEx = New RegExp
    regEx.Pattern = "(\([^\(\)]*)(\(([^\)]*)\))([^\)]*\))"
    regEx.IgnoreCase = False
    regEx.Global = False

    Selection.GoTo What:=wdGoToSection, Which:=wdGoToFirst
    Set matches = regEx.Execute(rngSearch)


    Do Until matches.Count = 0
        Set hit = matches(0)
        countHits = countHits + 1
       
        Rem Important: Set new ranges relative to search range
        Set rngHit = doc.Range(rngSearch.Start + hit.FirstIndex, rngSearch.Start + hit.FirstIndex + Len(hit.Value))
        Set rngInsert = doc.Range(rngHit.End, rngHit.End)
       
        Set rngSubMatch0 = doc.Range(rngSearch.Start + hit.FirstIndex, rngSearch.Start + hit.FirstIndex + Len(hit.SubMatches(0)))
        Set rngSubMatch1 = doc.Range(rngSubMatch0.End, rngSubMatch0.End + Len(hit.SubMatches(1)))
        Set rngSubMatch2 = doc.Range(rngSubMatch1.Start + 1, rngSubMatch1.End - 1)
        Set rngSubMatch3 = doc.Range(rngSubMatch1.End, rngSubMatch1.End + Len(hit.SubMatches(3)))
       
        rngHit.Select
        'rngHit.HighlightColorIndex = wdYellow
        'rngSubMatch0.HighlightColorIndex = wdBlue
        'rngSubMatch1.HighlightColorIndex = wdYellow
        'rngSubMatch3.HighlightColorIndex = wdGreen
        'rngSubMatch2.HighlightColorIndex = wdBrightGreen
       
       
        replaceText = hit.SubMatches(0) + hit.SubMatches(2) + hit.SubMatches(3)
       
        msgText = "Found parentheses within parentheses:" + vbCrLf + rngHit.Text + vbCrLf + vbCrLf
        msgText = msgText + "Do you want to replace the above with the following?" + vbCrLf
        msgText = msgText + replaceText
       

        msgAnswer = MsgBox(msgText, vbQuestion + vbYesNoCancel, "Citavi")
       
       
        If msgAnswer = vbYes Then
            Rem Replace and move on to next hit
            'rngHit.HighlightColorIndex = wdNoHighlight
            Rem rngHit.Text = replaceText 'this would mess up with formatting
           
            rngInsert.FormattedText = rngSubMatch0.FormattedText
            rngInsert.Collapse wdCollapseEnd
           
            rngInsert.FormattedText = rngSubMatch2.FormattedText
            rngInsert.Collapse wdCollapseEnd
           
            rngInsert.FormattedText = rngSubMatch3.FormattedText
            rngInsert.Collapse wdCollapseEnd
           
            rngHit.Delete
            countReplacements = countReplacements + 1
           
        ElseIf msgAnswer = vbNo Then
            Rem Do nothing and move on to next hit
            'rngHit.HighlightColorIndex = wdNoHighlight
            rngHit.Collapse wdCollapseEnd
            Set rngInsert = rngHit

           
        ElseIf msgAnswer = vbCancel Then
            Rem User wants to stop searching & replacing
            cancelled = True
            'rngHit.HighlightColorIndex = wdNoHighlight
            msgText = "Macro was canceled." + vbCrLf
            msgText = msgText + CStr(countHits) + " nested parenthesis found so far, " + CStr(countReplacements) + " replaced."
                   
            MsgBox msgText, vbInformation, "Citavi"
            Exit Do
           
        End If
       
        Rem Move on by re-defining search range
        Set rngSearch = doc.Range(rngInsert.Start, doc.Range.End)
        Set matches = regEx.Execute(rngSearch)
    Loop

    Rem Move selection to start of document
    Selection.GoTo What:=wdGoToSection, Which:=wdGoToFirst

    If Not cancelled Then
    Rem We inform the user that we're finished and provide some statistics
        If countHits = 0 Then
            msgText = "Macro has finished. " + vbCrLf + vbCrLf + "No nested parentheses found."
         
        Else
            msgText = "Macro has finished. " + vbCrLf + vbCrLf
            msgText = msgText + CStr(countHits) + " nested parentheses found, "
            msgText = msgText + CStr(countReplacements) + " replaced."
        End If
           
        MsgBox msgText, vbInformation + vbOKOnly, "Citavi"
    End If


    Set hit = Nothing
    Set matches = Nothing
    Set regEx = Nothing

    Set rngHit = Nothing
    Set rngSubMatch0 = Nothing
    Set rngSubMatch1 = Nothing
    Set rngSubMatch2 = Nothing
    Set rngSubMatch3 = Nothing
    Set rngSearch = Nothing
    Set rngInsert = Nothing

    Set doc = Nothing

    End Sub

  4. Wählen Sie in Word den Befehl Ansicht > Makros (ALT+F8).
    Geben Sie unter Makronamen den Bezeichner RemoveParenthesesWihinParentheses ein und klicken Sie auf Erstellen.

    makroeditorstarten.jpg

  5. Fügen Sie den Makro-Code so ein, dass der von Word vorbereitete leere Funktionsrumpf Sub RemoveParenthesesWithinParentheses ... End Sub mit dem kompletten Code überschrieben wird. Der nachfolgende Screenshot zeigt das Ergebnis:

    einfuegenmakrocodeeditor.jpg

  6. Wichtig: Damit der Makro-Code funktioniert, muss nun noch ein Verweis auf die Programm-Bibliothek Microsoft VBScript Regular Expressions 5.5 eingefügt werden. Klicken Sie dazu im Makro-Editor auf Extras > Verweise und setzen Sie in der Liste Verfügbare Verweise ein Häkchen vor dem Bibliotheksnamen (ggf. kann auch eine ältere Version als 5.5 zum Ziel führen).

    verweisaufvbscriptregex.jpg

  7. Wählen Sie im Makro-Editor Datei > Speichern und schließen Sie den Editor, um zum Word-Hauptfenster zurückzukehren.
  8. Um das Makro mit Ihrem Dokument auszuführen, öffnen Sie wieder Ansicht > Makros (ALT+F8), wählen Sie in der Liste Makronamen das eben eingefügte RemoveParenthesesWithinParentheses und klicken Sie auf Ausführen.
  9. Folgen Sie den Anweisungen des Makros.