如何在 LaTeX 中的文本上添加定向渐变外发光效果?

如何在 LaTeX 中的文本上添加定向渐变外发光效果?

如何在 LaTeX 中实现以下效果(有时称为“(定向)渐变外发光”)?

在此处输入图片描述

以下是我在 Google 上找到的这种风格的另外两个示例:

有关的:

  1. 这是一个关于 TeX SE 的问题关于纯色(即无渐变)外发光。
  2. 这是一个关于 Graphic Design SE 的问题提到了在 Photoshop 上执行此操作的几种技巧,也许其中一种适用于 TikZ(如何做到这一点超出了我的理解/能力)。上面的“2023 年 10 月 3 日版本”图像是在 Photoshop 上使用方法 2 创建的这个答案

编辑:我之所以想使用 LaTeX 创建这个,是因为“2023 年 10 月 3 日的版本”确实是Version of \today,并且它旨在用于以一定频率(比如每周一次)重建的书籍的标题页,并且每次在 Photoshop/InDesign 上手动更新日期会花费大量工作,我希望可以通过自动化来避免这些工作。

只要可以自动化,将这种效果外包给另一个程序的解决方案也同样好。例如,一个 Python 脚本将一串文本作为输入,并使用文本+效果渲染 SVG 或 PNG 文件(例如通过使用 Inkscape 或其他程序对其进行处理)就可以完美地工作(因为这样我们就可以编写另一个脚本来创建标题页,只需调用此辅助脚本几次,然后使用例如subprocess调用 LaTeX 对其进行编译即可。)

答案1

\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{fadings}
\usepackage[outline]{contour}
\begin{tikzfadingfrompicture}[name=myfading]
\foreach \i in {0.05,0.10,...,0.80}{
\contourlength{\i pt}
\node[opacity=0.1] {\fontfamily{ptm}\selectfont \contour{transparent!0}{\bf{Version of Oct 03, 2023}}};
}
\node[transparent!100] (n) {\fontfamily{ptm}\selectfont {\bf{Version of Oct 03, 2023}}};
\end{tikzfadingfrompicture}
\begin{document}
\begin{tikzpicture}
\shade[path fading=myfading, fit fading=false, top color=blue, bottom color=red] (n.south west) rectangle (n.north east);
\end{tikzpicture}
\end{document}

带有红色和蓝色光芒的文字

编辑:通过删除阴影中的空白来获得更好的颜色。

\node[transparent!100, inner sep=0.80pt] (n) {\fontfamily{ptm}\selectfont {\bf{Version of Oct 03, 2023}}};

在此处输入图片描述

答案2

在此处输入图片描述

考虑到@hpekristiansen的评论和解决方案,我提出了我之前答案的修改版本。它解决了符号数量很大时的问题。但想法是一样的。

我将所需的元素括到一个 中\newcommand\Cfading用于tikzfadinngfrompicture,并将所需的元素括到一个pic对象 中C-fading,用于图形结果。

代码

