我想设置一个包含一些用于标题和花哨标题等的徽标的包。目前我遇到的关键问题是应该能够获得不同颜色的徽标。徽标有 PNG、JPG、EMF 或 SVG 格式。
我知道一些(部分)解决方案,但它们似乎不是完全“正确”的解决方案,或者我缺少一些关于如何真正使解决方案发挥作用的细节:
- 将 SVG 转换为 PDF,并在包中为需要的每种颜色添加一个徽标。简单,但无法真正扩展。
- 使用 PNG(具有白色背景)和 TikZ 混合器技巧这里或者来自 TikZ 的淡入淡出技巧这个答案。PNG 的分辨率可能足以满足文档的需求,但是为了获得美观的投影仪演示文稿,我更喜欢矢量图形。
- 使用 JPG 并应用建议的解决方案这个答案。这种方法的主要问题是,我不完全清楚是否/如何可以将徽标设置为特定颜色。
- 将 SVG 转换为“无色”PDF,并使用类似的方法
{\color{mycolor} \includegraphics{logo.pdf}}
(如建议的那样这个答案或者另一个答案)。但是,我尝试了不同的方法将 SVG 转换为 PDF,所有工具似乎都设置了 PDF 中的颜色,因为包含不起作用。手动摆弄 PDF 似乎也不是一个合理的解决方案。 - 使用
svg
包直接加载 SVG(如这个问题)。不过这个在Windows上好像不行,很不方便。 - 将 SVG 转换为 TikZ 代码并包含 TikZ 图片(如上所述这里)。这允许动态更改颜色,但我有点担心性能。例如,如果该包用于每张幻灯片上都出现徽标的 Beamer 演示文稿,则 TikZ 图像将为每张幻灯片单独渲染(如果我理解正确的话)。我知道独立包,但由于它似乎在用户目录中构建 TikZ 图像(使用
mode=build
或类似操作时)我对这种方法也有点犹豫。 - (在某种意义上类似于 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 packages
color or
xcolor 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
是默认颜色设置为黑色。