背景:我正在使用tcolorbox
它来构建我的定理、定义和示例环境。我一直在使用阴影作为这些环境的背景,但最近了解到阴影pgf
被硬编码为 RGB,但我必须使用 CMYK 进行打印。
pgfplots
能够在 CMYK 色彩空间中进行阴影处理,请参阅这里。
问题: tcolorbox
似乎使用pgf
来进行着色。是否可以改用tcolorbox
usepgfplots
来进行着色,最好是以自动方式?
例如,这是一个 MWE:
\documentclass{article}
\usepackage[cmyk]{xcolor}
\usepackage[many]{tcolorbox}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\tcbset{
definitionstyle/.style={%
enhanced,
interior style={left color=black!2, right color=blue!30}
}
}
\begin{document}
\begin{tcolorbox}[definitionstyle]
Blah blah
\end{tcolorbox}
\end{document}
我想left color=black!2, right color!30
用类似的东西代替
\begin{tikzpicture}
\begin{axis}[x=1cm,y=1cm,hide axis]
\addplot[surf,mesh/color input=explicit,shader=interp]
table[meta=cdata]{
x y cdata
1 1 color=black!2
2 1 color=blue!30
1 2 color=black!2
2 2 color=blue!30
};
\end{axis}
\end{tikzpicture}
pgfplots
这将使用 CMYK 颜色进行阴影处理。
答案1
\shade
例如,TikZ命令可以在底层中使用。我认为pgfplots
这里没有必要。
不要忘记使用\begin{tcbclipinterior}...\end{tcbclipinterior}
来获得正确的阴影剪辑。
\documentclass{article}
\usepackage[cmyk]{xcolor}
\usepackage[many]{tcolorbox}
\tcbset{
definitionstyle/.style={%
enhanced,
underlay={\begin{tcbclipinterior}
\shade[left color=black!2, right color=blue!30] (interior.north west) rectangle (interior.south east);
\end{tcbclipinterior}
},
}
}
\begin{document}
\begin{tcolorbox}[definitionstyle]
Blah blah
\end{tcolorbox}
\end{document}
答案2
(警告:非常黑客的解决方案)
利用克里斯蒂安的tcbclipinterior
和的想法underlay
,我想出了以下方法来确保一切都是 CMYK。
首先,使用下面的代码来制作一个完全着色的页面:
\pdfcompresslevel=0
\documentclass{minimal}
\usepackage[cmyk]{xcolor}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepackage{tikz}
\addtolength{\oddsidemargin}{-1.5in}
\addtolength{\evensidemargin}{-1.5in}
\addtolength{\textwidth}{1.5in}
\addtolength{\topmargin}{-1.5in}
\addtolength{\textheight}{1.75in}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=0, ymin=0, x=9in,y=13in, hide axis]
\addplot[surf,mesh/color input=explicit,shader=interp]
table[meta=cdata] {
x y cdata
0 0 color=black!4
1 0 color=teal!20
0 1 color=black!4
1 1 color=teal!20
};
\end{axis}
\end{tikzpicture}
\end{document}
输出前面有一个额外的空白页,因此将其删除(我只将第二页打印为 PDF,然后选择“预检”并执行“分析和修复”(完成此步骤是因为否则会出现“设备无关的颜色”)。假设最终结果是文件background.pdf
。然后我们可以执行以下操作:
\documentclass{article}
\usepackage[cmyk]{xcolor}
\usepackage[many]{tcolorbox}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usepackage{graphicx}
\usepackage{lipsum}
\tcbset{
definitionstyle/.style={%
enhanced,
underlay={
\begin{tcbclipinterior}
\includegraphics{background.pdf}
\end{tcbclipinterior}
}
}
}
\begin{document}
\begin{tcolorbox}[definitionstyle]
\lipsum[1]
\end{tcolorbox}
\end{document}
这将生成没有 RGB 的 pdf。
我要补充的是,如果您正在使用任何节点(就像我一样),您可以添加
\tcbuselibrary{skins}
然后添加
fill plain image=background.pdf
到该节点的选项。
答案3
这个问题很久以前就被问到了,但我想我有一个新的答案。
我遵循了最初的想法,用 阴影 代替传统的阴影pgfplots
。axis
的环境pgfplots
在内部用于fill overzoom picture
缩放到给定的节点,这里是 的背景tcolorbox
。
不幸的是,由于某些技术原因,代码无法直接应用于新样式definitionstyle cmyk
(至少我做不到)。我猜(但不知道)代码被扫描为逐字逐句pgfplots
。我的笨拙但可行的解决方案是将代码保存在一个文件中,然后在所需的位置输入该文件。
完整示例为:
\documentclass{article}
\usepackage[cmyk]{xcolor}
\usepackage[many]{tcolorbox}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{tcbverbatimwrite}{\jobname_myshading.tex}
\begin{axis}[x=1cm,y=1cm,hide axis]
\addplot[surf,mesh/color input=explicit,shader=interp]
table[meta=cdata]{
x y cdata
1 1 color=black!2
2 1 color=blue!30
1 2 color=black!2
2 2 color=blue!30
};
\end{axis}
\end{tcbverbatimwrite}
\tcbset{
definitionstyle/.style={%
enhanced,
interior style={left color=black!2, right color=blue!30}
},
definitionstyle cmyk/.style={%
enhanced,
interior style={fill overzoom picture={\input{\jobname_myshading.tex}}}
},
}
\begin{document}
\begin{tcolorbox}[definitionstyle]
Shading RGB
\end{tcolorbox}
\begin{tcolorbox}[definitionstyle cmyk]
Shading CMYK via pgfplots
\end{tcolorbox}
\end{document}