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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM