MCBC - Мобильная система вооруженных сил



149 коммент.
К празднику Дня Советской АрмииДня Защитника Отечества решил на свой страх и риск выложить личные впечатления о работе с MCBC 3.0 - мобильной системой вооруженных сил. На самом деле я не понимаю, почему это окутано такой страшной тайной - ну старый RedHat, ну немного допиленный. Вот и всё. Почему бы военным не выложить какую-нибудь демо-версию "для устрашения вероятного противника"?

Так или иначе, но на некоторое время мне удалось поработать с этим чудом линуксостроения, о чём дальше кратко повествуется.

ПРЕДОСТЕРЕЖЕНИЕ! ВСЁ НИЖЕНАПИСАННОЕ ПРИВОДИТСЯ ТОЛЬКО В ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЯХ! НЕ ПРОСИТЕ МЕНЯ ВЫСЛАТЬ ЭТОТ ДИСТРИБУТИВ - У МЕНЯ ЕГО НЕТ, А ОБРАЗ УСТАНОВЛЕННОЙ СИСТЕМЫ БЕЗВОЗВРАТНО УНИЧТОЖЕН!


Установка
Пока у меня не отобрали заветный диск с Тайной Родины :-) быстро готовлю виртуальный диск на 4 Гб и зажигаю QEMU для создания виртуальной машины, куда будет ставиться МСВС. Нас приветствует строгий экран, который сразу даёт понять, как всё серьёзно:

После чего идёт обычная ничем не прикрытая инициализация Linux-ядра. Инсталлятор сразу предупредил - перед началом установки нужно прочесть руководство Системного Программиста (!):

Я лично такие руководства читать не люблю, а люблю подходить к делу методом научного тыка. Тем, кто (надеюсь) будет устанавливать это в реальных "боевых" условиях, могу сказать, забегая вперёд: ошибиться инсталлятор вам практически не даст. Главное не намудрить при переразбивке диска и не снести свои суперсекретные данные.

Дальше всё идёт так же, как в RedHat Linux - Anaconda делает свою работу чётко, только везде пишет не RedHat Linux, а MCBC, но сути это не меняет.

Порадовал вопрос инсталлятора о том, использовать ли ему загрузчик. А вот, помнится, при установке MOPSLinux инсталлятор вообще предлагал страшное: запузырить загрузчик Lilo на дискету(!), называя её при этом диском А: Но это всё лирика, а вот MCBC-овский инсталлятор попросил ввести пароль для загрузчика, чтобы кто попало не передавал параметры ядру:


В общем, разумно, а то мало ли какие гентозавры сядут за машину - а там Linux, и давай корёжить загрузчик :-) Дальше по ходу установки начались комплексы - правда не у меня, а у инсталлятора:




Видимо, программы управления ракетными комплексами устанавливаются при выборе многообещающего пункта ВСЁ (ВКЛЮЧАЯ НЕОБЯЗАТЕЛЬНЫЕ). Вспомнив, что ракетных комплексов у меня в хозяйстве не имеется, решил ограничиться базовой конфигурацией, средствами разработки и подсистемой графического интерфейса. На всё потребовалось 1.7Гб и, получив от меня добро, система начала инсталлироваться. Даже учитывая то, что дело происходит в QEMU, установка прошла довольно быстро - всего за 12 минут.

Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге Записки дебианщика.

Судя по копируемым пакетам, объём работ ВНИИНС составил, скажем так, не самую большую часть: библиотеки, которые копировались, были настолько древними, что я даже не знаю, из какого музея их уволокли. В названии каждого пакета гордо красовалось -vniins, видимо на что-то намекая. Ну да ладно, дядька Столлман до вас ещё доберётся, если узнает...

Спросили пароль рута (не менее 8 символов), после чего я узрел вот это:

Однако, набор дискет. Хорошо хоть, что опционально, а то я уже забыл, как они выглядят. После удара с дискетами последовало добивание с просьбой указать объём "Видео ОЗУ":

Интересно зачем, ну не в игрушки же играть... Потом частоты монитора. Вообще-то оно должно определиться само, но учитывая общую древность системы и явно не передового оборудования, на которое это всё будет ставиться, вопрос в общем-то логичный. Заодно не даёт расслабляться в стиле "убунту - тык-тык и готово".
Ну всё, меня поздравили с успешной установкой RedHatMCBC.


Было это совсем не так сложно, как пугали в начале установки, даже не пришлось читать руководство Системного Программиста. Теперь загружаемся в свежеустановленную МСВС.



Работа

При загрузке имеем графический бутлоадер и дешёвую надпись "starting MCBC".
Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге Записки дебианщика.
При входе в систему нас ждёт сурового вида приветствие с флагом:

Пользователь при входе root. Для справки - USSR это я так назвал машину. А вот и графический режим...

Хм... в справке написано (цитирую), что "были сделаны значительные доработки по части интерфейса пользователя". Страшно представить, что же было до этого. Очень надеюсь, что за компьютером будут сидеть нетребовательные к интерфейсу пользователи, ибо невесть откуда взятые страшные курсоры вкупе с глазораздирающими шрифтами комфортной работе не способствуют. Вообще шрифты определённо удались... ЛОРовским аналитикам просьба воздержаться от комментариев, а также предварительно закапать глазные капли и выпить валидолу :-) Я, конечно, не фанат шрифтоведения, но даже мои не слишком требовательные глаза этого долго терпеть не могут. Хотя МСВС это не то место, где ждут каких-то изящных изысков. Главное - чтобы работало. И оно в общем работает. И со стороны простого пользователя, работает достаточно хорошо.

Ладно, работаем дальше. Работаем, кстати, от рута по умолчанию, что вообще-то, напоминая экспертам из ВНИИНС, не есть хорошо. Так, пошли по программам.

Есть игрушки - причём довольно много. В военной ОС особенно колоритно смотрятся игры "Сапёр" и "Парашюты", что понятно: специализация системы даёт о себе знать.

Из научных программ - только калькулятор. Есть неопознанная программа работы с изображениями пера ВНИИНС образца 2004 года, которая умеет менять масштаб и поворачивать изображения:

Из плюсов - только наличие кириллической справки. Из форматов знает лишь BMP, GIF, JPG и PNG - даже поддержки TIFF нет. Теперь я не удивлён, почему наш не очень гражданский заказчик передавал нам карты аэрофотосъёмки в формате BMP :-)

Довольно забавно, однако в комплекте идёт много обоев для рабочего стола, даже для разрешений 1280х1024:
Обои идеологически выдержанные и довольно неплохие - кто-то из разработчиков в душе большой фотограф.

Панель управления тоже есть, и, судя по справке, не менялась аж с 2003 года. Для управления программами есть frontend к RPM версии 4.2.1, хотя я не очень себе представляю, где могут быть репозитории к МСВС.

В комплекте оказался MC (Midnight Commander), что приятно - будет чем с удовольствием побродить по файловой системе, чем сейчас и займёмся.


Что внутри?

Собственно, не нужно быть большим специалистом, чтобы быстро выяснить - ядро здесь 2.4.32, а это значит, что на современное оборудование МСВС вам поставить не удастся. Плакали ваши SATA-винчестеры, PCI-E видеокарты вместе с доброй половиной флешек и других USB-устройств. Очень надеюсь, что информация там, где МСВС реально работает, переносится на дискетах или по сети: когда я ещё на Debian Woody работал с ядром 2.4.28, бОльшая часть флешек просто не опознавалась.

Иксы версии 6.8.2 особых проблем на Cirrus Logic имени QEMU не повстречали. Опять-таки сильно надеюсь, что в войсковых частях продукции ATI не будет, а то искать драйвера под X.org 6.8.2 сейчас будет очень даже нелегко.

Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге Записки дебианщика.

Исходники ядра лежат в /usr/src/linux-2.4.32-viins42, однако там только заголовочные файлы. Это ещё раз к вопросу о лицензии и о том, что кое-кто её не читал: зажимать исходники вообще и ядра в особенности крайне нехорошо, особенно вместе с удалением отовсюду копирайтов и самой лицензии GPL. Ну и писать в графе "Поставщик" пакета kernel своё ВНИИНС по крайней мере не вежливо по отношению к товарищу Торвальдсу.

Много интересного содержит в себе каталог /usr/share - я нашёл там целых 4 версии automake (хотя я для своих мелких поделок обходился до сих пор почему-то одной), а также библиотеки GTK и QT времён очаковских и покоренья Крыма. В качестве загрузчика исправно трудится LiLo 22.8, расшаривание файлов с помощью Samba 2.2.12, печать с помощью CUPS версии 1.1.23. А вы говорите, что Debian это старьё... :-)


Документация
Документация лежит в каталоге /usr/MCBC/doc и представляет собой HTML-файлы и кучей растровых вкраплений - ума не приложу, зачем нужно было оформлять "Систему единой документации" в виде намертво вбитых картинок. Упоминаний об истинных авторах программ нет - вытерты все упоминания о GPL, которой авторы сего обязаны решительно всем, ибо не будь Linux, они никогда бы не изваяли МСВС. На uname, впрочем, оно отзывается, как ему и положено: Linux 2.4.32.

Документация в общем неплоха, и лучше, чем вообще ничего. Но некоторое разделы просто не написаны, и справка страдает отчаянным лаконизмом. Хотя на русском, без кучи орфографических ошибок, опечаток и англо-россиянской мешанины, как в том же LinuxXP. Есть немножко документации даже по PAM и Samba, хотя для понимания дела её, конечно, мало. То есть руководство Системного Программиста читать всё равно придётся :-)

Этот материал написал Михаил Конник aka virens и опубликовал на своём блоге Записки дебианщика.


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

Ещё раз напоминаю о том, что дистрибутива у меня больше нет и МСВС выслать почтой даже не просите. Буду рад отзывам разработчиков (в частности интересует, на базе чего создан ELK) и конструктивной критике.

Ссылки по теме:
Кроме данной статьи, есть материал в Википедии и довольно интересный обзор.
(спасибо уважаемым комментаторам!).

Обновлено: есть ещё обзор
, повествующий о продолжении данного марлезонского балета МСВСфера - новая мобильная система вооруженных сил или афера?
Читать далее

Древовидные редакторы - outliners



24 коммент.
Есть такой жанр программ, как древовидные редакторы - или outliners, как называют их загадочные англичане. Такие программы очень полезны, так как являются неким промежуточным вариантом между кучей "липких заметок" (что хорошо реализуется с помощью knotes) и достаточно мощными базами данных (от Kixi до PostgeSQL и им подобных). То есть тот самый промежуточный вариант, когда липкие заметки уже не справляются с организацией данных, а городить базы данных нет нужды.


Древовидная организация данных
Самый простой вариант в этом случае - просто создавать документы с нужными данными в любом удобном формате и хранить их в каталогах файловой системы. Подход простой, но не гибкий. Поэтому хорошо бы найти такую программу, которая хранила бы "липкие заметки" в виде какой-то организованной структуры. Вот тут-то мы и начинаем искать по репозиторию с ключевыми словами outliner и tree-like. На выходе имеем:
vim-vimoutliner - script for building an outline editor on top of Vim
postgresql-contrib-8.1 - additional facilities for PostgreSQL
postgresql-contrib-7.4 - additional facilities for PostgreSQL
treeline - versatile tree-like structured custom data manager
Первое - для поклонников vim, про PostgreSQL уже говорилось выше. А вот treeline нам явно в тему. Кроме TreeLine, который есть в репозиториях Etch, имеется ещё замечательная программа Notecase, о которой речь пойдёт чуть ниже.

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

TreeLine
После установки и непродолжительного использования становится понятно, что это скорее некое подобие хранителя паролей, так как отображение введённых данных идёт в строчку. Это для хранения сколько-нибудь больших текстов не годится.


Notecase
В репозитории его можно не искать, так как лицензия у приложения BSD. Но это не мешает нам скачать тарбол с сайта автора, поставить нужные dev-пакеты и собрать себе самим это приложение.

