Показаны сообщения с ярлыком emacs. Показать все сообщения
Показаны сообщения с ярлыком emacs. Показать все сообщения

суббота, 2 мая 2009 г.

База библиографических ссылок BibTeX в Emacs

Что такое BibTeX и какая от него польза можно прочитать здесь. Забегая вперед, скажу, что вещь это весьма полезная, научившись пользоваться которой, вам будет намного проще управляться с бибилиографическими ссылками в LaTeX, не мучаясь с переформатированием под каждый отдельный случай (например, считается, судя по всему, хорошим тоном для каждого журнала придумать своё и только своё правило для оформления этих ссылок. Справиться с этим варварством как раз поможет BibTeX).

Для редактирования базы данных BibTeX в линукс существует несколько программ, например, kbib, kbibtex, XfBib, jabref. Как следует из названия, первые две предназначены для работы в KDE, в то время, как последняя основана на Java. Я не имею ничего против этого языка программирования :), но лично мне не нравятся тормозящие программы, имеющие своеобразный интерфейс (возможно я не осили, но побороть ужасно размытые шрифты я не смог, а потом уже и не хотелось). Перечисленные программы обладают весьма серьезным функционалом, за исключением простенькой XfBib. Однако мне весь этот функционал не нужен, так же, как и KDE с Java. Можно, конечно, править библиографию руками, что весьма напряжно, но В Емаксе есть для этого специальный режим bibtex-mode.

Режим подхватится автоматически при редактировании файла с расширением bib, но если этого не произошло можно включить режим вручную:

M-x bibtex-mode

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

Комбинации клавиш

Создание окружения

Статья в журнале (A rticle):

C-c C-e C-a

Статья в сборнике тезисов (in P roceedings):

C-c C-e C-p

Заказная статья в сборнике (in C ollection):

C-c C-e C-c

Глава или страницы в книге (chapter in B ook):

C-c C-e C-b

Сборник трудов конференции вообще, а не отдельная статья (p roceedings):

C-c C-e p

Книга целиком (B ook):

C-c C-e b

Технический отчёт (T echnical report):

C-c C-e C-t

Если интересует что-то ещё, то сочетание можно посмотреть в меню «Entry-types», а если показ меню отключён, как у меня, то его можно посмотреть одновременно нажав Ctrl и правую кнопку мыши.

Заполнение полей

Для каждого типа окружения имеется обязательный набор полей. Также есть необязательные поля, которые начинаются с «OPT» (например, OPTmonth) или с ALT (например, ALTEditor).

Необязательное поле можно сделать активным комбинацией:

C-c C-o

Чтобы не мучаться с позиционированием курсора между фигурными стрелками, для перехода от одного поля к следующему лучше использовать bibtex-next-field

C-j

Выравниваются поля стандартно:

M-q

А для выравнивания всех полей в окружении служит bibtex-fill-entry

C-c C-q

Создать свое собственное поле (например, language) можно посредством bibtex-make-field

C-c C-f

Пример использования

@Article{sunarso08:_mixed_ionic_elect_conduc_miec,
  author =       {J. Sunarso and S. Baumann and J. M. Serra and
                  W. A. Meulenberg and S. Liu and Y. S. Lin and
                  J. C. Diniz da Costa},
  title =        {Mixed ionic-electronic conducting {(MIEC)}
                  ceramic-based membranes for oxygen separation},
  journal =      {Journal of Membrane Science},
  year =         2008,
  volume =       320,
  pages =        {13-41}
}

Закончив заполнение полей полезно всё выровнять с скомандовать bibtex-clean-entry.

C-c C-c
Как бы странно это ни звучало, но эта команда проверяет синтаксическую корректность окружения и предлагает дать название записи. Надо сказать, что некириллические названия задаёт сама вполне адекватно.

