我想从多个.tex
文件中提取所有图片(包括标题)并将它们写入一个新.tex
文件。这意味着我必须解析
\begin{figure}
. . .
\end{figure}
并输出整个块。我对正则表达式一无所知,但我认为grep
或awk
最适合这项任务。有人能帮我完成解析部分吗?编写一个 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
内部的环境。verbatim
Verbatim
lstlisting
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
}