Есть ли способ быстро изменить шрифт всех уравнений в документе? Может быть, есть встроенный стиль для них или что-то ...
Я не хочу устанавливать стиль по умолчанию для новых, но менять существующие.
Есть ли способ быстро изменить шрифт всех уравнений в документе? Может быть, есть встроенный стиль для них или что-то ...
Я не хочу устанавливать стиль по умолчанию для новых, но менять существующие.
Для 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
Я не верю, что есть встроенный стиль для формул. Тем не менее, вы можете использовать макрос для всех формул и изменить стиль. Во французском 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
Я попытался максимально упростить это и сделать так, чтобы он работал как можно быстрее (изменение состояния или "нажатие на него" было действительно очень медленным для меня), и я придумал это решение:
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
Секретный соус здесь - о (я).ExtendedControlOverEmbeddedObject.update (). Это говорит libreoffice об обновлении / перерисовке встроенного объекта внутри, поэтому нам не нужно "обманывать" его при обновлении.
Похоже, что нет необходимости обновлять и компонент, и модель, но я чувствую, что лучше быть тщательным.
Кстати, я использую LibreOffice v4.3.4.1 YMMV.