пятница, 14 октября 2011 г.

Утилита tlmgr для работы с дистрибутивом TeX Live

Утилита tlmgr в TeX Live

В дистрибутиве TeX Live начиная с 2009 г. появилась утилита tlmgr, с помощью которой можно проводить настройку дистрибутива, управлять пакетами, устанавливать, обновлять и удалять пакеты, создавать форматы и прочее.

Примеры её использования показаны ниже.

Для тех кто использует графический интерфейс программы tlmgr

тот сможет найти всё необходимое используя мышь и доступные кнопки.

В этой заметке я расскажу как выполнять все те же действия используя команды tlmgr.

Установка репозитория по умолчанию

Для установки пакетов, обновления пакетов нужно выбрать репозиторий. Можно выбрать некоторый постоянный репозиторий, либо установить в качестве репозитория мета-репозиторий

sudo tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet

Мета-репозиторий выдаст адрес ближайшего зеркала репозитория.

Обновление установленных пакетов

Обычно дистрибутив TeX Live устанавливается от имени администратора, поэтому от имени администратора нужно обновлять дистрибутив. Распространённая практика в таких случая, запускать команды через sudo. Вот типичная команда для обновления дистрибутива:

sudo tlmgr update --self --all

С её помощью будет обновлена программа tlmgr если для неё есть обновления, а затем и все установленные пакеты.

Какому пакету принадлежит этот файл?

Иногда возникает вопрос, какому пакету принадлежит тот или иной файл. Или какой пакет предоставляет файл с таким названием. Пользователям знакомым с утилитами управления пакетами дистрибутивов Linux должно быть знаком подобный вопрос. Утилита tlmgr позволяет дать на него ответ в случае TeX Live. Предположим, что нам нужно узнать какой пакет предоставляет файл класса article, article.cls, для этого выполним в терминале:

tlmgr search --file article.cls
bangtex:
        texmf-dist/tex/latex/bangtex/barticle.cls
einfuehrung:
        texmf-dist/doc/latex/einfuehrung/exaarticle.cls
elsarticle:
        texmf-dist/tex/latex/elsarticle/elsarticle.cls
extsizes:
        texmf-dist/tex/latex/extsizes/extarticle.cls
jsclasses:
        texmf-dist/tex/platex/jsclasses/jsarticle.cls
latex:
        texmf-dist/tex/latex/base/article.cls
luatexja:
        texmf-dist/tex/luatex/luatexja/ltjclasses/ltjarticle.cls
        texmf-dist/tex/luatex/luatexja/ltjsclasses/ltjsarticle.cls
math-e:
        texmf-dist/doc/latex/math-e/exaarticle.cls
presentations-en:
        texmf-dist/doc/latex/presentations-en/exaarticle.cls
pstricks-examples:
        texmf-dist/doc/latex/pstricks-examples/exaarticle.cls
ptex:
        texmf-dist/tex/platex/base/jarticle.cls
        texmf-dist/tex/platex/base/tarticle.cls
seuthesis:
        texmf-dist/doc/latex/seuthesis/zharticle/zharticle.cls
skb:
        texmf-dist/tex/latex/skb/skbarticle.cls
uptex:
        texmf-dist/tex/uplatex/base/ujarticle.cls
        texmf-dist/tex/uplatex/base/utarticle.cls

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

Чтобы получить однозначный ответ нужно уточнить вопрос, например запрос

tlmgr search --file tex/latex/base/article.cls
latex:
        texmf-dist/tex/latex/base/article.cls

выдаст только один пакет. С помощью запроса

