1

Тема: Создание формулы из текста

В общем, нужно автоматизировать и поставить горячую клавишу, чтобы текст (plain text) переводился в формулу и раза два переходил в «Профессиональный» вид.

Да, во вложении пошаговый пример, описывающий проблему.

Post's attachments

test.docx 15.75 Кб, 16 скачиваний с 2011-05-01 

You don't have the permssions to download the attachments of this post.

2

Re: Создание формулы из текста

Попробовал решить проблему, возникла другая...
В общем, включил панель «Разработчик», записал макрос, код получился таким:

Sub MyCreateEquationBlockFromSel()
    Selection.OMaths.Add Range:=Selection.Range
    Selection.OMaths.Linearize
    Selection.OMaths.BuildUp
    Selection.OMaths.BuildUp
End Sub

Но! внезапно автозамена не сработала (как так?!).
"\int" "\of" не были переведены в соответствующие символы Unicode.

3

Re: Создание формулы из текста

Нашёл коллекции (как я понял, это нечто похожее на ассоциативный массив или словарь) OMathAutoCorrect.Entries и ещё AutoCorrect.Entries. А вот дальше ступор.
Впервые на VBA пишу, непривычно.

Необходимо заменить все \int \of \sum и так далее на символы ∫, ▒, ∑ соответственно до перевода в формулу.  neutral

внешняя ссылка
внешняя ссылка
Также этот список автозамены красуется в «Параметры»→«Правописание»→«Параметры автозамены» на вкладке «Автозамена математическими символами».

4

Re: Создание формулы из текста

Первая ссылка ведёт на статью «Linear format equations and Math AutoCorrect in Word 2010» на office.microsoft.com, вторая на бумагу в формате pdf «Unicode Nearly Plain-Text Encoding of Mathematics»

5

Re: Создание формулы из текста

Sub MyCreateEquationBlockFromSel()
    Dim MyEntry, MyEntries, MyRange
    Set MyEntries = Application.OMathAutoCorrect.Entries
    Set MyRange = Selection.Range
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    For MyEntry = MyEntries.Count - 1 To 2 Step -1
    'For Each MyEntry In Application.OMathAutoCorrect.Entries
        If MyEntry <> 84 Then
            With Selection.Find
                .Text = MyEntries(MyEntry).Name
                .Replacement.Text = MyEntries(MyEntry).Value
            End With
            Selection.Find.Execute Replace:=wdReplaceAll
        End If
    Next MyEntry
    Selection.OMaths.Add Range:=MyRange
    Selection.OMaths.Linearize
    Selection.OMaths.BuildUp
End Sub

Промежуточная версия индус-кода. Работаетъ, блин.  lol

6

Re: Создание формулы из текста

файлы 2007 и 2010 г. смотреть не могу, есть в 2003 или скриншот, того, что переделываете

7

Re: Создание формулы из текста

Sub MyCreateEquationBlockFromSel()
    Selection.OMaths.Add Range:=Selection.Range
    Selection.OMaths.Linearize
    Selection.OMaths.BuildUp
    Application.ScreenUpdating = True
End Sub

Sub MyReplaceAll()
    Dim MyEntry As Integer, MyEntries, MyRange
    Set MyEntries = Application.OMathAutoCorrect.Entries
    Set MyRange = Selection.Range
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Application.ScreenUpdating = False
    For MyEntry = MyEntries.Count - 1 To 1 Step -1
    'For Each MyEntry In Application.OMathAutoCorrect.Entries
        If MyEntry <> 84 Then
            With Selection.Find
                .Text = MyEntries(MyEntry).Name
                .Replacement.Text = MyEntries(MyEntry).Value
            End With
            Selection.Find.Execute Replace:=wdReplaceAll
        End If
    Next MyEntry
End Sub

К сообщению добавил скриншот test.docx

Post's attachments

test.png 12 Кб, 1 скачиваний с 2011-05-02 

You don't have the permssions to download the attachments of this post.

8

Re: Создание формулы из текста

Теперь вся задача свелась к поиску команд типа "\<тут кучка букв><символ «небуква»>".
Допустим p1 = "\<тут кучка букв>", а p2 = "<символ «небуква»>".
То, как я понимаю, выражение

Application.OMathAutoCorrect.Entries(p1).Valuе

будет возвращать символ, на к-рый нужно изменить p1...
Вот, больше ничего не знаю. Не знаю, ни как выделить эти команды, ни заменить именно найденную, ни удалить символ p2, если тот пробел. sad

9

Re: Создание формулы из текста

Давайте попробуем, текст: Просто текст формулы выделите и одну строчку макроса пройдите
ф = Trim (Selection)
чему равно ф??

10

Re: Создание формулы из текста

Ничего не поменялось, вернул сам текст формулы:
"\int\of(x+1)dx/(x\sqrt(ln x+1))=\int\of d(ln x+1)/\sqrt(ln x+1)=2\sqrt(ln x+1)+c
"

11

Re: Создание формулы из текста

ступил
ф = Len(Trim (Selection))
чему равно ф??

12

Re: Создание формулы из текста

81

Кстати, я тут обнаружил, читая сайт этот, что регулярки в Word2010 оказываются встроены! Т.е. в поиске, включив заранее «Подстановочные знаки», можно ввести:
(\\[A-Za-z]{1;})(?)
И он будет как раз искать то, что мне нужно.

