<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Interlace</id>
		<title>Linuxformat - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Interlace"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:Contributions/Interlace"/>
		<updated>2026-05-13T11:53:52Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF90:LaTeX</id>
		<title>LXF90:LaTeX</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF90:LaTeX"/>
				<updated>2008-03-18T19:53:31Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: {{Цикл/LaTeX}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Цикл/LaTeX}}&lt;br /&gt;
== Путеводитель по классам LaTeX ==&lt;br /&gt;
''{{oncolor||red|ЧАСТЬ 7}} Подобно Золушке, ставшей принцессой, документ LaTeX может несколько раз сменить свой класс за время существования. Многообразие классов LaTeX способно смутить любого – но '''Евгений Балдин''' предлагает их полную классификацию.''&lt;br /&gt;
&lt;br /&gt;
Класс документа – это первое, что требуется указать при наборе. В то же время первое вовсе не значит важное. С заключительным выбором класса почти всегда можно повременить до окончания основного набора. С другой стороны, выбирать всё равно когда-нибудь придётся, так что нелишне знать, что может нам предложить LaTeX.&lt;br /&gt;
&lt;br /&gt;
== {{oncolor||red|Зачем нужны эти классы?}} ==&lt;br /&gt;
&lt;br /&gt;
Класс документа выбирается с помощью команды {{oncolor||red|documentclass}}. Её нужно и можно выполнить ровно один раз в самом начале документа:&lt;br /&gt;
&lt;br /&gt;
 \documentclass[a4paper,12pt]{article}&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF90-LaTeX-1.png|thumb|(Рис. 1) Класс papertex - пример от автора класса Ignacio Liopis]]В качестве обязательного аргумента указывается имя класса, которому через запятую передаются необязательные параметры. Класс определяется в файле с расширением '''.cls'''. В дистрибутиве ''LaTeX TeX Live 2005'' присутствует 175 уникальных файлов с подобным расширением. Естественно, это далеко не все существующие на белом свете классы, тем более, что никто не мешает вам создать свой личный класс. Но для начала лучше все же воспользоваться одним из имеющихся.&lt;br /&gt;
&lt;br /&gt;
Класс определяет вид и структуру документа. Класс – это база, которую можно править с помощью подключаемых стилевых файлов. В классе задаётся геометрия страницы и определяются команды секционирования. Сам по себе класс может быть как просто небольшой модификацией уже имеющегося, так и принципиально новой реализацией представления печатного или электронного TeXнического слова. В качестве примера последнего можно привести молодой (2007 год) пока пакет {{oncolor||red|papertex}}, который позволяет применять ''LaTeX'' в деле вёрстки газет, то есть для того, для чего ''LaTeX'' в проекте вовсе не предназначался. Сам пакет можно найти на любом CTAN-архиве в директории '''{CTAN}/macros/LaTeX/contrib/papertex/'''.&lt;br /&gt;
&lt;br /&gt;
== {{oncolor||red|Классовая база}} ==&lt;br /&gt;
&lt;br /&gt;
Исторически сложилось так, что LaTeX начался с 6 классов: {{oncolor||red|article}} (статья), {{oncolor||red|book}} (книга), {{oncolor||red|report}} (отчёт), {{oncolor||red|proc}} (доклад), {{oncolor||red|letter}} (письмо) и {{oncolor||red|slides}} (слайды).&lt;br /&gt;
&lt;br /&gt;
По идее, статьи следовало набирать в {{oncolor||red|article}}. В этом классе определены команды секционирования вплоть до {{oncolor||red|section}} (раздел). Одним из желательных элементов оформления является предисловие (окружение {{oncolor||red|abstract}}). В классе {{oncolor||red|book}} присутствует расширенный набор команд секционирования, в который добавлена команда {{oncolor||red|chapter}} (глава). Также в классе {{oncolor||red|book}} присутствует базовый набор команд для оформления титульного листа, предисловия и оглавления. Класс для создания отчёта {{oncolor||red|report}} является упрощённой версией класса {{oncolor||red|book}}. Отчёты – те же книги, только читают их по необходимости, а не по желанию. Класс {{oncolor||red|proc}}, предназначенный для создания тезисов докладов, в свою очередь является модификацией класса {{oncolor||red|article}}, причём основное отличие состоит в обязательной двухколоночной печати. Для написания писем был создан класс {{oncolor||red|letter}}. Набор команд в этом классе существенно отличается от уже перечисленных, в частности, для писем нет нужды в командах секционирования. Класс {{oncolor||red|slides}} – простой и быстрый способ сделать презентацию. С помощью этого класса не удастся создать пёстрого фона и головокружительных эффектов смены слайдов, зато он позволяет сосредоточиться на основном – на тексте.&lt;br /&gt;
&lt;br /&gt;
Особняком от этих классов стоит класс {{oncolor||red|minimal}}, который является «болванкой» для создания и тестирования новых классов и идей. В классе {{oncolor||red|minimal}} не определено никаких специальных команд – минимум есть минимум. В качестве побочного эффекта документ, выбирающий этот класс, транслируется ''LaTeX'' значительно быстрее.&lt;br /&gt;
&lt;br /&gt;
С этих классов всё начиналось, но на них ничего не закончилось. Следует понимать, что базовые классы далеко не так хороши, как хотелось бы. После трансляции текста сразу возникает желание взять в руки «электронный надфиль» и пройтись по настройкам класса. Это цена за то, что перечисленные классы являются базовыми. На них ссылается и их модифицирует множество других классов и пакетов, поэтому их развитие было заморожено. Для начального набора сгодится и это, но для конечной вёрстки лучше подобрать что-то более подходящее, или придётся серьёзно модифицировать значения по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Часто набор необязательных параметров для стандартных классах используется и в других классах, например, в целях совместимости. Некоторые из полезных опций перечислены ниже:&lt;br /&gt;
* '''10pt|11pt|12pt''' – установка базового размера шрифта. Обычно этих трёх значений хватает.&lt;br /&gt;
* '''a4paper''' – установка размера листа бумаги. Следует использовать всегда, так как по умолчанию ''LaTeX'' использует размер листа {{oncolor||red|letter}}.&lt;br /&gt;
* '''draft''' – режим черновой печати для «отлавливания» проблем вёрстки. В этом режиме не внедряются картинки (вместо них вставляются прямоугольники нужного размера) и отмечаются строчки, где алгоритм разбиения абзаца на строки даёт осечку.&lt;br /&gt;
* '''oneside|twoside''' – форматирование документа для односторонней и двухсторонней печати, соответственно.&lt;br /&gt;
* '''twocolumn''' – печать в две колонки.&lt;br /&gt;
&lt;br /&gt;
== {{oncolor||red|Классификация}} ==&lt;br /&gt;
                                                                              &lt;br /&gt;
Сразу предупрежу: число классов постоянно растёт, поэтому не следует думать, что все имеющиеся варианты исчерпываются классами, перечисленными ниже.&lt;br /&gt;
                                                                              &lt;br /&gt;
=== Модификации и улучшения базы ===&lt;br /&gt;
&lt;br /&gt;
Стандартные классы не нравятся всем, и всякий старается их улучшить. Кто-то убирает какой-то конкретный недостаток, как это сделано в наборе классов {{oncolor||red|extsizes}} ({{oncolor||red|extarticle, extbook, extletter, extproc, extreport}}), которые отличаются от стандартных только возможностью указать базовый размер шрифта, отличный от обычного {{oncolor||red|10-12pt}}. Есть наборы классов, которые делались с какой-то определённой целью. Примером такого подхода являются классы от AMS ({{oncolor||red|amsart, amsbook, amsproc}}), которые используются для материалов, предназначенных для публикации в журналах Американского математического сообщества. Классы из набора {{oncolor||red|ntgclass}} представляют из себя «героическую» попытку немецкоговорящих голландцев сделать то же, что и в стандарте, но существенно разными способами.&lt;br /&gt;
&lt;br /&gt;
=== KOMA-Script ===&lt;br /&gt;
&lt;br /&gt;
В последнее время всё больше внимания обращает на себя набор классов KOMA-script. В этот раз хорошо постарались немцы. Следует учитывать, что европейские традиции полиграфии (в основном французские), всё-таки ближе к нам, чем американские, на которые традиционно ориентировалось ''LaTeX''-сообщество. Для статей предполагается использовать {{oncolor||red|scrartcl}}, для книг {{oncolor||red|scrbook}}, для писем {{oncolor||red|scrlttr2}}, а для отчётов {{oncolor||red|scrreprt}}.&lt;br /&gt;
&lt;br /&gt;
В отличие от стандарта, классы из KOMA-script позволяют использовать базовые размеры шрифта в 9pt, 14pt и 17pt. Огромные поля, имеющие место в стандартных классах, в классах KOMA-script значительно уменьшены. Претерпели изменения и другие элементы. Если оформление по умолчанию не кажется адекватным, то KOMA-script предоставляет обширный набор высокоуровневых настроек. Подробная документация на более чем двухстах страницах «The KOMA-Script bundle» ('''scrguien.pdf''') позволяет подстроить все необходимые параметры.&lt;br /&gt;
&lt;br /&gt;
=== NCC ===&lt;br /&gt;
&lt;br /&gt;
Ещё один вариант замены стандартных классов – это использование пакета NCC. Очень подробно об этом пакете написано в замечательной книге от создателя NCC Александра И. Роженко: ''«Искусство верстки в LaTeX’е»'', 2005 (ISBN 5-901548-25-6).&lt;br /&gt;
&lt;br /&gt;
Для использования следует загрузить класс {{oncolor||red|ncc}} и передать ему желаемый стиль оформления в качестве параметра: {{oncolor||red|article}} (статья – используется по умолчанию), {{oncolor||red|preprint}} (препринт), {{oncolor||red|book}} (монография) или {{oncolor||red|report}} (отчёт). Дальнейшие подробности об использовании этого класса можно почерпнуть в краткой инструкции к пакету: '''nccLaTeX.pdf'''.&lt;br /&gt;
&lt;br /&gt;
=== Поддерживаем стандарты ===&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF90-LaTeX-2.png|thumb|(Рис. 2) Страница документации к eskdx]]Стандарт подразумевает наличие подробного описания, которое и является его сущностью. То, что написано на бумаге в виде набора непротиворечивых правил, может быть переведено на язык машины. Далее можно забыть про эти правила, так как помнить все нюансы – работа для машины5 '''(Рис. 2)'''.&lt;br /&gt;
&lt;br /&gt;
Константин Кориков создал и активно поддерживает пакет ''eskdx'', который представляет из себя набор классов и стилей, предназначенный для вёрстки документации в соответствии с требованиями «Единой системы конструкторской документации». Основу коллекции составляют три класса: {{oncolor||red|eskdtext}} (для текстовой документации), {{oncolor||red|eskdbtab}} (для чертежей и схем) и {{oncolor||red|eskdgraph}} (для документов, разбитых на графы). Внятная документация на русском ('''eskdx.pdf''') приятно дополняет картину. Пакет можно найти на CTAN в директории '''{CTAN}/macros/LaTeX/contrib/eskdx/''', а его домашняя страничка расположена по адресу: http://lostclus.linux.kiev.ua/eskdx/.&lt;br /&gt;
&lt;br /&gt;
''eskdx'' – относительно молодой пакет. Ранее аналогичная попытка была предпринята Вячеславом Фёдоровым, в результате которой на свет появился пакет eskd (без «x» на конце). В отличии от класса Константина Корикова, класс {{oncolor||red|eskd.cls}} требует обязательной установки шрифтов из коллекции {{oncolor||red|pscyr}}.&lt;br /&gt;
&lt;br /&gt;
Стандарт для написания документов, описывающих стандарты. Что может быть ещё более стандартным? Класс {{oncolor||red|isov2.cls}} из пакета iso является стандартом для стандартов. Документация к пакету '''isoman.pdf''' подробно описывает все технические тонкости в деле подготовки документов по стандартам ISO. Аналогично, для создания документации ISO 10303 есть свой пакет iso10303.&lt;br /&gt;
&lt;br /&gt;
=== Пишем письма ===&lt;br /&gt;
&lt;br /&gt;
Класс {{oncolor||red|letter}} является стандартным для ''LaTeX'' и, как следствие, никто им не пользуется. Часто стандарт для написания писем создаётся автором самостоятельно. Так, например, любит делать Кнут. Это очень неплохо работает в силу того, что структура письма не слишком сложна. Как следствие, в ''LaTeX'' имеется огромное число альтернатив для {{oncolor||red|letter}}.&lt;br /&gt;
&lt;br /&gt;
С точки зрения английского FAQ по ''LaTeX'' (http://www.tex.ac.uk/faq) класс {{oncolor||red|newlfm}} является наиболее продвинутым. {{oncolor||red|lfm}} расшифровывается как {{oncolor||red|letter}} (письмо), {{oncolor||red|fax}} (факс) и {{oncolor||red|memorandum}} (служебная записка). Документация представляет из себя текстовый README и набор примеров использования.&lt;br /&gt;
&lt;br /&gt;
Хорошо документированный класс {{oncolor||red|akletter}} также является хорошим шаблоном для старта. Документация '''lettereng.pdf''', кроме краткой инструкции, также включает и формальное описание структуры письма.&lt;br /&gt;
&lt;br /&gt;
Упомянутый выше пакет KOMA-script предоставляет прекрасную замену стандартному классу {{oncolor||red|letter}} в виде {{oncolor||red|scrlttr2}}. Набор классов {{oncolor||red|ntgclass}} также предоставляет свой вариант в виде класса {{oncolor||red|brief}}.&lt;br /&gt;
&lt;br /&gt;
Кроме более-менее общих решений, полно и частных. Например, для внутренней переписки университета города Падуя есть специальный пакет {{oncolor||red|cdpbundl}}, содержащий целых три класса.&lt;br /&gt;
&lt;br /&gt;
=== Верстаем книги ===&lt;br /&gt;
&lt;br /&gt;
Написание книги – это очень долгий процесс, и первоначальную «набивку» текста можно начать со стандартного класса {{oncolor||red|book}}. С другой стороны, структура книги может быть очень сложной, и правильный выбор базового класса позволит несколько облегчить процесс созидания.&lt;br /&gt;
&lt;br /&gt;
В качестве улучшенного стандартного класса {{oncolor||red|book}} можно использовать класс {{oncolor||red|octavo}}. Класс {{oncolor||red|scrbook}} из KOMA-script также является хорошей альтернативой для {{oncolor||red|book}}. Структура и основные команды копируют стандартный класс. Значения же параметров по умолчанию более адекватны для европейской полиграфии.&lt;br /&gt;
&lt;br /&gt;
Описание класса {{oncolor||red|memoir}} ('''memman.pdf''') представляет из себя книгу о создании книги, превышающую по объёму триста страниц. Там есть всё, начиная от формальной структуры печатной книги, советов по оформлению электронных копий, и заканчивая собственно описанием класса. Все элементы структуры и управляющие размеры показаны в виде рисунков и схем. Класс не является надстройкой над чем-либо – это произведение искусства, созданное с нуля. Документацию следует пролистать хотя бы просто для ознакомления. Класс развивается до сих пор. Новые возможности описываются в дополнении к основной документации ('''memmanadd.pdf'''), и на текущий момент дополнение почти достигло объёма в сто страниц.&lt;br /&gt;
&lt;br /&gt;
Если не требуется написать книгу, а нужно распечатать мегабайтный текст на дешёвеньком принтере в режиме экономии тонера, то для этого дела вполне может подойти класс {{oncolor||red|sffms}} – простенько и строки через два интервала.&lt;br /&gt;
&lt;br /&gt;
=== Создаём отчёты ===&lt;br /&gt;
&lt;br /&gt;
Отчёт – не книга, но и здесь есть свои правила и структура. Для начала можно воспользоваться {{oncolor||red|scrreprt}} из KOMA-script, как замена стандартному классу {{oncolor||red|report}}.&lt;br /&gt;
&lt;br /&gt;
Инженер-электронщик Эли Биллауэр [Eli Billauer] сделал ''LaTeX''-класс для бумаг в HiTech-стиле и назвал его, соответственно, hitec. Простенько и со вкусом. Есть, естественно, и частные решения. Хочется заключить контракт с американским правительством – стандартная форма 298, обеспечиваемая классом {{oncolor||red|sffms}}, будет вполне кстати. Класс {{oncolor||red|manual}} из пакета {{oncolor||red|nassflow}} даст возможность пообщаться со структурой под названием «Center for the Automation of Weapon and Command Systems, Royal Netherlands Navy» [Центр автоматизации вооружения и командных систем Королевских ВМФ, Нидерланды].&lt;br /&gt;
&lt;br /&gt;
=== Делаем презентации ===&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF90-LaTeX-3.png|thumb|(Рис. 3) prosper в действии]]В начале предполагалось, что цель презентации состоит в распространении нужной информации от одного человека ко многим. Поэтому во главу угла ставился текст, а «украшательства» сводились к простой рамке. Стандартные классы {{oncolor||red|seminar}} и {{oncolor||red|sides}} вполне годились для этого.&lt;br /&gt;
&lt;br /&gt;
Но время суровых докладчиков прошло, и «рюшечки» вышли на первый план. ''LaTeX'' может предоставить и «рюшечки», но лучше всётаки помнить о смысле.&lt;br /&gt;
&lt;br /&gt;
Класс {{oncolor||red|prosper}} создан как улучшенный {{oncolor||red|seminar}} и поддерживает не только оверлеи, гиперссылки и шаблоны оформления, но и «стандартный» набор динамических эффектов доступных через формат pdf. Вспомогательный класс {{oncolor||red|ppr-prv}} позволяет создать печатную версию электронных слайдов класса prosper.&lt;br /&gt;
&lt;br /&gt;
В пакет {{oncolor||red|texpower}} входит класс {{oncolor||red|powersem}}, который, по сути дела, просто загружает {{oncolor||red|slides}}, а всю работу по созданию презентации выполняет стиль {{oncolor||red|texpower}}. Возможности этого пакета сравнимы с {{oncolor||red|prosper}} – просто он немного другой.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF90-LaTeX-4.png|thumb|(Рис. 4) beamer – справится даже школьник. Изготовлено учеником 11 класса А.Ф. Зайковым самостоятельно. На ошибки не фыркаем! Школьник всё-таки.]]В последнее время в деле создания презентации всё популярнее и популярнее становится относительно молодой, но довольно мощный класс {{oncolor||red|beamer}}. Активная поддержка сообщества при создании этого пакета позволила автору beamer Тилу Тантау (Till Tantau) собрать в одном месте немало тем для слайдов. Ключевой особенностью этих тем является разнообразие. Наличие широкого выбора стандартных тем позволяет быстро выбрать обрамление для презентации. Более чем 200 страниц документации ускоряют решение любой возникшей проблемы.&lt;br /&gt;
&lt;br /&gt;
Для создания презентаций можно настроить даже WYSIWYM-редактор ''LyX''. Для этого следует воспользоваться ещё одним достаточно молодым, но уже вполне функциональным классом {{oncolor||red|powerdot}}, в комплекте с которым идут настройки для ''LyX''.&lt;br /&gt;
&lt;br /&gt;
Класс {{oncolor||red|talk}}, в отличие от упомянутых выше пакетов, позволяет пользователю определить более одного стиля слайдов для презентации. Резкая смена стиля во время доклада – иногда бывает нужно и такое.&lt;br /&gt;
&lt;br /&gt;
Для создания настенного постера в первом приближении можно воспользоваться пакетом {{oncolor||red|a0poster}}, который позволяет работать с большими форматами бумаги. Канонического класса, который бы решал все проблемы при изготовлении постера, в ''LaTeX'' на текущий момент не существует. Возможно, ближе всего к идеалу подошёл класс {{oncolor||red|sciposter}} из одноимённого пакета.&lt;br /&gt;
&lt;br /&gt;
=== Защищаем диссертации ===&lt;br /&gt;
&lt;br /&gt;
Раньше всюду были курсовые и дипломные работы, а теперь, куда ни плюнь, везде диссертации. Каждый уважающий, не сильно уважающий и вообще не уважающий себя университет имеет свой уникальный стиль оформления диссертации. Если хочется написать свой класс, то в качестве отправной точки можно выбрать {{oncolor||red|ucthesis}} от Калифорнийского университета (UC Berkeley).&lt;br /&gt;
&lt;br /&gt;
Станислав Кручинин озадачился судьбами русскоговорящих диссертантов и создал класс {{oncolor||red|disser}}. Пакет с одноимённым названием можно взять на CTAN в директории '''{CTAN}/macros/LaTeX/contrib/disser'''. Следует учесть, что пользовательская документация на текущий момент отсутствует. С другой стороны, диссертанты, по идее, люди неглупые и разберутся в имеющихся примерах.&lt;br /&gt;
&lt;br /&gt;
=== Организуем резюме ===&lt;br /&gt;
&lt;br /&gt;
Написание резюме или curriculum vitae – довольно популярный вид деятельности в современном мире. Для резюме нет общепринятого стандарта, но некоторые указания существуют.&lt;br /&gt;
&lt;br /&gt;
Европейская комиссия рекомендует определённый формат для составления резюме, и этот формат полностью реализуется с помощью класса {{oncolor||red|europecv}}. Класс {{oncolor||red|vita}} представляет собой конструктор для создания резюме. Несмотря на отсутствие документации, разобраться с ним по имеющимся примерам для IT-специалиста и певца не составит сложности. Класс {{oncolor||red|curve}}, напротив, обладает качественной документацией. Механизм рубрик позволяет классу curve поддерживать несколько резюме разной направленности и легко переключаться между ними. Современный класс {{oncolor||red|morderncv}} рекомендуется как гибкое и простое средство создания резюме как современного вида, так и классической формы. Пакет можно взять на CTAN в директории '''{CTAN}/macros/LaTeX/contrib/moderncv'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF90-LaTeX-5.png|thumb| (Рис. 5) Класс moderncv.]]Следует отметить, что классы определяют многое, но далеко не всё. Поэтому после выбора класса можно подключить стили, которые серьёзно поменяют внешний вид документа. Стиль {{oncolor||red|currvita}} позволяет создавать резюме в окружении стандартных классов.&lt;br /&gt;
&lt;br /&gt;
=== Журнальные и конференционные классы ===&lt;br /&gt;
&lt;br /&gt;
Каждый серьёзный научный журнал и крупная конференция имеет свой ''LaTeX-класс''. Обычно этот класс лежит где-то на официальном сайте, например, журналы, издаваемые издательством МАИК «Наука/Интерпериодика», должны следовать правилам, выложенным здесь: http://www.maik.ru/pub/tex/. Но довольно много журнальных классов можно найти в стандартном дистрибутиве LaTeX. Например, класс {{oncolor||red|asaetr}} используется в American Society for Agricultural Engineers (ASAE). Maple Technical Newsletter можно создавать с помощью класса {{oncolor||red|mtn}}. Классом {{oncolor||red|jpsj2}} отметились японцы. Из русскоязычных журналов замечен только «Сибирский журнал вычислительной математики» – класс {{oncolor||red|sibjnm}}.&lt;br /&gt;
&lt;br /&gt;
Следует отметить класс {{oncolor||red|elsart}}, обязательный для подготовки журнальных публикаций в издательстве Elsevier. Класс {{oncolor||red|nature}} позволит подготовить pdf-файл для журнала Nature. Часто при создании публикаций для журналов или конференций используются небольшие модификации класса {{oncolor||red|revtex4}}.&lt;br /&gt;
&lt;br /&gt;
Для объединения разных документов в один, например, для оформления трудов конференции, может пригодиться класс {{oncolor||red|combine}}.&lt;br /&gt;
&lt;br /&gt;
=== Всякая всячина ===&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF90-LaTeX-6.png|thumb|(Рис. 6) Что-то определённо тибетское – класс pecha.]]Далеко не все классы подчиняются уже перечисленной классификации. За рамки темы вышли классы для составления календарей, обложек для CD ({{oncolor||red|cd}}), вопросников ({{oncolor||red|qcm}}), объявлений о занятиях ({{oncolor||red|assignment}}), концертных программок ({{oncolor||red|ConcProg}}), программ курсов ({{oncolor||red|courseoutline}} и {{oncolor||red|coursepaper}}), рабочего журнала для биологов ({{oncolor||red|labbook}}), пьес ({{oncolor||red|stage}}), тибетских карточек ({{oncolor||red|pecha}}), карточек для запоминания иностранных слов ({{oncolor||red|flashcards}}), и для многого другого. Старые и давно не поддерживаемые классы могут не собраться в новом окружении, но исходные тексты доступны, так что их всегда можно довести до необходимой кондиции.&lt;br /&gt;
&lt;br /&gt;
== {{oncolor||red|Заключение}} ==&lt;br /&gt;
&lt;br /&gt;
Классов существует много – места в статье мало. Малая толика из упомянутых классов будет рассмотрена в последующих статьях цикла. Это не является проблемой, так как в чём-чём, а в отсутствии документации к пакетам ''LaTeX'' обвинить невозможно – ну, почти. [http://www.linuxformat.ru LXF]&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/Linuxformat:%D0%9F%D0%BE%D1%80%D1%82%D0%B0%D0%BB_%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0</id>
		<title>Linuxformat:Портал сообщества</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/Linuxformat:%D0%9F%D0%BE%D1%80%D1%82%D0%B0%D0%BB_%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0"/>
				<updated>2008-03-18T14:59:45Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Обязательно к прочтению: [[Информация для авторов]]&lt;br /&gt;
{| class=&amp;quot;standart&amp;quot;&lt;br /&gt;
|+Координационная таблица (красных ссылок)&lt;br /&gt;
|-&lt;br /&gt;
! ||Январь||Февраль||Март||Апрель||Май||Июнь||Июль||Август||Сентябрь||Октябрь||Ноябрь||Декабрь&lt;br /&gt;
|-&lt;br /&gt;
! 2005&lt;br /&gt;
| || || || || || || ||&lt;br /&gt;
| [[LXF70]]&lt;br /&gt;
| [[LXF71]]&lt;br /&gt;
| [[LXF72]]&lt;br /&gt;
| [[LXF73]]&lt;br /&gt;
|-&lt;br /&gt;
! 2006&lt;br /&gt;
| [[LXF74-75]]&lt;br /&gt;
| [[LXF76]]&lt;br /&gt;
| [[LXF77]]&lt;br /&gt;
| [[LXF78]]&lt;br /&gt;
| [[LXF79]]&lt;br /&gt;
| [[LXF80]]&lt;br /&gt;
| [[LXF81]]&lt;br /&gt;
| [[LXF82]]&lt;br /&gt;
| [[LXF83]]&lt;br /&gt;
| [[LXF84]]&lt;br /&gt;
| [[LXF85]]&lt;br /&gt;
| [[LXF86]]&lt;br /&gt;
|-&lt;br /&gt;
! 2007&lt;br /&gt;
| [[LXF87-88]]&lt;br /&gt;
| [[LXF89]]&lt;br /&gt;
| [[LXF90]]&lt;br /&gt;
| [[LXF91]]&lt;br /&gt;
| [[LXF92]]&lt;br /&gt;
| [[LXF93]]&lt;br /&gt;
| [[LXF94]]&lt;br /&gt;
| [[LXF95]]&lt;br /&gt;
| [[LXF96]]&lt;br /&gt;
| [[LXF97]]&lt;br /&gt;
| [[LXF98]]&lt;br /&gt;
| [[LXF99]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Следующие номера Linux Format являются &amp;quot;занятыми&amp;quot; &amp;amp;ndash; т.е. для них уже нашелся человек, желающий конвертировать их в формат Wiki:&lt;br /&gt;
&lt;br /&gt;
# [[LXF70|Linux Format 70, Сентябрь 2005]] [[Изображение:75%.png]]&lt;br /&gt;
# [[LXF71|Linux Format 71, Октябрь 2005]] [[Изображение:00%.png]]&lt;br /&gt;
# [[LXF72|Linux Format 72, Ноябрь 2005]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF73|Linux Format 73, Декабрь 2005]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF74-75|Linux Format 74-75, Январь 2006]] [[Изображение:00%.png]]&lt;br /&gt;
# [[LXF76|Linux Format 76, Февраль 2006]] [[Изображение:00%.png]]&lt;br /&gt;
# [[LXF77|Linux Format 77, Март 2006]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF78|Linux Format 78, Апрель 2006]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF79|Linux Format 79, Май 2006]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF80|Linux Format 80, Июнь 2006]] [[Изображение:00%.png]]&lt;br /&gt;
# [[LXF81|Linux Format 81, Июль 2006]] [[Изображение:75%.png]]&lt;br /&gt;
# [[LXF82|Linux Format 82, Август 2006]] [[Изображение:50%.png]]&lt;br /&gt;
# [[LXF83|Linux Format 83, Сентябрь 2006]] [[Изображение:50%.png]]&lt;br /&gt;
# [[LXF84|Linux Format 84, Октябрь 2006]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF85|Linux Format 85, Ноябрь 2006]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF86|Linux Format 86, Декабрь 2006]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF87-88|Linux Format 87-88, Январь 2007]] [[Изображение:00%.png]]&lt;br /&gt;
# [[LXF89|Linux Format 89, Февраль 2007]] [[Изображение:100%.png]]&lt;br /&gt;
# [[LXF90|Linux Format 90, Март 2007]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF91|Linux Format 91, Апрель 2007]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF92|Linux Format 92, Май 2007]] [[Изображение:00%.png]]&lt;br /&gt;
# [[LXF93|Linux Format 93, Июнь 2007]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF94|Linux Format 94, Июль 2007]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF95|Linux Format 95, Август 2007]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF96|Linux Fromat 96, Сентябрь 2007]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF97|Linux Format 97, Октябрь 2007]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF98|Linux Format 98, Ноябрь 2007]] [[Изображение:25%.png]]&lt;br /&gt;
# [[LXF99|Linux Format 99, Декабрь 2007]] [[Изображение:25%.png]]&lt;br /&gt;
&lt;br /&gt;
Следующие материалы или серии материалов также являются &amp;quot;занятыми&amp;quot;:&lt;br /&gt;
* Учебник Java, LXF84-LXF87/88 &amp;amp;ndash; выполнено&lt;br /&gt;
* Учебник Subversion ([[LXF70:Subversion1|части 1]],[[LXF70:Subversion2|2]]), LXF70 &amp;amp;ndash; выполнено&lt;br /&gt;
&lt;br /&gt;
Для пробы wiki-разметки: [[Песочница]]&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89:%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F_Firefox</id>
		<title>LXF89:Расширения Firefox</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89:%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F_Firefox"/>
				<updated>2008-03-18T14:59:20Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ТОП-10: расширения Firefox ==&lt;br /&gt;
''Общеизвестно, что Firefox умеет практически все – Linux Format решил разузнать у '''Ричарда Коббетта''', до каких высот можно поднять версию 2.0.''&lt;br /&gt;
&lt;br /&gt;
'''После выпуска ''Firefox 1.0 Mozilla'' Foundation предприняла три на редкость хитроумных шага. Во-первых, правильно продвигала свой продукт на рынке, поясняя миллионам людей, почему ''Internet Explorer'' и подобным ему браузерам место на свалке. Во-вторых, постаралась заставить ''Firefo''x работать блестяще – ну, тут объяснять нечего. В-третьих, реализовала расширения. То, что раньше было прерогативой крупных программных фирм, неожиданно пошло по рукам надомников, азартно принявшихся расширять и улучшать базовый механизм. Появились и проекты-малютки вроде интегрированных читалок новостных лент, и проекты-гиганты типа ''Songbird'', замещение ''iTunes'' на базе ''Mozilla''.'''&lt;br /&gt;
&lt;br /&gt;
В последующие два года от концепции ''Firefox'' как сугубо базового браузера, допускающего расширение возможостей, стали отходить, и каждая новая версия норовит впихнуть в ядро все больше функций, ранее отдаваемых на сторону. Например, версия 2.0 отобрала у расширений восстановление сессии и проверку орфографии. Тем не менее, тысячи расширений по-прежнему доступны в репозитории ''Mozilla''.&lt;br /&gt;
&lt;br /&gt;
Какое из них предпочесть? Это зависит от вашего вкуса и рода занятий. Конечно, есть расширения, без которых просто немыслимо обойтись, но есть и такие, что диву даешься, зачем вообще понадобилось их разрабатывать. К последним можно отнести расширение Abe Vigoda Status Alert – оно отслеживает, жив еще или нет Эйб Вигода [американский актер, которого пресса почему-то не раз по ошибке хоронила, – прим. пер.]. При полнейшем равнодушии сетевой публики это расширение ликвидировали, и никто по нему особо не скучал.&lt;br /&gt;
&lt;br /&gt;
Ограничившись обзором расширений первого типа, мы попробуем выбрать на странице https://addons.mozilla.org десять таких, которые наверняка понравятся читателям ''Linux Format''. Если мы пропустили ваше любимое, то это не со зла – напишите нам, и в другой раз мы его не забудем. Начнем с двух расширений, относящихся непосредственно к браузеру: одно – популярное, другое – не очень.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Firefox без границ ===&lt;br /&gt;
==== 1. Greasemonkey ====&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_35_4.jpg|thumb|right|200px|Заметили, как Greasemonkey переделал эту страницу? Окно блога – новая опция поверх базового интерфейса Flickr.]]&lt;br /&gt;
Начнем с Greasemonkey: ни одно расширение еще не завоевывало мир с такой быстротой. Загрузите его с https://addons.mozilla.org/firefox/748, зайдите на сайт его подключаемых скриптов http://www.userscripts.org и полюбуйтесь, что оно умеет делать. Каждый скрипт – фрагмент кода на языке JavaScript, запускаемый автоматически при входе на соответствующий сайт и способный на все, от радикального переформатирования страницы до наделения сайта новыми функциями. Например, любители сервиса Gmail смогут настроить его использование по ссылке '''mailto:''', добавить к тексту письма HTML-подпись, зашифровать почту, присвоить меткам цвета, убрать с глаз долой папку со спамом… и так далее, и тому подобное. Полный список скриптов приведен на страничке http://userscripts.org/tag/gmail. Мы обнаружили 48 скриптов для Gmail, около 200 – для Flickr, 78 – для Delicious и 118 – для Yahoo. Чтобы разобраться с написанием скриптов, зайдите на сайт http://www.diveintogreasemonkey.org. Надо отметить, что Opera также предлагает подобные скрипты (фактически, начав это делать даже раньше), под маловыразительным названием UserJS, но ни в какое сравнение с Greasemonkey он не идет.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 2. Nightly Tester Tools ====&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_35_2.jpg|thumb|right|200px|На вид Nightly Tester не очень красив, но очень скрашивает ожидание при обновлении расширений.]]&lt;br /&gt;
Следующий набор, Nightly Tester Tools, находится на http://users.blueprintit.co.uk/~dave/web/firefox/nightly.&lt;br /&gt;
&lt;br /&gt;
При установке каждое расширение объявляет, какая версия браузера ему нужна, и в случае несовпадения, отказывается работать – например, расширения ''Firefox 1.2'' не запустятся в ''Firefox 1.3''. Nightly Tester Tools позволяет пресечь эти разборки, разрешая запуск расширений, якобы несовместимых с текущей версией браузера. Поскольку немало расширений тихо отмирает, для пользователей это простейший способ разобраться, вправду ли произошло фатальное изменение или же они пали жертвой паранойи обновлений.&lt;br /&gt;
&lt;br /&gt;
Nightly Tester Tools разрабатывался под Windows, но сейчас имеет полную поддержку для Linux и интегрируется с системой ''Mozilla'' Talkback, а что всего ценнее, может формировать отчет в случае ошибок в работе. Правда, Nightly Tester Tools не пытается решать за расширения те проблемы, что вызываются сменой версии, а просто позволяет им запуститься. Так что сами следите, как бы чего не вышло.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Больше, чем Web ===&lt;br /&gt;
==== 3. FireFTP и Gmail Space ====&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_37_2.jpg|thumb|right|200px|FireFTP поддерживает FTP не хуже любого базового браузера.]]&lt;br /&gt;
FTP и RSS обусловили появление немалого количества расширений ''Firefox'', которые берут на себя черновую работу в Интернете. FTP через браузер – обычно тяжелая штука, но с FireFTP (https://addons.mozilla.org/firefox/684) вы можете получить приличное качество пересылки файлов откуда угодно. Но если вы любитель рискнуть или не имеете доступа к FTP, Gmail Space (https://addons.mozilla.org/firefox/1593) проделает примерно то же через пользовательскую запись Google Mail.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 4. Sage, NewsFox, The Wizz, Typing Tutor... ====&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_35_3.jpg|thumb|right|200px|С RSS от Sage, пульс всего мира на кончиках ваших пальцев.]]&lt;br /&gt;
Большинство расширений для чтения RSS обладают примерно одинаковыми возможностями, отличаясь разве что интерфейсом. Одно из старейших, прекрасно подходящее для пользователей, ценящих легкость – расширение Sage (http://sage.mozdev.org), оно отображает новости в формате газетной колонки.&lt;br /&gt;
&lt;br /&gt;
Расширение NewsFox (https://addons.mozilla.org/firefox/629) хотя и не вошло в нашу десятку, но тоже неплохое: оно отображает RSS-ленту через привычный трехпанельный интерфейс в окне браузера. А The Wizz вызвал нашу симпатию своей скромной саморекомендацией: «Неплохая читалка RSS и Atom». Хоть он и не кичится своими достоинствами, но прекрасно работает с большим количеством лент и легко интегрируется с механизмом подачи новостей в ''Firefox 2.0''.&lt;br /&gt;
&lt;br /&gt;
Мы могли бы упомянуть еще о многом. Есть ведь расширения и для обучения слепой печати – Typing Tutor (https://addons.mozilla.org/firefox/2828), и для составления списка покупок – Grocery List Generator (https://addons.mozilla/org), и для многопользовательской игры Pong через сеть (https://addons.mozilla.org/firefox/554). Интернет – это не только web, и Firefox делает от него ответвления во все новые сферы.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Закладки для всех ===&lt;br /&gt;
Закладки вроде бы простая вещь, но держать их под контролем на удивление сложно. Если вы не хотите потерять их при крахе системы, если вам нужны не просто ссылки на сайты или у вас больше одного компьютера, без расширений не обойтись. Мы выбрали два, с разными подходами.&lt;br /&gt;
&lt;br /&gt;
==== 5. Delicious Bookmarks ====&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_35_1.jpg|thumb|right|200px|Управляйте закладками в Интернете с помощью Delicious Bookmarks, но не забывайте, что они публичны.]]&lt;br /&gt;
Сейчас становится все популярнее держать закладки не у себя, а в сети, даже несмотря на сопутствующую угрозу безопасности. Для этого предлагается много сервисов, включая Chipmarks, Delicious и Google Notebook, и большинство из них работает через расширения ''Firefox''. Но мы выбрали Delicious Bookmarks (с https://addons.mozilla.org/firefox/3615). Обычно меню Bookmarks быстро обрастает невероятным количеством ссылок, в которых невозможно разобраться, а Delicious Bookmarks распределяет их по категориям. Чтобы пользоваться расширением, нужно зарегистрироваться на сайте http://del.icio.us, там и будут храниться ваши закладки (помимо ''Firefox'', еще одна причина им пользоваться – высокая активность сопутствующих проектов). Расширение официально одобрено Yahoo, а это увеличивает его шансы на долгожительство.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 6. StumbledUpon ====&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_36_3.jpg|thumb|right|200px|StumbleUpon – наркотик для любителей «растекаться мыслями по древу»: прыгать с ним по сайтам можно часами.]]&lt;br /&gt;
С другой стороны, для тех, кто ищет «то – не знаю что», есть StumbledUpon (http://www.stumbleupon.com), с почти четырьмя пустыми страницами. Это даже не новая панель инструментов, а наркотик! После его установки и регистрации на сайте, на панели инструментов вашего браузера появляется кнопка '''Stumble'''; нажав её, вы попадаете на web-страницу, выбранную случайным образом, но с учетом ваших интересов. Самое блестящее, что можно не просто указать тему, но и уточнить свой профиль, тут помогут кнопки '''Thumbs Up (Круто!)''' и '''Thumbs Down (Нафиг, нафиг...)'''. Если сайт вам понравился, нажмите первую, и программа подберет вам кучу аналогичных; а если нет, жмите вторую, и поиск продолжится; при этом ваш профиль обрастает подробностями. Можно выставлять страницам оценки или (при желании) общаться с единомышленниками.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Разработчикам ===&lt;br /&gt;
==== 7. Web Developer Toolbar ====&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_36_1.jpg|thumb|right|200px|Web Developer Toolbar разбивает сайт на компоненты, и легко найти тот, что хромает.]]&lt;br /&gt;
Понятно, что ''Firefox'' в первую очередь позаботился о web-разработчиках. Расширение Web Developer Toolbar (https://addons.mozilla.org/firefox/60) иметь просто необходимо. Его возможности неисчислимы: тут и отображение позиции и контура элементов страницы, и автоматическое масштабирование окна браузера для просмотра сайта в различных разрешениях экрана, и валидация HTML/CSS, и средства управления формами; чего только нет! Это отличный способ определить проблемы вашего сайта либо поглубже закопаться в другие. Если вы делаете сайты, без этого расширения и жизнь будет не мила.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 8. Plain Old Webserver ====&lt;br /&gt;
Ищете что покруче? Попробуйте POW (Plain Old Webserver, https://addons.Mozilla.org/firefox/3002), локальный сервер для вашего браузера. Он пока существует в ранней версии 0.06, но служит отличным примером одаренности расширений ''Firefox''. Он основан на JavaScript и поддерживает протокол HTTP Post, cookies, SQL и Ajax. Свой сайт с файлами вы можете защитить паролем, которых хранится в '''/home/USER/.Mozilla/firefox/default.NUMBER/pow/htdocs'''. Интересно, что уже разработаны расширения для POW. Одно из них, Breadcrumbs (https://addons.mozilla.org/firefox/2954), сохраняет посещенные страницы и встраивает в ''Firefox'' систему для их поиска на будущее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Развлечения ===&lt;br /&gt;
{{Врезка|&lt;br /&gt;
Заголовок=Выбери меня|&lt;br /&gt;
Содержание=Расширения ''Firefox'' – труд легионов разработчиков, приковавших себя к компьютерам, чтобы сделать Сеть чуточку комфортнее, и они не собираются складывать руки. Когда мы выбирали первую десятку расширений, мы не руководствовались ни отзывами о них, ни даже их возможностями. Насущно необходимое для одного может быть источником досады для другого. Мы просто хотели возможно полнее отразить многообразие достижений и тот потенциал, который делает ''Firefox'' лучшим из браузеров. А что в вашей первой десятке? Расскажите нам о своих фаворитах: '''letters@linuxformat.ru'''.|&lt;br /&gt;
Ширина=250px}}&lt;br /&gt;
''Firefox'' справляется с многими форматами мультимедиа, но он способен на большее. Например, есть расширение (https://addons.mozilla.org/Firefox/2478) для тех, кто следит за сериями американского мультика Homestar Runner (http://www.homestarrunner.com), есть просмотрщик фотографий Flickr на боковой панели (https://addons.mozilla.org/Firefox/1135), а можно интерактивно загрузить, отредактировать и разместить фотографии на главных сайтах-фотоколлекциях инструментом вроде помещенного на сайте http://www.picture2life.com (правда, он пока ждет обновления до версии ''Firefox 2.0'').&lt;br /&gt;
&lt;br /&gt;
==== 9. Fast Video Download ====&lt;br /&gt;
С точки зрения чистого удобства, мы просто обязаны были включить в наш обзор Fast Video Download (https://addons.mozilla.org/Firefox/3590). Это расширение добавит вам кнопку закачек видео-файлов с наиболее популярных сервисов, среди которых Google Video, MySpace и YouTube. Оно здорово экономит время, и при условии, что вы загружаете только клипы, доступные свободно, смело им пользуйтесь.&lt;br /&gt;
&lt;br /&gt;
==== 10. Performancing ====&lt;br /&gt;
А как насчет вашего вклада? Если вы ведете онлайн-дневник, вы можете создавать новые публикации в любом браузере; но специально для стандартных CMS-форм ПО не существовало. Расширение Performancing (http://www.performancing.com) позаботилось об этом: оно поддерживает большинство систем, включая Wordpress.com, TypePad, LiveJournal и MSN Spaces, с готовыми конфигурациями для ваших собственных: ''Drupal'', ''Movable Type'', ''Textpattern'' и ''Roller''. Если ни одна из них не сработает, можно попробовать соединиться через MetaWeblog и Blogger APIs.&lt;br /&gt;
&lt;br /&gt;
Редактор находится в нижней части экрана и не мешает вам продолжать серфинг, одновременно создавая публикацию. Это полезно при отправке новостей, а также при необходимости куда-нибудь сгонять за справкой. Поддерживаются закладки Delicious и статистика Metrics, сохраняется история публикаций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;gallery&amp;gt;&lt;br /&gt;
Изображение:Img_89_37_1.jpg|Fast Video Download немедленно загрузит любое видео. Мы надеемся, вы не будете этим злоупотреблять.&lt;br /&gt;
Изображение:Img_89_37_3.jpg|Отличный редактор блогов Performancing ухитряется держаться в окне ''Firefox'', не лишая вас свободы бродяжничать.&lt;br /&gt;
Изображение:Img_89_36_2.jpg|Редактор изображений Picture2Life, запущенный на локальном расширении сервера POW.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вот и вся наша первая десятка. Жаждете еще? Воспользуйтесь Data Analytics для обработки и извлечения данных из таблиц (https://addons.mozilla.org/Firefox/2010), или Deja Click (https://addons.mozilla.org/Firefox/3262) для автоматизации работы с браузером, или Fire Encrypter (https://addons.mozilla.org/Firefox/3208) для защиты ваших данных, или… или… или…&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_37_3.jpg</id>
		<title>Файл:Img 89 37 3.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_37_3.jpg"/>
				<updated>2008-03-18T14:38:32Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Расширения Firefox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Расширения Firefox&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_37_2.jpg</id>
		<title>Файл:Img 89 37 2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_37_2.jpg"/>
				<updated>2008-03-18T14:38:24Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Расширения Firefox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Расширения Firefox&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_37_1.jpg</id>
		<title>Файл:Img 89 37 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_37_1.jpg"/>
				<updated>2008-03-18T14:38:14Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Расширения Firefox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Расширения Firefox&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_36_3.jpg</id>
		<title>Файл:Img 89 36 3.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_36_3.jpg"/>
				<updated>2008-03-18T14:38:04Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Расширения Firefox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Расширения Firefox&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_36_2.jpg</id>
		<title>Файл:Img 89 36 2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_36_2.jpg"/>
				<updated>2008-03-18T14:37:54Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Расширения Firefox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Расширения Firefox&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_36_1.jpg</id>
		<title>Файл:Img 89 36 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_36_1.jpg"/>
				<updated>2008-03-18T14:37:44Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Расширения Firefox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Расширения Firefox&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_35_4.jpg</id>
		<title>Файл:Img 89 35 4.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_35_4.jpg"/>
				<updated>2008-03-18T14:37:32Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Расширения Firefox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Расширения Firefox&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_35_3.jpg</id>
		<title>Файл:Img 89 35 3.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_35_3.jpg"/>
				<updated>2008-03-18T14:37:22Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Расширения Firefox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Расширения Firefox&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_35_2.jpg</id>
		<title>Файл:Img 89 35 2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_35_2.jpg"/>
				<updated>2008-03-18T14:37:13Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Расширения Firefox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Расширения Firefox&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_35_1.jpg</id>
		<title>Файл:Img 89 35 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_35_1.jpg"/>
				<updated>2008-03-18T14:37:02Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Расширения Firefox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Расширения Firefox&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D0%BC_%D0%BD%D0%B0%D0%B2%D1%8B%D0%BA%D0%B8_Linux</id>
		<title>LXF89:Применяем навыки Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D0%BC_%D0%BD%D0%B0%D0%B2%D1%8B%D0%BA%D0%B8_Linux"/>
				<updated>2008-03-18T14:29:42Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Применяем навыки Linux ==&lt;br /&gt;
''Иногда приходится поработать и в других ОС. '''Грэм Моррисон''' изучает, окажется ли ваш Linux-стаж полезным при работе в MacOS X и Microsoft Windows.''&lt;br /&gt;
&lt;br /&gt;
'''Мы все вложили немало сил и времени, чтобы найти общий язык с Linux. Устанавливая свой первый дистрибутив, настраивая web-сервер в офисе или создавая среду разработки, мы постоянно открывали для себя что-то новое и чему-то учились. И в качестве читателей лучшего в мире журнала о Linux, мы счастливы тем, что наш опыт может постоянно обогащаться.'''&lt;br /&gt;
&lt;br /&gt;
Но насколько полезен этот опыт? Помогут ли приобретенные знания при работе в других операционных системах? Мы не предлагаем вам тут же ринуться в Windows или OS X, просто хотим узнать, в чем преимущества знатоков Linux на альтернативных ОС.&lt;br /&gt;
&lt;br /&gt;
=== Карьерный рост ===&lt;br /&gt;
Спрос на системных администраторов и разработчиков Linux сейчас неуклонно растет, но вакансий для администраторов Windows все-таки больше. И если у вас есть опыт обслуживания Apache, он пригодится вам под любой ОС – можете смело упоминать о нем в резюме. То же касается и прикладных программ. Привыкнув редактировать изображения в ''Gimp'' и работать с электронной почтой в ''Evolution'', легко позабыть, что на свете есть целый мир альтернативных приложений, где этот опыт обеспечит вам прочные позиции. Если вы уверенно работаете в Linux и за годы пользования сумели проникнуть в глубины ОС вашего выбора, приятно осознавать, что полученные знания помогут вам при неожиданной смене карьеры.&lt;br /&gt;
&lt;br /&gt;
Даже если какие-то навыки нельзя перенести в другую ОС, все равно знание Linux не было напрасным. Пользователю Linux невозможно удержаться от того, чтобы узнать, как на самом деле работает компьютер. Чем бы вы ни занялись – настройкой соединения по локальной сети, блокировкой порта в брандмауэре или восстановлением жесткого диска – вы всегда узнаете чуть больше о том, как все устроено.&lt;br /&gt;
&lt;br /&gt;
=== Заглянем вовнутрь ===&lt;br /&gt;
Но главная ценность этого опыта в достижении понимания общих принципов и закономерностей. Например, если почтовый клиент не принимает входящую почту по протоколу IMAP, вы сразу сообразите, что порт может быть просто закрыт на брандмауэре, если когда-то настраивали брандмауэр в Linux – даже если в другой ОС не смогли бы этот порт открыть.&lt;br /&gt;
&lt;br /&gt;
Чтобы разобраться, тяжкой ли покажется работа в других системах, мы сравнили функциональность по умолчанию, предлагаемую Linux и двумя другими ОС. Начнем с Apple OS X, как с более похожей на Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Apple OS X ==&lt;br /&gt;
''Пусть эта ОС и графическая, но командная строка здесь тоже полезна.''&lt;br /&gt;
&lt;br /&gt;
{{Врезка|&lt;br /&gt;
Заголовок=Полезные советы: OS X|&lt;br /&gt;
Содержание=&lt;br /&gt;
* '''Virtue Desktops''' Поддержка виртуальных рабочих столов запланирована на ближайший релиз OS X, но Virtue Desktops позволит вам использовать их уже сейчас. Это приложение с открытым исходным кодом, которое даже позволит скопировать и вставить ваш рабочий стол на грань пресловутого 3D-кубика.&amp;lt;br&amp;gt;http://virtuedesktops.info&lt;br /&gt;
* '''Fink''' Если вам жизнь не мила без приложений Gnome или KDE, поможет ''Fink''. Кроме 2000 поддерживаемых приложений, еще многие тысячи доступны из нестабильных репозиториев.&amp;lt;br&amp;gt;http://fink.sourceforge.net|&lt;br /&gt;
Ширина=40%}}&lt;br /&gt;
'''Apple OS X происходит от разработанной Стивом Джобсом [Steve Jobs] операционной системы Nextstep, которая включала код ядра Mach и Unix BSD. И хотя графическая среда OS X поневоле притягивает к себе все наше внимание, сейчас мы убедимся в том, что в этой ОС много общего с Linux. Интерфейс пользователя OS X – просто оболочка, под названием Aqua. Как и в Gnome или KDE, полный контроль можно получить парой щелчков мыши благодаря родному интерфейсу командной строки – под псевдонимом Terminal. Вход в него – через папку «Приложения» (Applications), затем «Утилиты» (Utilities), а его значок виртуально идентичен Gnome и KDE. Да и по сути разница невелика.'''&lt;br /&gt;
&lt;br /&gt;
Окно ''Terminal'' выглядит таким знакомым, потому что командная оболочка OS X – не что иное, как Bourne Again Shell, который мы ласково зовем ''Bash''. Поэтому любой, кто пользовался командной строкой Linux, будет в OS X, как дома. Сощурившись на экран, можно даже убедить себя, что никуда и не переходил; это одно из основных преимуществ OS X над Microsoft Windows. Вы сможете делать практически все, чему выучились в Linux, включая создание скриптов и употребление тех же команд.&lt;br /&gt;
&lt;br /&gt;
Основной различие между OS X и Linux кроется в структуре каталогов файловой системы. Правда, большинство файлов конфигурации все еще находится в папке '''/etc''', но домашние каталоги пользователей и системные файлы хранятся в совершенно других местах: в папке '''/Users''' и в папке '''/Applications''', соответственно.&lt;br /&gt;
&lt;br /&gt;
=== Фактор X11 ===&lt;br /&gt;
[[Изображение:Img_89_39_1.jpg|thumb|right|300px|Благодаря наличию X-сервера, Linux-приложения – например, ''Gimp'' – легко переносятся в OS X.]]&lt;br /&gt;
Благодаря близкому сходству Apple и Unix-подобных систем, есть и другие преимущества. Во-первых, разработчикам доступен компилятор GNU (''GCC''). Во-вторых, в OS X присутствует сервер X11; он основан на ''XFree86 4.4'', последним выпуском перед печально известным разветвлением, которое способствовало появлению линейки ''X.org'', применяемой многими линуксоидами.&lt;br /&gt;
&lt;br /&gt;
Если вы разработчик, вам будет гораздо проще с X11, чем с собственными инструментами Apple. Компания выпускает большое количество кода по собственной открытой лицензии (Apple Public Source Licence) и к большей части оборудования Apple прилагается второй диск с исходными текстами и бесплатной средой разработки, называемой ''Xcode''. Основной язык программирования в ней – Objective-C, также доставшийся в наследство от NextStep, но ''Xcode'' можно настроить и на C++ и даже интегрировать ее со свободно распространяемой версией библиотеки Qt. Впрочем, для создания кросс-платформенных решений лучшим вариантом будет открытая среда разработки ''Eclipse'', а для быстрой разработки приложений берите что-нибудь вроде ''Ruby on Rails''.&lt;br /&gt;
&lt;br /&gt;
В качестве отладчика в следующую версию OS X (10.5, кодовое название Leopard) будет включен открытый продукт ''DTrace'' фирмы Sun. Он станет реальным подспорьем разработчика; вдобавок Apple отправила его на Unix-сертификацию в The Open Group, а это обещает хорошую совместимость и упрощение кросс-платформенных разработок.&lt;br /&gt;
&lt;br /&gt;
Cервер X11 поддерживает аппаратное 2D- и 3D-ускорение. Преимущество этого сервера над «родным» для OS X Aqua – существенное упрощение переноса в OS X приложений из Linux/Unix: это лучший способ заполучить ''Gimp'', ''OpenOffice.org'', ''Ardour'' и даже использовать звуковой сервер Jack. Последним пользоваться на удивление просто: установите единственную панель управления, нажмите '''Play''' – и готово. При некоторой настройке оборудования пользоваться ''Ardour'', Jack и эффектами реального времени даже проще, чем в Linux. Все эти приложения доступны для загрузки в X11-совместимом варианте для оборудования Apple, и будут работать точно так же, как и оригинальные приложения в Linux.&lt;br /&gt;
&lt;br /&gt;
Для установки X-сервера в OS X вставьте первый инсталляционный диск, перезагрузите компьютер и выберите X11 в опциях программы установки. Сервер устанавливается довольно долго (лучше делать это одновременно с установкой OS X), но зато вам будут доступны все сливки Linux-приложений. X-сервер будет запускаться автоматически по запросу приложения. При этом на панели запуска Apple появится логотип X.&lt;br /&gt;
&lt;br /&gt;
Еще один приятный сюрприз – установленный на Mac по умолчанию сервер ''Apache 1.3''. Версия web-сервера, используемая в OS X, ничем не отличается от тех, которые поставляются с большинством дистрибутивов Linux, хотя многие уже переходят на версию 2.0. Можно установить и сервер ''Samba'', а клиент ''Samba'' вообще встроен в систему. OS X, может, и не лучшая платформа для серверов, но лучший выбор, если вы хотите обойтись вашим Linux-опытом.&lt;br /&gt;
&lt;br /&gt;
=== Прикладные программы ===&lt;br /&gt;
[[Изображение:Img_89_39_2.jpg|thumb|right|200px|Много новых функций Linux имеют сородичей в OS X: поисковая система ''Spotlight'' – аналог ''Beagle''.]]&lt;br /&gt;
Apple знаменит дружелюбием к дизайнерам, и если у вас стоит Mac, то не исключено, что вы выбрали его именно из-за ''Adobe Illustrator'', ''Photoshop'' или ''InDesign''. Эти пакеты – безусловные лидеры рынка, так что очернять их перед открытыми аналогами было бы не совсем справедливо. Однако, и проприетарные, и открытые приложения строятся по одинаковым принципам. Если вы работали в ''Gimp'' или ''Inkscape'', то без труда освоите ''Adobe Photoshop'' или ''Illustrator''. В основе и тех, и других лежат концепции слоев, фильтров и контуров, и палитры на панели инструментов выглядят почти одинаково. Конечно, некоторое время уйдет на освоение меню, но основные практические приемы работы вы уже изучили в Linux. То же относится и к утилитам рабочего стола. Например, поисковая система ''Spotlight'' имеет много общего с ''Beagle'', а виджеты рабочего стола похожи на ''SuperKaramba'' от KDE, так что в этом смысле OS X не слишком отличается от хорошо настроенного ПК с Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Microsoft Windows ==&lt;br /&gt;
''Linux опережает MS во многих областях – и это ваш козырь.''&lt;br /&gt;
&lt;br /&gt;
{{Врезка|&lt;br /&gt;
Заголовок=Полезные советы: Windows|&lt;br /&gt;
Содержание=&lt;br /&gt;
* '''Cygwin''' Популярная у разработчиков рабочая среда; под Windows, ближе нее к среде Unix/Linux ничего нет. Устанавливает X-сервер, инструменты ''GCC'' и библиотеки разработчика, а главное, ''Bash''! Она не так хорошо интегрирована, как ''Fink'' на Mac’ах, но все равно отличная штука.&amp;lt;br&amp;gt;http://www.cygwin.com&lt;br /&gt;
* '''Putty''' В Windows остро недостает клиента SSH. Имеются коммерческие версии, но ''Putty'' – очень удобная программа с открытым исходным кодом, работающая и в командном интерпретаторе Windows, и в собственном окне.&amp;lt;br&amp;gt;http://www.putty.nl|&lt;br /&gt;
Ширина=40%}}&lt;br /&gt;
'''При попытке применения в Windows опыта Linux сразу же берет тоска от отсутствия интерфейса командной строки: ни Bash, ни Csh, ни Terminal не притаились среди каких-нибудь Utilities. Вместо них мы получаем современный вариант краеугольного камня, на котором строилась империя Microsoft: MS-DOS.'''&lt;br /&gt;
&lt;br /&gt;
Возможности командной строки Windows (ярлык для ее запуска находится в меню «Стандартные») всегда уступали Unix-эквивалентам, и пользователи Windows годами, вплоть до появления Windows XP, были вынуждены вручную редактировать файлы конфигурации даже для того, чтоб добавить какое-нибудь пошлое запоминание истории команд. Недостает не только интерфейса – знакомых вам команд тоже нет: ''ls'', ''less'', ''ssh'', и уж, конечно, нет ''emacs'' или ''vi''; нет и команды для организации конвейера [здесь автор явно перегнул палку, – прим. ред.] Подход Windows отражает желание Microsoft упрятать внутренности своей ОС в Панель управления и системный реестр. Правда, можно установить кое-какие команды Unix, но от этого радости мало.&lt;br /&gt;
&lt;br /&gt;
=== Сервировка ===&lt;br /&gt;
[[Изображение:Img_89_40_1.jpg|thumb|right|200px|Привязка приложений типа ''Internet Explorer'' к определенным каталогам и областям памяти – концепция, не чуждая Linux.]]&lt;br /&gt;
Пусть в Windows вам не пригодятся ни навыки администрирования системы, ни приемы работы в командной строке – все равно вы обладаете знаниями, которые найдут применение. Вообще говоря, администрирование Windows сильно зависит от понимания взаимодействия компьютера с локальной сетью – позади брандмауэра или перед ним – и способа соединения пользователей с Интернетом. Но, как и в OS X, можно установить на компьютере открытый web-сервер и оказаться на родной почве. Можно спокойно запускать из-под Windows и ''Apache'', и PHP, и ''MySQL''; они весьма похожи на Linux-версии, разница только в файловой системе. А установить их будет даже проще: все сайты разработчиков предоставляют двоичные Windows-пакеты.&lt;br /&gt;
&lt;br /&gt;
Установить их просто, но потом никуда не деться от настройки; тут-то ваш линуксоидный опыт и предстанет во всем блеске (правда, надо помнить, что под Windows приложения будут устанавливаться в других каталогах – например, ''Apache'' помещается в '''Program Files'''). А вот при работе с собственными продуктами Microsoft уже понадобится знание теории: например, ''Microsoft SQL Server'' не слишком похож на ''MySQL'', хотя язык у них и общий (SQL).&lt;br /&gt;
&lt;br /&gt;
Даже продукты типа ''Microsoft Server 2003'' покажутся незнакомыми среднему линуксоиду: Server 2003 – версия операционной системы Microsoft, поставляемая с мощным серверным оснащением, включая ''Exchange'' для почты и мгновенных сообщений и ''SQL Server'' для баз данных. Все как в Windows, только игр нет.&lt;br /&gt;
&lt;br /&gt;
=== Разработчикам ===&lt;br /&gt;
[[Изображение:Img_89_41_1.jpg|thumb|right|200px|Осваивая любую новую ОС, первым делом знакомятся с ее файловой системой.]]&lt;br /&gt;
Многие приложения Linux перехватили инициативу от Windows-аналогов. Например, если вы накоротке с ''Evolution'', то легко справитесь с почтовым клиентом ''Microsoft Outlook''. То же относится к программе для обмена сообщениями ''MSN Messenger'', которая имеет много общего с ''Gaim'' и ''Kopete''. Под Windows, конечно, всегда можно воспользоваться ''Firefox'': ''Internet Explorer'' не покажется вам интуитивно понятным. Многие программы с открытым исходным кодом, в частности, ''Gimp'', ''Scribus'' и ''Inkscape'', портированы на Windows, существуют даже открытые Windows-приложения.&lt;br /&gt;
&lt;br /&gt;
Любителям программировать в Windows будет житься неплохо: здесь имеются прекрасные среды разработки, например, бесплатно распространяемые версии одной из лучших IDE – ''Visual Studio''. И с Visual Basic, и с C++ вам будет здесь хорошо. Основной язык и платформа Microsoft Windows – C#/.NET – портированы в Linux в рамках проекта Mono ([[LXF89:Спецрепортаж|см. стр. 22]]), но ''Visual Studio'' – настолько удачное средство для подобных разработок, что можно всерьез задуматься об использовании его вместо Linux. Если же вам нужна кросс-платформенная совместимость, то, как и в OS X, можно использовать одну из открытых сред разработки, например, ''Eclipse''.&lt;br /&gt;
&lt;br /&gt;
=== Перспективы Vista ===&lt;br /&gt;
[[Изображение:Img_89_41_2.jpg|thumb|right|200px|Настройка Vista может потребовать пароля администратора.]]&lt;br /&gt;
Microsoft проработала пять лет, решая накопившиеся с Windows проблемы, но догнать Linux не удалось – разве что вы не слишком обеспокоены сетевой безопасностью. По-прежнему можно работать в командной строке, появилась ''Windows Desktop Search'' – некое подобие локальной поисковой системы типа ''Spotlight'' от Apple или ''Beagle'' для Linux.&lt;br /&gt;
&lt;br /&gt;
Главные изменения заключаются в том, что Microsoft наконец ввела ограничение прав доступа для некоторых приложений. ''Internet Explorer'' запускается в «песочнице» по типу ‘root jail’, когда процесс имеет право доступа только к определенной директории или к заданной области памяти. Существенные изменения произошли и в управлении правами пользователя. Теперь для установки и удаления программного обеспечения или изменения конфигурации системы пользователь должен будет ввести пароль администратора. Именно так и работает Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== Вперед, к победе! ==&lt;br /&gt;
Если вам нужно переходить на другую ОС, или вы хотите слегка отдохнуть от Linux, лучшим вариантом, несомненно, будет OS X. Небольшие добавки: клиент SSH, приличный терминал, а также X11 – помогают освоиться здесь гораздо быстрее, чем в Windows. OS X дает наилучшую возможность применить ваши нажитые тяжким трудом Linux-таланты.&lt;br /&gt;
&lt;br /&gt;
Нельзя сказать, что под Windows эти таланты окажутся не у дел. Windows просто создает лишний уровень абстракции по сравнению с подходом Linux. Проблемы все те же, но их решение в Windows отстоит дальше от первопричин. Самое ценное, что вы получаете от Linux – это глубинное понимание происходящих процессов. Пусть процесс от вас скрыт, но причины проблем остаются теми же в любой ОС. Если вы сталкивались с ними в Linux, вы распознаете их везде. Выходит, незачем и покидать Linux.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; width=&amp;quot;50%&amp;quot;&lt;br /&gt;
|+'''«Какие технологии, к которым я привык в Linux, можно использовать в OS X или Windows?»'''&lt;br /&gt;
!Технология&lt;br /&gt;
!OS X&lt;br /&gt;
!Windows&lt;br /&gt;
|-&lt;br /&gt;
!X11&lt;br /&gt;
|Да||Нет&lt;br /&gt;
|-&lt;br /&gt;
!Bash&lt;br /&gt;
|Да||Нет&lt;br /&gt;
|-&lt;br /&gt;
!GCC&lt;br /&gt;
|Да||Да&lt;br /&gt;
|-&lt;br /&gt;
!Apache&lt;br /&gt;
|Да||Да&lt;br /&gt;
|-&lt;br /&gt;
!PHP&lt;br /&gt;
|Да||Да&lt;br /&gt;
|-&lt;br /&gt;
!MySQL&lt;br /&gt;
|Да||Да&lt;br /&gt;
|-&lt;br /&gt;
!SSH&lt;br /&gt;
|Да||Нет&lt;br /&gt;
|-&lt;br /&gt;
!.NET/Mono&lt;br /&gt;
|Нет||Да&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_41_2.jpg</id>
		<title>Файл:Img 89 41 2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_41_2.jpg"/>
				<updated>2008-03-18T14:18:51Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Настройка Vista может потребовать пароля администратора.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Настройка Vista может потребовать пароля администратора.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_41_1.jpg</id>
		<title>Файл:Img 89 41 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_41_1.jpg"/>
				<updated>2008-03-18T14:18:32Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Осваивая любую новую ОС, первым делом знакомятся с ее файловой системой.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Осваивая любую новую ОС, первым делом знакомятся с ее файловой системой.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_40_1.jpg</id>
		<title>Файл:Img 89 40 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_40_1.jpg"/>
				<updated>2008-03-18T14:17:56Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Привязка приложений типа Internet Explorer к определенным каталогам и областям памяти – концепция, не чуждая Linux.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Привязка приложений типа Internet Explorer к определенным каталогам и областям памяти – концепция, не чуждая Linux.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_39_2.jpg</id>
		<title>Файл:Img 89 39 2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_39_2.jpg"/>
				<updated>2008-03-18T14:17:05Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Много новых функций Linux имеют сородичей в OS X: поисковая система Spotlight – аналог Beagle.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Много новых функций Linux имеют сородичей в OS X: поисковая система Spotlight – аналог Beagle.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_39_1.jpg</id>
		<title>Файл:Img 89 39 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_39_1.jpg"/>
				<updated>2008-03-18T14:16:38Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Благодаря наличию X-сервера, Linux-приложения – например, Gimp – легко переносятся в OS X.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Благодаря наличию X-сервера, Linux-приложения – например, Gimp – легко переносятся в OS X.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89:PostgreSQL</id>
		<title>LXF89:PostgreSQL</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89:PostgreSQL"/>
				<updated>2008-03-18T14:07:21Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''История PostgreSQL''' Изучаем самый мощный из открытых серверов баз данных&lt;br /&gt;
