我正在使用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
该过滤器未打包为标准 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
然后按照您已经计划的方式进行测试。
但为了获得更高效的结果,我建议开始使用预订(RMarkdown Markdown 扩展),它将以简化的形式为您完成所有工作。在这里,您可以拥有统一的 Rmd 输入格式和多种输出格式,包括 TeX、PDF、ePub、HTML、docx、odt 等。检查https://github.com/rstudio/bookdown-demo存储库作为起点。
答案2
此过滤器无法从 PPA 或任何其他包装资源中获取。因此,最安全的选择是在系统中编译过滤器,正如 N0rbert 所建议的那样。 然而,编译说明过滤器存储库中的说明不适用于 Ubuntu。这些说明要求系统具有最先进的软件,而 Ubuntu 提供的软件包生态系统通常并非如此。以下是在我的系统上运行它的说明。
要进行编译,pandoc-crossref
您必须安装haskell-stack
编译过滤器的工具链。
sudo aptitude install haskell-stack
这是第一个棘手的部分。Universehaskell-stack
提供的软件包非常老旧,可以追溯到 2018 年,这意味着它实际上能做的事情不多。幸运的是,该程序可以自行更新,运行以下命令:
stack upgrade --binary-only
现在可以克隆源代码了。但是,必须获取正确的版本,使用最新版本编译会失败。这是因为pandoc
Universe 中的包也很旧,是 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
我来说这就够了。
这种方法是在此主题。