Сборка notecase в пакет проблем не представляет - нужно только поставить немного гномовских пакетов для сборки:
aptitude install libgtk2.0-dev libgnomevfs2-dev
После сборки пакеты можно удалить. Процесс сборки ничем не отличается от уже описанного здесь.

Собрав и установив пакет, мы получаем вот такое скромное приложение:



Ничего лишнего, никаких бесполезных наворотов, но зато быстро и удобно.В программе есть русский интерфейс, включается так: Edit - Options - вкладка Global - Use system language settings.

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

Среди основных возможностей можно выделить:
  • шрифтовое оформление bold, italic, underline, strikethrough, color
  • шифрование документа
  • поиск и замена, перетаскивание фргаментов деревьев
  • вставка документов и файлов
  • метки (tags) для элементов деревьев данных
  • импорт и экспорт данных в другие приложения
В общем, если вам нужно хранить заметки в структурированном виде, то notecase это то, что вы искали.


Ссылки
Большое про древовидные редакторы можно прочесть например тут, TreeLine есть в дистрибутивах, а notecase можно скачать отсюда (там же есть пакеты под Убунту).
Читать далее

Юмор: UNIX-коаны Мастера Фу



22 коммент.
Несколько историй из замечательной книги "Искусство программирования для UNIX" Эрика Реймонда. Наверное, многие это уже читали, но всё равно - время от времени хорошо припадать к истокам и перечитывать классику.

Мастер Фу и десять тысяч строк

Однажды Мастер Фу сказал заезжему программисту: "В одной строке кода shell-сценария больше духа UNIX, чем в десяти тысячах строк кода на С!"

Программист, гордый своими познаниями в С, ответил: "Может ли быть такое? Ведь С - язык, в котором реализовано само ядро UNIX!"

На это Мастер Фу ответил: "Это так. Тем не менее, в одной строке shell-сценария больше духа UNIX, чем в десяти тысячах строк С!"

Программист выглядел удрученным. "Но ведь через язык С мы познаем просвещенность патриарха Ритчи! Мы уподобляемся человеку с операционной системой и компьютером, который получает непревзойденную производительность!"

Мастер Фу сказал: "То, что ты говоришь, правда. Однако в одной строке shell-сценария больше духа UNIX, чем в десяти тысячах строк С".

Программист усмехнулся и поднялся, чтобы удалиться. Но Мастер Фу кивнул своему ученику Ньюби, который писал строку shell-кода на стоящей рядом белой доске, и сказал: "Господин программист, посмотрите на этот конвейер! Не заняла бы его реализация на C десять тысяч строк?"

Просматривая то, что писал Ньюби, программист что-то бормотал в бороду. В конце концов, он согласился, что это так.

"И сколько часов потребовалось бы вам для реализации и отладки этой программы на языке С?"

"Много", - признал заезжий программист. "Но только безумец стал бы тратить столько времени, когда его ждет множество более достойных задач".

"Так кто лучше понимает дух UNIX?" - спросил Мастер Фу. "тот, кто пишет десять тысяч строк, или тот, кто, сознавая тщетность этих усилий, извлекает пользу, не программируя?"

Услышав это, программист достиг просветления.




Мастер Фу и Скрипт Кидди
Незнакомец из страны Вут пришел к Мастеру Фу во время его утренней трапезы.

"Я не раз слышал о вашем величии, - сказал он. - Пожалуйста, научите меня всему, что знаете".

Ученики Мастера Фу переглянулись, смущенные варварским языком пришельца. Мастер Фу только улыбнулся и ответил: "Вы хотите изучить путь UNIX?"

"Я хочу быть волшебником-хакером, - ответил незнакомец, - и владеть всеми компьютерами".

"Я не учу этому", - ответил Мастер Фу.

Волнение незнакомца росло. "Отец, вы - позер и ничего больше, - сказал он. - Если бы Вы знали хоть что-нибудь, то научили бы меня".

"Есть путь, который может привести тебя к мудрости", - сказал Мастер Фу. Мастер нацарапал какой-то IP-адрес на клочке бумаги. "Взлом этого сервера не составит для тебя большого труда, поскольку его хранители не компетентны. Возвращайся и расскажи мне, что ты ищешь".

Незнакомец поклонился и вышел. Мастер Фу закончил трапезу.

Прошли дни, а затем и месяцы. О незнакомце забыли.

Спустя годы незнакомец из страны Вут вернулся.

"Будь ты проклят!" - воскликнул он. - Я взломал этот сервер, это было не трудно, как ты и сказал. Но ФБР схватило меня и бросило в тюрьму".

"Хорошо", -сказал Мастер Фу. - Ты готов к следующему уроку". Он написал IP-адрес на бумаге и передал его незнакомцу.

"Вы с ума сошли?", - пронзительно вскрикнул тот. - После всего, что я прошёл, я не собираюсь снова взламывать компьютеры!"

Мастер Фу улыбнулся. "Здесь, - сказал он, - начинается мудрость".

Услышав это, странник достиг просветления.




Мастер Фу учил своих студентов

"В учении дхармы есть направление, выражаемое мантрой патриарха Макилроя - "Делай хорошо одну вещь", которая подчеркивает, что программное обеспечение движется по пути UNIX, если оно ведет себя просто и последовательно, и обладает свойствами, которые могут быть легко смоделированы в мозгу пользователя и использованы другими программами".

"Но есть и другое направление в учении Дхармы, примером которого может служить великая мантра патриарха Томпсона - "Находясь в сомнении, используй грубую силу", и различные сутры о большей ценности 90% функций прямо сейчас, чем 100% позже, что подчеркивает надежность и простоту реализации"

"Теперь скажите мне: каким программам присущ дух UNIX?"

Помолчав, Ньюби заметил: "Учитель, эти два учения могут противоречить друг другу".

"Простой реализации может не хватить логики в граничных ситуациях, таких как нехватка ресурсов и неудачная попытка закрыть окно или таймаут во время незаконченной транзакции".

"Когда возникают подобные граничные ситуации, поведение программного обеспечения становится непредсказуемым и сложным. Конечно, это не есть путь UNIX".

Мастер Фу кивнул в знак согласия.

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

