У меня есть группа документов 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-файлом привела к аналогичным результатам.
Глядя на код 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