如何有条件地设置颜色

如何有条件地设置颜色

消除歧义。对于表格和奇偶行颜色,请查看 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}

默认颜色通过 \testcolor

\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}

基本颜色变化和 \testcolor

彩色.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 等讨论论坛所讨论的信息类型。

相关内容