При создании документа с использованием AUCTeX и RefTeX можно сослаться на запись комбинацией C-c C-[. Будет предожено ввести регулярное выражение записи. Для простоты можно ввести кусок названия. Затем в вывалившемся списке отметить нужный вариант. Но об этом подробнее я расскажу в отдельном сообщении.

Преимущества и недостатки

К плюсам этого способа работы с библиографией можно отнести интеграцию с правкой текста в LaTeX, отсутствие необходимости привыкать к другой программе, поскольку всё можно сделать не выходя из емакса. Также, поскольку емакс работает с системой контроля версий, можно заслать обновленный вариант сразу же

C-x v v
после ввода комментария
C-c C-c

Из минусов могу отметить отсутсвие поиска в интернете, что, если не ошибаюсь как-то было реализовано в kbibtex. Хотя, лично для меня, это совсем не минус.


Читать далее…

среда, 8 апреля 2009 г.

Копирование текста из иксов в буфер Emacs

Известно, что с помощью выделения и нажатия средней кнопки мыши в иксах можно копировать и вставлять текст. Однако при вставке таким образом кириллицы в Emacs возникает проблема с отображением кириллических шрифтов - они имеют бо́льшие размеры, чем им положено быть в ширину. Таким образом, неизбежны проблемы с форматированием текста. На просторах рунета найден рецепт как от этой неприятности избавиться (в частности, об этом говорит gentoo-wiki). Необходимо в конфигурационный файл .emacs добавить следующее:

;; Возможность копирования кириллицы из иксов!!!
(set-selection-coding-system 'compound-text-with-extensions)
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
Теперь проблем в случае локали UTF-8 не будет, и текст можно копировать/вставлять по выделению и щелчку.
Читать далее…

Пара слов о Emacs

Emacs - это очень навороченный текстовый редактор. По-видимому, программисты так к нему в своё время привыкли, что никогда не хотели из него вылазить, стараясь делать всё в любимом текстовом редакторе. Надо сказать, что порой наблюдается просто страшный изврат (например прослушивание музыки из Emacs), но чаще всего это вполне разумные шаги к тому, чтобы сделать свою жизнь проще. Что мне особо нравится в этом текстовом редакторе, так это то, что в нём можно править тексты статей в LaTeX, писать программы на любом языке программирования; при этом не надо запоминать различные клавиатурные сокращения для разных программ.

Для начала надо бы прочитать руководство TUTORIAL.ru. У меня (Debian Lenny) оно лежит в /usr/share/emacs/22.2/etc/TUTORIAL.ru. Вы узнаете из него о клавиатурных сокращениях и особенностях работы в Emacs.

В Emacs используются, как может поначалу показаться, весьма непривычные комбинации клавиш. Принято обозначать C-x C-f следующее действие: сначала нажимается комбинация Control-x, а затем (можно отпустить Control, а можно и не отпускать), комбинация Control-f. M означает клавишу Meta, она же на PC клавиатурах Alt. Либо можно нажать и отпустить Esc, а затем уже нажать клавишу, которая идет в комбинации за Meta.

Основные комбинации клавиш

C-x C-f
открывает файл на редактирование (работает автодополнение).
C-f, C-b, C-n, C-p
перемещают курсор, соответственно, вперед, назад, вниз и вверх на один символ.
M-f, M-b
- на слово вперед и назад.
C-v, M-v
пролистывают текст на экран вперёд и назад. Это намного удобнее, чем тянуться руками к клавишам перемещения курсора. Особенно проблематично мне на ноутбуке ковыряться в поисках клавиш PageUp и PageDown - здесь же все гораздо проще.
C-Backspace, M-d
удаляет слово после курсора и перед курсором, соответственно.
C-a, C-e
отправляет курсор в начало и конец строки.
M-a, M-e
в начало и конец предложения. В обычном тексте предложения разделяются двумя пробелами, на английский манер.
C-u число действие
M-число действие
выполняет действие заданное число раз.
C-/
C-space-/
undo, redo.
C-x b
показать список буферов.
C-x k
убить буфер.
C-x 1
C-x 2
C-x 3
оставить только текущий буфер активным, разбить окно на два по вертикали, по горизонтали, соответственно.

Переносы и символы разрыва строки

Новичков при написании обычного текста может поначалу взбесить, что по умолчанию Emacs не делает переноса строк, как это сделано во многих текстовых редакторах. При написании длинной строки Emacs её переносит, но разрывает на середине слова, что, во-первых, затрудняет восприятие, а во-вторых, делает бессмысленными перемещения на следующую и предыдущую строчки. Перемещения будут происходить между абзацами. На самом деле, перенос включить можно, включив специальный режим:

M-x auto-fill-mode
однако будет он работать совсем не так, как многие привыкли, а именно, будет разрывать строку, принудительно вставляя символ разрыва строки. Поначалу для меня это казалось диким после использования, например, kate. Однако вскоре я почувствовал несомненное преимущество. При компиляции LaTeX, в случае ошибки выдается номер строки. Гораздо легче ориентироваться, когда в строке 75 символов, нежели целый абзац, скажем, из 500. Если исправляются строки вверху, то переформатирования не происходит - Emacs ведь не текстовый процессор. Для принудительного переформатирования необходимо нажать
M-q
Это переформатирует всю область между символами переноса строки. Таким образом, если ваши параграфы не разделены пустой строкой, они переформатируются вместе и сольются.

Настройка редактора

Для управления настройками емакса служит текстовый файл ~/.emacs. Поскольку, Emacs написан на Lisp, то и конфигурационный файл тоже. Для меня это всегда становилось препятствием. Да и становится всё ещё. Минимальная настройка, которую я почерпнул на http://www.emacswiki.org/emacs/GnuEmacsRussification, такова (комментарии начинаются с ";"):

;;; Русификация
;;; Использовать окружение UTF-8
(set-language-environment 'UTF-8)
(set-language-environment "Russian")
(set-language-environment "cyrillic-koi8")
;; UTF-8 для вывода на экран
(set-terminal-coding-system 'utf-8)
;; UTF-8 для ввода с клавиатуры
(set-keyboard-coding-system 'utf-8)
;; Необходима поддержка кодировок cp866 и cp1251
(codepage-setup 1251)
(define-coding-system-alias 'windows-1251 'cp1251)
(codepage-setup 866)
;; Установки автоопределения кодировок
;; prefer-coding-system помещает кодировку в НАЧАЛО списка предпочитаемых кодировок
;; Поэтому в данном случае первой будет определяться utf-8-unix
(prefer-coding-system 'cp866)
(prefer-coding-system 'windows-1251-dos)
(prefer-coding-system 'koi8-r-unix)
(prefer-coding-system 'utf-8-unix)

;; Проверка орфографии
(setq-default ispell-program-name "aspell")
(setq ispell-dictionary "russian") ; русский словарь для ispell
(global-set-key "\e\ed" 'ispell-change-dictionary) ; изменить словарь
(global-set-key "\e\ef" 'flyspell-mode); вкл/выкл проверки орфографии "на ходу"
(global-set-key "\e\es" 'ispell-buffer); проверить орфографию в текущем буфере

;; подвсетка скобок
(show-paren-mode t)

;;; режим Text и режим Auto Fill
(setq default-major-mode 'text-mode)
(add-hook 'text-mode-hook 'turn-on-auto-fill)
;; длина строки в текстовом режиме в 75 символов
(setq fill-column 75)

;;; Подсветка текущей строки
(global-hl-line-mode 1)

;;; Убрать splash-screen
(setq inhibit-startup-message t)

В области, где задается проверка орфографии вы можете видеть комбинацию клавиш типа "\e\ef". Это сочетания Esc-Esc-f, то есть два раза нажать Esc, а затем f. Такие сочетания я стал использовать, ознакомившись со статьей Точки Emacs - огромное спасибо автору!

Шрифт и цвета

Для русификации, да и вообще для лучшего восприятия емакса, желательно сказать ему использовать какой-нибудь шрифт поприличнее, чем fixed, который, вроде бы, идет по умолчанию. Есть возможность прикрутить Xft шрифты, но у меня никогда такого желания не было. Больше всего мне нравится шрифт terminus - его я использую в консоли и в емаксе. Также неплохо было бы внести коррективы в настройки цветов. Для этого необходимо править файл ~/.Xresources. Добавляем строчки

emacs*Background: #1B3035
emacs*Foreground: #ffffff
emacs*pointerColor: #F2D14D
emacs*cursorColor: #F2D14D
emacs*bitmapIcon: on
emacs*font: -xos4-terminus-bold-r-normal--16-160-72-72-c-80-iso10646-1
emacs.geometry: 80x60
Чтобы настройки вступили в силу, даём команду
xrdb ~/.Xresources
Цвета, естественно, можно подобрать на свой вкус. Шрифты можно просмотреть по команде
xlsfonts
В случае юникода интерес представляют шрифты с iso10646-1 на конце. При таких цветах в моём случае вид следующий:

Очень много полезной информации получил от прочтения отличного перевода замечательной статьи Effective Emacs (настоятельно рекомендуется к прочтению). В частности:

;; удаление слова не только по C-Backspace, но и по C-w
(global-set-key "\C-w" 'backward-kill-word)
;; удаление области текста с возможности последующей вставки
(global-set-key "\C-x\C-k" 'kill-region)

;; назначаем на Ctrl-H backspace
(global-set-key "\M-h" 'help-command)
(global-set-key "\C-h" 'delete-backward-char)

Emacs самодокументирован, поэтому можно смело вызывать справку (M-x help) и читать что требуется (сокращения клавиш, описание режимов и т.д.).

Надеюсь, что кому-нибудь это окажется полезным. В дальнейшем я напишу о том, как можно использовать Emacs для редактирования исходных текстов в LaTeX. Также предлагаю к прочтению http://emacs-tips.blogspot.com/search/label/emacs.


Читать далее…