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

作者: bleph (bleph)   2015-01-25 20:29:06
※ 引述《ChenMeng0518 (LSiYue)》之銘言:
: 好文!思路很有意思,可以考慮整理成套件,發佈到 CTAN。
: 說兩個問題。
: pdfcrop 這個程式可以用來自動裁剪 PDF 格式圖檔的白邊。
: xeCJK 套件已經對中文斷行做了處理,因此不需要再使用
: \XeTeX 的兩個 primitives 來控制斷行。
謝謝您寶貴的意見
小弟初學, 平日使用 LaTeX 的機會也不多,
主要是因為有一些電子書要整理成自己的筆記
(跟最初 Knuth 大師用 TeX 來排版自己的數學式子大相逕庭)
發覺 LaTeX 有裁切的功能很實用
班門弄斧, 貽笑方家
以下是針對弟的前文再加修改的 tex 檔,
修改處是添加了裁切後的圖片寬度大小預設的功能
與原本的檔案不同之處會以標示顯示
\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage{graphicx}
\usepackage{longtable}
\usepackage{float}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{hyperref}
\tolerance=1000
\usepackage{fontspec}
\usepackage[boldfont,slantfont]{xeCJK}
\setCJKmainfont{cwTeX Q Ming Medium}
\usepackage{fp}
\usepackage{xkeyval}
\usepackage{adjustbox}
\usepackage{ifthen} %新加入的 package, 要在後面使用
\providecommand{\alert}[1]{\textbf{#1}}
%先對 pdf 紙張大小設定預設值為 A4 paper
\def\sourcepdfwidth{21.4}
\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}}}
}
\begin{document}
%測試範例 1
\myincludepdfgraphics{page=5,scewidth=21,source=4756.pdf,
sceheight=27.94,lt=1.7,dn=11.6,up=2.3,rt=11.5} % 試著不 key 入新圖片寬度
%測試範例 2 , 也可以使用 figure 環境
\begin{figure}{
\myincludepdfgraphics{page=3,scewidth=21,source=4756.pdf,
sceheight=27.94,lt=1.4,dn=14.4,up=2.3,rt=7.1,newwidth=3.5}
\caption{第二張圖} \label{fig2}
}
\end{figure}
\end{document}
作者: ChenMeng0518 (LSiYue)   2015-01-26 21:25:00
都說了不需要使用 \XeTeX 兩個元命令來控制斷行啦…
作者: bleph (bleph)   2015-01-27 10:05:00
已修正 :)

Links booklink

Contact Us: admin [ a t ] ucptt.com