"Таким образом, попытка изначально охватить все граничные случаи, гарантируя "простоту описания", может на деле привести к созданию кода, который излишне усложнен или слишком неустойчив, или который в случае, если он переполнен ошибками, не будет завершен никогда. Конечно, это не есть путь UNIX".

Мастер Фу кивнул в знак согласия.

"Каков же, в таком случае, пусть дхармы?" - спроил Ньюби.

И учитель ответил: "Когда орел летит, забывает ли он о том, что его лапы касались земли? Когда тигр после прыжка настигает свою жертву, забывает ли он о моменте, проведенном в воздухе? Три фунта VAX!"

Услышав это, Ньюби достиг просветления.



Мастер Фу и консультант по методологии
Когда Мастер Фу и его ученик Ньюби посещали святые места, по вечерам Мастер Фу имел обыкновение выступать перед неофитами UNIX тех городов и сёл, где они останавливались на ночлег.

Однажды среди тех, кто собрался его послушать, оказался консультант по методологии.

"Если при доводке вы не профилируете регулярно ваш код в поисках узких мест, то вы уподобляетесь рыбаку, который закидывает сеть в озеро, в котором нет рыбы," - сказал Мастер Фу.

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

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

"Но если он уронил свою сеть в озеро, - сказал консультант по методологии, - то почему он искал ее в лодке?"

"Потому, что он не умел плавать", - ответил Мастер Фу.

Услышав это, консультант достиг просветления.




Мастер Фу рассуждает о графическом пользовательском интерфейсе
Однажды вечером Мастер Фу и Ньюби посетили собрание программистов, которые встретились, чтобы поучиться друг у друга. Один из программистов спросил у Ньюби, к какой школе принадлежит он и его учитель. Когда Ньюби сказал, что он и его учитель - последователи Великого Пути UNIX, программист презрительно усмехнулся.

"Средства командной строки UNIX грубые и отсталые, - насмешливо сказал он. - Современные, правильно спроектированные операционные системы делают все через графический интерфейс пользователя".

Мастер Фу не проронил ни слова, но указал на Луну. Находившийся поблизости пёс залаял на руку учителя.

"Я не понимаю вас", - сказал программист.

Мастер Фу молчал и показал на образ Будды. Потом указал на окно.

"Что вы хотите этим сказать?" - спросил программист.

Мастер Фу указал на голову программиста. Потом указал на камень.

"Почему вы не можете сказать яснее?" - потребовал программист.

Мастер Фу задумчиво нахмурился, дважды щелкнул программиста по носу и бросил его в находящийся рядом мусорный контейнер.

Пока программист пытался выбраться из горы мусора, пёс ходил рядом и лаял на него

В этот момент программист достиг просветления.



Мастер Фу и фанатик UNIX

Один фанатик UNIX, услышав, что Мастер Фу обладает мудростью Великого Пути, пришел к нему поучиться. Мастер Фу сказал ему:

Когда патриарх Томпсон изобрел UNIX, он не понял этого. Потом к нему пришло понимание, но он уже не мог ничего изобрести.

Когда патриарх Макилрой изобрел канал, он знал, что это преобразит программное обеспечение, но он не знал, что это изменит его мышление.

Когда патриарх Ритчи изобрел язык С, он обрёк программистов на адские муки переполнения буфера, повреждения данных и ошибки из-за недействительного указателя.

Действительно, патриархи были слепы и глупы!

Фанатик был очень рассержен словами Мастер Фу.

"Просвещенные, - запротестовал он, - открыли нам Великий путь UNIX. И если мы будем насмехаться над ними, мы потеряем добродетель и возродимся как звери или MCSE".

"Бывает ли когда-либо твой код полностью без погрешностей и ошибок?" - спросил Мастер Фу.

"Нет, - ответил фанатик, - такое недоступно человеку".

"Мудрость патриархов, - сказал Мастер Фу, - в том, что они знали, что они безумцы".

Услышав это, фанатик достиг просветления.




Мастер Фу рассуждает о природе UNIX
Один ученик сказал Мастеру Фу: "Нам говорят, что фирма SCO удерживает реальную власть над UNIX".

Мастер Фу кивнул в знак согласия.

Ученик продолжал: "Однако нам также говорят, что другая фирма, OpenGroup, также удерживает реальную власть над UNIX".

Мастер Фу кивнул в знак согласия.

"Как такое возможно?" - спросил ученик.

Мастер Фу ответил: "SCO действительно владеет кодом UNIX, но код UNIX - это не сама UNIX. OpenGroup действительно владеет маркой UNIX, но название UNIX - это не сама UNIX".

"В чем же тогда сущность UNIX?" - спросил студент.

Мастер Фу ответил: "Не в коде. Не в имени. Не в мышлении. Вообще ничего материального. Вечное изменение без перемен".

"Сущность UNIX проста и пуста. Поскольку она проста и пуста, она сильнее тайфуна"

"Повинуясь естественным законам, она непреклонно расцветает в умах программистов, ассимилируя конструкции в свою собственную природу. Всякое программное обеспечение, которое хотело бы конкурировать с UNIX, должно стать таким, как UNIX: пустым, пустым, глубоко пустым, абсолютно лишенным содержания потоком!"

Услышав это, ученик достиг просветления.




Мастер Фу и конечный пользователь

В другой раз, когда Мастер Фу давал публичную лекцию, один пользователь, наслушавшись рассказов о мудрости Учителя, подошел к нему за советом. Он трижды поклонился Мастеру Фу.

"Я хочу постичь тайны Великого Пути, но командная строка вводит меня в замешательство".

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

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

"Расскажи мне, - спросил он у неофита, - о коде, который ты написал, и о работе по проектированию, которую ты проделал".

Неофит начал, заикаясь, отвечать, но не мог ничего сказать.

Мастер Фу повернулся к пользователю. "Скажи мне, - осведомился он, - зачем ты ищешь Великий Путь?"

"Мне не нравится программное обеспечение, которое окружает меня, - отвечал пользователь. - Оно ненадежно работает и не радует глаз и сердце. Услышав о том, что путь UNIX, хотя и труден, но превосходен, я пытаюсь отбросить все препоны и обман".