tlmgr show latex
package:     latex
category:    Package
shortdesc:   A TeX macro package that defines LaTeX.
longdesc:    LaTeX is a widely-used macro package for TeX, providing many basic document formating commands extended by a wide range of packages. It is a development of Leslie Lamport's original LaTeX 2.09, and superseded the older system in June 1994. The basic distribution is catalogued separately, at latex-base; apart from a large set of contributed packages and third-party documentation (elsewhere on the archive), the distribution includes: - a bunch of required packages, which LaTeX authors are "entitled to assume" will be present on any system running LaTeX; and - a minimal set of documentation detailing differences from the 'old' version of LaTeX in the areas of user commands, font selection and control, class and package writing, font encodings, configuration options and modification of LaTeX. For downloading details, see the linked catalogue entries above.
installed:   Yes
revision:    27907
cat-date:    2012-07-07 16:18:52 +0200
cat-license: lppl
collection:  collection-latex

получим подробную информацию о пакете.

Дата: 2013-01-02T17:50+0900

Автор: Владимир Ломов

Org version 7.9.2 with Emacs version 24

Validate XHTML 1.0

вторник, 11 октября 2011 г.

TeXworks, кодировка документа и другое

TeXworks и кодировки текста

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

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

По умолчанию TeXworks будет работать в кодировке Юникод (utf-8), если вы не настроили его на какую-нибудь другую кодировку. Также, при открытии любого файла будет использована эта кодировка. Как быть, если вам нужна кодировка DOS или Windows (или, под другому, кодировки cp866 и cp1251, в терминах Windows) или KOI8 (koi8-r)? Как быть если вам нужно открыть такой документ?

Всё очень просто. Первое что нужно сделать, это узнать какие кодировки поддерживает ваш TeXworks. Для этого запустите программу TeXworks и выберите «Правка» → «Настройки…» → (вкладка) «Редактор» → (пункт) «Кодировка:». В указанном пункте вы найдёте список доступных кодировок. Для русского алфавита доступны кодировки

  • кодировка Юникод, UTF-8;
  • кодировка по ISO-8859, ISO-8859-5;
  • DOS кодировка или cp866, IBM866;
  • KOI8 кодировка, KOI8-R;
  • Windows кодировка или cp1251, WINDOWS-1251.

Все кодировки, за исключением первой — 8-битные.

Чтобы заставить TeXworks использовать нужную кодировку, следует добавить в начале файла мета-комментарий

% !TEX encoding = IBM866

Ниже приведены примеры файлов для распространённых кодировок (из-за особенностей html в документе можно использовать только одну кодировку, в примерах показано как указывать об используемой кодировке, сам текст примеров набран в кодировке UTF-8):

Пример с кодировкой UTF-8.

% !TEX encoding = UTF-8
% !TEX program = pdflatex
\documentclass{article}

\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}

\begin{document}

Проба пера.

\end{document}

%%% Local Variables:
%%% fill-column: 96
%%% mode: latex
%%% coding: utf-8
%%% TeX-PDF-mode: t
%%% End:

Пример с кодировкой CP866.

% !TEX encoding = IBM866
% !TEX program = pdflatex
\documentclass{article}

\usepackage[T2A]{fontenc}
\usepackage[cp866]{inputenc}
\usepackage[russian]{babel}

\begin{document}

Проба пера.

\end{document}

%%% Local Variables:
%%% fill-column: 96
%%% mode: latex
%%% coding: cp866
%%% TeX-PDF-mode: t
%%% End:

Пример с кодировкой CP1251.

% !TEX encoding = windows-1251
% !TEX program = pdflatex
\documentclass{article}

\usepackage[T2A]{fontenc}
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}

\begin{document}

Проба пера.

\end{document}

%%% Local Variables:
%%% fill-column: 96
%%% mode: latex
%%% coding: cp1251
%%% TeX-PDF-mode: t
%%% End:

Пример с кодировкой KOI8-R.

% !TEX encoding = KOI8-R
% !TEX program = pdflatex
\documentclass{article}

\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}

\begin{document}

Проба пера.

\end{document}

%%% Local Variables:
%%% fill-column: 96
%%% mode: latex
%%% coding: koi8-r
%%% TeX-PDF-mode: t
%%% End:

Обзор структуры документа и главный файл документа

