Презентации, рисунки, формулы (Impress/Draw/Math)

Хитрости в ООо Math Печать
Автор Смирнов Д.В.   
09.03.2007 г.

Перейдём к приёмам записи некоторых выражений в OOo Math. Примеры составлены на основании вопросов, на которые я в своё время отвечал себе и другим людям.

  • Вопрос: как сделать двойной верхний/нижний индекс? Как сделать одновременно два индекса?
  • Ответ: например, так:


Image

  • Вопрос: как сделать «многоэтажные» дроби
  • Ответ: с помощью операторных фигурных скобок. Например: 

Image 

  • Вопрос: как напечатать знак равенства (неравенства, принадлежности и т. п.), не используя спецсимволы? Math ругается на отсутствие операндов.
  • Ответ: использовать операторные фигурные скобки. С помощью них можно указать Math пустой операнд, записав на его месте {}. Например: 

Image

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

Image

В большинстве случаев необходимо выравнивание по левому краю. Изменим запись: 

Image

Поскольку alignl выравнивает по левому краю относительно самой длинной строки в формуле, то alignl перед этой самой строкой можно опустить. В нашем примере таковой является верхняя. Поэтому можем записать: 

Image

Визуально формулы выглядят одинаково.

  • Вопрос: когда я ввожу Re (чтобы указать действительную часть комплексного числа), у меня подставляется спецсимвол, а мне этого не надо. Как записать выражение для действительной части числа? Как записать обозначение числа Рейнольдса?
  • Ответ: поясню о чём идёт речь. У нас принято обозначать действительную часть комплексного числа Image как Image , т.е. Re является функцией и, следовательно, используется обычное начертание. Math подставляет символ Image вместо Re. Один из способов решения основан на следующем: по умолчанию Math настроен так, что обычный текст оформляется как раз обычным начертанием (если это не так - то соответствующие параметры можно настроить из меню: Формат - Шрифты). Поэтому просто укажем Math, что Re - это текст.

Image
Теперь про число Рейнольдса. Число Рейнольдса - в общем случае переменная, а для конкретного случая - константа. Поэтому оформлено оно должно быть курсивом: Re. Соответственно, есть два способа решения этой проблемы.
Первый способ: указать курсивное начертание:

Image

Но есть и другой способ. Он сработает в том случае, если Вы не обозначили какой-либо спецсимвол через %Re. Если нет соответствующего символа, Math записывает курсивом последовательность символов, стоящую после знака %

ImageЭтот способ неочевиден, но он более компактен. Кроме того не все символы можно отобразить таким образом.

  • Вопрос: почему тригонометрические функции sin и cos оформляются правильно (т.е. обычным начертанием), а tg - курсивом? Как решить эту проблему?
  • Ответ: дело в том, что в России и в США разные обозначения тригонометрических функций. У нас тангенс обозначается как tg, а в США и Западной Европе - tan. Поэтому tg воспринимается Math как переменная, следовательно, он оформляет её курсивом. Решение проблемы - аналогично записи действительной части числа: укажем Math, что tg - это текст.

Image
Кстати, как и ожидалось, tan оформляется обычным начертанием без каких-либо ухищрений.

Image

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

Сперва рассмотрим способ проведения горизонтальной черты под матрицей. Это делается подчёркиванием матрицы. Однако на мой взгляд, underline здесь не совсем подходит, поскольку запись будет выглядеть не очень эстетично, а именно: 

Image

Можно отступить строчку, добавив в матрицу пустую строку. 

Image

Но, согласитесь, смотрится также не очень красиво. Поэтому могу предложить два других способа. Первый - подбор высоты, на которой надо провести горизонтальную линию. В этом случае линию проводим перечёркиванием (overstrike). 

Image

Минус данного способа состоит в том, что выражение под чертой придётся вписывать в саму матрицу (в противном случае будет большой отступ снизу), что само по себе используется не всегда. К тому же появляются сложности с проставлением слева фигурной скобки: её тоже придётся подбирать по высоте вне зависимости от матрицы, что чревато нарушением разметки. Поэтому этот способ отбросим ввиду его вопиющей неуниверсальности.
Предложу на суд читателя ещё один вариант. 

Image

