Math Formatierung im gesamten Dokument ändern

Math-Formeln
Das Orininal des jetzigen Teildokuments habe ich mit den Standardwerten des Formelgenerators Math geschrieben. Für die jetzige Datei habe ich die Schriftart in Calibri Light und die Schriftgröße in 10 geändert.
In der Datei kommen etwa 200 Formeln vor. Es ist natürlich höchst lästig, wenn man jede einzelne Formel öffnen und die Änderungen vornehmen muss: Schriftart 7 Mal, Schriftgröße separat. Das dauert etliche Stunden. Zwar kann man angeben, dass dies von nun an STANDARD sein soll; aber das gilt nur für neue Formeln, nicht für die schon Existierenden.
Frage:
Gibt es eine Möglichkeit, diese neuen Einstellungen für alle im Dokument vorhandenen Formeln gleichzeitig vorzunehmen? Denn es existieren bereits ein halbes Dutzend Dateien mit hunderten Formeln, die alle noch umgemodelt werden sollen für den nächsten Kurs.

Info zu meinem Laptop:
Version: 7.4.5.1 (x64) / LibreOffice Community
Build ID: 9c0871452b3918c1019dde9bfac75448afc4b57f
CPU threads: 2; OS: Windows 10.0 Build 19044; UI render: Skia/Raster; VCL: win
Locale: de-DE (de_DE); UI: de-DE
Calc: CL

Ich habe einmal ein Dokument mit 3 Formeln entpackt. Für jede Formel wird in dem Dokument ein eigenes Unterverzeichnis mit jeweils einer settings.xml und einer content.xml erstellt. Da gibt es keine Zentrale Stelle, die die Vorgaben gemeinsam verwaltet - nur beim Erstellen einer Datei werden die Vorgaben ausgelesen.

Bei 200 Formeln überall die settings.xml auszutauschen kann ja auch nicht viel schneller gehen. Da müsste ein Makro her. Kann ich für andere Programmteile als Base nicht so locker aus dem Ärmel schütteln.

Vielen Dank für Deine Analyse. Vielleicht ist das ein erster Ansatz.
Vielleicht ist ein Makro die Lösung. Damit habe ich allerdings überhaupt keine Erfahrung.

Ich habe einmal ein bisschen probiert und das an meinem Beispiel mit 3 Formeln laufen lassen:

SUB FormelFormatieren
	oDoc = ThisComponent
	oEmbO = oDoc.EmbeddedObjects
	FOR i = 0 TO oEmbO.Count -1
		IF oEmbO.getByIndex(i).FrameStyleName = "Formula" THEN
			oModel = oEmbO.getByIndex(i).Model
			oModel.FontNameVariables = "DejaVu Sans Mono"   
			oModel.FontNameText = "Liberation Serif"   
			oModel.FontNameNumbers = "Liberation Serif"   
			oModel.FontNameFunctions = "Liberation Serif" 
			oModel.BaseFontHeight = 10
		END IF 
	NEXT i
END SUB

Die Schriftgröße ist der letzte Eintrag - entspricht Deinem Eintrag. Ansonsten ist gegenüber dem Original nur die Schriftart für Variablen geändert worden. Du müsstest hier wohl alle Einträge auf “Calibri Light” setzen.
Das Makro speichert Du unter “meine Makros und Dialoge” ab und testest es am besten an einer Kopie Deines bisherigen Textes. Das Textdocument muss geöffnet sein und dann über Extras → Makros → Makro ausführen das Makro gestartet werden. Wenn Du noch nie mit Makros gearbeitet hast, dann wird die Makrosicherheit zu hoch eingestellt sein: Extras → Optionen → LibreOffice → Sicherheit → Makrosicherheit. Dort kannst Du entweder die Makrosicherheit auf “Mittel” setzen - dann wird nachgefragt, ob Makros aktiviert werden sollen. Oder Du benennst im Reiter “Vertrauenswürdige Quellen” ein Verzeichnis auf Deinem Rechner, in dem Makros grundsätzlich ausgeführt werden können. Auf keinen Fall solltest Du die Sicherheit auf “Niedrig” stellen, weil dann grundsätzlich Makros ausgeführt werden und Makros auch auf die Konsole Deines Betriebssystems Zugriff haben können.

