Использование pandoc-crossref в Ubuntu 20.04

Я использую 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?

1
задан 3 May 2021 в 14:49

2 ответа

Этот фильтр нельзя получить из 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 , что в моем случае вполне нормально.

Этот метод был обнаружен в этой ветке .

1
ответ дан 7 May 2021 в 17:40

Этот фильтр не упакован как стандартный пакет 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.

1
ответ дан 7 May 2021 в 17:40

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

Похожие вопросы: