LXF121:OOMatch

Материал из Linuxformat.

Перейти к: навигация, поиск
'OpenOffice.org' Используем открытый офисный пакет для верстки математических текстов

Содержание

OOo: Вам Math, коллега!

Настоящие ученые используют LaTeX, но если вы не в восторге от его синтаксиса, то будете рады узнать, что в OpenOffice.org можно делать почти то же самое. Дмитрий Смирнов расскажет, как именно.

На этом уроке мы займемся, пожалуй, самым малоосвещенным в широкой прессе компонентом OpenOffice.org – программой для набора математических формул OpenOffice.org Math. Она не является насущной необходимостью для всех и каждого; ее пользователи – люди, имеющие дело с документами, где применяются математические формулы и выражения: студенты, профессора, технические специалисты, инженеры.

OOo Math (или просто Math) может работать как отдельное приложение, но на практике его используют для вставки формул во внешние документы. В этой статье мы рассмотрим ввод формул, а также затронем вопросы их вставки в OOo Writer.

Мама, что это?

Главное окно OpenOffice.org Math ничего особенного собой не представляет

Именно такой реакции следует ожидать от человека, знакомого с Microsoft Office и впервые решившего вставить формулу Math в текстовый документ Writer. И действительно: вместо привычного ввода символов непосредственно в конкретное место документа создается какая-то рамочка, а внизу появляется еще какое-то поле ввода. Пользователь инстинктивно нажимает на кнопки с шаблонами формул, но вместо привычного появления символов видит какие-то квадратики, да еще и в нижнем поле ввода печатаются какие-то непонятные буковки. И что с этим делать?

А ларчик открывается просто: Math использует командный ввод формул, то есть пользователь набирает их с клавиатуры, как в языке программирования. Привычное щелканье мышью по панели Выбор всего лишь вставляет шаблон желаемой формулы в поле ввода. Так что пользователю MSO, привыкшему к Equation и MathType, придется учиться заново, так же как и новичку. Пользователям LaTeX будет проще.

Когда необходимость обучения «с нуля» становится ясна (а это происходит почти сразу после попытки набрать первую формулу), в голову приходят мысли: «А зачем это надо?» и «Почему не сделали как в Word?» Пользователя можно понять: на обучение надо тратить силы и время. Однако в данном случае эти затраты могут с лихвой окупиться в будущем. За счет чего? По сравнению с «обычным» методом, используемым в Equation, командный имеет одно важное преимущество: по окончании обучения можно будет вводить формулы, практически не используя мышь, с помощью одной клавиатуры! Представьте себе, что вам больше не понадобится постоянно отвлекаться на панель символов, дабы ввести греческую букву или особенный знак. Так что, может быть, стоит потратить немного времени сейчас, чтобы экономить его потом?

Уговорил? Ну тогда поехали!

С чего начать?

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

В процессе освоения редактора формул можно запускать Math как отдельное приложение, однако набирать в нем текстовые документы не рекомендуется. В большинстве случаев Math используется для создания и редактирования математических выражений во внешний программах (преимущественно OOo Writer, с которым имеется тесная связь). Впрочем, используя Math автономно, вы сможете сохранять набираемые формулы, создавая тем самым их личную библиотеку.

Существуют два подхода ко вводу формул: с помощью шаблонов команд (кода) и вручную. Как правило, первый используется при ознакомлении с Math, а также при поиске команд, вид которых неизвестен. После обучения пользователь чаще всего переходит на ручной ввод команд, поскольку это позволяет работать, не отвлекаясь на панели инструментов и меню. Шаблоны команд можно получить, щелкнув на нужную кнопку в панели инструментов Выбор или из контекстного меню поля ввода команд. Чтобы отобразить или скрыть панель Выбор, найдите в главном меню Math пункт Вид > Выбор; чтобы отобразить контекстное меню поля ввода команд, щелкните по полю правой кнопкой мыши.

Таким образом, оба подхода образуют три способа ввода формул:

  1. с помощью панели инструментов Выбор (или, что то же самое, окна Выбор);
  2. с помощью контекстного меню поля ввода команд;
  3. вручную.

