\selectcolormodel{gray} 并不总是适用于 tikzducks

\selectcolormodel{gray} 并不总是适用于 tikzducks

\selectcolormodel{gray}对鸭毛不起作用,但对鸭子的其他部分却起作用,为什么?

\documentclass{ltugboat} 
\usepackage{microtype} 
\usepackage{graphicx}

\usepackage{ifthen}
\newboolean{grayscale}   
\setboolean{grayscale}{true}% for the black & white version   
%\setboolean{grayscale}{false}% for the colored version   

\usepackage{tikzducks}
\usetikzlibrary{positioning}

\newenvironment{mytikz}{%
    \begin{tikzpicture}
    \ifthenelse{\boolean{grayscale}}{\selectcolormodel{gray}}{} 
    }
    {\end{tikzpicture}}

\usepackage{ifpdf} 
\ifpdf 
\usepackage[breaklinks,hidelinks]{hyperref} 
\else \usepackage{url} \fi 

\begin{document} 
    Why \textbackslash\texttt{selectcolormodel\string{gray\string}} does not work for the duck hair?

    Black and white version:    

    \begin{mytikz}
        \begin{scope}[xscale=-1]
            \duck[longhair=pink]
        \end{scope}
        \begin{scope}[xshift=10pt]
            \duck[crazyhair=orange]
        \end{scope}
    \end{mytikz}

    Colored version:
    \setboolean{grayscale}{false}

    \begin{mytikz}
        \begin{scope}[xscale=-1]
            \duck[longhair=pink]
        \end{scope}
        \begin{scope}[xshift=10pt]
            \duck[crazyhair=orange]
        \end{scope}
    \end{mytikz}
\end{document}

在此处输入图片描述

答案1

\selectcolormodel运行良好,但tikz通过映射内部命令来执行大量颜色分配\let,这在许多情况下会绕过颜色转换。例如,直接使用颜色(或扩展到颜色的命令)有效,但使用键无效fill。也\colorlet不起作用。

\documentclass{article}

\usepackage{tikz}

\begin{document}


    \textcolor{red}{RED}

    \selectcolormodel{gray} 
    Black and white version:

    \def\mycmdcolor{red}
    \colorlet{mynewletcolor}{red}    
    \definecolor{mynewdefcolor}{rgb}{1,0,0}


    \textcolor{red}{RED} 

    \textcolor{\mycmdcolor}{MYCMDCOLOR}

    \textcolor{mynewletcolor}{MYNEWLETCOLOR}

    \textcolor{mynewdefcolor}{MYNEWDEFCOLOR}


    \begin{tikzpicture}    


    \fill[\mycmdcolor] (0,0) rectangle (1,1);

    \draw[fill=\mycmdcolor] (2,0) rectangle (3,1);

    \draw[fill=mynewletcolor] (4,0) rectangle (5,1);        

    \draw[fill=mynewdefcolor] (6,0) rectangle (7,1);

    \end{tikzpicture}

\end{document}

在此处输入图片描述

我认为唯一的解决方法是直接使用灰色模型加载xcolor。其他方法都只是治标不治本。

答案2

这似乎是一个错误tikz,请参阅

我听从了乌尔丽克·菲舍尔并修改了代码以避免fill=...。 它在 0.3 及更新版本中已修复。

如果你仍然遇到此问题,请更新你的 tex 发行版或从以下位置获取最新的软件包版本https://www.ctan.org/pkg/tikzducks或者https://github.com/samcarter/tikzducks

答案3

同时,这个错误已经在提交中被修复(或被解决)83b22a可从 pgf/tikz 的开发存储库获取https://sourceforge.net/projects/pgf/

相关内容