简短问题

简短问题

简短问题

为什么

\documentclass[tikz]{standalone}
\usetikzlibrary{fadings}
\begin{document}
    \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]
    \tikz\fill[red,path fading=fade right](-1,-1)rectangle(1,1);
\end{document}

无法编译?


故事

为了生成仅包含图纸的 PDF 文件,有时需要这样写

\documentclass[tikz]{standalone}

这样standalone就会自动裁剪关于 Ti 的页面Z 图片。

问题在于,一个最小的应该工作的例子,例如

\documentclass[tikz]{standalone}
\usetikzlibrary{fadings}
\begin{document}
    \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]
    \tikz\fill[red,path fading=fade right](-1,-1)rectangle(1,1);
\end{document}

无法编译,而其article版本

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fadings}
\begin{document}
    \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]
    \tikz\fill[red,path fading=fade right](-1,-1)rectangle(1,1);
\end{document}

确实如此。后者给出了所需的结果。

可以通过将代码放到\tikzfading其他地方来解决。例如在序言中:

\documentclass[tikz]{standalone}
\usetikzlibrary{fadings}
    \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]
\begin{document}
    \tikz\fill[red,path fading=fade right](-1,-1)rectangle(1,1);
\end{document}

这也给出了期望的结果。

但是,\tikzfading如果想在本地定义衰落,则添加前导码会失败。要使其真正在本地,可以将其放在 内tikzpicture

\documentclass[tikz]{standalone}
\usetikzlibrary{fadings}
\begin{document}
    \tikz{
        \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]
        \fill[red,path fading=fade right](-1,-1)rectangle(1,1);}
\end{document}

我们可以解决这个问题。只需添加一个\pgfresetboundingbox。然后奇怪的事情来了:如果我设置一个全局的line width,双行保持相同的宽度

\documentclass[tikz]{standalone}
\usetikzlibrary{fadings}
\begin{document}
    \tikz[line width=10]{
        \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]
        \pgfresetboundingbox
        \fill[red,path fading=fade right](-1,-1)rectangle(1,1);
        \draw[double](-1,-1)--(1,1);
        \draw[      ](-1,1)--(1,-1);}
\end{document}

如果有人好奇,期望的结果应该是

\documentclass[tikz]{standalone}
\usetikzlibrary{fadings}
    \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]
\begin{document}
    \tikz[line width=10]{
        \fill[red,path fading=fade right](-1,-1)rectangle(1,1);
        \draw[double](-1,-1)--(1,1);
        \draw[      ](-1,1)--(1,-1);}
\end{document}


到目前为止有两个问题,上面以粗体标记:

  • 为什么standalone版本无法编译,而article版本可以编译?
  • 为什么\tikzfading 线宽设置仅有的双线?

答案1

很奇怪吧?

\documentclass[multi={tikzpicture,tikzfading}]{standalone}
\usepackage{tikz}
\usetikzlibrary{fadings}
\begin{document}
  \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]%
  \tikz\fill[red,path fading=fade right](-1,-1)rectangle(1,1);
  \endtikzfading
\end{document}

这是不太令人困惑且可与其他文档类别配合使用的内容。

\documentclass[multi={tikzpicture,wrapper}]{standalone}
%\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fadings}

\newenvironment{wrapper}{\parindent=0pt\ignorespaces}{\ignorespaces}

\begin{document}
\begin{wrapper}
  \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]%
  \tikz\fill[red,path fading=fade right](-1,-1)rectangle(1,1);
\end{wrapper}
\end{document}

相关内容