在常规软件包更新后,我无法再编译我一直在编写的书。我将问题限制在软件包的最新版本svg
(10 月 10 日)。在此 MWE 中:
% !TeX spellcheck = it_IT
% !TeX TS-program = lualatex
% !TeX encoding = UTF-8
\documentclass{scrreprt}
\usepackage{svg}
\setsvg{
inkscapeexe="C:/Program Files/Inkscape/inkscape.com",
inkscapearea=nocrop,
}
\begin{document}
Hello world!
\includesvg{crystal}
\end{document}
我使用的是 TeXstudio 2.12.16。当我尝试编译上述代码时,我得到了
Process started: lualatex.exe -synctex=1 -interaction=nonstopmode --shell-escape "document".tex
Process exited with error(s)
日志选项卡中没有其他信息。但是,如果我检查 .log 文件,我会发现
! error: (file ./svg-inkscape/"crystal"_svg-tex.pdf) (pdf backend): cannot find
image file './svg-inkscape/"crystal"_svg-tex.pdf'
! ==> Fatal error occurred, no output PDF file produced!
当 _svg-tex.pdf 实际已创建并生成 PDF 文件时,只是没有图片。尝试使用\includeinkscape{crystal_svg-tex.pdf}
也不起作用,因为我最终得到了相同的消息。
我是否遗漏了什么?
答案1
最新的 latex 版本在多个方面改进了文件处理,特别是大多数情况下允许使用空格和非 ASCII UTF-8 字符。为了允许使用空格,web2c TeX 实现允许使用双引号字符串,例如 so"foo bar.tex"
或 evenfoo" "bar.svg
等。
如果文件名只是由 TeX 处理,那么这很容易管理,但是如果(如此处)它被传递到其他应用程序的后端管道,执行 svg 到 pdf 的转换并包括具有派生名称的文件,则确保引用始终在正确的位置有点棘手。
我们将在未来几天解决所有困难,但与此同时,您可以使用一些解决方法
1)
\makeatletter
\let\quote@name\unquote@name
\makeatother
这将禁用添加双引号的宏,因此您将不会得到./svg-inkscape/"crystal"_svg-tex.pdf
但相反带有空格的文件名将会失败,但如果您的文件名中没有空格,这应该没问题。
2)
\makeatletter
\def\set@curr@file#1{\def\@curr@file{#1}}
\makeatother
这实际上禁用了所有新文件名处理,因此空格和 UTF-8 保护均被禁用。同样,如果您只有 ascii 文件名,这可能没问题。
这两种解决方法都会影响所有文件处理等,\input
而\usepackage
不仅仅是\includesvg
\includegraphics