20081231

2009

Дорогие друзья!

Поздравляю всех с наступающим Новым годом! Желаю в будущем году, как можно больше задач решать с помощью свободного программного обеспечения. Пусть оно приносит вам не только удовольствие и пользу, но и удачу. Желаю всем вам весь год заниматься тем, чем нравится!

До встречи в Новом году!

20081226

Русский BibTeX и XeLaTeX

К заметке о шрифтах OpenType в XeLaTeX добавляю примеры совместного использования русского языка, BibTeX и XeLaTeX, как вместе с babel, так и вместе с polyglossia; смотрите PDF и его исходник.
Внимание: всё нижеследующее относится к использованию XeLaTeX, а не обычного, проверенного временем LaTeX.
Стандартное средство для работы с библиографией в LaTeX — BibTeX. Стандартное средство для «русификации» (включения нужных правил переноса, названий разделов, определённых типографических норм) — пакет babel. Однако ни BibTeX, ни babel не умеют работать с уникодом. В результате при попытке использования этих средств в XeLaTeX могут быть проблемы. В частности, проблемы возникают при попытке использовать их одновременно: при наборе русских текстов с русской библиографией.

Первое, не очень красивое решение: использовать по-прежнему babel, но подставлять костыли, переопределяющие русские символы. Второе решение: перейти от babel к использованию более современного пакета polyglossia.

Итак, предположим, что и документ, и библиография (bib-файл) набраны в уникоде (UTF-8) и содержат кириллические символы. Дальше есть два пути.

При использовании babel в каталог с документом необходимо положить xecyr.sty, а в преамбуле поместить примерно такой код:
\usepackage[cm-default]{fontspec} % or install lmodern
\usepackage{xltxtra} % load xunicode
\usepackage[russian]{babel}
\usepackage{xecyr}
Компилировать с помощью xelatex, запуская bibtex как обычно.

Для использования polyglossia нужно установить пакеты etoolbox и polyglossia. Можно просто поместить файлы etoolbox.sty, polyglossia.ins и polyglossia.dtx из этих пакетов в каталог с документом и выполнить
$ latex polyglossia.ins
а в преамбулу документа добавить примерно такой код:
\usepackage[cm-default]{fontspec} % or install lmodern
\usepackage{xltxtra} % load xunicode
\usepackage[russian]{polyglossia}
polyglossia довольно похожа на babel но имеет некоторые отличия. Чтобы переопределить название стандартного заголовка, например, списка литературы, можно использовать команду
\gappto\captionsrussian{\renewcommand{\refname}{Мои ссылки}}


P.S. Также дополнил предыдущую заметку о XeLaTeX примером, как обеспечить одинаковый рост строчных букв разных гарнитур.

20081215

eeePC 901 и Debian (установка и настройка)

У моей жены теперь появился eeePC 901. Эту модель выбрали в основном потому, что в ней сочетается ещё достаточно компактный размер и малый вес (при этом экран уже 1024×600), ёмкий аккумулятор и экономичный процессор (это один из наиболее автономных нетбуков), при этом цена вполне разумна. Выбрали жизнерадостный зелёный вариант исполнения с предустановленным Linux (в этом случае второй встроенный флэш-диск 16 ГБ, а не 8 ГБ, как в версии с Windows).

Вообще, надо отметить, что мы, конечно, с самого начала планировали ставить на него полноценный дистрибутив, но всё равно меня очень огорчила неполная работоспособность предустановленного Xandros.

Всё дело в том, что в 901, 1000 и 1000H Асус стал ставить модуль WiFi Realtek RT2860, драйвер к которому довольно сырой и требует проприетарной прошивки. Как результат, eeePC 901 из коробки просто не мог подключиться к открытой (!) точке доступа (тоже Асус, кстати). Такой хоккей нам не нужен. Более того, я теперь не удивляюсь, что им где-то там возвращают машины с Linux. Даже такая базовая для нетбука вещь как WiFi из коробки в новых 901 толком не работает, и не работает по вине производителя. Очень, очень стыдно, Асус, мы в тебя верили, а ты явно предпочитаешь модели без Linux! Одно отрадно: за лицензию Windows платить не пришлось, а проблема с WiFi решаема.

