Изменение шрифта в формулах Math - постфактум

Автор haart, 25 октября 2010, 20:15

0 Пользователи и 1 гость просматривают эту тему.

haart

Здравствуйте,

помогите плз, кто знает. Ситуация такая: есть документ, в нем - формулы. Много. Они набраны другим шрифтом (который стоял в дефолтных настройках - Liberation Serif). Текст документа - DejaVu Serif. Возможно ли поменять тип и размер шрифта в уже набранных формулах разом? Дефолтные настройки изменил, но оно сказало, что они будут применены только к НОВЫМ формулам, которые будут вводиться.

Что делать со старыми? Их реально очень много... )

Спасибо.

Рыбка Рио

Можно, запустите этот макрос:
REM  *****  BASIC  *****

Sub Main
Doc=ThisComponent
Nobj=Doc.DrawPage.Count-1
For i=0 to Nobj
Obj=Doc.DrawPage(0)
If Obj.supportsService("com.sun.star.text.TextEmbeddedObject") then
Obj1=Obj.getEmbeddedObject
Obj1.FontNameFunctions="DejaVu Serif"
Obj1.FontNameNumbers="DejaVu Serif"
Obj1.FontNameText="DejaVu Serif"
Obj1.FontNameVariables="DejaVu Serif"
Endif
Next
End Sub

(откройте Сервис/Макросы/Управление макросами/OOo Basic... (или Alt F11), вставьте этот макрос туда, а потом по Alt F11 запустите его из того же диалога, там есть кнопка "Выполнить")
ubuntu 12.04 + LibO3.6.0

Рыбка Рио

Хотя, наверное, лучше вот такой вариант:
REM  *****  BASIC  *****

Sub Main
Doc=ThisComponent
Nobj=Doc.DrawPage.Count-1
For i=0 to Nobj
Obj=Doc.DrawPage(0)
If Obj.supportsService("com.sun.star.text.TextEmbeddedObject") then
Obj1=Obj.getEmbeddedObject
If Obj1.supportsService("com.sun.star.formula.FormulaProperties") then
Obj1.FontNameFunctions="DejaVu Serif"
Obj1.FontNameNumbers="DejaVu Serif"
Obj1.FontNameText="DejaVu Serif"
Obj1.FontNameVariables="DejaVu Serif"
Endif
Endif
Next
End Sub
ubuntu 12.04 + LibO3.6.0

convas

Меняет только в одной формуле документа.

Рыбка Рио

Цитата: convas от 25 октября 2010, 21:17Меняет только в одной формуле документа.
Да, спасибо.
Там Obj=Doc.DrawPage(0) нужно заменить на Obj=Doc.DrawPage(i)
Итак, исправленный вариант:
REM  *****  BASIC  *****

Sub Main
Doc=ThisComponent
Nobj=Doc.DrawPage.Count-1
For i=0 to Nobj
Obj=Doc.DrawPage(i)
If Obj.supportsService("com.sun.star.text.TextEmbeddedObject") then
Obj1=Obj.getEmbeddedObject
If Obj1.supportsService("com.sun.star.formula.FormulaProperties") then
Obj1.FontNameFunctions="DejaVu Serif"
Obj1.FontNameNumbers="DejaVu Serif"
Obj1.FontNameText="DejaVu Serif"
Obj1.FontNameVariables="DejaVu Serif"
Endif
Endif
Next
End Sub
ubuntu 12.04 + LibO3.6.0

haart

Говорит, "Ошибка времени выполнения BASIC. Переменная типа Object не установлена".  :(

convas


haart

#7
В смысле, текст приложить, где надо шрифт в формулах менять? Или вновь созданную библиотеку? (Если ее, то где ее искать?) )

При выполнении, оно указывает на эту строчку, мол, ошибочную:
If Obj1.supportsService("com.sun.star.formula.FormulaProperties") then

И на эту:
Nobj=Doc.DrawPage.Count-1
ругается так: Свойство или метод не найдены: DrawPage

convas

В смысле - файл с формулами, которые надо поменять.
И куда вы записали макрос от Клио?

haart

Цитата: convas от 26 октября 2010, 16:32
куда вы записали макрос от Клио?

В "мои макросы". Макросы OOo не доступны для редактирования... ( Это - важно?

Вот файл.

[вложение удалено Администратором]

convas

Да, не работает.
Точнее, работает на части формул и сбивается из-за наличия других графических объектов.

Рыбка Рио

Вот так тогда должно работать:
REM  *****  BASIC  *****

Sub Main
Doc=ThisComponent
Nobj=Doc.DrawPage.Count-1
For i=0 to Nobj
Obj=Doc.DrawPage(i)
If Obj.supportsService("com.sun.star.text.TextEmbeddedObject") then
Obj1=Obj.getEmbeddedObject
If not IsNull(Obj1) then
If Obj1.supportsService("com.sun.star.formula.FormulaProperties") then
Obj1.FontNameFunctions="DejaVu Serif"
Obj1.FontNameNumbers="DejaVu Serif"
Obj1.FontNameText="DejaVu Serif"
Obj1.FontNameVariables="DejaVu Serif"
Endif
Endif
Endif
Next
End Sub
ubuntu 12.04 + LibO3.6.0

zeonchameleon

Спасибо большое за помощь!

Некоторое время назад я пользовался ваши макросом для массового форматирования формул. Вообще, если кому нужно, вот тут есть полный список всех свойств формул (не только шрифты), которые можно изменить: http://www.openoffice.org/api/docs/common/ref/com/sun/star/formula/FormulaProperties.html

Например, мне было полезно TopMargin, BottomMargin, LeftMargin и RightMargin - это отступы, которые также доступны через меню Формат - Интервалы - Обрамления. В макросе задается значение в процентах миллиметра (значение "100" = 1 мм).

zeonchameleon

Кто знает, помогите, пожалуйста.

Нужно написать похожий макрос, но только нужно изменить свойство для предыдущего по отношению к текущему положению маркера объекту формулы. То есть, имеем документ Writer с кучей формул Math. Все формулы имеют привязку "Как символ". Маркер установлен в произвольное место в документе (но ни один объект с формулой или иной OLE-объект не выделен, т. е. маркер где-то в тексте). Макрос должен найти и выделить ближайший предыдущий объект с формулой.

Спасибо.

rami

Цитата: zeonchameleon от 28 июня 2016, 16:06Нужно написать похожий макрос, но только нужно изменить свойство для предыдущего по отношению к текущему положению маркера объекту формулы. То есть, имеем документ Writer с кучей формул Math. Все формулы имеют привязку "Как символ". Маркер установлен в произвольное место в документе (но ни один объект с формулой или иной OLE-объект не выделен, т. е. маркер где-то в тексте). Макрос должен найти и выделить ближайший предыдущий объект с формулой.
Что такое "маркер" ? Вы так называете курсор? Или что-то другое?

Если ближайшую перед курсором формулу, то напрямую нельзя, но можно попытаться перебирать формулы пока не доберёмся до курсора.