我正在尝试从一个tex文件中提取所有的latex命令。为此,我必须使用Python。我尝试使用Re模块提取列表中的latex命令。
问题是,此列表不包含其名称包括特殊字符(如\alpha*、\a‘、#、\$、+、:、\;等)的latex命令。它只包含由字母组成的乳液命令。
我目前正在使用re.match python命令:
"I already know the starting index of '\' which is at self.i.
The example Latex code string could be:
\documentclass[envcountsame,envcountchap]{svmono}"
match_text = re.match("[\w]+", search_string[self.i + 1:])我能提取“文档类”。但是,假设有另一个命令,如:
"\abstract*[alpha]{beta}"
"\${This is a latex document}"
"\:" 如何从这些字符串中只提取‘抽象*’、'$‘、’‘?
我是Python新手,尝试过各种方法,但无法提取所有这些命令名。如果有一个通用的python可以处理所有这些情况,它将是有用的。
注:一本名为“对LaTeX的不那么简短的介绍”的书定义了LaTeX命令的格式可以有三种类型-
格式:
发布于 2015-03-23 19:07:45
以下是格式规范的准确翻译:
\\(?:[^a-zA-Z]|[a-zA-Z]+)\*?[^a-zA-Z][a-zA-Z]+\*?如果您的格式描述是准确的,这应该可以做到。不幸的是,我不知道LaTeX,所以我不确定它是100%的好。
从注释中的反馈来看,星星只适用于字母命令,还可以有一些其他的终止字符。最后的准则是:
\\(?:[^a-zA-Z]|[a-zA-Z]+[*=']?)发布于 2015-03-25 07:37:28
LaTeX是一个TeX宏包,因此,适用于TeX的所有内容也适用于LaTeX。
您提出的问题很难回答,因为TeX不是一种常规语言。如果您只想处理命令,则必须检查\\([A-Za-z]+ *|.|\n) regex (请参阅演示),注意在TeX中有活动字符,即唯一存在的字符就像命令一样。如果要处理命令参数,则必须检查各个命令定义,因为TeX是波兰符号(操作符或命令是前缀,具有可变数量的位置参数)语言。对于参数提取,TeX使用无上下文和非规则的大括号匹配,因此需要一个完整的解析器。
TeX允许您重新定义所有字符类,因此您可以重新定义数字作为字母,并可用作命令名(例如,\a23是一个有效的命令名)(这发生在包定义中,@用作字母,以便使用户无法访问但包内可用的命令)。
由于这个原因,消除LaTeX标记是一件很困难的事情,而且您只能取得部分结果。有许多不同的问题需要解决(如何处理\include指令,如何处理\chapter参数或\footnote等参数中的有效文本,需要包含索引等等)。
此外,您必须小心,就好像您试图消除命令参数一样,您也将删除部分文本(例如,\footnote、\abstract、\title、\chapter{...}等中的文本)。我不知道你到底想得到什么效果,所以我不能给你更多的这方面的信息。
https://stackoverflow.com/questions/29217603
复制相似问题