19 марта 2012

Телевидеть

Я прошу у вас внимания,
Я нешуточная мания,
Я ура телевещанию,
Да здравствует, прогресс.

Желанья им фильтруются,
И мненья формируются,
И всякому явлению,
Оно прибавит вес.

Здесь известно всё заранее
Ей не нужны эти знания,
И без лишнего старания,
Рождается звезда.

Немного обаяния,
Запудрены барание,
Мозги у тети Мани.
Ставки, гонки, поезда.

Не коснётся пусть нас суетность,
Толстухи вальс тануцуют,
И не кстати, и не вместе,
И не в лад, и не в попад.

Уж как карты нас тусуют.
Кто не с нами пусть пасуют.
Ведь экран подчас рисует,
Жизнь прекрасней во сто крат.

Эгей, ручку поверните,
Настал свиданья час,
Мы будем телевидеть,
А просто видеть не для нас.

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

Слезы меряют на литры,
Обязательно пролиты,
Они будут, да, мой друг, что за вопрос.

Ведь за этим, сна не зная,
Редактура наблюдает,
Репетируя, когда, зачем и кто.

Кто заплачет, кто завоет.
Кто встречает, успокоит,
Кто споет, не дай бог, ежели не то.

Продлеваются контракты,
Улучшаются контакты,
Без антракта, и без устали, за трактом тракт.

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

Эгей, дежурно улыбнитесь,
Поправим парики,
Мы будем телевидеть,
А кто не телевидет, те все дураки.

Вот дама в платье из московшвея.
Правый бок чуть-чуть левее.
Левый бок чуть-чуть правее.
Дама песенки поет.

А программу переключим,
Очевидному научат,
Как оно невероятно,
Просто даже за душу берет.

Для того, чтоб телевидеть,
Можно даже еле видеть,
Можно даже еле слышать,
Полудумать, полуспать.

Мир животных, мелодрама,
Шайба, кинопанорама,
И свои зады от кресел,
Мы не в силах оторвать.

Радость, боль, любви капризы,
Все заменит телевизор,
В стороне друзья, и книги, и прогулки под луной

Кто куда, а я к дивану,
К недалёкому экрану,
Кто далёк, тем не по пути со мной

(Еще два раза)

Градский А.

17 марта 2012

Emacs и грамотность.