Контекстное меню поля ввода команд. Панель Выбор: отсюда можно вводить шаблоны команд.

Рассмотрим использование всех трех способов на простых примерах. Допустим, надо ввести выражение «a плюс b». Последовательность действий:

  1. В верхней половине окна Выбор щелкаем на кнопке Унарные/бинарные операторы, а в нижней половине – на кнопке Сложение +. В поле ввода команд появляется текст <?> + <?>. Заменяем первый набор символов <?> на a, а второй – на b.
  2. Из контекстного меню поля ввода команд выбираем Унарные/бинарные операторы – a + b. Как и в предыдущем случае, в поле ввода команд появляется текст <?> + <?>. Аналогично заменяем первый <?> на a, а второй – на b.
  3. Печатаем a+b в поле ввода команд.

Заметим, что пробелы, окаймляющие с двух сторон знак +, необязательны.

Вы скажете, что про знак «плюс» можно было бы и догадаться. А как поступить в случае, когда ответ не столь интуитивен – например, «а умножить на b»? Ведь ни точки по центру строки, ни крестика на клавиатуре нет, звездочкой принято обозначать свертку, а буква x – неадекватная замена крестику. В таком случае, мы ищем подходящий внешний вид формулы в панели Выбор. После нажатия на соответствующие кнопки, в поле ввода команд появятся шаблоны <?> cdot <?> для точки и <?> times <?> для крестика. Как и в ранее описанном случае, <?> надо заменить на нужные символы.

После ряда подобных действий вы станете все реже обращаться к окну Выбор – ведь это увеличивает время ввода формулы – и будете чаще набирать формулы «от руки» в поле ввода команд.

Вербальная логика

Когда человек сталкивается с чем-то новым, он часто ищет аналогии; случай с Math – не исключение. Так на что похож редактор формул Math? Пользователь Linux скажет – на командную строку, программист – на язык программирования, лингвист – на измененный английский язык с другим применением, наборщик – на комбинацию цифр и букв. И все они правы. Но важно то, что у метода набора формул в Math есть логика.

Когда я изучал программирование, то встречал фразы вроде «сравните … с английским языком». Давайте посмотрим, насколько Math может быть сравним с тем же английским? А поскольку английский язык является для нас иностранным, то будем проводить аналогии и с русским языком.

Представим себе такую ситуацию: вы хотите набрать формулу с помощью слов. Вы диктуете некоторый текст – а он превращается в формулу. Важное замечание: надо проговаривать этот текст подробно. Например, если учитель математики говорит: «Запишите функцию: эф от икс равно икс-квадрат плюс два икс плюс один», то вы, записывая ее к себе в тетрадь, мыслите примерно так: «Эф, открывающая круглая скобка, икс, закрывающая круглая скобка, равно, икс, степень – два, плюс два икс плюс один». При этом вы пишете нужные символы один за другим, особо не задумываясь. Возможно, вы думаете иначе, например: «Эф, парные скобки, внутри икс...» Это – с лингвистической точки зрения.

Команды Math можно вводить похожим образом, как бы переводя их с русского языка на язык разметки Math. Если рассмотреть указанный выше пример, то перевод можно осуществить по такой логике:

эф – f

открывающая круглая скобка – (

икс – x

закрывающая круглая скобка – )

равно – =

степень – ^

плюс – +

Соединив эти команды воедино, получим f(x)=x^2+2 x+3: f(x) = x2 + 2x + 3

Пробел перед x нужен в силу особенностей языка разметки, но во многих случаях вы вольны расставлять пробелы по собственному желанию. Можно записать, например, так: f(x) = x^2 + 2 x + 3, f(x) = x^2+2 x+3 и так далее.

Поговорим теперь о перестановке слов в языке или о перестановке слов в мыслях. Когда вы записываете дробь, вы можете думать: «Числитель, горизонтальная черта, знаменатель» или «Горизонтальная черта, вверху – числитель, внизу – знаменатель». В Math можно реализовать оба подхода. Рассмотрим простой пример:

\frac{1}{2}

Первая логика: «Один, горизонтальная черта, два». Или «Единица над двойкой».

