Почему использование ledpar приводит к сбою документа? - PullRequest
1 голос
/ 16 июня 2009

Вот мой минимальный документ на LaTeX:

\documentclass{article}

\usepackage[polutonikogreek,english]{babel}
\newcommand{\Gk}[1]{\selectlanguage{polutonikogreek}#1\selectlanguage{english}}

\usepackage{ledmac}
\newcommand{\cn}[1]{\Afootnote{#1}}

\usepackage{ledpar}

\begin{document}
\beginnumbering
\pstart
\edtext{apostle}{\cn{\Gk{apostoloc}}}
\pend
\endnumbering
\end{document}

Выполнение latex test.tex приводит к следующей ошибке:

...
Section 1 (./test.1)
! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.15 \pend

?

Некоторые заметки:

  1. Полученный DVI выглядит хорошо, несмотря на ошибку.

  2. Комментирование \usepackage{ledpar} устраняет проблему.

  3. Неиспользование команды \Gk также решает проблему. (Но в некоторой степени побеждает цель иметь сноску.)

Что здесь происходит и как обойти сообщение об ошибке?

1 Ответ

1 голос
/ 16 июня 2009

Согласно FAQ :

Иногда LaTeX сохраняет данные, которые будут перечитаны позже. Эти данные часто являются аргументом какой-то команды; это так называемые движущиеся аргументы. («Перемещение», потому что данные перемещаются.) Кандидаты - это все аргументы, которые могут входить в оглавление, список рисунков и т. Д .; а именно, данные, которые записываются во вспомогательный файл и читаются позже. Другие места - это те данные, которые могут появиться в заголовках или на ногах. Заголовки разделов и подписи к рисункам являются наиболее яркими примерами; в книге Лампорта есть полный список (см. книги, связанные с TeX).

Что происходит на самом деле, за кулисами? Команды в движущихся аргументах обычно расширяются до их внутренней структуры в процессе сохранения. Иногда это расширение приводит к неверному коду TeX, который отображается либо во время расширения, либо когда код обрабатывается снова. Защита команды с помощью «\ protect \ cmd» указывает LaTeX сохранять \ cmd как \ cmd, не расширяя его вообще.

Таким образом, команда \Gk раскрывается слишком рано в процессе TeXing файла и приводит к некорректному коду. Самое простое решение - объявить команду надежной:

\usepackage{makerobust}
\DeclareRobustCommand{\Gk}[1]{\selectlanguage{polutonikogreek}#1\selectlanguage{english}}

Относительно того, почему использование пакета ledpar приводит к ошибке, я менее уверен. Чтобы облегчить заметки как в левой, так и в правой части параллельного текста, пакет ledpar должен переопределить практически все команды, предоставляемые пакетом ledmac. Хотя я не обнаружил разницу, одно или несколько переопределений должны вызвать преждевременное расширение хрупких команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...