Как программно отличить файл TeX от файла LaTeX

У меня есть большая коллекция файлов .tex (TeX/LaTeX), и я пишу скрипт Python, который анализирует эти файлы. Я хочу только анализировать файлы LaTeX, поэтому я хочу удалить все чистые файлы TeX.

Я подумал о том, чтобы убедиться, что \begin{document} содержится в каждом файле, но это отбрасывает довольно большое количество моих файлов, поскольку некоторые файлы представляют собой только главы в книге, длинные списки или разделы в диссертации, в которой нет команды \begin{document}.

У кого-нибудь есть идея, как отфильтровать все чистые файлы TeX из моей коллекции?


person askemottelson    schedule 08.10.2014    source источник
comment
Просто из любопытства, можете ли вы привести пример использования, когда различие имеет значение, учитывая, что вы в любом случае не представляете, как обрабатывать файлы (например, они могут быть просто фрагментами LaTeX, содержащими главы, или даже только наборы параметров)?   -  person Benjamin Bannier    schedule 08.10.2014
comment
Как насчет использования \begin{document} для поиска основных файлов LaTeX, а затем поиска \input и \include в этих файлах для поиска файлов, содержащих фрагменты LaTeX. Любой файл без \begin{document}, который не включен в известный файл LaTeX, скорее всего, является обычным файлом TeX.   -  person G. Poore    schedule 09.10.2014
comment
@BenjaminBannier: я пытаюсь определить наиболее часто используемые типографские конструкции LaTeX для школьного проекта.   -  person askemottelson    schedule 09.10.2014
comment
@G.Poore: Это может быть идея, за исключением того, что люди \включают или \вводят файлы TeX? Кто-нибудь вообще так делает?   -  person askemottelson    schedule 09.10.2014
comment
@ G.Poore: Кстати, я не могу быть уверен, что у меня есть проверенные файлы. Файлы собираются с помощью сканера и хранятся в одном и том же каталоге, поэтому структура папок/имена файлов не совпадают с исходными.   -  person askemottelson    schedule 09.10.2014


Ответы (2)


Я думаю, что вряд ли будет полностью надежный способ сделать это, учитывая, что вы хотите быть чувствительными к файлам, которые можно вводить с помощью \input или \include. Тем не менее, имея конкретный файл, вы, вероятно, сможете классифицировать его со значительной уверенностью, заметив первое из следующего, что вы найдете.

  1. Файлы TeX обычно заканчиваются на \bye, и это обычно не определено в файле LaTeX.
  2. Макрос \begin вряд ли будет определен в «обычном» файле TeX (хотя \end определен в формате plain).

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

Ничто не мешает кому-то, пишущему файл TeX, определить \begin как что-то означающее, а также тому, кто пишет файл LaTeX, чтобы определить \bye как что-то означающее. Проблема, с вашей точки зрения, заключается в том, что нет каких-либо конструкций TeX, которые действительно запрещены в файле LaTeX (и наоборот), хотя такие вещи, как \halign, редко встречаются в LaTeX. Действительно, поскольку LaTeX — это «всего лишь» формат TeX, между ними вообще нет фундаментальной разницы.

Просто чтобы довести до конца последний пункт, существует такая вещь, как ConTeXt, формат TeX, который не plain, но и не LaTeX. Хотя это довольно редко.

person Norman Gray    schedule 23.03.2015

Да, конечно, добавьте все имена файлов в массив, сделайте это, указав каталог.

    x = os.listdir("path") 

Это добавит содержимое каталога в переменную x. Затем прокрутите его:

    PureTex = []
    for Char in x:
        if Char.endswith('.tex'):
            PureTex.append(Char)
        else:
            pass

Теперь массив PureTex будет содержать чистые файлы.

person user3788339    schedule 08.10.2014
comment
Его проблема в том, что в типичном соглашении и файлы TeX, и файлы LaTeX заканчиваются на .tex. - person Benjamin Bannier; 08.10.2014