Преобразование adoc в уценку с сохранением математических уравнений в латексном стиле

У меня есть группа документов Adoc, которые я конвертирую в уценку. Для большинства из них мне удалось преобразовать их с помощью:

asciidoc -b docbook -o temp.xml <infile>
pandoc -f docbook -t markdown_strict --atx-headers --mathjax temp.xml -o <outfile>

за которым следует некоторое регулярное выражение, чтобы очистить некоторые неработающие ссылки на изображения и исправить заголовки. Однако это не работает для встроенных математических уравнений. В адоке они в синтаксисе: latexmath:[$some_equation_here$] иногда без знаков доллара для многострочных уравнений.

когда это превращается в XML DocBook, кажется, что оно сохраняется и имеет формат:

<inlineequation>
<alt><![CDATA[$some_equation_here$]]></alt>
<inlinemediaobject><textobject><phrase></phrase></textobject></inlinemediaobject>
</inlineequation>

но когда pandoc преобразует его обратно в уценку, он игнорирует эти блоки xml. Как я могу сохранить его в формате удобочитаемого уравнения ($some_equation_here$) во время преобразования pandoc? Расширение mathjax, похоже, не помогает с этой операцией.

Я попытался использовать отдельное регулярное выражение Python, которое использовало бы re.sub(r'latexmath:\[\$?(.*?)\$?\]', r'$\g<1>$', file_contents для сохранения $, но это приводит к некоторому двойному экранированному тексту, который затем нужно исправлять вручную, а также не полностью работает, иногда давая некоторые дополнительные теги /sup. Попытка сделать что-то подобное с XML-файлом привела к аналогичным результатам.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Глядя на код pandoc, кажется, что читатель DocBook ожидает, что формула будет в элементе <mathphrase> ниже <inlineequation>. Таким образом, замены тегов <alt> на <mathphrase> достаточно, чтобы уравнение было подхвачено pandoc. В целом это приводит к недопустимому DocBook XML, поскольку <inlineequation> должен содержать либо <mathphrase>, либо <inlinemediaobjects>, но для pandoc это не имеет значения.

cat << EOF | pandoc --from=docbook --to markdown --lua-filter=unwrap-math.lua
<para>
  <inlineequation>
    <mathphrase><![CDATA[$some_equation_here$]]></mathphrase>
    <inlinemediaobject><textobject><phrase></phrase></textobject></inlinemediaobject>
  </inlineequation>
</para>
EOF
$some_equation_here$

Обратите внимание, что pandoc сам вставляет доллары, поэтому их также следует удалить. Приведенная выше команда использует фильтр Lua для удаления долларов; unwrap-math.lua содержит

function Math (mth)
  mth.text = mth.text:gsub('^%$', ''):gsub('%$$', '')
  return mth
end

Другие вопросы по теме