如何将LaTeX转换为纯文本(ASCII)?

73

场景:
我有一个使用LaTeX创建的文档(我的简历),它在pdflatex中正确编译并输出我想要的结果。现在我需要将同一文档转换为普通的ASCII。

示例:
我已经看到过这种情况(至少一次)这里, 作者有一个PDF版本和一个ASCII版本,几乎以每种方式匹配PDF版本,包括边距、间距和项目符号。

我意识到由于ASCII格式的限制,这种转换无法完全精确,但根据我迄今发现的情况,似乎可以得到非常接近的近似值。这个过程是什么?


1
从您提供的 Todd C. Miller 页面中倒数第二段(重点在我)可以看出:“请注意,ASCII 版本是手动格式化的。我不知道有没有保留格式的 LaTeX 到 ASCII 转换器,但 detex 可以用于提取实际文本。” - Kevin J. Chase
14个回答

46

Opendetex 适用于 Windows 和 Linux(在 Mac 上也可以编译)。它可以从 https://github.com/pkubowicz/opendetex 下载。

用法:

detex project

打开 project.tex 文件,读取使用 \include 或 \includeonly 命令包含的所有文件,将其输出到标准输出。

detex -n project > out.txt

打开 project.tex 文件,不跟随 \include 或 \includeonly 命令,将结果输出到 out.txt 文件中。

detex --help

显示完整帮助信息

将其解压缩到您选择的任何目录。假设您将其解压缩到 Downloads 目录下。

在该目录中创建另一个任意名称的目录(这是可选但建议的)。假设该目录名为“my_paper”。将您的论文放入“my_paper”目录中。假设您的论文名称为 project.tex。

导航到该路径。

    cd ~/Downloads/opendetex

运行该命令

    detex my_paper/project.tex  > out.txt

通用表格

    detex -n full_path_to_tex_file.tex > output_text_file.txt

3
这是最好的答案,除非你默认情况下不应该使用“-n”标志。 - naught101
1
你好,有没有办法修复这个错误?detex: warning: can't open file - Wet Feet
3
这会给我一个空的文本文件作为输出。(Mac OSX,通过Homebrew安装了opendetex; .tex文件被Pandoc很好地消化了)。 - eric_kernfeld
1
刚试了一下 opendetex,在 OSX 10.11 上也不行,但 pandoc 运行良好。 - Josep Valls
它是否也可以忽略空格和换行符? - alper
显示剩余3条评论

17

CatDVI 可以将 DVI 转换为文本,并尝试保留格式。


1
你知道如何关闭“两端对齐”的对齐方式吗? - chuckg
1
尝试使用 -u 选项将其通过 fmt(1) 进行管道传输。 - Nietzche-jou
1
只需移除多余的空格,例如像这样 catdvi foo.dvi | perl -pe 's/[ ]+/ /g' 给我比 fmt 更合理的输出。 - Frank
源代码编译:找不到-lkpathsea - ar2015

14

您可以尝试这里提供的一些程序:

TeX转ASCII


13

pdftotext 可以保留布局

如果您正在使用 pdflatex,您可能不想在包选项上搞来搞去地切换到 latex 以生成 DVI 文件。

相反,您可以将pdf文件转换为文本。这适用于使用 Curve 包制作的简历/履历表:

pdftotext  -layout MyResume.pdf

请注意 -layout, 它会生成一个人眼可读的结果,类似于原始PDF的结构,但是会在破坏行以实现这一点。去掉-layout,将生成更适合进一步处理且不会破坏行的结果。


1
这个解决方案对我非常有效 - 谢谢!我尝试了上面的Python脚本,但出现了错误,而pandoc.org/try没有返回任何内容,控制台则列出了一个GET请求的500错误。我没有太多时间来调试它们,但这个解决方案很好用! - modulitos
1
这个解决方案的一个问题是它包含了换行符。如果不需要,应该省略-layout - darthn

9
您也可以尝试使用Pandoc,它可以将LaTeX转换为许多其他格式。我建议阅读其文档,因为可能存在一些棘手的情况,需要传递一些参数来处理。

1
Pandoc非常棒。针对Python的程序化转换,包括自动将许多数学结构转换为具有合理纯文本等效项的纯文本,我制作了一个有用的小技巧函数:http://pastebin.com/z7EMvfkZ - andybuckley

8
另一种选择是使用htlatex从LaTeX源文件创建网页,然后使用links转换为纯文本。我过去使用命令行 links -dump -no-numbering -no-references input.html > output.txt 这将产生相当不错的结果。这当然更符合呈现的HTML视图而不是原始PDF,因此可能不完全符合您的要求。

3
我的常规策略是使用Hyperlatex将其转换为网页,然后从网页浏览器中复制和粘贴。我发现这样可以得到最佳的格式。
通常情况下,我还需要手动修复一些换行问题...

1
我尝试过这个,但不幸的是它不支持使用外部的cls文件。我正在使用类文件来处理重复格式化任务,以及enumitem类。谢谢! - chuckg
嗯,我不认为我遇到过这样的问题......但是我已经很久没用它了......而且我在工作上也没有任何文件。 - Brian Postow

3
我觉得最好的解决方案如下。假设您已经将latex文档名称(不带扩展名)存储在${BASENAME}中,您需要执行以下3个步骤:

htlatex ${BASENAME}.tex

iconv -f iso-8859-1 -t utf-8 ${BASENAME}.html > ${BASENAME}-utf8.html

html2markdown ${BASENAME}-utf8.html > ${BASENAME}.txt

显然,您需要安装tex4htpython-html2text

3
当我需要从我的TEX文件中获取纯文本以进行索引和搜索时,我发现LaTeX2RTF是一个不错的解决方案——它有一个适用于Windows的安装程序和GUI,并且它生成了一个RTF文件,我可以在Word中打开我的50页论文。

1
RTF文档虽然不算是真正的“纯文本”。 - Paŭlo Ebermann
我同意。我发布它是因为它可能仍然对其他人有用,就像我一样想以这种方式提取文本。 - tsvikas

3
尝试以下步骤:http://zanedp.livejournal.com/201222.html 以下是将我的LaTeX文件转换为纯文本的步骤序列:
$ latex file.tex
$ catdvi -e 1 -U file.dvi | sed -re "s/\[U\+2022\]/*/g" | sed -re "s/([^^[:space:]])\s+/\1 /g" > file.txt

使用 -e 1 选项运行 catdvi 命令,可以输出 ASCII。如果使用 0 而非 1,则会输出 Unicode。Unicode 包括所有特殊字符,如子弹、短划线和希腊字母。它还包括一些字母组合的连字,如“fi”和“fl”。你可能不喜欢这些连字,因此请改用 -e 1。使用 -U 选项告诉它打印出未知字符的 Unicode 值,以便您可以轻松查找并替换它们。
命令的第二部分查找字符串 [U+2022],该字符串用于指定子弹字符(•),并将其替换为星号(*)。
第三部分删除 catdvi 添加的额外空格,同时保留行首空格(缩进)。
运行这些命令后,最好搜索 .txt 文件,查找字符串 [U+,以确保没有无法映射到 ASCII 的 Unicode 字符留下,并加以修复。

这个答案可能仍然有用吗?但对我来说,这会破坏许多字母组合,包括所有的双“f”。我应该先指定一些非比例字体或其他东西来避免这些问题吗? - CPBL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接