我负责管理学术期刊的样式文件。一篇典型的文章会包含作者的电子邮件地址,我们会尝试对其进行模糊处理,以提供一定程度的保护,防止电子邮件收集者窃取信息。
我们目前的策略:我们用这些符号的位图图像替换电子邮件地址中的@
和。(具体来说,我们定义新命令和,打印各自字符的 .pdf 图像;然后是电子邮件地址,如.
\imageat
\imagedot
[电子邮件保护]排版为me{\imageat}place{\imagedot}com
。)这存在一些问题:
- 图像不反映周围文本的字体或大小。
- 使用此解决方案,我们的 LaTeX 分发必须包含这些图像的 .pdf,这可能会导致错误和混乱。
我想要的是:我希望(您告诉我如何)定义两个命令\crazyat
和,它们具有排版和当前字体\crazydot
的效果,但在生成的 .pdf 文件中显示为非标准字符。具体来说,我希望@
.
暂时地@
用和填充当前字体中很少使用的部分,.
以便它们正确显示,但对其他人来说毫无意义。(非常欢迎其他建议。)
关于此问题(以及密切相关的主题)的其他帖子的一些说明:
- 我知道这个
AccSup
软件包。它看起来很吸引人,但似乎只有 Adobe Acrobat 可以配合使用。具体来说,LaTeX 行产生的输出在 Adobe Acrobat 中复制和粘贴正确(给出预期的行为),但在其他 .pdf 阅读器上行为不当(复制/粘贴给出电子邮件地址)。无论如何,我猜这不会欺骗电子邮件收集器。(见My email address is \BeginAccSupp{ActualText={email address}}[email protected]\EndAccSupp{}
什么原因导致生成的 PDF 文档中的文本无法正确复制?。 - 例如,我不想简单地用文本替换 @ 符号
[AT]
。我坚信这个符号确实可以正确显示在 .pdf 文档中。(参见如何重新定义@和。来混淆电子邮件地址?。 - 似乎有一种方法可以消除“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 切换不同字体大小的字体,这里是
\Large
和cmr5.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来规避字母混淆。