LINUX.ORG.RU

Парсер tex/latex

 ,


0

3

Существует ли удобный и полноценный парсер документов TeX/LaTeX (язык не важен)? В идеале было бы его встраивание в редактор (вроде емакса или любого другого расширяемого редактора) для поиска/замены.

Примеры задач: убрать из текста все сноски, поменять цвет внутри \textcolor с заданного на другой, и т.д. (возможно и более сложные операции с TeX-файлом).

Очевидно, что регулярные языки для этого не подходят.

★★★★★

Очевидно, что регулярные языки для этого не подходят.

???? если просто замена впрямую не работает, то имеет смысл освоить создание макро в emacs ^x ( «порядок нужных действий» ^x ) — затем можно вызвать по ^x ^e, можно добавить префикс N ^u, где N — число повторямых последовательно команд.

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

????

Как регулярным выражением заменить \footnote{...} с произвольным уровнем вложенности команд в теле?

buddhist ★★★★★
() автор топика
Ответ на: комментарий от buddhist

Набор команды (при условии что в footnote нет фигурных скобочек):

^x ( ^s \footnote{ ← ^r \ ← ^пробел ^s } ^w ^x )

Исполнение команды десять раз:

^u 10 ^x e

Но IMHO такие вещи просто разрулить руками, потому что эти сами \footnote руками же и набираются. Если же набираются автоматом, то там должен быть алгоритм под который свой макро можно будет настроить по ходу дела.

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 2)
Ответ на: комментарий от Evgueni

при условии что в footnote нет фигурных скобочек

Но я как раз и не могу обеспечить это.

Вообще идеально было бы иметь пакетик под какой-нибудь перл/питон/любой другой язык, чтобы можно было написать скрипт.

buddhist ★★★★★
() автор топика
Последнее исправление: buddhist (всего исправлений: 1)
Ответ на: комментарий от buddhist

Тогда ручками или, если там есть какой-то регулярный алгоритм, подстроиться под него. Например, если команды, которые встречаются только там — выкосить их до замены.

Так же наверняка в emacs есть команда для поиска парной скобочки.

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от buddhist

Нашёл Ctrl+Alt+f — с открывающей скобки прыгаешь на комплементарную ей закрывающую. Проверил, что работает в auctex.

^x ( ^s \footnote{ ← ^r \ ← ^пробел ^s { ← Ctrl+Alt+f ^w ^x )
Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 1)

Полноценный парсер теха должен сам быть техом и выполнять все команды, которые встретит, потому что от этого зависит результат парсинга. В техе, например, можно на ходу менять синтаксические категории разных символов, и многие пакеты это делают.

Можно, конечно, сделать парсер какого-то сферического подмножества латеха, но он будет ломаться на каждом втором документе сложнее «hello world».

anonymous
()

У меня есть собственно разработанный генератор парсеров tex-like на CL. Создавал я его чтобы можно было заменить xml на tex-like. Поточная обработка текста. Есть различные функции по обработке макровыражений (термин tex-exp в коде), генератор парсинга окружений (\begin..\end).

anonymous
()

Это нереально практически.

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

bookman900 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.