При помощи мета-комментариев можно задавать и другие параметры документа в редакторе TeXworks.

Движок для текущего файла

Например, в программе texworks можно указать какой движок использовать по умолчанию, для этого идём «Правка» → «Настройки…» → (вкладка) «Вёрстка» → (пункт) «Инструменты вёрстки» → (пункт) «По умолчанию»

Кодировка UTF-8 Кодировка DOS Кодировка Windows Кодировка KOI8 Выбор движка по умолчанию.

Если нужно поменять движок только для одного файла используем мета-комментарий program:

% !TEX program = lualatex

В примерах выше использовался как раз такой мета-комментарий.

Обзор структуры

Если вы у вас большой документ, в котором вы используете команды секционирования, такие как \section и другие, то вы можете просмотреть структуру документа и использовать её для навигации по документу, для этого выберите «Окно» → «Теги», вот пример

Однако самое удобное то, что можно определять свои собственные теги в любом месте документа

%: tag 1

которые будут показаны под заголовком «Закладки»

Главный файл документа

Возвращаясь к теме большого документа вы вероятно разделили его на несколько частей-файлов. Каждый из файлов частей можно открыть в texworks, но PDF файл документа только один. Поэтому в редакторе texworks, как и во многих других редакторах, есть понятие главного файла. Чтобы указать какой файл является главным каждый файл должен содержать такой мета-комментарий

% !TEX root = master.ltx

где master.ltx — главный файл документа.

Для тех, кто ещё использует latex и dvips

Программа texworks идеально подходит для тех, кто желает получить PDF файл в результате вёрстки. Движки pdflatex, xelatex и lualatex выдают в результате вёрстки PDF файл, в отличии от традиционного движка latex, который выдаёт в результате вёрстки файл в DVI формате. Конечно его можно преобразовать в PS или PDF формат при помощи dvips, dvipdfm или по цепочке DVI → PS → PDF.

Если вам по разным причинам подходит только движок latex тем не менее вы можете использовать редактор texworks, но чтобы не потерять возможность переключаться от исходного документа к PDF и обратно нужно определить новый инструмент вёрстки. Выберите «Правка» → «Настройки…» → «Вёрстка» → «Инструменты вёрстки», нажмите кнопку «+», в окне введите название инструмента и параметры как показано ниже

Сценарий latex2pdf.bat приведён ниже

@echo off
@latex -synctex=1 "%1.tex" && dvips "%1.dvi" && ps2pdf "%1.ps"

Его следует поместить в один из каталогов, перечисленных в системной переменной PATH. Например в каталог C:\bin, если он указан в переменной PATH.

Теперь выбрав в качестве инструмента по умолчанию latex2pdf вы сможете использовать традиционный движок latex вместе с texworks.

Если у вас возникли пробелы со сценарием latex2pdf.bat попробуйте удалить параметр -synctex=1.

Автодополнение команд

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

Набирая текст в формате LaTeX часто приходится вводить команды, начинающиеся с \ (обратной косой чертой). От этого не избавиться, но можно упростить себе жизнь. Чтобы понять как действует автодополнение нужно попробовать его в «живую».

К примеру, чтобы получить в документе символ \(\alpha\), нужно ввести команду \alpha. Вместо того чтобы вводить все 6 символов можно ввести xa и нажать на клавишу TAB.

Если дополнение не единственное, то повторное нажатие на клавишу TAB, будет переключать между другими возможными дополнениями.

Посмотреть весь список комбинаций для которых есть дополнения, сами дополнения или добавить в список свои комбинации можно в файле tw-latex.txt, расположенном в каталоге completion, находящемся в каталоге ресурсов TeXworks:

  • для Windows Vista/7/8 это каталог C:\Users\USERNAME\TeXworks\;
  • для GNU/Linux это каталог ~/.TeXworks/.

Создание своих комбинаций

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

bbmat:=\begin{bmatrix}#RET##INS##RET#\end{bmatrix}•

