遺留的問題
之前我們進行了基於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