Pythons TexSoup не разбирает документ - PullRequest
1 голос
/ 02 ноября 2019

Я использую модуль Python TexSoup для анализа файла *.tex. К сожалению, это не работает вообще. Он успешно анализирует файл, но примеры никогда не возвращают ожидаемое значение. В демонстрационных целях я использую этот пример Python под названием solution_length.py

from TexSoup import TexSoup

tex = """\\documentclass[12pt]{article}
    \\begin{document}
    \\begin{equation} 
    1 + 1
    \\end{equation}
    \\end{document} 
"""
a = sum(len(a.string) for a in TexSoup(tex).find_all("\\begin{equation}"))
print(a)

возвращает

0

Похоже, что проект все еще поддерживается, но я не могу сделатьэто работает. Есть идеи, что мне здесь не хватает?

1 Ответ

1 голос
/ 03 ноября 2019

Один из способов сделать эту работу -

from TexSoup import TexSoup

tex = r"""
    \documentclass[12pt]{article}
    \begin{document}
    \begin{equation}
    1 + 1
    \end{equation}
    \end{document}
"""
a = TexSoup(tex).count('equation')
print(a)

, что дает

1

, как и ожидалось.

Обратите внимание, что вам нужно правильно обрабатывать обратную косую черту в тексте. источник, поэтому необработанная строка проще всего. count точно предназначен для подсчета экземпляров, но экземпляры - это не подстроки документа, а проанализированные конструкции. find_all возвращает вместо этого итератор для суповых узлов:

b = TexSoup(tex).find_all('equation')
print(type(next(b)))

дает

<class 'TexSoup.data.TexNode'>

, а его содержимое получается с all

for i in b:
    for x in i.all:
        print(x)

, давая

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