答案1
总结一下
首先介绍一下背景
Anki 使用latex
编译器从输入的 LaTeX 代码创建.dvi
中间文档,然后.png
使用转换器将其转换为位图图像dvipng
。Anki 只能处理.png
图片格式!
现在,TikZ(在绝大多数情况下)只能用pdflatex
编译器编译,编译器不会创建.dvi
文档,而是.pdf
立即生成文档。这当然意味着在 TikZ 之上构建的所有包(例如 chemfig)也只能用 编译pdflatex
。
要将.pdf
文档转换为.png
文件,我们必须有一个外部程序。我的选择是Imagemagick,它提供了一个命令来执行我们想要的操作(convert
)。
因此,使用命令行中的以下命令,我们应该排版正确的 LateX.pdf
文档,然后.png
在 AnkiSRS 之外将其转换为图片:
pdflatex tmp
convert -trim -density 300 tmp.pdf tmp.png
但是,出于某种原因,Anki 不支持在排版 LaTeX 文档后输入命令行,因此我们需要让pdflatex
跳转到命令行本身并调用 ,convert
以便它能够为 Anki 提供预期的输出(.png
)。这分两步完成。
首先,我们需要使用独立文档类。我使用了以下命令,需要一点解释:
\documentclass[convert={convertexe={convert}}]{standalone}
带有选项的独立包convert
尝试通过 Imagemagick 转换文件.pdf
。遗憾的是,Imagemagick 的命令convert
使用了与Windows 系统的命令 convert
将文件分配表从 FAT32 转换为 NTFS。
夏勒先生该软件包的创建者意识到了这个问题,这就是为什么该软件包会调用imgconvert
而不是,convert
以避免在运行 Windows 的机器上出现问题。
可以将 Imagemagick 程序重命名为imgconvert
,也可以使用选项调用独立类convert={convertexe={convert}}
。在使用前者时遇到问题后,我选择了后者。但是,我不建议在运行 Windows Server 2008 或 Windows Vista 的机器上使用它。
其次,必须启用编译器以转至命令行,如下所示:
pdflatex tmp -shell-escape
此时,此命令应排版.pdf
文档并将其转换为.png
。尽管编译器会报告错误,但是.png
正确的。这可能在命令行中没有问题,但在 Anki 中它会崩溃。出于我仍然不完全理解的原因,可以通过包含以下内容来修复它
\providecommand{\pgfsyspdfmark}[3]{}
位于文档开头。有关更多详细信息,请参阅此线。
综合起来
现在让我们看看 Anki。我们需要安装插件编辑 LaTeX 构建过程。当我们打开它进行编辑时,会弹出以下代码:
newLaTeX = \
[
["latex", "-interaction=nonstopmode", "tmp.tex"],
["dvipng", "-D", "200", "-T", "tight", "tmp.dvi", "-o", "tmp.png"]
]
# make the changes
import anki.latex
anki.latex.latexCmds = newLaTeX
我建议像这样编辑它:
# original setting
#newLaTeX = \
#[
# ["latex", "-interaction=nonstopmode", "tmp.tex"],
# ["dvipng", "-D", "200", "-T", "tight", "tmp.dvi", "-o", "tmp.png"]
#]
#===================================
# TikZ compliant setting
newLaTeX = \
[
["pdflatex", "-interaction=nonstopmode", "--shell-escape", "tmp.tex"]
]
# make the changes
import anki.latex
anki.latex.latexCmds = newLaTeX
由于我无法找到有关语法的任何帮助,我假设这#
是一个行注释,并且不知道如果有需要的话是否可以有条件地共同选择编译器。
现在,像这样更新所有笔记的 LaTeX 标题:
\providecommand{\pgfsyspdfmark}[3]{}
\documentclass[convert={convertexe={convert}},border=2]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amssymb,amsmath}
\usepackage{xcolor}
\usepackage{chemfig}
\pagestyle{empty}
\setlength{\parindent}{0in}
\begin{document}
它应该可以工作(如果 tl dr;安装 Imagemagick)。
答案2
有一种比 PeV 的答案稍微简单一些的方法,对我来说很有用(MacTeX 2023)。
这依赖于以下命令:
pdflatex -output-format=dvi -shell-escape -interaction=nonstopmode tmp.tex
dvisvgm --no-fonts -Z 2 tmp.dvi -o tmp.svg
更改标题/前言
转到Tools >> Manage Note Types >> <select a note type> >> Options
。在这里,您可以调整在 Anki 编译 LaTeX 代码时将包装的页眉和页脚。
有一个复选框,标题为Create scalable images with dvisvgm
。勾选该框(这是可取的,因为 svg 图像比 png 图像更容易重新缩放)。
更改\documentclass{...}
为\documentclass[dvisvgm]{standalone}
。该dvisvgm
选项告诉 LaTeX 编译器您希望它生成一个可以转换为 svg 文件的文件。
\usepackage{tikz}
确保在标题中有一个位置。
更改编译器调用
转到Tools >> Add-ons
。双击Edit LaTeX build process
。按如下所示设置“svgCommands”部分。
{
"pngCommands": [
[
"latex",
"-shell-escape",
"-interaction=nonstopmode",
"tmp.tex"
],
[
"dvipng",
"-D",
"200",
"-T",
"tight",
"tmp.dvi",
"-o",
"tmp.png"
]
],
"svgCommands": [
[
"pdflatex",
"-output-format=dvi",
"-shell-escape",
"-interaction=nonstopmode",
"tmp.tex"
],
[
"dvisvgm",
"--no-fonts",
"-Z",
"2",
"tmp.dvi",
"-o",
"tmp.svg"
]
]
}