是否有一种可移植、强大且独立的方法来混淆 TeX 中的电子邮件地址?

是否有一种可移植、强大且独立的方法来混淆 TeX 中的电子邮件地址?

众所周知,垃圾邮件发送者不仅会抓取网页并自动从 HTML 文件中提取电子邮件地址,还会从其他格式(例如 PDF)中提取电子邮件地址。

因此,最好有一种 TeX 电子邮件地址混淆方法,该方法适用于常用格式(例如 PDF、PostScript、DVI),产生的结果与未混淆的结果相同,并且不允许任何常用软件(例如 pdftotext)提取未混淆的电子邮件地址。(我想到的一个用例是将包含电子邮件地址的论文上传到 arXiv。)

因此,混淆所需的属性可以概括如下。

  1. 可移植性:使用任何常用软件编译时,最终结果必须与未混淆的版本完全相同:tex、tex+dvips、tex+dvipdfm(x)、pdftex、tex+dvips+ghostscript(直接或通过 ps2pdf 等脚本)。 特别是,当由 arXiv 编译时,所有三个生成的文件(DVI、PostScript 和 PDF)中的电子邮件地址必须与未混淆的电子邮件地址完全一样,也就是说,论文的读者不应该能够仅通过查看论文就猜出使用了混淆(尽管复制粘贴可能会失败)。

  2. 稳健性:没有常用的软件,例如

    • catdvi、dvi2tty、crudetype 代表 DVI,
    • ghostscript(直接或通过 ps2ascii 等脚本)、ps2txt、ps2a、用于 PostScript 的 pstotext,
    • pdftotext、pdfbox、pdf2txt.py 或用于 PDF 的 ghostscript,

    应该能够从 1 中生成的任何文件中提取(可能删除空格后)未混淆的电子邮件。

  3. 自包含性:该方法不得要求任何外部文件,并且只能使用当前字体。(否则,人们只能使用带有随机重新映射字符的字体,这将是一种非常可靠的混淆方法,但如果想在期刊上发表论文,这种方法就不太实用。出于同样的原因,使用其他字体(即使是同一系列的字体)也是不可接受的,因为如果更改字体,它很容易被破坏。)

已知无效的方法:

  1. 以非平凡顺序排版电子邮件地址,例如,随机排列字母。使用 catdvi、dvipdfm+pdftotext、pdftex+pdftotext 失败。

  2. 在电子邮件地址中间插入一些用微型字体排版的附加文本(例如,cmr10 at 1sp)。tex+dvipdfm+pdftotext 会失败。它还会暴露 catdvi 和 pdftex 1.40.15 中的错误,即后者是 TeX 的不合规实现。尽管可以通过使用 8sp 而不是 1sp 来解决这些错误,但该方法在 pdftex+pdftotext 中也会失败。

  3. 在电子邮件地址中间插入水平微空格,例如 1sp 或 -1sp。与 2 相同。

  4. 将单个字母稍微升高或降低一点(例如 1sp)。适用于 catdvi,但无法适用于 pdftotext。

  5. 将某个句号替换为降低其高度减去句号高度的点重音。虽然这种方法确实满足了上述所有标准,并且从某种意义上来说是一种解决方案(我目前在论文中使用它,同时以不同的顺序排版),但对于 pdftotext 来说,它只是用空格替换了句号,这仍然容易受到自动收集的影响(众所周知,垃圾邮件软件可以对更复杂的变体进行反混淆,例如“user at example dot com”,用空格替换句号肯定不会出现问题),因此它违反了条件 2,如果不是字面意思,那么就是精神上。它还依赖于 Computer Modern 字体相当微妙的属性,这意味着如果发布者使用设计较差的字体,它可能会破坏条件 1。

  6. 在电子邮件地址前插入一些排版的白色文本,并与其重叠。与以前的方法不同,这种方法有些不便于移植,但它可以很好地与大多数使用颜色特效的软件以及一些针对 pdftex 的特殊破解程序配合使用(它确实会破坏一些不太常用的软件,例如 dvilj)。不幸的是,当在非白色纸张上打印文档或只是在非白色背景上显示文档时,这种方法完全失效(这并不罕见,有些人更喜欢浅灰色或类似的颜色作为背景)。表面上,可以使用背景色的文本来解决该问题,但我不知道有任何合理的可移植方法可以做到这一点,尽管有些程序可能允许这样的破解。

