解决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