将现有文本转换为盲文或乱码保留格式(线框图)

将现有文本转换为盲文或乱码保留格式(线框图)

假设我有一份花了一段时间设计和编写的文档。现在我想向某人展示总体格式和文档的长度,但我不想让此人阅读或甚至被实际内容分散注意力。我该如何更改文本以删除内容但保持大致相同的格式?

一个选项是浏览整个文档,并用经过仔细测量的lipsum文本替换单个文本块。但这需要大量工作。

另一种选择是简单地用一些(随机的?)规则逐个字母替换内容(当然不是命令)以获得相同的逐字结构。(假设解密的可能性不是一个紧迫的问题)。

我可以在整个文档中实现这种转换吗?例如,文档开头的一个包或几个命令。

最小示例:

\documentclass{article}
\begin{document}
This has a lot of content
\end{document}

如何制作文件仿佛消息来源是:

\documentclass{article}
\begin{document}
Blah bla a bli ba blihbla
\end{document}

答案1

感谢@ChristianHupfer(使用其他字体,例如西里尔文)和@JohnKormylo(建议使用“Redacted”字体)和@jfbu(举例),我想出了这个近乎完美的解决方案。我还了解到,这在图形设计中称为“线框图”。

它处理了 95% 的问题,剩下的部分是重新定义includegraphics,并可能使文本不可复制(如果可能的话是否可以生成包含不可复制文本的 PDF?)。

操作说明:

1)安装 Redacted 字体https://github.com/christiannaths/Redacted-Font

2)使用 Lualatex 并将其添加到您的文档中

\usepackage{fontspec}
\setmainfont[
    ExternalLocation={./},
    BoldFont={redacted-script-bold.ttf},
    ItalicFont={redacted-script-light.ttf},
    BoldItalicFont={redacted-script-bold.ttf} % or use pretty names if it works for you
]{redacted-script-regular.ttf} % Redacted Script
\setsansfont[ExternalLocation={./}]{redacted-script-regular.ttf} % Redacted
\usepackage{unicode-math}
\setmathfont[range=\mathup/{num}]{redacted-script-regular.ttf}
\setmathfont[range=\mathrm]{redacted-script-regular.ttf}
\setmathfont[range=\mathit]{redacted-script-light.ttf}
\setmathfont[range=\mathbf]{redacted-script-bold.ttf}

一些想法也来自:http://bryanwweber.com/writing/personal/2014/03/25/using-the-same-font-for-numbers-in-math-mode-in-latex/

注意:不幸的是,我从来没有设法使用名称中带有空格的系统字体setmainfont(它永远找不到它),所以我不得不将文件放在同一个目录中并通过文件名调用它们(如果您知道如何做,请告诉我正确的方法)。

结果非常好:

已编辑


版本 2(使斜体与直立字母区分开)

编辑后的字体太倾斜,并且没有“斜体”变体,所以我给常规变体赋予负倾斜,给斜体赋予正倾斜。(AutoFakeBold在这里也不起作用)。