\documentclass[11pt, margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{math, calc, fadings}
\usepackage{xcolor}
\usepackage[outline]{contour}
% \contourlength{.5pt}
\begin{document}

\newcommand{\Cfading}[3]{%  text, font, scaling factor
  \begin{tikzfadingfrompicture}[name=Cfading]
    \path node[scale=#3] (0, 0) (noneCF) {%
      \fontfamily{#2}\selectfont
      \contour{transparent!0}{#1}
    };
  \end{tikzfadingfrompicture}
  \tikzmath{%
    real \sc;  % scaling factor
    \sc = #3;
  }
}
\tikzset{%
  CE fading/.style={%
    path fading=Cfading, shade, fit fading=false, opacity=.02%
  },
  CI fading/.style={%
    path fading=Cfading, shade, fit fading=false, opacity=.1%
  }
}
\tikzset{%
  pics/C-fading/.style 2 args={% top color, bottom color
    code={%
      \foreach \j in {1, 2, ..., 12}{%
        \begin{scope}[transform canvas={shift={(\j*30: 2.2*\sc pt)}}]
          \fill[CE fading, top color=#1, bottom color=#2]
          (noneCF.south west) rectangle (noneCF.north east);
        \end{scope}
      }
      \foreach \j in {1, 2, ..., 12}{%
        \begin{scope}[transform canvas={shift={(\j*33: 1.1*\sc pt)}}]
          \fill[CI fading, top color=#1, bottom color=#2]
          (noneCF.south west) rectangle (noneCF.north east);
        \end{scope}
      }
      \fill[path fading=Cfading, fit fading=false, color=white]
      (noneCF.south west) rectangle (noneCF.north east);    
    }
  }
}

\Cfading{October 5, 2023}{lmdh}{3}
\begin{tikzpicture}[evaluate={}]
  \path[use as bounding box]
  (noneCF.north west) rectangle ($(noneCF.south east) +(2, -2)$);

  \path pic {C-fading={blue}{green}};

  \begin{scope}[transform canvas={shift={(1 cm, -2cm)}}]
    \path pic {C-fading={magenta}{blue}};
  \end{scope}
\end{tikzpicture}
\end{document}

先前版本的答案

在此处输入图片描述

我尝试使用tikzfadingfrompicture,参见 Tikz 和 PGF 手册第 361 页,版本 3.1.7,再加上库contour

符号的数量,例如10 月 5 日在示例中,它不太灵活。至少我无法处理它。如果您需要更多符号,则必须分别定义每个单词。也许有人可以从这个角度修复代码。

代码

\documentclass[11pt, margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{fadings}
\usepackage{xcolor}
\usepackage[outline]{contour}
\contourlength{.5pt}
\begin{document}

\begin{tikzfadingfrompicture}[name=LRfading]
  \node%[inner sep=1ex, outer sep=2pt]
  {\fontfamily{lmdh}\selectfont \contour{red}{October 5}};
\end{tikzfadingfrompicture}
\begin{tikzfadingfrompicture}[name=LKfading]
  \node%[inner sep=1ex, outer sep=2pt]
  {\fontfamily{lmdh}\selectfont \contour{blue}{October 5}};
\end{tikzfadingfrompicture}
\begin{tikzpicture}
  \foreach \j in {1, ..., 12}{%
    \fill[path fading=LRfading,
    shade,  left color=blue, right color=green, opacity=.04]
    (\j*30: .15) rectangle ++(6, 4);
    \fill[path fading=LRfading,
    shade,  left color=blue, right color=green, opacity=.05]
    (10 +\j*30: .04) rectangle ++(6, 4);
  }
  \fill[path fading=LKfading, color=white]
  (0, 0) rectangle ++(6, 4);
\end{tikzpicture}
\end{document}

答案3

结束讨论,最终这里,这里是“少做一点”方法的草图。对于使用创造性原理的解决方案来说,通常不再需要关注 Latex(在本例中),使用其他可用资源,并将注意力转移到以前不需要的其他事情上。而且......它开辟了以前没有的新机会。这样一来,这个就比 latexian 更具程序性了。

在其简单的形式中,它会不断覆盖本周的绘画(新标题)和书籍,并将备份或版本控制委托给专用工具,例如git

对于这个例子,为了说明这个概念,我假设一种混合:

  • 仅使用图形工具(Inkscape、Illustrator、ArtWhatever)制作一个文件,每周存储为title.png,永不改变
  • 每周一个文件夹,用于存放周书

那我们走吧。

组织文件和文件夹

文件夹

这是你必须决定的事情。此结构假设:

  • /graphic将举办title.png
  • 每周都会被覆盖,即作为单个文件丢失
  • (使用git等来弥补这个损失)

/book-n因为 OP 非常喜欢这个例子,所以我假设:

  • 每周创建一个新的
  • 复制/book-(n-1),重命名为/book-n
  • 开始编辑其/book-n/book.tex

所以它里面看起来是这样的:

書-2

访问每周标题

从文件夹内部,/book-n总是可以清楚地找到最新的标题图像:

  • ../graphic (/title.png)
  • 无论你在计算机上分配所有内容有多复杂(那么路径也会更复杂一些)

标题页的图形

我并不是自称是艺术家。我使用绘画程序创作了 2 幅画作,并将它们导出到title.png每周...

第一本书,第一周

只需编辑并编译:

第一周

\documentclass{book}
\usepackage{graphicx}
\usepackage{lipsum}

\begin{document}

% ~~~ this part you design only once ~~~~~~~~~~~~
 \begin{titlepage}
    \includegraphics[width=\textwidth]{../graphic/title}% fixed location
    
    \vspace{2cm}
    \begin{center}
    \Huge{
    by
    
    \vspace{\stretch{2}}
    Super-Author
    \vspace{\stretch{1}}
    }
    \end{center}
 \end{titlepage}
 
 % ~~~ here is your next version ~~~~~~~~~~~~~~~~~
 \chapter{And so it begins}
 
 \lipsum[1-2]

\end{document}

第二本书,下周

只需编辑并编译:

第二周

\documentclass{book}
\usepackage{graphicx}
\usepackage{lipsum}

\begin{document}

% ~~~ this part you design only once ~~~~~~~~~~~~
 \begin{titlepage}
    \includegraphics[width=\textwidth]{../graphic/title}% fixed location
    
    \vspace{2cm}
    \begin{center}
    \Huge{
    by
    
    \vspace{\stretch{2}}
    Super-Author
    \vspace{\stretch{1}}
    }
    \end{center}
 \end{titlepage}
 
 % ~~~ here is your next version ~~~~~~~~~~~~~~~~~
 \chapter{What happened next}
 
 \lipsum[3,7]

\end{document}

自动化方面

事实上,几乎没有或者根本没有什么可以自动化:问题已经消失了,取决于你如何组织它。

在这个例子中,每周创建一个新的书本文件夹,这仍然有点繁琐,因为至少你需要复制并重命名书本文件夹。(是否值得通过(shell)脚本自动执行此操作?可能不值得……但你可以做到。)

无论如何,标题绘图都会被重新创建并覆盖,因此不需要额外的工作。

因此,为了省去复制工作...只需使用一个书籍文件夹和一个像 git 这样的备份/版本控制工具。例如:

  • 按照固定结构工作
  • 保存、检索、分支等中间版本以满足您的需求

附言:完整地说,这是所谓创造性解决方案的通用特征。它们提供:

  • 自动化(在这种情况下)和非自动化(其对立面)

在这里翻译为:

  • 无自动化:它已经消失,因为概念或方法发生了变化
  • 自动化:影响提供了先前需要的自动化。

你还需要脚本吗?

不,您可以用什么都不做、git-console(首选)或git-GUI 来替换它...就像网上这个例子一样:

例子

这条道路上有什么新的机遇吗?

如果你以前没有使用过,使用 git 你可以:

  • 保存,保存,保存
  • 名称(中间)版本
  • 找回,回到过去
  • 分支,即尝试使用不同的路由来处理您的内容
  • 如果效果不好,请返回上一个分支/版本
  • ETC。

如果您使用“一个图形一个书夹”的方法并每天覆盖它,那么您就在计算机上获得了一个干净的不断发展的工作空间。

等等。

相关内容