我自动生成了很多 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}