Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 18
Текст из файла (страница 18)
Для многих языков,в том числе и русского, он вводит так называемые сокращения (shorthands). Сокращение по сути является командой, но начинается, с символа двойных кавычек", а не с обратного слеша, как обычные команды LATEX’а. С помощью сокращенийпоследний пример можно переписать следующим образом:"‘Лапки"’ и "<ёлочки">„Лапки“ и «ёлочки»После сокращений не нужно ставить {} или каким-то иным способом обозначатьих окончание, что приходится проделывать c обычными командами, которые иначе «съедают» пробелы после себя.Платой за удобства является то, что символ " становится «активным», т.
е. ведёт себя в некоторых отношениях подобно обратному слешу \. Обычно это никакне проявляется, но в технически изощрённых документах, подобных нашей книге, где приходится докапываться до «сути» LATEX’а, доставляет массу неудобств.К счастью для «изощренцев» активность символа " можно отключать и включать соответственно при помощи деклараций\shorthandoff{shorthand}\shorthandon{shorthand}(babel)793.6. «Вавилонское столпотворение»что мы сразу и продемонстрируем:\shorthandoff{"} "‘Лапки"’ и "<ёлочки">"‘Лапки"’ и "<ёлочки">Декларации\useshorthands{s}\aliasshorthand{s1 }{s2 }\defineshorthand{shorthand}{cmd}(babel)позволяют вводить новые сокращения.
Первую из них, в отличие от двух других, следует использовать только в преамбуле документа. Она объявляет, чтосокращения могут начинаться с символа s. Например, после \useshorthands{/}символ «/» можно использовать для создания новых сокращений. Вторая декларация объявляет, что сокращения, начинающиеся с символа s1 , можно использовать как синонимы существующих сокращений, начинающихся с символаs2 . Например, после \aliasshorthand{"}{/} сокращения /< и "< будут иметьодинаковый эффект:\aliasshorthand{"}{/} /‘Лапки/’ и /<ёлочки/>„Лапки“ и «ёлочки»Наконец, декларация \defineshorthand сопоставляет сокращение shorthand команде cmd, причём сокращение shorthand может состоять из одного или двухсимволов:\defineshorthand{"1}{\flqq}Такие вот «ёлочки»!\defineshorthand{"2}{\frqq}Такие вот "1ёлочки"2!Декларация(babel)\languageshorthands{language}задействует все сокращения, заданные для языка language; не стоит повторять,что language должен быть перечислен в списке языков при загрузке пакета babel.Следующий пример станет понятен, если учесть, что при выборе английскогоязыка сокращений нет:\languageshorthands{english} "<Ёлочек"> нет.3.6.3."<Ёлочек"> нет.Таблицы переносовМы вскользь упомянули, что переключение языка сопровождается сменой таблицы переносов.
Она используется алгоритмом переноса слов по слогам. Все необходимые таблицы переносов должны быть установлены при генерации форматаLATEX, иначе компилятор даже не будет пытаться переносить слова. Хотя поддержка русского языка с 1999 года является обязательной составной частью любой версии LATEX’а, по умолчанию алгоритм переноса русских слов, как правило,не устанавливаются. Чтобы иметь возможность работать с русскими текстами,после завершения стандартной процедуры установки необходимо предпринятьещё ряд шагов, перечисленных в приложении B.1.803.6.4.Глава 3. Печатный документЗамена ключевых словМы неоднократно писали (последний раз на странице 75), что для замены ключевых слов, которые LATEX автоматически вставляет в самых разных местах, необходимо изменить определение соответствующей команды \cmdname при помощи\renewcommand. Это истинная правда, но лишь часть всей правды.
Действительно, команды \cmdname печатают разный текст в зависимости от текущего языка, поэтому переопределение любой такой команды посредством \renewcommandостается в силе лишь до следующего переключения языка. Далее новое значение будет потеряно, поскольку любая из команд выбора языка восстанавливаетзначения всех команд \cmdname, заданные пакетом babel для соответствующегоязыка:1. \renewcommand{\appendixname}{Дополнение}\appendixname\\ 1. Дополнение2. Appendix2. \selectlanguage{english}\appendixname\\3.
Приложение3. \selectlanguage{russian}\appendixnameСписок определений всех команд \cmdname для конкретного языка language хранится в команде\captionslanguage(babel)В частности, для русского языка — это команда \captionsrussian, для английского — \captionsenglish и т. д. Имеется также команда\datelanguage(babel)которая содержит определение команды \today, печатающей текущую дату наязыке language, и команда\extraslanguage(babel)содержащая все прочие определения, необходимые для заданного языка, такиекак типографские сокращения для набора диакритических знаков.Добавление или изменение определений, хранящихся в указанных трёх командах, производится при помощи команды\addto{cmd}{defs}(babel)где cmd обозначает любую из команд \captionslanguage, \datelanguage или\extraslanguage, а второй аргумент defs должен содержать дополнительныеопределения списка команд, хранимых в \captionslanguage.
Что-либо делатьс командами \datelanguage и \extraslanguage вряд ли стоит, поэтому мы ограничимся модификацией приведённого выше примера, чтобы показать, как переименовать ключевое слово «Приложение» раз и навсегда:\addto{\captionsrussian}{\renewcommand{\appendixname}{Дополнение}}1. \selectlanguage{russian}\appendixname\\2. \selectlanguage{english}\appendixname\\3. \selectlanguage{russian}\appendixname1. Дополнение2. Appendix3. Дополнение3.7.
Перекрёстное цитирование81Любые изменения, произведённые через \captionslanguage, \datelanguage или\extraslanguage, вступают в силу после первого явного переключения на соответствующий язык. Именно поэтому мы добавили команду \selectlanguageперед первым применением \appendixname.Можно рекомендовать собрать все изменения ключевых слов в преамбулевходного файла вслед за командой \usepackage, которая загружает пакет babel.Во-первых, там легче отслеживать подобные изменения.
Во-вторых, команда\begin{document} автоматически активизирует язык, указанный последним внеобязательном аргументе \usepackage, выполняя команду \selectlanguage ссоответствующим аргументом. Поэтому любые изменения, произведенные с помощью \addto немедленно вступят в силу. Напротив, изменение ключевых словпосредством команды \renewcommand, размещённой в преамбуле, но вне второго аргумента \addto, совершенно бессмысленно.
Любое такое изменение будетотменено командой \begin{document}.3.7.Перекрёстное цитированиеМы уже знаем, как изменить способ отображения номера раздела. Интереснобыло бы также понять, а зачем вообще нумеруют разделы? Совершенно ясно,для чего пронумерованы главы в четырёх томах романа «Война и мир» — онине имеют названий. Впрочем, Жюль Верн обычно находил, что и как назвать,хотя номера тоже писал, вероятно, чтобы не сбиться со счёта. Зачем нумеруютпараграфы в учебниках, знает каждый школьник: «А как иначе записать домашнее задание в дневник?» Автор учебника ответит иначе: «Чтобы в параграфе 10можно было бы сослаться на правило из параграфа 2».Схема организации печатного документа в LATEX’e позволяет делать ссылкивперед и назад по тексту документа на номера любых пронумерованных объектов.
При изменении числа таких объектов ссылки автоматически перенумеруются. Помимо разделов, номера могут иметь рисунки, таблицы, уравнения, записив списках. LATEX даёт возможность легко определять новые нумерованные объекты в дополнение к перечисленным. Схема организации автоматических ссылокназывается перекрёстным цитированием. Мы поясним её на примере ссылок наномера разделов.
Особенности организации ссылок на рисунки и таблицы дополнительно рассматриваются в главе 11, а на цитированную литературу — вглаве 13. Ссылки на уравнения (глава 6) и пронумерованные записи в списках(глава 5) организуются совершенно так же, как ссылки на разделы печатногодокумента.Чтобы сослаться на какой-либо раздел, необходимо прежде всего пометитьего. Метку ставит команда \label. Команда \ref печатает по этой метке номер помеченного раздела, а команда \pageref печатает ссылку на номер страницы, на которую попадает команда \label (помеченный объект может заниматьнесколько страниц). Итак, достаточно всего трёх команд:82Глава 3.
Печатный документ\label{key}\ref{key}\pageref{key}Здесь key — ключ метки, состоящий из любой последовательности букв, цифри знаков пунктуации5 . Прописные и строчные буквы различаются. По команде \label компилятор запоминает под именем key значение счётчика ctr, соответствующего текущему пронумерованному объекту, а также номер страницы, где расположена команда. Счётчик объявляется текущим (по терминологии LATEX’а — ref-значением) декларацией \refstepcounter (раздел 2.9). Онаиспользуется командами секционирования и всеми процедурами, которые чтонибудь нумеруют.
В процедурах figure и table, используемых для размещениярисунков и таблиц, текущее ref-значение вырабатывает команда \caption, которая печатает подписи к рисункам и таблицам. Форма представления ссылки,которую использует команда \ref, определяется командой \thectr, соответствующей счётчику ctr. Номер страницы, печатаемый командой \pageref, зависитот определения \thepage.Запоминая метку, компилятор записывает её в файлы с расширением aux. Записанная информация из этих файлов считывается командой \begin{document}в начале каждой обработки входного файла компилятором.