电子邮件地址中 @ 和 . 的混淆

电子邮件地址中 @ 和 . 的混淆

我负责管理学术期刊的样式文件。一篇典型的文章会包含作者的电子邮件地址,我们会尝试对其进行模糊处理,以提供一定程度的保护,防止电子邮件收集者窃取信息。

我们目前的策略:我们用这些符号的位图图像替换电子邮件地址中的@和。(具体来说,我们定义新命令和,打印各自字符的 .pdf 图像;然后是电子邮件地址,如.\imageat\imagedot[电子邮件保护]排版为me{\imageat}place{\imagedot}com。)这存在一些问题:

  1. 图像不反映周围文本的字体或大小。
  2. 使用此解决方案,我们的 LaTeX 分发必须包含这些图像的 .pdf,这可能会导致错误和混乱。

我想要的是:我希望(您告诉我如何)定义两个命令\crazyat和,它们具有排版和当前字体\crazydot的效果,但在生成的 .pdf 文件中显示为非标准字符。具体来说,我希望@.暂时地@用和填充当前字体中很少使用的部分,.以便它们正确显示,但对其他人来说毫无意义。(非常欢迎其他建议。)

关于此问题(以及密切相关的主题)的其他帖子的一些说明:

  1. 我知道这个AccSup软件包。它看起来很吸引人,但似乎只有 Adob​​e Acrobat 可以配合使用。具体来说,LaTeX 行产生的输出在 Adob​​e Acrobat 中复制和粘贴正确(给出预期的行为),但在其他 .pdf 阅读器上行为不当(复制/粘贴给出电子邮件地址)。无论如何,我猜这不会欺骗电子邮件收集器。(见My email address is \BeginAccSupp{ActualText={email address}}[email protected]\EndAccSupp{}什么原因导致生成的 PDF 文档中的文本无法正确复制?
  2. 例如,我不想简单地用文本替换 @ 符号[AT]。我坚信这个符号确实可以正确显示在 .pdf 文档中。(参见如何重新定义@和。来混淆电子邮件地址?
  3. 似乎有一种方法可以消除“cmap”,我不明白。不过,我只想进行“局部”破坏——我希望文档的其余部分格式正确。(参见是否可以生成包含不可复制文本的 PDF?

答案1

要提供包含正确字体的点和 at 的 PDF 文件,请将其放入 at.tex

\documentclass{standalone}
\usepackage{mathptmx}
\usepackage[T1]{fontenc}
\begin{document}
@
\end{document}

同样在 dot.tex 中也是如此

\documentclass{standalone}
\usepackage{mathptmx}
\usepackage[T1]{fontenc}
\begin{document}
.
\end{document}

编辑:这个解决方案实际上是错误的就像我最初写的那样。我以为你可以将生成的 PDF 用作中性矢量图形。但你做不到;邮件地址仍然很容易被复制粘贴。不过,你可以使用一些软件,比如墨景将文本转换为“真实”矢量图形,然后再次将其保存为 PDF。然后您可以像以前一样继续操作。[编辑结束]

\documentclass[a5paper]{article}
\usepackage{mathptmx}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\newcommand{\crazyat}{\includegraphics[width=.9em]{at}}
\newcommand{\crazydot}{\includegraphics[width=.25em]{dot}}
\begin{document}
\noindent [email protected]\\
foobar\crazyat{}example\crazydot{}com\\
\Large [email protected]\\
foobar\crazyat{}example\crazydot{}com
\end{document}

在我看来,这很好:

混淆后的邮件地址与正常邮件地址的比较

答案2

可以在字体编辑器中导出字母FontForge作为 SVG 图形。然后,SVG 文件中的路径描述(d元素中的属性path)可用于填充 TikZ 中的路径。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{svg.path}

\newcommand*{\svgat}{%
  \leavevmode
  \tikz[baseline=0pt, x=1pt, y=1pt, scale=1em/1000]\fill
    svg {
      M588 457v-241c0 -15 0 -66 35 -66c66 0 73 90 73 182c0 241 -171 351 -308
      351c-164 0 -307 -145 -307 -336c0 -179 130 -336 312 -336c94 0 187 24
      272 64c5 3 7 3 23 3h9c16 0 23 0 23 -10c0 -16 -120 -51 -146 -57c-64 -15
      -128 -22 -180 -22 c-200 0 -338 170 -338 358c0 199 150 358 333 358c161
      0 332 -133 332 -367c0 -107 -14 -210 -102 -210c-38 0 -90 19 -100 71c-30
      -42 -78 -71 -132 -71c-103 0 -198 93 -198 219s95 219 198 219c39 0 91
      -14 137 -77c6 -7 7 -8 23 -8h17c23 0 24 -1 24 -24zM519 262v170 c0 18 0
      21 -13 40c-36 56 -84 72 -116 72c-73 0 -132 -86 -132 -197s60 -197 132
      -197c20 0 71 6 115 69c14 21 14 25 14 43z
    }
    (current bounding box.west) ++(-56, 0) % left side bearing
    (current bounding box.east) ++(56, 0) % right side bearing
  ;%
}

\newcommand*{\svgperiod}{%
  \leavevmode
  \tikz[baseline=0pt, x=1pt, y=1pt, scale=1em/1000]\fill
    svg {
      M192 53c0 -29 -24 -53 -53 -53s-53 24 -53 53s24 53 53 53s53 -24 53 -53z
    }
    (current bounding box.west) ++(-86, 0) % left side bearing
    (current bounding box.east) ++(85, 0) % right side bearing
  ;%
}

\begin{document}
  [email protected]

  john\svgperiod doe\svgat example\svgperiod org

  {\Large john\svgperiod doe\svgat example\svgperiod org}

  {\scriptsize john\svgperiod doe\svgat example\svgperiod org}
\end{document}

结果

复制看不到 TikZ 绘制的字母。所选的电子邮件地址显示:

选定

评论:

  • SVG 路径取自字体文件“cmr10.pfb”。

  • 如果 TeX 切换不同字体大小的字体,这里是\Largecmr5.pfb的“cmr12.pfb” \scriptsize,那么可以定义不同的宏来获得适合该大小的完美字形。但为此,缩放的正常大小版本应该可以。缩放是自动完成的,因为选项scale取决于 unit 的当前大小em

  • svg.paths使用1pt作为单位,因此 TikZ 字形按 缩放到正确大小scale。字体使用 1000 个字形单位表示 1em。TFM 文件cmr10保持 1em 的宽度:QUAD R 1.000003(小的舍入误差)。因此,比例因子为1em/1000

  • 侧边距的值取自 FontForge 中的字形视图。

  • 当然,可以使用OCR来规避字母混淆。

相关内容