Использование pandoc-crossref в Ubuntu 20.04
Я использую для преобразования документа LaTeX в формат Word. Исходный документ содержит различные перекрестные ссылки, которые необходимо сохранить в выходных данных. Однако при использовании фильтра перекрестных ссылок жалуется, что он не установлен:
$ pandoc main.tex --filter pandoc-crossref -o main.docx
Error running filter pandoc-crossref:
Could not find executable pandoc-crossref
Установлен пакет с привязками Python для фильтров:
$ dpkg -l | grep pandoc
ii pandoc 2.5-3build2 amd64 general markup converter
ii pandoc-data 2.5-3build2 all general markup converter - data files
ii python3-pandocfilters 1.4.2-2 all python3 bindings for Pandoc's filters
Так что я бы предположил, что фильтры включены в общие
pandoc
упаковка. Возможно, фильтр перекрестных ссылок как-то отсутствует.
Но других пакетов фильтров нет:
$ aptitude search pandoc | grep filter
p pandoc-plantuml-filter - Pandoc filter: converts PlantUML code blocks to PlantUML images
i A python3-pandocfilters - python3 bindings for Pandoc's filters
$ aptitude search pandoc | grep cross
$
Этот фильтр просто не запакован и его нужно устанавливать вручную? Или есть другой способ использовать его в Ubuntu?
2 ответа
Этот фильтр не упакован как стандартный пакет Ubuntu.
Он упоминается на https://github.com/jgm/pandoc/wiki/Pandoc-Filters , поэтому вы можете загрузить и установить его с https://github.com/lirdakil/pandoc-crossref вручную.
Для воспроизводимых результатов вы должны получить как новейшие
pandoc
а также
pandoc-crossref
как предварительно скомпилированные двоичные файлы, используя команды ниже:
cd ~/Downloads
wget -c https://github.com/jgm/pandoc/releases/download/2.13/pandoc-2.13-1-amd64.deb
sudo apt-get install ./pandoc-2.13-1-amd64.deb
sudo apt-get autopurge pandoc-data
wget -c https://github.com/lierdakil/pandoc-crossref/releases/download/v0.3.10.0a/pandoc-crossref-Linux.tar.xz
tar -xf pandoc-crossref-Linux.tar.xz
sudo mv pandoc-crossref /usr/local/bin/
sudo chmod a+x /usr/local/bin/pandoc-crossref
sudo mkdir -p /usr/local/man/man1
sudo mv pandoc-crossref.1 /usr/local/man/man1
Обратите внимание, что
man pandoc-crossref
заработает.
Затем протестируйте его с
pandoc main.tex --filter pandoc-crossref -o main.docx
как вы уже запланировали.
Но для более продуктивных результатов я бы рекомендовал начать использовать bookdown (расширение RMarkdown Markdown), оно все сделает за вас в упрощенном виде. Здесь вы можете иметь объединенный входной формат Rmd и несколько выходных форматов, включая TeX, PDF, ePub, HTML, docx, odt и так далее. Проверьте репозиторий https://github.com/rstudio/bookdown-demo в качестве отправной точки.
Этот фильтр нельзя получить из PPA или любого другого упаковочного ресурса. Таким образом, самый безопасный вариант — скомпилировать фильтр в системе, как предлагает Норберт . Однако инструкции по компиляции в репозитории фильтров неприменимы к Ubuntu. Эти инструкции предполагают, что в системе должно быть самое современное программное обеспечение, чего обычно не бывает в экосистеме упакованного программного обеспечения, такой как предлагаемая Ubuntu. Вот инструкции, благодаря которым он заработал в моей системе.
Скомпилировать
pandoc-crossref
вы должны установить набор инструментов, который компилирует фильтр.
sudo aptitude install haskell-stack
Вот первый сложный момент.
haskell-stack
Пакет, доступный во Вселенной, действительно старый, датируется 2018 годом, а это означает, что на самом деле он мало что может сделать. К счастью, программа может обновить себя, выполнив следующее:
stack upgrade --binary-only
Теперь исходный код можно клонировать. Однако нужно получить правильную версию, с последней компиляция не удалась. Это потому, что
pandoc
пакет во Вселенной тоже старый, с 2019 года, поэтому необходимо проверить соответствующую версию:
cd git
git clone https://github.com/lierdakil/pandoc-crossref.git
cd pandoc-crossref
git checkout v0.3.4.2
И, наконец, фильтр можно скомпилировать:
stack install
Это установит скомпилированный фильтр в
${HOME}/.local/bin
что в моем случае просто отлично.
Этот метод разобрался в этой теме .