Я считаю, что правила русского языка соблюдать надо. Даже в неформальщине такой, как интернет. Это как фреймворк - его предки придумали, чтобы мы через N тысяч лет и в космос полететь смогли. Но кривые руки и горячая голова правилам языка следовать не хотят, поэтому метод излечения такой.

  • Установить aspell (программа проверки орфографии).
  • Например, для арчика, так:
    sudo pacman -S aspell aspell-en aspell-ru
    
  • Влить английский словарь внутрь русского, чтобы этим симбиозом потом проверять тексты на двух языках.
  • Взято здесь: http://the-bosha.ru/2010/01/12/aspell-two-language/
    su
    cd /usr/lib/aspell
    grep '^special' en.dat >>ru.dat
    aspell dump master en >w.en
    aspell dump master ru-yo >w.ru
    cat w.ru w.en >w.all
    aspell --lang=ru --encoding=UTF-8 create master ruen.rws < w.all
    rm -f w.ru w.en w.all
    echo "add ruen.rws" > ru.multi
    exit
    
  • Настроить emacs.
  • Можно примерно так:
    (require 'flyspell)
    (require 'ispell)
    
    (setq
     ispell-program-name "aspell"
     ispell-extra-args '("--sug-mode=ultra"))
    
    (setq ispell-highlight-face (quote flyspell-incorrect))
    (setq ispell-have-new-look t)
    (setq ispell-enable-tex-parser t)
    (add-hook 'text-mode-hook 'flyspell-mode)
    (add-hook 'latex-mode-hook 'flyspell-mode)
    (setq flyspell-delay 1)
    (setq flyspell-always-use-popup t)
    
    (setq flyspell-issue-welcome-flag nil)
    

Ну вот и все. Теперь можно какой-нибудь текст и перепроверить себя выполнив команды:

M+x ispell-change-dictionary RET
ru RET
M+x ispell

ispell будет подсвечивать некорректные по его мнению слова. Для коррекции ситуации можно пользоваться следующими клавишами:

  • i
  • Вставить слово в пользовательский словарь и никогда больше не считать его некорректным.
  • r
  • Вручную заменить слово.
  • Цифра или знак
  • Вставить слово из предлагаемых вариантов.
  • Пробел
  • Пропустить слово в этой проверке.

15 марта 2012

Публикуем LaTeX книгу в html формате в вебе с помощью tex4ht

Захотелось мне тут след в истории common lisp'а оставить и взялся я книгу Common Lisp The Language 2 edition переводить. Гай Стил исходный LaTeX код книги опубликовал и даже html версию выпустил. Однако html версия хоть и была сгенерирована, но еще вручную и доработана. А так как русскую html версию мне тоже надо было сделать, а руками работать не хотелось, начал я темой конвертации LaTeX в html и интересоваться.

Условно программы для преобразования можно разделить на два вида:

  • Модифицируют поведение TeX для вывода в html формат
  • Сюда можно отнести tex4ht и hyperlatex
  • Сами обрабатывают и преобразовывают исходный LaTeX/TeX код книги
  • Latex2Html, HeVeA и другие
После использования некоторых из них, я сделал вывод о том, что более всего мне подходит TeX4ht.

TeX4ht

TeX4ht примечателен тем, что не требует каких-либо вмешательств в итоговый html код, позволяя достаточно гибко и почти понятно конфигурировать процесс преобразования и достигать необходимого внешнего вида результата. А именно:

  • позволяет задавать окружающие html теги для tex заданных команд и окружений
  • редактировать css

TeX4ht понимает все команды определенные пользователем, потому что является драйвером для TeX'а (как например, pdflatex). Кроме того, TeX4ht умеет работать с такими модулями, как makeind, multind, hyperref и т.д.

Все модули можно просмотреть такой командой (подправьте для вашего дистрибутива):

ls -A /usr/share/texmf-dist/tex/generic/tex4ht/

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

Примеры которые здесь будут рассматриваться взяты из вышеназванной книги, исходники которой можно посмотреть здесь: http://github.com/filonenko-mikhail/cltl2-doc-ru. А результат здесь: http://filonenko-mikhail.github.com/cltl2-doc-ru.
Кроме того, есть пример попроще. Я когда-то распознал статью Лотфи Заде о нечетких множествах. https://github.com/filonenko-mikhail/lotfi-zadeh-fuzzy-sets/blob/master/Zadeh-1965.en.tex

Запуск TeX4ht

Источник на английском: http://tug.org/applications/tex4ht/mn-commands.html

Команда запуска имеет следующий шаблон:

htlatex filename "options1" "option2" "options3" "options4"

options1 содержит перечисление настроек через запятую. Обязательно начинается с команды html, xhtml или имени конфигурационного файла. Затем можно указать деление html файлов в соответствии с глубиной деления частей книги (главы, разделы).

options2 и options3 содержат перечисление настроек через пробел. Эти настройки указываются для постобработчиков tex4ht.c and t4ht.c,

options4 содержит настройки передающиеся компилятору LaTeX.

Можете просто для своего tex файла запустить процесс так:

htlatex filename.tex

и посмотреть готовый результат. Но для более тонкой настройки, я запускаю процесс так:

htlatex clm.tex 'cltl,3,next,charset=utf-8' ' -cunihtf -utf8' '' '-interaction=batchmode'

Это значит скомпилировать clm.tex. Использовать конфигурационный файл cltl.cfg. Разделить html файлы по трем уровням вложенности глав, разделов. Установить кодировку в utf-8. Затем в постобработчик также указывается кодировка utf8. А также параметр для latex, для игнорирования ошибок и работы в пакетном режиме.

Конфигурирование TeX4ht

Источник на английском: http://tug.org/applications/tex4ht/mn11.html

Как я уже сказал, конфигурационный файл устанавливается в первой позиции options1 (второй параметр для htlatex) без указания расширения файла. А расширение должно в свою очередь быть таким: cfg. Файл конфигурации содержит TeX команды и имеет следующий шаблон:

\Preamble{html}
\begin{document}
....
настроечные команды
....
\EndPreamble

В данном конфигурационном файле можно указать css для итогового документа. Для этого служат следующие команды:

\Css{content}
\Css content\EndCss
\CssFile[list-of-css-files]content\EndCssFile

Например,

 \Css{
    table.tabbing {
        border-width: 1px;
        border-spacing: 1px;
        border-style: none;
        border-collapse: collapse;
    }
    .centerline {
        text-align: left
    }
    tt {
        font-family: monospace,monospace;
    }
    div.lisp {
        color: olive;
        padding: 1em
    }
}

Можно конфигурировать html вывод для LaTeX окружений. Для этого используются функция вывода html тегов \HCode и команда конфигурации окружения \ConfigureEnv{environment-name} {before-environment} {after-environment} {before-list} {after-list}. Например:

\ConfigureEnv{lisp} {\Tg<div class=lisp>} {\Tg</div>} {} {}
\ConfigureEnv{defun} {\Tg<div class=defun>} {\Tg</div>} {} {}

Условное выполнение TeX4ht кода

Иногда необходимо выполнить некоторый TeX код только при условии использования TeX4ht. Например для TeX4ht необходимо явно указывать расширение графического файла. Это можно сделать определив две версии команды для включения илююстраций (\includefigure)

\ifx \HCode\Undef
\newcommand{\includefigure}[1]{\center{\includegraphics[width=1\linewidth]{#1}}}
\else
\newcommand{\includefigure}[1]{\center{\includegraphics[width=1\linewidth]{#1.png}}}
\fi

Строка \ifx \HCode\Undef просто проверяет наличие TeX4ht команды \HCode и выполняет одно из двух действий.

Создание предметного указателя

В результате выполнения команды htlatex, будет создан *.idx файл для генерации индекса. Следующая команда создаст *.ind файл, который и будет использован в итоговом документе.

tex '\def\filename{{FILENAME}{idx}{4dx}{ind}} \input  idxmake.4ht' 
makeindex -o FILENAME.ind FILENAME.4dx 

Библиография

Библиография и ссылки поддерживаются.

Иллюстрации

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

13 марта 2012

Статус перевода cltl2ed.

Обновлено 19.06
23 главы переведена и требуют вычитки. У меня глаз замылен, поэтому если видите английский стиль изложения в русском переводе, всячески информируйте меня об этом: почтой, или багтрекером, или комментариями, или форком.

Книга оформлена для онлайн чтения в браузере. Очень удобно, например, параллельно repl-у открыть буфер с текстом в emacs-w3m.

1 Вступление
2 Типы данных
3 Область и продолжительность видимости
4 Спецификаторы типов
5 Структура программы
6 Предикаты
7 Управляющие конструкции
8 Макросы
9 Декларации
10 Символы
11 Пакеты
13 Строковые символы
14 Последовательности
15 Списки
16 Хеш-таблицы
17 Массивы
18 Строки
19 Структуры
20 Вычислитель
21 Потоки
27 Объектная система Common Lisp'а
28 Условия

Напомню, что почитать онлайн можно здесь: http://filonenko-mikhail.github.com/cltl2-doc/

А можно и pdf'ку скачать, правда качества вёрстки я не гарантирую.

С радостью приму любую критику.