添加Latex数据的文件路径?

时间:2017-06-18 15:14:16

标签: ruby regex

在下面的文字中,我想将figs/01/添加到3个文件中的每个文件中。正如您所看到的那样,文件可以是pdf,png还是没有扩展名,有时\includegraphics会突破几行。

我目前的想法是

cat figs.tex | ruby -ne 'puts $_.gsub(/\\includegraphics\[.*?\]\{.*?\}/) { |x| x.do_something_here }'

但这是鸡与蛋的问题,因为我需要再次搜索要搜索和替换的部分。

问题

有谁能看到如何解决这种情况?

\begin{figure}[ht]
\centerline{ \includegraphics[height=55mm]{plotLn} \includegraphics[height=55mm]{plotLnZoom.pdf}}
\caption{Funktionen $f(x) = \ln(x)$ \ref{examg0} (bl)}
\end{figure}
\begin{example}[Parameterfremstilling for ret linje]\label{tn6.linje}
\begin{think}
    Givet linjen $\,m\,$,
        \includegraphics[trim=1cm 11.5cm 1cm
 11.5cm,width=0.60\textwidth,clip]{vektor8.png}
\end{think}

1 个答案:

答案 0 :(得分:1)

您可以一次性读取整个文件(而不是逐行读取文件的默认行为)。为此,您需要切换-0777(记录分隔符的特殊值)。这解决了分布在多行上的模式问题。

您也可以将-n选项和puts替换为-p以自动打印结果。

ruby -0777 -pe 'gsub(/\\includegraphics\[[^\]]*\]{\K/,"figs/01/")' figs.tex

您可以省略$_,默认情况下会gsub应用它。 (您甚至可以留下您的朋友留下-pe与引用'之间的空格

关于模式,\K从匹配结果中删除左边的所有内容,此处的匹配结果只是插入替换字符串的预期位置的空字符串。

请注意,ruby命令行选项来自Perl:

perl -0777 -pe 's!\\includegraphics\[[^\]]*\]{\K!figs/01/!g' figs.tex