Так что почти сразу появился стимул поставить нормальный Debian. Сразу скажу, что с установкой системы моя жена справилась самостоятельно. Я только подсказал, как загрузочный образ debian-eeepc.img записать на флэшку:
0. посмотреть как называется устройство флэшки в выводе команды mount,
1. отсоединить том флэшки,
2. dd if=debian-eeepc.img of=/dev/устройство_флэшки,
3. sync
и подсказал ещё как лучше разбить диск (/ на первом флэш-диске, 4 ГБ, /home на втором, 16 ГБ, раздел для подкачки не создавали). Следуя рекомендации в Debian Wiki мы оставили два небольших раздела на первом флэш-диске. Вроде бы это ускоряет загрузку.

Для загрузки с установочной флэшки, нужно вставить флэшку, нажать ESC при перезагрузке устройства и выбрать устройство, с которого осуществлять загрузку. WiFi включается в BIOS (F2 при загрузке), это необходимо, если планируется ставить систему по беспроводной сети. Мы ставили по обычному Ethernet.

Основной источник информации при установке и настройке Debian на eeePC: Debian EeePC Wiki.

После установки почти всё сразу заработало. Ручного вмешательства потребовали только настройка sudo, WiFi и звук (микрофон). Засыпание/просыпание и видеокамера заработали сразу после установки. VGA-выход ещё не проверяли. Даже многопальцевые комбинации на тачпэде работают (хотя и не настраиваются, и мне кажутся непривычными после тачпэда synaptics). Bluetooth ещё не проверяли. Кардиридер работает.

sudo настраивается как обычно, запуском visudo от root-а, и добавлением строки
username ALL=(ALL) ALL
в файл /etc/sudoers. Другой вариант, раскомментировать строчку
%sudo ALL=NOPASSWD: ALL
а пользователя добавить в группу sudo.

Драйвер для WiFi доступен как на сайте производителя (Ralink), так и в репозитории
deb http://eeepc.debian.net/debian lenny main contrib non-free
Данный репозиторий подключается автоматически, если установка велась с указанного выше загрузочного образа.

После установки rt2860-modules-2.6.26-1-686 появляется возможность использовать сетевой интерфейс ra0. Разные способы настройки описаны здесь. Я же выбрал лёгкий путь и поставил wicd. Минутой позже я спокойно подключился к точке доступа с WPA2PSK.

Вообще, попробовал wicd я совсем недавно, и должен сказать, что это наиболее логичная и ясная графическая конфигурялка сети, которую я пока что видел. Устанавливается созданием файла /etc/apt/sources.list.d/wicd.list с указанием на сторонний репозиторий:
deb http://apt.wicd.net lenny extras
импортом ключей:
wget -q http://apt.wicd.net/wicd.gpg -O- | sudo apt-key add -
и после этого обычной установкой пакета wicd (с удалением NetworkManager). Запустить апплет wicd для панели Gnome: wicd-client.

Далее звук. Игрался он и так нормально, а вот с микрофона ничего не записывалось. Выяснилось, что поддержка Intel HDA Audio появилась в ALSA сравнительно недавно. Соответственно, нужно или ставить ядро 2.6.28-rc1 или более позднее, или собрать новую альзу самостоятельно. Мне было проще сделать второе.

Дополнение 2009-04-02. Несколько слов о сборке ядра 2.6.29 для Debian. Хотя пакет этого ядра уже появился в репозиториях (sid), ставить его на eeePC 901 смысла нет: драйвер тачпэда Elantech в нём выключен, а поддержку WiFi-модуля в Debian-ядре вообще выкинули по лицензионным соображениям (см. баги #522078 и #521553).

Короче, поступать в этой ситуации следует так:

1) не устанавливать готовых пакетов Debian, а взять исходники ядра на kernel.org и собрать пакет самостоятельно; при этом получив и поддержку тачпэда, и поддержку WiFi, и ядро, оптимизированное для настольных приложений — «из коробки»; постарался отключить всё лишнее, но явно отключил не всё. Конфигурацию ядра я частично позаимствовал отсюда. Основные особенности: CONFIG_PREEMPT=y (десктоп), CONFIG_RT2860=y (встроенный WiFi), CONFIG_MOUSE_PS2_ELANTECH=y (тачпэд Elantech), CONFIG_ATL1E (гигабитный Ethernet);