&lt;br /&gt;
== Интерфейсы ==&lt;br /&gt;
''ЧАСТЬ 4: Интерфейсы, как известно, бывают не только пользовательскими, но и программными. С первыми мы уже успели познакомиться, а сегодня '''Евгений Балдин''' расскажет, какие API существуют для доступа к PostgreSQL из различных языков программирования.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;''В институте им очень дорожили, так как&amp;lt;br&amp;gt;попутно он использовался для некоторых&amp;lt;br&amp;gt;уникальных экспериментов и как переводчик&amp;lt;br&amp;gt;при общении со Змеем Горынычем.''&amp;lt;br&amp;gt;'''(О Кощее Бессмертном)'''&amp;lt;br&amp;gt;'''«Понедельник начинается в субботу»'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Понятно, что любую базу данных, в принципе, можно заполнить вручную; правда, некоторые придется заполнять очень долго. СУБД – это просто хранилище, а для заполнения и доступа к хранилищу необходима инфраструктура, и эту инфраструктуру надо создавать. Вот такая она – жизнь.&lt;br /&gt;
&lt;br /&gt;
Родной библиотекой для доступа к ''PostgreSQL'' является ''libpq''. Написана она на чистом C, что тоже не удивительно, так как это основной язык родной системы. Все остальные языки важны, но безусловно, вторичны.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libpq ===&lt;br /&gt;
Чтобы общаться с базой данных, много функций не требуется: одна для открытия соединения, одна для посылки запроса, одна для получения ответа и одна для закрытия соединения. В реальности, конечно, все немного сложнее, но суть остается неизменной.&lt;br /&gt;
&lt;br /&gt;
===== К вопросу о переносимости =====&lt;br /&gt;
Библиотека ''libpq'' написана на чистом C, поэтому связь с ''PostgreSQL'' можно организовать практически везде, где можно найти ''gcc''. Мне как-то пришлось делать это для VAX/VMS – все решилось методом тыка, даже думать почти не потребовалось. Все данные – текст, поэтому вопрос бинарной совместимости платформ попросту отсутствует.&lt;br /&gt;
&lt;br /&gt;
===== С чего начать =====&lt;br /&gt;
Чтобы воспользоваться вызовами ''libpq'', ее необходимо иметь в системе. В Debian (Sarge) для этого надо установить пакет ''PostgreSQL-dev'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; sudo apt-get install postgresql-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для доступа к функциям ''libpq'' необходимо включить в исходный текст соответствующие заголовки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include “libpq-fe.h”&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Скрипт ''pg_config'' (''man pg_config'') позволяет получить информацию о том, куда помещаются include-файлы, библиотеки и тому подобное. Для сборки можно также использовать скрипт ''libpq3-config'' (''man libpq3-config'' – годится, естественно, только для ''libpq'' третьей версии), который заведомо есть в Debian (Sarge):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt; #сборка программы&lt;br /&gt;
&amp;gt; gcc -o “бинарник” “исходник”.c -I`pg_config --includedir` \&lt;br /&gt;
-lpq `/usr/bin/libpq3-config`&lt;br /&gt;
&amp;gt; cat /usr/bin/libpq3-config&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo -lssl -lcrypto -lkrb5 -lcrypt -lresolv -lnsl -lpthread&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''libpq3-config'' просто выводит список всех библиотек, от которых зависит ''libpq''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Открытие и закрытие соединения ====&lt;br /&gt;
Даже открывать соединение с ''PostgreSQL'' можно двумя способами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//открыть соединение&lt;br /&gt;
PGconn *PQconnectdb(const char *conninfo);&lt;br /&gt;
//то же, но не блокируя программу&lt;br /&gt;
PGconn *PQconnectStart(const char *conninfo);&lt;br /&gt;
//проверка статуса соединения (после PQconnectStart)&lt;br /&gt;
PostgresPollingStatusType PQconnectPoll(PGconn *conn);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PQconnectdb''' – обычная функция, принимающая текстовую строку '''conninfo''', содержащую параметры для соединения с сервером, и возвращающая структуру типа '''PGconn''' с информацией о созданном соединении и успешности данной операции. В дальнейшем при передаче данных эта структура будет использоваться в качестве параметра.&lt;br /&gt;
&lt;br /&gt;
Передача информации о сервере в качестве строки ('''conninfo''') позволяет не менять внешний интерфейс вызова в случае появления дополнительных параметров и легко добавлять дополнительные опции. Пример открытия соединения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const char *conninfo= “dbname = test host=localhost”;&lt;br /&gt;
PGconn *conn=PQconnectdb(conninfo);&lt;br /&gt;
if (PQstatus(conn) != CONNECTION_OK) {&lt;br /&gt;
fprintf(stderr, “Не удалось соединиться с базой данных: %s”,&lt;br /&gt;
PQerrorMessage(conn));&lt;br /&gt;
/*завершаем работу*/ …}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры передаются в форме '''«ключевое слово»=«значение»'''. Пары разделяются обычным пробелом. Пробелы вокруг знака равенства можно опустить. Если необходимо передать значение с пробелами, то его необходимо заключить в одинарные кавычки '''‘«составное» «значение»’'''. Для передачи одинарной кавычки ее необходимо экранировать с помощью обратной косой черты '''\’'''. При отсутствии какого-либо параметра в строке '''conninfo''' его значение берется из соответствующей переменной окружения, если таковая определена. Если нет, то при открытии соединения используется значение по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Функции открытия соединения распознают следующие параметры и переменные окружения (кое-какие особенности опущены):&lt;br /&gt;
&lt;br /&gt;
* '''host''' DNS-имя узла, на котором находится сервер ''PostgreSQL''. Соответствует переменной окружения '''PGHOST'''. Значение по умолчанию: '''localhost'''.&lt;br /&gt;
* '''hostaddr''' Числовой адрес узла, на котором находится ''PostgreSQL'' (альтернатива '''host'''). Соответствует переменной окружения '''PGHOSTADDR'''. Значение по умолчанию эквивалентно: '''localhost'''.&lt;br /&gt;
* '''port''' Номер порта, который «слушает» '''POSTMASTER'''. Соответствует переменной окружения '''PGPORT'''. Значение по умолчанию обычно '''5432'''.&lt;br /&gt;
* '''dbname''' Имя базы данных. Соответствует переменной окружения '''PGDATABASE'''. Значение по умолчанию совпадает с системной учетной записью пользователя.&lt;br /&gt;
* '''user''' Имя пользователя базы данных. Соответствует переменной окружения '''PGUSER'''. Значение по умолчанию совпадает с системной учетной записью пользователя.&lt;br /&gt;
* '''password''' Поле пароля, если для аутентификации требуется пароль. Соответствует переменной окружения '''PGPASSWORD'''. Если аутентификация требуется, а поле не определено, то для доступа используются данные файла '''~/.pgpass'''. Переменная окружения '''PGPASSFILE''' может указать другой файл для проведения аутентификации.&lt;br /&gt;
* '''connect_timeout''' Устанавливает максимальное время ожидания соединения в секундах. С сервером и сетью всякое может случиться. Соответствует переменной окружения '''PGCONNECT_TIMEOUT'''. Значение по умолчанию равно '''0''', что означает бесконечное время ожидания. Не рекомендуется устанавливать значение ожидания меньше 2 секунд.&lt;br /&gt;
* '''options''' Опции, посылаемые непосредственно серверу, если таковые потребуются. Соответствует переменной окружения '''PGOPTIONS'''.&lt;br /&gt;
* '''sslmode''' Определяет порядок действий при SSL-соединении. Принимает четыре возможных значения:&lt;br /&gt;
** '''disable''' – без шифрования&lt;br /&gt;
** '''allow''' – сначала попробовать соединиться без шифрования, а в случае неудачи постараться установить защищенное соединение,&lt;br /&gt;
** '''prefer''' – сначала попробовать установить защищенное соединение, а в случае неудачи повторить соединение без шифрования,&lt;br /&gt;
** '''require''' – выполнять только защищенное соединение. Соответствует переменной окружения '''PGSSLMODE'''.&lt;br /&gt;
&lt;br /&gt;
Значение по умолчанию: '''prefer'''.&lt;br /&gt;
* '''krbsrvname''' Имя Kerberos-сервиса. Используется для аутентификации с помощью Kerberos-5&amp;lt;ref&amp;gt;&lt;br /&gt;
Kerberos — промышленный стандарт для аутентификации и взаимодействия в условиях незащищенного окружения. Алгоритмы Kerberos основаны на шифровании с использованием симметричного криптографического ключа и требуют наличия доверенного агента.&lt;br /&gt;
&amp;lt;/ref&amp;gt;. Это совершенно отдельная тема, выходящая за рамки данной статьи. Соответствует переменной окружения '''PGKRBSRVNAME'''.&lt;br /&gt;
* '''PGDATESTYLE''' Переменная окружения, позволяющая установить представление времени и даты по умолчанию. Соответствует SQL-команде '''SET datestyle TO …'''&lt;br /&gt;
* '''PGTZ''' Переменная окружения, позволяющая установить текущий часовой пояс. Соответствует SQL-команде '''SET timezone TO …'''&lt;br /&gt;
* '''PGCLIENTENCODING''' Переменная окружения, позволяющая установить кодировку клиента. Соответствует SQL-команде '''SET client_encoding TO …'''&lt;br /&gt;
&lt;br /&gt;
Существует целый класс функций, которые позволяют получить информацию о соединении. За подробностями следует обратиться к документации, но для начала полезно знать о двух из них:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ConnStatusType PQstatus(const PGconn *conn);&lt;br /&gt;
char *PQerrorMessage(const PGconn *conn);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''PQstatus''' возвращает информацию о том, как прошло соединение. Интересны состояния '''CONNECTION_OK''' – все хорошо и '''CONNECTION_BAD''' – ничего не вышло. Функция '''PQerrorMessage''' позволяет получить текстовую строку с описанием последней возникшей проблемы.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы разорвать соединение, используется функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void PQfinish(PGconn *conn);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Внимание!''' Соединения следует закрывать сразу же, как только в них отпадает необходимость. Число соединений, которые поддерживает '''POSTMASTER''', ограничено – очень легко парализовать работу базы данных, просто открывая новые соединения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SQL-запросы ====&lt;br /&gt;
Что ж, до сервера мы уже «дозвонились», теперь пора с ним «поговорить».&lt;br /&gt;
===== Выполнение запросов =====&lt;br /&gt;
Простейший способ выполнить ''SQL''-запрос – это воспользоваться функцией '''PQexec''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
PGresult *PQexec(PGconn *conn, const char *command);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В качестве параметров функции передается структура соединения '''conn''' и строка с ''SQL''-командой ''command''. Возвращается указатель на структуру типа '''PGresult''', где сохраняется информация, полученная от СУБД в ответ на запрос. При желании можно отсылать сразу несколько ''SQL''-команд в одном запросе, разделяя их ''';''' – точкой с запятой. В этом случае информация, сохраненная в структуре '''PGresult''', будет относиться только к последнему запросу.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=bond, но не Джеймс&lt;br /&gt;
|Содержание=&lt;br /&gt;
Лень писать все самому, но не лень изучать XML? Тогда ''BOND'' – это программа для Вас. Сайт проекта расположен по адресу: http://www.treshna.com/bond/.&lt;br /&gt;
&lt;br /&gt;
Рабочей частью пакета является исполняемый файл '''bondfrontend''', который осуществляет связь с базой данных и может «прикинуться» любой формой. Описание формы хранится в обычном XML-файле. Используемый диалект XML подробно описан в документации.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_87_1.jpg|thumb|center|300px|Формочки, XML (правда на заднем фоне и без подсветки) и связь с базой данных — это ''bond''.]]&lt;br /&gt;
&lt;br /&gt;
История пакета насчитывает уже пять лет. Программа доступна по дуальной лицензии: GPL – для использования со свободным ПО и коммерческой – для использования в проприетарном. Существует версия и для Windows.&lt;br /&gt;
&lt;br /&gt;
Перед инсталляцией ''bond'' следует внимательно прочесть README и установить все, что там перечислено. Сборка осуществляется с помощью ''scons'', который позиционируется как замена ''make'' с функциональностью ''automake/autoconf'' и синтаксисом от Python. Установка по умолчанию производится в '''/usr/local/'''. Для инсталляции (scons install) необходимы привилегии системного администратора. Затем можно приступать к чтению документации и изучению каталога examples.&lt;br /&gt;
|Ширина=320px}}&lt;br /&gt;
&lt;br /&gt;
По умолчанию, каждый '''PQexec''' открывает отдельную транзакцию, если явно не начать ее с помощью команды '''BEGIN'''. В последнем случае транзакция будет продолжаться либо до '''COMMIT''', либо до '''ROLLBACK'''.&lt;br /&gt;
&lt;br /&gt;
Есть более сложный вызов '''PQexecParams''', который позволяет передавать вызов и параметры к этому вызову раздельно. Таким образом исчезает необходимость самостоятельно формировать строку ''SQL''-команды и заботиться об экранировании данных, что важно в случае сохранения бинарных последовательностей. В качестве платы за соображения безопасности '''PQexecParams''' способен послать не более одной команды за раз.&lt;br /&gt;
&lt;br /&gt;
В некоторых случаях для увеличения скорости выполнения часто встречающихся запросов полезно обратить внимание на пару функций '''PQprepare''' и '''PQexecPrepared'''. Эти команды эквивалентны своим ''SQL''-аналогам '''PREPARE''' и '''EXECUTE'''. Идея оптимизации состоит в том, что прежде чем выполнить запрос, ''PostgreSQL'' сначала анализирует его, затем планирует порядок действий и только потом, собственно, выполняет запрос. Первые два этапа для похожих запросов с разными условиями отбора можно выполнить заранее с помощью команды '''PREPARE'''. Затем, с помощью команды '''EXECUTE''', можно выполнять подобные уже подготовленные (prepared) запросы.&lt;br /&gt;
&lt;br /&gt;
Все упомянутые выше команды работают с сервером БД синхронным образом, то есть посылают запрос и ждут ответа. Клиентское приложение на это время «засыпает». В ''libpq'' предусмотрен целый класс функций, предназначенный для асинхронных операций, не блокирующих клиентское приложение. Их применение усложняет код и логику программы, хотя все в пределах допустимого. С моей точки зрения, лучше организовать все так, чтобы время, использованное на ожидание результатов запроса, не влияло фатально на внешние процессы, и обеспечить бесперебойную работу сети и сервера базы данных.&lt;br /&gt;
&lt;br /&gt;
===== Информация о состоянии запроса =====&lt;br /&gt;
После выполнения запроса всегда интересно узнать, каково его состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ExecStatusType PQresultStatus(const PGresult *res);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На вход подается структура '''PGresult''', создаваемая в результате работы '''PQexec'''-подобных функций, а на выходе получаем информацию о состоянии в виде числа, значение которого можно сравнить со следующими константами:&lt;br /&gt;
&lt;br /&gt;
* '''PGRES_COMMAND_OK''' – все прошло хорошо (для запросов, которые не возвращают данные, например, '''INSERT'''),&lt;br /&gt;
* '''PGRES_TUPLES_OK''' – все прошло хорошо, плюс получены данные в ответ на запрос (для запросов типа '''SELECT''' или '''SHOW'''),&lt;br /&gt;
* '''PGRES_EMPTY_QUERY''' – строка запроса почему-то была пустой,&lt;br /&gt;
* '''PGRES_COPY_OUT''' – идет передача данных от сервера,&lt;br /&gt;
* '''PGRES_COPY_IN''' – идет передача данных на сервер,&lt;br /&gt;
* '''PGRES_BAD_RESPONSE''' – ошибка, ответ сервера не разборчив,&lt;br /&gt;
* '''PGRES_NONFATAL_ERROR''' – нефатальная ошибка: предупреждение (notice) или информация к сведению (warning),&lt;br /&gt;
* '''PGRES_FATAL_ERROR''' – при выполнении запроса произошла серьезная ошибка.&lt;br /&gt;
&lt;br /&gt;
Для получения более подробной информации об ошибке следует воспользоваться функцией&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
char *PQresultErrorMessage(const PGresult *res);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При вызове этой функции в качестве результата будет сформирована строка с информацией об ошибке или пустая строка, если все прошло хорошо.&lt;br /&gt;
&lt;br /&gt;
===== Получение данных =====&lt;br /&gt;
При получении данных предполагается, что статус запроса соответствует '''PGRES_TUPLES_OK'''. Теперь, если примерно известно, что хочется получить в результате запроса, то для получения данных достаточно четырех функций:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int PQntuples(const PGresult *res);&lt;br /&gt;
int PQnfields(const PGresult *res);&lt;br /&gt;
char *PQgetvalue(const PGresult *res,&lt;br /&gt;
    int row_number, int column_number);&lt;br /&gt;
int PQgetisnull(const PGresult *res,&lt;br /&gt;
    int row_number, int column_number);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первые две функции являются информационными и позволяют узнать, сколько строк получено в результате запроса ('''PQntuples''') и сколько в каждой такой строке колонок ('''PQnfields'''). Возьмите на заметку, что 0 строк – это тоже хороший результат.&lt;br /&gt;
&lt;br /&gt;
Функция '''PQgetvalue''' позволяет получить доступ к данным. В качестве параметров кроме структуры соединения ('''res''') передается номер строки ('''column_number''') и номер колонки ('''column_number'''). Все данные возвращаются (как и посылаются) в виде текстовой строки, то есть перед употреблением их необходимо перевести в привычный формат. Например, в случае целых чисел можно воспользоваться функцией '''atoi'''.&lt;br /&gt;
&lt;br /&gt;
Следует помнить, что данные ''SQL'' могут иметь неопределенное значение ('''NULL'''). Если подобная возможность существует, то перед получением значения следует проверить, определено ли оно. '''Pqgetisnull''' позволяет разобраться с этой проблемой. По передаваемым параметрам эта функция эквивалентна '''PQgetvalue''', а в качестве результата возвращает '''1''', если значение не определено, и '''0''', если определено.&lt;br /&gt;
&lt;br /&gt;
Кроме упомянутых выше, существует целый ряд функций, позволяющих получить информацию о данных, как то: имя колонки ('''PQfname'''), размер передаваемых данных в байтах ('''PQgetlength''') и тому подобное. Для экранирования специальных символов при операции с бинарными или текстовыми данными есть набор сервисных функций '''PQescape*'''.&lt;br /&gt;
&lt;br /&gt;
===== COPY =====&lt;br /&gt;
''SQL''-команда '''COPY''' является расширением, специфичным для ''PostgreSQL''. Основное преимущество ''SQL'' – «все есть понятный текст», в некоторых случаях, когда надо передавать большие объемы данных, оборачивается недостатком. Функции '''PQputCopyData''' и '''PQgetCopyData''' в ряде случаев позволяют значительно ускорить передачу данных между сервером и клиентом.&lt;br /&gt;
&lt;br /&gt;
===== Асинхронные сигналы =====&lt;br /&gt;
Стандартный ''SQL'' не предполагает взаимодействия разных пользователей, кроме как через изменение данных в таблицах. ''PostgreSQL'' позволяет посылать асинхронные сигналы с помощью команд '''LISTEN''' и '''NOTIFY'''. '''LISTEN “имя сигнала”''' передается серверу как обычная ''SQL''- команда. Если статус запроса становится равным '''PGRES_COMMAND_OK''', то это означает, что ранее был выполнен запрос '''NOTIFY “имя сигнала”'''. Если же инициализация сигнала ('''NOTIFY''') ожидается позже регистрации ('''LISTEN'''), то функция '''PQnotifies''' позволяет вновь проверить наличие сигнала после любого запроса.&lt;br /&gt;
&lt;br /&gt;
===== Сборка «мусора» =====&lt;br /&gt;
«Мусор» убирать придется руками. Каждая функция типа '''PQexec''' создает объект типа '''PGresult'''. После того, как вся необходимая информация о результатах запроса получена, следует освободить память, занимаемую этим объектом с помощью команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void PQclear(PGresult *res);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если утечки памяти вас не волнуют, то можно этого и не делать. В этом случае следует побеспокоиться о том, почему вас не беспокоят утечки памяти?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Большие объекты ====&lt;br /&gt;
Еще один способ сохранять неструктурированные данные в&lt;br /&gt;
''PostgreSQL'' – это сохранять их в больших объектах ('''Large Objects'''). ''PostgreSQL'' предоставляет интерфейс, схожий с файловым интерфейсом Unix: '''open''' ('''lo_open'''), '''read''' ('''lo_read'''), '''write''' ('''lo_write'''), '''lseek''' ('''lo_lseek''') и так далее. Все '''lo_*''' команды работают со значениями, полученными из колонки с типом '''oid''' – это специальный тип данных, который является ссылкой на объект произвольного типа. То есть последовательность работы с большим объектом следующая: создается большой объект ('''lo_create'''). Далее возвращаемый '''lo_create''' указатель '''oid''' используется для записи данных в большой объект ('''lo_import/lo_write'''), а затем этот указатель вставляется в таблицу с помощью стандартных ''SQL''-операторов. Чтение происходит в обратном порядке ('''lo_export/lo_read'''). Все операции с большими объектами должны происходить внутри транзакции.&lt;br /&gt;
&lt;br /&gt;
Следует отметить, что необходимость интерфейса больших объектов на текущий момент не так уж и очевидна. Стандартными средствами в ''PostgreSQL'' можно сохранять бинарные данные размером вплоть до 1 Гб, что вполне может соперничать с максимальным размером для большого объекта (2 Гб).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ECPG ===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
Чтобы не отставать от коммерческих баз данных, ''PostgreSQL'' имеет свой собственный вариант «встроенного ''SQL''». Эта технология позволяет смешивать обычный язык C с ''SQL''-структурами, примерно следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// файл test.pgc&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
// структура для обработки ошибок&lt;br /&gt;
EXEC SQL include sqlca;&lt;br /&gt;
// реакция в случае ошибки/предупреждения&lt;br /&gt;
EXEC SQL whenever sqlwarning sqlprint;&lt;br /&gt;
EXEC SQL whenever sqlerror do ExitForError();&lt;br /&gt;
void ExitForError() {&lt;br /&gt;
    fprintf(stderr,”Все, конец - это фатально.\n”);&lt;br /&gt;
    sqlprint();&lt;br /&gt;
    exit(1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
    // определение переменных, чтобы их можно было использовать&lt;br /&gt;
    // инструкциях ECPG&lt;br /&gt;
    EXEC SQL BEGIN DECLARE SECTION;&lt;br /&gt;
    const char *dbname = “test”;&lt;br /&gt;
    const char *user = “baldin”;&lt;br /&gt;
    VARCHAR FIO[128];&lt;br /&gt;
    VARCHAR NUMBER[128];&lt;br /&gt;
    EXEC SQL END DECLARE SECTION;&lt;br /&gt;
    // соединение с базой данных&lt;br /&gt;
    // внешние переменные предваряются двоеточием&lt;br /&gt;
    EXEC SQL CONNECT TO :dbname USER :user;&lt;br /&gt;
    // определение курсора через SELECT&lt;br /&gt;
    EXEC SQL DECLARE mycursor CURSOR FOR&lt;br /&gt;
    SELECT fio, number FROM fiodata,phonedata&lt;br /&gt;
    WHERE fiodata.id=phonedata.id;&lt;br /&gt;
    EXEC SQL open mycursor;&lt;br /&gt;
    // чтение данных из курсора&lt;br /&gt;
    EXEC SQL FETCH NEXT FROM mycursor INTO :FIO,:NUMBER;&lt;br /&gt;
    while (sqlca.sqlcode == 0) { // не 0, если данные больше нет&lt;br /&gt;
        printf(“ФИО: %s номер: %s\n”,FIO.arr,NUMBER.arr);&lt;br /&gt;
        EXEC SQL FETCH NEXT FROM mycursor INTO :FIO, :NUMBER;&lt;br /&gt;
    }&lt;br /&gt;
    // разъединение с базой данных&lt;br /&gt;
    EXEC SQL DISCONNECT;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все ''SQL''-команды начинаются с метки '''EXEC SQL'''. Она используется препроцессором ecpg как маркер для конструкций, подлежащих обработке. Внутри ''SQL''-команд можно использовать переменные C. Для этого перед ними необходимо поставить двоеточие «''':'''».&lt;br /&gt;
&lt;br /&gt;
Для компиляции выше процитированного файла ('''test1.pgc''') необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; # установить ecpg&lt;br /&gt;
&amp;gt; sudo apt-get install libecpg-dev&lt;br /&gt;
&amp;gt; # запустить препроцессор&lt;br /&gt;
&amp;gt; ecpg test1.pgc&lt;br /&gt;
&amp;gt; # скомпилировать получившийся файл&lt;br /&gt;
&amp;gt; gcc -o test1 test1.c -I`pg_config --includedir` -lecpg&lt;br /&gt;
&amp;gt; # проверить работоспособность программы&lt;br /&gt;
&amp;gt; ./test1&lt;br /&gt;
ФИО: Иванов И.П. номер: 555-32-23&lt;br /&gt;
ФИО: Балдин Е.М. номер: 555-41-37&lt;br /&gt;
ФИО: Балдин Е.М. номер: (+7)5559323919&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удобно это или нет – решайте сами.&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{{Врезка|Заголовок=PostgreSQL в лицах: Сергей Копосов|Содержание=&lt;br /&gt;
[[Изображение:Img_89_89_1.jpg|thumb|left|100px]]&lt;br /&gt;
'''Визитка LXF:'''&amp;lt;br&amp;gt;Дипломированный физик. Профессиональный астроном. Участник программы Google Summer of Code 2006. Домашняя страница: http://lnfm1.sai.msu.ru/~math/.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Евгений М. Балдин (ЕМБ): Что привлекло вас к разработке именно PostgreSQL?'''&lt;br /&gt;
&lt;br /&gt;
'''Сергей Е. Копосов (СЕК):''' Вначале я познакомился с ''PostgreSQL'' как пользователь. Причины были следующие: необходимо было работать с большим астрономическим каталогом (2MASS), который содержал более 200 миллионов звезд. Здесь без базы данных не обойдешься. То, что выбран был именно ''PostgreSQL'', связано с тем, что рядом были люди&amp;lt;ref&amp;gt;&lt;br /&gt;
Множество «эти люди» включало Олега Бартунова.&lt;br /&gt;
&amp;lt;/ref&amp;gt;, которые его уже использовали.&lt;br /&gt;
&lt;br /&gt;
А дальше все пошло по нарастающей. Начав работать с ''PostgreSQL'', я вдруг обнаружил, что в нем не существует способов, с помощью которых можно было бы быстро искать объекты на сфере. В итоге это сподвигло меня на создание проекта Q3C (''QuadTreeCube'' http://q3c.sf.net). Процесс работы над ним потребовал выйти за рамки стандартного ''PostgreSQL''. Например, мне были необходимы bitmap-индексы, а Том Лэйн [Tom Lane] их тогда только реализовывал. Из-за этого мне пришлось перейти на работу c CVS-версией ''PostgreSQL''. Во время разработки Q3C мне удалось заметить несколько проблем со скоростью работы bitmap’ов, которые позже были исправлены Томом.&lt;br /&gt;
&lt;br /&gt;
После интенсивной разработки Q3C я сильно «подсел» на списки рассылки ''pg-hackers'', ''pg-patches'', и я, в частности, написал несколько маленьких патчей для тех проблем в клиенте ''pSQL'', которые мне не нравились. Сначала автодополнение '''DROP~FUNCTION''', а потом улучшение работы ''pSQL'' c многострочными запросами. За последнее меня уже официально включили в список «Official contributors ''PostgreSQL''» – чем я несказанно горд [улыбка].&lt;br /&gt;
&lt;br /&gt;
'''ЕМБ: За что вас выбрали для участия в программе Summer of Code 2006, и чем эта эпопея закончилась?'''&lt;br /&gt;
&lt;br /&gt;
'''СЕК:''' Тут сложно сказать. На самом деле, предложенных на Summer of Code проектов было не так уж и много, а мой проект не был ни чрезвычайно сложным, ни очень простым. Была общая подсказка от Тома, в каком направлении реализовывать проект. Сам проект был вполне естественным улучшением уже существующей функциональности ''PostgreSQL'', реализующей к тому же одну из маленьких недостающих частей стандарта SQL:2003. К тому же я уже был хотя бы минимально, но известен в сообществе ''pg-hackers''.&lt;br /&gt;
&lt;br /&gt;
А закончилось все тем, что сейчас мой код по агрегатным функциям включен в CVS и будет в версии ''8.2 PostgreSQL''. За что, конечно, спасибо Тому Лэйну, который фиксировал и слегка корректировал код.&lt;br /&gt;
&lt;br /&gt;
'''ЕМБ: Вы – профессиональный астроном, и, судя по списку проектов, вы активно работаете по основному профилю. ''PostgreSQL'' не отвлекает от вашей деятельности?'''&lt;br /&gt;
&lt;br /&gt;
'''СЕК:''' Отвлекает. Очень. Поэтому пока я взял паузу в кодировании для ''PostgreSQL''. А дальше, поживем – увидим…&lt;br /&gt;
|Ширина=400px}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Все остальное ===&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=Азбука SQL: Г&lt;br /&gt;
|Содержание=&lt;br /&gt;
'''Управление доступом к данным'''&amp;lt;br&amp;gt;&lt;br /&gt;
Группа операторов ''SQL'', ответственных за дифференциацию пользователей путем предоставления и отмены привилегий, представляют из себя специализированный язык управления доступом к данным (Data Control Language).&lt;br /&gt;
&lt;br /&gt;
Привилегии для работу с таблицами базы данных предоставляются пользователям с помощью команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
GRANT «список привилегий»&lt;br /&gt;
    ON TABLE «имя таблицы» [, …]&lt;br /&gt;
    TO «пользователь» [, …]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Типы привилегий, которые можно предоставить пользователям:&lt;br /&gt;
