以结构化方式在 tikz 图形中生成命名颜色

以结构化方式在 tikz 图形中生成命名颜色

我自动生成了很多 tikz 图片,用于 latex 文档。有些元素有自己的颜色,这取决于一些数值,我想在文本中使用这些数值来更好地说明我所谈论的元素。现在的问题是如何声明它们以及如何引用它们,以免混淆,因为有很多图片都有自己的颜色。latex 中是否有任何“命名空间”概念?或者有任何其他方法可以创建“本地”颜色,然后可以通过例如图形的标签进行全局寻址?

例如,这里有一个简单的图表来说明这个问题:

\begin{figure}[!ht]
\centering
\resizebox{1\textwidth}{!}{
\begin{tikz}
\definecolor{mycolor}{RGB}{66,62,195}
\tikzstyle{every node}=[font=\LARGE]
\draw [ color=mycolor] (20.75,10.5) rectangle (16,13.25);
\end{tikz}
}
\label{fig:my_label}
\caption{\textcolor{REFERENCE HERE}{COLORED TEXT}}
\end{figure}

我不确定如何mycolor从标题中引用,或者以模块化的方式定义颜色,以便多个生成的 tikz 图形的名称不会重叠。

答案1

您可能不需要以非常复杂的方式为您想要实现的颜色生成名称。相反,这只是一个范围的问题,即在范围内定义和重新定义颜色。

如果您想在整个文档中使用某种颜色,请在序言中定义它。如果您想在某个特定范围内使用它,例如某个figure环境,请在此环境内(重新)定义它。定义后,该颜色在相关范围内可用。如果您还想在标题中使用该颜色(即,在 之外tikzpicture,但在 之内figure),只需在相关位置定义它即可。

\documentclass{article}
\usepackage{tikz}

% define color for whole document
\definecolor{mycolor}{RGB}{255,0,0}

\begin{document}

\begin{figure}
    % redefine color for this figure only
    \definecolor{mycolor}{RGB}{0,255,0}
    \centering
    \begin{tikzpicture}[every node/.style={font=\LARGE}]
        \draw[color=mycolor] (20.75,10.5) rectangle (16,13.25);
    \end{tikzpicture}
    \label{fig:my_labelA}
    \caption{\textcolor{mycolor}{COLORED TEXT}}
\end{figure}

\begin{figure}
    % redefine color for this figure only
    \definecolor{mycolor}{RGB}{66,62,195}
    \centering
    \begin{tikzpicture}[every node/.style={font=\LARGE}]
        \draw[color=mycolor] (20.75,10.5) rectangle (16,13.25);
    \end{tikzpicture}
    \label{fig:my_labelB}
    \caption{\textcolor{mycolor}{COLORED TEXT}}
\end{figure}

\begin{figure}
    % no color redefinition here, so document-wide definition applies
    \centering
    \begin{tikzpicture}[every node/.style={font=\LARGE}]
        \draw[color=mycolor] (20.75,10.5) rectangle (16,13.25);
    \end{tikzpicture}
    \label{fig:my_labelC}
    \caption{\textcolor{mycolor}{COLORED TEXT}}
\end{figure}

\end{document}

在此处输入图片描述

笔记:正如问题评论中指出的那样,您不应该使用环境tikz,而应该使用tikzpicture。此外,使用\tikzset而不是\tikzstyle(或将全局样式作为选项tikzpicture直接附加到环境中,如上例所示)。最后,使用\resizebox可能不是必要的,在任何情况下都应小心处理,因为它也会调整您可能不想要的字体大小。


如果你真的需要在范围内全局定义颜色,您可以通过 进行此操作\globalcolorstrue。但您需要注意颜色的名称不同,否则您只能重新定义。

\documentclass{article}
\usepackage{tikz}

% define color for whole document
\definecolor{mycolor}{RGB}{255,0,0}

\begin{document}

\begin{figure}
    % global defintion inside scope
    \globalcolorstrue
    \definecolor{mycolorA}{RGB}{0,255,0}
    \centering
    \begin{tikzpicture}[every node/.style={font=\LARGE}]
        \draw[color=mycolorA] (20.75,10.5) rectangle (16,13.25);
    \end{tikzpicture}
    \label{fig:my_labelA}
    \caption{\textcolor{mycolorA}{COLORED TEXT}}
\end{figure}

\begin{figure}
    \centering
    \begin{tikzpicture}[every node/.style={font=\LARGE}]
        \draw[color=mycolorA] (20.75,10.5) rectangle (16,13.25);
    \end{tikzpicture}
    \label{fig:my_labelB}
    \caption{\textcolor{mycolorA}{COLORED TEXT}}
\end{figure}

\begin{figure}
    \centering
    \begin{tikzpicture}[every node/.style={font=\LARGE}]
        \draw[color=mycolor] (20.75,10.5) rectangle (16,13.25);
    \end{tikzpicture}
    \label{fig:my_labelC}
    \caption{\textcolor{mycolor}{COLORED TEXT}}
\end{figure}

\end{document}

在此处输入图片描述

作为一种变体,您可以在每个环境中使用相同的名称定义颜色figure,然后全局定义一种新颜色作为副本,然后也可以在外部使用该颜色figure。这样,颜色名称在环境中始终相同figure,但至少为了能够在正文中使用所有颜色,您需要以某种方式为颜色命名不同。您可以使用图号以便于参考:

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{figure}
    % local defintion inside scope
    \definecolor{mycolor}{RGB}{0,255,0}
    \centering
    \begin{tikzpicture}[every node/.style={font=\LARGE}]
        \draw[color=mycolor] (20.75,10.5) rectangle (16,13.25);
    \end{tikzpicture}
    \label{fig:my_labelA}
    \caption{\textcolor{mycolor}{COLORED TEXT}}
    % global copy with different name
    \globalcolorstrue
    \colorlet{mycolor \thefigure}{mycolor}
\end{figure}

\begin{figure}
    \definecolor{mycolor}{RGB}{255,0,0}
    \centering
    \begin{tikzpicture}[every node/.style={font=\LARGE}]
        \draw[color=mycolor] (20.75,10.5) rectangle (16,13.25);
    \end{tikzpicture}
    \label{fig:my_labelB}
    \caption{\textcolor{mycolor}{COLORED TEXT}}
    \globalcolorstrue
    \colorlet{mycolor \thefigure}{mycolor}
\end{figure}

As shown in \textcolor{mycolor 1}{figure 1} and also in \textcolor{mycolor 2}{figure 2}

\end{document}

在此处输入图片描述

相关内容