Como alterar a fonte de todas as equações no LibreOffice Writer

3

Existe uma maneira de alterar rapidamente a fonte de todas as equações em um documento? Talvez haja um estilo embutido para eles ou algo assim ...

Eu não quero definir um estilo padrão para novos, mas para alterar o existente.

    
por KovBal 29.05.2011 / 16:13

3 respostas

2

Eu não acredito que exista um estilo interno para as fórmulas. No entanto, você pode ter uma macro para iterar todas as fórmulas e alterar o estilo. A FAQ do OpenOffice.org em francês tem um exemplo de uma macro:

Sub Main
    embeddedObjects = ThisComponent.getEmbeddedObjects()
    elementNames = embeddedObjects.getElementNames()
    for i=0 to UBOUND(elementNames)
        element = embeddedObjects.getByName(elementNames(i)).Model
        if (not isNull(element)) then
            if (element.supportsService("com.sun.star.formula.FormulaProperties")) then
                element.BaseFontHeight = 14
                element.FontNameVariables= "Arial"
                element.FontNameFunctions = "Arial"     
                element.FontNameNumbers= "Arial"        
                element.FontNameText= "Arial"       
            endif
        endif
    next i
    ThisComponent.reformat()
End Sub
    
por 08.12.2011 / 15:16
3

Para o LibreOffice, eu tive que fazer algumas alterações na macro para obter uma atualização automática da fórmula. Analisei este tópico nos fóruns do OpenOffice ao lado do presente um.

Aqui está a macro que usei:

REM  *****  BASIC  *****
Sub ReformatFormules
    embeddedObjects = ThisComponent.getEmbeddedObjects()
    elementNames = embeddedObjects.getElementNames()
    for i=0 to UBOUND(elementNames)
        element = embeddedObjects.getByName(elementNames(i)).Model
        oXEO = embeddedObjects.getByName(elementNames(i)).ExtendedControlOverEmbeddedObject
        iCurrentState = oXEO.currentState
        oXEO.changeState(com.sun.star.embed.EmbedStates.UI_ACTIVE)
        if (not isNull(element)) then
            if (element.supportsService("com.sun.star.formula.FormulaProperties")) then
                element.BaseFontHeight = 10
                element.FontNameVariables= "Times New Roman"
                element.FontVariablesIsItalic=1
                element.FontNameFunctions = "Times New Roman"     
                element.FontNameNumbers= "Times New Roman"        
                element.FontNameText= "Times New Roman"       
            endif
        endif
    next i
End Sub
    
por 21.10.2012 / 21:18
1

Eu tentei simplificar isso o máximo possível e fazê-lo rodar o mais rápido possível (mudar o estado ou "clicar nele" foi realmente muito lento para mim), e eu criei essa solução:

Sub FormulaFontSizeChanger
    f = InputBox("New font size:", "BaseFontHeight", 9)
    o = ThisComponent.getEmbeddedObjects()
    For i = 0 to o.count-1
        if (not IsNull(o(i))) and (not IsNull(o(i).Model)) then
            o(i).Model.BaseFontHeight = f
            o(i).Component.BaseFontHeight = f
            o(i).ExtendedControlOverEmbeddedObject.update()
        endif
    Next i
End Sub

O molho secreto aqui é o (i) .ExtendedControlOverEmbeddedObject.update (). Isso diz ao libreoffice para atualizar / redesenhar o objeto incorporado internamente, para que não tenhamos que "enganá-lo" para atualizar.

Parece que provavelmente não é necessário atualizar o componente e o modelo, mas acho melhor ser completo.

Btw, estou usando o LibreOffice v4.3.4.1 YMMV .

    
por 19.12.2014 / 05:05