在特定行之前和之后添加一些行

时间:2014-07-15 19:40:34

标签: shell awk sed grep latex

我有很多像

这样的行
\includegraphics[width=12cm,height=9cm]{W_muonPtCosTheta_Corr.pdf}

在我的文本文件中。我需要找到包含它的每一行,并在此之前和之后添加一行。所以最终输出应该像

\begin{tikzpicture}
\draw (0, 0) node[inner sep=0] 
{\includegraphics[width=12cm,height=9cm]{W_muon_pt.pdf}};
\draw (2, 3) node {\color{red} $W_{P_T}$};
\end{tikzpicture}

2 个答案:

答案 0 :(得分:2)

使用gnu sed你可以这样做:

gsed -i 's/\\includegraphics\[width=12cm,height=9cm\]{[^.]*\.pdf}/\\begin{tikzpicture}\n\\draw (0, 0) node[inner sep=0]\n{&};\n\\draw (2, 3) node {\\color{red} $W_{P_T}$};\n\\end{tikzpicture}\n/' file

答案 1 :(得分:2)

纯粹的LaTeX解决方案。

将以下定义添加到LaTeX文件的前导码

  \let\savedincludegraphics\includegraphics
  \renewcommand{\includegraphics}[2][]{
     \begin{tikzpicture}
     \draw (0, 0) node[inner sep=0] {
     \savedincludegraphics[#1]{#2}};
     \draw (2, 3) node {\color{red} $W_{P_T}$};
     \end{tikzpicture}}

这将使用重新定义的扩展替换宏includegraphics的每次出现。您可以向宏添加其他参数以进一步自定义输出。

要引入变量标题,您需要更改\includegraphics的签名。正如评论中指出的那样,最好创建一个新命令。

  \newcommand{\includegraphicscaption}[3][]{
     \begin{tikzpicture}
     \draw (0, 0) node[inner sep=0] {
     \savedincludegraphics[#1]{#2}};
     \draw (2, 3) node {\color{red} #3};
     \end{tikzpicture}}

此命令可用作     \ includegraphicscaption [width = 12cm,height = 9cm] {W_muon_pt.pdf} {$ W_ {P_T} $}

编辑:原始解决方案中存在拼写错误。