Macros/Math/001/es

    From The Document Foundation Wiki
    < Macros‎ | Math
    This page is a translated version of the page Macros/Math/001 and the translation is 93% complete.
    Outdated translations are marked like this.


    Other languages:

    Descripción

    Cuando desee modificar un atributo en todas las fórmulas que vaya a escribir, simplemente siga el procedimiento descrito en Faq/Math/008. Si desea cambiar los atributos de todas las fórmulas "después de haberlas escrito, debe volver a abrir las fórmulas una a una y realizar las modificaciones. Si el documento contiene muchas fórmulas, esto puede volverse muy tedioso.

    Este script selecciona objetos de fórmula incrustados.[1] en el documento, y actualiza las propiedades de las fórmulas[2]. Esta macro resuelve el problema referenciado en: i#5092.

    Código

    en LibreOffice Basic:

    Option Explicit
    
    Sub ChangeFormulasSizeAndFont()
        '''Cambiar el tamaño o el tipo de letra de todas las fórmulas matemáticas en el documento'''
        Dim embeddedObjects As Object ' com.sun.star.text.TextEmbeddedObjects
        Dim elementNames() As String ' Name array
        Dim element As Object ' com.sun.star.text.TextEmbeddedObject.Model
        Dim realElem As Object ' com.sun.star.text.TextEmbeddedObject.(get)EmbeddedObject
    
        embeddedObjects = ThisComponent.getEmbeddedObjects() ' com.sun.star.text.TextEmbeddedObjects
        elementNames = embeddedObjects.getElementNames() ' name array
    
        For i = 0 To UBound(elementNames)
    
            element = embeddedObjects.getByName(elementNames(i)).Model
            If (not isNull(element)) Then
                With element ' com.sun.star.text.TextEmbeddedObject.Model
                If .supportsService("com.sun.star.formula.FormulaProperties") Then
                    'Forzar la actualización
                    realElem = embeddedObjects.getByName(elementNames(i)).EmbeddedObject
                    realElem.updateMode = com.sun.star.embed.EmbedUpdateModes.ALWAYS_UPDATE
                    .BaseFontHeight = 14
                    .FontNameVariables = "Arial"
                    .FontNameFunctions = "Arial"
                    .FontNameNumbers = "Arial"
                    .FontNameText = "Arial"
                End If
                End With ' element As com.sun.star.formula.FormulaProperties
           End If
    
         Next i
     
        ThisComponent.reformat()
    
    End Sub ' ChangeFormulasSizeAndFont

    en Pythonː

    # coding: utf-8
    from __future__ import unicode_literals
    
    import uno
    # from com.sun.star.document import OfficeDocument
    
    FRAME_DESKTOP = 'com.sun.star.frame.Desktop'
    FORMULA_PROPERTIES = 'com.sun.star.formula.FormulaProperties'
    
    class UIFormulaCollection():
        """ Colección de fórmulas del documento en uso """
        def __init__(self):
            """ incluir el documento en la interfaz de usuario de forma predeterminada """
            # ctx = uno.getComponentContext()  # GetDefaultContext
            # smgr = ctx.getServiceManager()  # GetProcessServiceManager
            # desktop =  smgr.createInstanceWithContext(FRAME_DESKTOP, ctx)  # StarDesktop
            # self.doc = desktop.CurrentComponent  # ThisComponent
            self.doc = XSCRIPTCONTEXT.getDocument()
            self.objects = self.doc.EmbeddedObjects
            self.names = self.objects.getElementNames()
        def reformat(self, fontHeight=None, font=None):
            """ agregue tantas propiedades como desee """
            for name in self.names:
                element = self.objects.getByName(name).Model
                if element.supportsService(FORMULA_PROPERTIES):
                    if font:
                        element.FontNameFunctions = font
                        element.FontNameText = font
                        element.FontNameNumbers = font
                        element.FontNameVariables = font
                    if fontHeight:
                        element.BaseFontHeight = fontHeight
                self.doc.reformat()
    
    
    def reformatAllFormulas():
        ui = UIFormulaCollection()
        ui.reformat(font="Arial", fontHeight=14)
    
    g_exportedScripts = reformatAllFormulas,


    Documentos ODT para probar la macro

    Aunque no es su cometido, puede descargar cualquier capítulo de la Guía de Math de LibreOffice porque ya contienen fórmulas y experimentar con las macros.

    Notas:

    1. Vea la documentación de la API referente a los servicios com.sun.star.text.TextEmbeddedObjects y com.sun.star.text.TextEmbeddedObject
    2. Vea la documentación de la API relativa al servicio com.sun.star.formula.FormulaProperties