解决Latex输出PDF纸张自适应大小及中文无法显示问题
遗留的问题
之前我们进行了基于texlive定制chemfig化学式转换Python服务镜像,虽然完成pdf的输出服务改造,但是输出效果并不是太好,如下图:

这个图有两个比较严重问题
- 不支持中文
- 空白区域过大,纸张空间浪费
其实最主要的问题是用户很难接受,这样东西放在前端无法很好地展示,我自己也看不下去,奈何第一次接触latex,有心无力,就支持了一个蠢萌的换纸功能。不过mol2chemfig在他们的官网中的Web Interface的PDF preview链接显示的PDF是没有空白区域的很小一块,觉得非常不错。那就调研一下,记录解决这两个问题过程及遇到的问题
解决中文问题
我们选用的宏包是CJKutf8,这个宏包无需安装其他东西,使用起来也是比较方便的,tex文件修改如下:
\documentclass{minimal}
\usepackage{xcolor, mol2chemfig}
\usepackage[a5paper, margin=10px, total={6in, 8in}]{geometry}
\usepackage{CJKutf8}
\usepackage[helvet]{sfmath}
\setcrambond{2.5pt}{0.4pt}{1.0pt}
\setbondoffset{1pt}
\setdoublesep{2pt}
\setatomsep{%(atomsep)spt}
\renewcommand{\printatom}[1]{\fontsize{8pt}{10pt}\selectfont{\ensuremath{\mathsf{#1}}}}
\setlength{\parindent}{0pt}
\setlength{\fboxsep}{0pt}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
\chemfig{H_3C-[:30]N**6(-(=O)-(**5(-N(-CH_3)--N-))--N(-CH_3)-(=O)-)}
\end{CJK}
\end{document}
用复杂的分子式看下效果,用a3paper渲染的效果(a4放不下):

我们的中文成功显示了,但是空白区域还是十分巨大,不堪用
去除空白区域
standalone
不得不说,Latex的中文文档真的是很少,只能到google搜索,但是奈何English水平捉鸡,往往词不达意,不过还是被我找到了:https://ctan.org/pkg/standalone
原文如下:
standalone – Compile TEX pictures stand-alone or as part of a document
A class and package is provided which allows TEX pictures or other TEX code to be compiled standalone or as part of a main document. Special support for pictures with beamer overlays is also provided.
The package is used in the main document and skips extra preambles in sub-files. The class may be used to simplify the preamble in sub-files. By default the preview package is used to display the typeset code without margins.
The behaviour in standalone mode may adjusted using a configuration file standalone.cfg to redefine the standalone environment.
重点语句:By default the preview package is used to display the typeset code without margins,意思是默认情况下,预览包用于显示没有边距的排版代码,这个不就是我们想要的吗,修改\documentclass{standalone}
\documentclass{standalone}
……
……
……
我们用小化学式再看下效果:

发现没什么变化,而且边上还多出一堆pt之类文字,这些文字应当是引入CJKutf8宏包导致的
去除geometry,重新修改样式
使用纸张应当我使用了geometry宏包并设置a5paper为默认纸张而导致的问题,我们重新编辑tex模板文件
\documentclass{standalone}
\usepackage{mol2chemfig}
\usepackage{CJKutf8}
\usepackage[helvet]{sfmath}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
\chemfig{H_3C-[:30]N**6(-(=O)-(**5(-N(-CH_3)--N-))--N(-CH_3)-(=O)-)}
\end{CJK}
\end{document}
我们看下效果:

图变小了,但是换行又不生效了,而且图形顶着边框
解决换行问题
使用varwidth解决换行问题
Google latex standalone newline ,第一条记录:https://tex.stackexchange.com/questions/499109/new-line-in-standalone ,示例里面说的很清楚,使用varwidth可以解决我们的换行问题,再看下效果:

几乎完美!我们再试下大的化学式,效果如下:

这不a5paper的尺寸吗?varwidth只能支持a5大小吗?standalone也是默认套的a5paper吗?说好的去空白自适应,怎么把图给截了?尝试的方向错了吗?我又回到原点了吗?我裂开了啊!!!
解决图片缺失问题
经过一番艰难的搜索,找到一篇varwidth选项限制输出宽度的文章,varwidth默认的限制824x543px,而默认使用的宽度是 \linewidth ,推荐我们使用 \maxdimen,我们再来优化一下tex模板
\documentclass[margin=3mm,varwidth=\maxdimen]{standalone}
\usepackage{mol2chemfig}
\usepackage{CJKutf8}
\usepackage[helvet]{sfmath}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
\begin{center}
\chemfig{H_3C-[:30]N**6(-(=O)-(**5(-N(-CH_3)--N-))--N(-CH_3)-(=O)-)}
\end{center}
\end{CJK}
\end{document}
我们看下效果:

Prefect! So Prefect!
参考链接
standalone:https://ctan.org/pkg/standalone
LaTex支持中文的三种方式:https://blog.csdn.net/z_feng12489/article/details/90449495
new line in standalone:https://tex.stackexchange.com/questions/499109/new-line-in-standalone
standalone: varwidth option limits output width:https://tex.stackexchange.com/questions/94391/standalone-varwidth-option-limits-output-width
解决Latex输出PDF纸张自适应大小及中文无法显示问题的更多相关文章
- Jupyter Notebook通过latex输出pdf
主要步骤 1.将ipynb编译成tex ipython nbconvert --to latex Example.ipynb 2. 修改tex,增加中文支持 在\documentclass{artic ...
- 解决windows下 Python中 matplotlib 做图中文不显示的问题
在代码中填入以下两句即可 from pylab import mpl mpl.rcParams['font.sans-serif'] = [font_name] 如:mpl.rcParams['fon ...
- 解决latex数学公式渲染不正确及行内公式中文渲染乱码问题
问题 之前数学OCR渲染数学公式用的 katex 来渲染,前端解决方案,我们的进行公式编写的时候是需要输入中文的,如: Fe_{2}O_{3} + 3 C O \stackrel{高温}{=} 2 F ...
- PDF2SWF转换只有一页的PDF文档,在FlexPaper不显示解决方法
问题:PDF2SWF转换只有一页的PDF文档,在FlexPaper不显示! FlexPaper 与 PDF2SWF 结合是解决在线阅读PDF格式文件的问题的,多页的PDF文件转换可以正常显示,只有一页 ...
- css控制图片自适应大小
相信大家做网页时经常会碰到大分辨率的图片会把表格涨破以致漂亮的网页面目全非,但只要使用以下的CSS语句即可解决. 该CSS的功能是:大于600的图片自动调整为600显示. <style ...
- Servlet输出PDF文档方法
概述 Java Servlet 编程可以很方便地将 HTML 文件发送到客户端的 Web 浏览器.然而许多站点还允许访问非 HTML 格式的文档,包括 Adobe PDF.Microsoft Word ...
- Android自定义控件:自适应大小的文本控件
需求 自适应大小的文本: 效果图: 项目开发中,开发人员根据UI人员提供的一套尺寸,布局了一些带文本的页面, 往往会少考虑一些数据极限的问题,造成机型屏幕适配问题. 例如: 文本(或数值)长度可变,如 ...
- 解决html导出pdf中文乱码问题的正确姿势
简介 本文使用jspdf 1.5.3版.GitHub地址:https://github.com/MrRio/jsPDF jspdf是歪果仁开发的,因此在一开始就没想过支持非英文以外的文字,这就导致了非 ...
- Qt自适应大小显示图片,添加菜单
由于后面的图像处理需要UI,OpenCV自带也不怎么会,MFC实在懒得学的.听同学说Qt不错,就用Qt做UI了. 本文主要介绍三个内容:在Qt Creator中使用OpenCV2.Qt中自适应显示图片 ...
随机推荐
- java实现简易的图书馆管理系统
比较适合新手练手的一个简易项目 直接上源码 Book package code; /** * @author ztr * @version 创建时间:2021年3月4日 下午8:21:40 * 类说明 ...
- .NET 6 Preview 3 发布
前言 2021/4/8 .NET 6 Preview 3 发布,这个版本的改进大多来自于底层,一起来看看都有什么新特性和改进吧. 库改进 新增值类型作为字典值时更快的处理方法 .NET 6 Previ ...
- 系统编程-网络-tcp客户端服务器编程模型(续)、连接断开、获取连接状态场景
相关博文: 系统编程-网络-tcp客户端服务器编程模型.socket.htons.inet_ntop等各API详解.使用telnet测试基本服务器功能 接着该上篇博文,咱们继续,首先,为了内容的完整性 ...
- HTML(一):语法结构
HTML语法规范 基本语法概述 HTML标签是由尖括号包围的关键词,例如<html>. 2HTML标签通常是成对出现的,例如<html>和</html> ,我们称为 ...
- 201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)详细阅读<构建之法>学习并掌握PSP的具体流程(2)掌握背包问题,通过查阅相关资料,设计一个采用 ...
- Windows Service 2016 Datacenter\Stand\Embedded激活方法
安装好系统后连入互联网之后使用管理员身份打开命令行 输入命令 slmgr /skms kms.03k.org 弹出窗口提示模式修改成功后再输入命令:slmgr /ato 以下为各个版本的key 版本: ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr
目录:一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实现一个简单的基于.net的微服务电商系统(二)--通讯框架讲解 三.通过Dapr实现一个简单的基于.net的微服务电 ...
- 【CTF】CTFHub 技能树 彩蛋 writeup
碎碎念 CTFHub:https://www.ctfhub.com/ 笔者入门CTF时时刚开始刷的是bugku的旧平台,后来才有了CTFHub. 感觉不论是网页UI设计,还是题目质量,赛事跟踪,工具软 ...
- 浅入kubernetes(5):尝试kubeadm
本篇介绍利用 kubernetes 的命令行工具,快速创建集群实例,完成 hello world 实践. 上一篇试用 minikube 去搭建集群,这一篇将介绍通过 kubeadm 去操作. 命令行工 ...
- Spring学习笔记(六):MyBatis集成
1 概述 MyBaits是一个著名的持久层框架,本文首先介绍了MyBatis的简单使用,接着与Spring进行整合,最后简单地使用了Generator去自动生成代码. 2 MyBatis简介 MyBa ...