Вы можете редактировать Texinfo-файл любым текстовым редактором, выбранным вами по вашему усмотрению. Texinfo-файл никак не отличается от любого другого ASCII-файла. Однако, при установке GNU Emacs вы получаете возможность воспользоваться специальным режимом, называемым режимом Texinfo, который снабжает вас командами Emacs и дополнительными средствами, которые могут сильно облегчить вашу работу.
Эта глава описывает только особенности режима Texinfo GNU Emacs. Здесь не рассматриваются все возможности языка форматирования документов Texinfo. Если вы читаете это руководство с самого начала, вы, вероятно, захотите быстро пролистать эту главу и вернуться к ней уже после изучения разделов, где язык форматирования документов Texinfo описывается более детально.
Режим Texinfo дает вам специальные возможности для работы с Texinfo-файлами:
@node.
Вероятно, две наиболее полезных возможности -- это возможность быстрой вставки часто используемых @-команд и возможность создания меню и указателей на ноды.
В большинстве случаев команды режима Text работают в режиме Texinfo
точно так же, как бы они работали и в самом режиме Text. В режиме
Texinfo к основным возможностям редактора GNU Emacs добавляется
дополнительный набор инструментов и команд редактирования. Основное
различие между режимом Text и режимом Texinfo касается заполнения
текста. Переменная, отвечающая за разделение абзацев, и таблица
синтаксиса переопределяются в режиме Texinfo так, чтобы команды Texinfo,
которые должны стоять в своих собственных строках, не были включены в
другие абзацы. Поэтому команда M-q (fill-paragraph)
перезаполняет абзацы, но не смешивает команды, требующие своей строки,
со смежными абзацами.
Кроме того, режим Texinfo устанавливает переменную page-delimiter
равной значению texinfo-chapter-level-regexp; по умолчанию, это
регулярное выражение, совпадающее с командами определения глав и их
аналогов, таких как приложения. С таким значением разделителя страницы
вы можете переходить от одного заголовка главы к другому с помощью
команд C-x ] (forward-page) и C-x [
(backward-page) и сужать буфер до текста главы с помощью команды
C-x p (narrow-to-page). (тјрзСћзш Сђўцшљ `Страницы' є Руководство по GNU Emacs, для более подробного
описания команд, работающих со страницами.)
Вы можете называть Texinfo-файл так, как пожелаете, но по соглашению в
качестве расширения следует выбрать одно из этих: `.texinfo',
`.texi', `.txi' или `.tex'. Для использования
предпочтительно более длинное расширение, так как оно однозначно
определяет тип файла. Более короткое расширение необходимо использовать
в тех случаях, когда операционная система ограничивает длину имени
файла. GNU Emacs автоматически входит в режим Texinfo, если вы
обратитесь к файлу с расширением `.texinfo', `.txi' или
`.texi'. Кроме того, Emacs переходит в режим Texinfo, если в теле
файла в его первой строке присутствует текст `-*- texinfo -*-'.
Если вы находитесь в другом режиме и желаете переключиться в режим
Texinfo, выполните команду M-x texinfo-mode.
Естественно, как и другие возможности Emacs, режим Texinfo может быть расширен и настроен так, как вы этого пожелаете. В частности, очень легко изменить привязку ключей. Здесь описываются сделанные по умолчанию или стандартные привязки ключей.
Режим Texinfo дает возможность быстро вставлять часто используемые @-команды в буфер редактирования. Вы можете использовать эти команды для уменьшения времени набора команд.
Чтобы вызвать команды вставки, следует дважды набрать C-c и затем нажать первый символ @-команды:
@code{} и поместить точку между фигурными скобками.
@dfn{} и поместить точку между фигурными скобками.
@end и попытаться добавить правильно следующее слово,
такое как `example' или `table'. (Эта команда не может
правильно обрабатывать вложенные списки, зато вставляет слово, наиболее
соответствующее предшествующему списку).
@item и поместить точку в начале следующей
строки.
@kbd{} и поместить точку между фигурными скобками.
@node и добавить строку комментария, перечисляющую
последовательность нод `Next', `Previous' и `Up'. Оставить точку после
@node.
@noindent и поместить точку в начале следующей строки.
@samp{} и поместить точку между фигурными скобками.
@table, затем вставить SPC и поместить точку
после SPC.
@var{} и поместить точку между фигурными скобками.
@example и поместить точку в начале следующей строки.
{} и поместить точку между фигурными скобками.
Для того, что бы вставить команду, такую как
@code{...} вокруг существующего слова, надо
установить точку перед этим словом и ввести последовательность C-u
1 C-c C-c c. Это облегчает редактирование уже существующего обычного
текста. Величина параметра, следующего за C-u, сообщает Emacs
сколько слов после точки следует заключить между фигурными скобками:
`1' -- только одно слово, `2' -- два слова и так далее.
Используйте отрицательное число, чтобы заключить между скобками
предыдущее слово или слова. Если вы оставите параметр неопределенным,
то Emacs вставит строку с @-командой и поместит точку между фигурными
скобками. Это сработает только для тех @-команд, которые действуют на
слово или на слова внутри одной строки, вроде @kbd и
@var.
Этот набор команд вставки был создан после анализа частоты, с которой различные @-команды используются в Руководстве по GNU Emacs и в Руководстве по GDB. Если вы желаете добавить ваши собственные команды быстрой вставки, вы можете привязать к ключу макрос клавиатуры, использовать сокращение или расширить код в `texinfo.el'.
C-c C-c C-d (texinfo-start-menu-description) -- это
команда быстрой вставки, действие которой отличается от действия других
команд вставки. Она вставляет название ноды или заголовок главы в месте
для описания в пункте меню. (Пункт меню состоит из трех частей: имени
пункта меню, имени ноды и описания. Требуется только имя ноды, но
описание сильно помогает объяснить, о чем говорится в разделе
описываемой ноды. тјрзСћзш Сђўцшљ Составные части меню.)
Чтобы использовать texinfo-start-menu-description, установите
точку в строку пункта меню, и введите C-c C-c C-d. Команда ищет и
копирует заголовок, который сопутствует имени ноды и вставляет этот
заголовок как описание; затем устанавливает курсор в начале вставленного
текста, так что вы можете отредактировать это текст. Эта функция не
вставляет заголовок, если данный пункт меню уже содержит
описание.
Эта команда только помогает при создании описаний; она не делает всей работы. Вы должны отредактировать вставленный текст, так как при создании заголовка обычно используют те же слова, что используются в имени ноды, но полезное описание использует другие слова.
Вы можете визуализировать структуру разделов Texinfo-файла, используя
команду C-c C-s (texinfo-show-structure). Эта команда
показывает структуру разделов Texinfo-файла, перечисляя строки, которые
начинаются с @-команд, а именно, с команд @chapter,
@section и подобных. Эта команда создает такую же структуру,
какую представляет из себя оглавление. Эти строки отображаются в другом
буфере, называемом `*Occur*'. В том буфере вы можете установить
курсор на одной из этих строк и воспользоваться для перехода к
соответствующему разделу в Texinfo-файле последовательностью C-c
C-c (occur-mode-goto-occurrence).
@chapter, @section, и подобные строки
Texinfo-файла.
Если вы вызываете texinfo-show-structure с префиксным аргументом,
набирая C-u C-c C-s, это перечислит не только строки с
@-командами, такими как @chapter, @section и подобными,
но также и строки @node. Вы можете использовать
texinfo-show-structure с префиксным аргументом для того, чтобы
проверить, являются ли указатели `Next', `Previous' и `Up' в строке
@node правильными.
Часто, когда вы работаете над руководством, вам будете нужна только
структура текущей главы. В этом случае вы можете выделить область
буфера, структура которой вам нужна, используя команду C-x n n
(narrow-to-region), и texinfo-show-structure будет
действовать только в этой области. Чтобы снова увидеть весь буфер,
следует использовать C-x n w (widen). (тјрзСћзш Сђўцшљ `Сужение' є Руководство по GNU Emacs, для получения детальной
информации.)
Помимо предоставления команды визуализации структуры документа,
texinfo-show-structure, режим Texinfo устанавливает значение
переменной разделителя страницы таким образом, чтобы она соответствовала
@-командам уровня глав. Это дает вам возможность использовать команды
C-x ] (forward-page) и C-x [ (backward-page)
для перемещения вперед и назад по главам, а команду C-x p
(narrow-to-page) -- для сужения до главы. тјрзСћзш Сђўцшљ `Страницы' є Руководство по GNU Emacs, для получения
дополнительной информации.
В режиме Texinfo доступны команды для автоматического создания или
обновления меню и указателей на ноды. Эти команды называются
"update"-командами (командами обновления), потому что их основное
применение -- обновление Texinfo-файла после его редактирования; но вы
можете использовать их, чтобы вставить указатели `Next', `Previous' и
`Up' в строку @node, если их там еще нет, или создать меню в
файле, в котором его пока нет.
Если вы не пользуетесь командами обновления, то вам придется набирать меню и указатели на ноды вручную, а это утомительное занятие.
Вы можете использовать следующие команды обновления, чтобы
Вы можете использовать эти команды для обновления всех нод и меню в выделенной области или во всем Texinfo-файле.
Команды обновления работают только со стандартными Texinfo-файлами,
которые имеют такую же структуру, как и книги. В таких файлах, строка с
командой, объявляющей начало раздела, должна следовать сразу после
каждой строки @node, если только это не строка @node для
ноды `Top'. (Строка с командой описания структуры глав -- это
строка, начинающаяся с @chapter, @section или с другой
подобной команды.)
Вы можете вставить строку с командой описания структуры глав либо вслед
за строкой @node, либо в строке, которая следует после одиночной
строки комментария @comment, либо после одиночной строки
@ifinfo. Вы не можете вставить между строкой @node и
строкой с командой описания структуры глав больше одной строки; и
вставить вы можете только строку @comment или строку
@ifinfo.
Команды, которые действуют на весь текст в буфере, требуют, чтобы вслед
за нодой `Top' следовала нода с командой @chapter или с
эквивалентной по уровню командой. Команды обновления меню не будут
создавать основное или главное меню для Texinfo-файла, который имеет
ноды только уровня @chapter! Команды обновления меню создают
меню только внутри нод для нод более низкого уровня. Чтобы
создать меню глав, вы должны предоставить ноду `Top'.
Команды обновления меню удаляют пункты меню, которые относятся к другим Info-файлам, так как они не относятся к внутренним нодам текущего буфера. Это недостаток этих команд. Вместо пунктов меню вы можете использовать перекрестные ссылки на другие Info-файлы. Ни одна из команд обновления не затрагивает перекрестные ссылки.
В режиме Texinfo существует пять наиболее часто используемых команд
обновления: две из них -- для обновления всех указателей нод или меню в
пределах одной ноды; две -- для обновления всех указателей нод или меню
во всем файле; и одна команда, texinfo-master-menu, предназначена
для создания основного или главного меню для всего файла и (что не
является обязательным свойством этой команды) для обновления каждой ноды
и каждого меню во всем Texinfo-файле.
Команда texinfo-master-menu является основной
командой:
texinfo-master-menu требуется, чтобы
Texinfo-файл содержал ноду `Top' и по крайней мере еще одну уровнем
ниже.
После обширного редактирования Texinfo-файла вы можете ввести следующую
команду:
C-u M-x texinfo-master-menu или C-u C-c C-u mЭта команда полностью обновляет все ноды и меню за один проход.
Остальные основные команды обновления выполняют работу меньшего объема и предназначены для человека, который обновляет ноду и меню в процессе создания Texinfo-файла.
Далее перечислены оставшиеся основные команды обновления:
@node).
Если указатели `Next', `Previous' и `Up' уже были в строке
@node, то старые указатели удаляются и на их место помещаются
обновленные. При запуске этой команды с аргументом (с префиксным
аргументом, C-u, при интерактивном вызове), команда действует на
все строки @node в выделенной области.
texinfo-make-menu обновляет существующее меню,
описания из этого меню включается в новое. Это достигается с помощью
копирования описаний пунктов существующего меню в те пункты нового меню,
которые имеют те же имена нод. Если пункты меню различаются, то
описания в новое меню не копируются.
texinfo-all-menus-update
обновляет его; но она не создает новое главное меню, если его не
существует. (Для этого используйте команду
texinfo-master-menu.)
При работе над документом, в котором главное меню не нужно, можно
сделать следующее:
C-u C-c C-u C-a или C-u M-x texinfo-all-menus-updateЭто модифицирует все ноды и меню.
Переменная texinfo-column-for-description определяет позицию, по
которой выровнены описания меню. По умолчанию она равна 32, хотя часто
бывает полезно уменьшить ее до 24. Вы можете установить эту переменную
с помощью команды M-x edit-options, (ТјрзСћзш Сђўцшљ `Editing Variable Values' є Руководство по GNU Emacs)
или с помощью команды M-x set-variable (ТјрзСћзш Сђўцшљ `Examining and Setting Variables' є Руководство по GNU Emacs).
Также, команда texinfo-indent-menu-description может
использоваться, чтобы выровнять существующие описания меню по
определенной позиции. И наконец, если вы пожелаете, то вы можете
использовать команду texinfo-insert-node-lines, чтобы вставить в
файл недостающие строки @node. (тјрзСћзш Сђўцшљ Другие команды обновления, для дополнительной информации.)
Чтобы использовать команды обновления, вы должны организовать Texinfo-файл иерархически, с главами, разделами, подразделами и так далее. Когда вы создаете иерархию руководства, не `спускайтесь' больше чем на один уровень за один раз: вслед за нодой `Top' должна начинаться глава, и ни в коем случае не раздел; вслед за главой следует раздел, но не подраздел. Однако, вы можете за один раз "подняться" на любое число уровней, например от подраздела до главы.
Каждая строка @node за исключением строки для ноды `Top'
должна сопровождаться строкой с командой структурирования вроде
@chapter, @section или @unnumberedsubsec.
Каждая комбинация (строка @node)/(строка команды
структурирования) должна выглядеть подобно этой:
@node Комментарии, Минимум, Соглашения, Обзор @comment node-name, next, previous, up @section Комментарии
Или подобно этой (без строки @comment):
@node Комментарии, Минимум, Соглашения, Обзор @section Комментарии
В этом примере, `Комментарии' -- это имя и ноды, и раздела. Следующая
нода называется `Минимум', а предыдущая называется `Соглашения'. Раздел
`Комментарии' находится внутри ноды `Обзор', которая определена как
указатель`Up'. (Вместо строки @comment вы можете также вписать
строку @ifinfo.)
Если файл имеет ноду `Top', то она должна назваться `top' или `Top' и быть первой нодой в файле.
Команды обновления меню создают меню разделов внутри главы, меню подразделов внутри раздела и так далее. Это означает, что если вы хотите получить меню глав, у вас должна быть нода `Top'.
Команда makeinfo может создать Info-файл из иерархически
организованного Texinfo-файла, в котором отсутствуют указатели `Next',
`Previous' и `Up'. Как следствие этого, если вы уверены, что ваш
Texinfo-файл будет отформатирован с помощью makeinfo, команды
обновления меню вам не нужны. (тјрзСћзш Сђўцшљ Создание Info-файла, для более
детальной информации о makeinfo.) Однако, и makeinfo,
и команды texinfo-format-... требуют, чтобы вы вставили в
файл меню.
Кроме пяти основных команд обновления, режим Texinfo дает доступ к несколько менее часто используемым командам обновления:
@node перед @chapter @section,
и другими командами структурирования, если они отсутствуют.
При запуске с аргументом (с префиксным аргументом, C-u, при
интерактивном вызове), команда texinfo-insert-node-lines не
только вставляет строки @node, но также вставляет и названия
глав или разделов в качестве имен соответствующих нод. Кроме того, она
вставляет названия в качестве имен нод в уже существующие строки
@node, не имеющие имен. Так как имена нод должны быть более
краткими, чем названия разделов или глав, вы должны вручную
отредактировать вставленные имена.
Например, для того, чтобы выделить весь буфер и везде вставить строки
@node и названия, следует сделать это:
C-x h C-u M-x texinfo-insert-node-linesЭта команда вставляет в качестве имен нод в строках
@node
названия разделов; команда texinfo-start-menu-description
(ТјрзСћзш Сђўцшљ Быстрая вставка часто используемых команд.)
вставляет названия как описания пунктов меню -- это разные действия.
Однако в обоих случаях вы должны отредактировать вставленный текст.
texinfo-multiple-files-update описана в приложении о
включаемых файлах.
тјрзСћзш Сђўцшљ texinfo-multiple-files-update.
texinfo-indent-menu-description выравнивает каждое описание в
каждом меню в выделенной области. Однако, эта команда не выравнивает
вторые и последующие строки многострочного описания.
texinfo-sequential-node-update
последовательно обновляет все ноды в области.
Режим Texinfo обеспечивает отдельные команды для форматирования части или всего Texinfo-файла для Info. Часто, когда вы пишете документ, вы хотите отформатировать только часть файла -- то есть некую область.
Вы можете использовать команду texinfo-format-region или
makeinfo-region, чтобы отформатировать область:
Вы можете использовать команду texinfo-format-buffer или
makeinfo-buffer для того, чтобы отформатировать весь буфер:
Например, после создания Texinfo-файла вы можете набрать следующее:
C-u C-c C-u m или C-u M-x texinfo-master-menu
Это модифицирует все ноды и меню. Затем наберите следующее, чтобы создать Info-файл:
C-c C-m C-b или M-x makeinfo-buffer
Для того, чтобы могли работать TeX или команды форматирования для
Info, в заголовке файла должна быть строка @setfilename.
тјрзСћзш Сђўцшљ Создание Info-файла, для более подробного описания форматирования для Info.
Набор и печать Texinfo-файла -- процесс многоступенчатый, в котором вы
сначала создаете файл для печати (называемый DVI-файлом) и затем
печатаете его. Кроме того, вы можете также создавать именные указатели.
Чтобы сделать это, вы должны выполнить команду texindex после
первичного выполнения команды tex; а затем выполнить команду
tex снова. Или следует выполнить команду texi2dvi,
которая сама автоматически создает именные указатели.
(ТјрзСћзш Сђўцшљ Форматирование с помощью texi2dvi).
Часто, когда вы пишете документ, вы хотите вывести на печать только
часть файла, чтобы увидеть, как она будет выглядеть. Для этой цели вы
можете использовать команду texinfo-tex-region или похожие
команды. Используйте команду texinfo-tex-buffer, чтобы
отформатировать весь буфер.
texi2dvi для буфера. Помимо запуска TeX
для буфера, эта команда автоматически создает или обновляет именные
указатели.
texindex, чтобы отсортировать именные указатели
Texinfo-файла, отформатированного с помощью команды
texinfo-tex-region. Команда texinfo-tex-region не
запускает texindex автоматически; она только выполняет команду
tex. Вы должны запустить команду texinfo-tex-region во
второй раз после сортировки необработанного именных указателей командой
texindex. (Обычно, когда форматируют область, именные
указатели не формируют; это делается только для всего буфера. Сейчас,
когда существует команда texi2dvi, обсуждаемая команда
практически не нужна.)
texinfo-tex-buffer или texinfo-tex-region.
Для того, чтобы команда texinfo-tex-region или
texinfo-tex-buffer сработала, файл должен начинаться со
строки `\input texinfo' и должен включать строку @settitle.
Файл должен заканчиваться командой @bye, набранной в отдельной
строке. (Когда вы используете команду texinfo-tex-region, вы
должны окружить @settitle строками start-of-header и
end-of-header.)
тјрзСћзш Сђўцшљ Форматирование и печать твердой копии, для подробного описания других команд для TeX, вроде
tex-show-print-queue.
Каждый набор команд режима Texinfo имеет привязки по умолчанию, начинающиеся с одних ключей. Все команды, созданные специально для режима Texinfo, начинаются с C-c. Ключи отчасти мнемонические.
Команды вставки вызываются с помощью набора двух C-c и затем первого символа вставляемой @-команды. (Вероятно правильнее было бы для мнемоничности использовать C-c C-i, от `custom insert', но C-c C-c набирается гораздо быстрее.)
C-c C-c c Вставить `@code'.
C-c C-c d Вставить `@dfn'.
C-c C-c e Вставить `@end'.
C-c C-c i Вставить `@item'.
C-c C-c n Вставить `@node'.
C-c C-c s Вставить `@samp'.
C-c C-c v Вставить `@var'.
C-c C-c { Вставить фигурные скобки.
C-c C-c ]
C-c C-c } Перейти за пределы огражденного скобками участка.
C-c C-c C-d Вставить название раздела для ноды
в месте для описания в пункте меню.
Команда texinfo-show-structure часто используется внутри суженной
области.
C-c C-s Перечислить все заголовки.
Команда texinfo-master-menu создает главное меню; может
использоваться для того, чтобы модифицировать каждую ноду и каждое меню
в файле.
C-c C-u m M-x texinfo-master-menu
Создать или обновить главное меню.
C-u C-c C-u m С C-u в качестве префиксного
аргумента, сначала создать или обновить
все ноды и обычные меню, а затем
создать главное меню.
Команды обновления указателей вызываются при наборе C-c C-u и
затем или C-n для texinfo-update-node, или C-e для
texinfo-every-node-update.
C-c C-u C-n Обновить ноду. C-c C-u C-e Обновить все ноды в буфере.
Команды обновления меню вызываются при наборе C-c C-u, и затем или
C-m для texinfo-make-menu, или C-a для
texinfo-all-menus-update. Чтобы обновить и ноды, и меню в одно и
то же время, перед набором командной последовательности C-c C-u
C-a наберите C-u.
C-c C-u C-m Создать или обновить меню.
C-c C-u C-a Создать или обновить все
меню в буфере.
C-u C-c C-u C-a С префиксным аргументом C-u,
сначала создать или обновить все ноды,
а затем создать или обновить все меню.
Команды форматирования для Info, которые написаны на языке Emacs Lisp, вызываются при наборе C-c C-e и затем или C-r для выделенной области, или C-b для всего буфера.
Команды форматирования для Info, которые написаны на Си и основаны на
программе makeinfo, вызываются при наборе C-c C-m и
затем или C-r для выделенной области, или C-b для всего
буфера.
Использование команды texinfo-format...:
C-c C-e C-r Форматировать область. C-c C-e C-b Форматировать буфер.
Использование makeinfo:
C-c C-m C-r Форматировать область. C-c C-m C-b Форматировать буфер. C-c C-m C-l Обновить выходной буферmakeinfo. C-c C-m C-k Прекратить выполнениеmakeinfo.
Команды набора и печати через TeX вызываются при наборе
последовательности C-c C-t и затем другой управляющей
последовательности: C-r для texinfo-tex-region, C-b
для texinfo-tex-buffer и так далее.
C-c C-t C-r Выполнить TeX для области. C-c C-t C-b Выполнитьtexi2dviдля буфера. C-c C-t C-i Выполнитьtexindex. C-c C-t C-p Напечатать DVI-файл. C-c C-t C-q Показать очередь заданий на принтер. C-c C-t C-d Удалить задание из очереди заданий на принтер. C-c C-t C-k Прекратить выполнение команды форматирования в TeX. C-c C-t C-x Выйти из приостановленного задания форматирования в TeX. C-c C-t C-l Обновить выходной буфер.
Для вызова остальных команд обновления нет стандартных ключей, потому что они используются редко.
M-x texinfo-insert-node-lines
Вставить пропущенные строки @node
в области. С префиксным аргументом C-u,
использует названия разделов, как имена нод.
M-x texinfo-multiple-files-update
Обновить документ, состоящий из нескольких файлов.
С префиксным аргументом C-u 2, создать или
обновить все ноды или меню во всех файлах документа.
M-x texinfo-indent-menu-description
Выровнять описания.
M-x texinfo-sequential-node-update
Вставить указатели на ноды в строгой
последовательности.