1

Тема: Оформление формул согласно ГОСТу в MS Word 2007

Доброго времени суток!
Пишу диплом. Согласно ГОСТу необходимо нумировать все формулы. Я написал макрос (спасибо вашему сайту, за кучу полезной информации). Однако возникла проблема...
В MS Word 2007 формулы делятся на встроенные и отображаемые. Использование встроенных формул приводит к уменьшению шрифта в дробях и прочим нежелательным эффектам. Использую отображаемые. Однако если написать что-либо на строке, в которой расположена формула, она автоматически преобразуется к встроенному виду. Как решить данную проблему?

С текстом после формулы можно поступить следующим образом: сразу после формулы вставлять разделитель стилей (InsertStyleSeparator). А как быть с текстом перед формулой (там символ табуляции)?

Была мысль вставлять нумирацию в надпись. Но на мой взгляд не самое лучшее решение.. Да и не знаю как это грамотно реализовать smile

Можно конечно MathType пользоваться.. Но неужели нельзя оформить формулы средствами MS Word?

Вобщем жду вашей помощи.. Заранее большое спасибо!

2

Re: Оформление формул согласно ГОСТу в MS Word 2007

Попробуйте использовать шаблон, вчера предложенный пользователем andrkar
Нумерация с помощью разделителя стилей удобна, когда формулы набираются в MathType или MS Equation, а вот с новой версией формул этот метод работает неправильно, если в формуле более одной строки

Лучше день потерять — потом за пять минут долететь!

3

Re: Оформление формул согласно ГОСТу в MS Word 2007

Спасибо, за столь скорый ответ!
Скачал этот шаблон, но при попытке пронумировать формулу, появляется ошибка "Метод или свойство недоступны, поскольку ее нельзя вызвать из математической области"..

На сколько я понял, суть в том, что создается невидимая таблица с одной строкой и двумя столбцами. В первой ячейке формула, во второй - номер.
Попробую сам реализовать smile Тем более с нумирацией картинок и таблиц у меня и так все в порядке.

4

Re: Оформление формул согласно ГОСТу в MS Word 2007

Сразу вопрос)
Если выравнивать формулу по центру первой ячейки, то она окажется не в центре страницы.. Как можно исправить? Пока одна мысль - добавить еще один столбец такой же ширины, что и столбец с номером...

И еще... Как можно определить ширину текста, зная сам текст и стиль? Или это невозможно? Хотелось бы чтоб ячейка с номером занимала как можно меньше места...

Ну и последний вопрос.. Запятую и единицы измерения, которые должны быть вплотную к формуле, как записывать? Непосредственно в формулу?

Отредактировано superklug (16.05.2010 18:24:23)

5

Re: Оформление формул согласно ГОСТу в MS Word 2007

superklug пишет:

Сразу вопрос)
Если выравнивать формулу по центру первой ячейки, то она окажется не в центре страницы.. Как можно исправить? Пока одна мысль - добавить еще один столбец такой же ширины, что и столбец с номером...

Интересный вариант! А если формула очень сильно широкая и не вместится в уменьшенный средний столбец? Но это редкость, как я понимаю...

superklug пишет:

Сразу вопрос)
И еще... Как можно определить ширину текста, зная сам текст и стиль? Или это невозможно? Хотелось бы чтоб ячейка с номером занимала как можно меньше места...?

Мне это тоже интересно.. Думал об этом, но времени не было разобраться sad

6

Re: Оформление формул согласно ГОСТу в MS Word 2007

superklug - попробуйте обновленный вариант шаблона, там немного переделано было как раз касаемо нумерации формул.. Может не будет выдавать ошибку? Хотя сразу скажу, пишу под Word 2003.

7

Re: Оформление формул согласно ГОСТу в MS Word 2007

andrkar, спасибо за ваш шаблон! Очень помог при написании макроса..
Ошибка возникает потому, что формула имеет отображаемое представление. Соответственно чтобы ошибки не было, принудительно преобразуем ее к встроенному виду, а после вставки в таблицу обратно к отображаемому.

В Word 2007 формулы реализованы иначе... Можно добавить в ваш шаблон определение версии Word и менять свое поведение, в зависимости от версии)

По поводу запятой.. Добавляю ее после разделителя стилей. Когда формула занимает несколько строк, запятая находится на последней строке. Выглядит вполне естественно)

Выложу код своего макроса. Может кому пригодится...

