输入
\documentclass[
tikz,
border=2mm,
convert={
true,
%false,
density = 300,
convertexe = {convert},
%command={\convertexe\space -density \density\space \infile\space \ifx\size\empty\else -resize \size\fi\space -quality 90 \outfile}
}
]
{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[]
\addplot
[
red,
]
{
x^2
};
\end{axis}
\end{tikzpicture}
\end{document}
输出
问题
我想使用该convert
选项来动态生成 PNG 文件。如您在上面的代码示例中所见:它基本上可以正常工作!
这问题生成的 PNG 图像具有透明度(透明背景而不是白色背景):
就我而言,这不是我想要的。通常,如果您从控制台或批处理文件中使用转换命令(我使用 Windows 7/10),则只需添加-alpha remove
即可解决问题。
但是我不知道如何在包中添加选项standalone
。在独立包的文档中,它说传递给命令的默认命令convert
是:
command={\convertexe\space -density
\density\space \infile\space \ifx\size\empty\else
-resize \size\fi\space -quality 90 \outfile}
所以我在课程选项中输入了它,并期望不会有任何变化。在第二步中,我会添加该-alpha remove
选项。
但是有了这个文档类选项:
\documentclass[
tikz,
border=2mm,
convert={
true,
%false,
density = 300,
convertexe = {convert},
command={\convertexe\space -density \density\space \infile\space \ifx\size\empty\else -resize \size\fi\space -quality 90 \outfile}
}
]
{standalone}
然后我收到这个错误:
This is pdfTeX, Version 3.14159265-2.6-1.40.16 (MiKTeX 2.9) (preloaded format=pdflatex 2015.12.20) 29 MAR 2016 22:38
entering extended mode
**\expandafter\def\csname sa@internal@run\endcsname{1}\input{lala}
(lala.tex
! Undefined control sequence.
<argument> ...e = {convert}, command={\convertexe
\space -density \density \...
l.13
?
! Emergency stop.
<argument> ...e = {convert}, command={\convertexe
\space -density \density \...
l.13
End of file on the terminal!
- 您能重现这个问题吗?
- 我是否误读了文档?
- 也许您知道解决方案!
答案1
您收到的未定义错误\convertexe
(以及参数中所有其他命令的错误command
,如果您跳过错误消息)是因为您将它们用作documentclass 选项。 这\documentclass
扩展在实际的类被加载之前它的参数,并且在这个阶段宏还未定义,无论如何它们也不应该在此时被扩展。
这是一个常见问题,standalone
无法解决。您可以通过将命令包装在 中\unexpanded
(需要启用 e-TeX 的发行版)或先将内容定义为在 之后使用的宏来修复此问题\noexpand
。
\documentclass[
tikz,
border=2mm,
convert={
true,
%false,
density = 300,
convertexe = {convert},
command=\unexpanded{{\convertexe\space -density \density\space \infile\space \ifx\size\empty\else -resize \size\fi\space -quality 90 -alpha off \outfile}}
}
]
{standalone}
或者
\def\CONVERTCOMMAND{\convertexe\space -density \density\space \infile\space \ifx\size\empty\else -resize \size\fi\space -quality 90 -alpha off \outfile}
\documentclass[
tikz,
border=2mm,
convert={
true,
%false,
density = 300,
convertexe = {convert},
command = {\noexpand\CONVERTCOMMAND},
}
]
{standalone}
-alpha off
我使用cfr 提到的选项测试成功。
答案2
以下对我有用。但是,如果这是必需的,那么文档肯定可以使其更加清晰。从默认配置继承的选项也会让用户的生活变得轻松很多。
类和包选项的处理方式多种多样。因此,当以这种方式设置选项出现问题时,通常值得检查是否有其他方式来设置它们。
通常,这涉及在文档本身中使用配置命令 - 要么在前言中,要么有时在文档正文中。然而,虽然尝试这样做不会引发错误,但在这种情况下也没有多大用处,因为据我所知,转换发生在在 \documentclass
因此之后的任何事情都不会影响该进程。
但是,standalone
提供了使用配置文件的可能性standalone.cfg
。它提供了默认值,但可以通过将自定义版本放在搜索路径中优先级更高的某个位置来覆盖此默认值。(例如在TEXMFHOME
工作目录中。)
这是我的:
% standalone.cfg
\standaloneconfig{%
crop,
convert={%
density=600,
command={\convertexe\space -density \density\space \infile\space \ifx\size\empty\else -resize \size\fi\space -quality 90 -alpha off \outfile},
},
}
\endinput
请注意,我的系统上convert
没有列出-alpha remove
该选项,因此我使用-alpha off
它。
还要注意crop
这里需要这样做,因为我们要覆盖standalone.cfg
负责确保此默认设置的默认值。
我用最小例如 -pgfplots
据我所知,实际上与问题无关:
\documentclass[tikz,convert,border=10pt]{standalone}
\begin{document}
\tikz{\node {abc};}
\end{document}
然后
file <filename>.png
返回
<filename>.png: PNG image data, 348 x 279, 1-bit grayscale, non-interlaced
当然,它是灰度的,因为输入是黑白的。重点是没有 alpha。