Xindy под Windows

Как установить Xindy под Windows для работы с XeLaTeX из набора MiKTeX


Xindy - программа для построения указателей (именных, предметных и т.п.). Такие программы называют index processor - процессор индексов, а указатели - индексами. Обычно с LaTeXом используется программа makeindex. Она написана для работы с английским восьмибитным текстом. Её использование для работы с русским языком затруднено (иногда используется скрипт на Perl rumakeindex). В отличие от makeindex, Xindy поддерживает интернационализацию, юникод и является гораздо более мощным процессором индексов. Сравнение здесь: http://xindy.sourceforge.net/doc/faq-1.html. Далее описывается решение следующей задачи: необходимо установить Xindy под Windows для работы с XeLaTeX из набора MiKTeX.

Основной проблемой скрипта Xindy является жёстко заданный (hardcoded) путь к бинарным файлам. Правка будет зависеть от версии Xindy, которую можно посмотреть в файле VERSION дистрибутива. Ниже описана установка для двух версий Xindy: 2.5.1 и 2.4

Установка для версии 2.5.1

К сожалению в дистрибутив MiKTeX Xindy не входит. Xindy находится здесь: http://www.xindy.org/ и здесь: http://xindy.sourceforge.net/. На сайтах отмечено, что дистрибутивы под Windows и MacOS отсутствуют. Тем не менее разработчики дистрибутива W32TeX откомпилировали код под Windows. Взять его можно по ссылке: http://mirror.ctan.org/systems/win32/w32tex/xindy-w32.tar.xz или тут: http://www.tex.uniyar.ac.ru/win32/tools/xindy/xindy-w32.tar.xz. Кроме того, можно воспользоваться TeX Live версией (далее она не рассматривается). Скачав указанный файл, распаковываем его, например с помощью 7zip, в (любой) отдельный каталог.

Полученный дистрибутив Xindy разработан для работы в TDS - TeX Directory Structure. TDS это унифицированная структура каталогов для размещения пакетов расширения, макросов, шрифтов, документов и других модулей, расширяющих возможности стандартных компиляторов TeXа. Подробности тут: http://tug.org/tds/tds.html. Текущая версия MiKTeX устанавливается в первую очередь с учётом особенностей системы Windows, поддерживая реестр, систему распределения прав и т.п. Установленный в Windows дистрибутив MiKTeX не вполне TDS совместим. Однако он позволяет создать локальный каталог со структурой TDS. Предполагается, что его создают пользователи, у которых MiKTeX установлен на сервере и они лишены прав добавлять пакеты, шрифты и другие модули расширения в сетевой ресурс. MikTeX создаёт локальный каталог в каталоге пользователя Windows, о чем многие пользователи не знают. Многие пользователи пренебрегают использованием такого дерева каталога, работая в Windows как локальный администратор. В нашем случае его необходимо создать или воспользоваться имеющимся. Делается вызовом утилиты Settings в MiKTeX. Далее Roots|Add и добавляем каталог (например) c:\localtexmf. В нем создаём следующую структуру каталогов:
c:\localtexmf
├───doc
├───miktex
│   └───bin
├───scripts
└───tex
    └───latex