"И чем же ты занимаешься, если так борешься с нынешним программным обеспечением?" - спросил Мастер Фу.

"Я - строитель, - ответил пользователь. - Многие дома в этом городе построены моими руками".

Мастер Фу повернулся к неофиту. "Кошка может насмехаться над тигром, - сказал он, - но это не превратит мяуканье в рев".

Услышав это, неофит достиг просветления.
Читать далее

Математические формулы в LaTeX: Math in LaTeX



47 коммент.
Этот пост является частью
большой статьи
"Как оформить диплом в LaTeX?",
которую написал virens,
ведущий блога
"Записки дебианщика"
Для того, чтобы написать диплом по физическим специальностям, трёхэтажных километровых формул набирать не надо, а надо усвоить несколько простых и понятных команд LaTeX. Потребуется освоить окружение нумерованных и ненумерованных формул, а так же набор массива формул. Ну и основные команды для обозначения математических символов.

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

Пост подвергался чистке и правке после публикации:
Автор заходил править этот пост 6 апреля 2013 года.

О формулах в целом

Первое и главное - пользуйтесь тем, что предоставляет вам интегрированная среда. Обзор интегрированных сред для LaTeX можно прочитать по этой ссылке. В её вкладках должны быть таблицы греческих символов, основных математических операторов и прочего. Самое главное, что символы в таком виде гораздо проще найти и вставить, не перелистывая талмуд со специальными символами.

Заучивать команды для математических символов в LaTeX не нужно - вы и так большинство команд запомните за их красивые и лаконичные названия. Едва ли вы испытаете серьёзные затруднения с названиями греческих букв $\alpha$, $\gamma$ или $\delta$. Основные математические символы тоже должны быть в вашей интегрированной среде, такие как столь любимые физиками приближённые равенства $\approx$ или интегралы с суммами.

Быстрый старт - набор простых формул

Формулы можно вставлять в строке или торжественно на отдельной строке, по центру и с номером. Малозначительные формулы типа $f(x) = a\cdot x + b$ вставляются, как правило, в строчку, а что-то серьёзное, вроде разложения в ряд Фурье:

\begin{equation}\label{eq:fourierrow}
f(x) = \frac{A_0}{2} + \sum \limits_{n=1}^{\infty} A_n \cos \left( \frac{2 n \pi x}{\nu} - \alpha_n \right) 
\end{equation}

оформляется с помощью окружения \begin{equation}\label{ссылка} ... \end{equation}.

Набранная формула выглядит так:
При этом напротив неё будет помещён номер, сгенерированный автоматически. Для того, чтобы сослаться на эту формулу, в LaTeX тексте будем ставить (\ref{ссылка}) чтобы на неё сослаться. Имена ссылкам стоит давать на латиннице, во избежание проблем. Если формула приводится для пояснений и ссылаться на неё не надо, следует поставить после equation звёздочку, то есть equation* и после этого номер для данной формулы генерироваться не будет.
Смысл использования LaTeX - создание логичного, структурированного документа, а не каши из кривого оформления и потока сознания.
Ссылки должны быть осмысленными и безошибочно говорить автору текста, какая формула имеется в виду. Не стоит потворствовать лени и глупости, проявляющихся в ссылках типа \label{uravnenie6} - следует спросить себя, что означает эта формула и дать ей осмысленное имя.

Вставка формул в текст

Чтобы вставить формулу внутрь текста, используем окружение $ $, внутри которого помещаем формулу. Окружение $ $ переводит LaTeX в математический режим и будет отрисовывать формулы. Например: $\alpha_0$ даст нам греческую букву АЛЬФА с индексом 0. 

Подчёркиванием в LaTeX делается нижний индекс, и использовать подчёркивание в тексте нельзя (для подчеркивания в тексте есть пакет расширений ulem). Если хотите набирать длинные пассажи в подчёркивании - ставьте фигурные скобки $x_{i,j}$.

Кроме того, ЛаТеХ категорически против двойного нижнего индекса, и команда $x_j_k$ приведёт к ошибке. Но фигурные скобки позволят нам надурить LaTeX и сделать двойной индекс так: $x_{j_k}$. Если же вам нужен верхний индекс в формуле, используем символ ^ так: $x^2$. LaTeX возведёт в степень только первый символ после крышки, и если в степень нужно возвести сразу много символов, экранируем их фигурными скобками (они не отображаются в тексте): $x^{2x+1}$.

