Я использую pandoc
для преобразования документа LaTeX в формат Word. Исходный документ содержит различные перекрестные ссылки, которые необходимо сохранить в выводе.Однако, когда используется фильтр перекрестных ссылок pandoc
жалуется, что он не установлен:
$ 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?
Этот фильтр нельзя получить из PPA или любого другого ресурса упаковки. Таким образом, самый безопасный вариант - это скомпилировать фильтр в системе , как предлагает Норберт . Однако инструкции по компиляции в репозитории фильтров не применимы к Ubuntu. Эти инструкции предполагают, что система будет иметь самое современное программное обеспечение, чего обычно нет в экосистеме пакетного программного обеспечения, подобной той, что предлагается Ubuntu. Вот инструкции, которые заставили его работать в моей системе.
Чтобы скомпилировать pandoc-crossref
, вы должны установить haskell-stack
, набор инструментов, который компилирует фильтр.
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
, что в моем случае вполне нормально.
Этот метод был обнаружен в этой ветке .
Этот фильтр не упакован как стандартный пакет Ubuntu.
Он упоминается на https://github.com/jgm/pandoc/wiki/Pandoc-Filters , поэтому вы можете скачать и установить его с https://github.com/lierdakil/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.