Kursive Autorennamen in Fußnoten (Writer)

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Kursive Autorennamen in Fußnoten (Writer)

Re: Kursive Autorennamen in Fußnoten (Writer)

von ckcool » So, 26.02.2012 04:40

Ok, nach langem Tüfteln (es ist 4 Uhr morgens) hier eine brauchbare Lösung:

Code: Alles auswählen

Sub Autoren_nachtraeglich_kursiv_setzen
    
    Dim oDoc As Object
    oDoc = ThisComponent
    Dim oCursor As Object
    searchString = ","
    Print "Sollen die Fußnoten abgeändert werden?"
    varEnum = oDoc.getTextFields().createEnumeration() 
    
    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
                
         		'Nur zur Infor, was gerade verarbeitet wird: MsgBox oCols(0).Value
         		actualString = oCols(0).Value  'Name = Identifier
         		
            	'1. Die Autorenbezeichnung extrahieren....
            	autorenBezeichnung = Left( actualString, InStr(actualString, searchString) )
            			
            	'2. Autorenbezeichnung davor einfügen....
            	oCursor = tF.getAnchor().getStart().getText().createTextCursorByRange( tF.getAnchor().getStart() )
            	oCursor.setPropertyValue("CharPosture", com.sun.star.awt.FontSlant.ITALIC)
            	
            	tF.getAnchor().getStart().getText().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

REM erstellt eine Kopie des übergebenen PropertyValue(29) und täuscht zugleich einen übergebenen Wert aus....
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

Kursive Autorennamen in Fußnoten (Writer)

von ckcool » Sa, 25.02.2012 20:48

Hallo allesamt,

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
Die Fehlermeldung ist eine NullPointerException an der Stelle:

Code: Alles auswählen

oCursor.gotoRange( tF.getAnchor().getStart(), false )
Anscheinend hat der Cursor hier Probleme, die korrekte Position in der Fußnote einzunehmen.

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!

Nach oben