2) следовать инструкциям по сборке собственного пакета с ядром; если кратко, то переходим в каталог с распакованными исходниками ядра и делаем следующее:
$ make menuconfig
$ make-kpkg clean
$ nice -n +10 fakeroot make-kpkg --initrd --revision=eee901 kernel_image kernel_headers
Не забываем перед этим установить kernel-package и zlib1g-dev;

3) переходим на один каталог выше и устанавливаем собранные пакеты:
$ cd ..
$ sudo dpkg -i linux-headers-*.deb linux-image-*.deb

4) Перед тем, как перезагрузиться, не забываем пересобрать те модули, которые ставились из исходников. Например, пересобрать пользовательские модули ALSA из alsa-source можно так:
 sudo nice -n +10 m-a a-i -l 2.6.29 alsa
Хотя, кстати, с 2.6.29 я уже не уверен, что это нужно. Спросите экспертов;

5) после перезагрузки у меня вроде всё заработало (о настройке тачпэда см. ниже): WiFi, двухпальцевых скроллинг на тачпэде, звук и запись звука, видеокамера, кардридер, блутус (встроенный Bluetooth ещё не проверял, внешний USB-модуль работает), засыпание-просыпание, датчики батареи.


Для сборки альзы, вначале устанавливаем linux-headers:
sudo aptitude install linux-headers-`uname -r`
после чего можно скачивать исходники альзы. Исходники распаковываем, переходим в каталог с ними, делаем
$ ./configure --with-cards=hda-intel
$ make
$ sudo make install-modules
$ sudo ./snddevices
Конечно, не Debian-way, но работает. После установки драйверов из alsa-drivers-1.0.18a и перезагрузки заработал и микрофон, и регулировка громкости аппаратными клавишами.

Дополнение 2009-04-02: правильный для Debian способ заключается в пересборке пакетов ALSA. Тогда драйвера не будут затираться при каждом апгрейде ALSA в дистрибутиве. Конкретно в этом случае, если система Lenny (stable), а нужная версия доступна только в Sid (unstable), я поступил так:
1) добавил репозиторий исходников sid в /etc/apt/sources.list:
# sid source repository
deb-src http://ftp.debian.org/debian sid main contrib non-free
и вполнил sudo aptitude update.
2) во временном каталоге выполнил
$ apt-get -t sid source alsa-base
т.е. вытащил все исходники пакета alsa из репозитория sid. Затем скачал и установил все необходимые для сборки зависимости:
$ sudo apt-get -t sid build-dep alsa-base
Можно сохранить где-нибудь список, чтобы было проще удалить их потом. Наконец, перешёл в каталог с пакетом:
$ cd alsa-driver-1.0.19.dfsg/
Конкретная версия может отличаться.
3) Редактирую файл списка изменений
$ vi debian/changelog
На самом деле просто добавил «~backport1» к номеру версии. Новую запись в файле changelog делаю по образцу предыдущих (сохраняю отступы и количество пробелов). Время в нужном формате печатает команда date -R.
4) Пересобираю пакеты:
$ fakeroot dpkg-buildpackage -us -uc
Перехожу на каталог выше и устанавливаю все собранные пакеты:
$ cd ..
$ sudo dpkg -i linux-sound-base_1.0.19.dfsg-2~backport1_all.deb \
alsa-base_1.0.19.dfsg-2~backport1_all.deb \
alsa-source_1.0.19.dfsg-2~backport1_all.deb
Почти готово.
5) Осталось собственно собрать модули для текущей версии ядра. Для этого должен быть установлен пакет linux-headers и module-assistant. Тогда сборка и установка будет практически автоматической:
 $ sudo m-a a-i alsa