Комбинация bbmat после нажатия TAB превратится в окружение

\begin{bmatrix}

\end{bmatrix}•

После раскрытия дополнения курсор будет расположен внутри окружения. Вместо #RET# будет вставлен разрыв строки, после вставки дополнения курсор будет помещён в месте маркера #INS#, такой маркер может только один (все остальные просто игнорируются). Символ (жирная помета, точка, юникод символ U+2022 (BULLET)), метка-заполнитель используется для переключения фокуса курсора в документе: нажимая комбинацию клавиш Ctrl-TAB курсор будет последовательно переключаться между метками-заполнителями, позволяя быстро вводить текст в нужном месте.

Дата: 2013-01-02T23:16+0900

Автор: Владимир Ломов

Org version 7.9.2 with Emacs version 24

Validate XHTML 1.0

Рисунки в LaTeX документе

Поговорим о том как и в каком формате вставлять рисунке в LaTeX документы.

Форматы рисунков

Самым часто используемым в LaTeX документах графическим форматом является формат EPS (Encapsulated PostScript). Второй по популярности и распространённости — это формат PDF (Portable Document Format). Традиционно формат EPS используют вместе с движком latex, тогда как формат PDF используют с движком pdflatex.

О движках

Первым появился движок latex, потом — движок pdflatex. Стоит отличать формат LaTeX и движок latex. Первый — это формальное описание команд, окружений, коллекции стандартных классов и приёмов для набора документов. Второе — обычная программа, используемая для вёрстки документа, набранного в формате LaTeX, в файл DVI (DeVice Independent). Документ в формате DVI можно преобразовать далее в PS или PDF файл и просмотреть его на экране монитора или распечатать. Обычно цепочка действий такова:

  • latex → DVI файл,

  • dvips → PS файл,

    • ps2pdf → PDF файл из PS,

  • dvipdfm → PDF файл,

Позже появилась программа, которая создавала сразу же PDF файл из LaTeX документа — движок pdflatex.

Кроме формата LaTeX есть обычный формат TeX (plain tex) и движок для него — tex, а движок для вёрстки документа в PDF формат — pdftex.

Вот известные движки:

  • latex — традиционный движок, верстает документ в DVI формат;

  • pdflatex — этот движок, как следует из названия, верстает документ в формат PDF, в остальном — ничем не отличается от latex;

  • xelatex — один из новых движок, верстает документ в PDF формат, поддерживает напрямую кодировку юникод, шрифты в форматах TTF, OTF и многое другое;

  • lualatex — новый движок, также верстает документ в PDF формат, но имеет встроенный язык программирования Lua, поддерживает напрямую кодировку юникод, шрифты в формате OTF и TTF;

  • dvilualatex — вариант движка lualatex, но в результате вёрстки выдаёт документ в формате DVI.

Пара dvilualatex и lualatex похожа на пару latex и pdflatex в том, что первая программа в паре верстает документ в DVI, вторая — в PDF.

Формат ConTeXt

Кроме форматов LaTeX и (plain) TeX также распространён формат ConTeXt. Этот формат может работать с движками pdftex, xetex, так называемый формат MkII, и с движком luatex — формат MkIV. ConTeXt позволяет использовать рисунки в форматах PDF, EPS, MPS, SVG. Но об этом не в этой заметке.

Как вставлять рисунки в документ

В зависимости от используемого движка в документе можно использовать либо рисунки в формате EPS, либо в формате PDF. Именно, если движок верстает документ в DVI, тогда следует использовать только формат EPS (см. детали ниже), если движок верстает документ в PDF — следует использовать рисунки в формате PDF.

Стандартный способ вставки рисунков в документ предполагает использование пакета graphicx и команды \includegraphics. Пример ниже.

Пример №1. Самый простой пример вставки рисунка в LaTeX документ
\documentclass{article}     %%% <1>

\usepackage{graphicx}       %%% <2>

\begin{document}

