解决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中自适应显示图片 ...
随机推荐
- 利用浏览器favicon的缓存机制(F-Cache)生成客户端浏览器唯一指纹
利用浏览器favicon的缓存机制(F-Cache)生成客户端浏览器唯一指纹 首先介绍下: 这个技术出自 UIC论文:https://www.cs.uic.edu/~polakis/papers/so ...
- BUAAOO第一单元代码分析
1.HomeWork1 思路 一个主类用于字符串得操作, 一个Poly类用于对一个多项式进行抽象,用Arraylist来对term进行封装.内部含有求导方法,添加并合并同类项的方法,toString方 ...
- 字节、位、bit、byte、KB、B、字符之间的关系
一.bit 位bit就是位,也叫比特位,是计算机表示数据最小的单位,例如 1b ,2b,3b..... 说白了就是0或者1:计算机内存中的存储都是01这两个东西. 二.byte 字节byte就是字节 ...
- Centos6无法使用yum解决办法
12月后Centos 6 系统无法使用yum出现错误(文章底部看) 相信已经有一部分朋友今天连接到CentOS 6的服务器后执行yum后发现报错,那么发生了什么? CentOS 6已经随着2020年1 ...
- 一文完全掌握 Go math/rand
Go 获取随机数是开发中经常会用到的功能, 不过这个里面还是有一些坑存在的, 本文将完全剖析 Go math/rand, 让你轻松使用 Go Rand. 开篇一问: 你觉得 rand 会 panic ...
- 扩展 GRTN:云原生趋势下的 RTC 架构演进
在 2021 LiveVideoStackCon 音视频技术大会上海站,聚焦 "轻端重云和边缘架构新模式" 专场,阿里云视频云的 RTC 传输专家杨成立(忘篱)带来 "基 ...
- 计算机系统原理:cache容量计算
Cache容量计算例题: 假定主存地址位数为32位,按字节编址,主存和cache之间采用4-路组相联映射方式,主存块大小为4个字,每字32位,采用直写(Write Throght)方式和LRU替换策略 ...
- 【Scrapy(一)】 Scrapy爬虫的基础执行流程
安装scrapy模块 : pip install scrapy 创建scrapy项目 1.scrapy startprojecty 项目名称 注意:如果创建失败,可以先卸载原有的scrapy模块, ...
- 【VritualEnv】虚拟环境的介绍和基本使用
一.virtualenv的介绍: 在python开发中,我们可能会遇到一种情况,就是当前的项目依赖的是某一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲突,而virtualenv就是解决 ...
- Thinkphp之PHPExcel类库函数的官方读取的几个例子
1.使用 PHPExcel_IOFactory 读取文件 $objPHPExcel = PHPExcel_IOFactory::load($inputFileName); 2.使用一个特定的读取类,读 ...