ich beschäftige mich gerade mit der Endformatierung meiner Doktorarbeit vor der Veröffentlichung. Mein Verlag hat in seinen Formatierungshinweisen verlangt, dass u.a. die Autorennamen der Literatureinträge in den Fußnoten kursiv gesetzt werden. Meine Literatureinträge werden - über den Identifier - derzeit so im Dokument angezeigt:
Hellgardt, Kapitalmarktdeliktsrecht, 2006
Da ich gestern und heute vergeblich probiert habe, ausschließlich den Autorenname über ein Makro mit dem Cursor zu markieren und kursiv zu setzen, gehe ich jetzt davon aus, dass OpenOffice eine unterschiedliche Formatierung eines Literatureintrages nicht zulässt. Oder irre ich mich da?
Also habe ich mich entschlossen, mit einem Makro jeden Literaturverzeichniseintrag im Dokument durchzulaufen, hier den Autor aus dem Identifier rauszunehmen und als separaten String vor den Literaturverzeichniseintrag zu setzen, um ihn dann kursiv zu stellen.
Solange sich die Literatureinträge im Haupttext befinden, klappt es auch. Soweit die Literatureinträge aber in einer Fußnote gesetzt sind, kommt eine Fehlermeldung.
Code: Alles auswählen
Sub Autoren_nachtraeglich_kursiv_setzen_im_Text
'Access the current document.
Dim oDoc As Object
oDoc = ThisComponent
'Create a cursor to enter data through.
Dim oCursor As Object
oCursor = oDoc.Text.createTextCursor
Set varEnum = oDoc.getTextFields().createEnumeration()
'varEnum = thisComponent.getTextFields().createEnumeration()
searchString = ","
Print "Soll der Haupttext abgeändert werden?"
If Not IsNull(varEnum) Then
Do While varEnum.hasMoreElements()
tF = varEnum.nextElement()
If tF.supportsService("com.sun.star.text.textfield.Bibliography") Then
oCols = tF.Fields
actualString = oCols(0).Value 'Name = Identifier
'1. Die Autorenbezeichnung extrahieren....
autorenBezeichnung = Left( actualString, InStr(actualString, searchString) )
'2. Autorenbezeichnung davor einfügen....
oCursor.gotoRange( tF.getAnchor().getStart(), false )
'oCursor.goLeft( 1 , false )
oCursor.setPropertyValue("CharPosture", com.sun.star.awt.FontSlant.ITALIC)
oDoc.Text.insertString(oCursor, autorenBezeichnung, False)
'3. Identifier dieses Literatureintrages kürzen....
neueBezeichnung = Right( actualString, Len(actualString)-InStr(actualString, searchString) )
tF.Fields = makeChangedPropertyValue(oCols, "Identifier", neueBezeichnung)
End If
Loop
oDoc.getTextFields().refresh()
End If
End Sub
Function makeChangedPropertyValue(oCols as com.sun.star.beans.PropertyValue, nameString as String, valueString as String) as Object
Dim Prop(30) As new com.sun.star.beans.PropertyValue
For i=LBound(oCols()) To UBound(oCols())
oCol = oCols(i)
Prop(i).Name = oCol.Name
if oCol.Name = nameString then
Prop(i).Value = valueString
else
Prop(i).Value = oCol.Value
End if
Next i
Set makeChangedPropertyValue = Prop()
End Function
Code: Alles auswählen
oCursor.gotoRange( tF.getAnchor().getStart(), false )
Ich versuche jetzt schon seit 3 Stunden ohne Erfolg, eine Lösung zu finden. Hat hier vielleicht jemand eine Idee?
Vielen Dank schon im Vorraus!