对此可能没有简单而通用的解决方案,但tikz
无论背景是什么,是否有可能用背景的负片色来书写文字?
为了说明问题(但我不要求针对特定问题的解决方案)这背景):
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\shade[left color=black,right color=red] (0,0) rectangle (4,2);
\node at (2,1) {this text is hard to read};
\end{tikzpicture}
\end{document}
负片可以以任何方式理解(补色,黑色的补色),其实这并不重要。其目的是获得适合任何背景的可读内容。
编辑这是对所建议的不同方法的比较。
- 第一栏:原文(黑色文字),400不太好读
- 第二栏:我的要求:根本不是一个好主意!
- 第三列:白色文字,黑色轮廓:小的时候难以阅读
- 第四栏:白底黑字,上面写着
opacity
:我的最爱 - 第五列:黑色背景中的白色文字:我也喜欢它,但稍微更喜欢这里的第四个,因为它更浅。
答案1
简短的回答是:使用blend modes
(p.340,pgfmanual v3.0.1a)和difference
模式。
但是,为了获得更好的结果,你可以使用文字轮廓或者不透明度的背景下图为不同的测试:
\documentclass[tikz]{standalone}
\usepackage[outline]{contour}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node (a) {\includegraphics{tiger}};
\path (a.north) -- (a.south)
\foreach \pos in {1,...,7}{coordinate[pos=\pos/8] (p-\pos)};
\tikzset{my text/.style={text=white,font=\Huge\bfseries}}
\def\mytext{Test of long text}
\node[my text] (ex) at (p-1) {\mytext};
\node[anchor=east] at (ex -| a.west) {white text};
\node[my text,text=black](ex) at (p-2) {\mytext};
\node[anchor=east] at (ex -| a.west) {black text};
\node[my text,fill opacity=.5,fill=black,text opacity=1] (ex) at (p-3) {\mytext};
\node[anchor=east] at (ex -| a.west) {black background with opacity};
\node[my text,text=black,fill opacity=.5,fill=white,text opacity=1] (ex) at (p-4) {\mytext};
\node[anchor=east] at (ex -| a.west) {white background with opacity};
\node[my text] (ex) at (p-5) {\contour{white}{\mytext}};
\node[anchor=east] at (ex -| a.west) {white outlined text};
\node[my text] (ex) at (p-6) {\contour{black}{\textcolor{white}{\mytext}}};
\node[anchor=east] at (ex -| a.west) {black outlined text};
\begin{scope}[blend group=difference]
\clip ($(p-7 -| a.west) + (0,1.1em)$) rectangle ($(p-7 -| a.east) + (0,-1.1em)$);
\node {\includegraphics{tiger}};
\node[my text] (ex) at (p-7) {\mytext};
\end{scope}
\node[anchor=east] at (ex -| a.west) {\emph{required} blended text (difference)};
\end{tikzpicture}
\end{document}
答案2
不回答:你让一个糟糕的决定变得更糟。首先,你不需要t=
前缀,因为它们都是 t 值。如果你删除它,你可以选择放置一个带有纯色背景的角框,指定四个字符的宽度和一个字符的高度
\documentclass[tikz]{standalone}
\usepackage{mwe} % <- for dummy images
\begin{document}
\begin{tikzpicture}[
cornerbox/.style 2 args={
path picture={
\node{\includegraphics[width=1cm,height=1cm]{#1}};
\node[fill=black,text=white,
minimum width=3ex,minimum height=1ex,
anchor=north west,
outer sep=0,font=\sffamily\tiny]
at (path picture bounding box.north west) {#2};
},
inner sep=0,
minimum size=1cm
}
]
\node[cornerbox={example-image}{$\infty$},draw,thick] at (0,0) {};
\node[cornerbox={example-image-a}{200},draw,thick] at (1,0) {};
\node[cornerbox={example-image-b}{5000},draw,thick] at (2,0) {};
\end{tikzpicture}
\end{document}
在这里,您可以根据需要将注释框设置得尽可能小,以便视障人士和色盲人士也能读取您的数据。
答案3
这个问题很有趣,我不知道答案。不过,你可以这样做来模拟这种效果:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fadings}
\usepackage{lipsum}
\newcommand\fadingtext[3][]{%
\begin{tikzfadingfrompicture}[name=fading letter]
\node[text=transparent!0,inner xsep=0pt,outer xsep=0pt,#1] {#3};
\end{tikzfadingfrompicture}%
\begin{tikzpicture}[baseline=(textnode.base)]
\node[inner sep=0pt,outer sep=0pt,#1](textnode){\phantom{#3}};
\shade[path fading=fading letter,#2,fit fading=false]
(textnode.south west) rectangle (textnode.north east);%
\end{tikzpicture}%
}
\begin{document}
\begin{tikzpicture}
\shade[left color=black,right color=red] (0,0) rectangle (4,2) (2,1) node{\fadingtext{left color=white, right color=yellow}{this text is easier to read}};
\end{tikzpicture}
\end{document}
(示例基于本论坛上的另一个答案)