20070719

Заработался...

Сегодня вообще дал... написал со всей дури rm -rf ~ и второпях (вот именно после ~) ткнул Enter (это типа удалить весь домашний каталог с потрохами не задавая дурацких вопросов)...


Как всё таки иногда хорошо, что в ноутбуках стоят тормозные жёсткие диски — я успел сообразить, что это такое я сделал.


По результатам изучения того, что осталось, удалены некоторые дотфайлы, вроде .bashrc, и настройки рабочего стола Гнома, настройки Iceweasel... Архивы почты целы, рабочие папки целы, коллекции статей, фото и музыки целы. Ну и всё действительно ценное лежит в SVN :) Даже набор закладок в Epiphany остался.


Так что доставать бекапы, видимо, не потребуется... А могло быть хуже.



Ghostscript: преобразование цветного PDF в чернобелое изображение

Некоторые журналы требуют предоставлять наряду с цветными иллюстрациями их черно-белые эквиваленты (чтобы не мучатся самим с конвертацией цветов). А мне нравится рисовать цветные PDF... (с помощью PGF).

$ gs -dNOPAUSE -dBATCH -sDEVICE=pnggray -r600x600 -sOutputFile=greyscale.png colourful.pdf

-sDEVICE=epswrite и -sDEVICE=pdfwrite должны давать PDF и EPS на выходе, но в этом случае я пока не разобрался, как преобразовать цвета. По идее -sProcessColorModel=DeviceGray должно работать, но пока не выхоидт.

Впрочем, PNG можно включать напрямую в текст, обрабатываемый PDFLaTeX, а разрешение можно всегда задать более чем достаточное... (600 dpi в моём примере)

LaTeX: как создать собственный стиль BiBTeX

Пользователи LaTeX знают, что отформатировать библиографию в статье в соответствии с требованиями журнала очень просто с помощью программы BibTeX. Если есть файл, описывающий стиль форматирования библиографии.

Проблема в том, что журналов много, требования у всех разные, а стили есть не для всех. Создание же стилей в ручную требует достаточно высокой квалификации пользователя.

К счастью, создать собственный стиль BibTeX, удовлетворяющий заданным требованиям, легко может каждый с помощью программы makebst.tex. В моей установке LaTeX её можно запустить вот так:
$ latex /usr/share/texmf-texlive/tex/latex/custom-bib/makebst.tex
Далее в качестве исходного файла указываем merlin, задаём имя файла для своего стиля, например, mystyle, и терпеливо отвечаем на все вопросы (их будет много), полученный файл mystyle.bst копируем в каталог со статьёй и используем:
\bibliographystyle{mystyle}
\bibliography{bibfile}

LaTeX: как включить-выключить нумерацию страниц

Включение–выключение нумерации страниц в LaTeX делается вот так:
\pagestyle{empty} % нумерация выкл.
\pagestyle{plain} % нумерация вкл.

Большего можно достичь, если использовать пакет fancyhdr.

Установить стиль нумерации для отдельной страницы можно командой
\thispagestyle{стиль}

Начать нумерацию с другого номера:
\setcounter{page}{3} % начать нумерацию с номера три

20070710

Ввод символов с акцентами в Linux

В Linux (точнее в X Window System) есть потрясающее средство для ввода символов отсутствующих в установленной раскладке клавиатуры. Это средство называется клавиша Compose. С помощью неё можно вводить практически все варианты символов с акцентами, а также разные специальные символы.

Включить клавишу Compose можно там же, где Вы настраиваете клавиатуру, то есть или в /etc/X11/xorg.conf, или в настройках клавиатуры рабочего стола. Я удовлетворяюсь настройками клавиатуры Gnome. Там я «повесил» функцию Compose на клавишу Menu:



Включить клавишу Compose можно также используя setxkbmap. Следующая команда включает две раскладки (us и ru-winkeys), переключаемые по Alt+Shift, с клавишей Compose на месте правого Alt:
$ setxkbmap -layout us,ru -variant ',winkeys' -option 'grp:alt_shift_toggle,grp_led:scroll,compose:ralt'


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

