Как изменить шрифт всех уравнений в LibreOffice Writer

4651
KovBal

Есть ли способ быстро изменить шрифт всех уравнений в документе? Может быть, есть встроенный стиль для них или что-то ...

Я не хочу устанавливать стиль по умолчанию для новых, но менять существующие.

3

3 ответа на вопрос

3
A.Marsan

Для LibreOffice мне пришлось внести некоторые изменения в макрос, чтобы получить автоматическое обновление формулы. Я взглянул на эту тему на форумах OpenOffice рядом с нынешней.

Вот макрос, который я использовал:

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 
Я обнаружил, что этот работает лучше, так как он «кликает» на объект и изменяет размеры объекта. Allen 10 лет назад 0
2
Brecht Machiels

Я не верю, что есть встроенный стиль для формул. Тем не менее, вы можете использовать макрос для всех формул и изменить стиль. Во французском FAQ по OpenOffice.org есть пример такого макроса:

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 
Это не работает, потому что после первой итерации он не может определить модель элемента. Я использую LibreOffice 3.4.4. KovBal 12 лет назад 0
В вашем документе должен быть особый вид объекта. Я добавил проверку, чтобы увидеть, есть ли у объекта свойство Model, в надежде, что это решит эту проблему. Brecht Machiels 12 лет назад 0
Эта версия работает, спасибо! KovBal 12 лет назад 0
1
Narcoleptic Snowman

Я попытался максимально упростить это и сделать так, чтобы он работал как можно быстрее (изменение состояния или «нажатие на него» было действительно очень медленным для меня), и я придумал это решение:

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 (i) .ExtendedControlOverEmbeddedObject.update (). Это говорит libreoffice об обновлении / перерисовке встроенного объекта внутри, поэтому нам не нужно «обманывать» его при обновлении.

Похоже, что нет необходимости обновлять и компонент, и модель, но я чувствую, что лучше быть тщательным.

Кстати, я использую LibreOffice v4.3.4.1 YMMV .