\includegraphics{image1}    %%% <3>

\end{document}
  1. Можно использовать любой другой стандартный класс документа, см. документацию.

  2. Обязателен при вставки рисунков в документ.

  3. Эта команда вставит рисунок в данном месте документа. Здесь image1 — это первичное имя файла, например для рисунка в формате EPS полное имя файла — image1.eps, для рисунка в формате PDF — image1.pdf.

«Детские» вопросы

  1. «А как же движок узнает полное имя файла?»

    Ответ очень простой — никак, он не делает никаких предположений относительно полного имени файла, он просто пытается вставить файл с указанным названием. Всё дело в пакете graphicx, он достаточно «сообразительный», он «знает», что для движка latex нужен файл image1.eps, а для движка pdflateximage1.pdf. Если имеются два файла — image1.eps и image1.pdf, то движок latex будет использовать файла image1.eps, а движок pdflatex — файл image1.pdf!

  2. «Ну и в чём преимущество, выгода, использовать только первичное имя файла?»

    А в том, что можно сверстать один и тот же документ, ничего не изменив в нём как в DVI/PS, так и в PDF формат, воспользовавшись либо движком latex, либо движком pdflatex. НИЧЕГО НЕ ИЗМЕНИВ! Кстати, часто встречаются ситуации, когда на разных этапах или разным людям нужны документы в разных форматах. Это — решение для таких ситуаций.

Небольшое техническое отступление и исследование

«Всё течёт, всё изменяется» и в описанной схеме появляются интересные подробности. Первое о чём следует сказать, это что движок xelatex позволяет вставлять рисунки не только в формате PDF, но и EPS! Дело в том, что в действительности движок xelatex не верстает документ непосредственно в PDF формат, а создаёт промежуточный файл в формате XDV (eXtended DeVice independent), который сразу же преобразуется с помощью программы xdvipdfmx в PDF документ. На стадии работы программы xdvipdfmx рисунок EPS автоматически преобразуется в формат PDF. Но происходит это незаметно для пользователя.

Может быть к неудовольствию части пользователей LaTeX, такого преобразования над EPS файлами движки pdflatex и lualatex не делают, поэтому напрямую вставлять рисунки в формате EPS они не могут. Пользователю следует самостоятельно преобразовать EPS рисунки в PDF формат. Для этого есть небольшая программа epstopdf. Пример использования программы ниже.

Пример преобразования рисунка из EPS в PDF формат
$ epstopdf image1.eps

После чего появится файл image1.pdf.

Для того, чтобы упростить переход пользователей к движку pdflatex и сделать совместное использование движков latex и pdflatex более простым был разработан пакет epstopdf (не путать с программой epstopdf), который позволяет на лету преобразовать рисунок в EPS формате в PDF и вставить его в документ. Типичный пример документа и ситуации его использования описаны ниже.

Пример №2. Использование пакета epstopdf
\documentclass{article}

\usepackage{graphicx}
\usepackage{epstopdf}

\begin{document}

\includegraphics{image1}

\end{document}

Допустим, что мы работаем над документом в формате LaTeX, вставляем рисунки в формате EPS, так что у нас все рисунки в этом формате. Всё работает нормально, движок latex верстает документ в DVI, а программа dvips выдаёт из DVI файла — PS документ, который мы просматриваем на экране и выводим на печать. Если вдруг потребуется перевести документ в PDF формат, то преобразование PS в PDF выполнит программа ps2pdf. Но что делать, если потребуется сверстать документ с помощью pdflatex? Что делать с рисунками? О варианте с преобразованием EPS в PDF при помощи программы epstopdf говорилось выше, а если файлов много? Воспользуемся пакетом epstopdf как в примере. Что же произойдёт? При вёрстке движком pdflatex пакет на лету преобразует файлы EPS в PDF (с помощью той же программы epstopdf), после чего PDF рисунки будут вставлены в документ.

