![LaTeX 颜色和 ICC 颜色配置文件](https://linux22.com/image/251675/LaTeX%20%E9%A2%9C%E8%89%B2%E5%92%8C%20ICC%20%E9%A2%9C%E8%89%B2%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.png)
我有一个 (pdf|Xe)LaTeX 文档,并尝试将其保留为 CMYK。对于某些文档,我为其元素使用特定颜色,即 RGB #BDCDDA。由于我的最终文档应使用 Adobe CMYK 配置文件“CoatedFOGRA39.icc”,因此我需要手动将该 RGB 值转换为例如:
\DefineNamedColor{named}{mycolor}{cmyk}{0.3203,0.1602,0.1172,0.0000}
但是,如果将来我想为另一家印刷公司切换到不同的 CMYK 颜色配置文件,我必须再次编辑颜色定义,例如 USWebCoatedSWOP 版本的 RGB #BDCDDA 具有不同的 CMYK 值。
理想情况下,我想写类似的东西
\DefineNamedColor{named}{mycolor}{/path/to/CoatedFOGRA39.icc}{#BDCDDA}
并将颜色从 RGB(可视为 sRGB 色彩空间)自动转换为正确的 CMYK 值。
有没有 LaTeX 包可以帮助我,或者我是否必须设置外部工作流程来预先生成具有正确 CMYK 颜色定义的 LaTeX 片段?
旁注:这个问题不是关于嵌入的图形/图片,而是关于使用命名颜色作为文本和背景。
答案1
我认为最简单的方法是将您的定义放在本地包中,以便它们可以轻松地在文档之间共享并根据不同的配置文件进行定制。
在你的文档中输入类似
\usepackage[CoatedFOGRA39]{mycolor}
如果您指定已设置的配置文件,则会做出相关定义,否则您会收到错误。mycolor.sty
可能看起来像这样:
\RequirePackage{color}
\DeclareOption{CoatedFOGRA39}{\def\mycolor{CoatedFOGRA39}}
\def\mycolorprofileA{CoatedFOGRA39}
\ProcessOptions\relax
\ifx\mycolor\@undefined
\PackageError{mycolor}{No color profile declared}{declare a color profile}
\fi
\ifx\mycolor\mycolorprofileA
\DefineNamedColor{named}{mycolor}{cmyk}{0.3203,0.1602,0.1172,0.0000}
\fi
上面仅在一个配置文件中声明了一种颜色,但它可以扩展......
答案2
仔细一看,这个问题就毫无意义了。为什么?如果你关心正确的颜色,RGB #BDCDDA 是不是一种颜色。它变成了一种颜色一起具有 RGB 颜色配置文件(sRGB 和 AdobeRGB 是常用的)。但它确实不是变成一种颜色,并附带 CMYK 配置文件,因为转换时需要开始和目标配置文件。在这里我们可以猜测由于颜色值的十六进制样式类似于网络,因此源配置文件可能是 sRGB。但提供这些值的人可能不精通颜色管理,否则他/她/他们会告诉你配置文件。
我看到了三种正确处理此问题的解决方案:
1 基于 RGB 的色彩管理文档
\documentclass{book}
\usepackage{xcolor}
\usepackage{luatex85}
%Create an OutputIntent in order to correctly specify colours
\immediate\pdfobj stream attr{/N 3} file{sRGB.icc}
\pdfcatalog{%
/OutputIntents [
<<
/Type /OutputIntent
/S /GTS_PDFA1
/DestOutputProfile \the\pdflastobj\space 0 R
/OutputConditionIdentifier (sRGB)
/Info (sRGB)
>>
<<
/Type /OutputIntent
/S /GTS_PDFX
/DestOutputProfile \the\pdflastobj\space 0 R
/OutputConditionIdentifier (sRGB)
/Info (sRGB)
>>
]
}
\DefineNamedColor{named}{mycolor}{HTML}{BDCDDA}
\begin{document}
\textcolor{mycolor}{light blue text}
\end{document}
如果由于这是 RGB 文档而无法找到答案,请记住,每家优秀的印刷店都会针对其机器进行颜色转换。只要他们知道源配置文件,他们就可以处理。
2 基于 CMYK 的色彩管理文档
\documentclass{book}
\usepackage[cmyk]{xcolor}
\usepackage{luatex85}
\immediate\pdfobj stream attr{/N 4} file{ISOcoated_v2_300_eci.icc}
\pdfcatalog{%
/OutputIntents [
<<
/Type /OutputIntent
/S/GTS_PDFA1
/DestOutputProfile \the\pdflastobj\space 0 R
/OutputConditionIdentifier (Coated FOGRA39)
/Info(FOGRA39L)
>>
<<
/Type /OutputIntent
/S/GTS_PDFX
/DestOutputProfile \the\pdflastobj\space 0 R
/OutputConditionIdentifier (Coated FOGRA39)
/Info(FOGRA39L)
>>
]
}
\DefineNamedColor{named}{mycolor}{cmyk}{0.3203,0.1602,0.1172,0.0000}
\begin{document}
\textcolor{mycolor}{light blue text}
\end{document}
这也行得通。在使用具有色彩管理功能的查看器查看的校准屏幕上,您将看到正确的颜色。这是在假设您所做的值转换是正确的情况下。
3 带有 RGB 文本对象的 CMYK OutputIntent
\documentclass{book}
\usepackage[cmyk]{xcolor}
\usepackage{luatex85}
\immediate\pdfobj stream attr{/N 4} file{ISOcoated_v2_300_eci.icc}
\pdfcatalog{%
/OutputIntents [
<<
/Type /OutputIntent
/S/GTS_PDFA1
/DestOutputProfile \the\pdflastobj\space 0 R
/OutputConditionIdentifier (Coated FOGRA39)
/Info(FOGRA39L)
>>
<<
/Type /OutputIntent
/S/GTS_PDFX
/DestOutputProfile \the\pdflastobj\space 0 R
/OutputConditionIdentifier (Coated FOGRA39)
/Info(FOGRA39L)
>>
]
}
\DefineNamedColor{named}{mycolor}{HTML}{BDCDDA}
\begin{document}
\textcolor{mycolor}{light blue text}
\end{document}
即使您为整个 PDF 声明了 OutputIntent,您也可以为某些文本对象分配不同的颜色配置文件,如本 MWE 中所示。但我不知道应用了哪种内部转换算法,所以我不推荐这种方式。
对于所有三种方式,我建议使用完整的 PDF/A 和/或 PDF/X 标准,而不仅仅是我在此处展示的 MWE。这里我展示了这样的文档是什么样子的。
我在示例中使用了双 OutputIntent,因为查看器可以应用A
或X
。还会有未管理颜色的查看器。如果您使用具有相同配置文件的两者,则比较安全。