* '''SELECT''' – разрешение на выполнение запроса на получение данных,&lt;br /&gt;
* '''INSERT''' – разрешение на добавление данных в таблицу,&lt;br /&gt;
* '''UPDATE''' – разрешение на изменение данных,&lt;br /&gt;
* '''DELETE''' – разрешение на удаление данных,&lt;br /&gt;
* '''REFERENCES''' – разрешение на создание ограничения по внешнему ключу,&lt;br /&gt;
* '''TRIGGER''' – разрешение на создание триггера,&lt;br /&gt;
* '''ALL''' – можно делать абсолютно все.&lt;br /&gt;
&lt;br /&gt;
Эти привилегии можно дать только в случае, если таблица уже существует. На создание таблицы тоже надо иметь право:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
GRANT CREATE&lt;br /&gt;
    ON DATABASE «имя базы данных» [, …]&lt;br /&gt;
    TO «пользователь» [, …]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для отмены уже имеющихся привилегий используется команда:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
REVOKE «список привилегий»&lt;br /&gt;
    ON «имя таблицы» [, …]&lt;br /&gt;
    FROM «пользователь» [, …]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|Ширина=350px}}&lt;br /&gt;
Эта статья называется «Интерфейсы», но большая часть ее посвящена только одному из них. Дело в том, что этот один является родным и наиболее полным, а все остальное – лишь подмножество. В простейшем случае все интерфейсы одинаковы: открыл соединение, послал запрос, обработал результаты, закрыл соединение. Также заметна энергосберегающая тенденция везде делать ровно один интерфейс на все типы СУБД.&lt;br /&gt;
&lt;br /&gt;
===== bash =====&lt;br /&gt;
Да, да к ''bash'' тоже есть свой интерфейс, правда для этого надо наложить специальный патч. Возни, конечно, немало – зато к базе данных можно будет обращаться прямо из shell-скриптов.&lt;br /&gt;
&lt;br /&gt;
Сайт проекта: http://www.psn.co.jp/postgresql/pgbash/index-e.html.&lt;br /&gt;
&lt;br /&gt;
===== Java =====&lt;br /&gt;
Совершенно ожидаемо, что Java общается с ''PostgreSQL'' стандартным образом, а именно через JDBC. Поэтому, если вы знакомы с Java [а если нет – зачем вам использовать ее для доступа к ''PostgreSQL''? – прим. ред.], то достаточно добыть драйвер JDBC для ''PostgreSQL'', например отсюда: http://jdbc.postgresql.org/. В Debian (Sarge) достаточно набрать&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; sudo apt-get install libpgjava&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и, прочитав README к пакету, приступить к работе.&lt;br /&gt;
&lt;br /&gt;
===== Lisp =====&lt;br /&gt;
Точнее, Common Lisp. Скорее всего, эти драйвера подойдут и для других диалектов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; sudo apt-get install cl-pg&lt;br /&gt;
#или&lt;br /&gt;
&amp;gt; sudo apt-get install cl-sql-postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй вариант является драйвером для единого интерфейса доступа к ''SQL''-базам данных из ''Common Lisp CLSQL'' (http://clsql.b9.com/).&lt;br /&gt;
&lt;br /&gt;
===== Perl =====&lt;br /&gt;
Интерфейс для связи с ''PostgreSQL'' DBD-Pg используется в Perl через DBI&amp;lt;ref&amp;gt;&lt;br /&gt;
DBI — унифицированный интерфейс для доступа к данным. Подробнее об этом пакете можно узнать на CPAN: http://search.cpan.org/~timb/DBI-1.52/DBI.pm&lt;br /&gt;
&amp;lt;/ref&amp;gt;. Все подробности доступны на CPAN: http://search.cpan.org/~dbdpg/dbd-pg/pg.pm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; sudo apt-get install libdbd-pg-perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DBD-Pg охватывает, фактически, все имеющиеся на сегодня возможности ''PostgreSQL'': от больших объектов ('''large objects''') до точек сохранения ('''savepoints''').&lt;br /&gt;
&lt;br /&gt;
===== PHP =====&lt;br /&gt;
О том как использовать ''PostgreSQL'' в PHP-проектах можно прочитать здесь: http://www.php.net/manual/en/ref.pgsql.php. Драйвер, скорее всего, тоже доступен в репозиториях дистрибутива:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; sudo apt-get install php4-pgsql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Говорят, почти единственной причиной, по которой PHP-разработчики предпочитают ''MySQL'', является то, что раньше не было «родной» версии ''PostgreSQL'' под Windows. Начиная с ''PostgreSQL 8.0'', конкретно этот довод «против» уже не работает.&lt;br /&gt;
&lt;br /&gt;
===== Python =====&lt;br /&gt;
Модуль для Python существует уже больше десяти лет. Подробности можно узнать здесь: http://www.druid.net/pygresql/. Установка модуля:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; sudo apt-get install python-pygresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Ruby =====&lt;br /&gt;
Кое-что можно прочесть здесь: http://ruby.scripting.ca/postgres/. Установка происходит как обычно:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; sudo apt-get install libdbd-pg-ruby&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ODBC =====&lt;br /&gt;
Разработка драйвера идет на pgFoundry. Аскетичная страничка проекта доступна по адресу: http://pgfoundry.org/projects/psqlodbc/. Установка:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; sudo apt-get install odbc-postgresql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Послесловие ===&lt;br /&gt;
Конечно, наш обзор интерфейсов к ''PostgreSQL'' нельзя назвать всеобъемлющим, но изложенных сведений вполне хватит для того, чтобы начать работать. Если впоследствии вам придет в голову идея «дописать что-то свое», не спешите хвататься за перо, то есть клавиатуру – советую сначала обратиться по адресу http://techdocs.postgresql.org/oresources.php и посмотреть, что уже сделано.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_89_1.jpg</id>
		<title>Файл:Img 89 89 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_89_1.jpg"/>
				<updated>2008-03-18T12:29:15Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: PostgreSQL в лицах: Сергей Копосов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PostgreSQL в лицах: Сергей Копосов&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_87_1.jpg</id>
		<title>Файл:Img 89 87 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_87_1.jpg"/>
				<updated>2008-03-18T12:28:47Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: bond&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;bond&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89</id>
		<title>LXF89</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89"/>
				<updated>2008-03-17T20:52:22Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Linux Format 89 (2), Февраль 2007==&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89.jpg|frame|right]]&lt;br /&gt;
__TOC__&lt;br /&gt;
=== Обзоры ===&lt;br /&gt;
* [[LXF89:CrossOver Linux 6.0|CrossOver Linux 6.0]] Запуск Windows-приложений в Linux... В том числе, игр! Читайте дальше&lt;br /&gt;
* [[LXF89:Damn Small Linux 3.1|Damn Small Linux 3.1]] Самый маленький из существующих LiveCD – что можно впихать в 50 МБ?&lt;br /&gt;
* [[LXF89:Ardour 2.0|Ardour 2.0]] В прошлом году он затмил Muse и Rosegarden – как поведет себя новая версия?&lt;br /&gt;
* [[LXF89:OpenBSD 4.0|OpenBSD 4.0]] Взвешиваем все «за» и «против» стабильной системы для администраторов&lt;br /&gt;
&lt;br /&gt;
==== Сравнение ====&lt;br /&gt;
* [[LXF89:Сравнение|Аудиотрекеры]] The Ultimate SoundTracker породил новый жанр музыки. Двадцать лет спустя трекеры все еще сильны.&lt;br /&gt;
&lt;br /&gt;
==== Специальный репортаж ====&lt;br /&gt;
* [[LXF89:Спецрепортаж|Mono уже с нами!]] Mono проложил дорогу в основные дистрибутивы Linux: почему это хорошо и как это работает?!&lt;br /&gt;
&lt;br /&gt;
==== Интервью ====&lt;br /&gt;
* [[LXF89:Интервью|Интервью: Майкл Тиманн]] Linux Format поймал Майкла Тиманна, чтобы послушать воспоминания ветерана Open Source&lt;br /&gt;
&lt;br /&gt;
==== Расширения Firefox ====&lt;br /&gt;
* [[LXF89:Расширения Firefox|ТОП-10: расширения Firefox]] Заставьте свой браузер трудиться!&lt;br /&gt;
&lt;br /&gt;
==== Применяем навыки Linux ====&lt;br /&gt;
* [[LXF89:Применяем навыки Linux|Применяем навыки Linux]] Узнайте, как применить ваши Linux-навыки в Windows и Mac OS X!&lt;br /&gt;
&lt;br /&gt;
==== Нестандартное программирование ====&lt;br /&gt;
* [[LXF89:Нестандартное программирование|Ruby без Rails]] Что за язык лежит в основе популярной MVC-среды?&lt;br /&gt;
&lt;br /&gt;
==== Что за штука…? ====&lt;br /&gt;
* [[LXF89:Что за штука...|Python 3000]] без оператора print и функции reduce()? О чем думает Гвидо?&lt;br /&gt;
&lt;br /&gt;
==== Музыкальный Linux ====&lt;br /&gt;
[[LXF89:Музыкальный Linux|Драм-машины]] Зачем вам барабан, когда есть Linux?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Учебники ===&lt;br /&gt;
* [[LXF89:Первые шаги|Первые шаги]]&amp;lt;br&amp;gt;APT: Управление пакетами. Следите за здоровьем своей системы по фирменному рецепту Linux Format для APT и Debian.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Mono|Mono]]&amp;lt;br&amp;gt;Пишем RSS-ридер. Зачем тратить время на просмотр web-сайтов, когда его можно потратить на написание собственной утилиты для чтения RSS?&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Безопасность|Безопасность, часть 5: Ищем лазутчиков]]&amp;lt;br&amp;gt;Устанавливаем наблюдение за системой для предотвращения вторжений.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Hardcore Linux|Hardcore Linux: Ядро]]&amp;lt;br&amp;gt;Собери свое собственное. Это должен знать каждый линуксоид.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:GTK+|GTK+, часть 3]]&amp;lt;br&amp;gt;Сигналы и сообщения. Знакомство с «движущим механизмом» любой GTK-программы.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Unix API|Unix API, часть 9]]&amp;lt;br&amp;gt;Демоны. Эти программы привыкли делать всю «черную работу» – но как они выглядят изнутри?&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Java EE|Java EE, часть 1]]&amp;lt;br&amp;gt;Адресная книга. Начните изучать сервлеты с практически полезного примера.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:PostgreSQL|PostgreSQL, часть 4]]&amp;lt;br&amp;gt;Программные интерфейсы. libpq позволит вам использовать все функции СУБД в своих собственных приложениях.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:LaTeX|LaTeX, часть 6]]&amp;lt;br&amp;gt;Верстка. Сегодня мы поговорим о размещении элементов на странице.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Blender|Blender, часть 2]]&amp;lt;br&amp;gt;Моделируем пингвинов. Учимся использовать примитивы и кривые Безье.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ответы ===&lt;br /&gt;
* [[LXF89:Ответы|Ответы]] Наши постоянные эксперты разрешат самые сложные из ваших проблем.&lt;br /&gt;
* [[LXF89:Совет месяца|Совет месяца: Перенаправление]]&lt;br /&gt;
* [[LXF89:Краткая справка|Краткая справка: Псевдонимы оболочки]]&lt;br /&gt;
* [[LXF89:Frequently Asked Questions|Часто задаваемые вопросы: Печать]]&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89:Unix_API</id>
		<title>LXF89:Unix API</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89:Unix_API"/>
				<updated>2008-03-17T20:51:42Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Цикл/Unix API}}&lt;br /&gt;
