Nach dem ich letztens zweifarbige Buchstaben erzeugt habe, folgt nun eine weitere Farbspielerei. Sie basiert auf der TeX.sx Frage How to shade a single character? Dort sollte ein Zeichen so mit einem Farbverlauf versehen werden, dass es trotzdem im normalen Text verwendet werden kann. Es darf also keinen zusätzlichen Rand haben und muss sich an der Grundlinie des umgebenden Textes ausrichten.
Damit man unterschiedliche Zeichen oder Texte verschieden färben kann, bietet es sich an, einen Befehl \fadingtext[<farboptionen>]{<text>} zu definieren. Zusätzlich wird noch ein neue Stil fading text eingeführt, über den sich die Farben voreinstellen lassen.
\usepackage{tikz} \usetikzlibrary{fadings} \tikzset{fading text/.style={}} \newcommand\fadingtext[2][]{% \begin{tikzfadingfrompicture}[name=fading letter] \node[text=transparent!0,inner xsep=0pt,outer xsep=0pt] {#2}; \end{tikzfadingfrompicture}% \begin{tikzpicture}[baseline=(textnode.base)] \node[inner sep=0pt,outer sep=0pt](textnode){\phantom{#2}}; \shade[path fading=fading letter,fading text,#1,fit fading=false] (textnode.south west) rectangle (textnode.north east);% \end{tikzpicture}% }
Mit Hilfe von \phantom wird zunächst der Knoten textnode als Platzhalter definiert. Dabei werden sowohl die inneren als auch die äußeren Abstände Null gesetzt und dieser Knoten wird gleichzeitig verwendet, um das Ergebnis mittels baseline=(textnode.base) am umgebenden Text auszurichten. Anschließend wird genau dieser Knoten mit dem vorher definierten Fading schattiert.
Die Färbung lässt sich nun zum Beispiel wie folgt voreinstellen:
\tikzset{fading text/.style={left color=red,right color=red!50!blue,middle color=green}}
Zu beachten ist dabei, dass die middle color immer als letzes angegeben werden muss. Ändert man im optionalen Argument von \fadingtext eine der anderen Farben, muss die middle color deshalb am Ende erneut angegeben werden. Diese Randbedingung ermöglicht aber auch das einfache Entfernen der middle color.
Hier ist noch ein einfaches Testbeispiel:
\documentclass[varwidth,margin=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{fadings}
\tikzset{fading text/.style={}}
\newcommand\fadingtext[2][]{%
\begin{tikzfadingfrompicture}[name=fading letter]
\node[text=transparent!0,inner xsep=0pt,outer xsep=0pt] {#2};
\end{tikzfadingfrompicture}%
\begin{tikzpicture}[baseline=(textnode.base)]
\node[inner sep=0pt,outer sep=0pt](textnode){\phantom{#2}};
\shade[path fading=fading letter,fading text,#1,fit fading=false]
(textnode.south west) rectangle (textnode.north east);%
\end{tikzpicture}%
}
\usepackage{lipsum}
\begin{document}
\tikzset{fading text/.style={left color=red,right color=red!50!blue,middle color=green}}
\setlength\fboxsep{0pt}
\fbox{\scalebox{4}{\fadingtext[left color=red]{$4$}}} Zum Testen der Ausrichtung: \fadingtext{Hier steht ein bunter Beispielsatz.}
\noindent\fadingtext[top color=orange,bottom color=purple,middle color=.]{\parbox[b]{\linewidth}{\strut\lipsum[1]}}
\end{document}
Den Befehl könnte man noch erweitern: Für den Hintergrund des TikZ am Anfang habe ich bei der Fadingdefinition ein fill=transparent!70 ergänzt. Je höher die Zahl ist, um so blasser wird übrigens die Schattierung, bei 100 ist sie nicht mehr zu sehen.
Das zweite oben angegebene Beispiele würde mit dem zusätzlichen fill=transparent!70 zu einem endgültig in die Kategorie Spielerei fallenden
Comments
3 responses to “Farbverlauf auf einem Text”
Elke, Du bezauberst mich. Dann kann ich ja demnächst Geldscheine fälschen, wenn es so weitergeht :()
Interessante Möglichkeit! Was zunächst wie eine Spielerei aussieht, kann ich mir in Diagrammen vorstellen, wo enthaltene Bausteine schon eine Schattierung enthalten, um sie dem Auge gefälliger zu machen. Eine analoge dezente, also dazu passende, Schattierung von enthaltenen Text auf den Bausteinen könnte es harmonischer machen, statt einfarbigem Text auf schattiertem Untergrund.
Ich habe das jetzt auch in die TeXample TikZ-Galerie aufgenommen. Die gefüllten Gläser gern auch, hab nur noch nicht geschafft, die Erklärungen ins Englische zu übertragen. Sowas ist ja auch immer schön dazu.