这审查包审查文本但保留空格标记和句点以使未审查的文档部分与未审查的文档部分的位置相似。但它与未审查的输出不匹配,因为连字和连字符会影响框的构造,进而影响段落的分行。事实并非如此,即审查后的文本不会从文档中删除,而文档看起来完全相同。下面的例子显示了这一点。是否可以加载一个空字体,该字体具有 TeX 可见的所有相同字符和参数,但只是不绘制它们,并在宏中使用此字体(或向字体中添加这样的空字符并仅在宏中使用它们)?然后 TeX 将在不知道审查的情况下有效地运行,并保证审查后的文档中未审查的内容与未审查的文档中的内容匹配。
编辑:审查器用黑框代替,但为了审查的目的,留白就足够了。这样就不必担心审查条超出框的高度、宽度和深度,以防止信息泄露,就像重音字符一样。如果需要,审查器可以用包含规则的零宽度、高度和深度框来指示。参见相关文章:
- 如何用相同大小的空块替换大块文本?。可接受的答案使用
\phantom
,它仅用空格替换水平盒子。它与\blackout
from\censor
存在连字和连字符的相同问题。 - 使用另一种字体的度量生成“空白”字体。请参阅 egreg 的回答,解决方案是保留字符数据,从而违背了更简单且不安全的颜色变化审查的目的。需要将字符更改为空等效字符,但如果空等效字符具有相同的字体度量,并且这些度量保留在输出源中,则审查信息将很容易被解码。
- 多行、多页 \phantom 模拟宏. 具有相同的既定目的,即不根据审查内容更改布局。LuaTeX 解决方案是在发货时将所有水平和垂直框替换为不包含任何内容的相同尺寸的框。
\documentclass{article}
\usepackage{censor}
\begin{document}
\begin{minipage}[t]{.5\textwidth}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer
id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque
habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla
et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus
sit amet tortor gravida placerat. Integer sapien est, iaculis in,
pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices
bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar
at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius orci
eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis,
diam. Duis eget orci sit amet orci dignissim rutrum.
\end{minipage}
\begin{minipage}[t]{.5\textwidth}
\blackout{Lorem} ipsum \blackout{dolor} sit \blackout{amet},
consectetuer \blackout{adipiscing} elit. \blackout{Ut} purus
\blackout{elit}, vestibulum \blackout{ut}, \blackout{placerat}
ac, \blackout{adipiscing} vitae, \blackout{felis}. Curabitur
\blackout{dictum} gravida \blackout{mauris}. Nam \blackout{arcu}
libero, \blackout{nonummy} eget, \blackout{consectetuer}
id, \blackout{vulputate} a, \blackout{magna}. Donec
\blackout{vehicula} augue \blackout{eu} neque. \blackout{Pellentesque}
habitant \blackout{morbi} tristique \blackout{senectus} et
\blackout{netus} et \blackout{malesuada} fames \blackout{ac} turpis
\blackout{egestas}. Mauris \blackout{ut} leo. \blackout{Cras}
viverra \blackout{metus} rhoncus \blackout{sem}. Nulla \blackout{et}
lectus \blackout{vestibulum} urna \blackout{fringilla} ultrices.
\blackout{Phasellus} eu \blackout{tellus} sit \blackout{amet} tortor
\blackout{gravida} placerat. \blackout{Integer} sapien \blackout{est},
iaculis \blackout{in}, pretium \blackout{quis}, viverra \blackout{ac},
nunc. \blackout{Praesent} eget \blackout{sem} vel \blackout{leo}
ultrices \blackout{bibendum}. Aenean \blackout{faucibus}. Morbi
\blackout{dolor} nulla, \blackout{malesuada} eu, \blackout{pulvinar}
at, \blackout{mollis} ac, \blackout{nulla}. Curabitur \blackout{auctor}
semper \blackout{nulla}. Donec \blackout{varius} orci \blackout{eget}
risus. \blackout{Duis} nibh \blackout{mi}, congue \blackout{eu},
accumsan \blackout{eleifend}, sagittis \blackout{quis}, diam.
\blackout{Duis} eget \blackout{orci} sit \blackout{amet} orci
\blackout{dignissim} rutrum.
\end{minipage}
\newpage
\begin{minipage}[t]{.5\textwidth}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer
id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque
habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla
et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus
sit amet tortor gravida placerat. Integer sapien est, iaculis in,
pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices
bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar
at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius orci
eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis,
diam. Duis eget orci sit amet orci dignissim rutrum.
\end{minipage}
\begin{minipage}[t]{.5\textwidth}
\blackout{Lorem ipsum} dolor sit \blackout{amet, consectetuer}
adipiscing elit. \blackout{Ut purus} elit, vestibulum \blackout{ut,
placerat} ac, adipiscing \blackout{vitae, felis.} Curabitur dictum
\blackout{gravida mauris.} Nam arcu \blackout{libero, nonummy} eget,
consectetuer \blackout{id, vulputate} a, magna. \blackout{Donec
vehicula} augue eu \blackout{neque. Pellentesque} habitant morbi
\blackout{tristique senectus} et netus \blackout{et malesuada}
fames ac \blackout{turpis egestas.} Mauris ut \blackout{leo. Cras}
viverra metus \blackout{rhoncus sem.} Nulla et \blackout{lectus
vestibulum} urna fringilla \blackout{ultrices. Phasellus} eu tellus
\blackout{sit amet} tortor gravida \blackout{placerat. Integer}
sapien est, \blackout{iaculis in,} pretium quis, \blackout{viverra
ac,} nunc. Praesent \blackout{eget sem} vel leo \blackout{ultrices
bibendum.} Aenean faucibus. \blackout{Morbi dolor} nulla, malesuada
\blackout{eu, pulvinar} at, mollis \blackout{ac, nulla.} Curabitur
auctor \blackout{semper nulla.} Donec \blackout{varius orci} eget
risus. \blackout{Duis nibh} mi, congue \blackout{eu, accumsan} eleifend,
sagittis \blackout{quis, diam.} Duis eget \blackout{orci sit} amet orci
\blackout{dignissim rutrum.}
\end{minipage}
\newpage
\begin{minipage}[t]{.5\textwidth}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer
id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque
habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla
et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus
sit amet tortor gravida placerat. Integer sapien est, iaculis in,
pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices
bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar
at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius orci
eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis,
diam. Duis eget orci sit amet orci dignissim rutrum.
\end{minipage}
\begin{minipage}[t]{.5\textwidth}
\blackout{Lorem ipsum dolor} sit amet, consectetuer \blackout{adipiscing
elit. Ut} purus elit, vestibulum \blackout{ut, placerat ac,} adipiscing
vitae, felis. \blackout{Curabitur dictum gravida} mauris. Nam arcu
\blackout{libero, nonummy eget,} consectetuer id, vulputate \blackout{a,
magna. Donec} vehicula augue eu \blackout{neque. Pellentesque habitant}
morbi tristique senectus \blackout{et netus et} malesuada fames ac
\blackout{turpis egestas. Mauris} ut leo. Cras \blackout{viverra metus
rhoncus} sem. Nulla et \blackout{lectus vestibulum urna} fringilla
ultrices. Phasellus \blackout{eu tellus sit} amet tortor gravida
\blackout{placerat. Integer sapien} est, iaculis in, \blackout{pretium
quis, viverra} ac, nunc. Praesent \blackout{eget sem vel} leo ultrices
bibendum. \blackout{Aenean faucibus. Morbi} dolor nulla, malesuada
\blackout{eu, pulvinar at,} mollis ac, nulla. \blackout{Curabitur auctor
semper} nulla. Donec \blackout{varius orci eget} risus. Duis nibh
\blackout{mi, congue eu,} accumsan eleifend, sagittis \blackout{quis,
diam. Duis} eget orci sit \blackout{amet orci dignissim} rutrum.
\end{minipage}
\newpage
\begin{minipage}[t]{.5\textwidth}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer
id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque
habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla
et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus
sit amet tortor gravida placerat. Integer sapien est, iaculis in,
pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices
bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar
at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius orci
eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis,
diam. Duis eget orci sit amet orci dignissim rutrum.
\end{minipage}
\begin{minipage}[t]{.5\textwidth}
\blackout{Lorem ipsum dolor sit} amet, consectetuer adipiscing elit.
\blackout{Ut purus elit, vestibulum} ut, placerat ac, adipiscing
\blackout{vitae, felis. Curabitur dictum} gravida mauris. Nam
arcu \blackout{libero, nonummy eget, consectetuer} id, vulputate
a, magna. \blackout{Donec vehicula augue eu} neque. Pellentesque
habitant morbi \blackout{tristique senectus et netus} et malesuada
fames ac \blackout{turpis egestas. Mauris ut} leo. Cras viverra
metus \blackout{rhoncus sem. Nulla et} lectus vestibulum urna
fringilla \blackout{ultrices. Phasellus eu tellus} sit amet tortor
gravida \blackout{placerat. Integer sapien est,} iaculis in, pretium
quis, \blackout{viverra ac, nunc. Praesent} eget sem vel leo
\blackout{ultrices bibendum. Aenean faucibus.} Morbi dolor nulla,
malesuada \blackout{eu, pulvinar at, mollis} ac, nulla. Curabitur auctor
\blackout{semper nulla. Donec} varius orci eget risus. \blackout{Duis
nibh mi, congue} eu, accumsan eleifend, sagittis \blackout{quis,
diam. Duis eget} orci sit amet orci \blackout{dignissim rutrum.}
\end{minipage}
\end{document}
答案1
自定义 Open Type 字体功能有帮助吗?
然而,由于胶水的弹性,lines
形状paragraph
会脱节。需要明智地选择(和/或调整)字形。
概念证明:这里只替换小写字母和一些标点符号;连字符(也是字符)也可以替换(参见链接问题)。
随机字形为“黑色方块”:
黑色方块,来自另一种字体:
稍微缩小一点:
平均能量损失
\documentclass{article}
\usepackage{fontspec}
\usepackage{lipsum}
\newcommand\anycxchar{uniEBA3}
\newcommand\anycxcharb{uni2580}
\newcommand\anycxcharc{circlecopyrt}
\directlua {
luaotfload.add_colorscheme("cxscheme",
{
["FF200080"] = {"\anycxchar"},
})
}
\directlua {
luaotfload.add_colorscheme("cyscheme",
{
["FF20A090"] = {"\anycxcharb"},
})
}
\directlua {
luaotfload.add_colorscheme("czscheme",
{
["FF0000"] = {"T_h"},
})
}
\directlua{
fonts.handlers.otf.addfeature {
name = "anycx",
type = "substitution",
data = {
["a"] = "\anycxchar",
["b"] = "\anycxchar",
["c"] = "\anycxchar",
["d"] = "\anycxchar",
["e"] = "\anycxchar",
["f"] = "\anycxchar",
["g"] = "\anycxchar",
["h"] = "\anycxchar",
["i"] = "\anycxchar",
["j"] = "\anycxchar",
["k"] = "\anycxchar",
["l"] = "\anycxchar",
["m"] = "\anycxchar",
["n"] = "\anycxchar",
["o"] = "\anycxchar",
["p"] = "\anycxchar",
["q"] = "\anycxchar",
["r"] = "\anycxchar",
["s"] = "\anycxchar",
["t"] = "\anycxchar",
["u"] = "\anycxchar",
["v"] = "\anycxchar",
["w"] = "\anycxchar",
["x"] = "\anycxchar",
["y"] = "\anycxchar",
["z"] = "\anycxchar",
["0"] = "\anycxchar",
["1"] = "\anycxchar",
["2"] = "\anycxchar",
["3"] = "\anycxchar",
["4"] = "\anycxchar",
["5"] = "\anycxchar",
["6"] = "\anycxchar",
["7"] = "\anycxchar",
["8"] = "\anycxchar",
["9"] = "\anycxchar",
["r"] = "\anycxchar",
[","] = "\anycxchar",
["."] = "\anycxchar",
["/"] = "\anycxchar",
["<"] = "\anycxchar",
[">"] = "\anycxchar",
["?"] = "\anycxchar",
}
}
}
\directlua{
fonts.handlers.otf.addfeature {
name = "anycy",
type = "substitution",
data = {
["hyphen"] = "\anycxcharb",
["a"] = "\anycxcharb",
["b"] = "\anycxcharb",
["c"] = "\anycxcharb",
["d"] = "\anycxcharb",
["e"] = "\anycxcharb",
["f"] = "\anycxcharb",
["g"] = "\anycxcharb",
["h"] = "\anycxcharb",
["i"] = "\anycxcharb",
["j"] = "\anycxcharb",
["k"] = "\anycxcharb",
["l"] = "\anycxcharb",
["m"] = "\anycxcharb",
["n"] = "\anycxcharb",
["o"] = "\anycxcharb",
["p"] = "\anycxcharb",
["q"] = "\anycxcharb",
["r"] = "\anycxcharb",
["s"] = "\anycxcharb",
["t"] = "\anycxcharb",
["u"] = "\anycxcharb",
["v"] = "\anycxcharb",
["w"] = "\anycxcharb",
["x"] = "\anycxcharb",
["y"] = "\anycxcharb",
["z"] = "\anycxcharb",
["0"] = "\anycxcharb",
["1"] = "\anycxcharb",
["2"] = "\anycxcharb",
["3"] = "\anycxcharb",
["4"] = "\anycxcharb",
["5"] = "\anycxcharb",
["6"] = "\anycxcharb",
["7"] = "\anycxcharb",
["8"] = "\anycxcharb",
["9"] = "\anycxcharb",
[32] = "\anycxcharb",
["r"] = "\anycxcharb",
[","] = "\anycxcharb",
["."] = "\anycxcharb",
["/"] = "\anycxcharb",
["<"] = "\anycxcharb",
[">"] = "\anycxcharb",
["?"] = "\anycxcharb",
}
}
}
\directlua{
fonts.handlers.otf.addfeature {
name = "anycz2",
type = "substitution",
data = {
["T_h"] = "\anycxcharc",
}
}}
\directlua{
fonts.handlers.otf.addfeature {
name = "anycz",
type = "substitution",
data = {
["hyphen"] = "\anycxcharc",
["a"] = "\anycxcharc",
["b"] = "\anycxcharc",
["c"] = "\anycxcharc",
["d"] = "\anycxcharc",
["e"] = "\anycxcharc",
["f"] = "\anycxcharc",
["g"] = "\anycxcharc",
["h"] = "\anycxcharc",
["i"] = "\anycxcharc",
["j"] = "\anycxcharc",
["k"] = "\anycxcharc",
["l"] = "\anycxcharc",
["m"] = "\anycxcharc",
["n"] = "\anycxcharc",
["o"] = "\anycxcharc",
["p"] = "\anycxcharc",
["q"] = "\anycxcharc",
["r"] = "\anycxcharc",
["s"] = "\anycxcharc",
["t"] = "\anycxcharc",
["u"] = "\anycxcharc",
["v"] = "\anycxcharc",
["w"] = "\anycxcharc",
["x"] = "\anycxcharc",
["y"] = "\anycxcharc",
["z"] = "\anycxcharc",
["0"] = "\anycxcharc",
["1"] = "\anycxcharc",
["2"] = "\anycxcharc",
["3"] = "\anycxcharc",
["4"] = "\anycxcharc",
["5"] = "\anycxcharc",
["6"] = "\anycxcharc",
["7"] = "\anycxcharc",
["8"] = "\anycxcharc",
["9"] = "\anycxcharc",
[32] = "\anycxcharc",
[","] = "\anycxcharc",
["."] = "\anycxcharc",
["/"] = "\anycxcharc",
["<"] = "\anycxcharc",
[">"] = "\anycxcharc",
["?"] = "\anycxcharc",
}
}
}
\newfontfamily\fany{Clara}[
RawFeature=+anycx,
Colour=cxscheme,
]
\newfontfamily\fancy{FiraMath}[
RawFeature=+anycy,
Colour=cyscheme,
Scale=0.75,
]
\newfontfamily\fancz{AntykwaTorunska}[
RawFeature=+anycz,
]
\newfontfamily\fancza{AntykwaTorunska}[
Ligatures=TeX,
Colour=czscheme,
]
\newfontfamily\fanczb{AntykwaTorunska}[
RawFeature=+anycz;+anycz2,
]
\newcommand\blackout[1]{{\fancy#1}}
\begin{document}
abcde fghij klmnop qrstu wxyz 1234567890 ,./<>?
\fany
abcde fghij klmnop qrstu wxyz 1234567890 ,./<>?
\lipsum
\newpage
\fancy
abcde fghij klmnop qrstu wxyz 1234567890 ,./<>?
\lipsum
\newpage
\normalfont
Q: What is the question to $1+1=1$?
A: {\fancz The cat sat on the mat.}
\fancza ``Th'' is a ligature: \fanczb The cat sat on the mat.
\newpage
\normalfont
\begin{minipage}[t]{.5\textwidth}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer
id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque
habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla
et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus
sit amet tortor gravida placerat. Integer sapien est, iaculis in,
pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices
bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar
at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius orci
eget risus. Duis nibh mi, congue eu, accumsan eleifend, sagittis quis,
diam. Duis eget orci sit amet orci dignissim rutrum.
\end{minipage}
\begin{minipage}[t]{.5\textwidth}
\blackout{Lorem} ipsum \blackout{dolor} sit \blackout{amet},
consectetuer \blackout{adipiscing} elit. \blackout{Ut} purus
\blackout{elit}, vestibulum \blackout{ut}, \blackout{placerat}
ac, \blackout{adipiscing} vitae, \blackout{felis}. Curabitur
\blackout{dictum} gravida \blackout{mauris}. Nam \blackout{arcu}
libero, \blackout{nonummy} eget, \blackout{consectetuer}
id, \blackout{vulputate} a, \blackout{magna}. Donec
\blackout{vehicula} augue \blackout{eu} neque. \blackout{Pellentesque}
habitant \blackout{morbi} tristique \blackout{senectus} et
\blackout{netus} et \blackout{malesuada} fames \blackout{ac} turpis
\blackout{egestas}. Mauris \blackout{ut} leo. \blackout{Cras}
viverra \blackout{metus} rhoncus \blackout{sem}. Nulla \blackout{et}
lectus \blackout{vestibulum} urna \blackout{fringilla} ultrices.
\blackout{Phasellus} eu \blackout{tellus} sit \blackout{amet} tortor
\blackout{gravida} placerat. \blackout{Integer} sapien \blackout{est},
iaculis \blackout{in}, pretium \blackout{quis}, viverra \blackout{ac},
nunc. \blackout{Praesent} eget \blackout{sem} vel \blackout{leo}
ultrices \blackout{bibendum}. Aenean \blackout{faucibus}. Morbi
\blackout{dolor} nulla, \blackout{malesuada} eu, \blackout{pulvinar}
at, \blackout{mollis} ac, \blackout{nulla}. Curabitur \blackout{auctor}
semper \blackout{nulla}. Donec \blackout{varius} orci \blackout{eget}
risus. \blackout{Duis} nibh \blackout{mi}, congue \blackout{eu},
accumsan \blackout{eleifend}, sagittis \blackout{quis}, diam.
\blackout{Duis} eget \blackout{orci} sit \blackout{amet} orci
\blackout{dignissim} rutrum.
\end{minipage}
\end{document}
也可以看看:隐藏信息
答案2
假设您有一个带有关联tfm
文件的字体,我可以看到使用虚拟字体执行此操作的方法。
基本策略是获取原始文件并在其上tfm
运行以获取文件。这是 TeX 字体规格的人类可读版本。tftopl
pl
将该文件复制到例如xcmr10.vpl
(或您想要命名的黑色字体的任何名称)。
该vpl
格式是该格式的扩展版本pl
,记录在vptovf
源代码中(texdoc vptovf
查看详细信息)。简短的版本是,我们希望采用如下所示的每个字符描述:
(CHARACTER O 13
(CHARWD R 0.583336)
(CHARHT R 0.694445)
(CHARIC R 0.077779)
(COMMENT
(LIG C i O 16)
(LIG C l O 17)
(KRN O 47 R 0.077779)
(KRN O 77 R 0.077779)
(KRN O 41 R 0.077779)
(KRN O 51 R 0.077779)
(KRN O 135 R 0.077779)
)
)
MAP
并修改它以在(可能存在也可能不存在)之前添加一条指令COMMENT
,该指令将设置规则。我们不需要担心字体映射,因为我们要做的就是设置规则。转换后的字符将如下所示
(CHARACTER O 13
(CHARWD R 0.583336)
(CHARHT R 0.694445)
(CHARIC R 0.077779)
(MAP
(SETRULE 0.683332 0.583336)
)
(COMMENT
(LIG C i O 16)
(LIG C l O 17)
(KRN O 47 R 0.077779)
(KRN O 77 R 0.077779)
(KRN O 41 R 0.077779)
(KRN O 51 R 0.077779)
(KRN O 135 R 0.077779)
)
)
该SETRULE
命令根据设计尺寸采用高度和宽度。我使用了字符的宽度,并选择了大写字母的高度作为高度。您可以MOVEDOWN
在规则前面放置一个,并使其更高以模拟覆盖降部,但这对于您的目的来说可能不是必需的。
我不建议手动执行此操作。您需要编写一个程序来解析文件VPL
并自动添加MAP
。也许这里有一个热心帮忙的人会编写这样的程序。
最后一步是运行vptovf
最终文件并将生成的和文件vpl
放置在 TeX 安装的适当位置。然后,您可以像使用其他 TeX 字体一样使用生成的字体,并为审查后的文本获得漂亮的黑框。请注意,我们保留了原始字体中的所有字距和连字,因此当有正字距时不会出现什么问题(因此对于我的示例字符,最好在规则的宽度上添加一个额外的宽度以防止这些宽度显露出来)。vf
tfm
cmr10
0.077779
您还可以继续将原始字体添加到您生成的文件MAPFONT
中VPL
,并设置您不想审查的任何字符(也许您只审查字母和数字,但保留标点符号打印)。