
Короче говоря, я хотел бы сделать именно то, что было сделано в предыдущемвопрос, но для любых цветов. Или хотя бы лучше понять, как это работает.
Точнее: я хотел бы автоматически менять цвет текста в соответствии с цветом фона (что сделано в предыдущем вопросе, упомянутом). Ответ, данный с использованием режима смешивания, немного "магический" для меня: он работает для синего и белого. Но я хотел бы знать, как сделать то же самое для любой пары цветов (скажем, colorA
и colorB
). Я прочитал документацию о режимах смешивания, но не нашел формулы или алгоритма, которые я мог бы реверсировать, чтобы воспроизвести "магический" ответ для любых цветов (или хотя бы понять, как это работает).
Вот MWE:
\documentclass{beamer}
\usepackage{tikz}
\usetheme{Madrid}
\definecolor{colorA}{RGB}{255,0,0} % Red for the example but could be any other color
\definecolor{colorB}{RGB}{0,0,255} % Blue for the example but could be or any other color
% Define colorC and colorD to fit with the blend of colorA and colorB
\colorlet{colorC}{colorA!50!colorB} %
\colorlet{colorD}{colorB!50!colorA} % or maybe something like R_A + R_B, G_A + G_B, B_A + B_B
\usebackgroundtemplate{
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (0,\paperheight);
\coordinate (C) at (\paperwidth,0);
\coordinate (D) at (\paperwidth,\paperheight);
\fill[colorA] (A) -- (C) -- (B) -- cycle;
\fill[colorB](D) -- (C) -- (B) -- cycle;
\end{tikzpicture}
}
\begin{document}
\begin{frame}
\frametitle{Example}
\pgfsetblendmode{difference}% or another blend mode
\color{colorC} Could this text appear with colorA on a colorB background and with colorB on colorA background?
\end{frame}
\end{document}
решение1
Это не совсем ответ на вопрос (я считаю, что это невозможно ни с какими заданными цветами), но это способ достичь результата.
\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{fadings}
\definecolor{colorA}{RGB}{200,0,0}
\definecolor{colorB}{RGB}{0,0,200}
\begin{tikzfadingfrompicture}[name=myfading]
\fill[transparent!0] (-1.5,-1) -- (-1.5,1) -- (1.5,-1) --cycle;
\node[transparent!100] {\Huge\bf Test};
\clip (-1.5,1) -- (1.5,1) -- (1.5,-1) --cycle;
\node[transparent!0] {\Huge\bf Test};
\end{tikzfadingfrompicture}
\begin{tikzfadingfrompicture}[name=myinversefading]
\fill[transparent!0] (-1.5,-1) rectangle (1.5,1);
\fill[transparent!100, path fading=myfading, fit fading=false] (-1.5,-1) rectangle (1.5,1);
\end{tikzfadingfrompicture}
\begin{document}
\begin{tikzpicture}
\fill[colorA, path fading=myfading, fit fading=false] (-1.5,-1) rectangle (1.5,1);
\fill[colorB, path fading=myinversefading, fit fading=false] (-1.5,-1) rectangle (1.5,1);
\end{tikzpicture}
\end{document}
Редактировать:Также можно сделать только с одним tikzfadingfrompicture
, если ничего другого не требуется на заднем плане.
\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{fadings}
\definecolor{colorA}{RGB}{200,0,0}
\definecolor{colorB}{RGB}{0,0,200}
\begin{tikzfadingfrompicture}[name=myfading]
\fill[transparent!0] (-1.5,-1) -- (-1.5,1) -- (1.5,-1) --cycle;
\node[transparent!100] {\Huge\bf Test};
\clip (-1.5,1) -- (1.5,1) -- (1.5,-1) --cycle;
\node[transparent!0] {\Huge\bf Test};
\end{tikzfadingfrompicture}
\begin{document}
\begin{tikzpicture}
\fill[colorA] (-1.5,-1) rectangle (1.5,1);
\fill[colorB, path fading=myfading, fit fading=false] (-1.5,-1) rectangle (1.5,1);
\end{tikzpicture}
\end{document}
или вообще без него tikzfadingfrompicture
, если целью является только этот один результат:
\documentclass[tikz, border=1cm]{standalone}
\definecolor{colorA}{RGB}{200,0,0}
\definecolor{colorB}{RGB}{0,0,200}
\begin{document}
\begin{tikzpicture}
\fill[colorA] (-1.5,-1) -- (1.5,-1) -- (-1.5,1) --cycle;
\node[colorB] {\Huge\bf Test};
\clip (-1.5,1) -- (1.5,1) -- (1.5,-1) --cycle;
\fill[colorB] (-1.5,1) -- (1.5,1) -- (1.5,-1) --cycle;
\node[colorA] {\Huge\bf Test};
\end{tikzpicture}
\end{document}