我正在尝试standalone
使用设置 KOMA 脚本文章类的选项来编译文档class=scrartcl
。此外,我还使用自动convert
生成.emf
文件的选项:
\def\CONVERTCOMMAND{pdf2svg\space \infile\space \inname .svg%
\space &&%
\space inkscape\space -z%
\space -f\space \inname .svg%
\space --export-emf=\outfile%
\space && \space del\space \inname .svg %
}
\documentclass[11pt,
class=scrartcl,
convert={
command={\noexpand\CONVERTCOMMAND},
outext=.emf %damit Output erkannt wird
}
]{standalone}
\begin{document}
test
\end{document}
使用 PDFLaTeX 编译时,此代码会抛出几个Undefined control sequence. \FamilyProcessOptions{KOMA}
错误。不会生成任何输出文件。
如您所见,我使用了更复杂的转换命令,但是省略该class=scrartcl
选项时文件编译时没有错误。
也可以设置class=scrartcl
并convert=true
正常工作,生成 PDF 和 PNG 文件。
根据这些观察,我假设所选类和自定义转换命令之间存在冲突。您可以重现此错误吗?还是它只针对我的系统?是否有可能使这两个选项协同工作?
答案1
的全局选项\documentclass
不仅由standalone
所有类和包解释,而且由所有类和包解释。因此它们也可以扩展多次。只要类和包不处理键值选项,这不是一个大问题。但是 KOMA-Script 类和这些类加载的几个包确实处理此类选项。因此在这种情况下,\CONVERTCOMMAND
至少有一个包会扩展,而\infile
未定义。
为了避免这种情况,您可以使用\standaloneconfig
添加convert
选项。但这必须在转换完成时standalone.cfg
或至少在转换完成之前完成。通常已经standalone.cfg
加载了。但也许您不想更改它。以下解决方案用于在读取此配置文件后立即scrlfile
添加\standaloneconfig
命令。对于没有任何命令的情况,standalone.cfg
它会创建一个。
\def\CONVERTCOMMAND{pdf2svg \infile\space \inname .svg
&&
inkscape -z -f \inname .svg --export-emf=\outfile\space
&& del \inname .svg || rm \inname .svg%
}
\RequirePackage{scrlfile}
% If there is already a `standalone.cfg` we add one command.
\AfterFile{standalone.cfg}{%
\standaloneconfig{%
convert={
command={\CONVERTCOMMAND},
outext=.emf %damit Output erkannt wird
}
}
}
% If their isn't any `standalone.cfg` we make a dummy one.
\IfFileExists{standalone.cfg}{}{% works also with package filecontents
\begin{filecontents*}{standalone.cfg}
\relax
\end{filecontents*}
}
\documentclass[11pt,
class=scrartcl,
]{standalone}
\begin{document}
test
\end{document}
顺便说一句:我减少了不需要的\space
命令的使用,并添加了在失败rm
时删除 SVG 文件的功能del
。因此,此版本可以在我的 Linux 机器上运行。
以下是该文件的快照log
:
\sa@box=\box29 runsystem(pdflatex -shell-escape -jobname 'test' '\expandafter\def\csname sa@ internal@run\endcsname{1}\input{test}')...executed. \sa@read=\read1 runsystem(pdf2svg test.pdf test.svg && inkscape -z -f test.svg --export-emf=tes t.emf && del test.svg || rm test.svg)...executed.