Lieber Robert,

erst einmal vielen Dank für Deinen Einsatz.

Ich kann das erst morgen ausprobieren, weil ich in wenigen Minuten weg muss, um mit meinen Tennisfreunden meinen Geburtstag nachzufeiern, der im Sommer gewesen ist. Rs gibt leckere Reibekuchen mit Lachs und Tatar.

Falls etwas nicht klappen sollte, melde ich mich morgen oder übermorgen.

Gruß HWL

Lieber Robert,
ich bin erst heute dazu gekommen, Dein Makro auszuführen.
Zuvor habe ich mich etwas mehr mit Makros vertraut gemacht und “Erste Schritte - Kapitel 13: Einführung in Makros” gelesen. Einige Anweisungen für LO6.2 stimmen in LO7.4 nicht mehr, so dass ich erst herausfinden musste, wie es richtig geht.
Aber die gute Nachricht: Das Makro funktioniert und hat die Werte in wenigen Sekunden im gesamten Dokument auf die geänderten Werte gesetzt.
Allerdings:
Davon ist in der Ansicht nichts zu sehen. Erst, wenn die Formel doppelt angeklickt wird, wird die geänderte Größe und Schrift wirksam. Auch Speichern und neues Öffnen macht die geänderte Einstellung nicht sichtbar. Es muss also jede einzelne Formel doppelt angeklickt und dann wieder verlassen werden. Das ist natürlich wesentlich einfacher, als dabei die beiden Format-Fenster aufzurufen und die Änderungen vorzunehmen. Aber irgendwie ist das nicht voll befriedigend: “Ein zufriedener Mensch kriegt den Hals nicht voll”.
Offenbar fehlt in dem Makro noch der Befehl zum Ausführen der Änderungen. Da ich in meinem Alter noch blutiger Lehrling in Sachen Makros bin, kann ich diesen Befehl noch nicht selber einfügen.
:arrow_forward: Kannst Du mir noch die fehlende Zeile schicken?
Thank you

Das ist merkwürdig. Funktioniert bei mir direkt einwandfrei. Da wird dann wohl wieder ein Unterschied zwischen der Linuxversion (hier OpenSUSE 15.3) und der Windows-Version bei Dir vorliegen. Probiere einmal Extras → Aktualisieren → Alles.

Nee, mein Lieber. Es weigert sich.

Manchmal hilft es ja auch, wenn man eine Datei druckt, so dass Formatierungen oder aktualisierte Daten übernommen werden. Aber auch das hilft nicht.

Erneut gespeichert, geschlossen und neu geöffnet: Es bleibt dabei: Nur die doppelt angeklickten Formel haben sich geändert, die anderen bleiben wie sie sind und ändern sich, wie vorgesehen, wenn sie doppelt angeklickt wurden.

Es kann sein, dass sich irgendwann das Format bei den Formeln etwas geändert hat. Wenn ich entsprechend Zeit habe werde ich ein Testdokument mit “alten” Formeln nehmen und daran probieren. Notfalls könnte ich den Prozess des Öffnens und wieder Schließens des Editors ja versuchen mit dem Makrorecorder auf zu zeichnen.
Probiere die Änderung doch einmal hier:
formeln.odt (17.2 KB)
Wenn das direkt klappt, dann muss sich am Formelformat im Laufe der Zeit etwas geändert haben.

Das klappt einwandfrei!
Ich habe Deine Datei formeln.odt herunter geladen. Ich habe die Schriftgröße zunächst von Hand auf 12 Pt gesetzt und bei der ersten Formeln den Bruch mit >size -2 { . . . }> kleiner gesetzt, wie das in meinen Dokumenten auch geschieht, damit ein laufender Text nicht so zerrissen wird.

Dann das Marko ausgeführt - und alles sieht so aus, wie es soll.

