تالار گفتگوی پارسیلاتک
لاتک LATEX => حروفچینی مستندات => نويسنده: وحید دامنافشان در سپتامبر 15, 2014, 11:58:46 pm
-
توی کد پایین، برای تغییر حاشیههای صفحات ۳ و ۴ از دستور newgeometry استفاده کردم؛ اما همونطور که توی فایل خروجی پیدیاف پیوستشده میبینید، جای کراپمارکها توی این صفحات به هم میریزه. جالب اینجاست که حتی در صورت برگشتن به حاشیههای قبلی (با استفاده از دستور restoregeometry)، همچنان جای کراپمارکها اشتباه چاپ میشه. توی راهنمای بستههای crop و geometry چیزی پیدا نکردم.
چطور میتونم این مشکل رو حل کنم؟
\documentclass[a4paper]{book}
\usepackage{ptext}
\usepackage[total={16.3cm,23.5cm},centering,includehead=true,paperwidth=20.8cm, paperheight=28cm]{geometry}
\usepackage[cross,center,noinfo,a4]{crop}
\usepackage{xepersian}
%\settextfont{XB Niloofar}
\begin{document}
\chapter{مقداری متن}
\section{مقداری متن دیگر}
\ptext[1-10]
\newpage
\newgeometry{total={14.3cm,21.9cm},centering,includehead=true,paperwidth=20.8cm, paperheight=28cm}
\ptext[1-10]
\newpage
\restoregeometry
\ptext[1-10]
\end{document}
پ.ن ۱: اصراری به استفاده از دستور newgeometry ندارم؛ فقط میخوام حاشیه صفحات ۳ و ۴ رو تغییر بدم و دوباره برگردم به حاشیه اولی؛ با این شرط که جای کراپمارکها توی همه صفحات، یکسان باشه.
پ.ن ۲: بدون استفاده از زیپرشین هم این مشکل وجود داره.
-
راستش از بابت مشکل شما اطلاعی ندارم. فقط خواستم یادآوری کنم که بسته جدیدی که دکتر کارنپهلو نوشتن را تست کردید؟ یکی از کارهاش قرار دادن خطوط برش هست.
-
فایل pdf فایلی است که من میگیرم. در ضمن تغییر paperwidth و paperheight در \newgeometry ممکن نیست:
Package geometry Warning: `paperwidth': not available in `\newgeometry'; skippe
d.
Package geometry Warning: `paperheight': not available in `\newgeometry'; skipp
ed.
-
پ.ن ۱: اصراری به استفاده از دستور newgeometry ندارم؛ فقط میخوام حاشیه صفحات ۳ و ۴ رو تغییر بدم و دوباره برگردم به حاشیه اولی؛ با این شرط که جای کراپمارکها توی همه صفحات، یکسان باشه.
با بسته bidi-atbegshi شما کنترل مستقیم روی مبداً گوشههای کاغذ داری و بنابراین این مشکل پیش نمیاد:
\documentclass[a4paper]{book}
\usepackage{ptext}
\usepackage[total={16.3cm,23.5cm},centering,includehead=true,paperwidth=20.8cm, paperheight=28cm]{geometry}
\usepackage{bidi-atbegshi}
\usepackage[preloadedlatintextfont]{xepersian}
\settextfont{XB Niloofar}
\AtBeginShipout{%
\AtBeginShipoutUpperLeft{%
\put(-110,-60){\line(1,0){100}}
\put(-60,-110){\line(0,1){100}}
}
\AtBeginShipoutUpperRight{%
\put(10,-60){\line(1,0){100}}
\put(60,-110){\line(0,1){100}}
}
\AtBeginShipoutLowerLeft{%
\put(-110,60){\line(1,0){100}}
\put(-60,10){\line(0,1){100}}
}
\AtBeginShipoutLowerRight{%
\put(10,60){\line(1,0){100}}
\put(60,10){\line(0,1){100}}
}
}
\begin{document}
\chapter{مقداری متن}
\section{مقداری متن دیگر}
\ptext[1-10]
\newpage
\newgeometry{total={14.3cm,21.9cm},centering,includehead=true}
\ptext[1-10]
\newpage
\restoregeometry
\ptext[1-10]
\end{document}
-
با بسته bidi-atbegshi شما کنترل مستقیم روی مبداً گوشههای کاغذ داری و بنابراین این مشکل پیش نمیاد:
درسته. خیلی ممنون. فقط یه سوال داشتم:
با توجه به اینکه اندازه کاغذ رو روی a4 گذاشتم و همچنین با توجه به گزینههای
centering,paperwidth=20.8cm, paperheight=28cm
که تعیین کردم، میخوام که خطوط برش به اندازه ۱ میلیمتر از هر دو سمت راست و چپ و به اندازه ۵ میلیمتر از هر دو سمت بالا و پایین لبه کاغذ a4 فاصله داشته باشند. آیا روش سرراستی برای تعیین این فاصله با استفاده از دستور put وجود داره یا این فاصلهها رو باید با آزمون و خطای مقادیر دستور put تنظیم کنم؟
-
درسته. خیلی ممنون. فقط یه سوال داشتم:
با توجه به اینکه اندازه کاغذ رو روی a4 گذاشتم و همچنین با توجه به گزینههای
centering,paperwidth=20.8cm, paperheight=28cm
که تعیین کردم،
اینکه کاغذ شما a4 هست یا مقادیر شما برای paperwidth و paperheight چی هستند کوچکترین اهمیتی نداره. بسته bidi-atbegishi به اندازههای کاغذ به چشم یک متغیر نگاه میکنه و میتونیید هر اندازهای داشته باشند.
میخوام که خطوط برش به اندازه ۱ میلیمتر از هر دو سمت راست و چپ و به اندازه ۵ میلیمتر از هر دو سمت بالا و پایین لبه کاغذ a4 فاصله داشته باشند. آیا روش سرراستی برای تعیین این فاصله با استفاده از دستور put وجود داره یا این فاصلهها رو باید با آزمون و خطای مقادیر دستور put تنظیم کنم؟
شما تنها یک محاسبه سرانگشتی باید بدانید و اینکه محیط picture چگونه کار میکند. کد را اول مینویسم و توضیحش را برای یکی از گوشههای کاغذ راست و یکی از گوشههای کاغذ سمت چپ میدهم. بقیه گوشههای کاغذ مشابه هم هستند. در این مثال همه خطهای افقی و عمودی ۴۰ میلیمتر طول دارند.
\documentclass[a4paper]{book}
\usepackage{ptext}
\usepackage[total={16.3cm,23.5cm},centering,includehead=true,paperwidth=20.8cm, paperheight=28cm]{geometry}
\usepackage{bidi-atbegshi}
\usepackage[preloadedlatintextfont]{xepersian}
\settextfont{XB Niloofar}
\AtBeginShipout{%
\AtBeginShipoutUpperLeft{%
\setlength{\unitlength}{1mm}
\put(-41,-25){\line(1,0){40}}
\put(-21,-45){\line(0,1){40}}
}
\AtBeginShipoutUpperRight{%
\setlength{\unitlength}{1mm}
\put(1,-25){\line(1,0){40}}
\put(21,-45){\line(0,1){40}}
}
\AtBeginShipoutLowerLeft{%
\setlength{\unitlength}{1mm}
\put(-41,25){\line(1,0){40}}
\put(-21,5){\line(0,1){40}}
}
\AtBeginShipoutLowerRight{%
\setlength{\unitlength}{1mm}
\put(1,25){\line(1,0){40}}
\put(21,5){\line(0,1){40}}
}
}
\begin{document}
\chapter{مقداری متن}
\section{مقداری متن دیگر}
\ptext[1-10]
\newpage
\newgeometry{total={14.3cm,21.9cm},centering,includehead=true}
\ptext[1-10]
\newpage
\restoregeometry
\ptext[1-10]
\end{document}
از اونجایی که اندازههایی که به من دادی به میلیمتر هستند من مقدار unitlength را از 1pt
به 1mm تغییر دادم:
\setlength{\unitlength}{1mm}
توضیح cropmark گوشه سمت چپ بالا
cropmark از یک خط افقی و یک خط عمودی تشکیل شده. برای اینکه cropmark در سمت چپ بالا کاغذ قرار بگیره دستورات رسم خط را داخل دستور
\AtBeginShipoutUpperLeft{...}
قرار میدهم. با این کار صفر مختصات گوشه بالای کاغذ سمت چپ است. در محیط راست به چپ مختصات مثبت افقی سمت چپ و مختصات منفی افقی سمت راست مبدا میشه. خط افقی از راست به چپ کشیده میشه و خط عمودی از پائین به بالا کشیده میشه.
خوب من میخواهم در گوشه بالای کاغذ سمت چپ یک خط افقی به طول ۴۰ میلیمتر بکشم که از سمت چپ کاغذ ۱ میلیمتر فاصله داشته باشه. از اونجایی که خط افقی از سمت راست به چپ کشیده میشه و مختصات منفی افقی در متن راست به چپ سمت راست کاغذ میشه. من باید خط افقی رو در نقطه ۴۰میلیمتر به اضافه ۱میلیمتر سمت راست شروع به کشیدن کنم. پس مختصات افقی میشه -41. تکلیف مختصات عمودی چی میشه؟ خوب وقتی من خط عمودی رو رسم کنم نصف خط عمودی باید پائین خط افقی و نصف دیگش بالای خط افقی باشه. پس روشنه که مختصات عمودی خط افقی باید ۵میلیمتر به اضافه نصف طول خط که ۲۰میلیمتر هست باشه. از اونجایی که خط عمودی از پائین به بالا رسم میشه پس باید برم پائین. بنابراین مختصات عمودی خط افقی میشه -25mm. پس کدی که خط افقی رو در گوشه چپ بالا رسم میکنه اینه:
\put(-41,-25){\line(1,0){40}}
خوب حالا میرسیم به رسم خط عمودی. خط عمودی باید از وسط خط افقی رسم بشه. پس مختصات افقیش باید نصف طول خط +۱میلیمتر باشه. بنابراین مختصات افقی میشه -21. خوب مختصات عمودی هم روشنه، شما میخواهی خطی به اندازه ۴۰میلیمتر داشته باشی که خطت تا گوشه بالای کاغذ ۵میلیمتر فاصله داشته باشه. بنابراین مختصات عمودی میشه ۵میلیمتر+۴۰ میلیمتر. پس مختصات عمودی میشه -45. پس کدی که خط عمودی رو رسم میکنه میشه
\put(-21,-45){\line(0,1){40}}
توضیح cropmark گوشه سمت راست پائین
برای اینکه cropmark در سمت راست پائین کاغذ قرار بگیره دستورات رسم خط را داخل دستور
\AtBeginShipoutLowerRight{...}
قرار میدهم. با این کار صفر مختصات گوشه سمت راست پائین هست. میخواهم خط افقی رسم کنم که از پائین ۲۵ میلیمتر فاصله داشته باشه و از گوشه سمت راست ۱ میلیمتر بنابراین این کد باید خط افقی رو رسم کنه:
\put(1,25){\line(1,0){40}}
برای خط عمودی هم میخواهم از وسط خط افقی رد بشه. بنابراین مختصات افقی ۱میلیمتر+۲۰میلیمتر هست و مختصات عمودی هم ۵میلیمتر. بنابراین کد زیر خط عمودی رسم میکنه:
\put(21,5){\line(0,1){40}}
امیدوارم تونسته باشم موضوع رو شفاف کنم.
-
میخوام که خطوط برش به اندازه ۱ میلیمتر از هر دو سمت راست و چپ و به اندازه ۵ میلیمتر از هر دو سمت بالا و پایین لبه کاغذ a4 ...
امیدوارم که منظورت رو در جواب قبل اشتباه متوجه نشده باشم. اما اگر منظورت این بود که هم خط افقی و هم خط عمودی به اندازه ۱ میلیمتر از هر دو سمت راست و چپ و به اندازه ۵ میلیمتر از هر دو سمت بالا و پایین لبه کاغذ فاصله داشته باشند کد زیر جوابگو هست؛
\documentclass[a4paper]{book}
\usepackage{ptext}
\usepackage[total={16.3cm,23.5cm},centering,includehead=true,paperwidth=20.8cm, paperheight=28cm]{geometry}
\usepackage{bidi-atbegshi}
\usepackage[preloadedlatintextfont]{xepersian}
\settextfont{XB Niloofar}
\AtBeginShipout{%
\AtBeginShipoutUpperLeft{%
\setlength{\unitlength}{1mm}
\put(-11,-5){\line(1,0){10}}
\put(-1,-15){\line(0,1){10}}
}
\AtBeginShipoutUpperRight{%
\setlength{\unitlength}{1mm}
\put(1,-5){\line(1,0){10}}
\put(1,-15){\line(0,1){10}}
}
\AtBeginShipoutLowerLeft{%
\setlength{\unitlength}{1mm}
\put(-11,5){\line(1,0){10}}
\put(-1,5){\line(0,1){10}}
}
\AtBeginShipoutLowerRight{%
\setlength{\unitlength}{1mm}
\put(1,5){\line(1,0){10}}
\put(1,5){\line(0,1){10}}
}
}
\begin{document}
\chapter{مقداری متن}
\section{مقداری متن دیگر}
\ptext[1-10]
\newpage
\newgeometry{total={14.3cm,21.9cm},centering,includehead=true}
\ptext[1-10]
\newpage
\restoregeometry
\ptext[1-10]
\end{document}
در این کد من طول خط رو به ۱۰ میلیمتر کاهش دادم تا ظاهر بهتری داشته باشه.
در کد قبلی تصور من این بود که منظورت اینه که فاصله خط افقی از سمت چپ یا راست کاغذ ۱ میلیمتر باشه و فاصلش تا بالا یا پائین کاغذ مهم نیست. همچنین فاصله خط عمودی از بالا و پائین کاغذ ۵ میلیمتر باشه و فاصلش از چپ و راست کاغذ مهم نیست.
امیدوارم تونسته باشم سوالت رو جواب بدم.
-
اگر منظورت این بود که هم خط افقی و هم خط عمودی به اندازه ۱ میلیمتر از هر دو سمت راست و چپ و به اندازه ۵ میلیمتر از هر دو سمت بالا و پایین لبه کاغذ فاصله داشته باشند کد زیر جوابگو هست؛
امیدوارم تونسته باشم سوالت رو جواب بدم.
دقیقاً منظورم همین بود. ممنون که وقت گذاشتی و کامل توضیح دادی. خیلی چیزها یاد گرفتم؛ از جمله همین محل درست قرار دادن دستور
\setlength{\unitlength}{1mm}
که من به اشتباه اون رو قبل از خط
\AtBeginShipout{%
استفاده میکردم و طبیعتاً نتیجه دلخواهم رو نمیگرفتم.
-
از جمله همین محل درست قرار دادن دستور
\setlength{\unitlength}{1mm}
که من به اشتباه اون رو قبل از خط
\AtBeginShipout{%
استفاده میکردم و طبیعتاً نتیجه دلخواهم رو نمیگرفتم.
اگر راهنمای بسته bidi-atbegshi رو نگاه کنی اونجا گفته که
\AtBeginShipoutUpperRight {⟨background material⟩}
This is a macro that puts material in the background of box \AtBeginShipoutBox.
The ⟨background material⟩ is set in an \hbox, the reference point is the upper right
corner of the output page.
The macro \AtBeginShipoutUpperRight is intended to be used in one of
the hook setting macros, such as \AtBeginShipout, \AtBeginShipoutFirst, or
\AtBeginShipoutNext.
The ⟨background material⟩ is set inside a picture environment:
\begin{picture}(0,0)
\setlength{\unitlength}{1pt}%
⟨background material⟩
\end{picture}
-
من چند سال میشه که از لاتک استفاده نکردم و دیشب هم دیروقت جواب دادم اینه که خودم رو مقداری گیج کردم و کدی که دادم خیلی سادهتر هم میشه نوشت. کافیه برای اینکه خط از چپ به راست کشیده شه (برای خطهای افقی سمتچپ) شیب منفی بهش بدی و برای اینکه خط از بالا به پائین کشیده بشه (برای خطهای عمودی بالا) شیب منفی داشته باشه. کد قبلی رو از نو با روش جدید نوشتم که بسیار ساده هست و اون محاسبه سرانگشتی هم که گفتم احتیاج نیست:
\documentclass[a4paper]{book}
\usepackage{ptext}
\usepackage[total={16.3cm,23.5cm},centering,includehead=true,paperwidth=20.8cm, paperheight=28cm]{geometry}
\usepackage{bidi-atbegshi}
\usepackage[preloadedlatintextfont]{xepersian}
\settextfont{XB Niloofar}
\AtBeginShipout{%
\AtBeginShipoutUpperLeft{%
\setlength{\unitlength}{1mm}
\put(-1,-5){\line(-1,0){10}}
\put(-1,-5){\line(0,-1){10}}
}
\AtBeginShipoutUpperRight{%
\setlength{\unitlength}{1mm}
\put(1,-5){\line(1,0){10}}
\put(1,-5){\line(0,-1){10}}
}
\AtBeginShipoutLowerLeft{%
\setlength{\unitlength}{1mm}
\put(-1,5){\line(-1,0){10}}
\put(-1,5){\line(0,1){10}}
}
\AtBeginShipoutLowerRight{%
\setlength{\unitlength}{1mm}
\put(1,5){\line(1,0){10}}
\put(1,5){\line(0,1){10}}
}
}
\begin{document}
\chapter{مقداری متن}
\section{مقداری متن دیگر}
\ptext[1-10]
\newpage
\newgeometry{total={14.3cm,21.9cm},centering,includehead=true}
\ptext[1-10]
\newpage
\restoregeometry
\ptext[1-10]
\end{document}
فکر میکنم کد به اندازه کافی خوانا باشه و احتیاجی به توضیح نداشته باشه.