«Перевод» первой логики: один – 1, горизонтальная черта – over, два – 2. Вместе: 1 over 2. Вводятся все символы этой строки команды подряд.

Вторая логика: «Горизонтальная черта, сверху – 1, снизу – 2».

«Перевод»: 1 over 2. Да, в этом случае итоговая строка команды одна и та же. Но прелесть в том, что можно сначала написать over, затем написать слева от over единичку, а справа – двойку, или наоборот. Нет жестких правил порядка ввода команд, важен лишь их итоговый порядок!

Чем это удобно? Если я ввожу длинное выражение в скобках, то мне удобно сначала поставить обе скобки, а затем – вставить нужное выражение между ними. Но я могу сделать и по-другому: ввести все подряд, а не расставлять скобки в самом начале. Кому как удобнее. Появляется большая свобода ввода.

Итак, я уже указал на то, что Math устроен логично. Помимо этого, Math гибок и универсален. Некоторые конструкции похожи друг на друга, сами команды у близких операций схожи между собой, а заложенные возможности форматирования позволяют создавать красиво оформленные формулы средствами самого редактора.

Использование скобок

С некоторыми простыми выражениями мы познакомились, теперь усложним задачу. Снова обратимся к лингвистической стороне вопроса. Рассмотрим более сложный пример – «дробь: в числителе 1, в знаменателе 2+3». В этом случае ход мыслей такой: «единица над двойкой плюс три». Но если записать 1 over 2+3, то получится так:

\frac{1}{2}+3

А это совсем не то, что нам нужно! Для таких случаев используют операторные (групповые) скобки. В Math это фигурные скобки { и }. Тогда ход мыслей может быть, например, такой: «единица над двойкой-плюс-тройкой». Своего рода логическое разделение одной части фразы от другой. Правильная запись: 1 over {2+3}.

Операторные скобки можно использовать не только по их прямому назначению, но и «для себя»: дабы не запутаться в сложном выражении, можно «обернуть» в них его части. При этом главное – не нарушить вид вашей формулы, и количество открывающих операторных скобок должно быть равно количеству закрывающих. Впрочем, это касается всех скобок: круглых – (), квадратных – [], треугольных (угловых) – <> и так далее.

Кстати о вводе скобок. Если круглые и квадратные скобки вводятся с клавиатуры нажатием соответствующих клавиш, то треугольные, фигурные и другие виды реализуются с помощью специальных команд. Например () [] langle rangle lbrace rbrace даст:

\left(\right)\left[\right]\lbrace\rbrace\langle\rangle