Sub NumberEquation()
    Application.ScreenUpdating = False
    
    With Selection
    
        .Paragraphs(1).Range.Select
        
        .OMaths(1).Type = wdOMathInline
      
        .ConvertToTable Separator:=wdSeparateByParagraphs, _
        NumColumns:=2, NumRows:=1, AutoFitBehavior:=wdAutoFitWindow
        
        With .Tables(1)
            .LeftPadding = CentimetersToPoints(0)
            .RightPadding = CentimetersToPoints(0)
            .Spacing = 0
            .Columns.Add .Columns(1)
            .AllowAutoFit = False
            .PreferredWidthType = wdPreferredWidthPercent
            .PreferredWidth = 100
            
            .Columns(1).PreferredWidthType = wdPreferredWidthPoints
            .Columns(1).PreferredWidth = CentimetersToPoints(0.8)
                     
            .Columns(3).PreferredWidthType = wdPreferredWidthPoints
            .Columns(3).PreferredWidth = CentimetersToPoints(0.8)
            .Cell(1, 3).VerticalAlignment = wdCellAlignVerticalCenter
            .Cell(1, 3).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
        End With
    
        .Tables(1).Cell(1, 2).Select
        .EndKey wdLine
        .Font.Italic = False
        .InsertParagraphAfter
        .InsertStyleSeparator
        .TypeText ","
        
        .Tables(1).Cell(1, 2).Range.OMaths(1).Type = wdOMathDisplay
        
        .Tables(1).Cell(1, 3).Select
        .Font.Italic = False
        .TypeText "("
        .InsertParagraphAfter
        .InsertStyleSeparator
        .Font.Hidden = False
        .Fields.Add .Range, wdFieldStyleRef, "1 \s", False
        .TypeText "."
        .Fields.Add .Range, wdFieldSequence, "Формула \s 1", False
        .InsertParagraphAfter
        .InsertStyleSeparator
        .Font.Hidden = False
        .TypeText ")"
    End With
    
    Application.ScreenUpdating = True
  
End Sub

Может местами коряво, но для меня главное, чтоб работал smile

Буду рад вашим замечаниям по поводу макроса.

8

Re: Оформление формул согласно ГОСТу в MS Word 2007

1) Если текста выделенного стилем "Заголовок 1" нет, то в нумерации получается ошибка. Данную проверку можете взять из моего макроса
2) Без разделителей стилей тоже все работает...
3) Если вставлять название формулы в абзац сразу за предыдущим название - выдается ошибка - решение тоже уже есть в моем макросе - последняя версия в последнем сообщении в теме

9

Re: Оформление формул согласно ГОСТу в MS Word 2007

andrkar пишет:

1) Если текста выделенного стилем "Заголовок 1" нет, то в нумерации получается ошибка. Данную проверку можете взять из моего макроса

Хм.. Может это в 2003 так? У меня в 2007 вроде все работает с любым стилем

andrkar пишет:

2) Без разделителей стилей тоже все работает...

В 2003 да) Но в 2007, если написать секст за формулой, она преобразуется во встроенный вид. Мне важно чтобы она была отображаемой. Собственно из-за этого все и началось...
В Word 2003 формулы можно без таблиц оформлять - с помощью табуляции.

andrkar пишет:

3) Если вставлять название формулы в абзац сразу за предыдущим название - выдается ошибка - решение тоже уже есть в моем макросе - последняя версия в последнем сообщении в теме

А вот это не понял... Какое название формулы? У меня только номер, который записывается в крайнюю правую ячейку.

10

Re: Оформление формул согласно ГОСТу в MS Word 2007

Объясню так. поставьте курсор в строку сразу за таблицей с формулой. И запустите макрос еще раз..

11

Re: Оформление формул согласно ГОСТу в MS Word 2007

andrkar пишет:

Объясню так. поставьте курсор в строку сразу за таблицей с формулой. И запустите макрос еще раз..

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

Еще иногда появляется ошибка в случае, если в формуле присутствует текст. Решение:
Вот тут:

.ConvertToTable Separator:=wdSeparateByParagraphs, _
        NumColumns:=2, NumRows:=1, AutoFitBehavior:=wdAutoFitWindow

создаем один столбец вместо 2-х.
А затем добавляем столбец вот так:

.Columns.Add

12

Re: Оформление формул согласно ГОСТу в MS Word 2007

