<?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=Xredor</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=Xredor"/>
		<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/Xredor"/>
		<updated>2026-05-13T20:24:28Z</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-01-27T11:56:16Z</updated>
		
		<summary type="html">&lt;p&gt;Xredor: &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>Xredor</name></author>	</entry>

	</feed>