Jump to content

Macros/Math/001/es

From The Document Foundation Wiki
This page is a translated version of the page Macros/Math/001 and the translation is 100% complete.


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.

Puede encontrar un enfoque alternativo en Ask LibreOffice > Ask121655.

Código

En Python o LibreOffice Basic:

# 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,
Option Explicit

Sub ChangeFormulasSizeAndFont()
    '''Cambiar el tamaño o el tipo de letra de todas las fórmulas matemáticas en el documento'''
    Dim element As Object ' com.sun.star.text.TextEmbeddedObject.Model
    Dim realElem As Object ' com.sun.star.text.TextEmbeddedObject.(get)EmbeddedObject
    
    For each element in ThisComponent.getEmbeddedObjects() 

        If (not isNull(element.Model)) Then
            With element.Model
            If .supportsService("com.sun.star.formula.FormulaProperties") Then
                ' Force the update
                realElem = element.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 element

    ThisComponent.reformat()

End Sub ' ChangeFormulasSizeAndFont

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