\usepackage{fontspec}
\setmainfont[
    ExternalLocation={./}, FakeSlant=-0.5, AutoFakeSlant=0.5,
    BoldFont={redacted-script-bold.ttf},
%    ItalicFont={redacted-script-light.ttf},
    BoldItalicFont={redacted-script-bold.ttf} % or use pretty names if it works for you
]{redacted-script-regular.ttf} % Redacted Script
\setsansfont[ExternalLocation={./}, FakeSlant=-0.5]{redacted-script-regular.ttf} % Redacted
\usepackage{unicode-math}
\setmathfont[range=\mathup/{num}]{redacted-script-regular.ttf}
\setmathfont[range=\mathrm]{redacted-script-regular.ttf}
\setmathfont[range=\mathit]{redacted-script-light.ttf}
\setmathfont[range=\mathbf]{redacted-script-bold.ttf}
\setmathfont[range={"2032}]{redacted-script-regular.ttf} %solve unicode-math "prime" bug: https://tex.stackexchange.com/questions/208988/prime-gives-undefined-control-sequence-in-xelatex-with-unicode-math
%

答案2

只是为了好玩:

\documentclass{article}
\usepackage{linearb}
\usepackage{lipsum}
\begin{document}
\small
\textlinb{\lipsum[1-3]}
\end{document}

胡言乱语

答案3

根据 Christian Hupfer 在评论中提出的更改字体的想法。当然,逆向工程很容易实现。数学没有得到处理(可以添加包 mathastext 的使用,这甚至可以用于希腊字母;也可以对大符号采取额外的步骤)。

我使用blindtext包只是为了获取某种文档。

\documentclass{article}
\usepackage[T1]{fontenc}

\usepackage{blindtext}

% copy this to real situation
\renewcommand\encodingdefault{U}
\renewcommand\rmdefault{pzd}
\renewcommand\sfdefault{pzd}
\renewcommand\ttdefault{pzd}

\begin{document}

\blinddocument
\end{document}

引用

答案4

Python 3 解决方案(大部分延迟都是因为我遇到了两个问题):

文档=r“””
\documentclass{文章}
\usepackage{lipsum}
\开始{文档}
  \section[短标题][无效]{较长的章节标题}{无效}
  \textbf{这里有一些粗体可变文本。}
  此处的一些文字需要替换。
  \lipsum[1]
  \开始{图}
    \includegraphics[width=\textwidth]{某物.pdf}
    \caption{\label{fig} 标题}
  \结束{图}
\结束{文档}
“””

导入重新,编解码器

def rot13(s):
    返回 codecs.encode(s,"rot-13")

# 列出我们想要保留的宏列表(默认)
immutable_macro = re.compile(r"\\[^\s]*")
# 列出我们想要混淆的宏
可变宏字符串列表 = [
    r"\\节",
    r"\\textbf",
    ]
# 定义模式来查找宏参数
可选参数 = re.compile(r"\[([^\]]+)\]")
强制参数 = re.编译(r“{([^}]+)}”)
可变宏列表 = []
对于 mutable_macro_string_list 中的 s:
    p = 重新编译
    mutable_macro_list.append(p)

# 遍历文档行
对于 document.split('\n')[1:-1] 中的行:
    匹配 = 假
    # 寻找可变的宏行,混淆参数
    如果匹配==False:
        对于可变宏列表中的 p:
            m = p.搜索(行)
            如果 m!=无:
                #打印宏名称
                打印(“%s”%(line[0:m.end()]),end ='')
                # 打印混淆的可选参数(如果有)
                m =optional_arg.findall(行)
                如果 len(m)>0:
                    对于 g 在 m 中:
                        打印(“[%s]”%(rot13(g)),结束='')
                # 打印模糊化的强制参数(如果有)
                m = 强制参数.findall(行)
                如果 len(m)>0:
                    对于 g 在 m 中:
                        打印(“{%s}”%(rot13(g)),结束='')
                匹配 = True
                休息
    # 查找不可变的宏或常规文本
    如果匹配==False:
        m=immutable_macro.search(行)
        如果 m!=无:
            # 打印宏
            打印(“%s”%(行),结束='')
        别的:
            # 打印混淆后的文本
            打印(“%s”%(rot13(line)),结束='')
    打印()

结果是:

\documentclass{article}
\usepackage{lipsum}
\begin{document}
  \section[Fubeg gvgyr][Vainyvq]{Zhpu ybatre frpgvba gvgyr}{Vainyvq}
  \textbf{Urer'f fbzr obyq zhgnoyr grkg.}
  Fbzr grkg urer arrqf gb or ercynprq.
  \lipsum[1]
  \begin{figure}
    \includegraphics[width=\textwidth]{something.pdf}
    \caption{\label{fig} Caption}
  \end{figure}
\end{document}

相关内容