答案1

如果您真的想隐藏文本,您可以提取路径并绘制它们,接下来的效果很差,主要是因为我忽略了移动和线段之间的区别,但可以改进以呈现与原始文本基本相同的效果。

首先使用一些后记将文本转换为路径;

/Times-Roman findfont 10 scalefont setfont

newpath
100 100 moveto
([email protected])
true
charpath
flattenpath
{== == (move) ==}
{== == (line) ==}
{== == == ==(curve) ==}
{(close) ==}
pathforall
showpage

产生

形式的路径

104.429482
103.061745
(line)
104.429482
102.952805
(line)
104.320549
102.795456
(line)

然后进行一些编辑,您就可以使用 tikz 渲染该路径:

在此处输入图片描述

稍微注意一下,就可以关闭和填充各个路径段,以产生基本上原始的字体渲染,但在这里我只是描边整个路径。

\documentclass{article}
\usepackage{tikz}

\begin{document}


aaa

\fbox{%
\begin{tikzpicture}[xscale=-.03,yscale=.03,rotate=90]
\draw

(103.085953,103.098053)
--
(104.429482,103.061745)
--
(104.429482,102.952805)
--
(104.320549,102.795456)
--
(104.393173,102.529175)
--
(104.526314,101.839249)
--
(104.178329,100.876991)
--
(103.303818,100.495712)
--
(102.565483,100.762)
--
(101.887665,101.657692)
--
(101.56086,102.22657)
--
(100.822517,102.73494)
--
(100.308105,102.514038)
--
(100.120491,101.923973)
--
(100.432167,101.122093)
--
(101.488235,100.665169)
--
(101.488235,100.50782)
--
(99.9631424,100.50782)
--
(99.9631424,100.640961)
--
(100.072075,100.870934)
--
(99.9994583,101.318779)
--
(99.902626,102.032913)
--
(100.274818,103.019379)
--
(101.16143,103.424858)
--
(101.793861,103.234222)
--
(102.33551,102.601791)
--
(102.964912,101.536652)
--
(103.63063,101.113014)
--
(104.114784,101.321808)
--
(104.296341,101.875557)
--
(104.024,102.535225)
--
(103.085953,102.952805)
--
(103.085953,103.098053)
--
(104.526314,106.344925)
--
(103.884811,104.780495)
--
(102.22657,104.178329)
--
(100.562286,104.786552)
--
(99.902626,106.332825)
--
(100.589523,107.885147)
--
(102.299194,108.511528)
--
(103.89994,107.900284)
--
(104.526314,106.344925)
--
(104.247925,106.223892)
--
(103.609444,107.234566)
--
(101.960289,107.627945)
--
(100.65004,107.310211)
--
(100.181015,106.441757)
--
(100.810417,105.497658)
--
(102.698624,105.061913)
--
(103.827316,105.373589)
--
(104.247925,106.223892)
--
(99.9994583,109.044098)
--
(99.9994583,111.234909)
--
(100.144699,111.234909)
--
(100.268768,110.696281)
--
(100.653069,110.557091)
--
(103.424858,110.557091)
--
(103.594315,110.690231)
--
(104.005852,111.719063)
--
(103.754692,112.209274)
--
(102.977013,112.372673)
--
(100.846725,112.372673)
--
(100.302055,112.248611)
--
(100.144699,111.706963)
--
(99.9994583,111.706963)
--
(99.9994583,113.909866)
--
(100.144699,113.909866)
--
(100.317184,113.337959)
--
(100.931458,113.19574)
--
(103.412758,113.19574)
--
(104.005852,114.272987)
--
(103.77285,114.850952)
--
(102.928604,115.011322)
--
(100.858833,115.011322)
--
(100.317184,114.896339)
--
(100.144699,114.357712)
--
(99.9994583,114.357712)
--
(99.9994583,116.512207)
--
(100.144699,116.512207)
--
(100.168907,116.258026)
--
(100.749901,115.834389)
--
(102.771248,115.834389)
--
(104.084526,115.546921)
--
(104.526314,114.696625)
--
(103.691147,113.086807)
--
(104.526314,112.045868)
--
(104.381065,111.422516)
--
(103.763771,110.520775)
--
(104.502106,110.520775)
--
(104.526314,110.448151)
--
(104.078468,109.068306)
--
(103.909019,109.068306)
--
(103.957436,109.383011)
--
(103.328026,109.734024)
--
(100.834625,109.734024)
--
(100.296,109.597855)
--
(100.144699,109.044098)
--
(99.9994583,109.044098)
--
(101.609276,120.685036)
--
(100.813446,119.97998)
--
(100.580444,119.159943)
--
(101.367195,117.913239)
--
(102.722832,117.622742)
--
(102.722832,120.64872)
--
(103.464195,120.503471)
--
(103.957436,120.225082)
--
(104.526314,118.966278)
--
(103.851524,117.477493)
--
(102.105537,116.908615)
--
(100.495712,117.404877)
--
(99.902626,118.748405)
--
(100.326263,119.99511)
--
(101.548752,120.842384)
--
(101.609276,120.685036)
--
(103.037537,117.64695)
--
(103.890862,117.976784)
--
(104.1632,118.687889)
--
(103.924149,119.341499)
--
(103.037537,119.644096)
--
(103.037537,117.64695)
--
(104.526314,123.562737)
--
(103.884811,121.998306)
--
(102.22657,121.396133)
--
(100.562286,122.004356)
--
(99.902626,123.550629)
--
(100.589523,125.102959)
--
(102.299194,125.729332)
--
(103.89994,125.118088)
--
(104.526314,123.562737)
--
(104.247925,123.441696)
--
(103.609444,124.45237)
--
(101.960289,124.845749)
--
(100.65004,124.528023)
--
(100.181015,123.659569)
--
(100.810417,122.715462)
--
(102.698624,122.279724)
--
(103.827316,122.5914)
--
(104.247925,123.441696)
--
(99.9994583,126.286118)
--
(99.9994583,128.367981)
--
(100.144699,128.367981)
--
(100.280869,127.853569)
--
(100.653069,127.714378)
--
(103.424858,127.714378)
--
(103.866653,128.277206)
--
(103.981644,128.73111)
--
(103.748642,129.278809)
--
(103.025429,129.457336)
--
(100.967766,129.457336)
--
(100.338364,129.327225)
--
(100.144699,128.827942)
--
(99.9994583,128.827942)
--
(99.9994583,130.873489)
--
(100.144699,130.873489)
--
(100.308105,130.398422)
--
(100.798309,130.280411)
--
(103.049637,130.280411)
--
(104.132942,129.971756)
--
(104.526314,129.118423)
--
(104.362915,128.486008)
--
(103.727455,127.69017)
--
(104.502106,127.69017)
--
(104.526314,127.617546)
--
(104.078468,126.261909)
--
(103.909019,126.261909)
--
(103.957436,126.528191)
--
(103.824287,126.818687)
--
(103.328026,126.891312)
--
(100.883041,126.891312)
--
(100.320206,126.7733)
--
(100.144699,126.286118)
--
(99.9994583,126.286118)
--
(101.609276,135.121964)
--
(100.813446,134.416916)
--
(100.580444,133.596878)
--
(101.367195,132.350174)
--
(102.722832,132.059677)
--
(102.722832,135.085663)
--
(103.464195,134.940414)
--
(103.957436,134.662018)
--
(104.526314,133.403214)
--
(103.851524,131.914429)
--
(102.105537,131.345551)
--
(100.495712,131.841812)
--
(99.902626,133.185349)
--
(100.326263,134.432037)
--
(101.548752,135.279312)
--
(101.609276,135.121964)
--
(103.037537,132.083893)
--
(103.890862,132.413712)
--
(104.1632,133.124817)
--
(103.924149,133.778427)
--
(103.037537,134.081024)
--
(103.037537,132.083893)
--
(100.713585,142.32077)
--
(100.241531,140.38414)
--
(100.459404,139.225189)
--
(101.061569,138.317398)
--
(101.990547,137.724304)
--
(103.170677,137.515518)
--
(104.514214,137.754562)
--
(105.591461,138.423309)
--
(106.341904,140.287308)
--
(106.130081,141.379684)
--
(105.555145,142.278397)
--
(104.704849,142.883591)
--
(103.666939,143.107513)
--
(102.326431,142.717163)
--
(101.730316,141.848709)
--
(102.178162,141.461395)
--
(102.359718,141.473495)
--
(104.853119,142.115)
--
(104.853119,141.43718)
--
(104.477898,141.340347)
--
(104.998367,140.626221)
--
(104.550522,139.573181)
--
(103.63063,138.937729)
--
(102.517067,138.701691)
--
(101.736366,138.949829)
--
(101.415611,139.573181)
--
(102.117638,140.79567)
--
(101.603226,141.089188)
--
(101.403511,141.69136)
--
(102.108559,142.965302)
--
(103.763771,143.506943)
--
(104.898514,143.25882)
--
(105.812355,142.574951)
--
(106.423607,141.549149)
--
(106.644501,140.275208)
--
(106.378212,138.868134)
--
(105.642899,137.727341)
--
(104.553551,136.95874)
--
(103.206993,136.680344)
--
(101.890694,136.955704)
--
(100.828575,137.724304)
--
(100.12352,138.874176)
--
(99.8663101,140.311523)
--
(99.9813,141.270752)
--
(100.423088,142.429703)
--
(100.713585,142.32077)
--
(104.56263,140.771469)
--
(103.933228,141.170898)
--
(102.408134,140.735153)
--
(101.839249,139.996811)
--
(102.063171,139.564102)
--
(102.674416,139.403717)
--
(104.017952,139.875778)
--
(104.56263,140.771469)
--
(101.609276,148.769119)
--
(100.813446,148.064072)
--
(100.580444,147.244034)
--
(101.367195,145.99733)
--
(102.722832,145.706833)
--
(102.722832,148.732803)
--
(103.464195,148.58757)
--
(103.957436,148.309174)
--
(104.526314,147.050369)
--
(103.851524,145.561584)
--
(102.105537,144.992706)
--
(100.495712,145.488968)
--
(99.902626,146.832504)
--
(100.326263,148.079193)
--
(101.548752,148.926468)
--
(101.609276,148.769119)
--
(103.037537,145.731049)
--
(103.890862,146.060867)
--
(104.1632,146.771973)
--
(103.924149,147.425583)
--
(103.037537,147.72818)
--
(103.037537,145.731049)
--
(99.9994583,151.925217)
--
(99.9994583,153.910263)
--
(100.144699,153.910263)
--
(100.737793,153.099289)
--
(102.662315,151.840485)
--
(103.848495,152.651443)
--
(104.272133,153.450302)
--
(104.429482,153.450302)
--
(104.429482,151.901)
--
(104.272133,151.901)
--
(104.05426,152.28833)
--
(103.424858,151.925217)
--
(102.98912,151.63472)
--
(103.182785,151.489471)
--
(104.05426,151.041626)
--
(104.272133,151.465271)
--
(104.429482,151.465271)
--
(104.429482,149.431808)
--
(104.272133,149.431808)
--
(104.272133,149.516541)
--
(103.691147,150.266983)
--
(102.274986,151.198975)
--
(100.653069,150.073318)
--
(100.259689,149.728363)
--
(100.144699,149.359192)
--
(99.9994583,149.359192)
--
(99.9994583,150.787445)
--
(100.144699,150.787445)
--
(100.326263,150.388016)
--
(100.725693,150.58168)
--
(101.936081,151.368439)
--
(100.556236,152.26413)
--
(100.38678,152.324646)
--
(100.144699,151.925217)
--
(99.9994583,151.925217)
--
(100.653069,158.533951)
--
(100.459404,158.110306)
--
(101.02829,157.807709)
--
(102.952805,157.807709)
--
(103.957436,157.62616)
--
(104.526314,156.391556)
--
(104.1632,155.144852)
--
(103.424858,154.745422)
--
(103.001221,155.169067)
--
(103.412758,155.604797)
--
(103.570107,155.580597)
--
(103.800079,155.556381)
--
(104.142014,155.762161)
--
(104.284241,156.270523)
--
(104.078468,156.815201)
--
(103.473274,157.00885)
--
(102.86808,157.00885)
--
(102.253807,155.547318)
--
(101.80294,154.902771)
--
(100.955666,154.551758)
--
(100.199173,154.839233)
--
(99.902626,155.580597)
--
(100.616753,157.020966)
--
(100.066025,157.202515)
--
(99.902626,157.65036)
--
(100.38678,158.533951)
--
(100.653069,158.533951)
--
(101.209846,157.00885)
--
(100.689377,156.754669)
--
(100.471504,156.040543)
--
(100.695427,155.598755)
--
(101.234055,155.423248)
--
(101.270363,155.423248)
--
(102.008705,155.774261)
--
(102.638107,157.00885)
--
(101.209846,157.00885)
--
(99.9994583,158.78511)
--
(99.9994583,160.975906)
--
(100.144699,160.975906)
--
(100.268768,160.437286)
--
(100.653069,160.298096)
--
(103.424858,160.298096)
--
(103.594315,160.431244)
--
(104.005852,161.460068)
--
(103.754692,161.950272)
--
(102.977013,162.113678)
--
(100.846725,162.113678)
--
(100.302055,161.989609)
--
(100.144699,161.447968)
--
(99.9994583,161.447968)
--
(99.9994583,163.650879)
--
(100.144699,163.650879)
--
(100.317184,163.078964)
--
(100.931458,162.936752)
--
(103.412758,162.936752)
--
(104.005852,164.013992)
--
(103.77285,164.591949)
--
(102.928604,164.752335)
--
(100.858833,164.752335)
--
(100.317184,164.637344)
--
(100.144699,164.098724)
--
(99.9994583,164.098724)
--
(99.9994583,166.25322)
--
(100.144699,166.25322)
--
(100.168907,165.999039)
--
(100.749901,165.575394)
--
(102.771248,165.575394)
--
(104.084526,165.287933)
--
(104.526314,164.437637)
--
(103.691147,162.827805)
--
(104.526314,161.78688)
--
(104.381065,161.163528)
--
(103.763771,160.26178)
--
(104.502106,160.26178)
--
(104.526314,160.189163)
--
(104.078468,158.809311)
--
(103.909019,158.809311)
--
(103.957436,159.124008)
--
(103.328026,159.475021)
--
(100.834625,159.475021)
--
(100.296,159.338852)
--
(100.144699,158.78511)
--
(99.9994583,158.78511)
--
(97.8691635,166.455963)
--
(97.8691635,168.840424)
--
(98.03862,168.840424)
--
(98.1808395,168.126297)
--
(98.7769623,167.968948)
--
(100.326263,167.968948)
--
(99.902626,168.961472)
--
(100.631882,170.43512)
--
(102.432343,171.031235)
--
(103.933228,170.565231)
--
(104.526314,169.385101)
--
(103.739563,167.968948)
--
(104.502106,167.968948)
--
(104.526314,167.908432)
--
(104.017952,166.492264)
--
(103.860603,166.492264)
--
(103.872704,166.746445)
--
(103.766792,167.0672)
--
(103.315926,167.145874)
--
(98.7164383,167.145874)
--
(98.2020264,167.018784)
--
(98.03862,166.455963)
--
(97.8691635,166.455963)
--
(103.279617,167.968948)
--
(103.721405,168.298782)
--
(103.933228,168.973572)
--
(103.415779,169.854126)
--
(102.032913,170.18396)
--
(100.716614,169.854126)
--
(100.217323,168.997772)
--
(100.429146,168.310883)
--
(100.858833,167.968948)
--
(103.279617,167.968948)
--
(99.9994583,171.612228)
--
(99.9994583,173.936172)
--
(100.144699,173.936172)
--
(100.299026,173.330978)
--
(100.822517,173.19783)
--
(106.692917,173.19783)
--
(106.717125,173.161514)
--
(106.28138,171.588013)
--
(106.124031,171.588013)
--
(106.124031,171.648529)
--
(106.148239,171.963242)
--
(106.01812,172.287018)
--
(105.543045,172.374771)
--
(100.858833,172.374771)
--
(100.320206,172.223465)
--
(100.144699,171.612228)
--
(99.9994583,171.612228)
--
(101.609276,178.202805)
--
(100.813446,177.497742)
--
(100.580444,176.677704)
--
(101.367195,175.431)
--
(102.722832,175.140503)
--
(102.722832,178.166489)
--
(103.464195,178.02124)
--
(103.957436,177.742844)
--
(104.526314,176.484039)
--
(103.851524,174.99527)
--
(102.105537,174.426376)
--
(100.495712,174.922638)
--
(99.902626,176.266174)
--
(100.326263,177.512878)
--
(101.548752,178.360153)
--
(101.609276,178.202805)
--
(103.037537,175.164719)
--
(103.890862,175.494553)
--
(104.1632,176.205658)
--
(103.924149,176.859268)
--
(103.037537,177.161865)
--
(103.037537,175.164719)
--
(100.979874,179.858)
--
(100.423088,179.313339)
--
(99.8905182,179.845901)
--
(100.423088,180.402679)
--
(100.979874,179.858)
--
(104.526314,183.579956)
--
(103.884811,182.015533)
--
(102.22657,181.413361)
--
(100.562286,182.021576)
--
(99.902626,183.567856)
--
(100.589523,185.120178)
--
(102.299194,185.746552)
--
(103.89994,185.135315)
--
(104.526314,183.579956)
--
(104.247925,183.458923)
--
(103.609444,184.469589)
--
(101.960289,184.862976)
--
(100.65004,184.545242)
--
(100.181015,183.676788)
--
(100.810417,182.732681)
--
(102.698624,182.296951)
--
(103.827316,182.608627)
--
(104.247925,183.458923)
--
(99.9994583,186.170197)
--
(99.9994583,188.530457)
--
(100.144699,188.530457)
--
(100.320206,187.86171)
--
(100.883041,187.695282)
--
(103.098053,187.695282)
--
(103.615494,187.934341)
--
(103.896912,188.385208)
--
(103.751663,188.639389)
--
(103.558006,189.038818)
--
(104.005852,189.414047)
--
(104.526314,188.88147)
--
(104.329628,188.318634)
--
(103.594315,187.695282)
--
(104.502106,187.695282)
--
(104.526314,187.646866)
--
(103.993744,186.194397)
--
(103.836395,186.194397)
--
(103.872704,186.53331)
--
(103.279617,186.872223)
--
(100.822517,186.872223)
--
(100.347443,186.757233)
--
(100.144699,186.170197)
--
(99.9994583,186.170197)
--
(103.812187,194.074051)
--
(104.199509,194.074051)
--
(104.199509,193.323608)
--
(104.296341,192.778931)
--
(104.368965,192.561066)
--
(104.526314,191.774307)
--
(104.063339,190.60022)
--
(102.916496,190.128174)
--
(102.147896,190.33696)
--
(101.597168,191.048065)
--
(101.209846,190.624435)
--
(100.532028,190.16449)
--
(100.011559,190.684952)
--
(99.3579483,189.943588)
--
(98.8132706,189.728745)
--
(98.1354523,190.221985)
--
(97.8570633,191.423294)
--
(98.4864655,193.396225)
--
(99.5153,193.989319)
--
(100.259689,193.668564)
--
(100.568336,192.803131)
--
(100.62886,191.532227)
--
(100.895142,190.757584)
--
(101.249184,190.954269)
--
(101.512444,191.350662)
--
(101.488235,191.532227)
--
(101.464027,191.90744)
--
(101.851349,192.936279)
--
(102.98912,193.444641)
--
(103.812187,193.263092)
--
(103.812187,194.074051)
--
(99.9752502,190.902817)
--
(99.8542099,192.488434)
--
(99.7452698,193.435562)
--
(99.3700485,193.710922)
--
(98.68013,193.196518)
--
(98.4138412,191.846924)
--
(98.6105347,190.805984)
--
(99.1400757,190.418671)
--
(99.4547806,190.500366)
--
(99.9752502,190.902817)
--
(103.328026,190.951233)
--
(104.002823,191.141876)
--
(104.247925,191.677475)
--
(103.787979,192.391602)
--
(102.601791,192.694199)
--
(101.95121,192.497513)
--
(101.706108,191.955856)
--
(102.144875,191.226608)
--
(103.291718,190.951233)
--
(103.328026,190.951233)
;

\end{tikzpicture}}