Всё. Теперь «правильная» альза должна быть установлена «правильным» способом. И пока в stable не появится более свежей альзы, будет использоваться «бэкпорт». При обновлении ядра нужно будет повторить только последний шаг (5). Чтобы новые модули заработали, нужно или выгрузить вручную все старые модули, которые начинаются на snd..., или просто перезагрузиться.


Аппаратные клавиши работают должным образом после установки пакета eeepc-acpi-scripts из указанного выше специального репозитория Debian для eeePC. Опять же, при установке со специального образа, он устанавливается по-умолчанию.

Ещё остаётся задача как следует настроить тачпэд. В 901 используется тачпэд Elantech. У меня он сейчас настроен как
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
EndSection
и он вроде работает. Кажется, только, иногда подтормаживает. Двумя пальцами делается вертикальная прокрутка и эмулируется средняя кнопка мыши, тремя пальцами эмулируется правая кнопка мыши, краткое касание второго пальца при удержании первого включает режим перетаскивания. Эти комбинации работают, но после тачпэда synaptics кажутся непривычными, и некоторые из них я бы отключил, особенно перетаскивание. На первое время я убавил чувствительность тачпэда в настройках Gnome.

Дополнение 2009-04-02: если было установлено достаточно свежее ядро с поддержкой тачпэдов Elantech (см. выше инструкции по установке ядра 2.6.29), то можно использовать нормальный драйвер тачпэда. Соответственно в /etc/X11/xorg.conf помещаем:
Section "InputDevice"
Identifier "Configured Mouse"
Driver "synaptics"
Option "Device" "/dev/input/mouse0"
Option "Protocol" "auto-dev"
Option "SHMConfig" "true"
Option "VertTwoFingerScroll" "1"
Option "HorizTwoFingerScroll" "1"
Option "TapButton1" "1"
Option "TapButton2" "2"
Option "TapButton3" "3"
EndSection
Кроме этого нужно установить xserver-xorg-input-synaptics версии не ниже 0.99.3. Готовые пакеты для Debian Lenny (stable) можно взять здесь. После перезапуска иксов, будет работать как вертикальный, так и горизонтальный скролинг двумя пальцами на тачпэде.

Подробности о настройке тачпэда смотрим в DebianEeePc Wiki.
Ссылки по теме:Народный опыт (*nix на схожих моделях):Впечатления о eeePC 901 в целом, как о железке, у меня очень приятные. Ничего не болтается, ладно всё подогнано. Вес и размер как раз такие, чтобы с ним было приятно сидеть где-нибудь на диване. Приятно сопротивление, с которым открывается и закрывается крышка. Клавиатура мелкая и чуть-чуть нестандартная, но если набирать аккуратно, то вскоре начинает получаться. От батареи работает действительно долго. Экран яркий, матовый, с широким углом обзора. Самое то. В разрешении же 1024×600 оказалось комфортно, особенно если использовать полноэкранный режим для ряда приложений (F11 в Gnome) и несколько рабочих столов. Только изредка приходится перетаскивать окошки с зажатым ALT.

Дополнение 2009-03-07: см. также мою следующую заметку, как переназначить курсорные клавиши, Shift и PageUp/PageDown на ееePC 901.

Дополнение 2009-04-02: дополнил описанием, как пересобрать пакеты ALSA для Debian stable, как собрать пакет ядра 2.6.29, как настроить тачпэд Elantech.

Дополнение 2009-07-01: в свежей заметке — как бороться с тормозами Firefox-а на eeePC.

Дополнение 2009-07-09: упомянул CONFIG_ATL1E (гигабитный Ethernet). Убрал ссылки на конфиг ядра, в котором его не было.

20081209

Пример рисования в PyCairo

Пробуя библиотеку для рисования Cairo из Python, сделал такую вот табличку:



У кого браузер не поддерживает SVG, сморим PNG.

Идею нарисовать временную шкалу использования языков программирования дал мне вот этот опрос на StackOverflow («В каком возрасте вы начали программировать?»).

