从 LaTeX 中的 \section 标签中提取所有文本



如何仅从以下LaTeX中提取部分文本?

\部分{简介}

直接检测技术,例如发现原型的技术 T 矮星 Gl 229B \citep{Na95,Op99},已被用于最后 15 年寻找附近恒星周围的褐矮星\脚注{对于 这些伴随搜索的回顾参见\citet{Op99}}。 尽管 涉及大样本,只有两颗褐矮星 同伴已被直接探测到,Gl 229B和年轻的L型 褐矮星G 196-3B \citep{Re98}\footnote{伴星GD 165B \citep{Be89}也可能是一颗褐矮星,尽管它的状态是 可疑的\citep{Ki99b}.}。由于这些搜索中的大多数都是 局限于原发区周围的狭窄视野(通常 10-60$\arcsec$),相隔很远的同伴\脚注{我们采用 "广泛分离"的观察定义为角度 分离大于 100$\arcsec$;参见 \citet{Fi92}。 可能 错过。 事实上,G 196-3B 和 Gl 229B 都小于 20$\arcsec$ 从他们的主。 实地调查,如两微米 所有巡天 \citep[以下简称 2MASS]{Sk97},DEep 近红外 调查 \citep[以下简称 DENIS]{Ep97},以及斯隆数字天空 调查\citep[以下简称SDSS]{Yk99},克服此限制。 事实上,\citet{Ki00}最近发现了两个L型棕色 相距甚远的侏儒同伴。

我们目前正在2MASS目录中搜索场T矮星 \citep{Bg98},通过CH$4$吸收光谱鉴定的褐矮星 1.6 和 2.2 $\micron$ \citep{Ki99a} 的波段。 我们的之一 发现,2MASSW J1457150-212148(以下简称Gl 570D),已经 被确认为广泛分离的常见自运动伴侣 Gl 570ABC 系统。该系统由一个K4V初级和一个 M1.5V-M3V 接近二进制 \citep{Du88,Mi90,Fo99} 在距离 5.91$\pm$0.06 pc \citep{Pe97}. 在$\S$2中,我们描述了从2MASS数据库中选择这个对象,回顾了随后的观察结果, 并与Gl 570ABC建立其共同的适当运动。在 $\S$3 中,我们 根据距离估计 Gl570D 的 L 和 T${eff}$ 和 亮度,并使用 \citet{Bu97}的进化模型。

(我主要关心的是删除带有的标签,我还不确定如何处理$标签)。

我尝试过TexSoup:

with open("latex/" + file) as f:
try:
soup = TexSoup(f)
# Parse article body if .tex is a document, defined by /begin{document}
# Any errors in LaTeX formatting will result in file discard
if soup.document:
# If a section or subsection tag
lastChildIsSection = False
for child in soup.document.contents:
# If last child was section or subsection and current child is text,
if lastChildIsSection and isinstance(child, str):
# Get text
print(child)
# Check if section or subsection
if type(child).__name__ == 'TexNode' and (child.name == 'section' or child.name == 'subsection'):
lastChildIsSection = True
else:
lastChildIsSection = False

这将查找 \section 标签,然后获取下一个子项,这是一个表示某些文本的 str。不幸的是,这不是该部分中的所有文本,因为文本在下一个标签出现后立即结束,在本例中为cite标签。

如何从该部分中提取所有文本?我对任何方法都持开放态度,包括正则表达式。

Tex2py,建立在TexSoup之上,将为你完成 https://github.com/alvinwan/tex2py 的工作。假设我们有以下内容:

  • 我们只想要文本(而不是section{...}subsection{...})。但是,这包括项目符号列表、粗体字、引文等。
  • 请注意,有两个section。假设我们只需要第一个文本。(我们可以获取所有这些,但添加此约束只是为了使其更难)

假设以下内容保存在名为data的变量中

section{Chikin Tales}
subsection{Chikin Fly}
Chickens don't fly. They do only the following:
begin{itemize}
item waddle
item plop
end{itemize}
section{Chikin Scream}
subsection{Plopping}
Plopping involves three steps:

我们可以使用以下方法进行处理。

>>> toc = tex2py(data)
>>> print([text for text in toc.section.subsection.descendants])
["nnChickens don't fly. They do only the following:nn", begin{itemize}
item waddle
item plopend{itemize}]

在这里,toc.section抓取第一部分,但我们可以使用toc.sections来抓取所有部分。诚然,目前没有保留空格。

我不确定如何一次性完成,所以我会首先使用正则表达式提取属于\section{[ws]*}(.*)\section{部分的所有内容(*如果部分标题中出现超过单词字符或空格,则可能需要改进)。 然后我会用一个 exmp 字符串替换该结果中的所有标签。我不确定Python中的TeX-Syntax和rx,但是类似于\w*{.*}(非贪婪模式)的东西可能会做到这一点。 抱歉,不是一个完整的解决方案,我对TeX和Python都太不熟悉了,但我希望你能得到一些想法;-)

最新更新