Latex图表制作:关于EPS文件转PDF文件及PDF裁剪自动化的Shell脚本制作

news2025/1/19 23:11:14

关于EPS文件转PDF文件及PDF裁剪自动化的Shell脚本制作

  • 前言
  • 一、EPS文件转PDF文件
    • 1. 过去的科研绘图方案
    • 2. 未来的科研绘图方案
  • 二、使用步骤
    • 1. 单例操作
      • a. 安装epstool
      • b. 切除EPS文件白边并保存临时EPS文件
      • d. 将EPS文件转换为PDF文件
    • 2. 批处理操作
      • a. Shell 脚本
      • b. 使用说明
  • 参考网站


在这里插入图片描述

前言

很快就要步入研二了,在写完一篇论文以后,即将进入第二篇论文写作时,察觉到之前的一篇论文还有许多可以改进的地方,一个方面就是绘图,一篇论文图画的好不好、能否吸引审稿人的眼球并获得其青睐是一个值得琢磨的问题,而在这种收益和付出正相关的事情上,就更应该投以关注。接下来不间断会更新一些科研方面的细节,比如绘图、制表诸如此类……(我又在挖新坑了)


一、EPS文件转PDF文件

EPS又名矢量图文件,是可插入Latex论文写作模板的一种文件格式。而更常见的是使用PDF格式文件,因为PDF一旦生成固定就不易被修改(相较Word、Txt这些文件而言)。

1. 过去的科研绘图方案

实际上在此之前的科研绘图过程中,本人的常规操作就是用python的matplotlib绘制图片并保存为PDF或者PNG文件。而保存为PDF后放到Latex论文中会出现一个问题,那就是所需的图表位于PDF页面正中央,四周都有白边,放到论文中就会显得图表有点小。因此需要对PDF进行剪裁。通过对PDF截图保存为图片,再将图片复制到一个只有一页的PPT(Power Point)中,同时设置好PPT页面大小和图片一致,最后另存为PDF文件即可完成裁剪。过程看上去有些繁琐,且这样保存的PDF存在另一个问题,PDF中的一些文字并不能再复制出来,因为其原本就是一张图片。而正常的PDF中的文字是可以被复制Copy的。

2. 未来的科研绘图方案

当然,读者可以使用WPS(需要付费)和Adobe等工具进行可视化裁剪。而手工裁剪的问题就是并不能很好地切除PDF白边,而且每次手动调整也是很麻烦的一件事情。因此接下来介绍的方法就是通过免费的工具用命令行的形式进行自动裁剪。

二、使用步骤

值得一提的是,本文都是这在Ubuntu这类Linux系统上进行的,如果是Windows操作系统可能并不适合。顺带一提,科研方面Ubuntu是必不可少的。有一些代码比如包含分布式的代码只能在Linux操作系统下进行,因为Windows没有Fork操作。

1. 单例操作

首先要在Ubuntu上安装相应工具包:epstool

a. 安装epstool

sudo apt-get install epstool

b. 切除EPS文件白边并保存临时EPS文件

以input_file.eps这个文件为例:

epstool --copy --bbox input_file.eps input_file.temp.eps

将结果暂时存为input_file.temp.eps

d. 将EPS文件转换为PDF文件

epstopdf --hires --outfile=output_file.pdf input_file.temp.eps

转换后在同目录下生成output_file.pdf文件即为最终我们要的结果。
如果这步执行出错就按照提示进行安装对应库,这里我被要求安装texlive-font-utils

sudo apt install texlive-font-utils

2. 批处理操作

上面是针对一个EPS文件,然而很多时候我们需要对多个文件进行批量转换,真正实现自动化一键式操作。这里就要使用到Shell脚本。
直接给出代码,然后再介绍使用方法。

a. Shell 脚本

使用vi eps2pdf.sh或者vim eps2pdf.sh创建一个新的Shell脚本文件。
源码已发布在github: https://github.com/Regan-Zhang/EPS2PDF