'''Unix API''' Настоящее программирование для Unix – без прикрас и библиотек-«оберток»&lt;br /&gt;
&lt;br /&gt;
== Демоны ==&lt;br /&gt;
''ЧАСТЬ 9: Подобно леммингам, бесконтрольно размножающиеся потоки очень быстро устраивают гонку-соревнование за ресурсы системы. Но '''Андрей Боровский''' знает, как умерить их аппетиты...''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;''-Я и есть демон! Слушай, малыш, в моем мире демоном был бы ты, но в текущий момент я в твоем мире, поэтому демон я.''&amp;lt;br&amp;gt;Роберт Асприн. Другой отличный миф&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Демонами в мире Unix традиционно называются процессы, которые не взаимодействуют с пользователем напрямую. У процесса-демона нет управляющего терминала и, соответственно, нет пользовательского интерфейса. Для управления демонами приходится использовать другие программы. Само название «демоны» возникло благодаря тому, что многие процессы этого типа большую часть времени проводят в ожидании какого-то события. Когда это событие наступает, демон активизируется (выпрыгивает, как чертик из табакерки), выполняет свою работу и снова засыпает в ожидании события. Следует отметить, что многие демоны, такие как, например, web-сервер или сервер баз данных, могут отбирать на себя практически все процессорное время и другие ресурсы системы. Такие демоны гораздо больше работают, чем спят.&lt;br /&gt;
&lt;br /&gt;
Скажу честно, что вам, уважаемый читатель, вряд ли придется заниматься созданием собственного демона, поскольку круг задач, для которых он может понадобиться, не так уж и велик. Область применения демонов – создание таких приложений, которые могут (и должны) выполняться без участия пользователя. Обычно, это разного рода серверы. Тем не менее, демоны задействуют многие важные элементы системы, и знание принципов их работы способствует пониманию принципов Unix/Linux в целом. Мы рассмотрим работу демонов на примере простого (очень простого) сетевого сервера ''aahzd'' (надеюсь, что поклонники творчества Асприна меня поймут и простят), способного отвечать на запросы клиентов. Исходный код нашего сервера (вы найдете его на диске в файле '''aahzd.c''') представляет собой доработанный вариант открытого демонстрационного (простите за невольный каламбур) демона, написанного Давидом Жилье [David Gillies]. Те места исходного текста, в которых я внес изменения, помечены в файле '''aahzd.c''' комментарием “Note by A.B. ...” Поскольку разговор о демонах вызывает у меня трепет, я не буду долго теоретизировать и сразу перейду к коду (функции '''main()''' нашего демона)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
volatile sig_atomic_t gGracefulShutdown=0;&lt;br /&gt;
volatile sig_atomic_t gCaughtHupSignal=0;&lt;br /&gt;
int gLockFileDesc=-1;&lt;br /&gt;
int gMasterSocket=-1;&lt;br /&gt;
const int gaahzdPort=30333;&lt;br /&gt;
const char *const gLockFilePath = “/var/run/aahzd.pid”;&lt;br /&gt;
&lt;br /&gt;
int main(int argc,char *argv[])&lt;br /&gt;
{&lt;br /&gt;
    int result;&lt;br /&gt;
    pid_t daemonPID;&lt;br /&gt;
    if (argc &amp;gt; 1)&lt;br /&gt;
    {&lt;br /&gt;
        int fd, len;&lt;br /&gt;
        pid_t pid;&lt;br /&gt;
        char pid_buf[16];&lt;br /&gt;
        if ((fd = open(gLockFilePath, O_RDONLY)) &amp;lt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            perror(“Lock file not found. May be the server is not running?”);&lt;br /&gt;
            exit(fd);&lt;br /&gt;
        }&lt;br /&gt;
        len = read(fd, pid_buf, 16);&lt;br /&gt;
        pid_buf[len] = 0;&lt;br /&gt;
        pid = atoi(pid_buf);&lt;br /&gt;
        if(!strcmp(argv[1], “stop”))&lt;br /&gt;
        {&lt;br /&gt;
            kill(pid, SIGUSR1);&lt;br /&gt;
            exit(EXIT_SUCCESS);&lt;br /&gt;
        }&lt;br /&gt;
        if(!strcmp(argv[1], “restart”))&lt;br /&gt;
        {&lt;br /&gt;
            kill(pid, SIGHUP);&lt;br /&gt;
            exit(EXIT_SUCCESS);&lt;br /&gt;
        }&lt;br /&gt;
        printf (“usage %s [stop|restart]\n”, argv[0]);&lt;br /&gt;
        exit (EXIT_FAILURE);&lt;br /&gt;
    }&lt;br /&gt;
    if((result = BecomeDaemonProcess(gLockFilePath, “aahzd”,&lt;br /&gt;
LOG_DEBUG, &amp;amp;gLockFileDesc, &amp;amp;daemonPID))&amp;lt;0)&lt;br /&gt;
    {&lt;br /&gt;
        perror(“Failed to become daemon process”);&lt;br /&gt;
        exit(result);&lt;br /&gt;
    }&lt;br /&gt;
    if((result = ConfigureSignalHandlers())&amp;lt;0)&lt;br /&gt;
    {&lt;br /&gt;
        syslog(LOG_LOCAL0|LOG_INFO, “ConfigureSignalHandlers failed, errno=%d”, errno);&lt;br /&gt;
        unlink(gLockFilePath);&lt;br /&gt;
        exit(result);&lt;br /&gt;
    }&lt;br /&gt;
    if((result = BindPassiveSocket(INADDR_ANY, gaahzdPort, &amp;amp;gMasterSocket))&amp;lt;0)&lt;br /&gt;
    {&lt;br /&gt;
        syslog(LOG_LOCAL0|LOG_INFO, “BindPassiveSocket failed, errno=%d”, errno);&lt;br /&gt;
        unlink(gLockFilePath);&lt;br /&gt;
        exit(result);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        if(AcceptConnections(gMasterSocket)&amp;lt;0)&lt;br /&gt;
        {&lt;br /&gt;
            syslog(LOG_LOCAL0|LOG_INFO,”AcceptConnections failed, errno=%d”,errno);&lt;br /&gt;
            unlink(gLockFilePath);&lt;br /&gt;
            exit(result);&lt;br /&gt;
        }&lt;br /&gt;
        if((gGracefulShutdown==1)&amp;amp;&amp;amp;(gCaughtHupSignal==0))&lt;br /&gt;
        break;&lt;br /&gt;
        gGracefulShutdown=gCaughtHupSignal=0;&lt;br /&gt;
   }while(1);&lt;br /&gt;
   TidyUp();&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сейчас мы пропустим блок операторов '''if (argc &amp;gt; 1) {...}''' (мы вернемся к нему позже) и рассмотрим основные этапы работы демона. Функция '''BecomeDaemonProcess()''' превращает обычный консольный процесс Linux в процесс-демон. Функция '''ConfigureSignalHandlers()''' настраивает обработчики сигналов процесса-демона, а функция '''BindPassiveSocket()''' открывает сокет TCP/IP для прослушивания входящих запросов. Далее следует цикл, в котором сервер обрабатывает запросы. Многие сетевые серверы, получив запрос, создают дочерний процесс для его обработки. Так достигается возможность параллельной обработки запросов. Другие серверы используют для этого потоки. Скажем сразу, из соображений простоты наш сервер обрабатывает запросы в последовательном (блокирующем) режиме. Мы ведь не ожидаем, что наш демонстрационный сервер будет получать много запросов, не так ли?&lt;br /&gt;
&lt;br /&gt;
Нормальный выход из цикла обработки запросов происходит при получении процессом сигнала '''SIGUSER1'''. После выхода из цикла процесс вызывает функцию '''TidyUp()''' и завершает работу. Мы, безусловно, можем завершить процесс-демон, послав ему сигнал '''SIGKILL''' ('''SIGTERM''' и некоторые другие), но пользовательский сигнал '''SIGUSER1''' гарантирует вежливое завершение процесса. В нашем случае «вежливое завершение» означает, что сервер ответит на текущий запрос перед тем, как завершиться, и удалит свой pid-файл.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь подробнее функцию '''BecomeDaemonProcess()''', благодаря которой обычный процесс Linux становится демоном. Мы не будем рассматривать тексты функций целиком, так как иначе статья будет состоять исключительно из листингов (на самом деле, длина листингов даже превышает пространство, выделенное под статью).&lt;br /&gt;
&lt;br /&gt;
Рассмотрим для начала фрагмент:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
chdir(“/”);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы делаем корень файловой системы текущим каталогом для процесса-демона. Будучи запущен, наш демон может работать вплоть до перезагрузки системы. Поэтому текущей должна быть выбрана такая файловая система, которая не может быть размонтирована. Далее следует вызов&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
lockFD = open(lockFileName, O_RDWR|O_CREAT|O_EXCL, 0644);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Каждый процесс-демон создает так называемый pid-файл (или файл блокировки). Этот файл обычно содержится в директории '''/var/run''' и имеет имя '''daemon.pid''', где “daemon” – имя демона. Файл блокировки содержит значение PID процесса демона. Этот файл важен по двум причинам. Во-первых, его наличие свидетельствует о том, что в системе уже запущен процесс-демон. Дело в том, что большинство демонов, включая наш, следят за тем, чтобы в системе был запущен только один экземпляр процесса (это логично, если учесть, что демоны часто обращаются к неразделяемым ресурсам, таким, как сетевые порты). Завершаясь, процесс-демон удаляет pid-файл, указывая тем самым, что можно запустить другой экземпляр процесса. Однако работа демона не всегда завершается нормально, и тогда на диске остается pid-файл несуществующего процесса. Это, казалось бы, может стать непреодолимым препятствием к повторному запуску демона, но на самом деле, демоны успешно справляются с такими ситуациями. Обнаружив на диске pid-файл, демон считывает из него значение PID и с помощью функции '''kill(2)''' проверяет, существует ли в системе процесс с указанным PID. Если процесс существует, значит, пользователь пытается запустить демона повторно. В этом случае программа выводит соответствующее сообщение и завершается. Если процесса с указанным PID в системе нет, значит, pid-файл принадлежал аварийно завершенному процессу. Здесь программа обычно советует пользователю удалить pid-файл (ответственность в таких делах всегда лучше переложить на пользователя) и попытаться запустить ее еще раз. Может, конечно, случиться и так, что после аварийного завершения демона на диске останется его pid-файл, а затем какой-то другой процесс получит соответствующий pid. В этой ситуации для демона все будет выглядеть так, как будто его копия уже работает в системе, и запустить демон повторно вы не сможете. К счастью, описанная ситуация крайне маловероятна.&lt;br /&gt;
&lt;br /&gt;
Далее демон вызывает функцию '''fork(3)''', которая создает копию его процесса. Родительский процесс при этом завершается:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
curPID=fork();&lt;br /&gt;
    switch(curPID)&lt;br /&gt;
        {&lt;br /&gt;
        case 0: /* we are the child process */&lt;br /&gt;
            break;&lt;br /&gt;
        case -1: /* error - bail out (fork failing is very bad) */&lt;br /&gt;
            fprintf(stderr,”Error: initial fork failed: %s\n”, strerror(errno));&lt;br /&gt;
            return -1;&lt;br /&gt;
            break;&lt;br /&gt;
        default: /* we are the parent, so exit */&lt;br /&gt;
            exit(0);&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делается это для того, чтобы процесс перестал быть лидером сессии. Сессиями в Unix называются наборы групп процессов. Каждая сессия связана с одним управляющим терминалом, на который осуществляется вывод, и с которого выполняется ввод данных. Только одна из групп процессов, входящих в сессию, имеет доступ к терминалу. Эта группа именуется foreground (приоритетной). В каждой сессии есть процесс-родоначальник, который называется лидером сессии.&lt;br /&gt;
&lt;br /&gt;
Если процесс-демон запущен с терминала, он должен, прежде всего, отключиться от этого терминала. Самый простой способ сделать это – начать новую сессию, так как по умолчанию сессия не связана ни с каким терминалом. Чтобы процесс мог начать новую сессию, он сам не должен быть лидером сессии. Полученный в результате вызова '''fork()''' дочерний процесс таковым точно не является. Он смело начинает новую сессию с помощью вызова функции '''setsid(2)'''. При этом наш процесс становится лидером (и единственным участником) новой сессии.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if(setsid()&amp;lt;0)&lt;br /&gt;
return -1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее некоторые руководства рекомендуют снова вызвать '''fork()''', чтобы новый процесс перестал быть лидером новой сессии (в System V лидер сессии может автоматически получить управляющий терминал при некоторых условиях). В Linux повторный вызов '''fork()''' мы делать не будем.&lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что теперь у нашего процесса новый PID, который мы снова должны записать в pid-файл демона. Мы записываем значение PID в файл в строковом виде (а не как переменную типа '''pid_t'''). Делается это для удобства пользователя, чтобы значение PID из pid-файла можно было считать с помощью '''cat'''. Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kill `cat /var/run/aahz.pid `&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее мы закрываем все файловые дескрипторы, которые мы могли унаследовать от родительских процессов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
numFiles = sysconf(_SC_OPEN_MAX);&lt;br /&gt;
for(I = numFiles-1;I &amp;gt;= 0; --i)&lt;br /&gt;
{&lt;br /&gt;
if(i!=lockFD)&lt;br /&gt;
close(i);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция '''sysconf()''' с параметром '''_SC_OPEN_MAX''' возвращает максимально возможное количество дескрипторов, которые может открыть наша программа. Мы вызываем функцию '''close()''' для каждого дескриптора (независимо от того, открыт он или нет), за исключением дескриптора pid-файла, который должен оставаться открытым.&lt;br /&gt;
&lt;br /&gt;
Дескрипторы стандартных потоков ввода, вывода и ошибок не следует оставлять закрытыми, так как многие функции стандартной библиотеки предполагают, что они открыты. Мы открываем эти дескрипторы и перенаправляем их на '''/dev/null''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
stdioFD = open(“/dev/null”, O_RDWR);&lt;br /&gt;
dup(stdioFD);&lt;br /&gt;
dup(stdioFD);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем быть уверены, что демон не получит доступа к какому-либо терминалу. Тем не менее, у демона должна быть возможность выводить куда-то сообщения о своей работе. Традиционно для этого используются файлы журналов (log-файлы). Файлы журналов для демона подобны черным ящикам самолетов. Если в работе демона произошел какой-то сбой, пользователь может проанализировать файл журнала и (при определенном везении) установить причину сбоя. Ничто не мешает нашему демону открыть свой файл журнала, но это не очень удобно. Большинство демонов пользуются услугами утилиты ''syslog'', ведущей журналы множества системных событий. Доступ к журналу ''syslog'' можно открыть с помощью функции '''openlog(3)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
openlog(logPrefix, LOG_PID|LOG_CONS|LOG_NDELAY|LOG_NOWAIT, LOG_LOCAL0);&lt;br /&gt;
(void)setlogmask(LOG_UPTO(logLevel));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первый параметр функции '''openlog()''' – префикс, который будет добавляться к каждой записи в системном журнале. Далее следуют различные опции ''syslog''. Функция '''setlogmask(3)''' позволяет установить уровень приоритета сообщений, которые записываются в журнал событий. При вызове функции '''BecomeDaemonProcess()''' мы передаем в параметре '''logLevel''' значение '''LOG_DEBUG'''. В сочетании с макросом '''LOG_UPTO''' это означает, что в журнал будут записываться все сообщения с приоритетом, начиная с наивысшего и заканчивая '''LOG_DEBUG'''. Наконец, вызов&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
setpgrp();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
создает новую группу процессов, идентификатором которой является идентификатор текущего процесса. На этом работа функции '''BecomeDaemonProcess()''' завершается, так как теперь наш процесс стал настоящим демоном.&lt;br /&gt;
&lt;br /&gt;
Функция '''ConfigureSignalHandlers()''' настраивает обработчики сигналов. Сигналы, которые получит наш демон, можно разделить на три группы: игнорируемые, «фатальные» и обрабатываемые. Вызывая функцию&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
signal(SIGUSR2, SIG_IGN);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
мы указываем, что наш демон должен игнорировать сигнал '''SIGUSR2'''. Аналогично мы поступаем с сигналами '''SIGPIPE''', '''SIGALRM''', '''SIGTSTP''', '''SIGPROF''', '''SIGCHLD'''. Сигналы '''SIGQUIT''', '''SIGILL''', '''SIGTRAP''', '''SIGABRT''', '''SIGIOT''', '''SIGBUS''', '''SIGFPE''', '''SIGSEGV''', '''SIGSTKFLT''', '''SIGCONT''', '''SIGPWR''' и '''SIGSYS''' относятся к категории «фатальных». Мы не можем их игнорировать, но и продолжать выполнение процесса-демона после получения одного из них нежелательно. Мы назначаем всем этим сигналам обработчик '''FatalSigHandler''', например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
signal(SIGQUIT, FatalSigHandler);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''FatalSigHandler()''' записывает в журнал событий информацию о полученном сигнале и завершает процесс, вызвав перед этим функции '''closelog()''' и '''TidyUp()''', освобождающие все занятые процессом ресурсы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void FatalSigHandler(int sig)&lt;br /&gt;
{&lt;br /&gt;
#ifdef _GNU_SOURCE&lt;br /&gt;
    syslog(LOG_LOCAL0|LOG_INFO,”caught signal: %s - exiting”,strsignal(sig)&lt;br /&gt;
);&lt;br /&gt;
#else&lt;br /&gt;
    syslog(LOG_LOCAL0|LOG_INFO,”caught signal: %d - exiting”,sig);&lt;br /&gt;
#endif&lt;br /&gt;
    closelog();&lt;br /&gt;
    TidyUp();&lt;br /&gt;
    _exit(0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Три сигнала, относящихся к категории обрабатываемых – '''SIGTERM''', '''SIGUSR1''' и '''SIGHUP''', обрабатываются по-разному:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sigtermSA.sa_handler = TermHandler;&lt;br /&gt;
sigemptyset(&amp;amp;sigtermSA.sa_mask);&lt;br /&gt;
sigtermSA.sa_flags = 0;&lt;br /&gt;
sigaction(SIGTERM,&amp;amp;sigtermSA,NULL);&lt;br /&gt;
sigusr1SA.sa_handler = Usr1Handler;&lt;br /&gt;
sigemptyset(&amp;amp;sigusr1SA.sa_mask);&lt;br /&gt;
sigusr1SA.sa_flags = 0;&lt;br /&gt;
sigaction(SIGUSR1,&amp;amp;sigusr1SA,NULL);&lt;br /&gt;
sighupSA.sa_handler = HupHandler;&lt;br /&gt;
sigemptyset(&amp;amp;sighupSA.sa_mask);&lt;br /&gt;
sighupSA.sa_flags = 0;&lt;br /&gt;
sigaction(SIGHUP,&amp;amp;sighupSA,NULL);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обработчик '''TermHandler()''' вызывает функцию '''TidyUp()''' и завершает процесс. Обработчик '''Usr1Handler()''' делает в системном журнале запись о вежливом завершении процесса и присваивает переменной '''gGracefulShutdown''' значение '''1''' (что, как вы помните, приводит к выходу из цикла обработки запросов, когда цикл будет готов к этому). Обработчик сигнала '''HupHandler()''' также делает запись в системном журнале, после чего присваивает значение '''1''' переменным '''gGracefulShutdown''' и '''gCaughtHupSignal'''. В реальной жизни получение сигнала '''SIGHUP''' приводит к перезапуску демона, сопровождаемому повторным прочтением файла конфигурации (первый раз демон читает этот файл во время запуска) и переустановкой значений записанных в нем параметров. Именно необходимость прочесть повторно файл конфигурации является наиболее частой причиной перезапуска демонов. У нашего демона файла конфигурации нет, так что в процессе перезапуска делать ему особенно нечего.&lt;br /&gt;
&lt;br /&gt;
Функция '''BindPassiveSocket()''' открывает для прослушивания порт сервера (в нашем случае это порт 30333) на всех доступных сетевых интерфейсах и возвращает соответствующий сокет:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int BindPassiveSocket(const int portNum, int *const boundSocket)&lt;br /&gt;
{&lt;br /&gt;
struct sockaddr_in sin;&lt;br /&gt;
int newsock, optval;&lt;br /&gt;
size_t optlen;&lt;br /&gt;
memset(&amp;amp;sin.sin_zero, 0, 8);&lt;br /&gt;
sin.sin_port = htons(portNum);&lt;br /&gt;
sin.sin_family = AF_INET;&lt;br /&gt;
sin.sin_addr.s_addr = htonl(INADDR_ANY);&lt;br /&gt;
if((newsock= socket(PF_INET, SOCK_STREAM, 0))&amp;lt;0)&lt;br /&gt;
return -1;&lt;br /&gt;
optval = 1;&lt;br /&gt;
optlen = sizeof(int);&lt;br /&gt;
setsockopt(newsock, SOL_SOCKET, SO_REUSEADDR,&amp;amp;optval,optlen);&lt;br /&gt;
if(bind(newsock,(struct sockaddr*)&amp;amp;sin,sizeof(struct sockaddr_in))&amp;lt;0)&lt;br /&gt;
return -1;&lt;br /&gt;
if(listen(newsock,SOMAXCONN)&amp;lt;0)&lt;br /&gt;
return -1;&lt;br /&gt;
*boundSocket = newsock;&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тем, кто читал статью этой серии, посвященную сокетам (см. LXF83), должно быть понятно, что здесь происходит. Отметим только одну интересную деталь. Если предыдущий, уже закрытый, сокет, связанный с данным портом, находится в состоянии '''TIME_WAIT''', между закрытием старого и открытием нового сокета может произойти задержка, равная двум периодам жизни сегмента (задержка может составлять до двух минут). Для того, чтобы при повторном запуске демона нам не пришлось ждать, мы используем функцию '''setsockopt()''' с параметром '''SO_REUSEADDR'''.&lt;br /&gt;
&lt;br /&gt;
Функция '''AcceptConnections()''' обрабатывает запросы последовательно, используя блокирующий вызов '''accept()''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int AcceptConnections(const int master)&lt;br /&gt;
{&lt;br /&gt;
    int proceed = 1, slave, retval = 0;&lt;br /&gt;
    struct sockaddr_in client;&lt;br /&gt;
    socklen_t clilen;&lt;br /&gt;
    while((proceed==1)&amp;amp;&amp;amp;(gGracefulShutdown==0))&lt;br /&gt;
    {&lt;br /&gt;
        clilen = sizeof(client);&lt;br /&gt;
        slave = accept(master,(struct sockaddr *)&amp;amp;client,&amp;amp;clilen);&lt;br /&gt;
        if(slave&amp;lt;0) /* accept() failed */&lt;br /&gt;
        {&lt;br /&gt;
            if(errno == EINTR)&lt;br /&gt;
                continue;&lt;br /&gt;
            syslog(LOG_LOCAL0|LOG_INFO,”accept() failed: %m\n”);&lt;br /&gt;
            proceed = 0;&lt;br /&gt;
            retval = -1;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            retval = HandleConnection(slave); /* process connection */&lt;br /&gt;
            if(retval)&lt;br /&gt;
                proceed = 0;&lt;br /&gt;
        }&lt;br /&gt;
        close(slave);&lt;br /&gt;
    }&lt;br /&gt;
    return retval;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это не лучший образ поведения демона, но если мы начнем описывать параллельную обработку запросов, редакция не выдержит. Переменная '''proceed''', совместно с переменной '''gGracefulShutdown''', указывает, должна ли программа продолжать обрабатывать запросы. Если очередной вызов '''connect()''' или '''HandleConnection()''' вернул сообщение об ошибке, этой переменной присваивается '''0''' и обработка запросов прекращается. Новый сокет, полученный в результате вызовы '''accept()''', передается функции '''HandleConnection()'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int HandleConnection(const int slave)&lt;br /&gt;
{&lt;br /&gt;
char readbuf[1025];&lt;br /&gt;
size_t bytesRead;&lt;br /&gt;
const size_t buflen=1024;&lt;br /&gt;
int retval;&lt;br /&gt;
retval = ReadLine(slave, readbuf, buflen, &amp;amp;bytesRead);&lt;br /&gt;
if(retval==0)&lt;br /&gt;
    WriteToSocket(slave, readbuf, bytesRead);&lt;br /&gt;
return retval;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция '''HandleConnection()''' считывает переданную клиентом строку и тут же возвращает ее клиенту. Затем функция '''AcceptConnections()''' закрывает соединение, открытое в результате вызова '''accept()'''. Функции '''ReadLine()''' и '''WriteToSocket()''' тривиальны, и рассматривать их мы не будем. Если где-то в цепочке вызовов '''AcceptConnections()''', '''HandleConnection()''', '''ReadLine()''' и '''WriteToSocket()''' возникла ошибка, информация об ошибке будет передаваться вверх по цепочке до тех пор, пока не достигнет функции '''main()''', приводя к немедленному завершению работы демона с соответствующей записью в журнал системных сообщений.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим, наконец, функцию '''TidyUp()''', к которой обращаются многие функции сервера перед тем, как завершить его работу.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void TidyUp(void)&lt;br /&gt;
{&lt;br /&gt;
    if(gLockFileDesc!=-1)&lt;br /&gt;
        {&lt;br /&gt;
        close(gLockFileDesc);&lt;br /&gt;
        unlink(gLockFilePath);&lt;br /&gt;
        gLockFileDesc=-1;&lt;br /&gt;
        }&lt;br /&gt;
    if(gMasterSocket!=-1)&lt;br /&gt;
        {&lt;br /&gt;
        close(gMasterSocket);&lt;br /&gt;
        gMasterSocket=-1;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задача '''TidyUp()''' – «прибрать мусор» за демоном. В принципе, без этой функции можно обойтись, так как после завершения процесса система сама закроет все его дескрипторы, но правила хорошего тона требуют явного высвобождения всех ресурсов, выделенных явным образом.&lt;br /&gt;
&lt;br /&gt;
Если вы скомпилируете программу-демон с помощью команды&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc aahz.c -o aahz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то сможете запустить демона командой&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# ./aahz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку демон нуждается в доступе к директории '''/var/run''', запускать программу нужно от имени root. Сразу после запуска вы снова увидите приглашение командной строки, что для демонов совершенно нормально. Если бы сервер ''aahzd'' выполнял что-нибудь полезное, команду его запуска можно было бы прописать в одном из сценариев запуска системы в директории '''/etc/init.d''', но мы этого делать не будем. После того как сервер запущен, вы можете дать команду&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
telnet 127.0.0.1 30333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будет установлено соединение с сервером, который продублирует строку, введенную вами в консоли ''telnet'', и закроет соединение.&lt;br /&gt;
&lt;br /&gt;
Вернемся теперь к начальным строкам функции '''main()'''. Хотя мы можем получить PID демона из его pid-файла и управлять демоном с помощью команды ''kill'', такой вариант многими считается неудобным. Часто для управления используется сам исполняемый файл демона, запускаемый со специальными аргументами командной строки. Наш демон понимает две команды – ''stop'' (завершение работы демона) и ''restart'' (перезапуск). Посмотрим, как поведет себя демон, запущенный с аргументами командной строки. В этом случае в начале программы демон считывает значение pid из собственного файла. Если открыть pid-файл не удается, значит, скорее всего, демон не запущен, и управляющему режиму просто нечего делать. Если значение pid получено, процесс, управляющий демоном, с помощью функции '''kill()''' посылает демону соответствующий сигнал.&lt;br /&gt;
&lt;br /&gt;
Демоны не рассчитаны на то, чтобы получать какую-либо информацию от пользователя. Собственную информацию они передают другим программам либо записывают в журналы системных событий. В следующей статье мы сосредоточимся на программах, которые ведут себя совершенно иначе, и рассмотрим консольный ввод-вывод.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A6%D0%B8%D0%BA%D0%BB/Unix_API</id>
		<title>Шаблон:Цикл/Unix API</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A6%D0%B8%D0%BA%D0%BB/Unix_API"/>
				<updated>2008-03-17T20:51:25Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{цикл|Программирование для UNIX|&amp;lt;!--ПОКА СОХРАНЕНЫ ОШИБКИ НУМЕРАЦИИ !!! --&amp;gt;&lt;br /&gt;
* [[LXF80:Unix API|Часть 1: Работаем с файловой системой]]&lt;br /&gt;
* [[LXF81:Unix API|Часть 2: Межпроцессное взаимодействие]]&lt;br /&gt;
* [[LXF82:Unix API|Часть 3: Очереди сообщений и семафоры]]&lt;br /&gt;
* [[LXF83:Unix API|Часть 3: Сокеты]]&lt;br /&gt;
* [[LXF84:Unix API|Часть 4: Сигналы]]&lt;br /&gt;
* [[LXF85:Unix API|Часть 6: Процессы]]&lt;br /&gt;
* [[LXF86:Unix API|Часть 7: Потоки: создание]]&lt;br /&gt;
* [[LXF87-88:Unix API|Часть 8: Потоки: синхронизация]]&lt;br /&gt;
* [[LXF89:Unix API|Часть 9: Демоны]]&lt;br /&gt;
* [[LXF90:Unix API|Часть 10: Консольный ввод/вывод]]&lt;br /&gt;
* [[LXF91:Unix API|Часть 11: ncurses: привет Окнам!]]&lt;br /&gt;
* [[LXF92:Unix API|Часть 12: С окнами на «ты»]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0:%D0%A6%D0%B8%D0%BA%D0%BB/Unix_API</id>
		<title>Обсуждение шаблона:Цикл/Unix API</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0:%D0%A6%D0%B8%D0%BA%D0%BB/Unix_API"/>
				<updated>2008-03-17T20:50:56Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Новая: Ошибка нумерации произошла из-за ошибки в журнале LXF89. Врез (абзац текста между заголовком и основным ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ошибка нумерации произошла из-за ошибки в журнале LXF89. Врез (абзац текста между заголовком и основным содержимым статьи) абсолютно одинаковый с номером LXF87-88. Сейчас поправлю нумерацию.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF85:LaTeX</id>
		<title>LXF85:LaTeX</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF85:LaTeX"/>
				<updated>2008-03-17T20:34:46Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: {{Цикл/LaTeX}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Цикл/LaTeX}}&lt;br /&gt;
&amp;lt;big&amp;gt;ЧАСТЬ 3: Успешно пройдя две ступени посвящения, вы готовы двинуться в путь к вершинам мастерства. Вашим проводником в этом нелегком деле будет Евгений Балдин.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Компьютерные Teхнологии: Учимся использовать культовую систему вёрстки LaTeX ==&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Полиграфисты относят математические работы к каторжным…&lt;br /&gt;
&lt;br /&gt;
Д. Э. Кнут. Математическая типография.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Набор математики: снова в школу ===&lt;br /&gt;
Иногда от незнакомых с TeXнологиями людей приходится слышать, что LaTeX годится только для набора математики. При знакомстве же с истинными TeXнологиями возникает понимание, что LaTeX настолько хорош, что с его помощью можно набирать даже математику.&lt;br /&gt;
&lt;br /&gt;
Набор математических формул всегда считался вершиной типографского искусства. Дело в том, что формулы, для концентрации информации и дополнительной выразительности по сравнению с обычным текстом, являются многоуровневыми. Д. Э. Кнут к своей программе компьютерной типографии создал и язык для описания формул. После короткого периода обучения пользователь в состоянии читать и набирать на этом языке формулы практически любой сложности.&lt;br /&gt;
&lt;br /&gt;
LaTeX — не единственная программная среда, использующая TeXнотацию. Эта же нотация рекомендуется при наборе всех сколько-нибудь сложных формул на страницах Википедии (http://ru.wikipedia.org статья «[[wikipedia:ru:Википедия:Формулы|Википедия:Формулы]]»).&lt;br /&gt;
&lt;br /&gt;
Становлению TeX как стандарта для набора формул в значительной степени поспособствовало Американское математическое сообщество (The American Mathematical Society — AMS), которое субсидировало разработку расширения TeX, известного как AMSTeX, в начале восьмидесятых годов прошлого столетия. В 1987 году наработки AMSTeX были добавлены в LaTeX в виде пакета amsmath. Вместе с amsmath в LaTeX было добавлено множество улучшений, позволяющих набирать действительно изощрённую математику. Поэтому при использовании в тексте математики в шапке документа следует в обязательном порядке загружать пакет amsmath:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\usepackage{amsmath}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В дальнейшем предполагается, что этот пакет уже загружен. Полностью описать все команды языка для набора формул в рамках короткой статьи нереально, так как математика, как и способы её представления, безгранична. Поэтому основное внимание будет уделено базовым правилам и русскому стилю в формулах. В любой сколько-нибудь большой книге по LaTeX будет полный список всех команд. Если серьёзно работать с математикой, то подобная книжка, в любом случае, понадобится.&lt;br /&gt;
&lt;br /&gt;
=== Набор формул ===&lt;br /&gt;
При формировании текста формулы подразделяются на строчные и выносные. Строчные формулы набираются внутри абзаца вместе текстом. По описанию формулы LaTeX создаёт бокс, который обрабатывается наравне с обычными текстовыми боксами. Как правило, строковые формулы это небольшие вставки, вроде E=mc2. Выносные или выключенные формулы выводятся за пределы абзаца.&lt;br /&gt;
&lt;br /&gt;
Строчная формула в тексте ограничивается&amp;lt;ref&amp;gt;Есть более формальное оформление строчной формулы как окружения: \begin{math} «формула» \end{math}. Но, в силу понятных причин, никто подобное описание не использует.&amp;lt;/ref&amp;gt; с помощью символа доллара $«формула»$ или с помощью команд-скобок \(«формула»\). При наборе предпочтительнее использовать второй вариант оформления, так как он позволяет легко определить, где начинается, а где кончается формула. «Долларовое» ($) окружение лучше тем, что оно чуть-чуть короче, кроме этого, команда $ крепкая&amp;lt;ref&amp;gt;Начав изучать команды LaTeX, довольно быстро сталкиваешься с понятиями «хрупкости»/«крепкости». «Крепкие» команды, в отличие от «хрупких», можно использовать в качестве аргументов других команд. С другой стороны, хрупкие команды тоже можно использовать как параметры, защитив их с помощью команды \protect. Эти понятия в большинстве своём пережитки прошлого и их постепенно изживают, но пока следует иметь их в виду.&amp;lt;/ref&amp;gt;, в отличие от команд-скобок.&lt;br /&gt;
&lt;br /&gt;
Однострочные выносные формулы формируются с помощью окружения equation. Так как в этом случае формула вынесена за пределы абзаца, то её можно пронумеровать. Например:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\begin{equation}&lt;br /&gt;
  \label{eq:math:ex1}&lt;br /&gt;
  \int\limits_{-\infty}^{\infty}&lt;br /&gt;
      e^{-x^2/2}dx=\sqrt{2\pi}&lt;br /&gt;
\end{equation}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\int\limits_{-\infty}^{\infty}e^{-x^2/2}dx=\sqrt{2\pi}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Нумерация формул удобна для того, чтобы позже в тексте на неё можно было легко сослаться с помощью команды \eqref{eq:math:1}&amp;lt;ref&amp;gt;Метка выставляется с помощью команды \label.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Если же формул немного и не хочется никакой нумерации, то можно воспользоваться окружением equation*&amp;lt;ref&amp;gt;К equation добавляется звёздочка. Подобный приём в создании команд применяется&lt;br /&gt;
достаточно часто. Команда со * обычно не нумеруется и не отображается ни в каких&lt;br /&gt;
автоматически составляемых списках.&amp;lt;/ref&amp;gt;. При создании выключенной формулы размер шрифта для улучшения читаемости немного увеличивается. LaTeX имеет несколько стилей для оформления математических формул. При желании можно выбрать необходимый стиль вручную:&lt;br /&gt;
* \displaystyle — стиль, используемый для выносных формул,&lt;br /&gt;
* \textstyle — стиль строчных формул,&lt;br /&gt;
* \scriptstyle — в этом стиле набираются индексы,&lt;br /&gt;
* \scriptscriptstyle — индексы второго уровня.&lt;br /&gt;
&lt;br /&gt;
С помощью этих команд можно увеличить размер шрифта для формул внутри абзаца, или заставить индексы выглядеть как базовые символы.&lt;br /&gt;
Например, сравните:&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\begin{equation*}&lt;br /&gt;
  \frac{1}{1+&lt;br /&gt;
  \frac{1}{1+&lt;br /&gt;
  \frac{1}{1+&lt;br /&gt;
  \frac{1}{2}}}}&lt;br /&gt;
\end{equation*}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\frac{1}{1+\frac{1}{1+\frac{1}{1+\frac{1}{2}}}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|и &amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\begin{equation*}&lt;br /&gt;
  \frac{1}{\displaystyle 1+&lt;br /&gt;
  \frac{1}{\displaystyle 1+&lt;br /&gt;
  \frac{1}{\displaystyle 1+&lt;br /&gt;
  \frac{\displaystyle 1}&lt;br /&gt;
  {\displaystyle 2}}}}&lt;br /&gt;
\end{equation*}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\frac{1}{\displaystyle 1+\frac{1}{\displaystyle 1+\frac{1}{\displaystyle 1+\frac{\displaystyle 1}{\displaystyle 2}}}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Пробелы в формулах отмечают только конец команды, а сами по себе смысла не имеют — LaTeX, как правило, гораздо лучше знает, как сформировать результат.&lt;br /&gt;
&lt;br /&gt;
=== Кириллица в формулах ===&lt;br /&gt;
Всё дело в имеющихся шрифтах — они красивые, разнообразные, но в большинстве своём англоязычные. В настоящее время кириллические математические шрифты в «дикой природе» отсутствуют, поэтому приходится пользоваться их текстовыми версиями.&lt;br /&gt;
&lt;br /&gt;
Стиль mathtext (пакет t2), позволяет использовать кириллицу в формулах без дополнительных ухищрений. Стиль может быть подключён с опцией warn — в этом случае он сообщает обо всех случаях использования кириллических букв в формулах. mathtext следует загружать до babel и/или fontenc.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\usepackage[warn]{mathtext}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь для создания выключенной формулы используется команда \[&amp;quot;формула&amp;quot;\] — краткий аналог окружения equation*. В отличие от латиницы, русские буквы в формулах печатаются прямым шрифтом — это было сделано специально. Чтобы изменить это поведение, в преамбуле следует добавить команду для переопределения шрифта:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\DeсlareSуmbolFont{T2Aletters}{T2A}{cmr}{m}{it}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Стиль amstext (загружается автоматически при загрузке amsmath) определяет команду \text, которая позволяет вставлять в формулу&lt;br /&gt;
обычный текст. Он может быть и русским. Преимущество такого подхода заключается в том, что внутри команды \text пробелы воспринимаются как нормальные символы и слова не сливаются. Использование \text предпочтительно и для целей переносимости.&lt;br /&gt;
&lt;br /&gt;
=== Школьная математика ===&lt;br /&gt;
Математика в школе — это явление, через которое проходит каждый. Именно поэтому фактически любой вменяемый россиянин умеет обращаться с дробями, знает теорему Пифагора, с лёгкостью решает квадратные уравнения и что-то слышал про интеграл и производную. Разберёмся со всем этим поподробнее.&lt;br /&gt;
&lt;br /&gt;
==== Индексы ====&lt;br /&gt;
Букв в латинском алфавите не так уж и много, а научных понятий — без числа. Один из способов отличать обозначения друг от друга — это индексы, как верхние, так и нижние:&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\[A_{\text{lower index}}\quad&lt;br /&gt;
 B^{\text{upper index}}\quad&lt;br /&gt;
 C_n^k\]&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;A_{\text{lower index}}\quad B^{\text{upper index}}\quad C_n^k&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что если в индексе ровно один знак, то фигурные скобки вокруг него можно и нужно опустить. Теперь мы можем записать теорему Пифагора: \(a²+b²=c²\)&lt;br /&gt;
&amp;lt;math&amp;gt;a^2+b^2=c^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Математические символы ====&lt;br /&gt;
Кроме символов латиницы и кириллицы, математики используют множество самых разнообразных значков, да и латиница не так уж проста. Если воспользоваться пакетом amsfonts, то она может стать такой:&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\begin{itemize}&lt;br /&gt;
   \item \(ABCD\) &amp;quot;--- обычной,&lt;br /&gt;
   \item \(\mathbf{ABCD}\) &amp;quot;--- жирной,&lt;br /&gt;
   \item \(\mathbb{ABCD}\) &amp;quot;--- ажурной,&lt;br /&gt;
   \item \(\mathcal{ABCD}\) &amp;quot;---прописной.&lt;br /&gt;
 \end{itemize}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;math&amp;gt;ABCD&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mathbf{ABCD}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mathbb{ABCD}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mathcal{ABCD}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Это далеко не все возможные шрифтовые стили которые можно применять в математической моде, но лучше особо не перегружать&lt;br /&gt;
формулы всякой «готикой» (например, \mathfrak). Не единой латиницей жив математик. Традиционно, везде, где только можно, используются греческие буквы.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
 |+ '''Греческие символы'''&lt;br /&gt;
 !Буква||Команда||Буква||Команда||Буква||Команда&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;math&amp;gt;\Alpha~\alpha&amp;lt;/math&amp;gt;||\Alpha \alpha||&amp;lt;math&amp;gt;\Iota~\iota&amp;lt;/math&amp;gt;||\Iota \iota||&amp;lt;math&amp;gt;\Sigma~\sigma&amp;lt;/math&amp;gt;||\Sigma \sigma&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;math&amp;gt;\Beta~\beta&amp;lt;/math&amp;gt;||\Beta \beta||&amp;lt;math&amp;gt;\Kappa~\kappa&amp;lt;/math&amp;gt;||\Kappa \kappa||&amp;lt;math&amp;gt;~\varsigma&amp;lt;/math&amp;gt;||\varsigma&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;math&amp;gt;\Gamma~\gamma&amp;lt;/math&amp;gt;||\Gamma \gamma||&amp;lt;math&amp;gt;\Lambda~\lambda&amp;lt;/math&amp;gt;||\Lambda \lambda||&amp;lt;math&amp;gt;\Tau~\tau&amp;lt;/math&amp;gt;||\Tau \tau&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;math&amp;gt;\Delta~\delta&amp;lt;/math&amp;gt;||\Delta \delta||&amp;lt;math&amp;gt;\Mu~\mu&amp;lt;/math&amp;gt;||\Mu \mu||&amp;lt;math&amp;gt;\Upsilon~\upsilon&amp;lt;/math&amp;gt;||\Upsilon \upsilon&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;math&amp;gt;\Epsilon~\epsilon&amp;lt;/math&amp;gt;||\Epsilon \epsilon||&amp;lt;math&amp;gt;\Nu~\nu&amp;lt;/math&amp;gt;||\Nu \nu||&amp;lt;math&amp;gt;\Phi~\phi&amp;lt;/math&amp;gt;||\Phi \phi&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;math&amp;gt;~\varepsilon&amp;lt;/math&amp;gt;|| \varepsilon||&amp;lt;math&amp;gt;\Xi~\xi&amp;lt;/math&amp;gt;||\Xi \xi||&amp;lt;math&amp;gt;\varphi&amp;lt;/math&amp;gt;||\varphi&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;math&amp;gt;\Zeta~\zeta&amp;lt;/math&amp;gt;||\Zeta \zeta||&amp;lt;math&amp;gt;\Pi~\pi&amp;lt;/math&amp;gt;||\Pi \pi||&amp;lt;math&amp;gt;\Chi~\chi&amp;lt;/math&amp;gt;||\Chi \chi&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;math&amp;gt;\Eta~\eta&amp;lt;/math&amp;gt;||\Eta \eta||&amp;lt;math&amp;gt;\varpi&amp;lt;/math&amp;gt;||\varpi||&amp;lt;math&amp;gt;\Psi~\psi&amp;lt;/math&amp;gt;||\Psi \psi&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;math&amp;gt;\Theta~\theta&amp;lt;/math&amp;gt;||\Theta \theta||&amp;lt;math&amp;gt;\Rho~\rho&amp;lt;/math&amp;gt;||\Rho \rho||&amp;lt;math&amp;gt;\Omega~\omega&amp;lt;/math&amp;gt;||\Omega \omega&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;math&amp;gt;\vartheta&amp;lt;/math&amp;gt;||\vartheta||&amp;lt;math&amp;gt;\varrho&amp;lt;/math&amp;gt;||\varrho||||&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В LaTeX присутствует полный набор и, за исключением трёх букв, начертание вполне привычное. Для исправления непривычных начертаний эти буквы были переопределены с помощью пакета amssymb:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%Переопределение kappa epsilon phi на русский лад&lt;br /&gt;
\renewcommand{\kappa}{\varkappa}&lt;br /&gt;
\renewcommand{\epsilon}{\varepsilon}&lt;br /&gt;
\renewcommand{\phi}{\varphi}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Спецсимволов в LaTeX великое множество. В стандартной поставке TeX Live идёт «Всеобъемлющий список сиволов LaTeX» ([http://www.ctan.org/get/info/symbols/comprehensive/symbols-a4.pdf The Comprehensive LaTeX Symbols List — файл symbols-a4.pdf]) в котором перечислено 5000 распространённых символов, применяемых пользователями LaTeX. Почти наверняка любой операнд, который вам нужен, там уже есть. Ниже будет перечислена только та часть символов, которая, с моей точки зрения, может пригодиться в наборе школьной математики. Пакет amssymb для использования обязателен.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|+ '''«Школьные» символы'''&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\hat{a}&amp;lt;/math&amp;gt;||\hat{a}&lt;br /&gt;
|&amp;lt;math&amp;gt;\bar{a}&amp;lt;/math&amp;gt;||\bar{a}&lt;br /&gt;
|&amp;lt;math&amp;gt;\vec{a}&amp;lt;/math&amp;gt;||\vec{a}&lt;br /&gt;
|&amp;lt;math&amp;gt;\dot{a}&amp;lt;/math&amp;gt;||\dot{a}&lt;br /&gt;
|&amp;lt;math&amp;gt;\tilde{a}&amp;lt;/math&amp;gt;||\tilde{a}&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\pm&amp;lt;/math&amp;gt;||\pm&lt;br /&gt;
|&amp;lt;math&amp;gt;\mp&amp;lt;/math&amp;gt;||\mp&lt;br /&gt;
|&amp;lt;math&amp;gt;\times&amp;lt;/math&amp;gt;||\times&lt;br /&gt;
|&amp;lt;math&amp;gt;\cdot&amp;lt;/math&amp;gt;||\cdot&lt;br /&gt;
|&amp;lt;math&amp;gt;\div&amp;lt;/math&amp;gt;||\div&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;||\lor&lt;br /&gt;
|&amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt;||\land&lt;br /&gt;
|&amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;||\neg&lt;br /&gt;
|&amp;lt;math&amp;gt;\forall&amp;lt;/math&amp;gt;||\forall&lt;br /&gt;
|&amp;lt;math&amp;gt;\exists&amp;lt;/math&amp;gt;||\exists&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt;||\le&lt;br /&gt;
|&amp;lt;math&amp;gt;\ge&amp;lt;/math&amp;gt;||\ge&lt;br /&gt;
|&amp;lt;math&amp;gt;\ll&amp;lt;/math&amp;gt;||\ll&lt;br /&gt;
|&amp;lt;math&amp;gt;\gg&amp;lt;/math&amp;gt;||\gg&lt;br /&gt;
|&amp;lt;math&amp;gt;\neq&amp;lt;/math&amp;gt;||\neq&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\equiv&amp;lt;/math&amp;gt;||\equiv&lt;br /&gt;
|&amp;lt;math&amp;gt;\sim&amp;lt;/math&amp;gt;||\sim&lt;br /&gt;
|&amp;lt;math&amp;gt;\simeq&amp;lt;/math&amp;gt;||\simeq&lt;br /&gt;
|&amp;lt;math&amp;gt;\approx&amp;lt;/math&amp;gt;||\approx&lt;br /&gt;
|&amp;lt;math&amp;gt;\propto&amp;lt;/math&amp;gt;||\propto&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\parallel&amp;lt;/math&amp;gt;||\parallel&lt;br /&gt;
|&amp;lt;math&amp;gt;\perp&amp;lt;/math&amp;gt;||\perp&lt;br /&gt;
|&amp;lt;math&amp;gt;\angle&amp;lt;/math&amp;gt;||\angle&lt;br /&gt;
|&amp;lt;math&amp;gt;\triangle&amp;lt;/math&amp;gt;||\triangle&lt;br /&gt;
|&amp;lt;math&amp;gt;\sphericalangle&amp;lt;/math&amp;gt;||\sphericalangle&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;math&amp;gt;\infty&amp;lt;/math&amp;gt;||\infty&lt;br /&gt;
|&amp;lt;math&amp;gt;\ell&amp;lt;/math&amp;gt;||\ell&lt;br /&gt;
|&amp;lt;math&amp;gt;\sum&amp;lt;/math&amp;gt;||\sum&lt;br /&gt;
|&amp;lt;math&amp;gt;\prod&amp;lt;/math&amp;gt;||\prod&lt;br /&gt;
|&amp;lt;math&amp;gt;\varnothing&amp;lt;/math&amp;gt;||\varnothing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для соответствия русским традициям 2 символа были переопределены:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%Переопределение le ge на русский лад&lt;br /&gt;
\renewcommand{\le}{\leqslant}&lt;br /&gt;
\renewcommand{\ge}{\geqslant}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Дроби ====&lt;br /&gt;
Дроби формируются с помощью команды \frac&amp;lt;ref&amp;gt;От слова fraction — «дробь».&amp;lt;/ref&amp;gt;:&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt; \[&lt;br /&gt;
   fraction=\frac{numerator}{denominator}&lt;br /&gt;
 \]&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;fraction=\frac{numerator}{denominator}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Как и практически вся математика в LaTeX, дробь записывается так, как читается само выражение.&lt;br /&gt;
&lt;br /&gt;
==== Корни ====&lt;br /&gt;
Для рисования знака корня используется команда&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\sqrt[степень]{«подкоренное выражение»}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Степень можно упустить. В этом случае рисуется обычный квадратный корень.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\overline{&lt;br /&gt;
  \underline{\Large&lt;br /&gt;
    \sqrt[3]{a}+\sqrt[2]{b}+\sqrt[99]{g}&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\overline{\underline{\sqrt[3]{a}+\sqrt[2]{b}+\sqrt[99]{g}}}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что знак корня размещается в соответствии с размерами подкоренного выражения. Если в выражении присутствует только один корень, то это самое разумное поведение, но в случае нескольких корней, как в приведённом выше примере, не помешает выравнивание.&lt;br /&gt;
&lt;br /&gt;
Для выравнивания по высоте используется команда \mathstrut&amp;lt;ref&amp;gt;От английского strut — «подпорка» или «страта».&amp;lt;/ref&amp;gt;. В&lt;br /&gt;
результате её применения вставляется невидимый символ нулевой толщины и высоты, в точности равной высоте круглой скобки:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\[\Large&lt;br /&gt;
  \sqrt[3]{\mathstrut a}+&lt;br /&gt;
  \sqrt[2]{\mathstrut b}+&lt;br /&gt;
  \sqrt[99]{\mathstrut g}&lt;br /&gt;
\]&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\sqrt[3]{a}+\sqrt[2]{b}+\sqrt[99]{g}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Квадратное уравнение ====&lt;br /&gt;
И, наконец, вершина школьной математики — это решение квадратного&lt;br /&gt;
уравнения ax²+bx+c=0:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\[&lt;br /&gt;
  x_{1,2}=\frac{-b\pm\sqrt{b^2-4ac}}{2a}&lt;br /&gt;
\]&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;x_{1,2}=\frac{-b\pm\sqrt{b^2-4ac}}{2a}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Теперь можно смело садиться за написание методичек.&lt;br /&gt;
&lt;br /&gt;
=== Функции ===&lt;br /&gt;
Все символы в математической моде печатаются курсивом, поэтому названия функций, для выделения, печатаются прямым шрифтом. Кроме смены шрифта, функции с обоих сторон должны правильно «отбиваться» пробелами, иначе будет некрасиво. При загрузке русского языка с помощью пакета babel кроме стандартных имён функций доопределяется несколько сокращений, применяемых в русскоязычной литературе. Среди часто употребляемых функций можно упомянуть:&lt;br /&gt;
cos, arccos, sin, arcsin, tg, arctg, ctg, arcctg, sh, ch, th, cth, exp, ln, log, lim, min и max. В математической моде эти функции можно использовать в качестве команд:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\begin{equation*}&lt;br /&gt;
  \begin{split}&lt;br /&gt;
  &amp;amp;\log_2 10=\ln10/\ln2\simeq3.32 \\&lt;br /&gt;
  &amp;amp;\lim_{x\to0}\frac{\sin x}{x}=1\\&lt;br /&gt;
  &amp;amp;(a+b)^n=\sum_{k=1}^n C^k_n a^kb^{n-k}&lt;br /&gt;
 \end{split}&lt;br /&gt;
\end{equation*}&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\log_2 10=\ln10/\ln2\simeq3.32 \lim_{x\to0}\frac{\sin x}{x}=1 (a+b)^n=\sum_{k=1}^n C^k_n a^kb^{n-k}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на обработку индексов для функции log (логарифм) и lim (предел). Для доопределения новых функций правильнее всего воспользоваться в преамбуле командой DeclareMathOperator:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%В преамбуле — определение новых функций&lt;br /&gt;
\DeclareMathOperator{\log-like}{log-like}&lt;br /&gt;
\DeclareMathOperator*{\lim-like}{lim-like}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В зависимости от варианта команды индексы отображаются как для логарифма (команда без звёздочки) или как для предела (команда со звёздочкой).&lt;br /&gt;
&lt;br /&gt;
==== Производная и интеграл ====&lt;br /&gt;
В старших классах, в конце обучения, обычно чуть-чуть касаются понятий интегрирования и дифференцирования. Возможно, для того, чтобы&lt;br /&gt;
правильно подсчитать сдачу в магазине, эти знания не являются необходимыми. Но для изучения физики и, как следствие, химии и биологии без интегралов никак — поверьте мне на слово.&lt;br /&gt;
&lt;br /&gt;
Производная обычно отмечается штрихом. В физике, производная по времени выделяется точкой, для того чтобы отличать её от производной по координате. Можно честно написать \frac{d F(x)}{dx}. Для частной производной вместо буквы d используется спецсимвол \partial:&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\[ f'\quad f''\quad&lt;br /&gt;
\dot{f}\quad \ddot{f} \quad&lt;br /&gt;
\frac{d f}{d x}\quad&lt;br /&gt;
\frac{\partial f}{\partial x} \]&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;f'\quad f''\quad \dot{f}\quad \ddot{f} \quad \frac{d f}{d x}\quad \frac{\partial f}{\partial x}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Взятие производной есть обратная операция по отношению к интегрированию:&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\[&lt;br /&gt;
  \frac{d}{dx}\int F(x) dx=F(x)&lt;br /&gt;
\]&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\frac{d}{dx}\int F(x) dx=F(x)&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Приглядевшись к этому примеру, можно отметить, что, вопреки русским математическим традициям, представленный здесь интеграл не прямой, а наклонный. Это можно исправить, например, загрузив пакет wasysym с опцией integrals. К сожалению, получающиеся интегралы «не смотрятся», поэтому пока лучше использовать начертания по умолчанию в надежде, что в будущем ситуация изменится к лучшему.&lt;br /&gt;
&lt;br /&gt;
Неопределённый интеграл — это хорошо, а определённый — лучше. Качественное оформление пределов интегрирования важно для восприятия формулы.&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\[&lt;br /&gt;
  \int_0^{\infty}\quad&lt;br /&gt;
  \int\limits_0^{\infty}\quad&lt;br /&gt;
  \sum_{i=1}^n\quad&lt;br /&gt;
  \sum\nolimits_{i=1}^n\quad&lt;br /&gt;
\]&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\int_0^{\infty}\quad \int\limits_0^{\infty}\quad \sum_{i=1}^n\quad \sum\nolimits_{i=1}^n\quad&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
По умолчанию пределы размещаются справа от интеграла. Ситуацию можно поправить с помощью команды \limits. Команда \nolimits делает всё ровно наоборот.&lt;br /&gt;
&lt;br /&gt;
==== Скобки ====&lt;br /&gt;
Для визуальной группировки символов внутри формулы скобки — вещь незаменимая. Особенно здорово, если скобки автоматически подгоняют свой размер под выражение, которое они окружают. Парные команды \left и \right включают режим подобной подстройки:&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;\[\left(&lt;br /&gt;
 \left[&lt;br /&gt;
  \left\langle&lt;br /&gt;
   \left\{&lt;br /&gt;
    \left\uparrow&lt;br /&gt;
     \left\lceil&lt;br /&gt;
      \left|&lt;br /&gt;
       \left\lfloor&lt;br /&gt;
        \text{text}^{10}&lt;br /&gt;
       \right\rfloor^9&lt;br /&gt;
      \right|^8&lt;br /&gt;
     \right\rceil^7&lt;br /&gt;
    \right\downarrow^6&lt;br /&gt;
   \right\}^5&lt;br /&gt;
  \right\rangle^4&lt;br /&gt;
 \right]^3&lt;br /&gt;
\right)^2\]&amp;lt;/source&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\left(\left[\left\langle\left\{\left\uparrow\left\lceil\left|\left\lfloor\text{text}^{10}\right\rfloor^9\right|^8\right\rceil^7\right\downarrow^6\right\}^5\right\rangle^4\right]^3\right)^2&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Эстеты, в зависимости от ситуации, могут добавить в конце команды модификатор позиционирования разделителя как левого — l (отбивка как для \left), правого — r (отбивка как для \right) и среднего — m.&lt;br /&gt;
&lt;br /&gt;
==== Перенос формул ====&lt;br /&gt;
В русскоязычной литературе принято, что при переносе строчной формулы на другую строку знак, по которому разрывается формула, дублируется на следующей строке. Например:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;a + b =&lt;br /&gt;
= c&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однако, по умолчанию этого не происходит. Проще всего решить проблему с помощью следующего макроса&amp;lt;ref&amp;gt;Рецепт от Евгения Миньковского из fido7.ru.tex&amp;lt;/ref&amp;gt;, который необходимо определить в преамбуле:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%перенос формул в тексте&lt;br /&gt;
\newcommand*{\hm}[1]{#1\nobreak\discretionary{}%&lt;br /&gt;
 {\hbox{$\mathsurround=0pt #1$}}{}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь определена команда \hm, которую следует добавлять в местах потенциального переноса формулы, примерно, так: \(a + b \hm{=} c\).&lt;br /&gt;
Сделать это можно во время окончательной доводки текста. В любом случае, для полировки рукописи ручная работа необходима.&lt;br /&gt;
&lt;br /&gt;
=== Формулы для Вики ===&lt;br /&gt;
[[Изображение:LXF85-Latex-1.png|thumb|Сделайте так, чтобы Ваш форум или Вики заговорили на языке LaTeX.]]&lt;br /&gt;
«Движок», который использует Википедия для отображения формул, называется WikiTeX. Основной сайт проекта, естественно, представляет из себя вики и расположен по адресу http://wikisophia.org/ Используя это программное обеспечение в связке с LaTeX, можно не только сносно отображать математические формулы на WWW без особых ухищрений, но и отрисовывать шахматные партии, химические формулы, фейнмановские диаграммы, нотные записи и многое другое. TeX разрабатывался как программа, которая может формировать изображения для разных устройств, даже для тех, о которых на момент создания этого текстового процессора профессору Д. Э. Кнуту ничего не было известно. Поэтому TeX обретается в самых неожиданных местах.&lt;br /&gt;
&lt;br /&gt;
=== Заключение ===&lt;br /&gt;
Изложенных правил и приёмов вполне хватит для набора текстов в рамках школьной математики. Для более изощрённых формул требуются более продвинутые приёмы и конструкции. Всё это будет, но чуть позже.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89:LaTeX</id>
		<title>LXF89:LaTeX</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89:LaTeX"/>
				<updated>2008-03-17T20:23:39Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Цикл/LaTeX}}&lt;br /&gt;
'''Компьютерные TeXнологии''' Учимся использовать культовую систему вёрстки&lt;br /&gt;
&lt;br /&gt;
== Вёрстка I ==&lt;br /&gt;
'''''ЧАСТЬ 6''' Мы учимся использовать культовую систему верстки уже полгода, но до сих пор не сказали об этой самой верстке ни слова. '''Евгений Балдин''' спешит исправить сложившуюся ситуацию.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;''Хороший набор – это плотный набор, «дырявый» же набор&amp;lt;br&amp;gt;плохо читается, так как дыры нарушают связанность строки и&amp;lt;br&amp;gt;тем самым затрудняют восприятие мысли.''&amp;lt;br&amp;gt;'''Ян Чихольд.'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Волшебных текстовых процессоров не существует. Телепатией программы пока не обладают. Они, естественно, делают то, что им сказано, но вкус и чувство прекрасного у них полностью отсутствует. В конце занимательного приключения по созданию текстов частенько приходится брать управление в свои руки, дабы навести лоск на почти готовое произведение.&lt;br /&gt;
&lt;br /&gt;
Вёрстка – это процесс составления страниц определённого размера (полос) газеты, журнала, книги из набранных строк, заголовков, иллюстраций и т.п. в соответствии с разметкой или макетом. В этой главе разберёмся с тем как задавать размеры, что такое макет полосы набора и как «удерживать» текст в рамках дозволенного.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Определённые «размеры» и переменные «длины» ===&lt;br /&gt;
Для определения расстояния ''LaTeX'' поддерживает переменные типа «длина». Например, ранее уже упоминалась команда '''\TeXtwidth''' – это переменная, хранящее значение длины, равное ширине текста.&lt;br /&gt;
&lt;br /&gt;
Для создания переменной типа «длина» следует воспользоваться командой '''\newlength'''. В качестве обязательного параметра ей передаётся имя переменной. При создании переменной присваивается нулевая длина, так что следующим шагом необходимо приравнять её чему-то:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\newlength{\MyLen}&lt;br /&gt;
\setlength{\MyLen}{1cm plus 2.5fill minus 5mm}&lt;br /&gt;
\addtolength{\MyLen}{5em}&lt;br /&gt;
Длина \lstinline!\MyLen! равна \the\MyLen.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_92_1.png|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Длина в ''LaTeX'' – это не просто какой-то определённый размер. Это более сложная структура с указанием границ возможного сжатия и растяжения. Границы растяжения определяются с помощью инструкции '''plus''', а сжатия – '''minus'''. При формировании абзацев ''TeX'' использует эту информацию для максимально «красивого» заполнения.&lt;br /&gt;
&lt;br /&gt;
Команда '''\setlength''' эквивалентна оператору присваивания. В свою очередь команда '''\addtolength''' позволяет увеличить переменную на указанную величину, которая может быть отрицательной. Макрос '''\the''' позволяет «развернуть» переменную длины для вывода на печать.&lt;br /&gt;
&lt;br /&gt;
''LaTeX'' «говорит» в терминах англо-американской системы мер. Эта система отживает своё, но её наследие будет ещё долго проявляться и портить жизнь современному «метрическому» миру. Для определённости следует знать, что один дюйм ('''in''') равен 2.54 сантиметра, и в нём умещается 72.27 пунктов (1 pt &amp;amp;asymp; 0.35 mm). Метрические величины представлены привычными сантиметрами ('''cm''') и миллиметрами ('''mm'''). Кроме упомянутых величин, ''LaTeX'' умеет оперировать размерами в больших пунктах ('''bp'''), пунктах Дидо ('''dd'''), пиках ('''pc''') и цицеро ('''cc''') – традиционных единицах измерения, используемых в типографиях. Минимальной ненулевой единицей длины в ''LaTeX'' является приведённый пункт ('''sp'''), который составляет 1/65536 от одного пункта.&lt;br /&gt;
&lt;br /&gt;
Кроме определённых единиц измерения, длину можно задавать также и в относительных: '''1ex''' соответствует высоте строчной латинской буквы x, а '''1em''' – ширине прописной латинской буквы M. Эти величины меняются вместе со сменой шрифта, что позволяет задавать автоматически масштабирующиеся горизонтальные промежутки, не привязанные к конкретному размеру и типу шрифта. Например, широкий пробел, задаваемый с помощью команды '''\quad''', определяется как '''\hspace{1em}'''.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\setlength{\MyLen}{1ex}&lt;br /&gt;
Высота x равна \the\MyLen\par&lt;br /&gt;
\Large \setlength{\MyLen}{1ex}&lt;br /&gt;
Высота x равна \the\MyLen&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_92_2.png|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Интересной инструкцией является длина '''fill''' – это бесконечность. ''TeX'' поддерживает операции с бесконечностями, причём оперирует тремя их видами: '''fil''', '''fill''' и '''filll''', где '''fil'''&amp;lt;&amp;lt;'''fill'''&amp;lt;&amp;lt;'''filll'''. С помощью этих сущностей производится центрирование боксов и более сложные выравнивания.&lt;br /&gt;
&lt;br /&gt;
Если хочется узнать ширину текста, то можно воспользоваться командой '''\settowidth''':&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\settowidth{\MyLen}{очень длинная фраза}&lt;br /&gt;
\addtolength{\MyLen}{1em}&lt;br /&gt;
\centering&lt;br /&gt;
\framebox[1.2\MyLen]{очень длинная фраза}\par&lt;br /&gt;
\framebox[1.2\MyLen]{короткая фраза}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_93_1.png|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Аналогично, команда '''\settoheight''' позволяет выяснить высоту текста над базовой линией, а '''\settodepth''' – глубину под базовой линией. При использовании длины можно добавить перед ней множитель.&lt;br /&gt;
&lt;br /&gt;
А теперь немного «магии» из английского FAQ по ''LaTeX'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\makeatletter&lt;br /&gt;
\newcommand{\maxwidth}{%&lt;br /&gt;
    \ifdim\Gin@nat@width&amp;gt;\linewidth&lt;br /&gt;
        \linewidth&lt;br /&gt;
    \else&lt;br /&gt;
        \Gin@nat@width&lt;br /&gt;
    \fi&lt;br /&gt;
}&lt;br /&gt;
\makeatother&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эта конструкция определяет переменную длины '''\maxwidth''' таким образом, что при вставке картинки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\includegraphics[width=\maxwidth]{«картинка»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ширина картинки становится равной минимальному из двух возможных значений: «естественной» ширины картинки (размер в '''BoundingBox''') или ширины строки. Это позволяет вывести картинку в натуральную величину при условии, что она не выходит за рамки дозволенного и загнать её в эти рамки, коли она за них вылезает.&lt;br /&gt;
&lt;br /&gt;
===== calc =====&lt;br /&gt;
В дополнение к стандартным возможностям, пакет ''calc'' расширяет базовые операции с длинами. Фактически ''calc'' вводит арифметические операции в привычной со школы инфиксной записи.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\setlength{\MyLen}{&lt;br /&gt;
    (1em+\widthof{очень длинная фраза})*\real{1.2}}&lt;br /&gt;
\centering&lt;br /&gt;
\framebox[\MyLen]{очень длинная фраза}\par&lt;br /&gt;
\framebox[\MyLen]{короткая фраза}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_93_2.png|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
При загрузке ''calc'' '''\setlength''' и '''\addtolength''' переопределяются так, что в качестве аргумента после этого можно передавать арифметические выражения. Кроме арифметики, в ''calc'' определяются макросы '''\widthof{текст}''', '''\heightof{текст}''' и '''\depthof{текст}''' – ширина, высота и глубина текста.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_93_3.png|frame|center|Определение ширины ('''width'''), высоты ('''height''') и глубины ('''depth''').]]&lt;br /&gt;
&lt;br /&gt;
При умножении длины на число длина должна стоять до числа ('''4mm*2''' – верно, а '''2*4mm'''– нет). Делить и умножать можно только на целые числа. Действительные числа вводятся с помощью уже использованного в примере макроса '''\real''' и отношения длин, вычисляемого с помощью команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\ratio{«длина»}{«длина»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подробное описание пакета можно найти в документации '''calc.pdf''' из коллекции ''tools''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Скелет страницы ====&lt;br /&gt;
На рисунке ниже приведён результат выполнения команды '''\layout''' из одноимённого пакета. Основное место на странице занимает текст – верстальщики зовут его «основной текст» или «тело текста» (bodytext). Справа и слева от текста расположены поля. Поля обычно остаются пустыми, но иногда они используются для заметок («маргиналий» или «фонариков»). В верхней и нижней части страницы расположены, соответственно, верхний и нижний колонтитулы. Колонтитул представляет из себя справочную строку, помогающую ориентироваться в структуре текста.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
1 один дюйм + \hoffset&lt;br /&gt;
2 один дюйм + \voffset&lt;br /&gt;
3 \oddsidemargin = 2pt&lt;br /&gt;
4 \topmargin = -41pt&lt;br /&gt;
5 \headheight = 18pt&lt;br /&gt;
6 \headsep = 21pt&lt;br /&gt;
7 \textheight = 635pt&lt;br /&gt;
8 \textwidth = 448pt&lt;br /&gt;
9 \marginparsep = 12pt&lt;br /&gt;
10 \marginparwidth = 49pt&lt;br /&gt;
   \marginparpush = 6pt (not shown)&lt;br /&gt;
   \voffset = 0pt&lt;br /&gt;
   \paperheight = 845pt&lt;br /&gt;
11 \footskip = 50pt&lt;br /&gt;
   \hoffset = 0pt&lt;br /&gt;
   \paperwidth = 597pt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_93_4.png|thumb|right|300px|Макет полосы набора класса ''scrartcl'' (опция '''a4paper'''). Результат выполнения команды '''\layout'''.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Совокупность размеров и расположений указанных полей, а также вид и содержание колонтитулов называется макетом полосы набора. На рисунке пунктирной линией изображены поля драйвера ('''1''' и '''2''') относительно которых выстраиваются все остальные поля. По договорённости отступы до полей драйвера равны одному дюйму. Переопределив '''\hoffset''' и '''\voffset''' (по умолчанию они равны нулю), можно легко сдвинуть полосу набора целиком по горизонтали и вертикали, соответственно.&lt;br /&gt;
&lt;br /&gt;
Ниже перечислены параметры, которые управляют макетом полосы набора:&lt;br /&gt;
* Тело текста характеризуется высотой '''\TeXthight''' ('''7''') и шириной '''\TeXtwidth''' ('''8''') При многоколоночной вёрстке ширина колонки равна '''\columnwidth'''. Переменная '''\linewidth''' принимает значение, равное длине строки текущего текста.&lt;br /&gt;
* '''\oddsidemargin''' ('''3''') добавляется слева в случае односторонней печати. При двусторонней печати полосы набора для чётных и нечётных страниц различаются. В этом случае для нечётных слева опять же добавляется '''\oddsidemargin''', а для чётных '''\evensidemargin'''.&lt;br /&gt;
* Верхний колонтитул располагается на расстоянии '''\topmargin''' ('''4''') от поля драйвера, имеет высоту '''\headheight''' ('''5'''), а тело текста отступает от колонтитула на расстояние '''\headsep''' ('''6''').&lt;br /&gt;
* '''\footskip''' позиционирует базовую линию нижнего колонтитула относительно последней строки текста.&lt;br /&gt;
* Поля для заметок имеют ширину '''\marginparwidth''' ('''10''') и отступают от тела текста на расстояние '''\marginparsep''' ('''9'''). Ещё одна опция управляет минимальным расстоянием между заметками: '''\marginparpush'''.&lt;br /&gt;
&lt;br /&gt;
===== Выбор размера бумаги =====&lt;br /&gt;
Физический размер бумаги описывается параметрами '''\paperwidth''' и '''\paperheight'''. Стандартные базовые классы ''LaTeX'' ('''article''', '''book''', '''report''' и '''letter''') по умолчанию предполагают, что для печати используется бумага формата letter. Очевидно, это умолчание не годится для России, где стандартом является формат A4 (210x297 мм). Обычно установить правильный формат можно с помощью передачи параметра '''a4paper''' при выборе класса документа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\documentclass[a4paper,12pt,oneside]{scrbook}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для создания небольших брошюрок со страницей размера A5 (половина размера A4) используется опция '''a5paper'''.&lt;br /&gt;
&lt;br /&gt;
===== Ориентация =====&lt;br /&gt;
Для портретной и альбомной ориентации вообще-то требуются разные макеты полосы набора. Альбомная ориентация может использоваться по умолчанию в некоторых специализированных классах (например, '''slides''').&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_94_1.png|thumb|right|150px|''lscape'' в действии.]]&lt;br /&gt;
Если повернуть требуется только текст без изменения полей колонтитулов, то проще всего воспользоваться окружением '''landscape''' из пакета ''lscape''. Всё, что находится внутри этого окружения поворачивается на 90 градусов против часовой стрелки. При использовании ''pdflatex'' для изменения ориентации не только текста, но и страницы (дабы не наклонять при чтении текста голову набок) при загрузке пакета следует передать ему опцию '''pdftex''' или воспользоваться пакетомнадстройкой ''pdflscape''.&lt;br /&gt;
&lt;br /&gt;
Лучше не менять параметры макета во время набора, но если очень хочется это сделать, то можно воспользоваться стандартным пакетом ''portland''. Он позволяет менять портретную ориентацию на альбомную и обратно на лету, переопределяя соответствующие управляющие макетом переменные. Команды '''\portrait''' и '''\landscape''' работают как переключатели между этими режимами. В пакете определены и одноимённые с переключателями окружения. Это довольно низкоуровневый пакет, и пользоваться им надо аккуратно.&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_94_2.png|thumb|right|200px|''rotpages'' в действии.]]&lt;br /&gt;
Если по какой-то причине требуется развернуть текст на 180 градусов, можно воспользоваться пакетом ''rotpages''. В пакете определены два переключателя режима '''\rotboxpages''' и '''\endrotboxpages''', которые указывают границы повёрнутого теста. Пакет умеет разворачивать не только страницы, но и колонки. Подробности можно найти в документации: '''rotpages-doc.pdf'''.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Меняем макет ===&lt;br /&gt;
Причина, по которой неискушённый ТеХник начинает менять макет полосы набора, обычно заключается в том, что он использует стандартные классы ''LaTeX'' – один из четвёрки '''article''', '''book''', '''report''' или '''letter'''. Это очень древние классы, и на них много чего «завязано», поэтому они прибывают в абсолютно замороженном состоянии. Поэтому лучше для начала найти себе класс по душе. Например, '''scrartcl''', '''scrbook''', '''scrreprt''' и '''scrlettr''' – классы из коллекции ''KOMA-Script'', которые дублируют функциональность стандартной четвёрки, но ориентируются на европейских пользователей и размер листа A4. А.И. Роженко в рамках коллекции ''ncclatex'' (NCC) предоставляет класс '''ncc''', ориентированный на русских TeXников.&lt;br /&gt;
&lt;br /&gt;
==== Двигаем размеры ====&lt;br /&gt;
Выбор, естественно, не ограничивается упомянутыми выше классами – он огромен. Поэтому, прежде чем что-то изменять, следует внимательно изучить уже имеющиеся решения. И даже если вы знаете, что делаете, лучше не переопределять переменные, управляющие размерами макета полосы набора, вручную. Правильным решением будет воспользоваться одним из уже имеющих специализированных пакетов, например: '''geometry''' или '''vmargin'''.&lt;br /&gt;
&lt;br /&gt;
===== geometry =====&lt;br /&gt;
Пакет '''geometry''' меняет размеры прямо в процессе загрузки стилевого файла, например, так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\usepackage[height=25cm,a4paper,hmargin={3cm,2cm}]{geometry}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разбор параметров выполняется с помощью пакета ''keyval'', который уже упоминался в статье «Графика» (см. LXF86). В качестве параметров можно передавать выражения, если загружен пакет ''calc''.&lt;br /&gt;
&lt;br /&gt;
Список воспринимаемых пакетом опций очень обширен. В документации ('''geometry.pdf''') подробное описание всех имеющихся опций занимает свыше пяти страниц текста. Использование этого пакета для изменения размеров полей является более предпочтительным, чем изменение размеров напрямую. Обилие принимаемых параметров позволит задать любой формат полосы набора в наиболее естественной форме, не ошибившись при расчётах. Подробное описание пакета, к сожалению, выходит за все разумные ограничения на объём статьи. К счастью, документация очень хорошая и чрезвычайно подробная.&lt;br /&gt;
&lt;br /&gt;
===== vmargin =====&lt;br /&gt;
Пакет ''vmargin'' управляет размерами макета через выставку полей. Перед этим следует задать формат листа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\setpapersize[«ориентация»]{«формат листа»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В качестве обязательного параметра команды можно указать один из следующих форматов: '''A0''', '''A1''', …, '''A9''', '''B0''', '''B1''', …, '''B9''', '''C0''',…, '''C9''', '''USletter''', '''USlegal''' и '''USexecutive'''. Необязательный параметр может принимать значения '''landscape''' (альбомная ориентация) или '''portrait''' (портретная ориентация, по умолчанию). Для нестандартных форматов листа можно задать размеры с помощью ключевого слова '''custom''' команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\setpapersize{custom}{«ширина»}{«высота»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как вы определитесь с размером страницы, можно задавать размеры для полосы набора с помощью одной из следующих команд:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%Полоса набора с колонтитулами&lt;br /&gt;
\setmargins{«ширина поля слева»}{«высота поля сверху»}%&lt;br /&gt;
    {«ширина текста»}{«высота текста»}%&lt;br /&gt;
    {«высота»}{«отступ»}%верхний колонтитул&lt;br /&gt;
    {«высота»}{«отступ»}%нижний колонтитул&lt;br /&gt;
%Полоса набора без колонтитулов&lt;br /&gt;
\setmargnohf{«ширина поля слева»}{«высота поля сверху»}%&lt;br /&gt;
    {«ширина текста»}{«высота текста»}%&lt;br /&gt;
%Установка рамеров без изменения колонтитулов&lt;br /&gt;
\setmarg{«ширина поля слева»}{«высота поля сверху»}%&lt;br /&gt;
    {«ширина текста»}{«высота текста»}%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме перечисленных команд, определены их аналоги: '''\setmarginsrb''', '''\setmargnohfrb''', '''\setmargrb'''. Отличие состоит в том, что вместо ширины и высоты тела текста в качестве параметров им передаются ширина правого поля и высота нижнего поля. Подробно пакет описан в документации '''vmargin.pdf'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Стили страницы ====&lt;br /&gt;
Полоса набора – это не только размеры: это ещё и наполнение колонтитулов. Обычно оно определяется в классе документа. Здесь без необходимости лучше тоже ничего не менять.&lt;br /&gt;
&lt;br /&gt;
Простейший способ изменить стиль страницы – это воспользоваться командой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\pagestyle{«стиль страницы»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если стиль надо переопределить только для текущей страницы, то следует воспользоваться командой '''\thispagestyle{стиль страницы}'''.&lt;br /&gt;
&lt;br /&gt;
Есть три стандартно определённых стиля:&lt;br /&gt;
* empty Страница выводится без каких-либо колонтитулов – только текст.&lt;br /&gt;
* plain Выводится только номер страницы в нижнем колонтитуле.&lt;br /&gt;
* headings В верхнем колонтитуле выводится номер страницы и информация, определяемая классом документа.&lt;br /&gt;
&lt;br /&gt;
Если и это наполнение не устраивает, то можно определить свой собственный стиль. Пакет ''fancyhdr'' специализируется как раз на этом.&lt;br /&gt;
&lt;br /&gt;
===== fancyhdr =====&lt;br /&gt;
[[Изображение:Img_89_95_1.png|thumb|right|300px|Заполняем колонтитулы с помощью ''fancyhdr''.]]&lt;br /&gt;
Чтобы воспользоваться возможностями пакета, необходимо загрузить стилевой файл и выбрать стиль с помощью '''\pagestyle'''&lt;br /&gt;
&lt;br /&gt;
Пакет fancyhdr позволяет управлять содержимым колонтитула. Возможности: верхний и нижний колонтитул разбивается на три независимых части, многострочные колонтитулы, колонтитулы, вылезающие по ширине за '''\textwidth''', декоративные линейки, разные колонтитулы для чётных и нечётных страниц, отдельные колонтитулы для специальных полос (начала глав, страницы, отведённые под плавающие объекты). Вот простейший пример для определения колонтитулов с помощью ''fancyhdr'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\usepackage{fancyhdr}&lt;br /&gt;
…&lt;br /&gt;
\begin{document}&lt;br /&gt;
\pagestyle{empty} %очищаем стиль страницы&lt;br /&gt;
\pagestyle{fancy} %включаем пользовательский стиль&lt;br /&gt;
\lhead{А.В.Тор} %верхний колонтитул слева&lt;br /&gt;
\chead{---~\arabic{page}~---} % там же по центру&lt;br /&gt;
\rhead{Статья} %верхний колонтитул справа&lt;br /&gt;
% аналогично для оформления нижнего колонтитула&lt;br /&gt;
\cfoot{---~\roman{page}~---}&lt;br /&gt;
\lfoot{\hspace{0.7cm}Это просто демонстрация}&lt;br /&gt;
\rfoot{возможностей \textbf{fancyheadings}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная '''page''' содержит номер страницы. Подробности о том что можно сотворить с колонтитулами, следует искать в документации к пакету '''fancyhdr.pdf'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Причёсываем текст ===&lt;br /&gt;
[[Изображение:Img_89_95_2.png|thumb|right|200px|Дефект набора (коридор).]]&lt;br /&gt;
Теперь, когда границы определены, разберемся, что можно сделать для красивого размещения текста на странице. Часть забот по следованию правилам вёрстки ''LaTeX'' берёт на себя. Вам, например, не требуется следить за единообразием оформления полос. Но есть дефекты, которые компьютеру заметить не под силу, например, так называемые коридоры.&lt;br /&gt;
&lt;br /&gt;
===== Строка =====&lt;br /&gt;
[[Изображение:Img_89_95_3.png|thumb|right|200px|Переполненная строка. Включена опция ''draft''.]]&lt;br /&gt;
Когда строка с точки зрения TeX становится слишком разряженной ('''Underfull''') или слишком сжатой ('''Overfull'''), в log-файле появляются предупреждения, начинающиеся словами вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Overfull \hbox (26.1765pt too wide) in paragraph at lines 347--356&lt;br /&gt;
[][]\T2A/cmr/m/n/12 Список вос-при-ни-ма-е-мых па-ке-том оп-ций&lt;br /&gt;
очень об-ши-рен. В до-ку-мен-та-ции geometry.pdf&lt;br /&gt;
Если при выборе класса документа передать ему опцию draft:&lt;br /&gt;
\documentclass[draft,a4paper,12pt,oneside]{scrbook}&lt;br /&gt;
то такие проблемные места будут отмечаться прямо в тексте.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обычно подобные переполнения связаны с тем, что ''LaTeX'' не знает, как перенести какое-либо слово. В этом случае следует сообщить ему, что и где можно переносить, как это было показано во второй части цикла «Базовые элементы» (см. LXF84). В крайнем случае можно насильно разорвать строку с помощью команды '''\linebreak''' или '''\\'''. В отличии от '''\linebreak''', команда '''\\''' не выравнивает остаток строки по правому полю.&lt;br /&gt;
&lt;br /&gt;
Если можно редактировать текст, то для исправления дефектов набора лучше переделать предложение так, чтобы в новой инкарнации тест не создавал проблем для чтения.&lt;br /&gt;
&lt;br /&gt;
===== Горизонтальные пробелы =====&lt;br /&gt;
Расстояние между словами можно изменить с помощью горизонтальных промежутков. Они создаются с помощью команды '''\hspace'''. В качестве параметра команде передаётся длина. Вариант команды '''\hspace*''' отличается от основной тем, что создание пробела не игнорируется даже тогда, когда пробел приходится на начало или конец строки.&lt;br /&gt;
&lt;br /&gt;
Существует несколько определённых по умолчанию горизонтальных пробелов:&lt;br /&gt;
* '''\quad''' – горизонтальный промежуток шириной '''1em'''. Также есть '''\qquad''' – удвоенный '''\quad''', и '''\endspace''' – половина от '''\quad'''.&lt;br /&gt;
* '''\hfill''' – бесконечный горизонтальный промежуток. Два '''\hfill''' подряд в два раза больше, чем один. Также есть «уменьшенная» бесконечность – '''\hfil'''.&lt;br /&gt;
* '''\hrulefill''' – то же, что и '''\hfill''', но заполненный промежуток подчеркивается. Аналогично, есть команда, заполняющая всё точками – '''\dotfill'''.&lt;br /&gt;
&lt;br /&gt;
===== Страница =====&lt;br /&gt;
Проблемы могут возникнуть и при формировании страниц. В крайнем случае, можно воспользоваться командами принудительного завершения страницы '''\pagebreak''' или '''\newpage'''. Отличие первой команды от второй в том, что после формирования страницы полоса выравнивается по нижней кромке – это может привести к неоправданному растяжению страницы. Если проблему можно решить путём увеличения/уменьшения страницы на одну-две строки, то лучше воспользоваться следующими макросами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\newcommand{\longpage}{\enlargethispage{\baselineskip}}&lt;br /&gt;
\newcommand{\shortpage}{\enlargethispage{-\baselineskip}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда '''\longpage''' увеличивает тело текста текущей страницы на одну строку, а '''\shortpage''', соответственно, уменьшает. Длина '''\baselineskip''' служит для определения интерлиньяжа – междустрочного пробела.&lt;br /&gt;
&lt;br /&gt;
===== Висячая строка =====&lt;br /&gt;
Одним из самых неприятных дефектов набора является «висячая строка». Висячая строка – это концевая строка абзаца, стоящая первой на странице, или начальная срока абзаца, стоящая на странице последней. Этих артефактов следует всячески избегать. Для подавления этого эффекта в заголовке документа следует определить две переменные:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%подавление висячих строк.&lt;br /&gt;
\clubpenalty=10000&lt;br /&gt;
\widowpenalty=10000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Вертикальные просветы =====&lt;br /&gt;
По аналогии с командой '''\hspace{длина}''', вертикальные промежутки организуются с помощью команды '''\vspace{длина}'''. Модификация команды '''\vspace*{длина}''' создаёт вертикальный просвет, которые не игнорируется, даже если просвет попадает на начало или конец страницы.&lt;br /&gt;
&lt;br /&gt;
Вертикальные просветы также имеют свои умолчания:&lt;br /&gt;
* '''\bigskip''' – вертикальный промежуток, равный примерно '''\baselineskip'''. Также имеются '''\medskip''' – половина от '''\bigskip''', и '''\smallskip''' – четверть от '''\bigskip'''.&lt;br /&gt;
* '''\vfill''' – бесконечный вертикальный промежуток. Два '''\vfill''' подряд в два раза больше, чем один. Также есть «уменьшенная» бесконечность – '''\vfil'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Печать через две строки ====&lt;br /&gt;
До сих пор временами встречаются требования вида: «Предоставить диплом, набранный в два интервала» – пережиток эпохи печатных машинок [при наборе «в два интервала» интерлиньяж равен удвоенному значению кегля, «в один интервал» – самому значению кегля, – прим. ред.]. Для решение этой проблемы лучше всего воспользоваться пакетом ''spacing''. В пакете определена команда '''\doublespacing''', которая выполняет искомое действие. Так же в spacing определены макросы '''\onehalfspacing''' и '''\singlespacing''' – печать в полтора и один интервал, соответственно. Для вертикальной разрядки небольшого фрагмента текста лучше воспользоваться одноимёнными окружениями или окружением '''spacing''':&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\begin{spacing}{2.5}&lt;br /&gt;
    &amp;lt;&amp;lt;Этот текст, напечатан с&lt;br /&gt;
    интервалом в две с&lt;br /&gt;
    половиной строки&amp;gt;&amp;gt;.&lt;br /&gt;
\end{spacing}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_96_1.png|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
В качестве основного параметра окружению '''spacing''' передаётся интервал, с которым следует печатать текст.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Послесловие ===&lt;br /&gt;
В этом тексте присутствует далеко не вся информация, необходимая для вёрстки текста. Несмотря на то, что ''LaTeX'' позволяет верстать книги любителям без помощи профессионалов, лучше при любой возможности спрашивать у этих профессионалов совета. Понимание того, что, где и зачем надо исправлять, в случае ''LaTeX'' чрезвычайно важно, потому что, как правило, и так очевидно.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89</id>
		<title>LXF89</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89"/>
				<updated>2008-03-17T20:16:15Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Linux Format 89 (2), Февраль 2007==&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89.jpg|frame|right]]&lt;br /&gt;
__TOC__&lt;br /&gt;
=== Обзоры ===&lt;br /&gt;
* [[LXF89:CrossOver Linux 6.0|CrossOver Linux 6.0]] Запуск Windows-приложений в Linux... В том числе, игр! Читайте дальше&lt;br /&gt;
* [[LXF89:Damn Small Linux 3.1|Damn Small Linux 3.1]] Самый маленький из существующих LiveCD – что можно впихать в 50 МБ?&lt;br /&gt;
* [[LXF89:Ardour 2.0|Ardour 2.0]] В прошлом году он затмил Muse и Rosegarden – как поведет себя новая версия?&lt;br /&gt;
* [[LXF89:OpenBSD 4.0|OpenBSD 4.0]] Взвешиваем все «за» и «против» стабильной системы для администраторов&lt;br /&gt;
&lt;br /&gt;
==== Сравнение ====&lt;br /&gt;
* [[LXF89:Сравнение|Аудиотрекеры]] The Ultimate SoundTracker породил новый жанр музыки. Двадцать лет спустя трекеры все еще сильны.&lt;br /&gt;
&lt;br /&gt;
==== Специальный репортаж ====&lt;br /&gt;
* [[LXF89:Спецрепортаж|Mono уже с нами!]] Mono проложил дорогу в основные дистрибутивы Linux: почему это хорошо и как это работает?!&lt;br /&gt;
&lt;br /&gt;
==== Интервью ====&lt;br /&gt;
* [[LXF89:Интервью|Интервью: Майкл Тиманн]] Linux Format поймал Майкла Тиманна, чтобы послушать воспоминания ветерана Open Source&lt;br /&gt;
&lt;br /&gt;
==== Расширения Firefox ====&lt;br /&gt;
* [[LXF89:Расширения Firefox|ТОП-10: расширения Firefox]] Заставьте свой браузер трудиться!&lt;br /&gt;
&lt;br /&gt;
==== Применяем навыки Linux ====&lt;br /&gt;
* [[LXF89:Применяем навыки Linux|Применяем навыки Linux]] Узнайте, как применить ваши Linux-навыки в Windows и Mac OS X!&lt;br /&gt;
&lt;br /&gt;
==== Нестандартное программирование ====&lt;br /&gt;
* [[LXF89:Нестандартное программирование|Ruby без Rails]] Что за язык лежит в основе популярной MVC-среды?&lt;br /&gt;
&lt;br /&gt;
==== Что за штука…? ====&lt;br /&gt;
* [[LXF89:Что за штука...|Python 3000]] без оператора print и функции reduce()? О чем думает Гвидо?&lt;br /&gt;
&lt;br /&gt;
==== Музыкальный Linux ====&lt;br /&gt;
[[LXF89:Музыкальный Linux|Драм-машины]] Зачем вам барабан, когда есть Linux?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Учебники ===&lt;br /&gt;
* [[LXF89:Первые шаги|Первые шаги]]&amp;lt;br&amp;gt;APT: Управление пакетами. Следите за здоровьем своей системы по фирменному рецепту Linux Format для APT и Debian.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Mono|Mono]]&amp;lt;br&amp;gt;Пишем RSS-ридер. Зачем тратить время на просмотр web-сайтов, когда его можно потратить на написание собственной утилиты для чтения RSS?&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Безопасность|Безопасность, часть 5: Ищем лазутчиков]]&amp;lt;br&amp;gt;Устанавливаем наблюдение за системой для предотвращения вторжений.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Hardcore Linux|Hardcore Linux: Ядро]]&amp;lt;br&amp;gt;Собери свое собственное. Это должен знать каждый линуксоид.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:GTK+|GTK+, часть 3]]&amp;lt;br&amp;gt;Сигналы и сообщения. Знакомство с «движущим механизмом» любой GTK-программы.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Unix API|Unix API, часть 8]]&amp;lt;br&amp;gt;Демоны. Эти программы привыкли делать всю «черную работу» – но как они выглядят изнутри?&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Java EE|Java EE, часть 1]]&amp;lt;br&amp;gt;Адресная книга. Начните изучать сервлеты с практически полезного примера.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:PostgreSQL|PostgreSQL, часть 4]]&amp;lt;br&amp;gt;Программные интерфейсы. libpq позволит вам использовать все функции СУБД в своих собственных приложениях.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:LaTeX|LaTeX, часть 6]]&amp;lt;br&amp;gt;Верстка. Сегодня мы поговорим о размещении элементов на странице.&lt;br /&gt;
&lt;br /&gt;
* [[LXF89:Blender|Blender, часть 2]]&amp;lt;br&amp;gt;Моделируем пингвинов. Учимся использовать примитивы и кривые Безье.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ответы ===&lt;br /&gt;
* [[LXF89:Ответы|Ответы]] Наши постоянные эксперты разрешат самые сложные из ваших проблем.&lt;br /&gt;
* [[LXF89:Совет месяца|Совет месяца: Перенаправление]]&lt;br /&gt;
* [[LXF89:Краткая справка|Краткая справка: Псевдонимы оболочки]]&lt;br /&gt;
* [[LXF89:Frequently Asked Questions|Часто задаваемые вопросы: Печать]]&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89:%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5</id>
		<title>LXF89:Сравнение</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89:%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5"/>
				<updated>2008-03-17T19:13:55Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Сравнение: Аудиотрекеры ==&lt;br /&gt;
''The Ultimate SoundTracker породил новый жанр музыки. Двадцать лет спустя трекеры все еще сильны. '''Грэм Моррисон''' рассматривает шесть лучших из них.''&lt;br /&gt;
&lt;br /&gt;
{{Врезка|left|&lt;br /&gt;
|Заголовок=Наш выбор...&lt;br /&gt;
|Содержание=&lt;br /&gt;
* [[#CheeseTracker|CheeseTracker]]&lt;br /&gt;
* [[#ChibiTracker|ChibiTracker]]&lt;br /&gt;
* [[#Schism Tracker|Schism Tracker]]&lt;br /&gt;
* [[#ShakeTracker|ShakeTracker]]&lt;br /&gt;
* [[#Skale|Skale]]&lt;br /&gt;
* [[#SoundTracker|SoundTracker]]&lt;br /&gt;
|Ширина=150px}}&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=Про наш тест...&lt;br /&gt;
|Содержание=&lt;br /&gt;
Мы откопали несколько наших любимых «модов» из восьмидесятых и прогнали через тест шесть наиболее популярных трекеров для Linux. Вот на что мы обращали внимание:&lt;br /&gt;
* '''Подлинность:''' Настоящему трекеру нужны: чрезвычайно сложный, псевдо-шестнадцатеричный редактор паттернов, редактор инструментов для создания сложных звуков и редактор сэмплов, преобразующий «сырой» шум в нечто пригодное для создания мелодии.&lt;br /&gt;
* '''Совместимость:''' Несмотря на доверие к 20-летней технологии, идеальный трекер должен иметь современные ядро и экранное разрешение и работать с нашими аудиодрайверами ALSA без непременной установки престарелой Open Sound System (предтеча ALSA).&lt;br /&gt;
* '''Простота использования:''' Мы искали дружественные инструменты запроса файлов, широкую совместимость форматов сэмплов и систему помощи, способную приоткрыть завесу тайны над темным искусством создания музыки.&lt;br /&gt;
|Ширина=30%}}&lt;br /&gt;
&lt;br /&gt;
Если вы раньше не слышали о модуле ''SoundTracker'', вы, видимо, слишком юны, чтобы знать о нем. В конце восьмидесятых и на протяжении девяностых компьютерная музыка в основном распространялась и создавалась при помощи модуля ''SoundTracker'', известного как «мод». Тогда на пересылку файла в несколько мегабайт уходило чуть ли не полжизни, и вся ваша коллекция музыки уместилась бы на одной 1,44Мб-дискете.&lt;br /&gt;
&lt;br /&gt;
При тех скоростях передачи ледникового периода, решением было использовать программы, именуемые трекерами, создавая музыку с нуля при помощи последовательности кодов различных нот и эффектов, связывающих ноты с определенными сэмплами. Результатом был мод: законченный музыкальный файл со звуками или нотами, увязанными с данными аудио-сэмпла. Благодаря различным эффектам можно было создавать приличные музыкальные фрагменты, используя всего несколько коротких сэмплов, и многие из ранних модов не превышали 40 КБ.&lt;br /&gt;
&lt;br /&gt;
Первый трекер такого типа назывался ''The Ultimate SoundTracker''; написал его Карстен Обарски [Karsten Obarski] в 1987 г. для Commodore Amiga. Большинство современных программ-трекеров работают фактически подобно детищу Обарски: как правило, есть пять отдельных страниц для работы с файлами, редактирования паттернов, данных звуковых сэмплов, редактора инструментов и информации о композиции. Но в первую очередь большинство людей вспоминает именно его редактор паттернов. Он больше похож на электронную таблицу, чем на средство создания музыки, обычно с 64 строками для нот одна под другой и от четырех до 100 столбцов на каждую звуковую дорожку. Математически точная компоновка этого редактора паттернов придает особое звучание композиции, отчасти благодаря тому, что 64 вертикальных нотных позиции легко делятся на четыре (64/4 = 16 нот на каждый блок).&lt;br /&gt;
&lt;br /&gt;
За последние 20 лет программы-трекеры сформировали для себя некоторую нишу. Их особый стиль программирования означает, что этот жанр никогда не умрет, так что аудиотрекеры сохраняют невероятную популярность. И в Linux доступна львиная доля хороших трекеров. Это '''Сравнение''' собирается выявить лучший из них.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SoundTracker ==&lt;br /&gt;
''Начнем с самого начала.''&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_15_1.jpg|thumb|right|300px|Классический вид трекера и паттернов ''SoundTracker'' почти не изменился за последние 20 лет.]]&lt;br /&gt;
Начнем с ''SoundTracker'', потому что он и есть начало всему. Это прямая копия первой программы для музыкального трекинга (''The Ultimate SoundTracker''), породившей целый жанр зацикленной, повторяющейся танцевальной музыки, которая и принесла известность трекерам. ''SoundTracker'' воспроизводит наиболее близкие к оригиналу приемы работы с феноменом трекеров на вашей Linux-машине. Оборотная сторона – уж очень мало уступок XXI веку. ''SoundTracker'' выглядит какой-то червоточиной из 1987 в 2007 год.&lt;br /&gt;
&lt;br /&gt;
=== Теперь о деле ===&lt;br /&gt;
Пользовательский интерфейс очень похож на оригинальный ''SoundTracker'' и разбивает окно приложения ''GTK1'' на три основных области. Данные о композиции засунуты в верхний левый угол, в правом верхнем углу – мониторинг звука, а всю нижнюю половину занимают пять вкладок, содержащих основную функциональность: управление файлами, редактор инструментов, редактирование сэмплов и данные модуля.&lt;br /&gt;
&lt;br /&gt;
Эти функции одинаковы практически во всех трекерах, но страница '''File''' несколько удивляет – после 20 лет существования инструментов запроса файлов. Она работает по типу первоначального приложения восьмидесятых, с единственным окном просмотра файловой системы, используемым для загрузки и сохранения модулей, инструментов и аудиосэмплов. Вы просто щелкаете по типу файла, который хотите загрузить, затем переходите к месту, где он хранится.&lt;br /&gt;
&lt;br /&gt;
Аудиосэмплы нужно преобразовать в монофонические WAV-файлы, и если вы попытаетесь загрузить стереофайл, то сможете выбрать либо левый, либо правый канал, или позволить ''SoundTracker'' смешать их на одном треке. Можно также загрузить «сырые» аудиоданные, но это полезно только при поиске данных сэмпла в каком-нибудь исполняемом файле. Большие аудиофайлы также вызовут проблемы. Лучший подход – создать библиотеку одиночных сэмплов и использовать аудиоредактор из ''SoundTracker'' для установки точек зацикливания и огибающих [envelope – контроль уровня звука, зачастую выражающийся графически, – прим. пер.]. Впрочем, это справедливо для каждого рассматриваемого здесь трекера.&lt;br /&gt;
&lt;br /&gt;
Следующий шаг – переход на вкладку '''Instrumental Editor'''. Отсюда можно менять громкость и высоту тона сэмпла и добавлять амплитудную огибающую для изменения громкости сэмпла во времени. Есть также возможность добавить вибрато, а прослушать любые выполненные изменения можно, «играя» на обычной QWERTY-клавиатуре.&lt;br /&gt;
&lt;br /&gt;
Как только вы создадите инструмент или пару, действие перемещается в редактор паттернов. Это сердце любого аудиотрекера, и все они (в большей или меньшей степени) функционируют сходным образом. Однако компоновка ''SoundTracker'' понятна, и паттерн прокручивается вертикально, давая графическое представление текущей позиции воспроизведения. Это важно для редактирования неправильных нот, и более того, отметки, разграничивающие каждый такт и долю, привязываются к временной сигнатуре данной композиции – уникальная функция ''SoundTracker''.&lt;br /&gt;
&lt;br /&gt;
=== Спасибо за музыку ===&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=Нотация редактора паттернов&lt;br /&gt;
|Содержание=&lt;br /&gt;
[[Изображение:Img_89_15_2.png|right]]&lt;br /&gt;
# '''Добавить ноту.''' Просто нажимайте клавиши.&lt;br /&gt;
# '''Инструмент.''' Число, показывающее инструмент для каждой ноты.&lt;br /&gt;
# '''Уровень звука.''' Чем больше, тем громче.&lt;br /&gt;
# '''Эффект.''' Скольжение, дрожание и прочее.&lt;br /&gt;
# '''Канал.''' Воспроизведение ограниченного числа каналов.&lt;br /&gt;
|Ширина=45%}}&lt;br /&gt;
В верхнем левом углу экрана размещается область данных композиции, включая управление подачей ('''Play/Pause''', '''Play Pattern''' и '''Stop'''), информацию о количестве ритм-ударов в минуту (BPM – beats per minute), длине паттерна и сопутствующих настройках. Наиболее важная часть этой области – список последовательности паттернов прямо под меню '''File'''. Создав новые паттерны, вы выстраиваете их последовательно, чтобы сформировать завершенную композицию путем повторения определенных кусков в определенное время. Кнопка '''Play Pattern''' очень полезна при создании собственных паттернов, поскольку не позволяет треку соскользнуть на проигрывание всей композиции.&lt;br /&gt;
&lt;br /&gt;
У ''SoundTracker'' нет современных украшений, и он приносит на рабочий стол Linux наиболее близкий к оригиналу способ работы. Старый дизайн графического интерфейса вынуждает вас создавать музыку особым способом, и именно поэтому так много людей любят писать музыку с помощью программ-трекеров. Было бы неплохо увидеть поддержку стереозвука, и, возможно, инструмент запроса файлов, но нас удивило, насколько этот метод создания музыки эффективен и насколько хороши результаты. ''SoundTracker'' – это, определенно, один из претендентов на победу, и несмотря на тот факт, что он уже несколько лет не обновлялся, будет интересно взглянуть, что сумели противопоставить классическому дизайну ''SoundTracker'' трекеры поновее.&lt;br /&gt;
&lt;br /&gt;
=== Вердикт Linux Format ===&lt;br /&gt;
'''Версия:''' 0.6.8&lt;br /&gt;
&lt;br /&gt;
'''Сайт:''' http://www.soundtracker.org&lt;br /&gt;
&lt;br /&gt;
'''Цена:''' Бесплатно под GPL&lt;br /&gt;
&lt;br /&gt;
''Вещь дельная, а к оригиналу просто ближе не бывает. Ему не хватает блеска, но для старта это превосходное место.''&lt;br /&gt;
&lt;br /&gt;
'''Рейтинг — 8/10'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schism Tracker ==&lt;br /&gt;
''Продукт «старой школы»: крутой или просто старый?''&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_16_1.jpg|thumb|right|300px|Добро пожаловать в 1987 год. Забудьте о компьютерной мыши: здесь она вам не поможет...]]&lt;br /&gt;
''Schism Tracker'' (см. LXF87/88) тянет на награду в номинации «Самое странное имя», но вряд ли завоюет что-нибудь за дизайн пользовательского интерфейса. Вместо общепринятых органов управления, известных как «меню» и «кнопки», ''Schism Tracker'' использует исключительно комбинации клавиш. Почти все рассмотренные нами трекеры применяют такие же клавиши, унаследованные от оригинала, но это единственный трекер, воображающий, что пользователь способен все их запомнить.&lt;br /&gt;
&lt;br /&gt;
Нажатие '''F5''' воспроизведет вашу мелодию, а '''F8''' остановит воспроизведение. '''F2''' вызовет редактор/трекер паттернов, '''F3''' и '''F4''' откроют окна сэмплов и инструментов. Совершенно дурацкая выдумка – то, что ''Schism'' скрывает указатель мыши, оставляя вас в ожидании момента «прилива сил», чтобы дело пошло на лад. Впрочем, '''Ctrl+M''' вернет указатель на место.&lt;br /&gt;
&lt;br /&gt;
=== Обратно в реальность ===&lt;br /&gt;
С другой стороны, все, что нужно от трекера, здесь есть – только упрятано за парой нажатий на клавиши. Но настоящая морока начинается при попытке создать собственный паттерн. Мы не смогли найти, есть ли здесь клавиатурные команды для очистки паттерна или хотя бы копирования и вставки оного. Добавление нот выливается в трудоемкий процесс переключения между окнами инструментов, редактором паттернов и страницей помощи для поиска всех этих важных клавиатурных команд. Только клавиша '''Escape''' поступилась принципами: она открывает удобное меню для переключения между функциями.&lt;br /&gt;
&lt;br /&gt;
Больше всего впечатляет в ''Schism'' страница воспроизведения ('''F5''', помните?). Если бы Стенли Кубрику [Stanley Kubrick – американский режиссер и продюсер, – прим. пер.] понадобилось в «Космической одиссее 2001» воспроизводить mod-файлы, то он заготовил бы такой же экран. Множество мерцающих огоньков и диаграмм уровня звука, пульсирующих в такт, в то время как биты из Pong съезжают то влево, то и вправо, согласно стерео-балансу. Но шарма «старой школы» недостаточно, чтобы спасти ''Schism''. Слишком много в нем наворотов, и при работе он изрядно раздражает.&lt;br /&gt;
&lt;br /&gt;
=== Вердикт Linux Format ===&lt;br /&gt;
'''Версия:''' 0.2a&lt;br /&gt;
&lt;br /&gt;
'''Сайт:''' http://regelseven.com/schism&lt;br /&gt;
&lt;br /&gt;
'''Цена:''' Бесплатно под GPL&lt;br /&gt;
&lt;br /&gt;
''Смотрелся бы круто где-нибудь в клубе за спиной ди-джея. Но в остальном от него толку мало.''&lt;br /&gt;
&lt;br /&gt;
'''Рейтинг — 3/10'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ShakeTracker ==&lt;br /&gt;
''«I can’t shake your love», поет Дебби Гибсон.''&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_16_2.jpg|thumb|right|300px|Из-за замены сэмплов на MIDI, страницы инструментов в ''ShakeTracker'' выглядят не как у всех трекеров.]]&lt;br /&gt;
''ShakeTracker'' заменяет страницы редактирования сэмплов и инструментов их MIDI-воспроизведением. Вместо паттернов, вызывающих внутренние инструменты, ''ShakeTracker'' отправляет ноты синтезаторам, подключенным на MIDI-порт. Это имело смысл в прежние времена, когда внешний синтезатор освобождал ценные ресурсы компьютера. Но в 2007-м оправдать такое сложновато.&lt;br /&gt;
&lt;br /&gt;
Поэтому ''ShakeTracker'' будет полезен лишь тем, кому не обойтись без пользовательского интерфейса трекера для создания музыки и внешних синтезаторов для воспроизведения нот (или внутренних, типа программного синтезатора ''Timidity''). ''ShakeTracker'' сопоставляет органы управления различным трекерным эффектам и наиболее общим инструментам, используя формат General MIDI. Пользовательский интерфейс ненамного изящнее, чем у среднего трекера, и нужно вручную создать новый трек, чтобы включить настройки своего MIDI-синтезатора, прежде чем вы сможете создавать и редактировать паттерны обычным способом. Каждый трек добавляется горизонтально, и редактирование музыки воспринимается так же, как в случае традиционного трекера. Ноты и эффекты набираются в паттерн, а композиции формируются путем добавления паттернов на страницу '''Orders'''.&lt;br /&gt;
&lt;br /&gt;
=== MIDI-я ===&lt;br /&gt;
Результаты определенно интересны. ''ShakeTracker'' лучше всего работает в качестве хитрого арпеджиатора [arpeggiator – устройство для эмуляции аккордов за счет быстрого воспроизведения последовательности нот, – прим. пер.], повторяя простые музыкальные фрагменты с небольшим смещением, но это довольно далеко от создания музыки в понимании ''SoundTracker''. Если у вас есть MIDI-оборудование, вам, может, и понравится работать в таком стесненном окружении – но огромным минусом будет то, что вы ни с кем не сможете поделиться своей работой, пока они не обзаведутся точно таким же MIDI-оборудованием. К счастью, вы можете экспортировать свою работу как MIDI-файл для использования с MIDI-секвенсером.&lt;br /&gt;
&lt;br /&gt;
=== Вердикт Linux Format ===&lt;br /&gt;
'''Версия:''' 0.4.6&lt;br /&gt;
&lt;br /&gt;
'''Сайт:''' http://www.reduz.com.ar/cheesetronic&lt;br /&gt;
&lt;br /&gt;
'''Цена:''' Бесплатно под GPL&lt;br /&gt;
&lt;br /&gt;
''Ох, ненамного больше удовольствия от ShakeTracker, чем от возврата на эстраду Дебби Гибсон.''&lt;br /&gt;
&lt;br /&gt;
'''Рейтинг — 4/10'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ChibiTracker ==&lt;br /&gt;
''Знать бы еще, что такое Chibi…''&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_17_1.jpg|thumb|right|300px|''ChibiTracker'' умеет «менять лицо»: его можно состарить – или осовременить, как это сделали мы.]]&lt;br /&gt;
Решившие доказать, что трекеры пока живы и здоровы, взяли бы ''ChibiTracker'' за Экспонат Номер 1. Он все еще в активной разработке, последний релиз датирован концом ноября, и хотя пользовательский интерфейс следует знакомой формуле ''SoundTracker'', он выглядит чуть изящнее и проще в использовании, чем большинство его собратьев.&lt;br /&gt;
&lt;br /&gt;
Он также укомплектован интерфейсом со сменяемыми темами (skins), поставляемым с несколькими готовыми, от аккуратной компоновки по умолчанию до различных имитаций ранних трекеров. Многофункциональную нижнюю половину основного окна можно переключать, используя четко обозначенные вкладки, а список паттернов содержит все 64 дорожки, выложенные на большую прокручиваемую панель. Вы можете точно выбрать, какие строки будут подсвечены, но временную сигнатуру вашей музыки, как в ''SoundTracker'', изменять нельзя.&lt;br /&gt;
&lt;br /&gt;
Окно паттернов позволяет также редактировать последовательность паттернов для создания композиции. Большинство других трекеров размещают редактирование порядка паттернов на отдельной странице, но это куда более логичное место для поисков. Редактор сэмплов сравнительно прост и без особых трудностей позволяет вам выделять фрагменты для вырезания и вставки. Замечательно, что он даже может редактировать сэмплы с поддержкой стерео.&lt;br /&gt;
&lt;br /&gt;
Редактор инструментов также расположен очень логично: это самый простой для понимания редактор. Он обеспечивает амплитудные огибающие, панорамирование и органы управления высотой тона и фильтрами. Но лучшие дополнения можно найти на последней вкладке, помеченной как '''Variables'''. Именно здесь вы сможете добавить эффекты хора и реверберации [reverb – эффект запаздывающего звучания, – прим. пер.] ко всей композиции, и оба могут реально украсить вашу мелодию.&lt;br /&gt;
&lt;br /&gt;
=== По-простому ===&lt;br /&gt;
Дизайн ''ChibiTracker'', скорее, минималистичен. Нехватает прокрутки положения в композиции, как это сделано в ''SoundTracker'' – она просто уходит на дно паттерна, но мы сочли процесс сочинения музыки и воспроизведение простыми для освоения.&lt;br /&gt;
&lt;br /&gt;
=== Вердикт Linux Format ===&lt;br /&gt;
'''Версия:''' 0.9a&lt;br /&gt;
&lt;br /&gt;
'''Сайт:''' http://www.chibitracker.com&lt;br /&gt;
&lt;br /&gt;
'''Цена:''' Бесплатно под GPL&lt;br /&gt;
&lt;br /&gt;
''ChibiTracker обещает многое, и это лучший выбор, если вы не пользовались трекерами раньше.''&lt;br /&gt;
&lt;br /&gt;
'''Рейтинг — 6/10'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Skale ==&lt;br /&gt;
''Трекер шикарный, но недоделанный.''&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_17_2.jpg|thumb|right|300px|Кто знаком с разработчиками – дали бы им пинка! Пусть доделают&lt;br /&gt;
все эти кнопки...]]&lt;br /&gt;
Запуск ''Skale'' в первый раз – это как глоток свежего воздуха. Это приложение точно знает, кто такой типичный пользователь трекера, и не стыдится показывать свое происхождение, напоминая скорее старое «демо» Amiga, чем экземпляр музыкального ПО.&lt;br /&gt;
&lt;br /&gt;
Но есть серьезная проблема: ''Skale'' закончен только наполовину. Все тут на месте, включая редактор паттернов, редактор звуков и редактор инструментов, и текущие модули воспроизводятся превосходно. Но, попытавшись использовать микшер или синтезатор, вы поймете, что ''Skale'' должен пройти еще долгий путь. При застопорившейся разработке (разработчики обещали новый релиз примерно раз в год, но никаких признаков дальнейшей активности нет), мы можем 20 лет дожидаться его завершения. И очень жаль, поскольку ''Skale'' – самый симпатичный на вид и самый интуитивно понятный трекер в нашем '''Сравнении'''. Одна только секция микшера способна резко изменить способы использования трекера, поскольку допускает произвольные эффекты и использование эквалайзера в реальном времени – если заработает. Многие страницы лишь наполовину выполняют обещанное, зияя отсутствующим функционалом.&lt;br /&gt;
&lt;br /&gt;
=== Цифровая пианола ===&lt;br /&gt;
Тем не менее, можно создавать прекрасную музыку, используя традиционные страницы трекера: все они работают. Интерфейс пользователя – самый понятный из всех, которые мы пробовали, две группы кнопок посередине верхней части экрана открывают доступ ко всем основным функциям. И графика великолепная.&lt;br /&gt;
&lt;br /&gt;
Редактор инструментов – прекрасный пример. Любовно прорисованная клавиатура фортепиано растянулась внизу экрана, и когда вы воспроизводите музыку из трекера, клавиши автоматически нажимаются, показывая, какие ноты звучат. Это трекер-эквивалент пианолы. Эх, кабы его доделали!&lt;br /&gt;
&lt;br /&gt;
=== Вердикт Linux Format ===&lt;br /&gt;
'''Версия:''' 0.8&lt;br /&gt;
&lt;br /&gt;
'''Сайт:''' http://www.skale.org&lt;br /&gt;
&lt;br /&gt;
'''Цена:''' бесплатно для скачивания&lt;br /&gt;
&lt;br /&gt;
''Это новое поколение программ-трекеров – ждем не дождемся его выхода из бета-статуса.''&lt;br /&gt;
&lt;br /&gt;
'''Рейтинг — 6/10'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CheeseTracker ==&lt;br /&gt;
''Балансирует между уважением к прошлому и новыми технологиями.''&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_18_1.jpg|thumb|right|300px|В компании трекеров ''CheeseTracker'' проще всех: его функциональность упакована в интерфейс пользователя Qt.]]&lt;br /&gt;
''CheeseTracker'' использует инструментарий ''Qt'', и по виду и поведению больше походит на современное приложение, чем на персонаж демо-сцены восьмидесятых. У него те же компоненты, что и у других трекеров в нашем '''Сравнении''' – редактор паттернов, редактор сэмплов и редактор инструментов – но благодаря гибкости компоновочного движка ''Qt'' все масштабируется и адаптируется к разрешению вашего экрана.&lt;br /&gt;
&lt;br /&gt;
Например, редактор паттернов работает именно так, как вы ожидаете. И есть несколько примет нынешнего века, доступных свободно благодаря ''Qt''. Можно перетаскивать мышью выделенные фрагменты, выполнять копирование и вставку через обычный системный буфер обмена, есть даже буфер отката всех выполненных изменений. Это далеко ушло от угадывания клавиатурных команд; вы можете даже открыть отдельное окно, перечисляющее эффекты редактирования паттернов для ссылок на манипуляции со звуком в режиме реального времени.&lt;br /&gt;
&lt;br /&gt;
=== Приложите руки ===&lt;br /&gt;
[[Изображение:Img_89_18_2.jpg|thumb|left|300px|Все трекеры позволяют редактировать сэмплы, но лишь&lt;br /&gt;
''CheeseTracker'' не превращает это в головную боль.]]&lt;br /&gt;
Компоновка в целом сохранила верность типажу трекера, используя вкладки для переключения между основными функциями. Если вы пользовались каким-нибудь из клонов ''SoundTracker'', вы почувствуете себя комфортно и в ''CheeseTracker''. Редакторы сэмплов и инструментов функционально идентичны таковым в ''SoundTracker'', но гораздо проще в использовании, благодаря масштабируемому интерфейсу. Редакторы огибающих – лучшие из нами виденных, и они включают также эффекты фильтров. Но упорядочивание паттернов закинуто на страницу '''Order &amp;amp; Defaults''' – это своего рода чулан для различных функций, которые разработчик не смог обоснованно поместить в другое окно. Привыкнув к созданию композиции на странице редактора паттернов, как в ''Skale'', не захочешь вот так скакать между страницами.&lt;br /&gt;
&lt;br /&gt;
В окнах ''CheeseTracker'' можно найти интересные новшества для формата старых трекеров. Малоудачно названная вкладка '''Buffers''' содержит самые любопытные вещи. Эта страница работает подобно микшерной консоли, используя список из 16 каналов. Каждый канал реализует свою цепочку эффектов, что позволяет вам прогонять инструмент через цепочку внутренних эффектов или даже через любые эффекты LADSPA, которые вы установили (например, можно сопроводить задержку эффектом реверберации). Довольно просто сопоставить каждый инструмент с различными каналами в редакторе инструментов, чтобы применить цепочки эффектов к вашим звукам.&lt;br /&gt;
&lt;br /&gt;
Можно также создавать собственные буферы и пропускать всю композицию через них, перед тем как отправить ее в основной канал вывода вашей звуковой карты. Применение эффектов действительно осовременивает идею ''SoundTracker'', добавляя вашему шедевру изюминку. Вы не сможете поделиться ими с пользователями других трекеров, если у них не такая конфигурация, как у вас, хотя есть возможность выводить целый трек как аудио-файл и кодировать его как файл OGG. Вот чего нам действительно не хватало во всем приложении – это чтобы редактор паттернов отслеживал местонахождение в композиции: в ''SoundTracker'' это настолько полезно, что невольно ожидаешь того же в каждом приложении-трекере.&lt;br /&gt;
&lt;br /&gt;
=== Джек-потуги ===&lt;br /&gt;
Еще одна функция, которая идет в ногу с обработкой эффектов – это поддержка Jack. То есть вы можете направлять выход с ''CheeseTracker'' в любое другое Jack-совместимое приложение – хороший кандидат, например, ''Ardour'': вы могли бы записывать каждый паттерн трекера прямо на ваш инструмент звукозаписи, делая это частью более крупной композиции; скажем, ''CheeseTracker'' взять для треков ударных и баса, а ''Ardour'' – для добавления прочих треков. Именно эта гибкость дает ''CheeseTracker'' преимущество, когда речь заходит о совмещении трекерных композиций с современным окружением.&lt;br /&gt;
&lt;br /&gt;
''CheeseTracker'' не самая простая стартовая площадка, но этим инструментом стоит воспользоваться, если вы всерьез собрались создавать трекерную музыку, потому что он ведет себя как достижение последней пятилетки. Добавление буфера отката в окно паттернов – очень большое преимущество, а эффекты могут придать действительно профессиональное звучание вашей музыке.&lt;br /&gt;
&lt;br /&gt;
=== Вердикт Linux Format ===&lt;br /&gt;
'''Версия:''' 0.9.9&lt;br /&gt;
&lt;br /&gt;
'''Сайт:''' http://www.reduz.com.ar/cheesetonic&lt;br /&gt;
&lt;br /&gt;
'''Цена:''' бесплатно под GPL&lt;br /&gt;
&lt;br /&gt;
''Правильный выбор для трекероманов всего мира; достаточно гибок, чтобы не казаться неуместным на вашем рабочем столе.''&lt;br /&gt;
&lt;br /&gt;
'''Рейтинг — 7/10'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
== Вердикт ==&lt;br /&gt;
=== SoundTracker 8/10 ===&lt;br /&gt;
[[Изображение:Img_89_19_1.jpg|thumb|right|300px|''SoundTracker'', во многом воспроизводя Ultimate-прототип, выглядит&lt;br /&gt;
реликтом, но как улучшить совершенство?]]&lt;br /&gt;
Другие трекеры лезли из кожи вон, чтобы превзойти это приложение, старающееся как можно полнее соответствовать исходным идеалам. Трекеры проектировались не затем, чтоб быть простыми в использовании или интуитивно понятными: создание музыки с помощью трекера требует скорее программирования, чем сочинительства, и это дает разработчикам трекеров повод избегать возни с помощью испытанных и проверенных формул.&lt;br /&gt;
&lt;br /&gt;
Но мы были бы рады видеть больше движения в сторону более удобного и современного дизайна интерфейса, и поэтому столь высоко оценили ''CheeseTracker''. Он ближе всех из трекеров подошел к современному рабочему столу. Будущее жанра также выглядит блестящим со ''Skale'' и ''ChibiTracker''. Если бы разработчики нашли время и потрудились чуть больше, оба этих новых трекера могли бы тягаться за корону ''SoundTracker'' уже через несколько месяцев (во всех новых версиях хотелось бы видеть более высокие частоты дискретизации и стереосэмплы).&lt;br /&gt;
&lt;br /&gt;
=== С чувством реальности ===&lt;br /&gt;
Не выходя за пределы идеи, ''SoundTracker'' предлагает не только самый близкий к оригиналу способ работы, но и лучшую рабочую среду. Пользовательский интерфейс не менялся за 20 лет по уважительной причине: он переносит весь процесс написания музыки на кончики пальцев.&lt;br /&gt;
&lt;br /&gt;
Приверженность ''SoundTracker'' первоначальному дизайну означает, что он использует все преимущества, накопленные за годы существования первоначального приложения. Его редактор паттернов был также самым простым в использовании, позволяя менять маркировку трека и следовать за указателем в композиции: обе эти вещи важны, если вы пишете много музыки. ''SoundTracker'' предлагает в основном те же способы работы, что и 20 лет назад, только вы уже не беспокоитесь о требованиях памяти или допустимом числе каналов – а для этого и нужно трекерное ПО.&lt;br /&gt;
&lt;br /&gt;
Просто запустите это приложение, чтобы увидеть, что мы имеем в виду. Загрузите несколько старых классических мелодий с http://www.modarchive.com, побалуйтесь с инструментами в редакторе паттернов и сами создайте что-нибудь эдакое. Это прекрасно для поиска вдохновения и новых идей. Трекерная музыка обычно означала получение максимальной отдачи от ограниченного оборудования. В наши дни вы можете сами налагать ограничения на возможности и смотреть, как к ним адаптироваться. ''SoundTracker'' – это зрелый, отточенный инструмент для создания музыки, который наиболее близок к этой идее. Поэтому он и выиграл.&lt;br /&gt;
&lt;br /&gt;
===Таблица характеристик===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
!CheeseTracker&lt;br /&gt;
!ChibiTracker&lt;br /&gt;
!Schism Tracker&lt;br /&gt;
!ShakeTracker&lt;br /&gt;
!Skale&lt;br /&gt;
!SoundTracker&lt;br /&gt;
|-&lt;br /&gt;
|ALSA&amp;lt;ref name=&amp;quot;output&amp;quot;&amp;gt;Формат вывода&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|-&lt;br /&gt;
|OSS&amp;lt;ref name=&amp;quot;output&amp;quot;&amp;gt;Формат вывода&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|-&lt;br /&gt;
|Jack&amp;lt;ref name=&amp;quot;output&amp;quot;&amp;gt;Формат вывода&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|-&lt;br /&gt;
|MOD&amp;lt;ref name=&amp;quot;input&amp;quot;&amp;gt;Формат ввода&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|-&lt;br /&gt;
|XM&amp;lt;ref name=&amp;quot;input&amp;quot;&amp;gt;Формат ввода&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|-&lt;br /&gt;
|IT&amp;lt;ref name=&amp;quot;input&amp;quot;&amp;gt;Формат ввода&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|-&lt;br /&gt;
|Стерео-сэмплы&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|-&lt;br /&gt;
|Множественные проекты&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|-&lt;br /&gt;
|Эффекты&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|-&lt;br /&gt;
|Сглаживание звучания&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|-&lt;br /&gt;
|Отслеживание позиции&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|-&lt;br /&gt;
|Запись&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|-&lt;br /&gt;
|MIDI&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89:%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%B0%D1%8F_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0</id>
		<title>LXF89:Краткая справка</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89:%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%B0%D1%8F_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0"/>
				<updated>2008-03-17T18:53:41Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Новая: == Псевдонимы оболочки == ''Как настроить сокращения для часто используемых команд.''  [[Изображение:Img_89_1...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Псевдонимы оболочки ==&lt;br /&gt;
''Как настроить сокращения для часто используемых команд.''&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_107_2.jpg|thumb|right|200px|Применение псевдонимов очень облегчает жизнь. Пользуйтесь командой '''alias'''.]]&lt;br /&gt;
Автозавершение (см. Ответы, LXF87/88) сберегает время набора команд и имен файлов, но еще нужно помнить и аргументы, или обращаться за ними в man. Если вы запускаете программу всегда с одними и теми же аргументами – не проще ли установить их «по умолчанию»? А может быть, даже дать одной и той же команде разные названия в зависимости от аргументов? Все это, и еще многое, возможно при использовании псевдонимов оболочки.&lt;br /&gt;
&lt;br /&gt;
Чтобы создать псевдоним (alias), наберите:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
alias la=”ls -lhA --color=auto”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Теперь, когда вы наберете '''la''' (list all, показать все) в текущей оболочке, вы увидите список с цветным выделением, подробной информацией и отображением скрытых файлов. Введенный вами псевдоним заменяется соответствующей ему строкой перед выполнением его оболочкой.&lt;br /&gt;
&lt;br /&gt;
Но когда вы открываете новую оболочку, вашего псевдонима может там и не быть: в каждой оболочке работает своя команда ''alias''. На вид здесь работы еще больше, чем с запоминанием команд, но ее можно автоматизировать. К некоторым файлам оболочка обращается при каждом запуске. Общие для всей системы настройки содержатся в '''/etc/profile''', там-то дистрибутив и хранит свои псевдонимы. Затем каждый пользователь может настраивать собственные псевдонимы в конфигурационных файлах своей оболочки. В случае с ''Bash'' они хранятся в '''~/.bashrc''' или '''~/.bash_profile'''. Первый файл используется во время работы с интерактивной оболочкой, например в окнах ''Konsole'' или ''Xterm'', а второй – во время работы оболочки в качестве «входной» (login shell). Обычно псевдонимы добавляются в '''~/.bashrc'''.&lt;br /&gt;
&lt;br /&gt;
Псевдоним может выполнять более чем одну команду за раз, например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
alias foobar=”foo --foo-opts ; bar --bar-opts”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Таким способом можно автоматизировать простые последовательности команд без обращения к скриптам.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89:%D0%9E%D1%82%D0%B2%D0%B5%D1%82%D1%8B</id>
		<title>LXF89:Ответы</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89:%D0%9E%D1%82%D0%B2%D0%B5%D1%82%D1%8B"/>
				<updated>2008-03-17T18:29:09Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Новая: == Ответы == ''Есть вопрос по Open Source? Пишите нам по адресу: '''answers@linuxformat.ru'''''  {{Врезка|left| |Заголовок=В этом ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ответы ==&lt;br /&gt;
''Есть вопрос по Open Source? Пишите нам по адресу: '''answers@linuxformat.ru'''''&lt;br /&gt;
&lt;br /&gt;
{{Врезка|left|&lt;br /&gt;
|Заголовок=В этом месяце мы отвечаем на вопросы по:&lt;br /&gt;
|Содержание=&lt;br /&gt;
# [[#1. Восстановление разделов|Разделам]]&lt;br /&gt;
# [[#2. Да-да, войдите!|UID и GID]]&lt;br /&gt;
# [[#3. Двойное видение|3D-ускорению]]&lt;br /&gt;
# [[#4. Перенос дистрибутива|Grub]]&lt;br /&gt;
# [[#5. Windows убила мой Linux|Загрузке Windows]]&lt;br /&gt;
# [[#6. Беспроводной Knoppix|Knoppix]]&lt;br /&gt;
# [[#7. Только не на телевизор|TV-выходе]]&lt;br /&gt;
# [[#8. Переустановка BIOS|CMOS]]&lt;br /&gt;
# [[#9. Последовательный захват|Эмуляторах терминала]]&lt;br /&gt;
# [[#10. Дайте инструмент…|Evolution]]&lt;br /&gt;
# [[#11. Загадка Kino|Kino]]&lt;br /&gt;
# [[#12. Права и… не права|Авторских правах на снимки]]&lt;br /&gt;
# [[#13. Скользкий DMZ|Нейтральной зоне]]&lt;br /&gt;
|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=Наши эксперты&lt;br /&gt;
|Содержание=&lt;br /&gt;
Мы найдем эксперта на любой вопрос! Вы получите ответ на все: от проблем с установкой или модемом до сетевого администрирования; главное – спросить!&lt;br /&gt;
* '''Нейл Ботвик'''&amp;lt;br&amp;gt;Владелец ISP и экс-редактор дисков для нашего журнала, Нейл считает, что в Linux он от скуки на все руки.&lt;br /&gt;
* '''Стефан Лукас'''&amp;lt;br&amp;gt;У Стефана шесть лет администраторского стажа. Теперь он администратор L2 Linux в Rackspace, в его коллекции серверов есть все от Raq3 до Sun Netra X1.&lt;br /&gt;
* '''Майк Сондерс'''&amp;lt;br&amp;gt;Майк был одним из создателей прототипа LXF – Linux Answers. Его специальности – программирование, оконные менеджеры, скрипты инициализации и SNES.&lt;br /&gt;
* '''Ник Вейч'''&amp;lt;br&amp;gt;В свободное от исчеркивания текстов красными чернилами время Ник возится с Linux-графикой и 3D-приложениями; он у нас отвечает за простые вопросы!&lt;br /&gt;
|Ширина=250px}}&lt;br /&gt;
&lt;br /&gt;
=== 1. Восстановление разделов ===&lt;br /&gt;
'''Вопрос:''' В отчаянных попытках отформатировать новый SATA-диск, я случайно отформатировал другой диск, на котором было три раздела ('''/''', '''/home''' и '''swap'''). Должен признаться, что пользовался загрузочным диском Windows XP (крайнее средство, честно!). Я нажал кнопку «reset», не сумев остановить процесс по '''Esc''' и '''Ctrl+Alt+Del'''. Конечно, загрузка с винчестера теперь не идет, но, когда я загружаю ''Knoppix'' с ''QtParted'' – мне кажется, что домашний раздел все еще на месте (я вижу значок на рабочем столе), хотя другие разделы накрылись полностью (неформатированное пространство).&lt;br /&gt;
&lt;br /&gt;
Когда я пробую смонтировать раздел ('''hda3''') двойным щелчком по его значку на рабочем столе ''Knoppix'', возникает ошибка, судя по коду – что-то вроде «файловая система не определена», которая, как я полагаю, связана как-то с первым разделом отформатированного жесткого диска (не там ли хранится «TOC»?). Не поможете? ''(Mdgreaney, с форума LXF)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ответ:''' Если вы помните размеры разделов, можно создать их заново с помощью ''Cfdisk''. До тех пор, пока вы не создадите новую файловую систему на их месте, старая система останется на диске – вероятно, вы удалили лишь таблицу разделов. Может быть, вы не угадаете верный размер разделов с первого раза, но пока будете монтировать их в режиме «только для чтения» (добавляя к команде монтирования '''-o ro'''), Вы ничего не испортите. Понятно, что с винчестера нельзя загрузиться, ведь корневой раздел удален из таблицы разделов, поэтому ''Grub'' не может найти свои файлы.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_106_1.jpg|thumb|left|200px|В ''Knoppix'' есть инструменты для восстановления удаленных разделов, например, ''Gpart''.]]&lt;br /&gt;
Есть пара программ для автоматизации процесса: ''Gpart'' (не путайте с ''GParted'') и ''TestDisk''. Обе присутствуют на ''Knoppix 5.0.1'' CD и DVD. Учтите, что обе программы будут пытаться угадать расположение разделов по оставшимся данным. man-страничка ''Gpart'' прекрасно передает суть процесса: «Подчеркиваем, ''Gpart'' работает звристически, поэтому никогда не принимайте результаты его работы на веру. Он может быть неопровержимо прав, а может жестоко ошибаться. Вас предупредили».&lt;br /&gt;
&lt;br /&gt;
Какую бы программу вы ни выбрали, внимательно и полностью прочтите man-страницу до записи на диск первого байта, и запаситесь терпением. Обе программы работают долго, ведь им нужно просканировать каждый сектор диска. Поэтому пара лишних минут, ушедших на чтение, в общей массе времени будут незаметны, а результат может быть решающим.&lt;br /&gt;
&lt;br /&gt;
Между прочим, TOC (table of contents, содержание) применяется на файловых системах CD и DVD. На жестком диске, в его начале, имеется таблица разделов, информация о директориях содержится в самой файловой системе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2. Да-да, войдите! ===&lt;br /&gt;
'''Вопрос:''' Когда я пробую войти в мой свежеустановленный Ubuntu, выходит сообщение: «Session only lasted 10 seconds» (Продолжительность сеанса 10 сек.). В файле журнала я вижу следующее: «Failed to set permission 700 to .gnome2_ private». Я не могу пройти дальше терминала, как же мне это исправить? ''(AJB2K3, с форума LXF)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ответ:''' Вы перенесли домашнюю директорию из другого дистрибутива? Описанные симптомы – классические признаки такой ситуации. Даже если вы ввели такое же имя пользователя при инсталляции Ubuntu, имя пользователя и группа могут иметь разные цифровые значения (обычно обозначаются как UID и GID). Файловая система хранит лишь цифровые значения, а значит, эти файлы больше не принадлежат вашему пользователю, отсюда и ошибка при изменении атрибутов.&lt;br /&gt;
&lt;br /&gt;
К счастью, решается все просто и быстро. В терминале наберите следующее:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo chown -R fred: ~fred&amp;lt;/pre&amp;gt;&lt;br /&gt;
Все, что находится в домашней директории ''Fred''’а, передастся в собственность ''Fred''’у. Команду необходимо давать от имени суперпользователя, оттого она начинается с ''sudo''. Замыкающее двоеточие после имени пользователя (естественно, вы замените его своим) существенно: оно устанавливает группу владельца равной той группе, к которой принадлежит ''fred''. Это не только быстрее, чем запуск ''chgrp'', но также устраняет необходимость поиска конкретной группы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 3. Двойное видение ===&lt;br /&gt;
'''Вопрос:''' У меня ''SimplyMepis 6.0''. Есть звук и Интернет, я доволен ''apt-get'', ''Beagle'' и ''SuperKaramba''… все прекрасно. Не хватает лишь одного – 3D-ускорения. Я установил драйверы ATI и активировал их в контрольном центре Mepis, запускал также ''aticonfig'', но вот все, что я получил от ''glxinfo'':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@1[philippe]# glxinfo | grep direct&lt;br /&gt;
__________________________________________&lt;br /&gt;
Xlib: extension “XFree86-DRI” missing on display&lt;br /&gt;
“:0.0”.&lt;br /&gt;
direct rendering: No&lt;br /&gt;
OpenGL renderer string: Mesa GLX Indirect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Прилагаю мой '''xorg.conf''' ''(Philippe, с форума LXF)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_107_1.jpg|thumb|right|200px|Такие программы как ''Google Earth'' требуют хорошего 3D-ускорения,&lt;br /&gt;
так что проверьте конфигурацию ''X.org''.]]&lt;br /&gt;
'''Ответ:''' Крупные конфигурационные файлы вроде Вашего затрудняют поиски проблемы – случай, когда за деревьями леса не видно. Удаление всех строк и секций комментариев упрощает поиск и показывает, что у вас два определения Device для вашей графической карты: одно использует драйверы ATI, а другое – VESA. Это нормально, дублирование секции '''Screen''' сводит переключение между двумя вариантами к смене строк в секции '''ServerLayout'''. Однако эта часть настройки у вас явно нарушена:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section “ServerLayout”&lt;br /&gt;
Screen 0 “ATIScreen” 0 0&lt;br /&gt;
Screen 0 “aticonfig-Screen[0]” 0 0&lt;br /&gt;
InputDevice “Keyboard0” “CoreKeyboard”&lt;br /&gt;
InputDevice “PS/2 Mouse” “CorePointer”&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вы включили два определения для '''Screen 0''' в '''ServerLayout'''. Может оказаться, что ''X.org'' использует первое, так как здесь применяется определение VESA. Но простая проверка файла журнала с&lt;br /&gt;
&amp;lt;pre&amp;gt;grep Screen /var/log/Xorg.0.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
покажет, какой экран на самом деле в работе. Для получения 3D-ускорения надо всего лишь закомментировать строку ошибочного определения '''Screen''' в '''ServerLayout''' и перезапустить X.&lt;br /&gt;
&lt;br /&gt;
Строку можно было и удалить, но закомментировать лучше: Вы в любое время сможете вернуться к драйверу VESA, просто переставив комментарий на другую строку.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 4. Перенос дистрибутива ===&lt;br /&gt;
'''Вопрос:''' У меня двухдисковый компьютер: на – Windows 98 SE, а на '''hdb''' – SUSE 10.1 вместе с Mepis 6.0. Я решил сделать основным дистрибутивом Mepis. Все уже инсталлировано на него, и я хочу убрать SUSE, а Mepis переместить на '''hda'''.&lt;br /&gt;
&lt;br /&gt;
Сейчас загрузка идет через ''Grub'' от SUSE, установленный в MBR на hda, поэтому, удалив SUSE, я потеряю возможность загружаться вообще (исключая Live CD). Нет ли простого способа, вроде полного копирования диска, чтобы перенести Mepis со всеми настройками на '''hda'''? К сожалению, Win98 вынужден сохранять. ''(Baron, с форума LXF)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ответ:''' ''Grub'' установлен в MBR, поэтому он не будет удален вместе с SUSE. Вы потеряете директорию '''/boot/Grub''', в которой находятся нужные ''Grub''’у файлы, но ее можно заменить такой же от Mepis. Процедуру лучше всего провести с Live CD – Вы ведь не хотите потерять файловые системы, которые ОС может изменить во время копирования.&lt;br /&gt;
&lt;br /&gt;
Загрузитесь с Mepis Live CD и войдите как супер-пользователь, с паролем “root”. Допустим, SUSE стоит на '''/dev/hda2''', а Mepis – на '''/dev/hda1'''. Сделайте следующее:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/hda2&lt;br /&gt;
mount /dev/hdb1&lt;br /&gt;
cp -a /mnt/hda2/boot /mnt/hdb1/boot.suse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Этим Вы смонтируете файловые системы и создадите резервную копию загрузочной директории SUSE, она может пригодиться Вам в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Теперь можно форматировать раздел SUSE. Вам будет предоставлен выбор из нескольких файловых систем, но если Вы не уверены – просто наберите:&lt;br /&gt;
&amp;lt;pre&amp;gt;mke2fs -j /dev/hda2&amp;lt;/pre&amp;gt;&lt;br /&gt;
для создания файловой системы '''ext3'''. Теперь копируйте все подряд командой:&lt;br /&gt;
&amp;lt;pre&amp;gt;rsync -ax /mnt/hdb1/ /mnt/hda2/&amp;lt;/pre&amp;gt;&lt;br /&gt;
Замыкающие слэши обязательны!&lt;br /&gt;
&lt;br /&gt;
Процесс займет некоторое время. Когда он закончится, отредактируйте '''/mnt/hda2/etc/fstab''' и замените все ссылки на '''hdb''' новыми, на '''hda'''. Раздел подкачки SUSE на '''/dev/hda''' можно оставить без изменений.&lt;br /&gt;
&lt;br /&gt;
Последний шаг – убедитесь, что Ваша система грузится корректно. Если на диске Mepis была директория '''/boot/Grub''', нужно отредактировать файл конфигурации '''/mnt/hda2/boot/Grub/menu.lst''' для смены расположения. ''Grub'' нумерует диски и разделы от нуля, поэтому '''/dev/hda2''' «по ''Grub''-овски» будет '''(hd0,1)'''. Может понадобиться добавить пункт меню для загрузки Windows – его можно скопировать из '''/mnt/hda2/boot.suse/Grub/menu.lst'''. Если же директории ''Grub'' в Вашей Mepis-инсталляции не было и всем руководил загрузчик SUSE, скопируйте директорию ''Grub'' из '''boot.suse''' в '''boot''' и отредактируйте '''menu.lst''' с добавкой необходимых пунктов, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
title MEPIS at hda2, kernel 2.6.15-26-386&lt;br /&gt;
root (hd0,1)&lt;br /&gt;
kernel /boot/vmlinuz-2.6.15-26-386 root=/dev/hda2&lt;br /&gt;
nomce quiet vga=791&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Название файла ядра должно соответствовать находящемуся в Вашей загрузочной директории.&lt;br /&gt;
&lt;br /&gt;
Наконец, запустите Grub, чтобы убедиться в верности настройки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grub&lt;br /&gt;
root (hd0,1)&lt;br /&gt;
setup (hd0)&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5. Windows убила мой Linux ===&lt;br /&gt;
'''Вопрос:''' Во время инсталляции SUSE Linux Enterprise Desktop [SLED] 10 я нарезал свой диск на следующие разделы:&lt;br /&gt;
* FAT32, 10GB, '''/windows/C'''.&lt;br /&gt;
* Linux, 10GB, '''/'''.&lt;br /&gt;
* FAT32, 7GB, '''/windows/E'''.&lt;br /&gt;
* swap, 9GB, '''swap'''.&lt;br /&gt;
&lt;br /&gt;
Затем я установил Windows на '''С:'''. Теперь у меня проблема: Linux не загружается. Я не вижу меню с выбором системы для загрузки, сразу же стартует Windows. Во время установки Windows было такое сообщение: «найден неизвестный раздел, он может быть неактивен, если вы хотите активировать его…», но когда я попытался следовать инструкциям, раздел не был опознан, и теперь у меня Windows лишь на двух разделах, '''C:''' и '''D:''' (замечу, что в '''D:''' только 7 ГБ, а не 10 ГБ).&lt;br /&gt;
&lt;br /&gt;
Что можно сделать? ''(Penguin, с форума LXF)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_108_1.jpg|thumb|right|200px|Режим «спасения» с установочного диска SUSE поможет, если Windows «поправила» ваш винчестер.]]&lt;br /&gt;
'''Ответ:''' Это распространенная проблема, вызванная тем, что инсталлятор Windows не проверяет наличие «не-майкрософтовских» операционных систем. Во время установки Windows он переписывает загрузчик по-своему, не считаясь с вашим желанием его сохранить. Хорошая новость – ваша инсталляция Linux осталась нетронутой, включая прежнее меню загрузки и другие настройки. Надо всего лишь переустановить загрузочную запись в Master Boot Record, которую сделал для Вас загрузчик SUSE, ''Grub''.&lt;br /&gt;
&lt;br /&gt;
Загрузитесь с SLED CD/DVD и выберите вариант '''Rescue System''' из меню; дождитесь приглашения на вход в систему. Наберите root (пароль не нужен) – и вот Вы в базовой спасательной оболочке. Первым делом определите, какой из разделов – ваш. Запустите '''fdisk –l''' для вывода списка разделов. Один из них должен быть обозначен как Linux – скорее всего, '''/dev/hda2''', если судить по списку разделов, приведенному выше. Можно смонтировать этот раздел:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mount /dev/hda2 /mnt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем наберите следующие команды для входа в среду ''Grub'' и поиска подходящего раздела для загрузчика:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grub&lt;br /&gt;
find /boot/vmlinuz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будет возвращен загрузочный диск в терминологии ''Grub'', скорее всего '''(hd0,1)'''.&lt;br /&gt;
&lt;br /&gt;
Теперь наберите следующие команды для новой настройки загрузчика:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root (hd0,1) #то, что вернул Вам вызов find&lt;br /&gt;
setup (hd0)&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вот и все, теперь вы можете перезагрузиться командой ''reboot''. Извлеките CD/DVD – и получите свое ''Grub''-меню снова, со всеми прежними вариантами. Учтите, что после каждой переустановки Windows будет случаться то же самое, способ лечения – тот же.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 6. Беспроводной Knoppix ===&lt;br /&gt;
'''Вопрос:''' В январе 2006 года вы напечатали интересную статью о создании собственного дистрибутива (Собери свой дистрибутив, LXF74/75). У меня проблема с беспроводной сетевой картой ноутбука на основе Intel ipw2200 (версия PCMCIA). Ну, я и решил (у меня ''Knoppix 5.01''): загружу firmware для карт Intel, помещу его в '''/lib/firmware''' и подгоню ''Knoppix'' под это firmware, тогда карту можно будет определить и настроить, или по крайней мере сделать ее настраиваемой во время загрузки Live-дистрибутива.&lt;br /&gt;
&lt;br /&gt;
Я думал, что драйверы для этой карты встроены в ядро, но они не работают без firmware. Могу ли я пользоваться ''Knoppix'' с Live-дистрибутивом, и настроить при этом беспроводную сеть? ''(Grumpy@home, с форума LXF)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ответ:''' Конечно, можете: когда Вы находитесь в среде ''chroot'', описанной в Шаге 3 статьи номера LXF74, можно удалять и инсталлировать любые файлы, точно так же, как в обычном ''Knoppix''. Изменения будут внесены в Ваш новый Live CD на Шаге 6.&lt;br /&gt;
&lt;br /&gt;
В ядро ''Knoppix'' уже встроен драйвер для этой карты, но если Вы решите перекомпилировать ядро, то позаботьтесь о включении параметра '''CONFIG_IPW2200'''. Сканер оборудования ''Knoppix'' найдет карту, загрузит модуль, все настроит и попытается установить беспроводной интерфейс с использованием DHCP. Если Вы хотите, чтобы при загрузке исполнялись определенные команды, поместите их в '''/etc/init.d/rc.local''' (это имя общеупотребительное, но можно назначить любое другое), затем активируйте вот так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod 774 /etc/init.d/rc.local&lt;br /&gt;
ln -s ../init.d/rc.local /etc/rc5.d/S99local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команды в директориях rc исполняются по порядку, поэтому '''99''' в имени вынудит команду стартовать последней. Обычно это и требуется, но если Вы хотите перед этим запустить что-нибудь еще – уменьшите номер (или увеличьте номер другой службы). Не вводите слишком маленькие номера. И помните, что Вы работаете с базовой системы, находящейся на CD в режиме «только для чтения», и испортить что-либо почти невозможно.&lt;br /&gt;
&lt;br /&gt;
Если Ваш ''Knoppix'' не грузится – сделайте шаг назад и попробуйте снова: Вы ничего не теряете.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 7. Только не на телевизор ===&lt;br /&gt;
'''Вопрос:''' У меня дома локальная сеть из пяти компьютеров, на одном из них ни мыши, ни клавиатуры, ни монитора, но есть порт TV-Out, соединенный кабелем S-Video с аналоговым телевизором. В этом компьютере есть карта HDTV, а '''xorg.conf''' я настроил таким образом, чтобы выход видеокарты клонировался на телевизор. Все работает прекрасно, если я подключаю клавиатуру и мышь и использую телевизор в качестве монитора.&lt;br /&gt;
&lt;br /&gt;
Я могу удаленно подключаться к компьютеру через ''NX'' (предпочтительно) или ''TightVNC'', но не знаю, как&lt;br /&gt;
получить доступ к Desktop:0, который выводится на TV. Поискал в Google, но не нашел ничего, что помогло бы решить проблему. По-моему, альтернативное решение – '''xorg.conf''' для вывода Desktop:1 на телевизор. У меня сейчас Kubuntu 6.10. ''(Билл [Bill])''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ответ:''' VNC предназначен для работы в режиме отдельной X-сессии, но это можно изменить. Запустив ''X11vnc'', взятую на http://www.karlrunge.com/x11vnc, Вы можете сделать существующий X-дисплей доступным через VNC.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_109_1.jpg|thumb|right|200px|Клиент и сервер ''Rdesktop'' в KDE сводят проблему организации удаленного доступа к простому щелчку мышью.]]&lt;br /&gt;
Но раз уж у Вас Kubuntu, а следовательно, рабочий стол KDE, ответ упрощается: воспользуйтесь сервером и клиентом ''Rdesktop'', содержащимися в KDE. На «немом» компьютере запустите Центр управления KDE и войдите в секцию '''Internet &amp;amp; Network &amp;gt; Desktop Sharing''' ('''Разделение рабочих столов''').&lt;br /&gt;
&lt;br /&gt;
Теперь установите флажок '''«Allow Uninvited Connections»''' ('''Разрешать подключения без приглашения''') и сбросьте '''«Confirm Uninvited Connections»''' ('''Подтверждать подключения без приглашения'''). Нужно установить пароль для предотвращения неавторизованных подключений. Неплохая идея – блокировать порт 5900 на Вашем маршрутизаторе, если только Вы не планируете подключаться через Интернет. Теперь можете входить через '''K-Menu &amp;gt; Internet &amp;gt; Krdc Remote Desktop Connection''' на другом компьютере.&lt;br /&gt;
&lt;br /&gt;
Альтернатива – подключиться к ПК через SSH и запускать отдельные X-программы на Вашем локальном рабочем столе, вот так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ssh -X hostname someprogram&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При таком решении вывод компьютерной программы не появляется на экране телевизора. Это может быть полезно, если Вы выполняете некоторые административные задачи во время просмотра телепрограмм. Хотя некоторые фильмы определенно украсит окно ''Konsole'' вверху экрана, не все члены семьи будут согласны с этим.&lt;br /&gt;
&lt;br /&gt;
Настройка ''X.org'' на первый дисплей не поможет, так как стандартный сервер VNC использует нулевой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 8. Переустановка BIOS ===&lt;br /&gt;
'''Вопрос:''' У меня четыре совершенно разных компьютера. Шесть месяцев назад я ввел в них одинаковые пароли для защиты CMOS. В пароле было шесть букв, знаки '''*''' и '''&amp;amp;'''. Потом мне понадобилось инсталлировать или изменить часть оборудования, но ни один компьютер не пускает меня в CMOS с этим паролем. Пароль стопроцентно верный. Как же переустановить CMOS? ''(Питер [Peter])''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ответ:''' Скорее всего, пароль содержал недопустимые символы. Способы переустановки CMOS зависят от изготовителя, но чаще всего на материнской плате есть переключатель, помеченный '''CLEAR CMOS''' или '''RESET RTC'''. Нужно выключить напряжение, перевести этот переключатель в положение переустановки – то есть противоположное текущему положению – подождать несколько секунд, а затем вернуть его обратно.&lt;br /&gt;
&lt;br /&gt;
Ни в коем случае не делайте при включенном питании. Фактически, следует даже вынуть вилку из розетки, чтобы блок питания не подавал на материнскую плату даже малейшего напряжения. Включив компьютер, Вы найдете BIOS полностью освеженным, с первоначальными настройками.&lt;br /&gt;
&lt;br /&gt;
Процедура может различаться в зависимости от модели, поэтому все вышесказанное следует воспринимать как руководство к действию, а не как строгие указания. Одно правило непреложно – питание должно быть отключено, иначе можно повредить материнскую плату. Прочтите руководство по Вашей плате, посетите сайт изготовителя в поисках PDF-варианта, если печатная версия недоступна.&lt;br /&gt;
&lt;br /&gt;
Важнее всего перед началом работы прочесть документацию. Процедура примерно одинакова для всех материнских плат, которые я видел, но детали различаются (одна из виденных мною плат требовала еще и снятия батарейки).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 9. Последовательный захват ===&lt;br /&gt;
'''Вопрос:''' У нас есть небольшой коммутатор 5ESS, который посылает файлы журналов на ROP (readonly printer) на 1200-O-7-1. Кабель – обычный трехпроводной последовательный Unix-кабель. Компьютер соединяется со всем этим через мост Black Box. Система – Windows 2000 с эмулятором терминала ''Procomm''.&lt;br /&gt;
&lt;br /&gt;
Я могу непосредственно подключиться к последовательному порту, и файлы журналов выводятся на экран. Я еще перехватываю их и пишу в файл (экономится куча бумаги).&lt;br /&gt;
&lt;br /&gt;
Хотел бы делать то же самое в Linux (чтоб избавиться от Windows), но не могу сделать этого при помощи ''tee'' или перенаправления. В идеале, мне нужно не только постоянное отображение файлов на экране, но и продолжение их записи в файл даже в случае выхода пользователя из системы. Кроме того, я хотел бы, чтобы каждую полночь создавался новый файл, а старый закрывался. Можете помочь с синтаксисом или подсказать действенный метод сделать это? ''(Майкл Ивз [Michael Ives])''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_110_1.jpg|thumb|right|200px|Эмулятор терминала ''Minicom'' показывает и записывает в файл трафик последовательного порта.]]&lt;br /&gt;
'''Ответ:''' Я бы первым делом попробовал программу ''Minicom''. Это эмулятор терминала, по типу ''Procomm'', он должен быть в репозитории Вашего дистрибутива. Если его там нет, можно загрузить с http://alioth.debian.org/projects/minicom. ''Minicom'' имеет опцию вывода данных как в файл, так и на экран – обеспечьте ему связь с Вашим коммутатором, и он сделает все, что Вам нужно.&lt;br /&gt;
&lt;br /&gt;
Среди альтернатив – более низкоуровневые соединения с последовательным портом. Например, ''Logserial'' с http://www.gtlib.cc.gatech.edu/pub/Linux/system/serial: он сбрасывает данные с указанного последовательного порта на ''stdout'' или в файл; в обоих случаях пригодится ''tee''. Есть Perl-скрипт на http://aplawrence.com/Unix/logger.html, хотя тут может понадобиться некоторая правка для соответствия вашим требованиям.&lt;br /&gt;
&lt;br /&gt;
Чтобы программа работала непрерывно, запускайте ее в ''screen''. Это сохранит программу рабочей при выходе пользователя, плюс вы сможете подключаться к ней в любое время, даже удаленно через SSH.&lt;br /&gt;
&lt;br /&gt;
Настроив запись журналов и другие параметры в конфигурации ''Minicom'', запустите его командой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;screen minicom&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нажмите '''Ctrl+A D''' для выхода из ''screen'', оставив Minicom работать, затем наберите '''screen --r''' для вторичного соединения. Необходимо помнить одну вещь: обе программы используют сочетание клавиш '''Ctrl+A''' как команду. Чтобы ''screen'' передавал команду программе, работающей в нем, нажмите '''Ctrl+A''' A, и по нажатию '''Ctrl+A A Z''' Вы получите экран помощи ''Minicom''.&lt;br /&gt;
&lt;br /&gt;
Для разделения файлов журнала я бы воспользовался ''Logrotate''. Она устанавливается и работает по умолчанию на большинстве дистрибутивов в качестве ротатора системных журналов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 10. Дайте инструмент… ===&lt;br /&gt;
'''Вопрос:''' Мне нужна помощь с послеустановочной настройкой почтового клиента ''Evolution'' на моей системе Ubuntu. На моем домашнем компьютере двойная загрузка – на одном разделе Windows XP, на другом – Ubuntu Linux. У меня есть Ethernet-подключение к сетевому концентратору. ''Mozilla'' под Ubuntu работает замечательно – я успешно использую ее для обновлений, поисков в Google и т.п. Поэтому Ubuntu имеет превосходную связь с Интернетом.&lt;br /&gt;
&lt;br /&gt;
А вот почта ''Evolution'' нуждается в правильной настройке. В одном из старых номеров LXF упоминалось о мастере настройки, но я не смог его вызвать. Поиск в Google выдал документ о настройке ''Evolution''. Сперва он казался весьма полезным, но требует меню '''Tools''' (Инструменты), которого в моем ''Evolution'' нет. Как мне настроить ''Evolution'' без меню '''Tools'''? ''(Джон Клив [John Cleave])''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ответ:''' Вы не уточнили, какие именно версии ''Evolution'' и Ubuntu установлены у вас, но рискну предположить, что новейшие.&lt;br /&gt;
&lt;br /&gt;
Так вот у ''Evolution 2.0'' было меню '''Tools''', а у ''Evolution 2.4'' и ''2.6'' его нет. При первом запуске ''Evolution'' вы должны были заметить появление '''First-Run Assistant''' ('''Помощника'''). У вас, похоже, он не сработал, и ''Evolution'' скрыл свои настройки. Чтобы вызвать Помощника еще раз, нужно удалить директорию '''.Evolution''' (не пропустите точку!) в домашнем каталоге, затем набрать '''Evolution''' в командной строке. Тогда ''Evolution'' решит, что запускается впервые, и вызовет '''Помощника''', с его помощью вы и настроите программу.&lt;br /&gt;
&lt;br /&gt;
Если Вы не хотите связываться с командной строкой, просто создайте новую учетную запись почты щелчками на '''Edit''' ('''Редактировать''') '''&amp;gt; Preferences''' ('''Параметры'''), затем '''Mail Accounts''' ('''Учетные записи''') '''&amp;gt; Add''' ('''Добавить''').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 11. Загадка Kino ===&lt;br /&gt;
'''Вопрос:''' Пару дней назад с помощью ''Synaptic'' я инсталлировал ''Kino'' на свой Ubuntu 6.06. Кажется, версия ''Kino'' была 0.8, работала она прекрасно во всех отношениях, включая захват видео с моей камеры.&lt;br /&gt;
&lt;br /&gt;
Сегодня я согласился на предложение автоматического обновления Ubuntu обновить ''Kino'' до версии 0.9.2, но теперь, запуская ''Kino'', я не могу сохранить видео. Вместо этого, выходит сообщение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Warning: dv1394 kernel module not&lt;br /&gt;
loaded or failure to read/write /dev/&lt;br /&gt;
ieee1394/dv/host0/PAL/in&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Моя камера отображается корректно как устройство захвата, а ''Dvgrab'' из ''Kino'' захватывает все без проблем (только пользоваться им премерзко), поэтому 1394 должно работать.&lt;br /&gt;
&lt;br /&gt;
Есть ли способ как-нибудь это исправить? ''(вof, с форума LXF)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_111_1.jpg|thumb|right|200px|''Kino'' захватывает цифровое видео с ленты или в реальном времени, но только если «видит» устройство.]]&lt;br /&gt;
'''Ответ:''' Хм… А Вы не обновляли еще что-нибудь в то же время? Для управления устройствами Ubuntu использует ''udev'', и когда ''raw1394'' перестает штатно работать, оно не создается (эти же проблемы встречаются на Fedora и других дистрибутивах, постепенно переходящих на ''udev'').&lt;br /&gt;
&lt;br /&gt;
Это к вопросу «почему». А вот ответ, «что делать»: грубый хак, просто создайте устройство сами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mknod /dev/raw1394 c 171 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Должно сработать. Если нет, проверьте, все ли нужные модули были загружены. Запуск ''lsmod'' покажет Вам, были ли загружены ''raw1394'' и ''video1394''. Может понадобиться смена прав доступа к устройству, чтобы ''Kino'' могла их прочесть.&lt;br /&gt;
&lt;br /&gt;
Кстати, составители пакетов очень сердиты на упорство, с которым ''Kino'' цепляется за устройство ''raw1394''. Кроме всего прочего, ослабление политики прав доступа вызывает вопросы по безопасности. В будущем ''Kino'' скорее всего перейдет на более стандартную схему доступа к видеоустройствам.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 12. Права и… не права ===&lt;br /&gt;
'''Вопрос:''' Если я использую изображения из Сети в своем слайд-шоу, какими правилами регулируются подобные заимствования? Я не нашел никаких ассоциированных сведений относительно авторских прав для тех изображений, которые хочу использовать, но все-таки хотелось бы знать, какие правила существуют для изображений из Интернета. ''(Аноним, с форума LXF)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ответ:''' В Великобритании [и в России, – прим.ред.] авторское право действует с момента создания, и его не обязательно утверждать специально. Поэтому для изображений неизвестных авторов из Интернет лучше считать, что они защищены авторским правом, если явно не указано обратное.&lt;br /&gt;
&lt;br /&gt;
Однако есть и исключения из британских правил, главным образом в случаях исследования или уместного использования (например, если Вы описываете чей-то сайт, правильно будет привести его изображение). Полезную информацию по этому вопросу может предоставить сайт Британского патентного бюро: http://www.patent.gov.uk/copy/c-manage/c-useenforce/c-useenforce-use/c-useenforce-use-exception.htm.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в некоторых обстоятельствах Вы можете использовать картинки вполне законно, но всегда лучше спросить на это разрешение. Если Вам нужны какие-то изображения для Вашей презентации – могу я предложить Вам работы под лицензией Creative Commons? Зайдите на http://www.creativecommons.org.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13. Скользкий DMZ ===&lt;br /&gt;
''Вопрос-победитель (английская редакция)''&lt;br /&gt;
&lt;br /&gt;
'''Вопрос:''' Я установил web-сервер (SUSE 10.0) в виртуальной машине на моем ПК c SUSE 10.0. Настроил его так, что он находится в DMZ [демилитаризованная зона, открытая внешним сетям и почти отрезанная от внутренних, – прим. пер.] моего роутера (тоже SUSE 10.0). Web-трафик направляется в ПК корректно; но я не могу подключиться ни к одному порту из внутренней сети. Хотелось бы непосредственно связываться с ПК по ''ssh'' из внутренней сети.&lt;br /&gt;
&lt;br /&gt;
Брандмауэр на роутере (192.168.0.9) был настроен с помощью ''Yast''. Я организовал проброс порта 80 на адрес web-сервера (192.168.1.2). Я пробовал переназначить серверу внутренний (192.168.0) порт 80, но безрезультатно.&lt;br /&gt;
&lt;br /&gt;
Можно ли решить задачу с помощью ''Yast''? Если нет, посоветуйте несложный способ конвертации существующей настройки ''Yast'' в сценарий ''iptables'', где это сделать проще. Надеюсь на вашу помощь… ''(Ли [Lee])''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ответ:''' Настоятельно рекомендую установить IPCop, специализированный Linux-брандмауэр, а не использовать SUSE 10.0 в качестве роутера. Я долго пользовался IPCop, пока не перешел на брандмауэры Cisco PIX: установка займет всего несколько минут. IPCop использует концепцию «зеленой сети» (Green network) для защищенных внутренних сетей, вроде сети Вашего сервера, что упрощает решение поставленной задачи.&lt;br /&gt;
&lt;br /&gt;
Превосходные HOWTO о IPCop можно найти на http://howtoforge.net/perfect_linux_firewall_ipcop_p2, а домашняя страница проекта находится по адресу: http://www.ipcop.org.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_111_1.jpg</id>
		<title>Файл:Img 89 111 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_111_1.jpg"/>
				<updated>2008-03-17T16:25:40Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_110_1.jpg</id>
		<title>Файл:Img 89 110 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_110_1.jpg"/>
				<updated>2008-03-17T16:25:30Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_109_1.jpg</id>
		<title>Файл:Img 89 109 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_109_1.jpg"/>
				<updated>2008-03-17T16:25:21Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_108_1.jpg</id>
		<title>Файл:Img 89 108 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_108_1.jpg"/>
				<updated>2008-03-17T16:25:12Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_107_2.jpg</id>
		<title>Файл:Img 89 107 2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_107_2.jpg"/>
				<updated>2008-03-17T16:25:01Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_107_1.jpg</id>
		<title>Файл:Img 89 107 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_107_1.jpg"/>
				<updated>2008-03-17T16:24:52Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_106_1.jpg</id>
		<title>Файл:Img 89 106 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_106_1.jpg"/>
				<updated>2008-03-17T16:24:42Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF89:LaTeX</id>
		<title>LXF89:LaTeX</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF89:LaTeX"/>
				<updated>2008-03-17T16:13:51Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: Новая: '''Компьютерные TeXнологии''' Учимся использовать культовую систему вёрстки  == Вёрстка I == '''''ЧАСТЬ 6''' Мы ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Компьютерные TeXнологии''' Учимся использовать культовую систему вёрстки&lt;br /&gt;
&lt;br /&gt;
== Вёрстка I ==&lt;br /&gt;
'''''ЧАСТЬ 6''' Мы учимся использовать культовую систему верстки уже полгода, но до сих пор не сказали об этой самой верстке ни слова. '''Евгений Балдин''' спешит исправить сложившуюся ситуацию.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;''Хороший набор – это плотный набор, «дырявый» же набор&amp;lt;br&amp;gt;плохо читается, так как дыры нарушают связанность строки и&amp;lt;br&amp;gt;тем самым затрудняют восприятие мысли.''&amp;lt;br&amp;gt;'''Ян Чихольд.'''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Волшебных текстовых процессоров не существует. Телепатией программы пока не обладают. Они, естественно, делают то, что им сказано, но вкус и чувство прекрасного у них полностью отсутствует. В конце занимательного приключения по созданию текстов частенько приходится брать управление в свои руки, дабы навести лоск на почти готовое произведение.&lt;br /&gt;
&lt;br /&gt;
Вёрстка – это процесс составления страниц определённого размера (полос) газеты, журнала, книги из набранных строк, заголовков, иллюстраций и т.п. в соответствии с разметкой или макетом. В этой главе разберёмся с тем как задавать размеры, что такое макет полосы набора и как «удерживать» текст в рамках дозволенного.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Определённые «размеры» и переменные «длины» ===&lt;br /&gt;
Для определения расстояния ''LaTeX'' поддерживает переменные типа «длина». Например, ранее уже упоминалась команда '''\TeXtwidth''' – это переменная, хранящее значение длины, равное ширине текста.&lt;br /&gt;
&lt;br /&gt;
Для создания переменной типа «длина» следует воспользоваться командой '''\newlength'''. В качестве обязательного параметра ей передаётся имя переменной. При создании переменной присваивается нулевая длина, так что следующим шагом необходимо приравнять её чему-то:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\newlength{\MyLen}&lt;br /&gt;
\setlength{\MyLen}{1cm plus 2.5fill minus 5mm}&lt;br /&gt;
\addtolength{\MyLen}{5em}&lt;br /&gt;
Длина \lstinline!\MyLen! равна \the\MyLen.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_92_1.png|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Длина в ''LaTeX'' – это не просто какой-то определённый размер. Это более сложная структура с указанием границ возможного сжатия и растяжения. Границы растяжения определяются с помощью инструкции '''plus''', а сжатия – '''minus'''. При формировании абзацев ''TeX'' использует эту информацию для максимально «красивого» заполнения.&lt;br /&gt;
&lt;br /&gt;
Команда '''\setlength''' эквивалентна оператору присваивания. В свою очередь команда '''\addtolength''' позволяет увеличить переменную на указанную величину, которая может быть отрицательной. Макрос '''\the''' позволяет «развернуть» переменную длины для вывода на печать.&lt;br /&gt;
&lt;br /&gt;
''LaTeX'' «говорит» в терминах англо-американской системы мер. Эта система отживает своё, но её наследие будет ещё долго проявляться и портить жизнь современному «метрическому» миру. Для определённости следует знать, что один дюйм ('''in''') равен 2.54 сантиметра, и в нём умещается 72.27 пунктов (1 pt &amp;amp;asymp; 0.35 mm). Метрические величины представлены привычными сантиметрами ('''cm''') и миллиметрами ('''mm'''). Кроме упомянутых величин, ''LaTeX'' умеет оперировать размерами в больших пунктах ('''bp'''), пунктах Дидо ('''dd'''), пиках ('''pc''') и цицеро ('''cc''') – традиционных единицах измерения, используемых в типографиях. Минимальной ненулевой единицей длины в ''LaTeX'' является приведённый пункт ('''sp'''), который составляет 1/65536 от одного пункта.&lt;br /&gt;
&lt;br /&gt;
Кроме определённых единиц измерения, длину можно задавать также и в относительных: '''1ex''' соответствует высоте строчной латинской буквы x, а '''1em''' – ширине прописной латинской буквы M. Эти величины меняются вместе со сменой шрифта, что позволяет задавать автоматически масштабирующиеся горизонтальные промежутки, не привязанные к конкретному размеру и типу шрифта. Например, широкий пробел, задаваемый с помощью команды '''\quad''', определяется как '''\hspace{1em}'''.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\setlength{\MyLen}{1ex}&lt;br /&gt;
Высота x равна \the\MyLen\par&lt;br /&gt;
\Large \setlength{\MyLen}{1ex}&lt;br /&gt;
Высота x равна \the\MyLen&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_92_2.png|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Интересной инструкцией является длина '''fill''' – это бесконечность. ''TeX'' поддерживает операции с бесконечностями, причём оперирует тремя их видами: '''fil''', '''fill''' и '''filll''', где '''fil'''&amp;lt;&amp;lt;'''fill'''&amp;lt;&amp;lt;'''filll'''. С помощью этих сущностей производится центрирование боксов и более сложные выравнивания.&lt;br /&gt;
&lt;br /&gt;
Если хочется узнать ширину текста, то можно воспользоваться командой '''\settowidth''':&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\settowidth{\MyLen}{очень длинная фраза}&lt;br /&gt;
\addtolength{\MyLen}{1em}&lt;br /&gt;
\centering&lt;br /&gt;
\framebox[1.2\MyLen]{очень длинная фраза}\par&lt;br /&gt;
\framebox[1.2\MyLen]{короткая фраза}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_93_1.png|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Аналогично, команда '''\settoheight''' позволяет выяснить высоту текста над базовой линией, а '''\settodepth''' – глубину под базовой линией. При использовании длины можно добавить перед ней множитель.&lt;br /&gt;
&lt;br /&gt;
А теперь немного «магии» из английского FAQ по ''LaTeX'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\makeatletter&lt;br /&gt;
\newcommand{\maxwidth}{%&lt;br /&gt;
    \ifdim\Gin@nat@width&amp;gt;\linewidth&lt;br /&gt;
        \linewidth&lt;br /&gt;
    \else&lt;br /&gt;
        \Gin@nat@width&lt;br /&gt;
    \fi&lt;br /&gt;
}&lt;br /&gt;
\makeatother&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эта конструкция определяет переменную длины '''\maxwidth''' таким образом, что при вставке картинки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\includegraphics[width=\maxwidth]{«картинка»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ширина картинки становится равной минимальному из двух возможных значений: «естественной» ширины картинки (размер в '''BoundingBox''') или ширины строки. Это позволяет вывести картинку в натуральную величину при условии, что она не выходит за рамки дозволенного и загнать её в эти рамки, коли она за них вылезает.&lt;br /&gt;
&lt;br /&gt;
===== calc =====&lt;br /&gt;
В дополнение к стандартным возможностям, пакет ''calc'' расширяет базовые операции с длинами. Фактически ''calc'' вводит арифметические операции в привычной со школы инфиксной записи.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\setlength{\MyLen}{&lt;br /&gt;
    (1em+\widthof{очень длинная фраза})*\real{1.2}}&lt;br /&gt;
\centering&lt;br /&gt;
\framebox[\MyLen]{очень длинная фраза}\par&lt;br /&gt;
\framebox[\MyLen]{короткая фраза}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_93_2.png|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
При загрузке ''calc'' '''\setlength''' и '''\addtolength''' переопределяются так, что в качестве аргумента после этого можно передавать арифметические выражения. Кроме арифметики, в ''calc'' определяются макросы '''\widthof{текст}''', '''\heightof{текст}''' и '''\depthof{текст}''' – ширина, высота и глубина текста.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Img_89_93_3.png|frame|center|Определение ширины ('''width'''), высоты ('''height''') и глубины ('''depth''').]]&lt;br /&gt;
&lt;br /&gt;
При умножении длины на число длина должна стоять до числа ('''4mm*2''' – верно, а '''2*4mm'''– нет). Делить и умножать можно только на целые числа. Действительные числа вводятся с помощью уже использованного в примере макроса '''\real''' и отношения длин, вычисляемого с помощью команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\ratio{«длина»}{«длина»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подробное описание пакета можно найти в документации '''calc.pdf''' из коллекции ''tools''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Скелет страницы ====&lt;br /&gt;
На рисунке ниже приведён результат выполнения команды '''\layout''' из одноимённого пакета. Основное место на странице занимает текст – верстальщики зовут его «основной текст» или «тело текста» (bodytext). Справа и слева от текста расположены поля. Поля обычно остаются пустыми, но иногда они используются для заметок («маргиналий» или «фонариков»). В верхней и нижней части страницы расположены, соответственно, верхний и нижний колонтитулы. Колонтитул представляет из себя справочную строку, помогающую ориентироваться в структуре текста.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
1 один дюйм + \hoffset&lt;br /&gt;
2 один дюйм + \voffset&lt;br /&gt;
3 \oddsidemargin = 2pt&lt;br /&gt;
4 \topmargin = -41pt&lt;br /&gt;
5 \headheight = 18pt&lt;br /&gt;
6 \headsep = 21pt&lt;br /&gt;
7 \textheight = 635pt&lt;br /&gt;
8 \textwidth = 448pt&lt;br /&gt;
9 \marginparsep = 12pt&lt;br /&gt;
10 \marginparwidth = 49pt&lt;br /&gt;
   \marginparpush = 6pt (not shown)&lt;br /&gt;
   \voffset = 0pt&lt;br /&gt;
   \paperheight = 845pt&lt;br /&gt;
11 \footskip = 50pt&lt;br /&gt;
   \hoffset = 0pt&lt;br /&gt;
   \paperwidth = 597pt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_93_4.png|thumb|right|300px|Макет полосы набора класса ''scrartcl'' (опция '''a4paper'''). Результат выполнения команды '''\layout'''.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Совокупность размеров и расположений указанных полей, а также вид и содержание колонтитулов называется макетом полосы набора. На рисунке пунктирной линией изображены поля драйвера ('''1''' и '''2''') относительно которых выстраиваются все остальные поля. По договорённости отступы до полей драйвера равны одному дюйму. Переопределив '''\hoffset''' и '''\voffset''' (по умолчанию они равны нулю), можно легко сдвинуть полосу набора целиком по горизонтали и вертикали, соответственно.&lt;br /&gt;
&lt;br /&gt;
Ниже перечислены параметры, которые управляют макетом полосы набора:&lt;br /&gt;
* Тело текста характеризуется высотой '''\TeXthight''' ('''7''') и шириной '''\TeXtwidth''' ('''8''') При многоколоночной вёрстке ширина колонки равна '''\columnwidth'''. Переменная '''\linewidth''' принимает значение, равное длине строки текущего текста.&lt;br /&gt;
* '''\oddsidemargin''' ('''3''') добавляется слева в случае односторонней печати. При двусторонней печати полосы набора для чётных и нечётных страниц различаются. В этом случае для нечётных слева опять же добавляется '''\oddsidemargin''', а для чётных '''\evensidemargin'''.&lt;br /&gt;
* Верхний колонтитул располагается на расстоянии '''\topmargin''' ('''4''') от поля драйвера, имеет высоту '''\headheight''' ('''5'''), а тело текста отступает от колонтитула на расстояние '''\headsep''' ('''6''').&lt;br /&gt;
* '''\footskip''' позиционирует базовую линию нижнего колонтитула относительно последней строки текста.&lt;br /&gt;
* Поля для заметок имеют ширину '''\marginparwidth''' ('''10''') и отступают от тела текста на расстояние '''\marginparsep''' ('''9'''). Ещё одна опция управляет минимальным расстоянием между заметками: '''\marginparpush'''.&lt;br /&gt;
&lt;br /&gt;
===== Выбор размера бумаги =====&lt;br /&gt;
Физический размер бумаги описывается параметрами '''\paperwidth''' и '''\paperheight'''. Стандартные базовые классы ''LaTeX'' ('''article''', '''book''', '''report''' и '''letter''') по умолчанию предполагают, что для печати используется бумага формата letter. Очевидно, это умолчание не годится для России, где стандартом является формат A4 (210x297 мм). Обычно установить правильный формат можно с помощью передачи параметра '''a4paper''' при выборе класса документа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\documentclass[a4paper,12pt,oneside]{scrbook}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для создания небольших брошюрок со страницей размера A5 (половина размера A4) используется опция '''a5paper'''.&lt;br /&gt;
&lt;br /&gt;
===== Ориентация =====&lt;br /&gt;
Для портретной и альбомной ориентации вообще-то требуются разные макеты полосы набора. Альбомная ориентация может использоваться по умолчанию в некоторых специализированных классах (например, '''slides''').&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_94_1.png|thumb|right|150px|''lscape'' в действии.]]&lt;br /&gt;
Если повернуть требуется только текст без изменения полей колонтитулов, то проще всего воспользоваться окружением '''landscape''' из пакета ''lscape''. Всё, что находится внутри этого окружения поворачивается на 90 градусов против часовой стрелки. При использовании ''pdflatex'' для изменения ориентации не только текста, но и страницы (дабы не наклонять при чтении текста голову набок) при загрузке пакета следует передать ему опцию '''pdftex''' или воспользоваться пакетомнадстройкой ''pdflscape''.&lt;br /&gt;
&lt;br /&gt;
Лучше не менять параметры макета во время набора, но если очень хочется это сделать, то можно воспользоваться стандартным пакетом ''portland''. Он позволяет менять портретную ориентацию на альбомную и обратно на лету, переопределяя соответствующие управляющие макетом переменные. Команды '''\portrait''' и '''\landscape''' работают как переключатели между этими режимами. В пакете определены и одноимённые с переключателями окружения. Это довольно низкоуровневый пакет, и пользоваться им надо аккуратно.&lt;br /&gt;
|-&lt;br /&gt;
|[[Изображение:Img_89_94_2.png|thumb|right|200px|''rotpages'' в действии.]]&lt;br /&gt;
Если по какой-то причине требуется развернуть текст на 180 градусов, можно воспользоваться пакетом ''rotpages''. В пакете определены два переключателя режима '''\rotboxpages''' и '''\endrotboxpages''', которые указывают границы повёрнутого теста. Пакет умеет разворачивать не только страницы, но и колонки. Подробности можно найти в документации: '''rotpages-doc.pdf'''.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Меняем макет ===&lt;br /&gt;
Причина, по которой неискушённый ТеХник начинает менять макет полосы набора, обычно заключается в том, что он использует стандартные классы ''LaTeX'' – один из четвёрки '''article''', '''book''', '''report''' или '''letter'''. Это очень древние классы, и на них много чего «завязано», поэтому они прибывают в абсолютно замороженном состоянии. Поэтому лучше для начала найти себе класс по душе. Например, '''scrartcl''', '''scrbook''', '''scrreprt''' и '''scrlettr''' – классы из коллекции ''KOMA-Script'', которые дублируют функциональность стандартной четвёрки, но ориентируются на европейских пользователей и размер листа A4. А.И. Роженко в рамках коллекции ''ncclatex'' (NCC) предоставляет класс '''ncc''', ориентированный на русских TeXников.&lt;br /&gt;
&lt;br /&gt;
==== Двигаем размеры ====&lt;br /&gt;
Выбор, естественно, не ограничивается упомянутыми выше классами – он огромен. Поэтому, прежде чем что-то изменять, следует внимательно изучить уже имеющиеся решения. И даже если вы знаете, что делаете, лучше не переопределять переменные, управляющие размерами макета полосы набора, вручную. Правильным решением будет воспользоваться одним из уже имеющих специализированных пакетов, например: '''geometry''' или '''vmargin'''.&lt;br /&gt;
&lt;br /&gt;
===== geometry =====&lt;br /&gt;
Пакет '''geometry''' меняет размеры прямо в процессе загрузки стилевого файла, например, так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\usepackage[height=25cm,a4paper,hmargin={3cm,2cm}]{geometry}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разбор параметров выполняется с помощью пакета ''keyval'', который уже упоминался в статье «Графика» (см. LXF86). В качестве параметров можно передавать выражения, если загружен пакет ''calc''.&lt;br /&gt;
&lt;br /&gt;
Список воспринимаемых пакетом опций очень обширен. В документации ('''geometry.pdf''') подробное описание всех имеющихся опций занимает свыше пяти страниц текста. Использование этого пакета для изменения размеров полей является более предпочтительным, чем изменение размеров напрямую. Обилие принимаемых параметров позволит задать любой формат полосы набора в наиболее естественной форме, не ошибившись при расчётах. Подробное описание пакета, к сожалению, выходит за все разумные ограничения на объём статьи. К счастью, документация очень хорошая и чрезвычайно подробная.&lt;br /&gt;
&lt;br /&gt;
===== vmargin =====&lt;br /&gt;
Пакет ''vmargin'' управляет размерами макета через выставку полей. Перед этим следует задать формат листа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\setpapersize[«ориентация»]{«формат листа»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В качестве обязательного параметра команды можно указать один из следующих форматов: '''A0''', '''A1''', …, '''A9''', '''B0''', '''B1''', …, '''B9''', '''C0''',…, '''C9''', '''USletter''', '''USlegal''' и '''USexecutive'''. Необязательный параметр может принимать значения '''landscape''' (альбомная ориентация) или '''portrait''' (портретная ориентация, по умолчанию). Для нестандартных форматов листа можно задать размеры с помощью ключевого слова '''custom''' команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\setpapersize{custom}{«ширина»}{«высота»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как вы определитесь с размером страницы, можно задавать размеры для полосы набора с помощью одной из следующих команд:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%Полоса набора с колонтитулами&lt;br /&gt;
\setmargins{«ширина поля слева»}{«высота поля сверху»}%&lt;br /&gt;
    {«ширина текста»}{«высота текста»}%&lt;br /&gt;
    {«высота»}{«отступ»}%верхний колонтитул&lt;br /&gt;
    {«высота»}{«отступ»}%нижний колонтитул&lt;br /&gt;
%Полоса набора без колонтитулов&lt;br /&gt;
\setmargnohf{«ширина поля слева»}{«высота поля сверху»}%&lt;br /&gt;
    {«ширина текста»}{«высота текста»}%&lt;br /&gt;
%Установка рамеров без изменения колонтитулов&lt;br /&gt;
\setmarg{«ширина поля слева»}{«высота поля сверху»}%&lt;br /&gt;
    {«ширина текста»}{«высота текста»}%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме перечисленных команд, определены их аналоги: '''\setmarginsrb''', '''\setmargnohfrb''', '''\setmargrb'''. Отличие состоит в том, что вместо ширины и высоты тела текста в качестве параметров им передаются ширина правого поля и высота нижнего поля. Подробно пакет описан в документации '''vmargin.pdf'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Стили страницы ====&lt;br /&gt;
