تالار گفتگوی پارسی‌لاتک

لاتک LATEX => گرافیک، جدول و شکل => نويسنده: ابوالفضل دیانت در نوامبر 25, 2011, 06:32:21 pm

عنوان: دو سوال در مورد تعریف محیط جدول
رسال شده توسط: ابوالفضل دیانت در نوامبر 25, 2011, 06:32:21 pm
با سلام
من سعی کردم یک محیط جدید برای جدول بنویسم به گونه ای که جدول با فونت دلخواه در متن اصلی ظاهر شود
دو سوال:
سوال اول: من یک محیط جدید به نام mytable تعریف کردم، آیا می توانم محیط table را بازنویسی کنم با دستور \renewenvironment
اما این کار را کردم و با خطا مواجه شدم، به نظر می رسد برخی از محیط ها را نمی توان بازنویسی نمود
سوال دوم: الان به طریقی که من فونت جدول را تغییر داده ام فونت caption نیز تغییر یافته ولی من می خواهم فقط فونت متن‌های جدول تغییر کند.
باتشکر
عنوان: پاسخ : دو سوال در مورد تعریف محیط جدول
رسال شده توسط: وحید دامن‌افشان در نوامبر 26, 2011, 12:39:20 am
تا اونجایی که من می‌دونم‏، همه محیط‌ها رو می‌شه دوباره تعریف کرد.
دوباره تعریف کردن ‎‎ یک محیط ‎‎(یا دستور) برحسب خود اون محیط‏ (یا دستور)، باعث ایجاد یه حلقه (‎loop‎) نامتناهی و در نتیجه باعث ایجاد خطا می‌شه. به عنوان مثال‏، استفاده از کد‌هایی مثل
‎\renewenvironment{tabular}{‎\begin{tabular} ....‎}{‎....‎‎\end{tabular}‎}‎‎
‎‎باعث ایجاد حلقه ‎‎نامتناهی و در نتیجه‏، باعث ایجاد خطا می‌شه. پس واسه جلوگیری از ایجاد این حلقه نامتناهی‏، شما باید اول‏، تعریف قدیمی اون محیط رو ‎save‎ کنین و بعد از این کار‏، اون محیط رو renewenvironment کنین.
اما در مورد مشکل‌تون:
شما بجای محیط table باید محیط ‎tabular‎ رو renewenvironment کنین. واسه این کار هم‏، ابتدا فونت مورد نظرتون‏، مثلاً ‎traffic‎ رو به صورت
‎\defpersianfont\traffic‎[Scale=.75]{XM Traffic}‎‎‎
تعریف کنین و بعدش با توجه به توضیحات بالا‏، محیط ‎tabular‎ رو به صورت زیر‏،‎ «دوباره‌تعریف» کنین.
\let\oldtabular\tabular
\let\endoldtabular\endtabular
\renewenvironment{tabular}‎‎{‎\bgroup‎‎‎‎\‎traffic‎\oldtabular‎}%
{‎\endoldtabular ‎\egroup‎‎}‎‎‎
یک نکته: دستورات \bgroup و \egroup واسه ایجاد یک ‎group‎ استفاده می‌شن که محدوده اثر دستور ‎\traffic‎ رو محدود می‌کنن. به عبارت دیگه‏، این دو دستور باعث می‌شن که دستور ‎\traffic‎ فقط داخل محیط ‎\tabular‎ اثر کنه و فونت‌های بیرون این محیط رو عوض نکنه.‎‎
‎سعی می‌کنم تا هفته بعد‏، دو سه مثال دیگه در مورد دوباره تعریف کردن یک محیط یا دستور‏، توی تالار بذارم.
-------------------------------------
منبع: درباره دوباره تعریف کردن یه محیط‏، خودم قبلاً توی یه فروم انگلیسی پرسیده بودم. اما متاسفانه الان‏، لینکشو پیدا نکردم.