我正在编写一个包含大量图像的文档,这些图像基本上是从其他 PDF 中提取的。
我现在要做的是复制图像,将其粘贴到 MSPaint 中,然后将其保存到用于 \includegraphics{path} 的路径文件夹中。
有没有办法可以简单地完成这项额外的工作,只需复制图像并将其直接从剪贴板粘贴到编辑器中即可?我确信没有直接的方法,但是是否有任何技巧可以将路径或图像转换为 \includegraphics 命令?
我注意到,如果将剪贴板中的图像粘贴到 tex 编辑器中,则不会发生任何事情。有没有办法至少将该图像转换为文件路径?
或者有人知道有什么更快的方法吗?当你有很多图片的时候,这很糟糕。
编辑:读完哈米德的回答后,我意识到这是关于设置一个宏:
- 将图像从剪贴板保存到文件
- 读取名称并包含在预设代码中 (\begin{figure} \includegraphics{path_created_by_macro} \end{figure})
- 在编辑器中写入此内容。
答案1
如果您在 Linux 中工作,则可以使用如下 bash 脚本:
#!/bin/bash
for f in `ls ./myImageDIR/*.png;`
do
echo '
\begin{figure}
\includegraphics{'$f'}
\end{figure}'
done
并遵循以下提示:如何从 LaTeX 执行 shell 脚本?,编译文件test.tex
:
\documentclass{article}
\usepackage{graphicx}
\immediate\write18{./my-shell-script.sh > scriptoutput.tex}
\begin{document}
\input{scriptoutput.tex}
\end{document}
使用命令行:
pdflatex -shell-escape -enable-write18 test.tex
如果需要添加一些文字:
\documentclass{article}
\usepackage{graphicx}
\begin{document}
text ...
\immediate\write18{./InsertOneImageLatex.sh firstPicture}
\input{firstPicture.tex}
...other text...
\immediate\write18{./InsertOneImageLatex.sh SecondPicture}
\input{SecondPicture.tex}
\end{document}
和InsertOneImageLatex.sh
:
#!/bin/bash
echo '
\begin{figure}
\includegraphics{'./myImageDIR/$1.png'}
\end{figure}' > $1.tex;
答案2
您可以使用 TeXstudio。只需将图像拖放到其中即可。此外,第一次使用时您可能需要在向导中预设一些参数。
如果图像数量非常多,您也可以编写一些脚本,使用 TeXstudio 中的 javascript 一次性导入所有图像。
答案3
扩展 Arianna Angeletti 的答案,如果图像位于父文件夹内的单独子文件夹中,则以下 bash 脚本将为每个子文件夹中的所有图像创建一个包含 latex 代码的文本文件。此脚本必须在父文件夹内执行(父文件夹本身不得包含图片)。可以根据需要格式化用于插入图像的 latex。文件名不得包含空格。
#!/bin/bash
#Find all directories in a parent folder
read -p "Enter image file extension (jpg, png, pdf, ...) " ext
DIRS=()
for i in * ; do
if [[ -d "$i" ]] && DIRS+=("$i") ; then
echo "$i"
fi
done
# Create a latex code for each image in the subfolder
#and write the latex code in a file figureFileNames.txt
for dir in "${DIRS[@]}" ; do
arr=$(cd $dir && ls *.$ext)
for f in $arr;
do
postfix=".${ext}"
f=$f
f=${f%"$postfix"}
echo '
\begin{figure}
\includegraphics{'$f'}
\end{figure}' >> $dir/figureFileNames.txt
done
done