Полоса набора – это не только размеры: это ещё и наполнение колонтитулов. Обычно оно определяется в классе документа. Здесь без необходимости лучше тоже ничего не менять.&lt;br /&gt;
&lt;br /&gt;
Простейший способ изменить стиль страницы – это воспользоваться командой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\pagestyle{«стиль страницы»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если стиль надо переопределить только для текущей страницы, то следует воспользоваться командой '''\thispagestyle{стиль страницы}'''.&lt;br /&gt;
&lt;br /&gt;
Есть три стандартно определённых стиля:&lt;br /&gt;
* empty Страница выводится без каких-либо колонтитулов – только текст.&lt;br /&gt;
* plain Выводится только номер страницы в нижнем колонтитуле.&lt;br /&gt;
* headings В верхнем колонтитуле выводится номер страницы и информация, определяемая классом документа.&lt;br /&gt;
&lt;br /&gt;
Если и это наполнение не устраивает, то можно определить свой собственный стиль. Пакет ''fancyhdr'' специализируется как раз на этом.&lt;br /&gt;
&lt;br /&gt;
===== fancyhdr =====&lt;br /&gt;
[[Изображение:Img_89_95_1.png|thumb|right|300px|Заполняем колонтитулы с помощью ''fancyhdr''.]]&lt;br /&gt;
Чтобы воспользоваться возможностями пакета, необходимо загрузить стилевой файл и выбрать стиль с помощью '''\pagestyle'''&lt;br /&gt;
&lt;br /&gt;
Пакет fancyhdr позволяет управлять содержимым колонтитула. Возможности: верхний и нижний колонтитул разбивается на три независимых части, многострочные колонтитулы, колонтитулы, вылезающие по ширине за '''\textwidth''', декоративные линейки, разные колонтитулы для чётных и нечётных страниц, отдельные колонтитулы для специальных полос (начала глав, страницы, отведённые под плавающие объекты). Вот простейший пример для определения колонтитулов с помощью ''fancyhdr'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\usepackage{fancyhdr}&lt;br /&gt;
…&lt;br /&gt;
\begin{document}&lt;br /&gt;
\pagestyle{empty} %очищаем стиль страницы&lt;br /&gt;
\pagestyle{fancy} %включаем пользовательский стиль&lt;br /&gt;
\lhead{А.В.Тор} %верхний колонтитул слева&lt;br /&gt;
\chead{---~\arabic{page}~---} % там же по центру&lt;br /&gt;
\rhead{Статья} %верхний колонтитул справа&lt;br /&gt;
% аналогично для оформления нижнего колонтитула&lt;br /&gt;
\cfoot{---~\roman{page}~---}&lt;br /&gt;
\lfoot{\hspace{0.7cm}Это просто демонстрация}&lt;br /&gt;
\rfoot{возможностей \textbf{fancyheadings}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменная '''page''' содержит номер страницы. Подробности о том что можно сотворить с колонтитулами, следует искать в документации к пакету '''fancyhdr.pdf'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Причёсываем текст ===&lt;br /&gt;
[[Изображение:Img_89_95_2.png|thumb|right|200px|Дефект набора (коридор).]]&lt;br /&gt;
Теперь, когда границы определены, разберемся, что можно сделать для красивого размещения текста на странице. Часть забот по следованию правилам вёрстки ''LaTeX'' берёт на себя. Вам, например, не требуется следить за единообразием оформления полос. Но есть дефекты, которые компьютеру заметить не под силу, например, так называемые коридоры.&lt;br /&gt;
&lt;br /&gt;
===== Строка =====&lt;br /&gt;
[[Изображение:Img_89_95_3.png|thumb|right|200px|Переполненная строка. Включена опция ''draft''.]]&lt;br /&gt;
Когда строка с точки зрения TeX становится слишком разряженной ('''Underfull''') или слишком сжатой ('''Overfull'''), в log-файле появляются предупреждения, начинающиеся словами вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Overfull \hbox (26.1765pt too wide) in paragraph at lines 347--356&lt;br /&gt;
[][]\T2A/cmr/m/n/12 Список вос-при-ни-ма-е-мых па-ке-том оп-ций&lt;br /&gt;
очень об-ши-рен. В до-ку-мен-та-ции geometry.pdf&lt;br /&gt;
Если при выборе класса документа передать ему опцию draft:&lt;br /&gt;
\documentclass[draft,a4paper,12pt,oneside]{scrbook}&lt;br /&gt;
то такие проблемные места будут отмечаться прямо в тексте.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обычно подобные переполнения связаны с тем, что ''LaTeX'' не знает, как перенести какое-либо слово. В этом случае следует сообщить ему, что и где можно переносить, как это было показано во второй части цикла «Базовые элементы» (см. LXF84). В крайнем случае можно насильно разорвать строку с помощью команды '''\linebreak''' или '''\\'''. В отличии от '''\linebreak''', команда '''\\''' не выравнивает остаток строки по правому полю.&lt;br /&gt;
&lt;br /&gt;
Если можно редактировать текст, то для исправления дефектов набора лучше переделать предложение так, чтобы в новой инкарнации тест не создавал проблем для чтения.&lt;br /&gt;
&lt;br /&gt;
===== Горизонтальные пробелы =====&lt;br /&gt;
Расстояние между словами можно изменить с помощью горизонтальных промежутков. Они создаются с помощью команды '''\hspace'''. В качестве параметра команде передаётся длина. Вариант команды '''\hspace*''' отличается от основной тем, что создание пробела не игнорируется даже тогда, когда пробел приходится на начало или конец строки.&lt;br /&gt;
&lt;br /&gt;
Существует несколько определённых по умолчанию горизонтальных пробелов:&lt;br /&gt;
* '''\quad''' – горизонтальный промежуток шириной '''1em'''. Также есть '''\qquad''' – удвоенный '''\quad''', и '''\endspace''' – половина от '''\quad'''.&lt;br /&gt;
* '''\hfill''' – бесконечный горизонтальный промежуток. Два '''\hfill''' подряд в два раза больше, чем один. Также есть «уменьшенная» бесконечность – '''\hfil'''.&lt;br /&gt;
* '''\hrulefill''' – то же, что и '''\hfill''', но заполненный промежуток подчеркивается. Аналогично, есть команда, заполняющая всё точками – '''\dotfill'''.&lt;br /&gt;
&lt;br /&gt;
===== Страница =====&lt;br /&gt;
Проблемы могут возникнуть и при формировании страниц. В крайнем случае, можно воспользоваться командами принудительного завершения страницы '''\pagebreak''' или '''\newpage'''. Отличие первой команды от второй в том, что после формирования страницы полоса выравнивается по нижней кромке – это может привести к неоправданному растяжению страницы. Если проблему можно решить путём увеличения/уменьшения страницы на одну-две строки, то лучше воспользоваться следующими макросами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\newcommand{\longpage}{\enlargethispage{\baselineskip}}&lt;br /&gt;
\newcommand{\shortpage}{\enlargethispage{-\baselineskip}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда '''\longpage''' увеличивает тело текста текущей страницы на одну строку, а '''\shortpage''', соответственно, уменьшает. Длина '''\baselineskip''' служит для определения интерлиньяжа – междустрочного пробела.&lt;br /&gt;
&lt;br /&gt;
===== Висячая строка =====&lt;br /&gt;
Одним из самых неприятных дефектов набора является «висячая строка». Висячая строка – это концевая строка абзаца, стоящая первой на странице, или начальная срока абзаца, стоящая на странице последней. Этих артефактов следует всячески избегать. Для подавления этого эффекта в заголовке документа следует определить две переменные:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
%подавление висячих строк.&lt;br /&gt;
\clubpenalty=10000&lt;br /&gt;
\widowpenalty=10000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Вертикальные просветы =====&lt;br /&gt;
По аналогии с командой '''\hspace{длина}''', вертикальные промежутки организуются с помощью команды '''\vspace{длина}'''. Модификация команды '''\vspace*{длина}''' создаёт вертикальный просвет, которые не игнорируется, даже если просвет попадает на начало или конец страницы.&lt;br /&gt;
&lt;br /&gt;
Вертикальные просветы также имеют свои умолчания:&lt;br /&gt;
* '''\bigskip''' – вертикальный промежуток, равный примерно '''\baselineskip'''. Также имеются '''\medskip''' – половина от '''\bigskip''', и '''\smallskip''' – четверть от '''\bigskip'''.&lt;br /&gt;
* '''\vfill''' – бесконечный вертикальный промежуток. Два '''\vfill''' подряд в два раза больше, чем один. Также есть «уменьшенная» бесконечность – '''\vfil'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Печать через две строки ====&lt;br /&gt;
До сих пор временами встречаются требования вида: «Предоставить диплом, набранный в два интервала» – пережиток эпохи печатных машинок [при наборе «в два интервала» интерлиньяж равен удвоенному значению кегля, «в один интервал» – самому значению кегля, – прим. ред.]. Для решение этой проблемы лучше всего воспользоваться пакетом ''spacing''. В пакете определена команда '''\doublespacing''', которая выполняет искомое действие. Так же в spacing определены макросы '''\onehalfspacing''' и '''\singlespacing''' – печать в полтора и один интервал, соответственно. Для вертикальной разрядки небольшого фрагмента текста лучше воспользоваться одноимёнными окружениями или окружением '''spacing''':&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;100%&amp;quot;|&amp;lt;source lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\begin{spacing}{2.5}&lt;br /&gt;
    &amp;lt;&amp;lt;Этот текст, напечатан с&lt;br /&gt;
    интервалом в две с&lt;br /&gt;
    половиной строки&amp;gt;&amp;gt;.&lt;br /&gt;
\end{spacing}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|[[Изображение:Img_89_96_1.png|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
В качестве основного параметра окружению '''spacing''' передаётся интервал, с которым следует печатать текст.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Послесловие ===&lt;br /&gt;
В этом тексте присутствует далеко не вся информация, необходимая для вёрстки текста. Несмотря на то, что ''LaTeX'' позволяет верстать книги любителям без помощи профессионалов, лучше при любой возможности спрашивать у этих профессионалов совета. Понимание того, что, где и зачем надо исправлять, в случае ''LaTeX'' чрезвычайно важно, потому что, как правило, и так очевидно.&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_95_1.png</id>
		<title>Файл:Img 89 95 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_95_1.png"/>
				<updated>2008-03-17T15:58:03Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: загружена новая версия «Изображение:Img 89 95 1.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 9&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_96_1.png</id>
		<title>Файл:Img 89 96 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_96_1.png"/>
				<updated>2008-03-17T14:20:34Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: LaTeX 12&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 12&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_95_3.png</id>
		<title>Файл:Img 89 95 3.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_95_3.png"/>
				<updated>2008-03-17T14:20:21Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: LaTeX 11&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 11&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_95_2.png</id>
		<title>Файл:Img 89 95 2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_95_2.png"/>
				<updated>2008-03-17T14:20:06Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: LaTeX 10&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 10&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_95_1.png</id>
		<title>Файл:Img 89 95 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_95_1.png"/>
				<updated>2008-03-17T14:19:51Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: LaTeX 9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 9&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_94_2.png</id>
		<title>Файл:Img 89 94 2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_94_2.png"/>
				<updated>2008-03-17T14:19:39Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: LaTeX 8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 8&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_94_1.png</id>
		<title>Файл:Img 89 94 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_94_1.png"/>
				<updated>2008-03-17T14:19:22Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: LaTeX 7&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 7&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_93_4.png</id>
		<title>Файл:Img 89 93 4.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_93_4.png"/>
				<updated>2008-03-17T14:18:55Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: LaTeX 6&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 6&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_93_3.png</id>
		<title>Файл:Img 89 93 3.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_93_3.png"/>
				<updated>2008-03-17T14:18:34Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: LaTeX 5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 5&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_93_2.png</id>
		<title>Файл:Img 89 93 2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_93_2.png"/>
				<updated>2008-03-17T14:18:20Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: LaTeX 4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 4&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_93_1.png</id>
		<title>Файл:Img 89 93 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Img_89_93_1.png"/>
				<updated>2008-03-17T14:18:07Z</updated>
		
		<summary type="html">&lt;p&gt;Interlace: LaTeX 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LaTeX 3&lt;/div&gt;</summary>
		<author><name>Interlace</name></author>	</entry>

	</feed>