В шаблоне проверка в том месте, где курсор то вверх, то вниз двигается макросом.. smile

13

Re: Оформление формул согласно ГОСТу в MS Word 2007

Долго найти не мог... Оказалось не последнюю версию скачал)) Надо бы в первом посте тоже обновить.

Есть пара вопросов..
Application.ScreenUpdating убрали потому-что никакого эффекта нет от них? Мне казалось как-то меньше мерцает все при выполнении макроса... Вобщем почему их убрали? smile

Можно ли сделать так, чтобы выполнение макроса было для Word-а неделимым действием. То есть чтобы по нажатию Ctrl+Z отменились последствия его работы. А то приходится по 10 раз нажимать)

14

Re: Оформление формул согласно ГОСТу в MS Word 2007

superklug пишет:

Можно ли сделать так, чтобы выполнение макроса было для Word-а неделимым действием. То есть чтобы по нажатию Ctrl+Z отменились последствия его работы. А то приходится по 10 раз нажимать)

Если это и можно, то я не знаю как. Но скорее всего - нельзя. Ведь для ворда отдельное действие - это отдельное действие.. А в макросе этих действий много. Можно просто посчитать сколько было действий и написать макрос, в котором  Ctrl+Z будет нажато посчитанное число раз..

15

Re: Оформление формул согласно ГОСТу в MS Word 2007

superklug пишет:

andrkar, спасибо за ваш шаблон! Очень помог при написании макроса..
Ошибка возникает потому, что формула имеет отображаемое представление. Соответственно чтобы ошибки не было, принудительно преобразуем ее к встроенному виду, а после вставки в таблицу обратно к отображаемому.

В Word 2007 формулы реализованы иначе... Можно добавить в ваш шаблон определение версии Word и менять свое поведение, в зависимости от версии)

По поводу запятой.. Добавляю ее после разделителя стилей. Когда формула занимает несколько строк, запятая находится на последней строке. Выглядит вполне естественно)

Выложу код своего макроса. Может кому пригодится...

Sub NumberEquation()
    Application.ScreenUpdating = False
    
    With Selection
    
        .Paragraphs(1).Range.Select
        
        .OMaths(1).Type = wdOMathInline
      
        .ConvertToTable Separator:=wdSeparateByParagraphs, _
        NumColumns:=2, NumRows:=1, AutoFitBehavior:=wdAutoFitWindow
        
        With .Tables(1)
            .LeftPadding = CentimetersToPoints(0)
            .RightPadding = CentimetersToPoints(0)
            .Spacing = 0
            .Columns.Add .Columns(1)
            .AllowAutoFit = False
            .PreferredWidthType = wdPreferredWidthPercent
            .PreferredWidth = 100
            
            .Columns(1).PreferredWidthType = wdPreferredWidthPoints
            .Columns(1).PreferredWidth = CentimetersToPoints(0.8)
                     
            .Columns(3).PreferredWidthType = wdPreferredWidthPoints
            .Columns(3).PreferredWidth = CentimetersToPoints(0.8)
            .Cell(1, 3).VerticalAlignment = wdCellAlignVerticalCenter
            .Cell(1, 3).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
        End With
    
        .Tables(1).Cell(1, 2).Select
        .EndKey wdLine
        .Font.Italic = False
        .InsertParagraphAfter
        .InsertStyleSeparator
        .TypeText ","
        
        .Tables(1).Cell(1, 2).Range.OMaths(1).Type = wdOMathDisplay
        
        .Tables(1).Cell(1, 3).Select
        .Font.Italic = False
        .TypeText "("
        .InsertParagraphAfter
        .InsertStyleSeparator
        .Font.Hidden = False
        .Fields.Add .Range, wdFieldStyleRef, "1 \s", False
        .TypeText "."
        .Fields.Add .Range, wdFieldSequence, "Формула \s 1", False
        .InsertParagraphAfter
        .InsertStyleSeparator
        .Font.Hidden = False
        .TypeText ")"
    End With
    
    Application.ScreenUpdating = True
  
End Sub

Может местами коряво, но для меня главное, чтоб работал smile

Буду рад вашим замечаниям по поводу макроса.

А у меня ошибка... Ошибка! В документе отсутствует текст указанного стиля.
Оформление формул согласно ГОСТу в MS Word 2007

Отредактировано denys281 (23.01.2011 16:24:22)