svg 包更新后无法正常工作

svg 包更新后无法正常工作

在常规软件包更新后,我无法再编译我一直在编写的书。我将问题限制在软件包的最新版本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

相关内容