formeln-1.odt (20.8 KB)

Also sind es die alten Formeln. Muss ich sehen - das geht jetzt nicht ganz so schnell - irgendwann im Laufe des Abends.

Wegen “alter Formeln”: Die Datei Ganzrationale Funktionen wurde erstmals am 19.05.2021 angelegt.

Ist nicht eine Frage des Alters in Jahren sondern der Version. Ich habe jetzt mit LO 5.1.5 so ein Dokument erstellt und kann das Verhalten mit den dort erstellten Formeln nachvollziehen. Ich bin aber ansonsten damit noch nicht weiter …

Dann müsste ich für die Datei wohl LO7.1.2 wahrscheinlich sogar LO7.1.3 verwendet haben. Denn gerade bei der Erstellung neuer und derart komplexer Dokumente habe ich immer darauf geachtet, die jeweils neueste Vewrsion bzw. Unterversion zu verwenden.

Welche Version von MATH da am Start war, weiß ich nicht. Angeblich soll sich in diesem Programmteil ja seit Jahren nicht viel getan haben.

Nein, die älteren Versionen bringen Dir da nichts. Ich habe auch mit den älteren Versionen das gleiche Problem. Da ist irgendetwas bei den neuen Versionen, das das Aktualisieren vornimmt - bei den alten Versionen aber nicht.

Das Glück ist uns hold: Ich habe einmal genau nachgeschaut, was da alles mitspielt. Das, was Du da in dem Formularkästchen angezeigt bekommst ist ein Bildchen (Thumbnail). Und dieses Bildchen wird bei den alten Formeln nicht automatisch erneuert, wenn lediglich von außen der Font geändert wird.

oModel.BaseFontHeight = 10
oModel.saveThumbnail = False
END IF 

Mit dem zusätzlichen Eintrag oModel.saveThumbnail = False werden die Formeln neu gezeichnet dargestellt. Ich würde das einmal mit dem Eintrag False durchlaufen lassen und anschließend den Eintrag auf True zurücksetzen. Das Bildchen wird ja eigentlich deshalb angezeigt, weil dadurch nicht jedes Mal die Darstellung der Formel neu berechnet werden muss. So etwas wie refreshThumbnail habe ich nicht in den Methoden gefunden.

Hej, ich habe die Zeile
oModel.saveThumbnail = False
vor END IF eingefügt.
Das Makro bei den drei Seiten ausgeführt: keine Änderung in der Darstellung.
“False” durch “True” ersetzt und wieder Makro ausgeführt: keine Änderung.
Erst wenn die Formel zweimal angeklickt wird, wird die gewählte Darstellung durchgeführt.
Also ist doch etwas bei MATH geändert worden, was aber leider nicht dokumentiert ist.
Trotzdem: schönen Karnevalssonntag!

Du hast Recht. Das hat bei mir auch wohl nur als Nebeneffekt geklappt. Ich habe gleichzeitig alle möglichen Beobachter dabei laufen gehabt …

Kann man denn nicht den Doppelklick und das anschließende Schließen simulieren.
Vielleicht, indem man zuerst den Font ändert mit dem vorhandenen Makro und anschließend jede Formel aufruft und wieder schließt. Wäre das eine Möglichkeit?

Das mit dem Öffnen des Formularfensters habe ich auch versucht …

oModel.BaseFontHeight = 10
oEmbO.getByIndex(i).ExtendedControlOverEmbeddedObject.update()
END IF

Teste das einmal. Das hat bei mir ohne anderen Einfluss zum Erfolg geführt. Das mit dem Thumbnails kannst Du also ruhig auf True stehen lassen.

Mensch, Junge, ideal! Bei 3-Seiten-Dokument und 19-Seiten Original-Dokument ausprobiert:
Klappt auf Anhieb einwandfrei. Vielen, vielen Danke. Das lässt mich mit viel mehr Zuversicht an mein Projekt herangehen.
Ich hoffe, ich habe Dir nicht das ganz Wochenende verdorben. Man will es ja einfach wissen …