Если же вы хотите набрать в формуле фигурные скобки, следует заэкранировать их вот так: \{  и они будут отрисованы в формуле, например $x \{j \}$

О символах в LaTeX

Символов в LaTeX огромное количество, и большинство их собрано в справочном файле под названием symbols-a4.pdf.

Если вы обрабатываете изображения, вам пригодится команда \times, что позволяет набирать вставки типа NхM в более приглядном виде $N\times M$. А если нужно набрать в LaTeX символ градуса, можно воспользоваться таким трюком: $180^\circ$, что наберёт 180 градусов. Символ "Принадлежит" в Latex это $\in$, а символ "Любой" в это $\forall$.
Для тех, кому нужно работать с Фурье-преобразованием, будет приятно набрать букву F в более торжественном стиле для функций, над которым выполняется преобразование: $\mathcal{F} {g(x,y)}$ наберёт большую и красивую букву F для фурье-преобразования.

Набор скобок в LaTeX немного замороченный на первый взгляд. Можно просто поставить обычные скобки, но если формула большая, то можно поставить большие скобки в LaTeX командой $\Bigr($ и $\Bigl)$. Скобок можно поставить много и на любой вкус и размер с помощью команд ( \big( \Big( \bigg( \Bigg( которые превратятся в тексте вот в это:
Автор настоятельно рекомендует отличный вебсервис Detexify: в броузере вы просто рисуете символ, который хотите вставить в LaTeX, и вебсервис попытается угадать и выдать соответствующую команду для LaTeX.

 LaTeX прост!

Ещё раз подчеркну: LaTeX не сложен, он прост, как рельса. И LaTeX сделает буквально то, что вы попросите. Поэтому не бойтесь в коде документа перемежать текст вставками математического режима - такой слегка костылявый способ приведёт вас к желаемому результату быстро и просто. Несколько дней практики, и вы будете рубить формулы в LaTeX, как Чапай белогвардейцев.

... и парочка примеров формул в LaTeX

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

Набор формулы LaTeX с дробью и суммами

Пример первый: набор формулы с дробью и суммами:
LaTeX код этой формулы:   

\begin{equation} 
f(x,y,\alpha, \beta) = \frac{\sum \limits_{n=1}^{\infty} 
A_n \cos \left( \frac{2 n \pi x}{\nu} \right)} {\prod \mathcal{F} {g(x,y)} } 
\end{equation}

Здесь хочется ещё раз подчеркнуть важность структурирования своего LaTeXовского кода, без сваливания всего в одну кучу и набора в строчку длинных формул. Иначе потом не поймёте, где отец, а где кузнец.

Если посмотреть на код формулы без страха и ужаса, можно заметить много простых и понятных английских слов. Слово \sum это, видимо, суммирование, а \limits - пределы суммирования. Если немного напрячь познания английского, то можно вспомнить слово fraction и догадаться, что \frac скорее всего набирает дроби. Как видно, набор формул в LaTeX для тех, каким-то образом получивших техническое образование вместе с зачатками знаний английской языка, не такая уже сложная задача.
Дроби набираются командой \frac{числитель}{знаменатель}. Удобно набирать числитель и знаменатель в дробях на разных строчках в коде - так проще потом работать с формулой. 

Примечательная команда \limits, которая позволяет набирать верхние и нижние пределы в формулах LaTeX. Сама по себе команда \sum, \prod или \int просто отрисовывает интеграл, а если нужно над ними ставить пределы - вспоминаем по \limits_{n=1}^{\infty}. Здесь нижний предел это n=1, а верхний предел бесконечен (символ бесконечности в LaTeX это команда \infty).

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

Длинные формулы в LaTeX

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

\begin{eqnarray} S_{\text{вых}}(x_2, y_2) = \iint dx_0 dy_0 A_0 g(x_0, y_0) \cdot h(x_2-x_0, y_2 -y_0) = \\
 = A_0 \underbrace{\iint dx_0 dy_0 \; g(x_0, y_0) 
\cdot h(x_2-x_0, y_2 -y_0)}_{\text{по определению это есть свёртка }} = A_0 g \otimes h 
\end{eqnarray}
 
Новых конструкций здесь несколько.

Во-первых, интеграл, да не простой, а двойной. Интеграл в LaTeX отрисовывается командой $\int$, двойной интеграл в LaTeX это $\iint$.

Во-вторых, внизу формулы есть подпись - её можно поставить с помощью команды \underbrace{формула}_{подпись}. Подпись под буквой можно вставить, воспользовавшись командой \text{текст}, которая на время выключит математический режим в формуле и вставит текст.

В-третьих, собственно, в LaTeX перенос формул на новую строку можно выполнить обычной командой \\ и это избавит от необходимости использовать окружение eqnarray, о котором чуть ниже.

Так же можно отметить маленькую, но очень изящную команду \cdot, которая наберёт вам маленькую точечку умножения вместо этой страшной вордовской *. Так же в этом примере показано, как поставить пробел в формуле LaTeX, а именно командой \; то есть $dx_0 dy_0 \; g(x_0, y_0)$.

Большие и страшные формулы в несколько строк

Если формула очень длинная и в строку не помещается, используем окружение \begin{eqnarray} ... \end{eqnarray}, а переносы формулы на другую строку делаем с помощью двойного слеша \\ и в результате получаем:
\begin{eqnarray}
J_\lambda(x_2, y_2, s_2) =
\iint K_\lambda(x_2, y_2) \cdot \Bigl| m_\lambda
\left(
\frac{x_2-x_0}{\lambda \cdot s_2} , \frac{y_2-y_0}{\lambda \cdot s_2}\right)\Bigr|^2 \,dx_0\,dy_0 = \nonumber \\
= K_\lambda(x_2, y_2) \otimes \Bigl| m_\lambda \left( \frac{x_2}{\lambda \cdot s_2} , \frac{y_2}{\lambda \cdot s_2} \right) \Bigr|^2
\end{eqnarray}
 
Здесь стоит отметить команду \Bigl| для отрисовки вертикальной линии - после Bigl стоит прямая скобка | и именно она отрисовывает линию в формуле. Конструкция \Bigl ... \Bigr позволяет ставить в формулах LaTeX большие скобки, и не только скобки: в данном случае приведён пример с модулем.

Окружение eqnarray позволяет набирать длинные формулы и нумеровать перенесённые на новую строку части формулы. По умолчанию номер ставится после каждой части формулы, перенесённой на новую строку. Если нумеровать кусок не нужно - ставим директиву \nonumber перед переносом формулы \\.

Формулы в LaTeX с несколькими вариантами (формула зависит от значения переменной)

Нам нужно вставить перечисление возможных значений формулы в зависимости от значения переменной, например:

Для этого стоит использовать окружение \begin{matrix} для набора таких сложных формул:

\begin{equation}
    \begin{matrix}
    \hat{\Phi}[k,l] & =
    & \left\{
    \begin{matrix}
    0 & \mbox{if } k,l = 0 \\
    S_x[k,l]\cdot H_x[k,l] + S_y[k,l]\cdot H_y[k,l] & \mbox{otherwise }
    \end{matrix} \right.
    \end{matrix}
\end{equation}

Следует отметить, что конструкция с \left{ работать не будет.

Заключение

Разумеется, это далеко не полное руководство по набору формул, но я думаю, что прочтение это поста поможет кому-то быстро включиться (а мне - вспомнить) про набор основных формул в LaTeX.
Читать далее

Набор таблиц в ЛаТеХе: Tables in LaTeX



48 коммент.
Этот пост является частью большой статьи
"Как оформить диплом в LaTeX?",
которую написал virens,
ведущий блога "Записки дебианщика".


Этот пост написан давно, но всё ещё актуален:
Автор заходил править этот пост 6 октября 2013 года.

При наборе таблиц в LaTeX, как нигде, нужна правильная организация кода - таблицы это то, что в ТеХе делать сложнее всего. И если вы свалите в кучу все управляющие метки ЛаТеХа, то потом будете проклинать всё на свете. Здесь каждый выбирает свой стиль по своему вкусу, однако надо постараться отличать управляющие символы от собственно текста таблицы.
Кое-кто из комментаторов ниже распалялся по поводу того, что, дескать, ``всё уже давно написано, читайте книжки''. Я ещё раз уточню свою позицию по этому поводу: время тыкания людей в пудовые талмуды и дурно написанные мануалы прошло. Документация, как и программы, должны быть повёрнуты к пользователю лицом. Методические пособия типа этого помогут людям начать разбираться с предметом, подталкивая к изучению книг и делая кривую обучения более пологой.
Так как вёрстка таблиц в ЛаТеХ - дело не для слабонервных, лучше предварительно набросать на листке бумаги или графическом редакторе примерную схему таблицы. Делать наброски карандашом всегда проще, чем с воем и рыданиями переделывать код таблицы.

Небольшое введение в ЛаТеХнические таблицы

Таблица в LaTeX в идеологическом смысле очень похожа на рисунок: есть окружение \begin{table}... \end{table}, которое собственно и содержит все ``опознавательные знаки'' вроде подписи и ссылки, и собственно сама таблица \begin{tabular}{|rlc|} ... \end{tabular}.

Поэтому окружений для создания таблиц в LaTeX два: \begin{tabular}{|rlc|} ... \end{tabular}, которое управляет тем, как выглядит таблица, и \begin{table}... \end{table}, которое даёт вам возможность оформить заголовок таблицы с помощью команды \caption{} и поставить на таблицу ссылку с помощью привычной команды \label{}.


Набор простой таблицы в LaTeX

Например, если нам не требуется ссылка на таблицу или подпись под ней, тогда достаточно только окружения \begin{tabular}... \end{tabular}. Окружение tabular создаст простую таблицу, без подписи и ссылки. Вот пример кода простой таблицы в ЛаТеХе.

\begin{center}
\begin{tabular}{ccc}
Расширение краёв: & \textbf{1,0-1,4} & размер ФРТ \\
Аподизация: & \textbf{0,25-0,30} & размер ФРТ \\
Сглаживания краёв: & \textbf{0,25-0,50}& размер ФРТ \\
\end{tabular}
\end{center}
 
Колонки отделяются символом &, строки в таблице заканчиваются двойным слешем \ после крайней колонки. А вот как таблица выглядит в документе:


Здесь есть партизанская засада: если вы внутрь окружения tabular поставите метку командой \label{}, а потом сошлётесь на неё, то получите совсем не то, что ждёте. Ссылка в тексте укажет на номер раздела, а вовсе не таблицы.

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

\begin{table}[H]
\caption{Исправьте это на подпись к таблице}
\label{tabular:timesandtenses}
\begin{center}
\begin{tabular}{ccc}
Расширение краёв: & \textbf{1,0-1,4} & размер ФРТ \\
Аподизация: & \textbf{0,25-0,30} & размер ФРТ \\
Сглаживания краёв: & \textbf{0,25-0,50}& размер ФРТ \\
\end{tabular}
\end{center}
\end{table}
 
Вот как это выглядит в документе:


Вроде как то же самое, только номер теперь стал 1.1. Простановка ссылок осуществляется так же, как и всегда, то есть: поставить ссылку в LaTeX можно командой \label{tabl:Textssylki} а сослаться на неё командой \ref{tabl:Textssylki}. Не забываем ставить тильду между словом и ссылкой слово~\ref{tabl:Textssylki} чтобы ваша ссылка не уехала на другую строчку.


Управление видом таблицы в LaTeX

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

Точное размещение таблиц

Окружение table позволит вам указывать LaTeX, где вы хотите видеть таблицу:
  1. оставить определение места таблицы в тексте на усмотрение ЛаТеХа - \begin{table}[h] "хотелось бы таблицу здесь";
  2. настойчиво просить разместить таблицу после текста \begin{table}[h!] "очень хочу таблицу здесь", или
  3. ударить кулаком по столу - таблицу тут \begin{table}[H], то есть "хочу таблицу именно здесь и баста"
    • с прибавлением буквы p мы заставляем поместить ЛаТеХ таблицу отдельно на страницу так: \begin{table}[pH].
    • добавление букв t или b заставляют LaTeX поместить таблицу \begin{table}[tb!] вверху или внизу, соответственно.

Размеры колонок в таблице LaTeX

Сама по себе таблица находится в окружении \begin{tabular}{|rlc|} ... \end{tabular}. Здесь вертикальная линия обозначает отделение линией столбцов, а R L и С выравнивание соответственно по правому / левому краю и по центру.

Если столбец слишком широкий, можно задать его ширину с помощью выражения p{0.7\linewidth}, которое сделает столбец шириной в 70\% от ширины линии, например так: \begin{tabular}{|p{0.4\linewidth}p{0.4\linewidth}} сделает таблицу с двумя колонками по 40\% от ширины линии и отчеркнёт вертикальными линиями по бокам.

Строки отделяются друг от друга при помощи команды \hline а каждая строка таблицы завершается двойным слешем \\ или командой \linebreak.

Подписи и ссылки на таблицы
Вставка подписи к таблице \caption{Исправьте это на подпись к таблице} и ссылки на таблицу \label{tabular:timesandtenses} делается так же, как и для рисунков. То есть сначала \caption{Исправьте это на подпись к таблице} а после этого вставляем \label{tabular:timesandtenses} для того, чтобы потом сослаться на таблицу \ref{tabular:timesandtenses} в тексте.
Важное замечание о порядке следования \label и \caption Если поставить \label{tab:some_table} до \caption{...}, то даже при использовании окружения table в ссылке будет выдаваться не номер таблицы, а номер раздела.
Напоминаю снова и снова о необходимости ставить понятные и информативные ссылки, чтобы вы сами смогли потом понять, где то место, куда вы ссылаетесь. Ставим длинные и подробные имена ссылок, чтобы потом не искать по Тайге ris21 или tabl43. Никаких оправданий таким именам ссылок нет, и дядя Кнут будет недоволен.


Объединение нескольких колонок в одну

Иногда нужно объединить несколько колонок в одну на какой-то строке и убрать вертикальные линии для этого, например, чтобы сделать пояснения. В визуальных табличных редакторах типа OpenOffice.Calc это просто, но так как ЛаТеХе - это вообще говоря язык программирования, то здесь придётся немного сложнее. Для этого нужно воспользоваться командой \multicolumn.

Синтаксис у команды простой: \multicolumn{2}{|c|}{Результаты измерений} означает, что мы объединяем 2 (два) столбца в таблице, получившаяся ячейка будет центрирована и нарисованы вертикальные линии. В объединённой колонке на той строке, где мы поместим команду \multicolumn, будет текст Результаты измерений. Вот как это выглядит в коде:

\begin{table}[H]
\caption{\label{tab:canonsummary}Измерительные характеристики цифровой камеры Canon EOS 400D.}
\begin{center}
\begin{tabular}{|c|c|}
\hline
Параметр & Значение \\
\hline
Разрешение & $3888 \times 2592$ \\
Размер сенсора & $22.2 \times 14.8$ мм \\
АЦП & 12~bit\\
\hline
\multicolumn{2}{|c|}{Результаты измерений} \\
\hline
Темновое смещение (BLO) & 256 \\
Максимальный линейный сигнал & 3070~DN \\
Значение насыщения & 3470~DN \\
\hline
\end{tabular}
\end{center}
\end{table} 
 
А вот как эта таблица будет выглядеть в документе:


Это может пригодиться особенно в длинных таблицах, которые простираются на несколько страниц и которые нужно переносить со страницы на страницу.


Многостраничные таблицы

Время от времени таблицы становятся длинными до неприличия и не влезают в одну страницу. Чтобы сделать многостраничную таблицу в LaTeX, используем пакет расширений \usepackage{longtable}, который подключаем в преамбуле документа (там, где остальные команды типа \usepackage). В остальном всё то же самое, как и раньше, только используем окружение longtable вместо table. Вот пример:

\begin{longtable}[H]{lp{0.7\linewidth}}
$A$ & area of the (geometrical) pixel [m\textsuperscript2] \\
$c$ & Speed of light $\approx 3 \cdot 10^8$ m/s \\
$DYN_{in}$ & Input dynamic range [1] \\
$DYN_{out}$ & Output dynamic range~[1] \\
$E$ & irradiance on the sensor surface~[W/m\textsuperscript2] \\
$F$ & Non-whiteness coefficient \\
$h$ & Planck's constant h $\approx6.63 \cdot 10^{-34} Js$ \\
$K$ & overall system gain~[DN/e-] \\
$k_d$ & Doubling temperature of the dark current~[$^\circ$C] \\
$N_d$ & dark current~[e-/s] \\
$N_{d30}$ & dark current for a housing temperature of $30^\circ C$~[e-/s]\textsuperscript2 \\
$S_g^2$ & variance coefficient of the spatial gain noise~[\%] \\
\end{longtable} 
 
Вот как это выглядит в документе:



Стоит упомянуть, что если столбец слишком широкий, можно задать его ширину вот так: \begin{longtable}[h]{lp{0.7\linewidth}} с помощью выражения p{0.7\linewidth}, которое сделает столбец шириной в 70% от ширины линии.



Поворот таблицы в LaTeX

Ну и под занавес приведу пример достаточно сложной таблицы, которая повёрнута на 90 градусов (таблица в ландшафтной ориентации в ЛаТеХе). Поворот сделан при помощи команды \rotatebox{90}{я - объект} что обеспечивает поворот любого объекта на 90 градусов. Так как данные структурированы и код организован достаточно логично, редактировать таблицу относительно просто. 

\rotatebox{90}{ %это обеспечивает поворот любого объекта
\begin{minipage}{1.5\linewidth}
\begin{table}[H]
\caption{Сравнение количественных данных по влиянию искажений на результат декодирования}
\begin{center}
\begin{tabular}{|p{5cm}c|c|}
\hline
\multicolumn{3}{|c|}{\textbf{Графические изображения}}\\
\hline
\textbf{Характеристика} & \textbf{8-битные} & \textbf{16-битные}\\
\hline
\multicolumn{3}{|c|}{Влияние шумов квантования}\\
\hline
Шумы квантования
& $6.3 \div 22.6\%$
& $0.2 \div 0.5\%$ \\
\hline
\multicolumn{3}{|c|}{Влияние шумов фотоприёмника}\\
\hline
Шумы фотоприёмника
& $8.8 \div 87.5\%$
& $7.1 \div 87.6\%$ \\
\hline
\multicolumn{3}{|c|}{Влияние особенностей ФРТ}\\
\hline
декодирование ФРТ той же реализацией шума
& $6 \div 13\%$
& $0.5 \div 15\%$ \\
\hline
декодирование ФРТ с другой реализацией шума
& $6 \div 14\%$
& $0.3 \div 12\%$ \\
\hline
декодирование идеальным ФРТ
& $6 \div 6.5\%$
& $0.2 \div 6.4\%$ \\
\hline
\end{tabular}
\end{center}
\end{table}
\end{minipage}} 
 
Вот как таблица выглядит в документе:


Есть и другие команды для поворота объектов в LaTeX, например turn из пакета rotating. Преимущество команды \rotatebox в том, что она содержится в пакете \usepackage{rotating} и обычно graphicx уже подключён для отображения иллюстраций в LaTeX.

Заключение

В этом разделе я собрал все примеры таблиц, которые использовал в реальных документах. Этого должно хватить для того, чтобы оформить простые таблицы в LaTeX. Более сложные таблицы описаны в постах:
Главное - не лениться структурировать код таблицы, и тогда таблицы в ЛаТеХе не превратятся для вас в камеру пыток.

Читать далее