遗留的问题

之前我们进行了基于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纸张自适应大小及中文无法显示问题的更多相关文章

  1. Jupyter Notebook通过latex输出pdf

    主要步骤 1.将ipynb编译成tex ipython nbconvert --to latex Example.ipynb 2. 修改tex,增加中文支持 在\documentclass{artic ...

  2. 解决windows下 Python中 matplotlib 做图中文不显示的问题

    在代码中填入以下两句即可 from pylab import mpl mpl.rcParams['font.sans-serif'] = [font_name] 如:mpl.rcParams['fon ...

  3. 解决latex数学公式渲染不正确及行内公式中文渲染乱码问题

    问题 之前数学OCR渲染数学公式用的 katex 来渲染,前端解决方案,我们的进行公式编写的时候是需要输入中文的,如: Fe_{2}O_{3} + 3 C O \stackrel{高温}{=} 2 F ...

  4. PDF2SWF转换只有一页的PDF文档,在FlexPaper不显示解决方法

    问题:PDF2SWF转换只有一页的PDF文档,在FlexPaper不显示! FlexPaper 与 PDF2SWF 结合是解决在线阅读PDF格式文件的问题的,多页的PDF文件转换可以正常显示,只有一页 ...

  5. css控制图片自适应大小

    相信大家做网页时经常会碰到大分辨率的图片会把表格涨破以致漂亮的网页面目全非,但只要使用以下的CSS语句即可解决.      该CSS的功能是:大于600的图片自动调整为600显示. <style ...

  6. Servlet输出PDF文档方法

    概述 Java Servlet 编程可以很方便地将 HTML 文件发送到客户端的 Web 浏览器.然而许多站点还允许访问非 HTML 格式的文档,包括 Adobe PDF.Microsoft Word ...

  7. Android自定义控件:自适应大小的文本控件

    需求 自适应大小的文本: 效果图: 项目开发中,开发人员根据UI人员提供的一套尺寸,布局了一些带文本的页面, 往往会少考虑一些数据极限的问题,造成机型屏幕适配问题. 例如: 文本(或数值)长度可变,如 ...

  8. 解决html导出pdf中文乱码问题的正确姿势

    简介 本文使用jspdf 1.5.3版.GitHub地址:https://github.com/MrRio/jsPDF jspdf是歪果仁开发的,因此在一开始就没想过支持非英文以外的文字,这就导致了非 ...

  9. Qt自适应大小显示图片,添加菜单

    由于后面的图像处理需要UI,OpenCV自带也不怎么会,MFC实在懒得学的.听同学说Qt不错,就用Qt做UI了. 本文主要介绍三个内容:在Qt Creator中使用OpenCV2.Qt中自适应显示图片 ...

随机推荐

  1. 技术分享PPT整理(二):C#常用类型与数据结构

    这篇博客起源于我对Dictionary.List.ArrayList这几个类区别的好奇,当时在改造公司的旧系统,发现很多地方使用了ArrayList,但我们平时用的多是泛型集合List,改造的时候要全 ...

  2. pgrep - 命令

    pgrep 命令格式:pgrep [选项] [模式] 选项 含义 -d <string> 指定输出分隔符 -l PID和进程名称 -a 列出PID和完整的命令行 -v 取反 -c 统计进程 ...

  3. [BFS]翻币问题

    翻币问题 Description 有N个硬币(6<=N<=20000)全部正面朝上排成一排,每次将其中5个硬币翻过来放在原位置,直到最后全部硬币翻成反面朝上为止.试编程找出步数最少的翻法, ...

  4. 【秒懂音视频开发】14_AAC编码

    AAC(Advanced Audio Coding,译为:高级音频编码),是由Fraunhofer IIS.杜比实验室.AT&T.Sony.Nokia等公司共同开发的有损音频编码和文件格式. ...

  5. [Fundamental of Power Electronics]-PART II-7. 交流等效电路建模-7.4 规范电路模型

    7.4 规范电路模型 在讨论了推导开关变换器交流等效电路模型的几种方法后,让我们先停下来,说明下这些结果.所有的在 CCM下以PWM工作的DC-DC变换器都具有相似的基本功能.首先,他们在理想情况下, ...

  6. 【DB宝47】企业知识分享+团队协作神器之Confluence

    目录 一.Confluence简介 二.知识库软件对比 三.快速安装confluence 7.4.6版本 四.confluence基本操作简介 4.1.创建空间(Space) 4.2.配置空间权限 4 ...

  7. Python基础(十六):文件读写,靠这一篇就够了!

    文件读写的流程 类比windows中手动操作txt文档,说明python中如何操作txt文件? 什么是文件的内存对象(文件句柄)? 演示怎么读取文件 ① 演示如下 f = open(r"D: ...

  8. Unity2D项目-平台、解谜、战斗! 1.1战斗底层组件CanFight-CanBeFighted

    各位看官老爷们,这里是RuaiRuai工作室,一个做单机游戏的兴趣作坊. 本文对该2D项目中战斗底层组件的开发及设计思路做一个总结,希望各路同行多多交流,各路大佬多多指点. 实例特征分析 首先对于各个 ...

  9. Java(171-194)【接口、多态】

    1.接口概述与生活举例 接口就是一种公共的规范标准 只要符合规范标准,就可以大家通用 2.接口的定义基本格式  public interface 接口名称 {       // 抽象方法      / ...

  10. 设计原则:接口隔离原则(ISP)

    接口隔离原则的英文是Interface Segregation Principle,缩写就是ISP.与里氏替换原则一样其定义同样有两种 定义1: Clients should not be force ...