Re: [心得] 裁切 pdf 的頁面(添加巨集功能)

看板LaTeX (論文排版)作者 (bleph)時間10年前 (2015/03/10 08:22), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
有時候由於 pdf 版本過新, 使得 LaTeX 在編輯時的動作很耗時間 可能轉回圖片檔去做會比較好. 對於 pdf 轉圖片檔的工具, 個人推薦 ImageMagick, (要先安裝 ghostscript 才行) 它的 convert 指令威力強大 針對一個 pdf 檔, 如果要全檔轉為 jpg 檔, 可以下的指令是: convert -density 300 example.pdf example.jpg density 指的是解析度, 單位為 dpi (dots per inch) 可依個人需要設得更高或較低 如果有時 pdf 檔頁數太多或太大 那在 windows 下可以考慮製作一個 bat 檔, 一頁一頁轉換 Ex: convert -density 300 example.pdf[10] 0010.jpg [] 內指的是頁數 轉換好了之後, 如果想應用類似的巨集, 一樣可以使用 不過圖片檔的單位多是 point, 所以需要一個看圖軟體 個人推薦 XnView, 它是 freeware, 私人使用免費 請參考 http://www.xnview.com/ 用 XnView 來開啓您的圖片檔, 在最左下角的資訊列會顯示圖片資訊, 例如 2461x3236x24 指的是一張大小為 2461 x 3236 的圖片 游標在圖片上移動, 也會顯示對應游標的 x,y 座標 圖片的資訊可以由 Edit(編輯) -> Properties 進入, 或按 快速鍵 Alt+Enter ; 可以看到此張圖片的 pixel per inch 的資訊 ================== 我是分隔線 ================= 如果要像前文一樣使用 LaTeX 的巨集, 筆者新加入了 \myincludejpggraphics 的功能, 方法類似 \myincludepdfgraphics 例如: \myincludejpggraphics{scewidth=2362,sceheight=3260, % resolution=300, source=0014.jpg, % lt=1208,up=2260, % rt=2300,dn=3093,newwidth=5} scewidth 指的是圖片寛度, 以 point 為單位, sceheight 指的是圖片高度 resolution 指的是幾 dpi 的意思, 未輸入會以 300 為預設值 (lt,up): 請把游標移到圖片左上角, 此時的 (x,y) 即對應的 (lt,up) (rt,dn) 指的是圖片右下角 newwidth 的單位是公分, 若未輸入巨集會自行計算 ============== 我是分隔線 ================= 為了方便起見, 請將以下文字存成一個 tex 檔案, 與您要編輯的檔案放在同一個資料夾 在 preamble 處使用 \input{檔名.tex} 來引用即可 ============== 我是分隔線 ================= \usepackage{fp} \usepackage{xkeyval} \usepackage{adjustbox} \usepackage{ifthen} %先對 pdf 紙張大小設定預設值為 A4 paper \def\sourcepdfwidth{21.0} \def\sourcepdfheight{29.7} \makeatletter %開始 \define@key{pdfmanage}{lt}{\def\myleftmargin{#1}} %左邊界,也是左側應裁切的量 \define@key{pdfmanage}{rt}{\def\myrightmargin{#1}} %右邊界 \define@key{pdfmanage}{up}{\def\myuppermargin{#1}} %上方邊界, 也是應裁的量 \define@key{pdfmanage}{dn}{\def\mydownmargin{#1}} %下方邊界 \define@key{pdfmanage}{angle}{\def\myangle{#1}} %旋轉角度 \define@key{pdfmanage}{page}{\def\mypage{#1}} %頁數 \define@key{pdfmanage}{newwidth}{\def\mynewwidth{#1}} %裁割後的圖片新的寬度 \define@key{pdfmanage}{scewidth}{\def\mysourcewidth{#1}} %pdf 頁面寬度 \define@key{pdfmanage}{sceheight}{\def\mysourceheight{#1}} %pdf 頁面高度 \define@key{pdfmanage}{source}{\def\mysourcefilename{#1}} %pdf 檔名 %底下提供預設值 \presetkeys{pdfmanage}{lt=0,rt=0,up=0,dn=0,angle=0,page=1,newwidth=-10, % scewidth=\sourcepdfwidth,sceheight=\sourcepdfheight}{} % 這邊若使用者未輸入圖片裁切後新的寬度, 則預設為 -10, 後面會重新計算 \newcommand{\getsourcepdfparameter}[1]{ \setkeys{pdfmanage}{#1} } \makeatother %結束 \newcommand{\myincludepdfgraphics}[1]{ \getsourcepdfparameter{#1} %底下使用 fp 套件計算右邊界及下方邊界應裁的量 \FPeval\truerightmargin{\mysourcewidth-\myrightmargin} \FPeval\truedownmargin{\mysourceheight-\mydownmargin} % ifthen套件的作用在此 % 如使用者未輸入新的圖片寬度,則預設為 -10, 我們 % 再用右邊界減去左邊界,以之作為圖片寬度(即圖片寬度不變) % 這樣又可以少計算一項數據 \ifthenelse{\equal{\mynewwidth}{-10}} {\FPeval\mynewwidth{\myrightmargin-\myleftmargin}{}} \resizebox{\mynewwidth cm}{!}{ %請注意 \mynewwidth 與其後的"公分" %有一空白鍵隔開 \adjustbox{trim=\myleftmargin cm \truedownmargin cm \truerightmargin cm \myuppermargin cm,clip}{% \includegraphics[angle=\myangle,page=\mypage]{\mysourcefilename}}} } %================================================================ %以下要開始用新的巨集, jpg檔 以 pt 為單位 %================================================================ \def\sourcejpgwidth{2480.3} %21.0*300/2.54=2480.3 \def\sourcejpgheight{3507.87} %29.7*300/2.54=3507.87 \makeatletter %開始 \define@key{jpgmanage}{lt}{\def\myjpgleftmargin{#1}} %左邊界,也是左側應裁切的量, pt \define@key{jpgmanage}{rt}{\def\myjpgrightmargin{#1}} %右邊界,pt \define@key{jpgmanage}{up}{\def\myjpguppermargin{#1}} %上方邊界, 也是應裁的量,pt \define@key{jpgmanage}{dn}{\def\myjpgdownmargin{#1}} %下方邊界,pt \define@key{jpgmanage}{angle}{\def\myjpgangle{#1}} %旋轉角度 \define@key{jpgmanage}{page}{\def\myjpgpage{#1}} %頁數 \define@key{jpgmanage}{newwidth}{\def\myjpgnewwidthcm{#1}} %裁割後的圖片新的寬度, 以公分為單位 \define@key{jpgmanage}{scewidth}{\def\myjpgsourcewidth{#1}} %jpg 頁面寬度,pt \define@key{jpgmanage}{sceheight}{\def\myjpgsourceheight{#1}} %jpg 頁面高度,pt \define@key{jpgmanage}{source}{\def\myjpgsourcefilename{#1}} %jpg 檔名 \define@key{jpgmanage}{resolution}{\def\myjpgresolution{#1}} %jpg 檔的解析度, dpi (dots per inch) %底下提供預設值 \presetkeys{jpgmanage}{lt=0,rt=0,up=0,dn=0,angle=0,page=1,newwidth=-10, % scewidth=\sourcejpgwidth,sceheight=\sourcejpgheight,resolution=300}{} % 這邊若使用者未輸入圖片裁切後新的寬度, 則預設為 -10, 後面會重新計算 \newcommand{\getsourcejpgparameter}[1]{ \setkeys{jpgmanage}{#1} } \makeatother %結束 \newcommand{\myincludejpggraphics}[1]{ \getsourcejpgparameter{#1} %底下使用 fp 套件計算右邊界及下方邊界應裁的量 \FPeval\truejpgrightmargincm{(\myjpgsourcewidth-\myjpgrightmargin)/ % \myjpgresolution * 2.54} \FPeval\truejpgdownmargincm{(\myjpgsourceheight-\myjpgdownmargin)/ % \myjpgresolution * 2.54} %使用 fp 套件將 dpi 轉換為公分單位 \FPeval\truejpgleftmargincm{\myjpgleftmargin/\myjpgresolution * 2.54} \FPeval\truejpgupmargincm{\myjpguppermargin/\myjpgresolution * 2.54} % ifthen套件的作用在此 % 如使用者未輸入新的圖片寬度,則預設為 -10, 我們 % 再用右邊界減去左邊界,以之作為圖片寬度(即圖片寬度不變) % 這樣又可以少計算一項數據 \ifthenelse{\equal{\myjpgnewwidthcm}{-10}} {\FPeval\myjpgnewwidthcm{(\myjpgrightmargin-\myjpgleftmargin)/ % \myjpgresolution * 2.54}{}} \resizebox{\myjpgnewwidthcm cm}{!}{ %請注意 \mynewwidth 與其後的"公分" %有一空白鍵隔開 \adjustbox{trim=\truejpgleftmargincm cm \truejpgdownmargincm cm \truejpgrightmargincm cm \truejpgupmargincm cm,clip}{% \includegraphics[angle=\myjpgangle,page=\myjpgpage]{\myjpgsourcefilename}}} } %測試範例 1 (pdf 檔) % \myincludepdfgraphics{page=5,scewidth=21,sceheight=27.94,source=exam.pdf, % % lt=1.7,rt=11.6,up=2.3,dn=11.5,newwidth=10} % 試著不 key 入新圖片寬度 %測試範例 2 , 也可以使用 figure 環境 %\begin{figure} %\myincludepdfgraphics{page=3,scewidth=21,sceheight=27.94,source=exam.pdf, % % lt=1.4,dn=14.4,up=2.3,rt=7.1,newwidth=3.5} %\caption{第二張圖} \label{fig2} %\end{figure} %測試範例3 (圖片檔) % \myincludejpggraphics{scewidth=2362,sceheight=3260,source=example.jpg, % % lt=1208,up=2260,rt=2300,dn=3093,newwidth=5} % scewidth, sceheight, lt,up,rt,dn 皆以 point 為單位, % 預設 resolution=300(dpi) % newwidth 要以公分輸入 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.0.219 ※ 文章網址: https://www.ptt.cc/bbs/LaTeX/M.1425946942.A.3FF.html ※ 編輯: bleph (122.117.0.219), 03/10/2015 08:27:11
文章代碼(AID): #1K_Za-F_ (LaTeX)
文章代碼(AID): #1K_Za-F_ (LaTeX)