<?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=GArik</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=GArik"/>
		<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/GArik"/>
		<updated>2026-05-13T20:24:23Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF87-88:LaTeX</id>
		<title>LXF87-88:LaTeX</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF87-88:LaTeX"/>
				<updated>2009-10-28T23:17:31Z</updated>
		
		<summary type="html">&lt;p&gt;GArik: /* listings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Учебники]]&lt;br /&gt;
&lt;br /&gt;
: '''Компьютерные TeXнологии''' Учимся использовать культовую систему вёрстки&lt;br /&gt;
&lt;br /&gt;
=Документация и программный код=&lt;br /&gt;
&lt;br /&gt;
{{Цикл/LaTeX}}&lt;br /&gt;
&lt;br /&gt;
: '''ЧАСТЬ 4:''' ''TeX'', как известно, был создан для представления кода и алгоритмов. Так постигайте же замысел создателя и его последователей вместе с '''Евгением Балдиным'''!&lt;br /&gt;
&lt;br /&gt;
::::''+++ Ошибка Деления На Огурец.''&lt;br /&gt;
::::''Переустановите Вселенную И Перезагрузитесь +++''&lt;br /&gt;
::::''Так зависает Гекс.''&lt;br /&gt;
::::::::''Источник: «Санта-Хрякус» от Терри Пратчетта''&lt;br /&gt;
&lt;br /&gt;
Программирование под Linux – вполне естественное занятие.&lt;br /&gt;
Написание документации – неотъемлемая часть этого процесса. ''LaTeX'' достоин быть включённым в технологическую&lt;br /&gt;
цепочку по выпуску программного продукта.&lt;br /&gt;
&lt;br /&gt;
Если вспомнить историю, то Д.Э. Кнут создал ''TeX'' именно для целей&lt;br /&gt;
представления кода и алгоритмов в своём глобальном пятитомнике&lt;br /&gt;
«Искусство программирования».&lt;br /&gt;
&lt;br /&gt;
==Спецсредства==&lt;br /&gt;
&lt;br /&gt;
Чтобы украсить инструкцию, надо добавлять в неё «пятна».&lt;br /&gt;
Злоупотреблять этим не стоит, но пару мыслей выделить вполне реально. Упомянутые ниже приёмы – далеко не всё, что может предложить ''LaTeX'': это просто демонстрация возможностей.&lt;br /&gt;
&lt;br /&gt;
===keystroke===&lt;br /&gt;
&lt;br /&gt;
Иногда в тексте необходимы фразы вида: «Для выхода из программы&lt;br /&gt;
нужно нажать клавишу Esc.» Макрос '''\keystroke''', определённый в одноимённом пакете '''keystroke''', позволяет выделить название клавиши, примерно следующим образом:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex01.png|LXF88_latex01.png]]&lt;br /&gt;
&lt;br /&gt;
В пакете определены многие клавиши, имеющиеся на стандартной&lt;br /&gt;
клавиатуре. Пакет очень прост и имеет зачатки интернационализации –&lt;br /&gt;
его легко адаптировать под свои нужды.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex02.png|Клавиши, определенные в keystroke]]&lt;br /&gt;
&lt;br /&gt;
===LCD-дисплей===&lt;br /&gt;
&lt;br /&gt;
LCD-дисплеи сейчас встроены даже в кофемолки. Они легко узнаваемы, поэтому нет необходимости копировать их вид в документацию&lt;br /&gt;
с помощью фотографий – достаточно нарисовать что-то похожее.&lt;br /&gt;
Изобразить вид дисплея можно с помощью пакета '''lcd'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex03.png|LXF88_latex03.png]]&lt;br /&gt;
&lt;br /&gt;
Для определения цветов используется макрос '''\definecolor''' из пакета '''color'''. Команда '''\LCDcolors''' формирует цвет букв и фона, а макрос '''\textLCD''' выводит LCD-подобный текст на экран. '''\textLCD''' понимает&lt;br /&gt;
стандартные команды изменения размера шрифта, поэтому его можно&lt;br /&gt;
использовать совместно с обычным текстом внутри абзаца.&lt;br /&gt;
&lt;br /&gt;
По умолчанию определены только латинские буквы, цифры и некоторые из стандартных символов. Для определения других символов&lt;br /&gt;
можно воспользоваться макросом '''\DefineLCDchar'''. Макросу передаётся&lt;br /&gt;
имя символа и битовая маска, определяющая картинку 5x7 точек. Имя&lt;br /&gt;
символа может быть однобуквенным, тогда соответствующая буква&lt;br /&gt;
замещается новым рисунком, или многобуквенным, тогда созданный&lt;br /&gt;
рисунок кодируется указанным словом в фигурных скобках. Другие&lt;br /&gt;
размеры матрицы в пакете отсутствуют, но при желании его вполне&lt;br /&gt;
можно доработать.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex04.png|Определяем Ё для LCD]]&lt;br /&gt;
&lt;br /&gt;
Для эмуляции дисплея используется команда '''\LCD'''. В качестве обязательных параметров ей передаётся число строк и число столбцов, за которыми следует содержание строк, разделённых каким-то разделителем. В приведённом примере в качестве разделителя используется&lt;br /&gt;
вертикальная черта, но на её месте мог бы быть любой символ:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex05.png|LXF88_latex05.png]]&lt;br /&gt;
&lt;br /&gt;
===Битовые поля===&lt;br /&gt;
&lt;br /&gt;
Для описания сетевых протоколов, а так же для бинарных форматов&lt;br /&gt;
данных удобнее всего представить последовательность битов графически, то есть в виде таблицы. Это специализация пакета '''bytefield'''. В пакете определено одноимённое окружение '''bytefield''', в качестве обязательного аргумента которому передаётся ширина таблицы в битах:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 \begin{bytefield}{«битовая ширина поля»}&lt;br /&gt;
   «битовые поля»&lt;br /&gt;
 \end{bytefield}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В окружении '''bytefield''' работают команды '''\wordbox''' и '''\bitbox''', которые формируют поля, занимающие всю ширину таблицы или только часть её, соответственно:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 \wordbox[«рамка»]{«число строк»}{«текст»}&lt;br /&gt;
 \bitbox[«рамка»]{«число занимаемых битов»}{«текст»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необязательный параметр «рамка» позволяет сформировать обрамление для текущего битового поля. Значение по умолчанию ['''lrtb'''] означает, что рамка рисуется со всех сторон поля: '''l''' – слева, '''r''' – справа, '''t''' – сверху и '''b''' – снизу. Строки разделяются двойной обратной чертой '''\\'''.&lt;br /&gt;
&lt;br /&gt;
Формат пакета сетевого протокола UDP можно описать примерно&lt;br /&gt;
следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 \begin{bytefield}{32}&lt;br /&gt;
 \bitheader{0,15,16,31}\\&lt;br /&gt;
 \wordgroupr{Заголовок}&lt;br /&gt;
 \bitbox{16}{Порт отправителя}\bitbox{16}{Порт получателя}\\&lt;br /&gt;
 \bitbox{16}{Размер}\bitbox{16}{Контрольная сумма}&lt;br /&gt;
 \endwordgroupr\\&lt;br /&gt;
 \wordbox[lrt]{1}{Данные}\\&lt;br /&gt;
 \skippedwords\\&lt;br /&gt;
 \wordbox[lrb]{1}{до 65{.}527 байт}&lt;br /&gt;
 \end{bytefield}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex06.png|Формат пакета UDP]]&lt;br /&gt;
&lt;br /&gt;
Кроме уже упомянутых команд создания полей при описании формата UDP использовалась команда нумерации столбцов '''\bitheader''',&lt;br /&gt;
конструкция для создания группы '''\wordgroupr''' и макрос '''\skippedwords'''&lt;br /&gt;
для формирования «разрыва».&lt;br /&gt;
&lt;br /&gt;
В качестве обязательного аргумента команде '''\bitheader''' передаётся список нумеруемых битов, при этом можно передавать диапазоны чисел, например, {0-31}. В пакете определены два окружения для&lt;br /&gt;
группировки битовых полей, '''\wordgroupr''' и '''\wordgroupl''' – отличие этих&lt;br /&gt;
команд в том, что для первой заголовок группы вводится справа, а для&lt;br /&gt;
второй – слева. Для более подробной информации следует обратиться&lt;br /&gt;
к документации пакета.&lt;br /&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;
&lt;br /&gt;
===verbatim===&lt;br /&gt;
&lt;br /&gt;
Самый простой способ включить код в текст – это заключить его в&lt;br /&gt;
стандартное окружение '''verbatim''', которое просто выводит данный текст&lt;br /&gt;
на печать с отступами пользователя. При этом исчезает возможность&lt;br /&gt;
делать акценты в избранных местах.&lt;br /&gt;
&lt;br /&gt;
Небольшие вставки можно делать с помощью команды '''\verb!текст!'''.&lt;br /&gt;
Сразу после '''\verb''' должен идти группирующий символ (в данном случае, «'''!'''»), который указывает окончание действия команды. Группирующий символ может быть любым, кроме пробела или звёздочки «'''*'''».&lt;br /&gt;
&lt;br /&gt;
Пакет '''verbatim''' из коллекции '''tools''' переопределяет стандартную команду так, что внутри окружения можно вставлять тексты неограниченного размера. Кроме этого, пакет предоставляет команду&lt;br /&gt;
'''\verbatiminput''', которой в качестве основного аргумента можно передать имя внешнего файла.&lt;br /&gt;
&lt;br /&gt;
Кроме упомянутых окружения и макросов определены такие же, но&lt;br /&gt;
со звёздочкой в конце имени, то есть окружение '''verbatim*''' и команды&lt;br /&gt;
'''\verb*''' и '''\verbatiminput*'''. '''*'''-форма отличается от базовой тем, что все&lt;br /&gt;
пробелы визуализируются.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex07.png|LXF88_latex07.png]]&lt;br /&gt;
&lt;br /&gt;
Стандартный пакет '''alltt''' – это почти то же самое, что и '''verbatim''',&lt;br /&gt;
но с возможностью использовать внутри окружения команды ''LaTeX''.&lt;br /&gt;
Правда, шрифт в любом случае остаётся фиксированной ширины, как&lt;br /&gt;
для печатной машинки.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex08.png|LXF88_latex08.png]]&lt;br /&gt;
&lt;br /&gt;
Гораздо более разнообразные средства управления выводом&lt;br /&gt;
неформатированного текста предоставляет пакет ''fancyvrb''. За подробной информацией следует обратиться к документации пакета.&lt;br /&gt;
&lt;br /&gt;
===listings===&lt;br /&gt;
&lt;br /&gt;
Пакет '''listings''' специализируется на оформлении программного кода. К&lt;br /&gt;
пакету прилагается подробнейшая документация (''Следует поискать файл listings.pdf.''). С помощью команд&lt;br /&gt;
пакета можно включить как небольшие кусочки кода, так и целые его&lt;br /&gt;
сегменты, ну и, естественно, файлы.&lt;br /&gt;
&lt;br /&gt;
Для загрузки пакета '''listings''' необходимо добавить в заголовок следующие инструкции:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex09.png|LXF88_latex09.png]]&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=Языки программирования&lt;br /&gt;
|Содержание=Текущая версия пакета 1.3c поддерживает следующие языки (в скобках указаны диалекты):&lt;br /&gt;
ABAP, ACSL, Ada (83, 95), Algol (60, 68), Ant, Assembler (x86masm), Awk (gnu, POSIX), bash, Basic&lt;br /&gt;
(Visual), C (ANSI, Handel, Objective, Sharp), C++ (ANSI, GNU, ISO, Visual), Caml (light, Objective),&lt;br /&gt;
Clean, Cobol (1974, 1985, ibm) Comal 80, csh, Delphi, Eiffel, Elan, erlang, Euphoria, Fortran (77, 90,&lt;br /&gt;
95), GCL, Gnuplot, Haskell, HTML, IDL (empty, CORBA), inform, Java (empty, AspectJ), JVMIS, ksh,&lt;br /&gt;
Lisp (empty, Auto), Logo, make (empty, gnu), Mathematica (1.0, 3.0), Matlab, Mercury, MetaPost,&lt;br /&gt;
Miranda, Mizar, ML, Modula-2, MuPAD, NASTRAN, Oberon-2, OCL (decorative, OMG), Octave, Oz,&lt;br /&gt;
Pascal (Borland6, Standard, XSC), Perl, PHP, PL/I, Plasm, POV, Prolog, Promela, Python, R, Reduce,&lt;br /&gt;
Rexx, RSL, Ruby, S (empty, PLUS), SAS, Scilab, sh, SHELXL, Simula (67, CII, DEC, IBM), SQL, tcl&lt;br /&gt;
(empty, tk), TeX (AlLaTeX, common, LaTeX, plain, primitive), VBScript, Verilog, VHDL (empty, AMS),&lt;br /&gt;
VRML (97), XML, XSLT.&lt;br /&gt;
|Ширина=300px&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Сразу после загрузки пакета рекомендуется «подгрузить» используемые в тексте языки программирования (см. врезку) с помощью макроса&lt;br /&gt;
'''\lstloadlanguages'''. В квадратных скобочках перед названием языка&lt;br /&gt;
можно указать желательный диалект.&lt;br /&gt;
&lt;br /&gt;
Команда '''\lstset''' позволяет устанавливать значения по умолчанию.&lt;br /&gt;
Некоторые из полезных умолчаний перечислены ниже:&lt;br /&gt;
* Для того, чтобы можно было печатать кириллицу, например в комментариях, следует определить переменную '''extendedchars=true''' (''Если это не сработает, то необходимо обновить пакет до последней версии или сменить дистрибутив LaTeX на более подходящий'').&lt;br /&gt;
* Опция '''escapechar''' позволяет при наборе кода пользоваться услугами ''LaTeX'' напрямую. Всё, что находится между выбранными символами, обрабатывается средствами '''LaTeX'''. Естественно, если выбранный символ (в данном случае «'''|'''») используется в отображаемом языке, то могут возникнуть проблемы при компиляции. Для того, чтобы обнулить '''escapechar''', достаточно ничего не писать за знаком равно при следующем переопределении.&lt;br /&gt;
* Инструкция '''frame=&amp;lt;POSITION&amp;gt;''' позволяет рисовать рамку вокруг сегмента кода. На вход принимаются буквы '''t''' – обрамление сверху, '''b''' – снизу, '''l''' и '''r''' – слева и справа, соответственно. В случае '''frame=trbl''' будет&lt;br /&gt;
нарисована простейшая одинарная рамка. Опция '''frame=''' эквивалентна отказу от обрамления. Если вместо прописных букв указать заглавные '''frame=TRBL''', то рамка будет двойная. В пакете есть возможность сделать рамки посложнее.&lt;br /&gt;
&lt;br /&gt;
Все команды, определённые в пакете '''listings''', начинаются с префикса '''lst'''. Команда для включения небольших кусочков кода '''\lstinline!код!''' аналогична по действию команде '''\verb!текст!'''.&lt;br /&gt;
&lt;br /&gt;
Сегмент кода оформляется с помощью окружения '''lstlisting''':&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex10.png|LXF88_latex10.png]]&lt;br /&gt;
&lt;br /&gt;
Необязательный параметр может принимать опции, специфичные&lt;br /&gt;
для оформления этого куска кода. Например, опция '''language''' позволяет установить язык программирования отличный от выбранного по умолчанию, а '''caption''' создаёт подпись к фрагменту кода.&lt;br /&gt;
&lt;br /&gt;
Файлы можно включать с помощью команды '''\lstinputlisting''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
%установка значений по умолчанию&lt;br /&gt;
 \lstset{numbers=left, language=MetaPost,&lt;br /&gt;
       backgroundcolor=\color{yellow},&lt;br /&gt;
       frame=shadowbox, rulesepcolor=\color{black}}&lt;br /&gt;
%вставка файла&lt;br /&gt;
 \lstinputlisting[firstline=16, lastline=24,&lt;br /&gt;
   emph={forsuffixes,text,bpath},emphstyle={\color{red}},&lt;br /&gt;
   emph={[2]fill,unfill},emphstyle={[2]\bfseries\underbar},&lt;br /&gt;
 ]{intro.mp}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex11.png|LXF88_latex11.png]]&lt;br /&gt;
&lt;br /&gt;
С помощью опций '''firstline''' и '''secondline''' можно указать диапазон&lt;br /&gt;
строк, который следует вывести. В зависимости от выбора языка форматирование существенно меняется. Инструкция '''numbers=left''' нумерует&lt;br /&gt;
строки слева.&lt;br /&gt;
&lt;br /&gt;
Для работы с цветами лучше загрузить уже упоминавшийся&lt;br /&gt;
ранее пакет '''color'''. Цвета хороши для выделения каких-то ключевых слов и подложки, за которую отвечает опция '''backgroundcolor'''.&lt;br /&gt;
Возможности для определения своих «словариков» предоставляет&lt;br /&gt;
опции '''emph=&amp;lt;список ключевых слов&amp;gt;'''. В начале списка может идти&lt;br /&gt;
его метка в квадратных скобках, таким образом, можно поддерживать&lt;br /&gt;
несколько списков одновременно. С помощью опции '''emphstyle''' можно&lt;br /&gt;
определить способ выделения ключевых слов.&lt;br /&gt;
&lt;br /&gt;
Обычно код располагается прямо по месту основного текста, так как&lt;br /&gt;
обсуждение «исходников» можно производить в самом коде, благо есть&lt;br /&gt;
комментарии. При желании можно воспользоваться опцией '''float''', чтобы&lt;br /&gt;
из фрагмента кода получился полноценный «плавающий» объект.&lt;br /&gt;
&lt;br /&gt;
Пакет поддерживает свыше сотни распространённых языков программирования и разметки (с учётом диалектов), так что вам, скорее всего, не придётся определять свой язык с помощью инструкции&lt;br /&gt;
'''\lstdefinelanguage'''. Но если очень хочется, то и это возможно.&lt;br /&gt;
&lt;br /&gt;
==Представление алгоритмов==&lt;br /&gt;
&lt;br /&gt;
Собственно говоря, это именно то, ради чего Д.Э. Кнут и создал ''TeX''.&lt;br /&gt;
Поэтому пакеты для облегчения записи алгоритмов в ''LaTeX'' существовали с самого его рождения. На текущий момент, даже число стандартных пакетов, подпадающих под эту тематику, больше десятка. Здесь&lt;br /&gt;
рассмотрена только малая часть из них.&lt;br /&gt;
&lt;br /&gt;
===algorithm===&lt;br /&gt;
&lt;br /&gt;
Пакет '''algorithm''' ориентирован на описание алгоритмов, а не на представление кода. Это позволяет отрешиться от форматирования и сосредоточиться на основной задаче. Пакет определяет окружение '''algorithmic'''. Для&lt;br /&gt;
использования в преамбуле следует загрузить одноимённый стиль.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex12.png|Пример использования пакета ''algorithm'']]&lt;br /&gt;
&lt;br /&gt;
Если необязательный аргумент определён, то осуществляется&lt;br /&gt;
нумерация строк. Если аргумент равен 1, то нумеруются все строки,&lt;br /&gt;
если 2 – то каждая вторая, а далее по индукции.&lt;br /&gt;
&lt;br /&gt;
Команда '''\STATE''' определяет простое утверждение. Условный оператор представлен командами '''\IF{&amp;lt;условие&amp;gt;}''', '''\ELSIF{&amp;lt;условие&amp;gt;}''',''' \ELSE''' и '''\ENDIF'''. Циклы представлены операторами '''\FOR''' и '''\FORALL''', которые закрываются командой '''\ENDFOR'''. Аналогично присутствуют пары&lt;br /&gt;
'''\WHILE{&amp;lt;условие&amp;gt;}''' – '''\ENDWHILE''', '''\REPEAT''' – '''\UNTILL{&amp;lt;условие&amp;gt;}''' и бесконечный цикл '''\LOOP''' – '''\ENDLOOP'''. Кроме уже перечисленных конструкций определены предварительное условие для корректного выполнение алгоритма '''\REQUIRE''', постусловие, которое должно выполняться&lt;br /&gt;
при корректной работе алгоритма, '''\ENSURE''', возвращение результата&lt;br /&gt;
'''\RETURN''', промежуточная печать '''\PRINT''' и комментарий '''\COMMENT'''.&lt;br /&gt;
&lt;br /&gt;
Собственно говоря, всё. Псевдокод автоматически разбивается на&lt;br /&gt;
строки и форматируется в соответствии с общепринятыми представлениями. Очевидно также, что навыки набора математики будут здесь очень кстати. Подробности по настройке пакета следует выяснять в&lt;br /&gt;
документации к нему: '''algorithms.pdf'''.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы сделать из объекта '''algorithmic''' «плавающий объект» можно воспользоваться окружением '''algorithm''', для его использования следует загрузить одноимённый стиль в преамбуле. Внутри&lt;br /&gt;
'''algorithm''' можно использовать команды '''\caption''' и '''\label'''.&lt;br /&gt;
&lt;br /&gt;
===Клоны algorithms===&lt;br /&gt;
&lt;br /&gt;
С использованием имеющихся наработок пакета '''algorithms''' был создан&lt;br /&gt;
'''algorithmicx'''. Этот пакет предоставляет более расширенный набор&lt;br /&gt;
команд. Кроме того, пользователю предоставляются команды, с помощью которых можно формировать свои алгоритмические конструкции.&lt;br /&gt;
&lt;br /&gt;
Автор также предоставил вариант форматирования отступов, принятый в ''Pascal'', что позволяет относительно легко приводить программы на этом языке к виду, годному для красивой распечатки. Пакет работает с теми же окружениями, что используюся в пакете '''algorithms'''. Это&lt;br /&gt;
приводит к их несовместимости.&lt;br /&gt;
&lt;br /&gt;
Решение схожей функциональности предоставляет пакет '''algorithm2e'''.&lt;br /&gt;
Форматирование ''C''-подобно. Предоставлен избыточный набор конструкций и возможность самому создавать новые структуры. Есть зачатки локализации. Пакет использует окружение '''algorithm''', Это приводит к&lt;br /&gt;
несовместимости как с пакетом '''algorithms''', так и с пакетом '''algorithimcx'''.&lt;br /&gt;
&lt;br /&gt;
===clrscode===&lt;br /&gt;
&lt;br /&gt;
Пакет '''clrscode''' представляет возможность набирать псевдокод, как&lt;br /&gt;
это делали авторы книги «Алгоритмы: построение и анализ» Томас Х.&lt;br /&gt;
Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест и Клиффорд Штайн (''Introduction to algorithms, Second Edition. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein.'').&lt;br /&gt;
Для работы с пакетом необходимо загрузить одноимённый стиль. Это&lt;br /&gt;
прекрасный пример того, как можно адаптировать ''LaTeX'' для создания&lt;br /&gt;
книг по программированию.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex13.png|Пример использования пакета ''clrscode''.]]&lt;br /&gt;
&lt;br /&gt;
===pseudocode===&lt;br /&gt;
&lt;br /&gt;
Профессора Дональд Л. Крехер [Donald L. Kreher] и Дуглас Р. Стинсон&lt;br /&gt;
[Douglas R. Stinson] написали книгу «''Combinatorial Algorithms: Generation, Enumeration and Search''». Специально для представления псевдокода в этой книге они создали пакет, который так и назвали:&lt;br /&gt;
'''pseudocode'''. Дональд Л. Крехер использовал одноимённое окружение и&lt;br /&gt;
в своей следующей книге по алгоритмам, выпущенной уже в 2005 году.&lt;br /&gt;
Пакет поддерживается до сих пор.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex13.png|Пример использования пакета ''pseudocode''.]]&lt;br /&gt;
&lt;br /&gt;
К сожалению, в книгах по ''LaTeX'' редко рассматриваются структуры,&lt;br /&gt;
полезные для представления программных текстов или псевдокода.&lt;br /&gt;
Здесь я попытался восполнить этот зияющий пробел. Тема настолько&lt;br /&gt;
обширна, что разрабатывать её можно почти бесконечно. ''LaTeX'' сам по&lt;br /&gt;
себе код, поэтому программистам, по идее, должно быть уютно в его&lt;br /&gt;
окружении. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
==LaTeX и контроль версий==&lt;br /&gt;
&lt;br /&gt;
Исходный текст ''LaTeX'' тоже представляет&lt;br /&gt;
собой код. И как всякий код, он достоин жить&lt;br /&gt;
в системе контроля версий. Часто бывает&lt;br /&gt;
любопытно узнать текущую версию документа&lt;br /&gt;
и время его последнего обновления. Если в&lt;br /&gt;
качестве системы контроля версий используется ''Subversion'', то для начала следует загрузить пакет '''svn'''.&lt;br /&gt;
&lt;br /&gt;
 \usepackage{svn}&lt;br /&gt;
 \SVN $Date$&lt;br /&gt;
 \SVN $Rev$&lt;br /&gt;
&lt;br /&gt;
При этом в текст следует добавить метки,&lt;br /&gt;
предваряемые командой '''\SVN'''. Для интерполяции меток в системе ''Subversion'' при обновлении файла следует выполнить команды вида:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; svn propset svn:keywords “Date Rev” «имя файла»&lt;br /&gt;
 &amp;gt; svn commit -m “интерполяция меток”&lt;br /&gt;
&lt;br /&gt;
При этом '''svn''' передаётся информация о том,&lt;br /&gt;
какие именно метки требуется обновлять при&lt;br /&gt;
выполнении '''commit'''. В данном случае, это метки '''Date''' и '''Rev''' — дата и номер ревизии, соответственно. Более подробную информацию можно получить с помощью команды&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; svn help propset&lt;br /&gt;
&lt;br /&gt;
Команда '''\SVN $Date$''' определяет команды&lt;br /&gt;
'''\SVNDate''' и '''\SVNTime''', ответственные за календарную дату и время. Все остальные команды&lt;br /&gt;
вида '''\SVN $Keyword$''', где '''Keyword''' — одна из&lt;br /&gt;
интерполируемых меток '''svn''', определяют&lt;br /&gt;
команды '''\SVNKeyword'''.&lt;br /&gt;
&lt;br /&gt;
После интерполяции метки будут выглядеть&lt;br /&gt;
примерно следующим образом (см. рисунок).&lt;br /&gt;
&lt;br /&gt;
Схожую функциональность предоставляет&lt;br /&gt;
пакет '''svninfo'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex15.png|LXF88_latex15.png]]&lt;/div&gt;</summary>
		<author><name>GArik</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF87-88:LaTeX</id>
		<title>LXF87-88:LaTeX</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF87-88:LaTeX"/>
				<updated>2009-10-28T23:12:03Z</updated>
		
		<summary type="html">&lt;p&gt;GArik: Косметическая правка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Учебники]]&lt;br /&gt;
&lt;br /&gt;
: '''Компьютерные TeXнологии''' Учимся использовать культовую систему вёрстки&lt;br /&gt;
&lt;br /&gt;
=Документация и программный код=&lt;br /&gt;
&lt;br /&gt;
{{Цикл/LaTeX}}&lt;br /&gt;
&lt;br /&gt;
: '''ЧАСТЬ 4:''' ''TeX'', как известно, был создан для представления кода и алгоритмов. Так постигайте же замысел создателя и его последователей вместе с '''Евгением Балдиным'''!&lt;br /&gt;
&lt;br /&gt;
::::''+++ Ошибка Деления На Огурец.''&lt;br /&gt;
::::''Переустановите Вселенную И Перезагрузитесь +++''&lt;br /&gt;
::::''Так зависает Гекс.''&lt;br /&gt;
::::::::''Источник: «Санта-Хрякус» от Терри Пратчетта''&lt;br /&gt;
&lt;br /&gt;
Программирование под Linux – вполне естественное занятие.&lt;br /&gt;
Написание документации – неотъемлемая часть этого процесса. ''LaTeX'' достоин быть включённым в технологическую&lt;br /&gt;
цепочку по выпуску программного продукта.&lt;br /&gt;
&lt;br /&gt;
Если вспомнить историю, то Д.Э. Кнут создал ''TeX'' именно для целей&lt;br /&gt;
представления кода и алгоритмов в своём глобальном пятитомнике&lt;br /&gt;
«Искусство программирования».&lt;br /&gt;
&lt;br /&gt;
==Спецсредства==&lt;br /&gt;
&lt;br /&gt;
Чтобы украсить инструкцию, надо добавлять в неё «пятна».&lt;br /&gt;
Злоупотреблять этим не стоит, но пару мыслей выделить вполне реально. Упомянутые ниже приёмы – далеко не всё, что может предложить ''LaTeX'': это просто демонстрация возможностей.&lt;br /&gt;
&lt;br /&gt;
===keystroke===&lt;br /&gt;
&lt;br /&gt;
Иногда в тексте необходимы фразы вида: «Для выхода из программы&lt;br /&gt;
нужно нажать клавишу Esc.» Макрос '''\keystroke''', определённый в одноимённом пакете '''keystroke''', позволяет выделить название клавиши, примерно следующим образом:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex01.png|LXF88_latex01.png]]&lt;br /&gt;
&lt;br /&gt;
В пакете определены многие клавиши, имеющиеся на стандартной&lt;br /&gt;
клавиатуре. Пакет очень прост и имеет зачатки интернационализации –&lt;br /&gt;
его легко адаптировать под свои нужды.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex02.png|Клавиши, определенные в keystroke]]&lt;br /&gt;
&lt;br /&gt;
===LCD-дисплей===&lt;br /&gt;
&lt;br /&gt;
LCD-дисплеи сейчас встроены даже в кофемолки. Они легко узнаваемы, поэтому нет необходимости копировать их вид в документацию&lt;br /&gt;
с помощью фотографий – достаточно нарисовать что-то похожее.&lt;br /&gt;
Изобразить вид дисплея можно с помощью пакета '''lcd'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex03.png|LXF88_latex03.png]]&lt;br /&gt;
&lt;br /&gt;
Для определения цветов используется макрос '''\definecolor''' из пакета '''color'''. Команда '''\LCDcolors''' формирует цвет букв и фона, а макрос '''\textLCD''' выводит LCD-подобный текст на экран. '''\textLCD''' понимает&lt;br /&gt;
стандартные команды изменения размера шрифта, поэтому его можно&lt;br /&gt;
использовать совместно с обычным текстом внутри абзаца.&lt;br /&gt;
&lt;br /&gt;
По умолчанию определены только латинские буквы, цифры и некоторые из стандартных символов. Для определения других символов&lt;br /&gt;
можно воспользоваться макросом '''\DefineLCDchar'''. Макросу передаётся&lt;br /&gt;
имя символа и битовая маска, определяющая картинку 5x7 точек. Имя&lt;br /&gt;
символа может быть однобуквенным, тогда соответствующая буква&lt;br /&gt;
замещается новым рисунком, или многобуквенным, тогда созданный&lt;br /&gt;
рисунок кодируется указанным словом в фигурных скобках. Другие&lt;br /&gt;
размеры матрицы в пакете отсутствуют, но при желании его вполне&lt;br /&gt;
можно доработать.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex04.png|Определяем Ё для LCD]]&lt;br /&gt;
&lt;br /&gt;
Для эмуляции дисплея используется команда '''\LCD'''. В качестве обязательных параметров ей передаётся число строк и число столбцов, за которыми следует содержание строк, разделённых каким-то разделителем. В приведённом примере в качестве разделителя используется&lt;br /&gt;
вертикальная черта, но на её месте мог бы быть любой символ:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex05.png|LXF88_latex05.png]]&lt;br /&gt;
&lt;br /&gt;
===Битовые поля===&lt;br /&gt;
&lt;br /&gt;
Для описания сетевых протоколов, а так же для бинарных форматов&lt;br /&gt;
данных удобнее всего представить последовательность битов графически, то есть в виде таблицы. Это специализация пакета '''bytefield'''. В пакете определено одноимённое окружение '''bytefield''', в качестве обязательного аргумента которому передаётся ширина таблицы в битах:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 \begin{bytefield}{«битовая ширина поля»}&lt;br /&gt;
   «битовые поля»&lt;br /&gt;
 \end{bytefield}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В окружении '''bytefield''' работают команды '''\wordbox''' и '''\bitbox''', которые формируют поля, занимающие всю ширину таблицы или только часть её, соответственно:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 \wordbox[«рамка»]{«число строк»}{«текст»}&lt;br /&gt;
 \bitbox[«рамка»]{«число занимаемых битов»}{«текст»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необязательный параметр «рамка» позволяет сформировать обрамление для текущего битового поля. Значение по умолчанию ['''lrtb'''] означает, что рамка рисуется со всех сторон поля: '''l''' – слева, '''r''' – справа, '''t''' – сверху и '''b''' – снизу. Строки разделяются двойной обратной чертой '''\\'''.&lt;br /&gt;
&lt;br /&gt;
Формат пакета сетевого протокола UDP можно описать примерно&lt;br /&gt;
следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 \begin{bytefield}{32}&lt;br /&gt;
 \bitheader{0,15,16,31}\\&lt;br /&gt;
 \wordgroupr{Заголовок}&lt;br /&gt;
 \bitbox{16}{Порт отправителя}\bitbox{16}{Порт получателя}\\&lt;br /&gt;
 \bitbox{16}{Размер}\bitbox{16}{Контрольная сумма}&lt;br /&gt;
 \endwordgroupr\\&lt;br /&gt;
 \wordbox[lrt]{1}{Данные}\\&lt;br /&gt;
 \skippedwords\\&lt;br /&gt;
 \wordbox[lrb]{1}{до 65{.}527 байт}&lt;br /&gt;
 \end{bytefield}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex06.png|Формат пакета UDP]]&lt;br /&gt;
&lt;br /&gt;
Кроме уже упомянутых команд создания полей при описании формата UDP использовалась команда нумерации столбцов '''\bitheader''',&lt;br /&gt;
конструкция для создания группы '''\wordgroupr''' и макрос '''\skippedwords'''&lt;br /&gt;
для формирования «разрыва».&lt;br /&gt;
&lt;br /&gt;
В качестве обязательного аргумента команде '''\bitheader''' передаётся список нумеруемых битов, при этом можно передавать диапазоны чисел, например, {0-31}. В пакете определены два окружения для&lt;br /&gt;
группировки битовых полей, '''\wordgroupr''' и '''\wordgroupl''' – отличие этих&lt;br /&gt;
команд в том, что для первой заголовок группы вводится справа, а для&lt;br /&gt;
второй – слева. Для более подробной информации следует обратиться&lt;br /&gt;
к документации пакета.&lt;br /&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;
&lt;br /&gt;
===verbatim===&lt;br /&gt;
&lt;br /&gt;
Самый простой способ включить код в текст – это заключить его в&lt;br /&gt;
стандартное окружение '''verbatim''', которое просто выводит данный текст&lt;br /&gt;
на печать с отступами пользователя. При этом исчезает возможность&lt;br /&gt;
делать акценты в избранных местах.&lt;br /&gt;
&lt;br /&gt;
Небольшие вставки можно делать с помощью команды '''\verb!текст!'''.&lt;br /&gt;
Сразу после '''\verb''' должен идти группирующий символ (в данном случае, «'''!'''»), который указывает окончание действия команды. Группирующий символ может быть любым, кроме пробела или звёздочки «'''*'''».&lt;br /&gt;
&lt;br /&gt;
Пакет '''verbatim''' из коллекции '''tools''' переопределяет стандартную команду так, что внутри окружения можно вставлять тексты неограниченного размера. Кроме этого, пакет предоставляет команду&lt;br /&gt;
'''\verbatiminput''', которой в качестве основного аргумента можно передать имя внешнего файла.&lt;br /&gt;
&lt;br /&gt;
Кроме упомянутых окружения и макросов определены такие же, но&lt;br /&gt;
со звёздочкой в конце имени, то есть окружение '''verbatim*''' и команды&lt;br /&gt;
'''\verb*''' и '''\verbatiminput*'''. '''*'''-форма отличается от базовой тем, что все&lt;br /&gt;
пробелы визуализируются.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex07.png|LXF88_latex07.png]]&lt;br /&gt;
&lt;br /&gt;
Стандартный пакет '''alltt''' – это почти то же самое, что и '''verbatim''',&lt;br /&gt;
но с возможностью использовать внутри окружения команды ''LaTeX''.&lt;br /&gt;
Правда, шрифт в любом случае остаётся фиксированной ширины, как&lt;br /&gt;
для печатной машинки.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex08.png|LXF88_latex08.png]]&lt;br /&gt;
&lt;br /&gt;
Гораздо более разнообразные средства управления выводом&lt;br /&gt;
неформатированного текста предоставляет пакет ''fancyvrb''. За подробной информацией следует обратиться к документации пакета.&lt;br /&gt;
&lt;br /&gt;
===listings===&lt;br /&gt;
&lt;br /&gt;
Пакет '''listings''' специализируется на оформлении программного кода. К&lt;br /&gt;
пакету прилагается подробнейшая документация (''Следует поискать файл listings.pdf.''). С помощью команд&lt;br /&gt;
пакета можно включить как небольшие кусочки кода, так и целые его&lt;br /&gt;
сегменты, ну и, естественно, файлы.&lt;br /&gt;
&lt;br /&gt;
Для загрузки пакета '''listings''' необходимо добавить в заголовок следующие инструкции:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex09.png|LXF88_latex09.png]]&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=Языки программирования&lt;br /&gt;
|Содержание=Текущая версия пакета 1.3c поддерживает следующие языки (в скобках указаны диалекты):&lt;br /&gt;
ABAP, ACSL, Ada (83, 95), Algol (60, 68), Ant, Assembler (x86masm), Awk (gnu, POSIX), bash, Basic&lt;br /&gt;
(Visual), C (ANSI, Handel, Objective, Sharp), C++ (ANSI, GNU, ISO, Visual), Caml (light, Objective),&lt;br /&gt;
Clean, Cobol (1974, 1985, ibm) Comal 80, csh, Delphi, Eiffel, Elan, erlang, Euphoria, Fortran (77, 90,&lt;br /&gt;
95), GCL, Gnuplot, Haskell, HTML, IDL (empty, CORBA), inform, Java (empty, AspectJ), JVMIS, ksh,&lt;br /&gt;
Lisp (empty, Auto), Logo, make (empty, gnu), Mathematica (1.0, 3.0), Matlab, Mercury, MetaPost,&lt;br /&gt;
Miranda, Mizar, ML, Modula-2, MuPAD, NASTRAN, Oberon-2, OCL (decorative, OMG), Octave, Oz,&lt;br /&gt;
Pascal (Borland6, Standard, XSC), Perl, PHP, PL/I, Plasm, POV, Prolog, Promela, Python, R, Reduce,&lt;br /&gt;
Rexx, RSL, Ruby, S (empty, PLUS), SAS, Scilab, sh, SHELXL, Simula (67, CII, DEC, IBM), SQL, tcl&lt;br /&gt;
(empty, tk), TeX (AlLaTeX, common, LaTeX, plain, primitive), VBScript, Verilog, VHDL (empty, AMS),&lt;br /&gt;
VRML (97), XML, XSLT.&lt;br /&gt;
|Ширина=300px&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Сразу после загрузки пакета рекомендуется «подгрузить» используемые в тексте языки программирования (см. врезку) с помощью макроса&lt;br /&gt;
'''\lstloadlanguages'''. В квадратных скобочках перед названием языка&lt;br /&gt;
можно указать желательный диалект.&lt;br /&gt;
&lt;br /&gt;
Команда '''\lstset''' позволяет устанавливать значения по умолчанию.&lt;br /&gt;
Некоторые из полезных умолчаний перечислены ниже:&lt;br /&gt;
* Для того, чтобы можно было печатать кириллицу, например в комментариях, следует определить переменную '''extendedchars=true''' (''Если это не сработает, то необходимо обновить пакет до последней версии или сменить дис-&lt;br /&gt;
трибутив LaTeX на более подходящий'').&lt;br /&gt;
* Опция '''escapechar''' позволяет при наборе кода пользоваться услугами ''LaTeX'' напрямую. Всё, что находится между выбранными символами, обрабатывается средствами '''LaTeX'''. Естественно, если выбранный символ (в данном случае «'''|'''») используется в отображаемом языке, то могут возникнуть проблемы при компиляции. Для того, чтобы обнулить '''escapechar''', достаточно ничего не писать за знаком равно при следующем переопределении.&lt;br /&gt;
* Инструкция '''frame=&amp;lt;POSITION&amp;gt;''' позволяет рисовать рамку вокруг сегмента кода. На вход принимаются буквы '''t''' – обрамление сверху, '''b''' – снизу, '''l''' и '''r''' – слева и справа, соответственно. В случае '''frame=trbl''' будет&lt;br /&gt;
нарисована простейшая одинарная рамка. Опция '''frame=''' эквивалентна отказу от обрамления. Если вместо прописных букв указать заглавные '''frame=TRBL''', то рамка будет двойная. В пакете есть возможность сделать рамки посложнее.&lt;br /&gt;
&lt;br /&gt;
Все команды, определённые в пакете '''listings''', начинаются с префикса '''lst'''. Команда для включения небольших кусочков кода '''\lstinline!код!''' аналогична по действию команде '''\verb!текст!'''.&lt;br /&gt;
&lt;br /&gt;
Сегмент кода оформляется с помощью окружения '''lstlisting''':&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex10.png|LXF88_latex10.png]]&lt;br /&gt;
&lt;br /&gt;
Необязательный параметр может принимать опции, специфичные&lt;br /&gt;
для оформления этого куска кода. Например, опция '''language''' позволяет установить язык программирования отличный от выбранного по умолчанию, а '''caption''' создаёт подпись к фрагменту кода.&lt;br /&gt;
&lt;br /&gt;
Файлы можно включать с помощью команды '''\lstinputlisting''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
%установка значений по умолчанию&lt;br /&gt;
 \lstset{numbers=left, language=MetaPost,&lt;br /&gt;
       backgroundcolor=\color{yellow},&lt;br /&gt;
       frame=shadowbox, rulesepcolor=\color{black}}&lt;br /&gt;
%вставка файла&lt;br /&gt;
 \lstinputlisting[firstline=16, lastline=24,&lt;br /&gt;
   emph={forsuffixes,text,bpath},emphstyle={\color{red}},&lt;br /&gt;
   emph={[2]fill,unfill},emphstyle={[2]\bfseries\underbar},&lt;br /&gt;
 ]{intro.mp}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex11.png|LXF88_latex11.png]]&lt;br /&gt;
&lt;br /&gt;
С помощью опций '''firstline''' и '''secondline''' можно указать диапазон&lt;br /&gt;
строк, который следует вывести. В зависимости от выбора языка форматирование существенно меняется. Инструкция '''numbers=left''' нумерует&lt;br /&gt;
строки слева.&lt;br /&gt;
&lt;br /&gt;
Для работы с цветами лучше загрузить уже упоминавшийся&lt;br /&gt;
ранее пакет '''color'''. Цвета хороши для выделения каких-то ключевых слов и подложки, за которую отвечает опция '''backgroundcolor'''.&lt;br /&gt;
Возможности для определения своих «словариков» предоставляет&lt;br /&gt;
опции '''emph=&amp;lt;список ключевых слов&amp;gt;'''. В начале списка может идти&lt;br /&gt;
его метка в квадратных скобках, таким образом, можно поддерживать&lt;br /&gt;
несколько списков одновременно. С помощью опции '''emphstyle''' можно&lt;br /&gt;
определить способ выделения ключевых слов.&lt;br /&gt;
&lt;br /&gt;
Обычно код располагается прямо по месту основного текста, так как&lt;br /&gt;
обсуждение «исходников» можно производить в самом коде, благо есть&lt;br /&gt;
комментарии. При желании можно воспользоваться опцией '''float''', чтобы&lt;br /&gt;
из фрагмента кода получился полноценный «плавающий» объект.&lt;br /&gt;
&lt;br /&gt;
Пакет поддерживает свыше сотни распространённых языков программирования и разметки (с учётом диалектов), так что вам, скорее всего, не придётся определять свой язык с помощью инструкции&lt;br /&gt;
'''\lstdefinelanguage'''. Но если очень хочется, то и это возможно.&lt;br /&gt;
&lt;br /&gt;
==Представление алгоритмов==&lt;br /&gt;
&lt;br /&gt;
Собственно говоря, это именно то, ради чего Д.Э. Кнут и создал ''TeX''.&lt;br /&gt;
Поэтому пакеты для облегчения записи алгоритмов в ''LaTeX'' существовали с самого его рождения. На текущий момент, даже число стандартных пакетов, подпадающих под эту тематику, больше десятка. Здесь&lt;br /&gt;
рассмотрена только малая часть из них.&lt;br /&gt;
&lt;br /&gt;
===algorithm===&lt;br /&gt;
&lt;br /&gt;
Пакет '''algorithm''' ориентирован на описание алгоритмов, а не на представление кода. Это позволяет отрешиться от форматирования и сосредоточиться на основной задаче. Пакет определяет окружение '''algorithmic'''. Для&lt;br /&gt;
использования в преамбуле следует загрузить одноимённый стиль.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex12.png|Пример использования пакета ''algorithm'']]&lt;br /&gt;
&lt;br /&gt;
Если необязательный аргумент определён, то осуществляется&lt;br /&gt;
нумерация строк. Если аргумент равен 1, то нумеруются все строки,&lt;br /&gt;
если 2 – то каждая вторая, а далее по индукции.&lt;br /&gt;
&lt;br /&gt;
Команда '''\STATE''' определяет простое утверждение. Условный оператор представлен командами '''\IF{&amp;lt;условие&amp;gt;}''', '''\ELSIF{&amp;lt;условие&amp;gt;}''',''' \ELSE''' и '''\ENDIF'''. Циклы представлены операторами '''\FOR''' и '''\FORALL''', которые закрываются командой '''\ENDFOR'''. Аналогично присутствуют пары&lt;br /&gt;
'''\WHILE{&amp;lt;условие&amp;gt;}''' – '''\ENDWHILE''', '''\REPEAT''' – '''\UNTILL{&amp;lt;условие&amp;gt;}''' и бесконечный цикл '''\LOOP''' – '''\ENDLOOP'''. Кроме уже перечисленных конструкций определены предварительное условие для корректного выполнение алгоритма '''\REQUIRE''', постусловие, которое должно выполняться&lt;br /&gt;
при корректной работе алгоритма, '''\ENSURE''', возвращение результата&lt;br /&gt;
'''\RETURN''', промежуточная печать '''\PRINT''' и комментарий '''\COMMENT'''.&lt;br /&gt;
&lt;br /&gt;
Собственно говоря, всё. Псевдокод автоматически разбивается на&lt;br /&gt;
строки и форматируется в соответствии с общепринятыми представлениями. Очевидно также, что навыки набора математики будут здесь очень кстати. Подробности по настройке пакета следует выяснять в&lt;br /&gt;
документации к нему: '''algorithms.pdf'''.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы сделать из объекта '''algorithmic''' «плавающий объект» можно воспользоваться окружением '''algorithm''', для его использования следует загрузить одноимённый стиль в преамбуле. Внутри&lt;br /&gt;
'''algorithm''' можно использовать команды '''\caption''' и '''\label'''.&lt;br /&gt;
&lt;br /&gt;
===Клоны algorithms===&lt;br /&gt;
&lt;br /&gt;
С использованием имеющихся наработок пакета '''algorithms''' был создан&lt;br /&gt;
'''algorithmicx'''. Этот пакет предоставляет более расширенный набор&lt;br /&gt;
команд. Кроме того, пользователю предоставляются команды, с помощью которых можно формировать свои алгоритмические конструкции.&lt;br /&gt;
&lt;br /&gt;
Автор также предоставил вариант форматирования отступов, принятый в ''Pascal'', что позволяет относительно легко приводить программы на этом языке к виду, годному для красивой распечатки. Пакет работает с теми же окружениями, что используюся в пакете '''algorithms'''. Это&lt;br /&gt;
приводит к их несовместимости.&lt;br /&gt;
&lt;br /&gt;
Решение схожей функциональности предоставляет пакет '''algorithm2e'''.&lt;br /&gt;
Форматирование ''C''-подобно. Предоставлен избыточный набор конструкций и возможность самому создавать новые структуры. Есть зачатки локализации. Пакет использует окружение '''algorithm''', Это приводит к&lt;br /&gt;
несовместимости как с пакетом '''algorithms''', так и с пакетом '''algorithimcx'''.&lt;br /&gt;
&lt;br /&gt;
===clrscode===&lt;br /&gt;
&lt;br /&gt;
Пакет '''clrscode''' представляет возможность набирать псевдокод, как&lt;br /&gt;
это делали авторы книги «Алгоритмы: построение и анализ» Томас Х.&lt;br /&gt;
Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест и Клиффорд Штайн (''Introduction to algorithms, Second Edition. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein.'').&lt;br /&gt;
Для работы с пакетом необходимо загрузить одноимённый стиль. Это&lt;br /&gt;
прекрасный пример того, как можно адаптировать ''LaTeX'' для создания&lt;br /&gt;
книг по программированию.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex13.png|Пример использования пакета ''clrscode''.]]&lt;br /&gt;
&lt;br /&gt;
===pseudocode===&lt;br /&gt;
&lt;br /&gt;
Профессора Дональд Л. Крехер [Donald L. Kreher] и Дуглас Р. Стинсон&lt;br /&gt;
[Douglas R. Stinson] написали книгу «''Combinatorial Algorithms: Generation, Enumeration and Search''». Специально для представления псевдокода в этой книге они создали пакет, который так и назвали:&lt;br /&gt;
'''pseudocode'''. Дональд Л. Крехер использовал одноимённое окружение и&lt;br /&gt;
в своей следующей книге по алгоритмам, выпущенной уже в 2005 году.&lt;br /&gt;
Пакет поддерживается до сих пор.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex13.png|Пример использования пакета ''pseudocode''.]]&lt;br /&gt;
&lt;br /&gt;
К сожалению, в книгах по ''LaTeX'' редко рассматриваются структуры,&lt;br /&gt;
полезные для представления программных текстов или псевдокода.&lt;br /&gt;
Здесь я попытался восполнить этот зияющий пробел. Тема настолько&lt;br /&gt;
обширна, что разрабатывать её можно почти бесконечно. ''LaTeX'' сам по&lt;br /&gt;
себе код, поэтому программистам, по идее, должно быть уютно в его&lt;br /&gt;
окружении. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
==LaTeX и контроль версий==&lt;br /&gt;
&lt;br /&gt;
Исходный текст ''LaTeX'' тоже представляет&lt;br /&gt;
собой код. И как всякий код, он достоин жить&lt;br /&gt;
в системе контроля версий. Часто бывает&lt;br /&gt;
любопытно узнать текущую версию документа&lt;br /&gt;
и время его последнего обновления. Если в&lt;br /&gt;
качестве системы контроля версий используется ''Subversion'', то для начала следует загрузить пакет '''svn'''.&lt;br /&gt;
&lt;br /&gt;
 \usepackage{svn}&lt;br /&gt;
 \SVN $Date$&lt;br /&gt;
 \SVN $Rev$&lt;br /&gt;
&lt;br /&gt;
При этом в текст следует добавить метки,&lt;br /&gt;
предваряемые командой '''\SVN'''. Для интерполяции меток в системе ''Subversion'' при обновлении файла следует выполнить команды вида:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; svn propset svn:keywords “Date Rev” «имя файла»&lt;br /&gt;
 &amp;gt; svn commit -m “интерполяция меток”&lt;br /&gt;
&lt;br /&gt;
При этом '''svn''' передаётся информация о том,&lt;br /&gt;
какие именно метки требуется обновлять при&lt;br /&gt;
выполнении '''commit'''. В данном случае, это метки '''Date''' и '''Rev''' — дата и номер ревизии, соответственно. Более подробную информацию можно получить с помощью команды&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; svn help propset&lt;br /&gt;
&lt;br /&gt;
Команда '''\SVN $Date$''' определяет команды&lt;br /&gt;
'''\SVNDate''' и '''\SVNTime''', ответственные за календарную дату и время. Все остальные команды&lt;br /&gt;
вида '''\SVN $Keyword$''', где '''Keyword''' — одна из&lt;br /&gt;
интерполируемых меток '''svn''', определяют&lt;br /&gt;
команды '''\SVNKeyword'''.&lt;br /&gt;
&lt;br /&gt;
После интерполяции метки будут выглядеть&lt;br /&gt;
примерно следующим образом (см. рисунок).&lt;br /&gt;
&lt;br /&gt;
Схожую функциональность предоставляет&lt;br /&gt;
пакет '''svninfo'''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_latex15.png|LXF88_latex15.png]]&lt;/div&gt;</summary>
		<author><name>GArik</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/LXF92:LaTeX</id>
		<title>LXF92:LaTeX</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/LXF92:LaTeX"/>
				<updated>2009-10-28T23:06:27Z</updated>
		
		<summary type="html">&lt;p&gt;GArik: Косметическая правка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Учебники]]&lt;br /&gt;
: '''Компьютерные TeXнологии''' Учимся использовать культовую систему вёрстки&lt;br /&gt;
&lt;br /&gt;
{{Цикл/LaTeX}}&lt;br /&gt;
&lt;br /&gt;
==Справочно-поисковый аппарат издания==&lt;br /&gt;
&lt;br /&gt;
: '''ЧАСТЬ 9''' ''TeX'' создавался для верстки книг и сегодня '''Евгений Балдин''' рассмотрит всё то, без чего немыслимо серьезное  произведение – оглавление, предметный указатель, сноски и т.д..&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;
Для оформления разделов в основном используются команды секционирования: '''\section, \subsection, \subsubsection, \paragraph ''' и '''\subparagraph.'''&lt;br /&gt;
&lt;br /&gt;
Команды перечислены в порядке убывания значимости при рубрикации. Обычно любой сколько-нибудь сложный текст следует начинать&lt;br /&gt;
с планирования структуры, то есть создать шаблон, примерно следующего вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 \documentclass[a4paper,12pt]{ncc}&lt;br /&gt;
 \usepackage[warn]{mathtext}&lt;br /&gt;
 \usepackage[T2A]{fontenc}&lt;br /&gt;
 \usepackage[koi8-r]{inputenc}&lt;br /&gt;
 \usepackage[english,russian]{babel}&lt;br /&gt;
 \usepackage{indentfirst}&lt;br /&gt;
 \title{Пример рубрикации}&lt;br /&gt;
 \author{А.\,В.~Тор}&lt;br /&gt;
 \begin{document}&lt;br /&gt;
 \maketitle{}&lt;br /&gt;
 \tableofcontents{}&lt;br /&gt;
 \section{Раздел}&lt;br /&gt;
 \label{sec:section}&lt;br /&gt;
 Основной элемент рубрикации.&lt;br /&gt;
 \subsection{Подраздел}&lt;br /&gt;
 \label{sec:subsection}&lt;br /&gt;
 Вспомогательный элемент рубрикации.&lt;br /&gt;
 \subsubsection[Подподраздел]{Что-то более мелкое чем подраздел}&lt;br /&gt;
 \label{sec:subsubsection}&lt;br /&gt;
 Вспомогательный для вспомогательного. В содержании выводится&lt;br /&gt;
 краткая версия заголовка.&lt;br /&gt;
 \paragraph{Параграф}&lt;br /&gt;
 \label{sec:paragraph}&lt;br /&gt;
 Важный параграф.&lt;br /&gt;
 \subparagraph{Подпараграф}&lt;br /&gt;
 \label{sec:subparagraph}&lt;br /&gt;
 Параграф чуть менее важный.&lt;br /&gt;
 \section*{Раздел, отсутствующий в содержании}&lt;br /&gt;
 Всяко бывает. Иногда и такое нужно.&lt;br /&gt;
 \section*{Заключение}&lt;br /&gt;
 \label{sec:afterwords}&lt;br /&gt;
 \addcontentsline{toc}{section}{Заключение}&lt;br /&gt;
 Заключение, в отличие от, скажем, раздела~\ref{sec:subsection}&lt;br /&gt;
 на странице~\pageref{sec:subsection}, нумеровать не надо, но в&lt;br /&gt;
 содержании отразить необходимо.&lt;br /&gt;
 \appendix&lt;br /&gt;
 \section{Приложение}&lt;br /&gt;
 \label{appendix}&lt;br /&gt;
 \end{document}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF92_latex01.jpg|Пример рубрикации]]&lt;br /&gt;
&lt;br /&gt;
'''Пример рубрикации и оглавления.'''&lt;br /&gt;
&lt;br /&gt;
Результат компиляции кода представлен на иллюстрации. Кроме&lt;br /&gt;
самих заголовков разделов, созданных с помощью команд секционирования, в начале документа создаётся оглавление. За это отвечает команда '''\tableofcontents'''. При каждой компиляции информация о разделах собирается в файле с тем же именем, что и у tex-файла, но с расширением '''toc'''. При следующей компиляции обновлённая информация&lt;br /&gt;
о разделах используется для создания оглавления.&lt;br /&gt;
&lt;br /&gt;
Уровень, до которого информация отображается в оглавлении, можно поменять, изменив значение переменной '''tocdepth''', например, так:&lt;br /&gt;
&lt;br /&gt;
 \setcounter{tocdepth}{2}&lt;br /&gt;
&lt;br /&gt;
В этом случае будет показана информация о разделах вплоть до&lt;br /&gt;
второго уровня. Раздел типа '''\section''' соответствует первому уровню&lt;br /&gt;
секционирования, '''\subsection''' – второму, и так далее.&lt;br /&gt;
&lt;br /&gt;
Кроме оглавления, можно вывести список иллюстраций '''\listoffigures'''&lt;br /&gt;
и таблиц '''\listoftables'''. Информация об иллюстрациях и таблицах автоматически собирается в файлах с расширениями '''.lof''' и '''.lot'''.&lt;br /&gt;
&lt;br /&gt;
Для добавления какой-то информации в оглавление в обход&lt;br /&gt;
команд секционирования можно воспользоваться командой&lt;br /&gt;
&lt;br /&gt;
 \addcontentsline{toc}{«уровень раздела»}{«строка в оглавлении»}&lt;br /&gt;
&lt;br /&gt;
У этой команды три аргумента. Первый аргумент соответствует&lt;br /&gt;
расширению файла ('''.toc, .lof''' или '''.lot'''), в который добавляется «строка&lt;br /&gt;
в оглавлении». Уровень раздела определяется именами команд секционирования, то есть '''section, subsection''' и так далее. Команды ''LaTeX'' при передаче в файлы списков следует защищать командой '''\protect''', дабы&lt;br /&gt;
избежать проблемы с «хрупкими» инструкциями.&lt;br /&gt;
&lt;br /&gt;
Команда '''\appendix''' отделяет приложение от основного текста. После&lt;br /&gt;
её вызова правила нумерация разделов изменяется. '''\appendix''' тоже&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;
'''\label'''. Метка представляет собой последовательность ASCII-символов.&lt;br /&gt;
Префикс '''sec:''' автоматически добавляется AUCTeX во время вставки&lt;br /&gt;
метки при редактировании tex-файла в ''Emacs''. Этот префикс существует исключительно для удобства автора, так что можно обойтись без&lt;br /&gt;
него. При компиляции документа информация о имеющихся метках&lt;br /&gt;
добавляется в файл с расширением '''.aux'''. Для того, чтобы извлечь эту&lt;br /&gt;
информацию, то есть номер раздела (команда '''\ref''') или номер страницы ('''\pageref'''), необходимо пропустить текст через ''LaTeX'' ещё раз.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы можно было сослаться на внешний документ, следует воспользоваться пакетом ''xr''. В этом случае в преамбуле необходимо добавить примерно такие инструкции:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 \usepackage{xr}&lt;br /&gt;
 \externaldocument[EXT-]{externaldoc}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это позволяет получить доступ к меткам файла '''externaldoc.tex'''.&lt;br /&gt;
Обращение к меткам, как и обычно, осуществляется помощью команд&lt;br /&gt;
'''\ref/\pageref''', только перед именем метки добавляется префикс '''EXT-'''.&lt;br /&gt;
Можно обойтись и без префикса, так как этот параметр является опциональным, но в этом случае повышается вероятность конфликта из-за существования одинаковых меток.&lt;br /&gt;
&lt;br /&gt;
Ссылаться можно не только на разделы. Метки внутри нумерованных окружений, типа '''equation''' (выключенные математические формулы1) или '''theorem''' (теоремы), принимают их номер. Это так же касается&lt;br /&gt;
рисунков (окружение '''figure''') и таблиц (окружение '''tabular'''). В этом случае '''\label''' должна следовать сразу за командой '''\caption''', формирующей&lt;br /&gt;
подпись к плавающему объекту.&lt;br /&gt;
&lt;br /&gt;
Общего рецепта создания ссылок на электронные ресурсы нет.&lt;br /&gt;
Проще всего использовать команду '''\url''' из одноимённого пакета:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF92_latex02.png|LXF92_latex02.png]]&lt;br /&gt;
&lt;br /&gt;
В адресной строке должны отсутствовать символы '''%, #, ^,''' и она не&lt;br /&gt;
должна заканчиваться символом '''\'''. Если есть желание уйти и от этих&lt;br /&gt;
ограничений, то аналогично команде '''\verb''' инструкцию можно использовать и так: &amp;lt;code&amp;gt;\url!http://www.адрес.ru!&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В плане создания и управления гиперссылками также интересен&lt;br /&gt;
пакет ''hyperref'', который предоставляет схожую функциональность и&lt;br /&gt;
позволяет создавать гиперссылки в pdf-документах, но это уже совсем&lt;br /&gt;
другая история:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 %загрузка пакет hyperref&lt;br /&gt;
 \usepackage[unicode=true]{hyperref}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Подстрочные примечания====&lt;br /&gt;
&lt;br /&gt;
Подстрочное примечание формируется с помощью команды '''\footnote'''.&lt;br /&gt;
Правила оформления примечаний прописываются в определении&lt;br /&gt;
класса, и без особых на то причин менять их не стоит. Примечание,&lt;br /&gt;
если позволяет место, печатается на той же странице, где помещена&lt;br /&gt;
ссылка, и отделяется от текста разделительной линией.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF92_latex03.png|LXF92_latex03.png]]&lt;br /&gt;
&lt;br /&gt;
Примечание можно добавлять и внутри окружения '''minipage''', но тогда оно печатается внутри окружения:&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF92_latex04.png|LXF92_latex04.png]]&lt;br /&gt;
&lt;br /&gt;
Необязательный параметр '''\footnote''' позволяет присвоить примеча&lt;br /&gt;
нию значение по выбору пользователя.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы можно было сделать сноску внутри заголовка раз&lt;br /&gt;
дела, необходимо защитить инструкцию '''\footnote''' командой '''\protect'''&lt;br /&gt;
команда создания подстрочного примечания является «хрупкой»:&lt;br /&gt;
&lt;br /&gt;
 \section{Заголовок\protect\footnote{Подстрочное примечание.}}&lt;br /&gt;
&lt;br /&gt;
Иногда, в сложных ситуациях, например, когда требуется сделать&lt;br /&gt;
подстрочное примечание внутри бокса, для формирования сноски&lt;br /&gt;
требуется прибегнуть к независимым командам создания ссылки и&lt;br /&gt;
создания примечания:&lt;br /&gt;
&lt;br /&gt;
 \footnotemark[num]&lt;br /&gt;
 \footnotetext[num]{«сноска»}&lt;br /&gt;
&lt;br /&gt;
Необязательный параметр '''num''', как и в случае '''\footnote''', позволяет&lt;br /&gt;
формировать свою нумерацию. Для хранения текущего номера ссылки&lt;br /&gt;
используется счётчик '''footnote'''.&lt;br /&gt;
&lt;br /&gt;
===Колонтитулы===&lt;br /&gt;
&lt;br /&gt;
Правила формирования колонтитулов целиком зависит от выбранного&lt;br /&gt;
класса документа. Если же хочется изменить значения по умолчанию&lt;br /&gt;
то проще всего выбрать стиль страницы '''myheadings''' и сформировать&lt;br /&gt;
колонтитулы:&lt;br /&gt;
&lt;br /&gt;
 \pagestyle{myheadings}&lt;br /&gt;
 \markboth{«левый колонтитул»}{«правый колонтитул»}&lt;br /&gt;
&lt;br /&gt;
Если печать односторонняя, то достаточно воспользоваться коман&lt;br /&gt;
дой '''\markright''', которая имеет только один аргумент.&lt;br /&gt;
&lt;br /&gt;
Для полного управления содержимым колонтитулов лучше всего&lt;br /&gt;
подходит пакет '''fancyhdr'''. Подробно об этом пакеты было рассказано&lt;br /&gt;
ранее в статье «Вёрстка», раздел «Стили страницы» ([[LXF89:LaTeX|LXF89]]).&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;
 \cite[«комментарий»]{«список меток»}&lt;br /&gt;
&lt;br /&gt;
Метки либо формируются автором самостоятельно внутри окружения&lt;br /&gt;
'''thebibliography''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 Полезно почитать книгу \cite[Роженко]{rozenko-2005}.&lt;br /&gt;
 \begin{thebibliography}{9}&lt;br /&gt;
 \bibitem{rozenko-2005}Роженко А.И. Искусство вёрстки в&lt;br /&gt;
 \LaTeX’е. \newblock --- Новосибирск: Изд. ИВМиМГ СО~РАН,&lt;br /&gt;
 2005. 398~с.&lt;br /&gt;
 \end{thebibliography}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
либо используется механизм ''BibTeX''. Команда '''\newblock''' позволяет&lt;br /&gt;
логически разделить разные по смыслу элементы.&lt;br /&gt;
В качестве обязательного аргумента окружения '''thebibliography''' требуется передать&lt;br /&gt;
текст, соответствующий самой широкой метке, для выравнивания.&lt;br /&gt;
То есть, если список литературы содержит меньше 10 записей,&lt;br /&gt;
то достаточно передать однобуквенную фразу, например, «9», а в случае&lt;br /&gt;
двузначного числа книг в списке уже потребуется «99», и так далее.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF92_latex05.png|LXF92_latex05.png]]&lt;br /&gt;
&lt;br /&gt;
'''Пример библиографической ссылки.'''&lt;br /&gt;
&lt;br /&gt;
Как и в случае с перекрёстными ссылками, информация о списке&lt;br /&gt;
литературы заносится в файл с расширением '''aux''', то есть для правильного его отображения необходимо два прохода ''LaTeX''.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы можно было использовать кириллицу в метках для&lt;br /&gt;
цитирования литературы, то есть иметь возможность написать что-то&lt;br /&gt;
вроде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 \cite{Котельников-2004}&lt;br /&gt;
  …&lt;br /&gt;
 \bibitem{Котельников-2004}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следует воспользоваться пакетом '''citehack''':&lt;br /&gt;
&lt;br /&gt;
 \usepackage{citehack}&lt;br /&gt;
&lt;br /&gt;
Из названия пакета очевидно, что это «хак» со всеми вытекающими&lt;br /&gt;
последствиями и что им не следует злоупотреблять.&lt;br /&gt;
&lt;br /&gt;
====BibTeX====&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF92_latex06.jpg|Конвейер ''LaTeX+BibTeX'']]&lt;br /&gt;
&lt;br /&gt;
'''Конвейер ''LaTeX+BibTeX''. tex – ''LaTeX''-исходник, bib – библиографическая база, bst – стилевой файл для библиографии, blg – log-файл ''BibTeX'', bbl – отсортированный список литературы, aux – информация о ссылках.'''&lt;br /&gt;
&lt;br /&gt;
Список литературы можно оформлять вручную. Есть какой-никакой&lt;br /&gt;
стандарт, например, тот же ГОСТ 7.80-00 или ГОСТ 7.1-84 (ГОСТ на оформление библиографического указателя, принятый в 2000 году. Правила оформления могут нравиться или не нравиться, но это всё-таки хоть какой-то стандарт). Его можно&lt;br /&gt;
просто взять и следовать подробной инструкции. Но далеко не все&lt;br /&gt;
издательства подчиняются этому стандарту, в котором, например, нет&lt;br /&gt;
информации о том, как нужно оформлять www-ссылки. Да и вообще,&lt;br /&gt;
список сопутствующей литературы – это нечто большее, чем просто&lt;br /&gt;
довесок к статье или книге: это вполне самостоятельный фрагмент&lt;br /&gt;
информации, который очень полезно уметь представлять по-разному.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы Орен Поташник разработал программу ''BibTeX'', которая сама формирует окружение '''thebibliography''', получая&lt;br /&gt;
информацию из текстовой библиографической базы. Структура библиографической базы ''BibTeX'' является довольно распространённым&lt;br /&gt;
форматом, который использует в том числе и Google Scholar (http://scholar.google.com/), не говоря уж о том, что основной архив электронных препринтов http://xxx.lanl.gov предоставляет библиографическую&lt;br /&gt;
информацию исключительно в виде записей ''BibTeX''.&lt;br /&gt;
&lt;br /&gt;
Из программного обеспечения, позволяющего работать с ''BibTeX'',&lt;br /&gt;
следует упомянуть встроенный в ''Emacs'' пакет ''RefTeX'' и ''JabRef'' http://jabref.sourceforge.net/. Тот, кто не освоил ''Emacs'', и кому не нравится&lt;br /&gt;
Java, может поискать программные пакеты ''gBib'' и ''KBib'' для Gnome и&lt;br /&gt;
KDE соответственно. Простой конвертер ''BibTeX2html'' позволяет получить список литературы в html-виде. Естественно, и простое редактирование текстового файла вручную также никто не отменял.&lt;br /&gt;
&lt;br /&gt;
Как правило, библиографическая база в формате ''BibTeX'' хранится в файле с расширением '''.bib'''. Перед тем, как с помощью команды '''\bibliography''' подключить базу к ''LaTeX''-исходнику, нужно выбрать стиль&lt;br /&gt;
сортировки библиографии:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 \bibliographystyle{«стиль»}&lt;br /&gt;
 \bibliography{«имя bib-файла»}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ''LaTeX'' есть четыре стандартных стиля для формирования списка&lt;br /&gt;
литературы:&lt;br /&gt;
&lt;br /&gt;
* '''plain''' – открытый стиль. Библиографические записи помечаются&lt;br /&gt;
порядковыми номерами и сортируются в алфавитном порядке. Чтобы&lt;br /&gt;
правильно отсортировать библиографию на русском языке, необходимо вместо ''BibTeX'' воспользоваться командой ''BibTeX8'', указав с помощью ключа '''--csfile''' соответствующее правило сортировки (В стандартной поставке ''LaTeX'' есть правило для сортировки для кодовой страницы '''cp866 cp866rus.csf'''. На основе этого файла можно создать правило для другой кодовой страницы.)&lt;br /&gt;
&lt;br /&gt;
* '''unsrt''' – несортирующий стиль. В отличии от '''plain''', порядок представления списка литературы определяется порядком цитирования библиографии в тексте.&lt;br /&gt;
&lt;br /&gt;
* '''alpha''' – алфавитный стиль. Вместо нумерации библиографии используются имена меток. Литература сортируется по меткам.&lt;br /&gt;
&lt;br /&gt;
* '''abbrv''' – аббревиатурный стиль. Вместо полных имён авторов, названий месяцев и журналов печатаются сокращения. Сортировка и нумерация соответствует стилю '''plain'''.&lt;br /&gt;
&lt;br /&gt;
'''Максим Поляков''' разработал стили для ''BibTeX'', соответствующие&lt;br /&gt;
ГОСТ 7.80-00 и GOST 7.1-84: '''gost780s/gost71s''', аналогичные '''plain''' и&lt;br /&gt;
'''gost780u/gost71u''', аналогичные '''unsrt'''. Описание этих стилей представлено в стандартной документации в виде файлов '''gost780.pdf''' и '''gost71.pdf'''. Многие журналы, принимающие публикации в ''LaTeX'', имеют&lt;br /&gt;
свои собственные ''BibTeX''-стили. В стандартной поставке TeXLive 2007&lt;br /&gt;
идёт более 200 различных библиографических стилей – есть из чего&lt;br /&gt;
выбирать.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF92_latex07.png|LXF92_latex07.png]]&lt;br /&gt;
&lt;br /&gt;
'''Список литературы, оформленный с помощью ''BibTeX''. Стиль gost780u.'''&lt;br /&gt;
&lt;br /&gt;
В дополнение к команде цитирования '''\cite''' в случае подключения&lt;br /&gt;
библиографической базы можно использовать инструкцию '''\nocite'''.&lt;br /&gt;
Команда '''\nocite''' не создаёт никакой ссылки в тексте, но упомянутая&lt;br /&gt;
запись отображается в списке литературы.&lt;br /&gt;
&lt;br /&gt;
Сама по себе база состоит из записей вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 @book{Gussens-1999,&lt;br /&gt;
 author = {М. Гуссенс and Ф. Миттельбах and А. Самарин},&lt;br /&gt;
 title = {Путеводитель по пакету \LaTeX{} и его&lt;br /&gt;
          расширению \LaTeXe: Пер. с англ.},&lt;br /&gt;
  year = {1999},&lt;br /&gt;
  isbn = {5-03-003325-4},&lt;br /&gt;
  publisher = {Мир},&lt;br /&gt;
  address = {М.},&lt;br /&gt;
  numpages = {606},&lt;br /&gt;
  language = {russian},&lt;br /&gt;
  OPTnote = {}&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После знака «коммерческое at» @ идёт тип записи. В фигурных&lt;br /&gt;
скобках вслед за меткой через запятую перечисляются пары ключ-значение. ''BibTeX'' поддерживает определённый набор типов записей, каждому из которых соответствуют свои обязательные и необязательные&lt;br /&gt;
поля (Если к названию необязательного поля добавить '''OPT''' ('''note-&amp;gt;OPTnote'''), то такие такие поля игнорируются, даже если присутствуют в записи). Если не заполнено обязательное поле, то при компиляции ''BibTeX''&lt;br /&gt;
генерирует ошибку. Имеются следующие стандартные типы записей&lt;br /&gt;
(''BibTeX'' не чувствителен к регистру):&lt;br /&gt;
&lt;br /&gt;
* '''Аritcle''' – статья в журнале. Обязательные поля: '''author, title, journal, year'''. Необязательные поля: '''volume, number, pages, month, note, annote'''.&lt;br /&gt;
&lt;br /&gt;
* '''Book'''' – книга. Обязательные поля: '''author''' или '''editor, title, publisher, year'''. Необязательные поля: '''volume, number, series, address, edition, month, note, annote.'''&lt;br /&gt;
&lt;br /&gt;
* '''Booklet''' – брошюра. Обязательное поле: '''title'''. Необязательные поля: '''author, howpublished, address, month, year, note, annote'''.&lt;br /&gt;
&lt;br /&gt;
* '''Conference''' или '''InProceedings''' – статья, опубликованная в трудах конференции. Обязательные поля: '''author, title'''. Необязательные поля: '''crossref, booktitle, pages, year, editor, volume, number, series, address, month, organisation, publisher, note, annote'''.&lt;br /&gt;
&lt;br /&gt;
* '''Proceedings''' – труды конференции. Обязательные поля: '''title, year'''. Необязательные поля: '''booktitle, editor, volume, number, series, address, month, organisation, publisher, note, annote'''.&lt;br /&gt;
&lt;br /&gt;
* '''InBook''' – ссылка на часть книги, то есть на её главу, раздел или просто на определённый набор страниц. Обязательные поля: '''author''' или '''editor, title, chapter, publisher, year'''. Необязательные поля: '''volume''' или '''number, series, type, address, edition, month, pages, note, annote'''.&lt;br /&gt;
&lt;br /&gt;
* '''InCollection '''– часть книги со своим заглавием. Обязательные поля: '''author, title, booktitle'''. Необязательные поля: '''crossref, pages, publisher, year, editor, volume или number, series, type, chapter, address, edition, month, note, annote'''.&lt;br /&gt;
&lt;br /&gt;
* '''Manual''' – техническая документация. Обязательное поле: '''title'''. Необязательные поля: '''author, organisation, address, edition, month, year, note, annote'''.&lt;br /&gt;
&lt;br /&gt;
* '''PhdThesis''' – диссертация. Обязательные поля: '''author, title, school, year'''. Необязательные поля: '''address, month, note, annote'''.&lt;br /&gt;
&lt;br /&gt;
* '''MastersThesis''' – дипломная работа. Обязательные и необязательные поля такие же, как у '''PhdThesis'''.&lt;br /&gt;
&lt;br /&gt;
* '''TechReport''' – отчёт. Обязательные поля: '''author, title, institution, year'''. Необязательные поля: '''type, numer, address, month, note, annote'''.&lt;br /&gt;
&lt;br /&gt;
* '''Unpublished''' – неопубликованный авторский текст. Обязательные поля: '''author, title, note'''. Необязательные поля: '''month, year, annote'''.&lt;br /&gt;
&lt;br /&gt;
* '''Misc''' – то, что не подходит для других типов записей. Обязательные поля отсутствуют. Необязательные поля: '''author, title, howpublished, month, year, note, annote'''.&lt;br /&gt;
&lt;br /&gt;
Значение полей в большинстве случаев понятно из их названия.&lt;br /&gt;
Исключением, пожалуй, является поле '''crossref''', в качестве значения&lt;br /&gt;
которого можно передать ссылку на другую запись, откуда ''BibTeX'' при&lt;br /&gt;
трансляции возьмёт значения всех недостающих полей записи. Из особенностей следует упомянуть, что авторы в поле '''author''' разделяются с&lt;br /&gt;
помощью союза '''and'''.&lt;br /&gt;
&lt;br /&gt;
Кроме перечисленных стандартных полей при использовании библиографических ГОСТ-стилей '''gost780u/gost71u''' и '''gost780s/gost71s''' можно использовать поля '''numpages''' – число страниц и '''language''' – влияет на сортировку при выборе стиля типа '''plain'''. Допустимые значения&lt;br /&gt;
для поля '''language – russian, ukrainian''' и '''english''' по умолчанию.&lt;br /&gt;
&lt;br /&gt;
===Алфавитный указатель===&lt;br /&gt;
&lt;br /&gt;
:::''Указатель значительно повышает ценность любой книги, если она из тех, что читают не только насквозь, но и выборочно.''&lt;br /&gt;
&lt;br /&gt;
''А.Э. Мильчин «Культура издания»''&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF92_latex08.png|LXF92_latex08.png]]&lt;br /&gt;
&lt;br /&gt;
'''Конвейер ''LaTeX+MakeIndex''. tex – LaTeX-исходник, idx – не отсортированный индекс (полуфабрикат), ist – стилевой файл для указателя, ilg – log-файл MakeIndex, ind – отсортированный указатель.'''&lt;br /&gt;
&lt;br /&gt;
Для создания «полуфабриката» алфавитного указателя в преамбуле помещается инструкция&lt;br /&gt;
&lt;br /&gt;
 \makeindex&lt;br /&gt;
&lt;br /&gt;
Cлова, которые нужно поместить в указатель, отмечаются с помощью команды '''\index'''.&lt;br /&gt;
&lt;br /&gt;
 Указатель\index{Предметный указатель} …&lt;br /&gt;
&lt;br /&gt;
Сама по себе команда '''\index''' игнорируется, но всё, что в ней отмечается вместе с информацией о положении команды, заносится в файл с расширением '''.idx'''. Имя idx-файла по умолчанию соответствует имени&lt;br /&gt;
основного документа. Полуфабрикатом idx-файл является потому, что&lt;br /&gt;
записи хранятся в нём в неотсортированном виде. С помощью программы сортировки ''rumakeindex''' получается отформатированный правильным образом указатель в файле с расширением '''.ind'''. Этот файл&lt;br /&gt;
уже можно вставить в документ:&lt;br /&gt;
&lt;br /&gt;
 \input{«ind-файл»}&lt;br /&gt;
&lt;br /&gt;
Это же делает и команда '''\printindex''' из пакета ''makeidx''. В дополнение к подключению индекса команда '''\printindex''' проверяет существование индексного файла и не даёт ''LaTeX'' генерировать ошибку в&lt;br /&gt;
случае его отсутствия. Пакет ''makeidx'' содержит ещё несколько полезных команд для создания индекса, поэтому его в любом случае имеет смысл загрузить.&lt;br /&gt;
&lt;br /&gt;
Программа ''rumakeindex'' является простейшим скриптом, где с&lt;br /&gt;
помощью sed кириллические буквы из внутреннего представления&lt;br /&gt;
''LaTeX'' переводятся в '''koi8-r''' и правильным образом сортируются с&lt;br /&gt;
использованием стандартного механизма ''makeindex''. Если необходимо&lt;br /&gt;
отсортировать индексный файл для включения в текст, использующий&lt;br /&gt;
другую кодовую страницу, или вас просто не устраивают правила сортировки, этот скрипт легко переделать.&lt;br /&gt;
&lt;br /&gt;
Оригинальная программа сортировки индекса ''makeindex'' (подробная документация представлена в файле '''makeindex.dvi''') была написана довольно давно и, естественно, не учитывала национальных особенностей других языков, кроме английского и немецкого. Впрочем, она&lt;br /&gt;
оказалась слишком гибка, чтобы полностью отказаться от неё в пользу другого механизма сортировки, уже нормально поддерживающего&lt;br /&gt;
интернационализацию. Наиболее вероятным претендентом на замену&lt;br /&gt;
уже долгое время является ''xindy'' (http://www.xindy.org/), который «из&lt;br /&gt;
коробки» поддерживает множество языков вплоть до клингонского, но&lt;br /&gt;
до сих пор отсутствует в основных ''LaTeX''-дистрибутивах.&lt;br /&gt;
&lt;br /&gt;
Аргумент команды '''\index''' может содержать любые символы, кроме&lt;br /&gt;
'''!, “, @''' и '''|'''. Их специальное значение проявляется только внутри команды. Чтобы убрать специальное значение этих символов внутри '''\index'''&lt;br /&gt;
необходимо добавить перед ними символ '''“''' (двойную кавычку). На&lt;br /&gt;
рисунке представлен пример простейшего указателя. Ниже будут раскрыты методы его создания.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF92_latex09.png|LXF92_latex09.png]]&lt;br /&gt;
&lt;br /&gt;
'''Пример готового алфавитного указателя.'''&lt;br /&gt;
&lt;br /&gt;
Для формирования многоуровневых иерархических указателей&lt;br /&gt;
используется разделитель в виде восклицательного знака '''!''':&lt;br /&gt;
&lt;br /&gt;
 % на страницах 110 и 111&lt;br /&gt;
 \index{Указатель!rumakeindex}&lt;br /&gt;
&lt;br /&gt;
Команды '''\index''' с одинаковыми аргументами группируются в одну&lt;br /&gt;
запись с полным списком страниц.&lt;br /&gt;
&lt;br /&gt;
Символ вертикальной черты '''|''' используется для отделения видимого аргумента от управляющих знаков. Команда '''\see''' (перекрёстная ссылка на другую запись), определённая в пакете ''makeidx'', должна&lt;br /&gt;
идти в индексе вслед за этим разделителем:&lt;br /&gt;
&lt;br /&gt;
 \index{Указатель!makeindex|see{rumakeindex}}&lt;br /&gt;
&lt;br /&gt;
С помощью вертикальной черты можно также сформировать указа-&lt;br /&gt;
тель на диапазон страниц:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 % на странице 110&lt;br /&gt;
  \index{Указатель|(}&lt;br /&gt;
  много текста&lt;br /&gt;
 % на странице 111&lt;br /&gt;
  \index{Указатель|)}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Иногда номер страницы нужно как-то выделить. Команды выделения текста также должны идти после вертикальной черты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=latex&amp;gt;&lt;br /&gt;
 % Выделяем страницу 110 жирным шрифтом&lt;br /&gt;
  \index{MakeIndex@\textit{MakeIndex}|textbf}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конструкция '''«ключ»@«запись»''' используется для правильной&lt;br /&gt;
сортировки внутри '''\index'''. По «ключу» производится сортировка, а&lt;br /&gt;
«запись» выводится в предметном указателе.&lt;br /&gt;
&lt;br /&gt;
===Заключение===&lt;br /&gt;
&lt;br /&gt;
Написать любую книгу безумно тяжело. Сделать её полезной – почти&lt;br /&gt;
невозможно. Справочно-поисковый аппарат издания – лишь инструмент на этом пути, но инструмент, неоднократно проверенный грамотным человечеством. Можно путь пройти и без него, но с ним будет&lt;br /&gt;
гораздо интереснее. '''LXF'''&lt;/div&gt;</summary>
		<author><name>GArik</name></author>	</entry>

	</feed>