繁体   English   中英

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

[英]Extract all text from \section tag in LaTeX

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

\\ section {简介}

直接检测技术,例如发现原型T矮星Gl 229B \\ citep {Na95,Op99}的技术,在过去15年中一直用于搜索附近恒星\\脚注周围的棕色矮星{有关这些同伴搜索的评论,请参见\\ citet {Op99}}。 尽管涉及到大量样本,但仅直接检测到两个{\\ it善意的}棕色矮人伴星,即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和G1 229B两者都比其原边小于20弧度。 实地测量,例如“两微米全天候测量” \\ citep [此后为2MASS] {Sk97},DEep近红外测量\\ citep [此后为DENIS] {Ep97}和Sloan数字天空测量\\ citep [此后为SDSS] {Yk99 },克服这一限制。 实际上,\\ citet {Ki00}最近发现了两个L型褐矮星伴星,它们之间有很大的距离。

我们目前正在2MASS目录中搜索田T矮人\\ citep {Bg98},这是褐矮星,其光谱特征是通过CH $ 4 $吸收带在1.6和2.2 $ \\ micron \\ citep {Ki99a}光谱确定的 我们的发现之一2MASSW J1457150-212148(以下称GI 570D)已被确认为GI 570ABC系统的一种广泛分离且常见的正确运动伴侣。 该系统由K4V主线圈和M1.5V-M3V封闭二进制\\ citep {Du88,Mi90,Fo99}组成,间距为5.91 $ \\ pm $ 0.06 pc \\ citep {Pe97}。 在$ \\ S $ 2中,我们描述了从2MASS数据库中选择该对象,回顾随后的观察并与Gl 570ABC建立其共同正确的运动。 在$ S $ 3中,我们根据 Gl 570D的距离和亮度估算L和T $ {eff} $,并使用\\ citet {Bu97}的演化模型进行T $ _ {eff} $和质量估计。

(我主要关心的是使用\\删除标签,但是我不确定该如何处理$标签)。

我已经尝试过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标记)后立即结束。

如何从该部分提取所有文本? 我乐于接受任何方法,包括正则表达式。

我不知道怎么做,在一气呵成,所以我会先提取属于部分与正则表达式好像一切 \\\\section{[\\w\\s]*}(.*)\\\\section{ (*此如果在部分标题中可能出现多个字字符或空格,则可能需要改进)。 然后,我将用示例字符串替换该结果中的所有标签。 我不确定Python中的TeX语法和rx,但是\\\\\\w*{.*} (非贪婪模式)可能会做到这一点。 抱歉,不是一个完整的解决方案,我对TeX和Python都不熟悉,但我希望您能得到一些想法;-)

基于TexSoup构建的Tex2py将为您完成工作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])
["\n\nChickens don't fly. They do only the following:\n\n", \begin{itemize}

\item waddle
\item plop\end{itemize}]

在这里, toc.section抓取了第一部分,但是我们可以使用toc.sections抓取所有部分。 不可否认,目前不保留空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM