2017-06-18 20 views
1

以下の文章では、3つのファイルのそれぞれにfigs/01/を追加したいと思います。あなたが見ることができるように、ファイルはpdf、png、または拡張子を持たないことがあり、場合によっては\includegraphicsがいくつかの行に分割されます。ファイルパスをLatexの図に追加しますか?

私の現在の考え方は

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} 
+0

{\ * [^ {}]}/'/ \\ includegraphicsを\ [[^ \] \ [] * \] \試してみてください' –

+0

' figs/01/figs/06/vektor8.png'や 'figs/01/vektor8.png'という3つのファイルで何を得たいですか(言い換えると、元のパスを保持しますか? )? –

+0

これはTeX.SEではうまくいかないでしょうか? –

答えて

1

あなたは(代わりに、行毎にファイルを読み込むデフォルト動作の)ワンショットでファイル全体を読み込むことができます。これを行うには、スイッチ-0777(レコードセパレータには特別な値)が必要です。これは、複数の行にまたがるパターンの問題を解決します。

-nオプションとputs-pに置き換えて、結果を自動的に印刷することもできます。

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

デフォルトgsubでそれに適用され、$_を省略することができます。 、ここでの試合結果は予想にのみ、空の文字列である\Kは、すべての試合結果から左に削除し、パターンについて

(あなたも-peと引用'の間にスペースを削除して友達を感心することができます)置換文字列が挿入される位置。ルビーのコマンドラインオプションは、Perlのから来ていること

注:

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

Perlの類似点についての非常に有用な情報!どちらも完璧に動作します。 Perlの方は、 '正規表現の左括弧(unescaped left brace)は廃止されました。 –

+1

@ JasmineLognnes:Perl 6がこの動作を変更したため、はい(Perl 5でエスケープする必要はありません)。 '{'を '\ {' –

関連する問題