Compose + O + C даёт © (символ авторского права),
Compose + O + R даёт ®,
Compose + = + e даёт (знак евро),
Copmose + = + y даёт ¥ (знак йены),
Compose + - + - + - даёт (тире, знак препинания),
Compose + - + - + . даёт –­ (короткое тире, разделитель диапазонов и фамилий)
Compose + < + < даёт « (левую кавычку-ёлочку),
Compose + > + > даёт » (правую кавычку-ёлочку),
Compose + " + , даёт (левую кавычку-лапку),
Compose + " + < даёт (правую кавычку-лапку),
Compose + пробел + пробел даёт неразрывный пробел.

С клавишей Compose очень легко набирать акценты и особые буквы европейских алфавитов, которые отсутствуют в моей обычной раскладке клавиатуры, но иногда нужны:
Compose + ' + a = á,
Compose + ` + a = à,
Compose + ^ + a = â,
Compose + " + a = ä,
Compose + ~ + a = ã,
Compose + * + a = å,
Compose + a + e = æ,
Copmose + s + s = ß.

Понятно, что вместо буквы «a» в примерах можно подставлять другие буквы. Любопытствующие могут взглянуть полный список Compose-последовательностей.

Если же вы пользуетесь преимущестенно GTK-приложениями, то установив метод ввода Latin Plus, вы заметно расширите возможности этой волшебной клавиши. Вам станет доступен весь греческий алфавит, цифры в виде верхних и нижних индексов, знаки математических отношений, всевозможные стрелки и другие полезные символы... ♥!
Дополнение: всё оказалось гораздо проще, и использовать Latin Plus не обязательно, см. мою заметку про то, как настроить свои Compose-последовательности.


Конечно, это не сравнится по возможностям с LaTeX, но зато эти символы можно использовать где угодно: в письмах, при наборе текста в веб, в простом тексте, ведь они входят во все стандартные unicode-шрифты.

Дополнение: в настоящий момент Compose-последовательности GTK-приложений отличаются от Compose-последовательностей, предоставляемых X.org. Поэтому в разных приложениях возможно немного разное поведение клавиши Compose. В качестве решения проблемы переключить используемый метод ввода в GTK на обычный иксовый X Input Method, см. пост про настройку Compose.

Дополнение 2: пользователи Windows могут насладиться удобством Compose–последовательнстей, установив программку AllChars.

Дополнение 3: существует лёгкий способ задавать и настраивать произвольные Compose-последовательности, редактируя файл ~/.XCompose.

20070706

Русский PDF в LaTeX

Уже достаточно давно практически все тексты, включая презентации, создаваемые в LaTeX я собираю в формат PDF. Он много меньше размером, чем Postscript, позволяет осуществлять поиск по тексту, позволяет включать изображения в формате PNG или JPG, а также делать гиперссылки, встроенное оглавление и многое другое. И самое главное, программы для просмотра PDF распространены гораздо более, чем программы для просмотра PS.

Однако для создания PDF с русскими буквами средствами LaTeX требуются некоторые ухищрения.

Во-первых, в этом случае надо использовать пакет cmap, иначе поиск по русским символам в полученном PDF будет невозможен.


Во-вторых, пакет для работы с графикой graphicx следует подключать с включенной опцией pdftex.

В-третьих, совсем невредно указать pdfTeX-у, что полученный PDF можно и ужать, для этого я устанавливаю переменную \pdfcompresslevel=9.

В-четвертых, я добавляю условный код, который делает всё вышеуказанное только если действительно используется pdfTeX, и использует другие пакеты и настройки, в случае если создаётся DVI/PS.

Ну и наконец, уж раз создаётся документ на русском языке, надо указать кодировку документа, правила расстановки переносов и кодировку шрифтов.
% до \documentclass
\newif\ifpdf
\ifx\pdfoutput\undefined
\pdffalse % pdfLaTeX не используется
\else
\pdfoutput=1 % используется PDFLaTeX
\pdftrue
\fi

% в преамбуле
\usepackage[cp1251]{inputenc} % CP1251 или другая кодировка, с UTF8 не дружит bibTeX
\usepackage[russian]{babel} % правила переноса
...
\ifpdf
\usepackage{cmap} % чтобы работал поиск по PDF
\usepackage[pdftex]{graphicx}
\pdfcompresslevel=9 % сжимать PDF
\else
\usepackage{graphicx}
\fi


После этого полученный файл можно обрабатывать и обычным latex, и pdflatex, который будет сразу создавать PDF. Для просмотра PDF я обычно пользуюсь evince или xpdf, поскольку эти программы позволяют обновлять файл не меняя открытую страницу, что удобно в процессе редактирования.

Все иллюстрации я готовлю сразу в двух форматах: PDF и EPS (epstopdf легко преобразует графику из EPS в PDF), а в командах \includegraphics{image} расширение не указываю, тогда LaTeX автоматически включает изображение в подходящем формате.

Недавно virens написал о создании презентаций в LaTeX с помощью пакета beamer, и указал на ошибки возникающие при обработке русских букв.

Хочу отметить, что у меня подобные ошибки не возникают. При этом файлы beamer я пишу несколько иначе и обрабатываю их непосредственно pdflatex:

\documentclass[ignorenonframetext,hyperref={pdftex,unicode}]{beamer}
...
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}
...
\usepackage{cmap}


Дополнение 1. Минимальный шаблон для PDFLaTeX

Вообще-то минимальный шаблон документа для pdflatex будет такой:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{cmap}

\begin{document}
Текст по-русски в кодировке UTF-8.
\end{document}
Это к тому, что разные \ifpdf выше — совсем не обязательны. Можно проще.

Дополнение 2. Шрифты CM-Super

Есть ещё такая тонкость: при использовании гарнитуры Computer Modern PDF получается гораздо лучше, если установлены шрифты CM-Super (пакет cm-super в Debian/Ubuntu).

Например, без CM-Super:

без CM-Super

С Type-1 шрифтами CM-Super:

с CM-Super

LaTeX: зачеркивание, цветовыделение и заметки на полях

Чтобы зачеркивать слова в LaTeX необходимо подключить пакет ulem. Делается это так:

% в преамбуле
\usepackage{ulem}
...
% в тексте, чтобы вычеркнуть слово
\sout{Неправильно.} Правильно.


Получится тогда что-то вроде этого:

Неправильно. Правильно.


Цветовыделения я обычно делаю с помощью пакета xcolor:


% в преамбуле
\usepackage{xcolor}
...
% в тексте
Некоторые слова можно выделять \textcolor{red}{красным}.

что даёт

Некоторые слова можно выделять красным.


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

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

% в тексте
\marginpar{Этот текст появится сбоку на полях.}


Это конечно не замена настоящим знакам корректуры, но зато представимо в виде PDF-документа, легко копируется, распечатывается и передаётся по электронным каналам связи :)

20070703

Как скачать сайт к себе на диск целиком

Бывает, что хочется иметь локальную копию какого-то сайта, чтобы можно было её просматривать, не подключаясь к Интернет, или чтобы сохранить её на будущее, на случай, если «оригинал» исчезнет.

Сделать это легко. Я часто использую скрипт siteget, написанный Джильсом Орром. По сути это всего лишь вызов программы wget c «правильным набором опций», однако вводить две строчки опций каждый раз лень :)

Итак,
  • скачайте скрипт siteget
  • поместите его в одно из мест, перечисленных в переменной окружения $PATH (я обычно держу такие вещи в ~/bin), и сделайте скрипт исполняемым (chmod a+x ~/bin/siteget)
  • скачивайте любые сайты одной командой: $ siteget АДРЕС_САЙТА.

Например, чтобы получить локальную копию своего блога, я выполняю
$ siteget http://sovety.blogspot.com/

После этого в текущем каталоге появляется подкаталог sovety.blogspot.com/. Его можно посмотреть любимым браузером (например, Firefox):
$ firefox sovety.blogspot.com/index.html

В большинстве случаев полученная копия вполне функциональна.

Те же, кто не хотят возиться со скриптом, могут использовать wget напрямую:
$ wget -m -k -nv -np -p --user-agent="Mozilla/5.0 (compatible; Konqueror/3.0.0/10; Linux)" АДРЕС_САЙТА


Для ограничения глубины скачивания можно ещё добавлять опцию -l глубина_ссылок. А при работе с плохим или ненадёжным соединением пригодятся опции -c -t 0.

Дополнение: заметно бОльшие возможности зеркалирования/скачивания сайтов предоставляет программа httrack.