使用正则表达式将图形的远程路径更改为本地路径

使用正则表达式将图形的远程路径更改为本地路径

我使用 markdown 撰写论文的主要内容,然后将其转换为 LaTeX(使用 Pandoc)以供最终展示。为了包含图形,我使用 dropbox 共享链接:

![MyCaption](http://Dropboxlink/Myfigure1.png?dl=1)

这非常方便,因为大多数时候我都是用无法存储太多数字的 Chromebook 书写。

当我将其转换为 LaTeX 时,我得到: \includegraphics{https://www.dropbox.com/bla/bla/Myfigure1.png?dl=1}

回到我的桌面,我需要手动将远程路径重命名为我的本地路径(因为 \includegraphics 无法处理远程路径)。

有人可以帮助我用正则表达式替换所有 \includegraphics 实例以指向本地路径(但保留从最后一个斜杠开始的文件名)吗?

可以做这样的事情:

\includegraphics{https://www.dropbox.com/bla/bla/Myfigure1.png?dl=1}改成\includegraphics{./figures/Myfigure1.png}

非常感谢你的帮助!

帕波

答案1

\let\oldincludegraphics\includegraphics
\def\includegraphics#1{\zzz#1\relax}
\def\zzz#1/bla/bla/#2?#3\relax{\oldincludegraphics{figures/#2}}

可能有效。

答案2

您可以使用正则表达式来实现:

\documentclass{article}
\usepackage[draft]{graphicx}
\usepackage{xparse,l3regex}

\ExplSyntaxOn
\tl_new:N \l_papo_path_tl

% save the meaning of \includegraphics    
\cs_set_eq:NN \papo_original_includegraphics:wn \includegraphics

% define a wrapper around the original \includegraphics
% to be able to add a variant    
\cs_new_protected:Npn \papo_include_graphics:nn #1 #2
 {
  \papo_original_includegraphics:wn [#1]{#2}
 }
\cs_generate_variant:Nn \papo_include_graphics:nn { nV }

% the main command
\cs_set_protected:Npn \papo_drop_include_graphics:nn #1 #2
 {
  \tl_set:Nn \l_papo_path_tl { #2 }
  \regex_replace_once:nnN { \A .*/ } { ./ } \l_papo_path_tl
  \regex_replace_once:nnN { ? .* \Z } { } \l_papo_path_tl
  \papo_include_graphics:nV { #1 } \l_papo_path_tl
 }

% redefine \includegraphics
\RenewDocumentCommand{\includegraphics}{O{}m}
 {
  \papo_drop_include_graphics:nn { #1 } { #2 }
 }

\ExplSyntaxOff

\begin{document}

\includegraphics[width=3cm]{https://www.dropbox.com/bla/bla/duck.jpg?dl=1}

\end{document}

使用 ,我们从头开始\A .* /搜索所有内容直到最后一个,将其替换为;使用 ,我们从字符串的第一个到末尾搜索所有内容。/./? .* \Z?

其余的是语法糖。

我使用了draft显示传递给的文件名的选项\includegraphics,仅作为示例。

在此处输入图片描述

相关内容