我正在用 LaTeX 写一篇期刊文章。目前,审阅过程非常困难,因为我的教授必须对 pdf 进行评论。
之前,我曾使用 Word 撰写过一篇期刊论文。虽然使用 Word 的整个过程非常糟糕,但 Word 确实有非常方便的工具来审阅/编辑期刊文章。当有三位以上合著者时尤其如此。
因此,我试图想出一种方法,让我可以用 Word 但使用 LaTeX 语法编写整篇文章。我的教授可以理解大部分 LaTeX 语法,但他不想在个人电脑上使用和维护 LaTeX。如果有人能提出一些想法,那就太好了。
答案1
在对这个问题的评论中详细阐述我的答案,这就是我目前得到的答案。
您需要安装 Python(我安装了 python2.7)以及 lxml 和 PIL。我发现在 Windows 中安装后者的最简单方法是http://www.lfd.uci.edu/~gohlke/pythonlibs/,并下载lxml-2.3.4.win32-py2.7.exe
(PIL-1.1.7.win32-py2.7.exe
请注意,您必须为您的 Python 版本选择适当的文件)。运行这些exe
,将安装适当的库和绑定。
然后你就可以下载https://github.com/mikemaccana/python-docx。我没有尝试正确安装这个。我只是将它解压到一个文件夹中,打开一个cmd
shell,导航到该文件夹并运行提供的示例(example-extracttext.py
和example-makedocument.py
),这些示例都有效。我的设置很好。
然后我根据我们的需求调整了代码example-extracttext
,并编写了以下脚本,我将其命名为run.py
:
#!/usr/bin/env python2.7
'''
This file opens a docx (Office 2007) file and dumps the text. Then it uses pdflatex to compile it.
'''
from docx import *
import os
import sys
if __name__ == '__main__':
try:
wordfile = sys.argv[1]
latexfile = sys.argv[1].replace('docx', 'tex')
logfile = sys.argv[1].replace('docx', 'log')
document = opendocx(wordfile)
newfile = open(latexfile,'w')
except:
print('Please supply an input file. For example:')
print(''' run.py 'MyDocument.docx' ''')
exit()
# Fetch all the text out of the document we just created
paratextlist = getdocumenttext(document)
# Make explicit unicode version
newparatextlist = []
for paratext in paratextlist:
newparatextlist.append(paratext.encode("utf-8"))
## Print our documnts test with two newlines under each paragraph
newfile.write('\n\n'.join(newparatextlist))
newfile.close()
## Now use pdflatex to compile the result
os.system("pdflatex %s" % latexfile)
while "Rerun" in open(logfile).read():
os.system("pdflatex %s" % latexfile)
为了测试它,我编写了以下 Word 文档(请注意,我使用 Word 样式来标记章节标题,并使用表格插入 tikz 图片的代码,甚至插入了显示该图结果的图像,显然不是在第一遍,而是在后面)。还请注意,我使用 Word 项目符号列表来帮助标记分项列表。转换为纯文本时,所有这些 Word 样式都将被删除,但允许我们使显示更清晰。
Prueba.docx
我将此文档以与脚本相同的名称保存在同一个文件夹中run.py
,然后在 Word 文件上运行该脚本:
C:\Users\jldiaz\Downloads\mikemaccana-python-docx-647ee97>python run.py Prueba.docx
经过两次编译后(如果引用未解决,脚本将负责再次编译),结果pdf
如下:
(此时我使用 IrfanView 截取 tikz 图片并将其粘贴到 word 文档中)
注意:如果您使用 SumatraPDF 作为 pdf 阅读器,则无需在再次编译之前关闭 pdf 文档。当 pdf 发生变化时,SumatraPDF 会更新视图。
更新:
还用数学、注释和修订标记进行了测试。所有工作都按预期进行(注释被忽略,修订标记被忽略,最新版本的文本进入最终的 .tex 文件)。
但是,请注意 Word 文件中的回车符。Word 中的“Enter”键会插入一个段落结束标记,python 会将其转换为一个空行(从 到\par
tex,因此一切正常)。但是在某些环境中,我们不想要这些空行(例如,在公式环境中,或者 TeX 不需要 的其他地方\par
)。我们可以通过在 Word 中使用 Shift+Enter 来避免这种情况,它会插入一个行尾而不是段落结束符。python 会将这些行尾转换为空格。
我对评论、修订和数学的实验:
脚本执行后的结果:
答案2
鉴于您的评论:
我想要相同的主文档。我的教授在审阅时做的所有便签和高亮在我编写新文档后都消失了,这让我很恼火。因此,我想要一个所有作者都做高亮和评论的地方(最好是 .doc 文件),我从中提取文本然后进行编写。
你的教授/同事可以选择使用 SVN 吗?
我最近一直在使用 LaTeX + SVN 进行协作,我认为这是一个很棒的组合(比使用 Word 的协作功能要好得多,尽管我也是 Word 的重度用户)
您的合作者没有严格要求安装 LaTex,他们只需更新他们的 svn 工作副本(使用 Tortoise 等 GUI),在记事本等文本编辑器中打开 .tex 文件,并将他们的备注写为注释(使用 %)或使用自定义命令(如\profremark{}
),然后提交更改的文件。
这会将所有内容和备注保存在同一个主文档中(或者如果需要,可以分成多个文档),并且如果您使用自定义命令,您可以轻松切换备注的外观。
你可以通过以下方式帮助你的合作者
- 使你的 latex 源文件在简单的文本编辑器中尽可能的易读(例如通过换行符)
- 编写一些自定义注释命令,将其插入到序言 (
\collaborator1_comment{}, \collaborator2_comment{}
) 中,并且它们可以/必须使用。您可以在编译后的 PDF 中为它们赋予一些美观而独特的外观(例如出现在侧边距中,或以特定颜色显示等)。 - 使用 latexdiff 生成清晰的 PDF,突出显示更改(请参阅我对我自己问题的回答latexdiff + svn 无法处理多个文件(扁平化)) 并将 PDF 也提交到存储库。如果您使用自定义命令,协作者评论可以显示在 PDF 中。
对于您的最终版本,您只需隐藏自定义备注命令的外观。
答案3
与 JLDiaz 的优秀答案类似,可以在以下位置找到 Word-Macro-Template 的原型,它允许您直接在 MS Word 中使用 LaTeX 代码,也就是说,您可以将 MS Word 用作非常基本的 LaTeX 编辑器
https://github.com/Doktorierer/WordAsLatexEditor
主要目的不是将 MS Word 用作 LaTeX 编辑器,而是与不使用 LaTeX 的合作作者/主管一起进行修订工作。
特点(截至 2022 年 9 月):
- 在 MS Word 中预览 LaTeX 环境
- 隐藏或灰显 LaTeX 标记
- 对整个文档运行 LaTeX
下面是一个包含两张图片的示例:MS Word 中的 LaTeX 文件和美化后的代码,后者仍然是有效的 LaTeX 代码,只是在 Word 中隐藏了一些文本。
显然,如果有足够的兴趣,模板代码可以得到改进。