7.无色PDF

7.无色PDF

我想设置一个包含一些用于标题和花哨标题等的徽标的包。目前我遇到的关键问题是应该能够获得不同颜色的徽标。徽标有 PNG、JPG、EMF 或 SVG 格式。

我知道一些(部分)解决方案,但它们似乎不是完全“正确”的解决方案,或者我缺少一些关于如何真正使解决方案发挥作用的细节:

  1. 将 SVG 转换为 PDF,并在包中为需要的每种颜色添加一个徽标。简单,但无法真正扩展。
  2. 使用 PNG(具有白色背景)和 TikZ 混合器技巧这里或者来自 TikZ 的淡入淡出技巧这个答案。PNG 的分辨率可能足以满足文档的需求,但是为了获得美观的投影仪演示文稿,我更喜欢矢量图形。
  3. 使用 JPG 并应用建议的解决方案这个答案。这种方法的主要问题是,我不完全清楚是否/如何可以将徽标设置为特定颜色。
  4. 将 SVG 转换为“无色”PDF,并使用类似的方法{\color{mycolor} \includegraphics{logo.pdf}}(如建议的那样这个答案或者另一个答案)。但是,我尝试了不同的方法将 SVG 转换为 PDF,所有工具似乎都设置了 PDF 中的颜色,因为包含不起作用。手动摆弄 PDF 似乎也不是一个合理的解决方案。
  5. 使用svg包直接加载 SVG(如这个问题)。不过这个在Windows上好像不行,很不方便。
  6. 将 SVG 转换为 TikZ 代码并包含 TikZ 图片(如上所述这里)。这允许动态更改颜色,但我有点担心性能。例如,如果该包用于每张幻灯片上都出现徽标的 Beamer 演示文稿,则 TikZ 图像将为每张幻灯片单独渲染(如果我理解正确的话)。我知道独立包,但由于它似乎在用户目录中构建 TikZ 图像(使用mode=build或类似操作时)我对这种方法也有点犹豫。
  7. (在某种意义上类似于 4)将 SVG 转换为 TikZ 代码(如上一点)以呈现“无色”PDF。这个问题展示了如何picture使用环境创建“无色”PDF,似乎暗示使用 TikZ 也应该可以做到这一点,但是一旦我添加\usepackage{tikz}到提供的 MWE,PDF 就不再是无色的。我也不知道是否/如何使用 TikZ 渲染“无色”PDF。

也许值得一提的是,应该包含的徽标最近已经更改了很多。因此,如果可以在很少甚至不需要人工干预的情况下创建所需的文件,那就太好了。此外,该软件包应该易于安装/使用。

目前,选项 6 和 4/7 看起来最有希望,但如果可以为 6 构建“看不见”的图像或者有人可以指出我如何生成“无色”pdf,那就太好了。

如果我忘记了什么,请随意添加选项!

答案1

7.无色PDF

每个用户/包可以直接使用低级命令为 PDF 文件实现颜色(\pdfliteral,,\pdfcolorstack'\special{...} , ...). In case of LaTeX, the color packagescolor orxcolor are used that add color support to LaTeX. The driver files (pdftex.def ,dvips.def`,...)定义 LaTeX 颜色界面的宏:

  • \set@color
  • \reset@color
  • \set@page@color

因此,可以再次重新定义这些命令以抑制颜色设置:

\usepackage{color}
\makeatletter
\let\set@color\relax
\let\reset@color\relax
\let\set@page@color\relax
\makeatother

包裹xcolor

包文件在包的末尾xcolor.sty执行。因此,在包加载后重新定义就太晚了。解决方法是采用一种巧妙的加载和重新定义顺序:\color{black}\set@color

% 1. Load package color that loads the driver file that defines
%    \set@color, \reset@color, and \set@page@color.
\usepackage{color}

% 2. Redefine the low level color commands.
\makeatletter
\let\set@color\relax
\let\reset@color\relax
\let\set@page@color\relax
\makeatother

% 3. Load package xcolor that detects that the driver file is already loaded.
%    Therefore, the low level color commands are not redefined and
%    \color{black} at the end is not setting the color.
\usepackage{xcolor}

如果xcolor包已经在类中加载,则color可以先加载包:

\RequirePackage{color}
\makeatletter
\let\set@color\relax
\let\reset@color\relax
\makeatother

\documentclass[tikz]{standalone}% Example, this loads package xcolor

在加载时,包color看不到全局选项。如果需要,必须\RequirePackage再次提供选项。(例如,不需要 pdfTeX、LuaTeX 和 XeTeX 的驱动程序选项,因为这些 TeX 引擎可以在 TeX 语言级别自动检测。配置文件color.cfg对 TeX Live、MikTeX 等执行此操作)

包裹tikz

TikZ 图形可以包含(x)color软件包的颜色设置或其自己的颜色设置,如 中定义pgfsys-common-pdf.def。此外,这些颜色定义可以在加载 TikZ/pgf 后重新定义:

\makeatletter
\def\pgfsys@color@rgb@stroke#1#2#3{}
\def\pgfsys@color@rgb@fill#1#2#3{}
\def\pgfsys@color@cmyk@stroke#1#2#3#4{}
\def\pgfsys@color@cmyk@fill#1#2#3#4{}
\def\pgfsys@color@cmy@stroke#1#2#3{}
\def\pgfsys@color@cmy@fill#1#2#3{}
\def\pgfsys@color@gray@stroke#1{}
\def\pgfsys@color@gray@fill#1{}
\makeatother

调试

pdfTeX 的以下设置允许在文本查看器中查看未压缩的 PDF 文件,以检测页面流中的颜色命令:

\pdfobjcompresslevel=0
\pdfcompresslevel=0

XeTeX 使用 xdvipdfmx 程序作为输出驱动程序,必须将未压缩输出文件的选项传递给后者,对 XeLaTeX 的命令调用变为

 xelatex -output-driver="xdvipdfmx -z 0"

PDF 文件中的典型颜色命令(还有其他命令,完整列表请参阅 PDF 规范):

<gray> G
<gray> g
<red> <green> <blue> RG
<red> <green> <blue> rg
<cyan> <magenta> <yellow> <black> K
<cyan> <magenta> <yellow> <black> k

大写运算符用于描边操作,小写运算符用于填充。尖括号中的参数是 0 到 1 之间的十进制数。例如:0 g 0 G是默认颜色设置为黑色。

相关内容