С каждым часом я приближаюсь к решению задачки, медленно, но верно. Эта тема чуть ли не личный дневник решения данной задачки.  tongue

13

Re: Создание формулы из текста

81 это хорошо!!
двигаемся дальше, я так понял \int\of это означает что надо заменить на вытянутую букву s??, напомните как знак называется
там строго будет так "\int\of"  или по небрежности пользователь может что то не написать но знающий поймёт??

14

Re: Создание формулы из текста

Вы ответьте, пока сегодня до завтра никак:
потому что у меня: Если редактор формул недоступен, его необходимо установить
Вставка формулы 
1.Укажите место для вставки формулы.
2.В меню Вставка выберите команду Объект, а затем откройте вкладку Создание.
3.В списке Тип объекта выберите Microsoft Equation 3.0.
Если редактор формул недоступен, его необходимо установить.
4.Нажмите кнопку OK.
5.Создайте формулу, выборирая символы на панели инструментов (Панель инструментов. Строка с кнопками и другими элементами управления, служащими для выполнения команд. Чтобы вызвать панель инструментов, нажмите клавишу ALT, а затем клавиши SHIFT+F10.) Формула и вводя переменные и числа с клавиатуры. Верхняя строка панели инструментов Формула содержит более 150 математических символов. Нижняя строка используется для выбора разнообразных шаблонов, предназначенных для построения дробей, интегралов, сумм и других сложных выражений.
Для получения справочных сведений выберите команду Вызов справки в меню Справка.

6.Чтобы вернуться в Microsoft Word, щелкните документ.

15

Re: Создание формулы из текста

\int -> ∫ (знак интеграла)
\of -> ▒ (знак n-арного оператора)

Кстати, обновил код, теперь уже заглядывает в коллекцию как надо:

Sub MyReplaceAll()
    Dim MyEntry As Integer, MyEntries, MyRange
    Set MyEntries = Application.OMathAutoCorrect.Entries
  
    With Selection.Find
        .ClearFormatting
        .Text = "\\[A-Za-z]{2;}"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Application.ScreenUpdating = False
    While Selection.Find.Execute = True
        Selection.Text = MyEntries(Selection.Text).Value
    Wend
    Application.ScreenUpdating = True
End Sub

16

Re: Создание формулы из текста

\of -> ▒ (знак n-арного оператора)
Не уловил как он выглядит???

17

Re: Создание формулы из текста

Собственно, прямоугольник в точечку - ▒. Это абстрактный символ, описанный тут - внешняя ссылка .

18

Re: Создание формулы из текста

знак интеграла не нашёл в Вставка > Символ, он там есть??

19

Re: Создание формулы из текста

Собственно, прямоугольник в точечку - ▒. - Качнул опять же до завтра, дома нет читателя ПДФ

20

Re: Создание формулы из текста

как у Вас успехи???, кое-что я научился делать

'Gamma - «Г», Code U+0393 - "0393" - Число_шестнадцатиричное
Selection.TypeText Text:=ChrW$(CLng("&H" & "0393"))
'Int - интеграл, в виде вытянутой «S», Code U+222B - "222B" - Число_шестнадцатиричное
Selection.TypeText Text:=ChrW$(CLng("&H" & "222B"))

21

Re: Создание формулы из текста

Я ограничил поиск (ищет только в пределах выделенного текста), также добавил проверку на содержание элемента в коллекции OMathAutoCorrectEntries с помощью конструкции "On Error GoTo <label>". Получился в итоге такой вот код:

Sub MyReplaceSelected()
    Dim MyEntries As OMathAutoCorrectEntries, MyString As String, _
        MyRange As Range
    Set MyEntries = Application.OMathAutoCorrect.Entries
    Set MyRange = Selection.Range
    Debug.Print MyRange.Start; MyRange.End
    On Error GoTo NotExists:
    Application.ScreenUpdating = False
    With Selection.Find
        .ClearFormatting
        .Text = "\\[A-Za-z]{2;}"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
        While .Execute And Selection.Range.End - 1 < MyRange.End
            MyString = MyEntries(Selection.Text).Value
            Selection.Text = MyString
NotExists:
        Wend
    End With
    Application.ScreenUpdating = True
End Sub

Уже более красивый код и более рабочий. :3

22

Re: Создание формулы из текста

Mr.Nobody пишет:

Я ограничил поиск (ищет только в пределах выделенного текста), также добавил проверку на содержание элемента в коллекции OMathAutoCorrectEntries с помощью конструкции "On Error GoTo <label>".

Чтобы его опробовать, что нужно написать?? чтобы потом можно было выделить и пробовать код??

23

Re: Создание формулы из текста

Над этим попробовать можно:

\int\of(x+1)dx/(x\sqrt(ln x+1))=\int\of d(ln x+1)/\sqrt(ln x+1)=2\sqrt(ln x+1)+c
(a+b)^n=\sum_(k=0)^n\of (n|k)a^k b^(n-k)

Работает, наверное, только с 2007го офиса.

24

Re: Создание формулы из текста

может и с 2007 г., а так выделяет: MyEntries As OMathAutoCorrectEntries
сообщение функция не определана, библиотека??? какая???

25

Re: Создание формулы из текста

Word 2007, 2010 only.

26

Re: Создание формулы из текста

по теме:
внешняя ссылка