PDF的可悲状态--LaTeX文档的可访问性(2016)

2020-09-12 02:58:11

[从现在开始,我会把这个博客当作随意的事情和想法的垃圾堆。德语、日语、英语--都是混杂的。话题智慧:从计算机科学到一般生活,再到与日本有关的事情,应有尽有]。

如今,可访问性变得越来越重要。虽然在90年代看到了各种技术的快速和不协调的发展,这些技术并没有真正考虑到残疾人,但幸运的是,现在的发展考虑到了这一点。

例如PDF文件。经过相当长一段时间的半开放格式后,PDF现在是ISO的官方标准。而且PDF的规范要求对可访问的PDF进行标记。这意味着,除了内容的可打印图形描述之外,所有内容还应该包含在带有标记的、有点原始的类似XML的结构中。类似于(这里非常简化):

[Element Header]这是一个非常重要的文档[End Header][Table start][Table row 1][table cell]blabla[end table cell][end table row][end table][Graphic start][Alternative Text]此图像显示了一些漂亮的内容[End Alternative Text][End Graphic]。

你可以在这里看到这个想法。这允许屏幕阅读器从文档中提取信息,并将其大声朗读给视障人士。它还允许显示有关所包含元素的信息,例如图形的替代文本。

它还支持回流等功能,即当您在Kindle上显示PDF时。然后,Kindle可以从加标签的PDF中提取文本,根据您的屏幕大小对其进行重排,以您选择的字体显示,并以其他适合读者的方式对其进行修改。

当然,这在某种程度上违背了PDF(你看到你打印的东西)的最初想法,但话又说回来,最初的86-DOS被认为是对计算机套件的快速破解,但我们不知道这一切是如何结束的。

LaTeX或TeX通常不能生成带有标签的PDF文档。PdfTeX可能是目标正确的地方,但我认为这种情况不会在任何地方、任何时候发生。

现在很多机构都要求有可查阅的文件才能出版。除了仅仅标记之外,还有其他要求,但这是最大的障碍。

具有讽刺意味的是,一份普通的LaTeX文档本身就已经是一个相当结构化的文档。但是,从未将LaTeX语法结构转换为标签。这可能也不是一项微不足道的任务,因为a)市面上有无数的LaTeX包,它们都使用自己的语法结构,b)TeX/LaTeX在设计时从未考虑过清晰的类似XML的[tag][/tag]结构。因此,解析和转换可能不是小菜一碟。

这只是一个问题。TeX是在像面向对象编程这样的东西几乎处于研究阶段时设计的,远未普及。大型机是最热门的东西。尽管Knuth是个天才,但看看Tex的这一团乱七八糟的东西。以过去十年计算机科学毕业生的平均水平为例。你认为任何人都能一点也不了解那里发生的事情吗?

阿希姆·布鲁门萨特(Achim Blumensath)大约在15年前就意识到了这个问题(在写这篇文章时不小心击中了他的名字,因为他碰巧是我大约15年前选修的一门本科逻辑课程的导师之一),并写了蚂蚁代码作为tex的替代品,但整个事情从2007年开始就没有维护过。我猜他当时正忙着开始他的大学生涯,这是可以理解的。可悲的是,正如大多数独角戏所显示的那样,这个项目从未真正开始。

我的观点是,如果我们不依赖TeX本身,而使用用相当优雅的OCaml编写的Ant(或其他任何替代方法),那么黑客攻击至少对普通人来说是可能的。尽管我不得不承认,尽管我从博士时代就爱上了OCaml,但它也是一种相当小众的语言。但是想象一下,如果整个事情都是用Python编写的,或者至少是用C编写的。

我没有看过pdftex的来源,但在我看来,开发并不是一项巨大的共同努力,而是Hàn ThếThành自己一个人,长期超负荷工作,独自完成这项艰巨的任务。所以我们被困住了。

有一些人认为用乳胶标签是可以做到的。例如,CHI的人有一些关于它的说明,请看这里。

问题是他们都错了,这是我写这篇文章的动机之一。

基本上,他们建议在Acrobat Pro生成PDF后添加标签。当然,这不适用于任何比简单的单个页面更复杂的内容。检测什么是页眉、什么是子页眉、什么是表格、什么是表格页眉-所有这些都不可能在PDF生成后完成,因为您将不得不使用启发式方法,这将导致问题。所以值得称赞Adobe的家伙们的尝试,但古怪的混蛋标签不会有什么帮助,他们会给屏幕阅读器带来比直接提取文本阅读更大的麻烦。如果你不相信这一点,只需从arxiv中随机拿一张纸,通过Acrobat Pro运行它并添加标签,就可以看到结果。

还有Babette Schalitz的辅助功能包,她试图以一种自动生成标签的方式破解PDF生成。如果你看一下她的源代码,你会发现这不可避免地导致了完全的混乱(这里没有冒犯之意-但我声称在pdfTeX中,在LaTeX层面上而不是在下面,以一种干净的方式做是根本不可能的)。这个包在现代的TeX发行版上无法使用,文档也无法编译,因为代码会进行各种讨厌的黑客攻击,而这些攻击在当前版本中不起作用。

Andy Clifton试图破解软件包并修复这些编译问题,但还是要再次尝试:通过Acrobat Pro的可访问性检查器运行它,通过PAC或更好的方式运行它:使用Acrobat Pro手动检查文档:生成的标签结构完全被破坏。缺少空间,结构错综复杂。完全没用。您也可以手动将[tag]foobar[/tag]添加到文档中。当然,一些工具,如Acrobat Reader(不是专业版)会显示“文档已标记”,但这有什么意义呢?

罗斯·摩尔(Ross Moore)通过直接黑进pdfTeX,在带有LaTeX标签的PDF上写了一些论文,但这似乎是一场单人秀,是一项西西弗斯式的任务。似乎没有什么是遥不可及的生产读物,更像是超级阿尔法-阿尔法阶段。

Context在这个方向上做了一些努力,但似乎也有各种各样的小问题,让我们面对它:Context是一场不可预测的独角戏。没有定义的API,文档是维基上各处或邮件列表上的条目的群集,语法不断变化(特别是从MKII到MKIV),维基中的示例不起作用,没有书籍,官方手册总是落后于…。尽管上下文是一种非常有趣的方法,但它是PRAGMA内部选择的工具,但还没有为外部人员准备好生产。

然后在tex.stackexchange上有很多关于如何处理易访问性和加标签的PDF的问题,答案总是一样的:它不起作用。

在一些大学和政府机构,发布无障碍文档在法律上是强制性的,基本上这排除了LaTeX用于文档创建的可能性。我提到过Word和LibreOffice都会生成带标签的PDF吗?(不完美,但可用)。

总而言之,这是一种非常令人悲哀的情况。但这有点显示了潜在的问题:从程序员的角度来看,(La)Tex是一个大烂摊子,地毯下有令人难以置信的泥土,因此,开发是由几个超负荷工作的人推动的。自从pdfTeX的开发以来,TeX世界几乎没有实质性的开发来解决真正的核心功能(是的,我们有更好的包装系统,是的,我们现在有TikZ&;Beamer-所有的都很好,但它们都是建立在顶部的)。顺便说一句,从语法上讲,TikZ也很可怕。

我有时会想念WordPerfect。所见即所得的方法,但也有“揭示代码”。它仍然是一款文字处理器,排版质量远不及Tex,但仍是如此。