Кто хочет себе такую же табличку (в смысле, аналогичную), скрипт к вашим услугам (Public Domain). Требует PyCairo (python-cairo).

Оказалось, рисовать из Python в Cairo очень просто. При этом можно получать изображения в векторном формате (PDF, PostScript, SVG), не говоря уже о PNG. Можно будет использовать в будущем для автоматизированного создания схем и графиков, если готовых программ вдруг не хватит.

Есть самоучитель Cairo Tutorial (тоже на примере Python). Если очень кратко, то это делается так:

Шаг 1. Импортируем модуль:
import cairo

Шаг 2. Создаём «поверхность» и берём из неё «контекст» для рисования. Я рисовал сразу в SVG файл:
svg=cairo.SVGSurface("имяфайла.svg",ширина_в_пунктах,высота_в_пунктах)
ctx=cairo.Context(svg)

Шаг 3. Рисуем, используя контекст:
ctx.set_line_width(ширина_линии) # выбираем линию
ctx.set_source_rgba(красный,зелёный,синий,прозрачность) # выбираем цвет
ctx.move_to(x,y) # перемещаем «курсор»
ctx.line_to(x2,y2) # рисуем линию от позиции «курсора» до x2,y2
ctx.arc(x,y,радиус,угол1,угол2) # рисуем дугу с центром в (x,y)
ctx.close_path() # замыкаем контур
ctx.fill() # заливаем контур выбранным цветом
ctx.stroke() # обводим контур выбранной линией
ctx.set_font_size(размер_шрифта) # выбираем размер шрифта, можно дробный
ctx.show_text("буквы") # пишем слово «буквы»

Шаг 4. Нарисовавшись всласть, сохраняем результат (закрываем «поверхность»):
svg.finish()
В качестве справки используем документацию по Cairo для языка Си. Изменения для Python-скриптов вполне очевидны: вместо передачи параметров cairo_t *cr используем методы объекта-контекста. Аналогично для поверхностей.

20081206

Диссертация в LaTeX

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

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

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

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

Из технических вопросов, можно выделить:
  1. Вопросы соответствия требованиям по оформлению работы (как правило, они определяют используемый шрифт, макет страницы, отступы, порядок нумерации объектов, страниц, формат подписей, макет титульной страницы); тут лучше положиться на советы своего научного руководителя.
    В случае диссертаций, в соответствии с Положением о порядке присуждения ученых степеней, утверждены формы титульных листов диссертации и автореферата, а оформление диссертации «должно соответствовать требованиям, устанавливаемым Министерством образования Российской Федерации»
  2. Вопросы соответствия нормам отечественной полиграфии (не секрет, что ЛаТэХ по-умолчанию набирает «по-американски», в том числе формулы и математику), тут для начала можно посмотреть примеры правильного набора у К. Воронцова; вот некоторые из отличий:
    1. кавычки у нас используются французские или немецкие;
    2. иначе набирается тире (во всех случаях);
    3. отличается ряд математических символов, например, знаки нестрогих неравенств;
    4. используется другое начертание греческих букв;
    5. отличаются обозначения ряда функций и ряд других математических обозначений;
    6. знак «равно» дублируется при разрыве формулы на две строки;
    7. первый абзац набирается тоже с отступом;

  3. Оформление списка литературы регламентируется соответствующими ГОСТами. С 2009-го года, кстати, вступает в действие новый ГОСТ Р 7.0.5-2008. Думаю, обновлённые стили BiBTeX скоро появятся.
Лирическое отступление. Эта статья написана для блога советы.блогспот.ком и распространяется на условиях лицензии CC-BY-NC-SA 3.0, т. е. требует ссылки на оригинал и запрещает коммерческое использование текста.
В своей работе я использовал класс документа dissert.cls. Теперь его первоисточник что-то не находится, так что выкладываю ту версию, которую использовал сам. Однако очень может быть, что класс rusthesis.cls и лучше. Я его не пробовал. Есть ещё пакет disser, который служит тем же целям. Его я тоже не пробовал.