Суть такова: мы перечёркиваем невидимую матрицу. Тогда наша задача - подобрать размер перечёркиваемой матрицы такой же, как и у верхней.
Полученная запись кажется мне наиболее эстетичной и удобной с точки зрения дальнейшего решения проблемы. Хотя, признаться, этот способ (в отличие от подчёркивания матрицы с помощью underline) не столь очевиден.
Исходя из этих соображений, рассмотрим запись системы уравнений с помощью этих двух способов.

Простой случай: без почленного выравнивания слагаемых (т.е. одно уравнение написано просто под другим).

Image

В выделенной полужирным начертанием команде мы используем невидимые символы для указания длины линии. Очевидно, что линию нужно выровнять по правому краю (alignr) и сделать по длине чуть больше самого длинного уравнения (в данном случае это верхнее). Выражение под командой phantom представляет из себя самое длинное уравнение системы, удлинённое добавленным символом q (на его месте может быть и другой символ или несколько символов, а также такие символы могут отсутствовать вообще, если Вы считаете удлинение линии нецелесообразным). Указание под phantom самого длинного уравнения (а не другой комбинации символов) упрощает подбор линии нужной длины, поскольку мы как бы ведём отсчёт от известной длины.
В обоих случаях имеется одна и та же проблема - выравнивание итога (103y = 18). Может, конечно, alignc или alignr случайно дадут нужное Вам выравнивание, но это маловероятно. Придётся выравнивать с помощью пробелов (обратный апостроф или гравис ` и тильда ~) и невидимых символов. Например, чтобы выровнять итог по левому краю уравнений системы, можно воспользоваться невидимыми символами: 

Image

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

Image

Вы можете спросить: а зачем мы последнюю строку записали с помощью матрицы? Можно было просто написать обычную строчку и выровнять её вручную. Да, так можно сделать, но в описанном мной случае выравнивать элементы матрицы на мой взгляд проще: доставлять пробелы и невидимые символы в отдельных элементах матрицы удобнее, поскольку тогда мы привязываемся только к границам соответствующей ячейки матрицы, а не ко всей строке.
alignr при переменных используется для выравнивания «по переменной», alignl у знаков равенства используется для расположения их друг под другом. Тем самым мы достигаем независимости записи самой системы уравнений от длины этих уравнений или коэффициентов при переменных.
Недостаток этого способа очевиден: несмотря на идеальное выравнивание самих уравнений, приходится подбирать длину горизонтальной линии (как и в предыдущем случае), а также отступы для итоговой строки (в указанном примере я это сделал с помощью коротких пробелов - см. выделенный текст). 

Последний недостаток можно устранить в том случае, если допустимо оставить немного места после итоговой строки. Понятно, что размер матрицы автоматически подбирается по самым длинным её элементам. Суть предлагаемого мной метода заключается в том, чтобы задать равные размеры матриц системы уравнений и итоговой строки, а именно - по наиболее длинной строке системы уравнений указать размер итоговой строки. Какую команду для этого удобно использовать? Правильно, phantom

Image

Мы просто «зафантомили» самую длинную строку и расположили её аккурат под итоговой строкой, а точнее - мы её добавили к матрице итоговой строки. Именно для неё требуется дополнительное место.

Напоследок рассмотрю задачу, которую у меня пока не получилось решить. Задача: а что делать, если итоговая строка длиннее всех уравнений системы? Такая ситуация маловероятна. Суть решения проблемы аналогична: добавить над системой уравнений скрытую строку, равную по длине итоговой строке, причём вписать скрытую строку необходимо в ту же матрицу (или stack), в которой записана система уравнений. Сама запись не сложна, но не удаётся корректно поставить фигурную скобку слева, т.е. чтобы она обрамляла только уравнения, но не скрытую строку. При этом отделить скрытую строку от матрица системы уравнений нельзя, поскольку тогда потеряется эффект подбора ширины. за который мы и боремся.

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

Заключение

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

Обсудить на форуме...

  •  это продолжение статьи "Сложная разметка и хитрости в OpenOffice.org Math".
  •  Источник: конкурс на лучшую статью о пакете OpenOffice.org. Номинация "Офисные технологии"
Последнее обновление ( 25.08.2012 г. )
 
След. »

Главная arrow Формулы arrow Хитрости в ООо Math

MyOOo.ru, 2008 — 2024. Хостинг предоставлен компанией Netangels