latex 使用感受
优点
我对latex多图排版方面真的是又爱又恨,爱的是你可以通过设置来调整图片的大小,图片的间距,以及他会帮你将图片进行对齐,不用像之前在ppt里面一样还要自己一张一张图片去调整,真的挺方便的。
缺点
虽然latex支持多图排版功能很方便,但是要实现类似这种排版,工作量也是不小的,而且调其格式来,工作量真的不小,真的有一种让你像在PPT里面排好序,然后再引用进去的感觉,但是呢,PPT的话,如果你换了一张图片,就得自己重新去贴,重新调整位置,然后再替换原来的图片,也是挺麻烦的。latex的话,只要你死了一次,把格式排版搞好后,后面替换都是非常简单的。
下面我开始分享我在latex的多图排版的步骤
大概过程如下
1、建好文件夹。
在你lpaper的atex版本的文件夹中,建一个文件夹figures,如果有已经有了的话,建议再建一个文件夹,名称就是你的图片插入的章节名称或者主题名称,例如我这块是消融实验,那么我就在 figures 里面建了一个ablation的文件夹
2、放置图片。准备好图片,把图片放到步骤一的文件夹中
3、将图片进行命名
latex默认编排图片都是以一列为单位显示,为了便于后面图片的使用,所以命名规则这里是有讲究的。
建议图片名称可以这样子命名 colunm.row.png 图片名称由两个数字组成,第一个数字表示改图处于第几列,第二个数据表示这个图片处于第几行,例如对于第一行同一类的图片的图片名我是这样子命名的1.1,png 2.1png 3.1png .....5.1.png(这样子命名不仅简洁好理解,而且对后面我们献出的一件神奇帮助很大。)
大家如果不小心命名成 1.1.png 1.2.png 1.3.png,最后显示出来肯定是有问题的,那么怎么办,两种办法,一种是手动改,如果图片数量多,你肯定要抓狂,那么第二种是使用我提供的Python代码,将图片名称倒过来。代码我会贴在文章后面
4、编写排版代码(最后看了步骤5,再决定是否手写)
在ctex里面开始编写下面的内容(需要调整的参数只有两个,但是你会发现,你需要调整的地方却不是一般的多,如果你有n张图,需要排成m行,那么就是需要改n+m个地方,有没想哭的感觉。作为程序猿,啥都不会,啥都可以欺负我,但是软件绝对不可以!!!我们信奉的宗旨是,软件上一切用得不爽的地方,我们就要用代码去消灭他。所以在此,我们要祭出一件终极武器,排版代码生成器,详见步骤5)
(这也是我想吐槽latex的地方,图片排班没有预浏览功能,你改了格式,还需要等待生成Pdf才能看到效果,然后从编译到后面看到效果需要40秒左右,等得真的让人奔溃,后面我发现其实pdf生成还是挺快的,但是ctex的Pdf预浏览框显示很慢,估计这个框是因为需要高亮修改过的内容,导致慢的,应该可以调吧!我试试了再跟大家分享)
\begin{figure}[h]
%begin{minipage}中的0.149 centerline中width=\textwidth这两个是需要调整的参数
\begin{minipage}{0.149\linewidth}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/1.1.png}}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/1.2.png}}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/1.3.png}}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/1.4.png}}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/1.5.png}}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/1.6.png}}
\vspace{3pt}
\centerline{Image}
\end{minipage}
....
\begin{minipage}{0.149\linewidth}
\centerline{\includegraphics[width=\textwidth]{ablation/6.1.png}}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/6.2.png}}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/6.3.png}}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/6.4.png}}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/6.5.png}}
\vspace{3pt}
\centerline{\includegraphics[width=\textwidth]{ablation/6.6.png}}
\vspace{3pt}
\centerline{bbb}
\end{minipage}
\caption{...}
\label{fig4}
\end{figure}
5、使用排版神器---排版代码生成器
由于需要修改的地方太多了,然后仔细分析排版代码,发现其实都是有章可循,除了图片名其他都是重复的。这种情况下,非常适合用代码生成器来解决这个问题。然后我用python写了一个简单的排版代码生成器,具体源码如下
def generate_ablation_code():
#name 为每一列图片下面显示的标注
names=["Image","GT","SCRN","SCRN-A","BSRN-NA","BSRN"]
#range(1,7) 中 7表示我有6列
print("begin{figure}[h]")
for i in range(1,7):
print(r"\begin{minipage}{0.149\linewidth}")
if i==1:
print(r"\vspace{3pt}")
#range(1,7) 中 7表示每列我有6张图
for j in range(1,7):
#之前图片的命名在这边有大作用
tmp = "\centerline{\includegraphics[width=\\textwidth]{ablation/"+str(i)+"."+str(j)+".png}}\n\\vspace{3pt}"
print(tmp)
#打印图片下面显示的标注
print("\centerline{"+names[i-1]+"}")
print(r"\end{minipage}")
print("end{figure}")
生成后把控制台生成的内容贴到ctex中即可
最终效果
代码
文件名置换
"""
转换文件名,将原来文件夹中的 1.2.png 1.3.png...文件,在新文件夹中变成 2.1.png 3.1.png
注意该代码不会影响原来的文件,只会在新文件夹中生成新文件
"""
def change_file_name():
# 源文件地址
origin_file_path = r"E:\1paper\1latex\xxxx\figures\a/"
# 目标文件件地址(要先自己生成好)
des_file_path = r"E:\1paper\1latex\xxxx\figures\experiment/"
file_list = os.listdir(origin_file_path)
for file in file_list:
file_names = file.split(".")
new_file_name = file_names[1]+"."+file_names[0]+".png"
copyfile(origin_file_path+file, des_file_path+new_file_name)
效果
原来文件夹
目标文件夹