В плане размера шрифтов, межстрочного интервала* и полей я полагался на настройки пакета dissert.cls. Однако эти вещи легко настраиваются и вручную, см. заметки изменение межстрочного интервала в LaTeX и как задать поля страницы в LaTeX.
*) Да, я считаю, что полуторный, а тем более двойной, интервал — это некрасиво, разве что удобно, чтобы делать правки на бумаге. Однако таков жанр.
Набирал текст я в кодировке CP1251, в основном с расчётом на то, чтобы в процессе работы можно было спокойно давать исходник пользователям Windows. Однако это практически не потребовалось.
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}
\usepackage[T2A]{fontenc}
Также я пользовался пакетом шрифтов pscyr, пользоваться которым я, однако, не рекомендую, по причине неясной лицензии на распространение этих шрифтов. К счастью, свободно-распространяемых шрифтов с тех пор прибавилось.

Переопределение формата нумерации в списке литературы:
\makeatletter
\renewcommand\@biblabel[1]{#1.}
\makeatother
Надпись «Стр.» над номерами страниц в таблице с оглавлением (только для класса документа dissert.cls):
\renewcommand\contentsdesc{Стр.}
Первый абзац с отступом:
\usepackage{indentfirst}
Далее, я переопределял формат подписей под иллюстрациями:
%different caption style: ``Fig.~N.~Caption text''
\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{#1.~#2}%
\ifdim \wd\@tempboxa >\hsize
#1.~#2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
\makeatother
Также я использовал пакет hangcaption, чтобы обеспечить «висящие» номера иллюстраций. Это выглядело примерно так:

________________
,́ `.
| |
| @}---,--`-- |
| |
`.________________,'


Рис. 1.1. Что значит имя? Роза пахнет розой,
хоть розой назови её, хоть нет.
Я также включал макрос \reversemarginpar, поскольку широким в диссертации является именно левое поле.

Для организации иллюстраций несколько в одной я использовал пакет subfigure. Соответственно, чтобы включить нумерацию внутренних элементов иллюстрации русскими буквами («Рис. 3.14 (д)»):
\renewcommand{\thesubfigure}{(\asbuk{subfigure})~}
Я опущу все макросы, касающиеся набора математики. С высокой вероятностью, у моих читателей они будут другие.

Шаблон же основной части документа у меня был такой:
\begin{document}

\tableofcontents
\clearpage

\include{intro}
\clearpage

\include{ch02}
\clearpage

\include{ch03}
\clearpage

\chapter*{Заключение}
\addcontentsline{toc}{chapter}{Заключение}
Текст заключения.
\clearpage

\listoffigures
\addcontentsline{toc}{chapter}{Список иллюстраций}
\clearpage

\listoftables
\addcontentsline{toc}{chapter}{Список таблиц}
\clearpage

\renewcommand{\bibname}{Список использованных источников}
\addcontentsline{toc}{chapter}{Список использованных источников}
\bibliographystyle{gost71u}
\bibliography{thesis}
\end{document}
Как можно заметить, я вынес все главы в отдельные файлы (вообще, такой подход можно рекомендовать для набора любых больших документов). Правильные заголовки всяких «списков» в оглавление вносил вручную (команды \addcontentsline). Ещё изменил название списка литературы. А формат списка литературы определил с помощью стиля BiBTeX gost71. В случае, если это не годится, можно создать собственный стиль BiBTeX.

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

Хотя этот текст распространяется, как обычно в моём блоге, по лицензии CC-BY-NC-SA (т.е. со ссылкой на советы.блогспот.ком и не для коммерческого использования), но если кто-то хочет использовать его в Викиучебниках или других проектах Wikimedia Foundation, то в этом случае можно распространять на условиях GFDL.

Дополнение 2009-10-18: нашёл ещё серию статей Павла Самолысова «Верстаем диплом в LaTeX». Может кому пригодится.

20081203

Символьные вычисления в SymPy онлайн

Интерактивная демо-сессия SymPy: live.sympy.org. Теперь любой желающий сразу может попробовать в действии эту библиотеку для компьютерной алгебры в Python.

Также может пригодится как символьный веб-калькулятор :) Там же есть и графическая версия консоли, в которой формулы отрисовываются как в LaTeX.

20081201

XeLaTeX и шрифты OpenType в LaTeX

Использовать нестандартные гарнитуры в традиционном LaTeX не так-то просто. Практически, необходимо иметь отдельный пакет LaTeX для каждой новой гарнитуры. Для ряда распространённых гарнитур такие пакеты есть. А если хочется нестандартную гарнитуру, для которой нет стандартного пакета?

Легко использовать любые современные шрифты TrueType и OpenType позволяет XeLaTeX.

Вначале нужно установить XeLaTeX. В Debian/Ubuntu для этого достаточно поставить пакет texlive-xetex.

Помимо этого, нужно определиться собственно с используемыми шрифтами. XeLaTeX может использовать любые шрифты, которые может использовать Fontconfig. Просмотреть список установленных в системе шрифтов и их имена можно с помощью команды fc-list:
$ fc-list | grep Inconsolata
Inconsolata:style=Medium
Ещё можно поставить программу FontMatrix для просмотра и сравнения шрифтов. Установку дополнительных шрифтов я здесь описывать подробно не буду, скажу лишь, что в большинстве случаев для этого достаточно поместить файлы шрифта в ~/.fonts/.

Далее создаём документ LaTeX, как обычно. В преамбулу добавляем:
\usepackage[cm-default]{fontspec}
\usepackage{xunicode}
\usepackage{xltxtra}
Главный пакет тут — fontspec. Опция cm-default необходима, чтобы он не пытался использовать шрифты lmodern (которые в Debian/Ubuntu надо ставить отдельно, а русских глифов в них всё равно нет).

Как я понял, xunicode изменяет традиционнее латэховские макросы вроде \" таким образом, что немецкую «о умляют» (ö) в XeLaTeX можно ввести не только напрямую с клавиатуры как ö, но и как обычно, \"o. Вообще, все уникодные символы можно вводить непосредственно с клавиатуры (например, с помощью клавиши Compose). Это удобно. Пакет xltxtra добавляет чудесный макрос \XeLaTeX.

Затем можно задать стандартные шрифты документа:
\setromanfont{Charis SIL}
\setsansfont{Liberation Sans}
\setmonofont{Inconsolata}
В общем-то, названия этих команд говорит сами за себя. Они меняют шрифт всего документа в целом. Есть ещё команда \setmainfont{Имя шрифта}.
Дополнение 20081226: поскольку рост строчных букв у разных гарнитур одного кегля разнится, то при совместном использовании в пределах одного абзацах их необходимо соответствующим образом масштабировать. Для того, чтобы обеспечить одинаковый росит строчных букв, можно задать глобальную опцию:
\defaultfontfeatures{Scale=MatchLowercase}
Можно, конечно, задавать опцию Scale для каждой гарнитуры отдельно. Аналогичная опция Scale=MatchUppercase позволяет обеспечить единый рост заглавных букв разных гарнитур.
Временное переключение гарнитуры делается командой \fontspec{Имя шрифта} в теле документа.

Компилировать нужно с помощью xelatex вместо latex. А так — как обычно. Получается PDF. Всё на удивление просто. Примеры по ссылкам. Инструкции в примерах немного более подробные, чем в этой заметке.

пример использования (исходник, UTF-8)
пример использования (PDF)

Да, очень рекомендую посмотреть на что способен XeLaTeX, если ему дать хороший шрифт. Вот только где бы ещё лицензионных (свободно распространяемых) русских шрифтов найти…

Дополнение: XeLaTeX не совместим с пакетом babel. Можно или пользоваться дополнительным пакетом xecyr, переопределяющий кириллический символы LaTeX в соответствии с уникодом, или пользоваться пакетом polyglossia, заменяющим babel. Спасибо Shender-у за подсказанные решения.

Дополнение 20081226: выкладываю также примеры использования BibTeX совместно с XeLaTeX для написания русскоязычных текстов. Рассмотрены оба способа: и с babel+xecyr, и с polyglossia.