[英]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.