解析 .tex 文件中的图形的 Shell 脚本

解析 .tex 文件中的图形的 Shell 脚本

我想从多个.tex文件中提取所有图片(包括标题)并将它们写入一个新.tex文件。这意味着我必须解析

\begin{figure}
   . . . 
\end{figure}

并输出整个块。我对正则表达式一无所知,但我认为grepawk最适合这项任务。有人能帮我完成解析部分吗?编写一个 bash 脚本来完成其余部分对我来说没有问题。

答案1

编辑:@deimi 的回答仅编译定理使用该xcomment包可能会使这个 awk 脚本变得不再必要。

这是一个awk绕过TeX解析的解决方案。

#!/usr/bin/awk
# Extract figure environments
#

BEGIN{
    printing = 0;
}

/begin\{figure/{
    printing = 1;
}

printing == 1 {
    print;
}

/end\{figure/{
    printing = 0;
}

答案2

我最初的答案是以下脚本,完全等同于 Ethan Bolker 在我撰写时发布的答案。

/.*begin{figure}/{
    output=1
}
output==1{
    print
}
/.*end{figure}/{
    output=0
    print "% ---------------------------------- "
}

我取消了我的回答,但是原帖作者仍然要求我发布它,所以就在这里。

为了提供一些附加价值,我还将发布以下变体,它处理一些罕见的情况(不是真正需要,我只是为了好玩而实现它),特别是:

  • 它会删除可能出现在开头\begin{figure}或结尾的多余字符\end{figure}
  • 它不输出、或figure内部的环境。verbatimVerbatimlstlisting
BEGIN{
    in_verbatim=0
}
/.*begin.(verbatim|Verbatim|lstlisting)/{
    in_verbatim=1
}
/.*end.(verbatim|Verbatim|lstlisting)/{
    in_verbatim=0
}
/.*begin.figure./{
    if (! in_verbatim) {
        output=1
        split($0, aux, "begin{figure}")
        print "\\begin{figure}" aux[2]
    }
    next
}
/.*end.figure./{
    output=0
    if (! in_verbatim) {
       split($0, aux, "end{figure}")
       print aux[1] "end{figure}"
       print "% ---------------------------------- "
   }
}
output==1{
    print
}

相关内容