Ранее пакет при преобразовании из файла image1.eps создавал файл image1.pdf, независимо от того, был файл с таким именем или нет. Сейчас пакет для файла image1.eps создаёт image1-eps-converted-to.pdf.

Поддержка пакета epstopdf разными дистрибутивами

Чтобы определить степень поддержки разными дистрибутивами TeX пакета epstopdf было проведено тестирование на 4 документах. В тестировании участвовали:

  • MiKTeX 2.9 (обновлённый по состоянию на 06-10-2011), установленный в Windows;

  • TeX Live 2011 (обновлённый по состоянию на 06-10-2011), установленный в ОС Linux и в Windows;

  • TeX Live 2009, установленный из репозиториев в дистрибутиве Ubuntu; версия TL2009 появилась в Ubuntu начиная с Lucid (10.04) и доступна в текущей ветке Natty (11.04);

  • TeX Live 2007, установленный из репозиториев в дистрибутиве Fedora 15.

TeX Live 2011 проверялся тремя способами: непосредственно в Linux, непосредственно в Windows и подключением ресурса с Linux машины с доступными win32 программами (samba share и net use).

Table 1. Тестовые варианты

T1

T2

T3

T4

файл

ex1.ltx

ex2.ltx

ex3.ltx

ex4.ltx

описание

см. пример № 1

см. пример №2

см. пример №1

см. пример №2

формат рисунка

EPS

EPS

EPS, PDF

EPS, PDF

Результаты тестирования приведены ниже.

Table 2. Результаты тестирования

MiKTeX

TL2011/L

TL2011/W

TL2009

TL2007

T1

+ + - + -

+ + + + +

+ + + + +

+ + - + -

+ N/A - N/A N/A

T2

+ + + + -

+ + + + +

+ + + + +

+ + + + +

+ N/A + N/A N/A

T3

+ + + + +

+ + + + +

+ + + + +

+ + + + +

+ N/A + N/A N/A

T4

+ + + + +

+ + + + +

+ + + + +

+ + + + +

+ N/A + N/A N/A

  • «+» вёрстка документа прошла успешно,

  • «-» сверстать документ не удалось.

Порядок следования движков в таблице: latex, dvilualatex, pdflatex, xelatex, lualatex.

Note
Замечания
  • В TeX Live 2011 по умолчанию включено использование \write18 для ограниченного списка программ (в который входит epstopdf). Без этого, пакет epstopdf не сможет работать. Положительные результаты для движков pdflatex и lualatex в тесте № 1 — из-за более новых версий пакетов, в частности, теперь пакет graphicx без помощи пакета epstopdf может «узнать» о работе с PDF движками и на лету перегнать EPS в PDF.

  • При наличии обоих файлов — EPS и PDF — движок xelatex будет использовать PDF файл.

  • Начиная с TeX Live 2009 (?) при конвертации EPS в PDF на лету создаётся файл image1-eps-converted-to.pdf, до этого создавался файл image1.pdf.

  • В Ubuntu и Fedora 15 (TL2009 и TL2007 соответственно) по умолчанию выключено использование \write18, представленные результаты для них — при включенном параметре shell_escape, который позволяет использовать механизм \write18. Это касается движков pdflatex и lualatex в тесте № 2. Если используется значение по умолчанию для параметра shell_escape, тогда результаты движков pdflatex и lualatex для теста №2 в таблице для TL2007 и TL2009 — «-».

Выводы

Если вы планируете использовать оба движка — latex и pdflatex — и вставлять рисунки в документ, то убедитесь, что

  1. документ использует пакет graphicx;

  2. рисунки вставляются командой \includegraphics, без указания расширения файла-рисунка, т.е. просто указано первичное имя файла;

  3. каждый рисунок представлен в двух форматах — двух файлах — EPS и PDF.

Тогда вёрстка документа движками latex и pdflatex не будет ничем отличаться друг от друга, за единственным исключением, что вы получите документ в PS или PDF формате.