Latex 多图片排版--排版代码生成器

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)

效果

原来文件夹

目标文件夹

猜你喜欢

转载自blog.csdn.net/binbinczsohu/article/details/107684097