100 想实现如下的渐变文字,当下使用LaTeX有哪些可能的实践?

发布于 2025-05-30 00:40:35

目标:实现中英文的如下「文本渐变色」效果

image.png

在交流群搜罗到的一些解决方案:

Method1:

By 鱼香肉丝没有鱼先生@u19850

我拿l3写一个试试
\documentclass{ctexart}
\usepackage{xcolor}

\ExplSyntaxOn

% #1 start-color #2: end-color #3: text
\cs_new:Npn \__gradien_text:nnn #1#2#3 
{
    \tl_set:Nn \l_tmpa_tl { #3 }
    \int_set:Nn \l_tmpa_int { \tl_count:N \l_tmpa_tl }
    \int_step_inline:nn { \l_tmpa_int } {
        \textcolor{#2!\fp_eval:n{##1 * 100/\l_tmpa_int}!#1}{\tl_item:Nn \l_tmpa_tl {##1}}
        \allowbreak
    }
}

\NewDocumentCommand{\gradienttext}{mm+m}{\__gradien_text:nnn{#1}{#2}{#3}}
\ExplSyntaxOff

\begin{document}

\gradienttext{red}{blue}{劳仑衣普桑,认至将指点效则机,最你更枝。想极整月正进好志次回总般,段然取向使张规军证回,世市总李率英茄持伴。}

\end{document}

image.png

Method2:

用户「LaTex新手心态」给出的基于gradient-text的方案:

\documentclass{article}
\usepackage{gradient-text}
\begin{document}
\begin{center}
    {\Huge\bfseries
    \gradientRGB{ZHONGGUO GONGCHANDANG}{230,0,0}{135,0,0}
    \gradientRGB{WANSUI}{230,0,0}{135,0,0}\par
    }
\end{center}
\end{document}

image.png

小插曲:事实上,gradient-text内部实现和「Method1」如出一辙,均为「逐字渐变」

image.png

Method3:

同样是By 鱼香肉丝没有鱼先生 @u19850:

tikz,可以封装一下,小规模使用,不考虑换行,应该还行
\documentclass[margin=2cm]{standalone}
\usepackage{tikz,ctex}
\usetikzlibrary{decorations.text,math}
\begin{document}
\begin{tikzpicture}[
    decoration = {
        text effects along path,
        text = {劳仑衣普桑,认至将指点效则机,最你更枝。},
        text effects/.cd,
        character count=\i, character total=\n,
        characters = {
            text along path,
            evaluate = {\c=\i/\n*100;},
            text = orange!\c!blue, scale=1
        }
    }
]
\path [decorate] (0,0) to (8,0);
\end{tikzpicture}
\end{document}

image.png

需要指出的是,上述的实现均为「逐字渐变」,而非「真正意义上的渐变」

Method4: 雾月老师开发的texhigh宏包:

在其编译内容中使用效果可以实现真正的渐变:

image.png

问题:

由于暂缺texhigh的用户文档,目前我的测试举步维艰😭😭😭。实现「真正的文字渐变」的最佳实践是什么?是否有可能脱离「texhigh」提取出一个轻量级的命令?

查看更多

关注者
1
被浏览
154
1 个回答
Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~

related:

后者似乎是texhigh用的方式:

% texhigh.prelude.ths Line101
\@ifpackageloaded{tikz}{\@texhighload@tikztrue}{}
\newbox\texhigh@picturebox 
\if@texhighload@tikz
  \RequirePackage{tikz}
  \usetikzlibrary{shadings}
  \usetikzlibrary{fill.image}
  \protected\def\texhigh@shadetext#1#2{%
    \setbox\texhigh@picturebox=\hbox{{\texhigh@pdfliteral{7 Tr }#2}}%
    \tikz[baseline=0,line width=0pt]\path\pgfextra{\rlap{\copy\texhigh@picturebox}}
      [#1] (0,-\dp\texhigh@picturebox) rectangle (\wd\texhigh@picturebox,\ht\texhigh@picturebox);}

  \tikzset{texhigh/.is family,
    texhigh/gradient primitive/.style={left color=blue,right color=cyan},
    texhigh/gradient ?/.style={left color=red,right color=blue},
    texhigh/gradient-style/.style={texhigh/gradient #1}}
  \THSaveStyle{tikz.gradient}{%
    \THSetClassCS{latex}{\texhigh@underline{\THcolor{purple}\bfseries#1#2}}
    \THSetClassCS{primitive}
      {\texhigh@shadetext{texhigh/gradient-style=primitive}{\bfseries #1#2}}%
    \THSetClassCS{?}{\texhigh@shadetext{texhigh/gradient-style=?}{#1#2}}%
  }

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览