Важный момент: скобки обязательно должны быть парными. Если вам нужна одиночная скобка – вставьте ее как текст, заключив в двойные кавычки. Так, ввод ( приведет к ошибке, а “(“ отобразит открывающую фигурную скобку в формате, указанном для текста (настроить форматирование формул можно, выбрав нужные пункты из меню Формат).

Помимо простых скобок, в Math есть еще и масштабируемые. Обычные скобки превращаются в масштабируемые путем приписывания ключевых слов left и right к соответствующим командам. Например немасштабируемые скобки ldbracket a over b rdbracke:

[\frac{a}{b}]

масштабируемые скобки left ldbracket a over b right rdbracket

\left[\frac{a}{b}\right]

А как поступить, если надо поставить одиночную масштабируемую скобку? Ведь необходимо же соблюсти парность! Разработчики предусмотрели эту возможность, введя «невидимую» скобку, описываемую ключевым словом none. Например масштабируемые скобки left lbrace a over b right none :

\left\{ \frac{a}{b}\right.

Этот «фокус» можно использовать при записи систем уравнений. Подробности можно прочитать в моей статье «Сложная разметка и хитрости в OpenOffice.org Math» (http://i-rs.ru/Stat-i/Konkurs-2007/konkursnye-raboty-53/Slozhnaya-razmetka-i-hitrosti-v-OpenOffice.org-Math) или в книге «OpenOffice.org pro для профессионала», выпущенной издательством «ДМК Пресс» в 2008 году. Там же описаны и другие интересные приемы, обеспечивающие эффективность работы в OpenOffice.org Math и демонстрирующие гибкость приложения.

Околосимвольные элементы

Math обладает широким спектром околосимвольных элементов. К таковым можно отнести индексы, стрелки и точки над символами и так далее. Запомнить команды легко. Например, lsub, csub и rsub можно расшифровать как «left subindex», «central subindex» и «right subindex» соответственно. Кстати, и со скобками можно провести аналогию.

Средствами Math можно создавать различные индексы, включая вложенные. Пользователю также предоставляется широкий набор надсимвольных элементов: разной длины стрелки, линии, точки, «крышка» и так далее. Приведу несколько примеров: вы легко разберетесь в них самостоятельно.

X lsup a csup b rsup c lsub d csub e rsub f:

\overset{b}{\underset{e}{{}^{a}_{f}X_{d}^{c}}}

Tо же самое, но запись немного короче X lsup a csup b^c lsub d csub e_f

Почувствуйте разницу vec a vec abc widevec abc: \overrightarrow{a}\, a\overrightarrow{b}c\,\overrightarrow{abc}

Векторная производная dot vec a: \overset{\centerdot}{\overrightarrow{a}}

Более сложные операторы

Рассмотрим несколько операторов, в которых могут использоваться три операнда. Вы можете увидеть соответствующие им конструкции, нажав на кнопку Операторы в верхней части окна Выбор. С помощью этих операторов можно создавать формулы, содержащие пределы, интегралы, суммы и произведения. Общий синтаксис всех этих операторов выглядит так: название_оператора from нижний_предел to верхний_предел выражение

Нижний и верхний пределы являются необязательными и могут существовать отдельно друг от друга. Проиллюстрирую это на примере.

Неопределенный интеграл int f(x)dx : \int f(x)dx

Интеграл с нижним пределом. Используется, например, при записи интегрирования по площади int from a f(x)dx :\underset{a}{\int}f(x)dx

Oпределенный интеграл int from a to b f(x)dx : \underset{a}{\overset{b}{\int}}f(x)dx

В случае, когда на месте верхнего и нижнего пределов используются выражения, не забывайте про операторные скобки, иначе может получиться не то, что вы хотите. Сравните следующие записи:

int from {2 a+5} to 4 b+7 x^2 dx : \underset{a+5}{\overset{4}{\int}}b+7x^{2}dx

int from {2 a+5} to {4 b+7} x^2 dx : \underset{a+5}{\overset{4b+7}{\int}}x^{2}dx

int from 2 a^2 x^2 dx : \underset{2}{\overset{}{\int}}a^{2}x^{2}dx

int from {2 a^2} x^2 dx : \underset{2a^{2}}{\overset{}{\int}}x^{2}dx

Вместо ключевых слов from и to можно использовать уже знакомые надсимвольные индексы csub и csup соответственно.

Матрицы

На матрицах мы остановимся отдельно. Во-первых, у них довольно сложный синтаксис. А во-вторых, конструкцию, которая создается кодом матрицы, можно использовать не по прямому назначению. Это позволяет создавать эффектные формульные конструкции и лишний раз показывает гибкость Math. Но давайте по порядку.

Матрица представляет собой прямоугольный математический объект, в котором данные размещены в строках и столбцах. Некоторые могут назвать матрицу таблицей, а некоторые таблицы (например, в экономике) стали называть матрицами. Действительно, у матриц и таблиц есть много схожего, но есть и отличия. Важное свойство матрицы состоит в том, что количество элементов в строках (столбцах) матрицы одинаково в любой строке (столбце). Для таблиц это выполняется не всегда, поскольку в них могут находиться объединенные ячейки.

Человек читает матрицу слева направо. Это отражено и в математической форме, когда при ссылке на элемент матрицы сначала говорится номер строки, а затем – столбца. Кроме того, в большинстве стран мира (в том числе и в России) чтение идет сверху вниз. Ввод матрицы в Math реализован соответствующим образом.

matrix{a_11 # a_12 # a_13 ## a_21 # a_22 # a_23} : \begin{array}{ccc}
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23}\end{array}

Сопоставив код результату, легко понять, что элементы одной строки разделяются между собой решеткой, а сами строки – двумя решетками. Обычно матрицу записывают в круглых или квадратных скобках. Для корректной записи необходимо использовать масштабируемые скобки.

left [ matrix{a_11 # a_12 # a_13 ## a_21 # a_22 # a_23} right ] : \left[\begin{array}{ccc}
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23}\end{array}\right]

Допустим, надо ввести вектор – матрицу-столбец. Есть два способа сделать это. Первый – использовать уже знакомую команду matrix, а второй – взять специальную команду stack. Просто сравните:

left [ matrix{a_11 ## a_12 ## a_13} right ] : \left[\begin{array}{c}
a_{11}\\
a_{21}\\
a_{31}\end{array}\right]

left [ stack{a_11 # a_12 # a_13} right ] : \left[\begin{array}{c}
a_{11}\\
a_{21}\\
a_{31}\end{array}\right]

Как я говорил раньше, матрицы можно использовать не по прямому назначению. Одним из красивых примеров, наглядно иллюстрирующим такую возможность, является запись вида «сложение уравнений в системе».

“+” left lbrace alignr matrix{ x#+10 y#alignl {}=31## - x#+4 y#alignl {}=11} right none newline alignr overstrike phantom {matrix{ x#+101 y#alignl {}=15qq}} newline alignl phantom{“+” left lbrace right none} {alignr matrix {phantom -x#~14 y#alignl {``}=42}} :

\frac{+\left\{ \begin{array}{ccc}
x+10y & = & 31\\
-x+4y & = & 11\end{array}\right.}{{\;\;\;\;\;\;\;\;\;\;\;\;\;}\begin{array}{ccc}
14y & = & 42\end{array}}

Похожий на этот и другие примеры описаны в уже упомянутой статье «Сложная разметка и хитрости в OpenOffice.org Math».

Вставка в текст

«Некрасивая» формула: lim как бы вылез из текста. «Красивая» формула: все слова находятся на одной линии.

На первый взгляд, в этом нет ничего необычного. Однако есть некоторые тонкости, которые бывает полезно учитывать при работе.

Для вставки формулы выберите Вставка > Объект > Формула в главном меню Writer. Вставленная формула является объектом Math, поэтому она имеет те же свойства, что и другие объекты: обтекание, расположение, привязка, обрамление. При этом стиль Формула, который соответствует формулам Math, является стилем врезок.

Один из часто задаваемых вопросов звучит примерно так: «Как убрать отступы слева и справа от формулы?» Эта проблема решается просто: из контекстного меню для формулы выбираем Объект, идем на вкладку Обтекание и выставляем нулевые отступы. Более того, это можно сделать сразу для всех формул в документе. Для этого надо открыть окно Стили и форматирование (Формат > Стили или F11), перейти на стили врезок, щелкнуть правой кнопкой на стиле Формула, выбрать из контекстного меню Изменить и выставить нулевые отступы на вкладке Обтекание.

Еще одним важный моментом является размещение формулы в тексте. По умолчанию объект выравнивается по высоте относительно центра. Это может привести к тому, что вставленная формула будет некрасиво смотреться в тексте.

Исправить это можно простым смещением формулы по вертикали, либо с помощью мыши, либо установкой нужных параметров в секции Положение на вкладке Тип диалогового окна Объект (вызывается из контекстного меню формулы, либо Формат > Врезка). Вставляйте сюда неотформатированный текст.

Вопросы совместимости

Часто можно слышать вопрос: «Совместимы ли Microsoft Equation и OpenOffice.org Math?» Если отвечать кратко, то нет. Это разные редакторы, результатом работы в которых являются разные объекты. Поэтому при открытии документов Word в Writer, как и при открытии в Word документов, созданных в Writer и конвертированных в формат Word, при отображении формул часто возникают ошибки. По сути, нельзя без проблем «перескочить» с одного редактора на другой, потому что многие формулы придется вводить заново.

Многие издательства принимают документы, содержащие формулы, только в формате Microsoft Equation. А что делать тем, кто работал в OpenOffice.org? К сожалению, им придется набирать формулы заново. Либо попытаться договориться с издательством об использовании Math. LXF

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию