例如,如果我想从 url 添加此图像
http://www.qqxxzx.com/images/profile-pics/profile-pics-16.jpg
在我的 pdf 中,我该怎么办?
我尝试了几种解决方案href
。例如这个
\begin{figure}%[2]
\centering
\href{http://www.qqxxzx.com/images/profile-pics/profile-pics-16.jpg}{\includegraphics{profile-pics-16.jpg}}
\end{figure}
但什么都没起作用。我总是得到这个错误
Package pdftex.def Error: File `profile-pics-16.jpg' not found. See the pdftex.def package documentation for explanation. Type H <return> for immediate help. ... l.57 ...pg}{\includegraphics{profile-pics-16.jpg}}
答案1
shell 转义功能 ( \write18
) 可用于在编译期间调用外部程序。以下示例首先检查文件是否存在。如果不存在,则调用wget
以下载文件(如果pdflatex
使用启用的 shell 转义功能调用,例如通过选项-shell-escape
或-enable-write18
(MiKTeX)。
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\begin{figure}
\centering
\IfFileExists{profile-pics-16.jpg}{%
}{%
\immediate\write18{%
wget http://www.qqxxzx.com/images/profile-pics/profile-pics-16.jpg%
}%
}
\includegraphics{profile-pics-16.jpg}
\end{figure}
\end{document}
对于 LuaTeX,不需要进行 shell 转义,因为可以通过库进行下载luasocket
。
以下示例定义了宏\Download
,它接受文件名和 URL。如果检测到 LuaTeX,则在 Lua 中处理下载。否则需要 shell 转义。为方便起见,文件名存储在宏中\DownloadFile
以供稍后在 中使用\includegraphics
。
\documentclass{article}
\usepackage{graphicx}
\usepackage{ifluatex}
\ifluatex
\directlua{
tex.enableprimitives('', {'luaescapestring'})
}
\newcommand*{\Download}[2]{%
\IfFileExists{#1}{%
}{%
\directlua{
local io = require('io')
local http = require('socket.http')
local ltn12 = require('ltn12')
local file_name = '\luaescapestring{#1}'
local url = '\luaescapestring{#2}'
texio.write_nl('Downloading: ' .. file_name)
texio.write_nl('')
http.request{
url=url,
sink=ltn12.sink.file(io.open(file_name, 'w'))
}
}%
}%
\edef\DownloadFile{#1}%
}
\else
\newcommand*{\Download}[2]{%
\IfFileExists{#1}{%
}{%
\immediate\write18{%
wget -O "#2" "#1"%
}%
}%
\edef\DownloadFile{#1}%
}%
\fi
\begin{document}
\begin{figure}
\centering
\Download{profile-pics-16.jpg}{%
http://www.qqxxzx.com/images/profile-pics/profile-pics-16.jpg%
}
\includegraphics{\DownloadFile}
\end{figure}
\end{document}
警告:代码不会检查任何下载错误。