#!/bin/sh
for file in ./*;do # 遍历当前目录所有文件
	if [ "${file##*.}"x = "eps"x ];then # 如果文件后缀为eps,即为eps文件则进行如下操作
		echo "$file is eps file"
		filename=${file%.*} # 去除.eps后缀名
		echo "$filename"
		# 执行单例命令
		epstool --copy --bbox $file $filename.temp.eps 
		epstopdf --hires --outfile=$filename.pdf $filename.temp.eps	
		rm -f $filename.temp.eps # 删除临时文件
	fi
done
read -p "Press any key to end"

b. 使用说明

将EPS文件全部放到一个文件夹下,然后将eps2pdf.sh脚本也放到这个目录下。
然后进行当前目录的terminal终端窗口,输入

sh ./eps2pdf.sh

即可运行完成。

参考网站

ubuntu, eps转pdf以及切除白边
Mac党的福音:两行命令搞定eps转pdf以及切除白边
shell 切分文件名提取文件扩展名或提取文件名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贝叶斯公式的理解与推导(简单版本)

院子里面有条狗,过去几十年中,平均100天狗会叫50天,平均100天被偷盗一次,偷盗时有90%概率狗会叫,请问当狗叫的时候,是小偷入侵的概率有多大? 分析: 狗叫为独立事件A,偷盗…

chatgpt赋能python:Python如何将PDF转换为Word文档

Python如何将PDF转换为Word文档 在现代电脑使用的日常工作中,PDF格式的文档已经变得很普遍。这种文件格式十分方便,但是有时候可能需要将PDF文件转换为Word文档。幸运的是,Python提供了多种方法来实现这个目标。 为什么要将PDF转换为Word&a…

6. 常见的文件编码方式及查看网页源码的编码方式

6. 常见的文件编码方式及查看网页源码的编码方式 文章目录 6. 常见的文件编码方式及查看网页源码的编码方式1. 编码的由来2. 编码的作用3. 常见的编码方式4. ASCII码5. Unicode符号集6. UTF-87. GB23128. GBK9. ISO-8859-110. 文件编码查看方式11. 网页编码查看方式12. 留言 1.…

【学习日记2023.6.9】之 SpringCloud入门

文章目录 SpringCloud1. 认识微服务1.1 单体架构1.2 分布式架构1.3 微服务1.4 SpringCloud1.5 总结 2. 服务拆分和远程调用2.1 服务拆分原则2.2 服务拆分示例2.2.1 导入Sql语句2.2.2 导入demo工程 2.3 实现远程调用案例2.3.1 案例需求:2.3.2 注册RestTemplate2.3.3 …

计算机组成原理——总线,输入输出系统

文章目录 **一 总线概述****1 总线基本概念****1.1 定义****1.2 总线设备****1.3 总线特性** **2 总线的分类****2.1 片内总线****2.2 系统总线****2.3 I/O总线****2.4 通信总线** **3 系统总线的结构****3.1 单总线结构****3.2 双总线结构****3.3 三总线结构** **4 常见的总线…

TextDiffuser: Diffusion Models as Text Painters

TextDiffuser: Diffusion Models as Text Painters (Paper reading) Jingye Chen, HKUST, HK, arXiv2023, Cited: 0, Code, Paper 1. 前言 扩散模型因其出色的生成能力而受到越来越多的关注,但目前在生成准确连贯的文本方面仍存在困难。为了解决这个问题&#xf…

chatgpt赋能python:Python怎么进行302跳转以提高SEO

Python怎么进行302跳转以提高SEO 在进行搜索引擎优化时,重点是提高网站的排名和流量。其中一个关键的因素就是网页的重定向。在Python中,使用302重定向可以为您的网页提供更好的SEO效果。 什么是302跳转? 302跳转指的是HTTP状态码302 Foun…

chatgpt赋能python:Python教程:如何使用Python在U盘上新建文件?

Python教程:如何使用Python在U盘上新建文件? 如果您是一名经验丰富的Python开发人员,那么您可能已经使用Python进行过很多任务。但是,您是否曾经问过自己如何在U盘上使用Python来新建文件?这篇文章将带您逐步了解如何…

chatgpt赋能python:Python中如何使用正弦函数进行数学计算

Python中如何使用正弦函数进行数学计算 正弦函数是数学中经常使用的一种三角函数,可用于测量角度和距离等。Python是一种可以跨平台使用的高级编程语言,它具有许多内置函数来进行数学计算。在Python中使用正弦函数,可以通过输入角度或弧度来…

【AI】Ubuntu20.04安装cuda、cuDNN、Anacodna、PyTorch

1、版本选择 1)选择PyTorch版本:2.0.1 2)对应的CUDA版本:11.7或者11.8,选择较新的11.8 3)确定显卡是否支持,使用命令nvidia-smi查看显卡驱动版本及支持的CUDA最高的版本,本人的为12 4)cuDNN版本 选择和CUDA版本对应的最新版本v8.9.1 2、下载 2.1 下载CUDA 各个…

力扣高频SQL50题(基础版)——第九天

力扣高频SQL50题(基础版)——第九天 1 销售分析Ⅲ 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 1.2 示例sql语句 # 找到不在春季销售的产品 然后不是这些的就是符合条件的 # QUARTER 返回日期是第几季度的 SELECT product_id,product_name F…

AJAX:

目录 AJAX简介: 特点: 优点: 缺点: http请求报文和响应报文: AJAX代码实现: 发送get请求: 发送post请求: ​服务器响应json数据: ​AJAX的问题处理&#xff1a…

从零开始:如何用Python建立你的第一个人工智能模型

1. 摘要: 在这篇文章中,我们将介绍如何从零开始使用Python建立你的第一个人工智能模型。无论你是刚接触编程的新手,还是有经验的开发者想进一步探索人工智能领域,这篇文章都将为你提供清晰、详细的指南。我们将一步步探索数据预处…

[分布式锁]:Redis与Redisson

文章目录 1 分布式锁1.1 为什么需要分布式锁?1.1.1 引入业务场景1.1..2 本地锁与分布式锁 1.2 分布式锁核心思想1.3 基于Redis实现分布式锁1.3.1 基于Redis实现分布式锁问题1.3.2 问题时间线分析 2 Redisson入门2.1 Redisson快速实现2.2 开门狗机制2.3 加锁的实现原…

Python手写数字识别

神经网络是手写数字识别中常用的机器学习模型。它由许多神经元组成,每个神经元接收输入并生成输出。在前向传递过程中,神经元计算一些权重和偏移量的线性组合,并将其输入到一个非线性的激活函数中,从而生成神经元的输出。输出层通…

6道常见hadoop面试题及答案解析

Q1.什么是Hadoop?   Hadoop是一个开源软件框架,用于存储大量数据,并发处理/查询在具有多个商用硬件(即低成本硬件)节点的集群上的那些数据。总之,Hadoop包括以下内容:   HDFS(Ha…

Scrum经验性过程

软件开发是一个复杂的活动, 在软件产品开发的过程中不仅存在着需求的不确定性,也存在着技术的不确定性,再加上参与软件开发的主体通常是由多人组成的软件开发团队,加上人的因素,就让整个软件开发的活动变得非常复杂。如…

MySQL的索引详解

1.什么是MySQL的索引 1.1索引的概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。 所以索引归根结底只是在做一件事,添加了索…

数据结构-Redis(三)

前面介绍了redis的String和哈希,接下来看看其他的数据结构 List LPUSH:左边放入 RPUSH:右边放入 LPOP:取出左边第一个数,并且移除 RPOP:取出右边第一个数,并且移除 由上操作可以看出&#…

chatgpt赋能python:Python中一行输出的方法

Python中一行输出的方法 Python是一种高级编程语言,其语法简洁、易于阅读、丰富的库和解释器使其成为了众多程序员的选择。在Python中有时需要一行输出多个值、变量或者其他信息,因此在本文中将介绍如何在Python中实现一行输出的方法。 一般的输出方法…