Каталог c:\localtexmf\miktex\bin добавляем первым в путь поиска PATH любым доступным способом (например программой Rapid Evironment Editor с сайта http://www.rapidee.com)

Из каталога с распакованным Xindy копируем во вновь созданную структуру файлы и каталоги в следующие места:
c:\localtexmf
├───doc
│   └───xindy (из \share\texmf-dist\doc\)
├───miktex
│   └───bin (из каталога \bin)
├───scripts
│   └───xindy (из \share\texmf-dist\scripts\)
├───tex
│   └───latex
└───xindy (из share\texmf-dist\xindy\)
    └───modules (вложенный каталог Xindy)
MiKTeX под Windows хранит свои настройки в реестре. Поэтому необходимо создать файл texmf.cnf в кодировке ANSI следующего содержания:
TEXMF=C:/localtexmf
TEXMFSCRIPTS=$TEXMF/scripts/xindy
и разместить его в корневом каталоге TDS. В нашем примере это c:\localtexmf.

После этого необходимо обновить базу данных файлов MiKTeXа - в том же Settings в закладке General нажать «Refresh FNDB».

Необходимо установить компилятор Perl. Скорее всего - любой, мы пробовали ActivePerl ver.5.20.
Взять его можно здесь: http://www.activestate.com/activeperl

Установка окончена.

Установка для версии 2.4

К сожалению в дистрибутив MiKTeX Xindy не входит. Xindy находится здесь: http://www.xindy.org/ и здесь: http://xindy.sourceforge.net/. На сайтах отмечено, что дистрибутивы под Windows и MacOS отсутствуют. Тем не менее разработчики дистрибутива W32TeX откомпилировали код под Windows. Взять его можно по ссылке: http://mirror.ctan.org/systems/win32/w32tex/xindy-w32.tar.xz или тут: http://www.tex.uniyar.ac.ru/win32/tools/xindy/xindy-w32.tar.xz. Кроме того, можно воспользоваться TeX Live версией (далее она не рассматривается). Скачав указанный файл, распаковываем его, например с помощью 7zip, в (любой) отдельный каталог.

Полученный дистрибутив Xindy разработан для работы в TDS - TeX Directory Structure. TDS это унифицированная структура каталогов для размещения пакетов расширения, макросов, шрифтов, документов и других модулей, расширяющих возможности стандартных компиляторов TeXа. Подробности тут: http://tug.org/tds/tds.html. Текущая версия MiKTeX устанавливается в первую очередь с учётом особенностей системы Windows, поддерживая реестр, систему распределения прав и т.п. Установленный в Windows дистрибутив MiKTeX не вполне TDS совместим. Однако он позволяет создать локальный каталог со структурой TDS. Предполагается, что его создают пользователи, у которых MiKTeX установлен на сервере и они лишены прав добавлять пакеты, шрифты и другие модули расширения в сетевой ресурс. MikTeX создаёт локальный каталог в каталоге пользователя Windows, о чем многие пользователи не знают. Многие пользователи пренебрегают использованием такого дерева каталога, работая в Windows как локальный администратор. В нашем случае его необходимо создать или воспользоваться имеющимся. Делается вызовом утилиты Settings в MiKTeX. Далее Roots|Add и добавляем каталог (например) c:\localtexmf. В нем создаём следующую структуру каталогов:
c:\localtexmf
├───doc
├───miktex
│   └───bin
├───scripts
└───tex
    └───latex
Каталог c:\localtexmf\bin добавляем первым в путь поиска PATH любым доступным способом (например программой Rapid Evironment Editor с сайта http://www.rapidee.com)

Из каталога с распакованным Xindy копируем во вновь созданную структуру файлы и каталоги в следующие места:
c:\localtexmf
├───doc
│   └───xindy (из \share\texmf-dist\doc\)
├───miktex
│   └───bin (из каталога \bin)
├───scripts
│   └───xindy (из \share\texmf-dist\scripts\)
├───tex
│   └───latex
└───xindy (из share\texmf-dist\xindy\)
    └───modules (вложенный каталог Xindy)
MiKTeX под Windows хранит свои настройки в реестре. Поэтому необходимо создать файл texmf.cnf в кодировке ANSI следующего содержания:
TEXMF=C:/localtexmf
TEXMFSCRIPTS=$TEXMF/scripts/xindy
и разместить его в корневом каталоге TDS. В нашем примере это c:\localtexmf.

После этого необходимо обновить базу данных файлов MiKTeXа - в том же Settings в закладке General нажать «Refresh FNDB».

Необходимо внести исправления в скрипт c:\localtexmf\scripts\xindy\xindy.pl
В нем есть кусок вида:
if ( $is_TL ) { # TeX Live

    $modules_dir = Cwd::realpath("$cmd_dir/../../xindy/modules");
    die "$cmd: Cannot locate xindy modules directory"  unless -d $modules_dir;

    if ( $is_w32 ) {
	$cmd_dir = "$cmd_dir/../../../../bin";

Последнюю строку (379 строка скрипта) заменить на:
	$cmd_dir = "$cmd_dir/../../bin";
Если при запуске программ будет выдаваться сообщение об отсутствии kpathsea611.dll, необходимо переименовать имеющуюся в каталоге bin kpathsea620.dll в kpathsea611.dll.

Необходимо установить компилятор Perl. Скорее всего - любой, мы пробовали ActivePerl ver.5.14.
Взять его можно здесь: http://www.activestate.com/activeperl

Установка окончена.

Использование

Есть два способа строить индексы: с помощью пакетных файлов и из оболочки с помощью пакета imakeidx.

Пакетный файл
Создадим тестовый файл sample_xelatex.tex в кодировке UTF-8 следующего содержания:
% !TEX encoding = UTF-8
% !TEX program = XeLaTeX
% !TeX spellcheck = ru_RU_yo
\documentclass{article}
\usepackage{fontspec,xltxtra,polyglossia}
\setdefaultlanguage{russian} 
\setotherlanguage{english}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Times New Roman}
\usepackage{makeidx}
\makeindex

\begin{document} 
Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства. Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства. \index{Юбилей} \index{Юг}
\newpage
В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! Любя, съешь щипцы,~---  вздохнёт мэр,~--- кайф жгуч. Любя, съешь щипцы,~--- вздохнёт мэр,~---  кайф жгуч.

\index{Гиннесс}
В Книге рекордов Гиннесса 1993 года издания самым длинным словом русского языка названо рентгеноэлектрокардиографического, в издании 2003 года превысокомногорассмотрительствующий. \index{Гиннесс!пиво} \index{Гиннесс!книга}

\renewcommand{\indexname}{Указатель} 
\printindex
\end{document}
Компилируем с помощью пакетного файла:
xelatex sample_xelatex
xindy -M texindy -L russian -C utf8 sample_xelatex.idx
xelatex --synctex=1 sample_xelatex.tex
Пакет imakeidx
Этот пакет позволяет запускать процессор индексов прямо из оболочки (например TeXWorks)
Внесем исправления в тестовый файл sample_xelatex.tex:
% !TEX encoding = UTF-8
% !TEX program = XeLaTeX
% !TeX spellcheck = ru_RU_yo
\documentclass{article}
\usepackage{fontspec,xltxtra,polyglossia}
\setdefaultlanguage{russian} 
\setotherlanguage{english}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Times New Roman}
\usepackage[truexindy]{imakeidx}
\makeindex[title=Указатель, program=truexindy, options=-M texindy -L russian -C utf8]

\begin{document} 
Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства. Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства. \index{Юбилей} \index{Юг}
\newpage
В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! Любя, съешь щипцы,~---  вздохнёт мэр,~--- кайф жгуч. Любя, съешь щипцы,~--- вздохнёт мэр,~---  кайф жгуч.

\index{Гиннесс}
В Книге рекордов Гиннесса 1993 года издания самым длинным словом русского языка названо рентгеноэлектрокардиографического, в издании 2003 года превысокомногорассмотрительствующий. \index{Гиннесс!пиво} \index{Гиннесс!книга}

\printindex
\end{document}
В командную строку вызова XeLaTeX из оболочки необходимо добавить ключ --shell-escape. Для TeXWorks это делается в меню: Правка|Настройки|Верстка|XeLaTeX|Правка.

Запускаем верстку в TeXWorks.


Настройки

Настройки формата и порядка построения указателей производятся в модулях Xindy. Создадим модуль myset.xdy (кодировка UTF-8). Пользовательские модули можно размещать либо в c:\localtexmf\xindy\modules\, либо в c:\localtexmf\xindy\modules\base. Разместим его в c:\localtexmf\xindy\modules\.
Содержимое файла:
;;; до 10 страниц выдаются в виде списка. больше - диапазоном
(require "page-ranges.xdy")
(define-location-class "arabic-page-numbers"
                       ("arabic-numbers") :min-range-length 10)
;;; изменили тип тире в диапазоне страниц
(markup-range :sep "---") 

;;; добавили sloppy
(require "latex.xdy")
(markup-index :open
"\begin{theindex}
  \providecommand*\lettergroupDefault[1]{}
  \providecommand*\lettergroup[1]{%
      \par\textbf{#1}\par\sloppy 
      \nopagebreak
  }
"
	      :close "~n~n\end{theindex}~n"
	      :tree)

;;; убрали запятую после индекса и вставили пробел
(markup-locclass-list :open "\quad{}" :sep ", ") 

;;; вводим атрибут ссылки textbf (выделение ссылки жирным шрифтом) 
(markup-locref   :attr  "textbf"     :open "\textbf{" :close "}")
;;; конец файла
Его вызов осуществляется либо командной строкой:
xindy -M texindy -L russian -C utf8 -M myset sample_xelatex.idx
либо исправленными параметрами вызова:
\makeindex[title=Указатель, program=truexindy, options=-M texindy -L russian -C utf8 -M myset]
После этого заработает привычное (как makeindex) выделение страницы жирным шрифтом: \index{test|textbf}.
Подробное описание команд - на домашних страницах Xindy.

Дополнительная информация

Xindy Tutorial: http://xindy.sourceforge.net/doc/tutorial.html
Xindy Reference Manual (обзор программирования): http://xindy.sourceforge.net/doc/manual.html
Скачать Xindy для Windows: http://mirror.ctan.org/systems/win32/w32tex/xindy-w32.tar.xz
Скачать Xindy для Windows: http://www.tex.uniyar.ac.ru/win32/tools/xindy/xindy-w32.tar.xz
Installing Xindy in MikteX http://www.latex-community.org/forum/viewtopic.php?f=51&t=5312
Xindy for MiKTeX http://www.latex-community.org/forum/viewtopic.php?f=5&t=5383
How to use Xindy with MiKTeX? http://tex.stackexchange.com/questions/71167/how-to-use-xindy-with-miktex


Контакты

на первой странице сайта http://www.tex.uniyar.ac.ru
версия от 04.2.2015
Д. Морозов