首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Latex代码文件中提取所有Latex命令

从Latex代码文件中提取所有Latex命令
EN

Stack Overflow用户
提问于 2015-03-23 18:22:32
回答 2查看 1.1K关注 0票数 3

我正在尝试从一个tex文件中提取所有的latex命令。为此,我必须使用Python。我尝试使用Re模块提取列表中的latex命令。

问题是,此列表不包含其名称包括特殊字符(如\alpha*、\a‘、#、\$、+、:、\;等)的latex命令。它只包含由字母组成的乳液命令。

我目前正在使用re.match python命令:

代码语言:javascript
复制
    "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:])

我能提取“文档类”。但是,假设有另一个命令,如:

代码语言:javascript
复制
     "\abstract*[alpha]{beta}"
     "\${This is a latex document}"
     "\:" 

如何从这些字符串中只提取‘抽象*’、'$‘、’‘?

我是Python新手,尝试过各种方法,但无法提取所有这些命令名。如果有一个通用的python可以处理所有这些情况,它将是有用的。

注:一本名为“对LaTeX的不那么简短的介绍”的书定义了LaTeX命令的格式可以有三种类型-

格式:

  • 它们以反斜杠开头\,然后只有字母组成的名称。命令名以空格、数字或任何其他“非字母”结尾。
  • 它们由一个反斜杠和一个非字母组成。
  • 许多命令都存在于“星变体”中,其中一颗星被附加到命令名之后。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-23 19:07:45

以下是格式规范的准确翻译:

代码语言:javascript
复制
\\(?:[^a-zA-Z]|[a-zA-Z]+)\*?

演示

  • 非字母:[^a-zA-Z]
  • 或字母:[a-zA-Z]+
  • 明星变体:\*?

如果您的格式描述是准确的,这应该可以做到。不幸的是,我不知道LaTeX,所以我不确定它是100%的好。

从注释中的反馈来看,星星只适用于字母命令,还可以有一些其他的终止字符。最后的准则是:

代码语言:javascript
复制
\\(?:[^a-zA-Z]|[a-zA-Z]+[*=']?)
票数 3
EN

Stack Overflow用户

发布于 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{...}等中的文本)。我不知道你到底想得到什么效果,所以我不能给你更多的这方面的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29217603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档