bbb

\end{document}

答案2

以下是按照 David Carlisle 的建议更“独立”的方法,通过以下链接进行操作我们可以从字体文件中提取构成字符的点吗? 并尝试使用那里的代码。这是用 编译的pdflatex

在此处输入图片描述

\immediate\write18{tex pgflibraryshapes.letters.dtx}
%\documentclass[border=10]{standalone}
\documentclass[landscape]{article}
\pagestyle{empty}
\thispagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{
  shapes.letters,
  decorations.pathmorphing,
  decorations.pathreplacing,
  decorations.text,
  decorations.footprints,
  fadings,
}


\pgfmathsetmacro{\emcm}{1em/1cm}
\pgfkeys{
  /pgf/letter/.cd,
%  load font={stikz}{italic},
  load font={stikz}{normal},
  size=1,
  load encoding=char,
  every letter/.append style={
    fill,
  },
  sentence width=.9\textwidth,
}


\begin{document}
\begin{tikzpicture}[every letter/.append style={path fading=west},scale=.1]
\node[letter=h] (1) {};
\node[letter=o,right of previous letter,at=(1.east)] (2) {};
\node[letter=l,right of previous letter,at=(2.east)] (3) {};
\node[letter=t,right of previous letter,at=(3.east)] (4) {};
\node[letter=z,right of previous letter,at=(4.east)] (5) {};
\node[letter=e,right of previous letter,at=(5.east)] (6) {};
\node[letter=r,right of previous letter,at=(6.east)] (7) {};
\node[letter=m,right of previous letter,at=(7.east)] (8) {};
\node[letter=a,right of previous letter,at=(8.east)] (9) {};
\node[letter=n,right of previous letter,at=(9.east)] (10) {};
\node[letter=n,right of previous letter,at=(10.east)] (11) {};
\node[letter=1,right of previous letter,at=(11.east)] (12) {};
\node[letter=7,right of previous letter,at=(12.east)] (13) {};
\node[letter=@,right of previous letter,at=(13.east)] (14) {};
\node[letter=g,right of previous letter,at=(14.east)] (15) {};
\node[letter=m,right of previous letter,at=(15.east)] (16) {};
\node[letter=a,right of previous letter,at=(16.east)] (17) {};
\node[letter=i,right of previous letter,at=(17.east)] (18) {};
\node[letter=l,right of previous letter,at=(18.east)] (19) {};
\node[letter=.,right of previous letter,at=(19.east)] (20) {};
\node[letter=c,right of previous letter,at=(20.east)] (21) {};
\node[letter=o,right of previous letter,at=(21.east)] (22) {};
\node[letter=m,right of previous letter,at=(22.east)] (23) {};
\node[above=23] (joe) {Hi, I'm Joe};
\node[below=23] (joe) {Corneli, Phd};
\end{tikzpicture}

\end{document}

相关内容