消除歧义。对于表格和奇偶行颜色,请查看 Stack Exchange 上的搜索是否有帮助:https://tex.stackexchange.com/search?q=table+row+color
消除歧义。有关单方面设置颜色的信息,请参阅xcolor
包\color
和\textcolor
。虽然\color
下面使用了,但它不是主要焦点。
如何有条件地设置颜色(基于当前颜色)?
而且,如果有足够声誉的人愿意这样做,我们可以从一些新标签中受益:
提取颜色规范
提取颜色规格
测试颜色
条件语句
答案1
刚入行的程序员\LaTeX
有各种调试技巧。即使我们解决了有时难以理解的编译错误,也不一定能得到想要的排版结果。为了帮助解决某些类型的调试问题,我们可以通过\def
“变量”将注释传递给自己。我们还可以使用颜色。
颜色对编译问题没有帮助。例如,当这个问题还在“实验室”时,从 Stack Exchange 线程中借用了一段代码\newcommand
。将其放在后定义部分\def
。无法编译。 "Missing \begin{document}."
因为在复制/粘贴之前一切都很好,所以\newcommand
将 重新定位\newcommand
到前定义部分\def
,编译过程非常顺利。如何以及为什么会混合使用\TeX
(\def)
和\LaTeX
(\newcommand)
以不同的方式运行,这是另一个线程的问题。我们如何调试它?很难知道;只是更多的尝试和错误咆哮https://ctan.org/lion/(描述由 \LaTeX 引起的一定程度的挫败感。)这里的重点是,一旦程序编译完成,基于颜色的调试就会有所帮助。
这就引出了一个问题:如何根据颜色有条件地设置颜色?
关键是这个命令,脱离上下文,检索当前的颜色信息。
\extractcolorspecs{.}{\dfltColorModel}{\dfltColor}
从上下文来看,是这样的。
% !TEX encoding = Mac Western
% What is the default font color model and spec?
% TeXShop (ver. 2.47) (Mac OSX 10.5.8)
% compliation method LaTeX pdfTeX
\documentclass[12pt]{article}
\usepackage[margin=0.5in]{geometry}
\usepackage[dvipsnames*, x11names, svgnames, hyperref]{xcolor}
% Create some quick \TeX commands for color-info parsing
\def\dfltColorModel
\def\dfltColor
% Get the system's default color
\AtBeginDocument{\colorlet{defaultcolor}{.}}
\begin{document}
% extract the color into Model and Color
\extractcolorspecs{.}{\dfltColorModel}{\dfltColor}
Default Color Model: \dfltColorModel
Default Color Spec: \dfltColor
\bigskip
%And, to demonstrate another xcolor feature, here's the \testcolor output.
\begin{testcolors}[rgb,cmyk,hsb,HTML,gray]
\testcolor{.}
\end{testcolors}
\end{document}
\dfltColorModel
和\dfltColor
是通过 创建的\def
,也可以很容易地通过\a
和来创建\b
。描述性标签有助于识别此命令产生的信息,它既是“颜色命令”,也是 {(颜色命令)} 和“模型命令”,{(模型-cmd)}。
https://ctan.org/pkg/xcolor?lang=en
“扩展 \LaTeX 的颜色功能:xcolor 包”(v2.12) (2016 年 5 月 11 日) Kern 博士
彩色.pdf
第 28-29 页
¶ 2.13 颜色信息
\extractcolorspec {(颜色)} {(命令)}
提取颜色规范(颜色)并将其放入(命令) 相当于 \def\cmd{{(模型)} {(规格)}}。
\extractcolorspecs {(颜色)} {(模型命令)} {(颜色命令)}
提取颜色规范(颜色)并将其放入(模型命令) 和 (颜色命令), 分别。
并且,为了查看颜色的样子(至少在当前的系统上,即我们自己的系统上):
2.6.4 颜色测试(第 23 页)
\测试颜色[(模型列表)] {(规格清单)}
每个 \testcolor 命令都会生成一个表格行,其中包含显示样本以及每个模型的相应参数。如果列模型与所讨论颜色的模型相匹配,则其参数会加下划线。请注意,此命令仅在 testcolors 环境中可用。有关应用程序,请参见第 31 页的图 2 和图 11、12。
在上面的示例输出中,我们看到的是“默认”(在此排字员的系统上)不是“黑色”,而是“灰色 0”。区别是什么?这可能类似于哲学入门中的“森林中的声音”,其中的区别在于定义。预期的定义(例如,参见http://latexcolor.com/(几个标题中有“排序依据”箭头,可根据这些箭头重新排列顺序,这可能很有用))是“黑色”,根据 rgb 或 html 等标准定义。在某些系统(考虑芯片组和操作系统)上,它很可能是基于 rgb 等的。但是,在此芯片组 (PPC) 和操作系统 Mac OS X 10.5.8 上,实际型号和规格分别为“灰色”和“0”。
下一步是改变颜色。脱离上下文,命令如下:
\color[rgb]{0,1,0}
将颜色改为“绿色”。可以使用任何颜色模型。使用 rgb 可简化颜色设置。
具体来说,有这样的情况:
% !TEX encoding = Mac Western
% How to change default font color model and spec?
% TeXShop (ver. 2.47) (Mac OSX 10.5.8)
% compliation method LaTeX pdfTeX
\documentclass[12pt]{article}
\usepackage[margin=0.5in]{geometry}
\usepackage{lipsum}
\usepackage[dvipsnames*, x11names, svgnames, hyperref]{xcolor}
% Create some quick \TeX commands for color-info parsing
\def\dfltColorModel
\def\dfltColor
% Get the system's default color
\AtBeginDocument{\colorlet{defaultcolor}{.}}
\begin{document}
\section{Section}
\lipsum[12]
% extract the present color into Model and Color
\extractcolorspecs{.}{\dfltColorModel}{\dfltColor}
\begin{testcolors}[rgb,cmyk,hsb,HTML,gray]
\testcolor{.}
\end{testcolors}
\bigskip
\bigskip
% change the "default" color scheme
\color[rgb]{0,1,0}
\section{Section}
\lipsum[13]
% extract the present color into Model and Color
\extractcolorspecs{.}{\dfltColorModel}{\dfltColor}
\begin{testcolors}[rgb,cmyk,hsb,HTML,gray]
\testcolor{.}
\end{testcolors}
\end{document}
彩色.pdf
第 22 页
¶ 2.6 颜色应用
¶ 2.6.1 标准颜色命令
\颜色 {(颜色)}
{(模型列表)]{{规格清单)}
切换到由名称/表达式或模型/规范指定的颜色。此颜色将一直有效,直到当前 TEX 组结束。
注意:即直到下一个 \color 命令。
\文本颜色 {(颜色)} {(文本)}
[(模型列表)] {(规格清单)} {(文本)}
[这些] 只是 \color 的替代语法,其中隐式添加了组。因此(文本)以指定的颜色显示,但随后颜色恢复为之前的值。此外,它调用 \leavevmode 以确保水平模式的启动。
请注意,我们从“.”中提取出来的是“当前”颜色信息。启动时的“当前”是“默认”设置。
以此为介绍,下面是实现有条件改变颜色概念的基本方法。
% !TEX encoding = Mac Westsern
% Changing color based on color
% TeXShop (ver. 2.47) (Mac OSX 10.5.8)
% compliation method LaTeX pdfTeX
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[margin=0.5in]{geometry}
%\usepackage{lipsum}
\usepackage[dvipsnames*, x11names, svgnames, hyperref]{xcolor}
\usepackage{xstring}
% see also \substitutecolormodel
\newcommand\useRgb{%
\extractcolorspecs{.}{\currentColorModel}{\currentColorSpec}
\IfStrEqCase*{\currentColorModel}{%
{rgb}{}%
{cmyk}{\selectcolormodel{rgb}}%
{hsb}{\selectcolormodel{rgb}}%
{HTML}{\selectcolormodel{rgb}}%
{html}{\selectcolormodel{rgb}}%
{gray}{\selectcolormodel{rgb}}%
[No change: Color model didn't match\\]
}
}
\newcommand\changeColor{%
\extractcolorspecs{.}{\currentColorModel}{\currentColorSpec}
\IfStrEqCase*{\currentColorSpec}{%
{0}{\color[rgb]{0,1,0}}% black to green
{0,0,0}{\color[rgb]{0,1,0}}% black to green
{0,1,0}{\color[rgb]{0,0,1}}% green to blue
{0,0,1}{\color[rgb]{1,0,0}}% blue to red
{1,0,0}{\color[rgb]{0,0,0}}% red to black
[No color change: Color spec didn't match\\]
}
}
% Create some quick \TeX commands for color-info parsing
\def\currentColorModel
\def\currentColorSpec
% Get the system's default color
\AtBeginDocument{\colorlet{defaultcolor}{.}}
\begin{document}
\useRgb
Cycle 1
\bigskip
\begin{testcolors}[rgb,cmyk,hsb,HTML,gray]
\testcolor{.}
\end{testcolors}
\bigskip
\changeColor
Cycle 2
\bigskip
\begin{testcolors}[rgb,cmyk,hsb,HTML,gray]
\testcolor{.}
\end{testcolors}
\bigskip
\changeColor
Cycle 3
\bigskip
\begin{testcolors}[rgb,cmyk,hsb,HTML,gray]
\testcolor{.}
\end{testcolors}
\bigskip
\changeColor
Cycle 4
\bigskip
\begin{testcolors}[rgb,cmyk,hsb,HTML,gray]
\testcolor{.}
\end{testcolors}
\bigskip
\changeColor
Cycle 1/5
\bigskip
\begin{testcolors}[rgb,cmyk,hsb,HTML,gray]
\testcolor{.}
\end{testcolors}
\bigskip
\bigskip
\section{Section}
%\lipsum[13]
Some Section text.
\changeColor
\subsection{Subsection}
%\lipsum[14]
Some subsection text.
\changeColor
\subsection{Subsection}
\changeColor
%\lipsum[15]
Some more subsection text.
\changeColor
%\lipsum[15]
Yet additional subsection text.
\changeColor
\section{Section}
\changeColor
%\lipsum[16]
Next section text.
\changeColor
%\lipsum[17]
Some more text.
\changeColor
%\lipsum[18]
And, some more text.
\end{document}
该\IfStrEqCase
命令(来自xstring
包)(\detokenize)
通过使用“ * ”版本的命令来解除标记。
结束语。
xcolor p.41 表 5.
请注意 的引用\MiKTeX
。期望测试所有安装变体上的所有软件包是不现实的。安装变体是 Stack Exchange 等讨论论坛所讨论的信息类型。