我使用 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
,仅作为示例。