• Welcome to پارسی‌لاتک.
 
از تاریخ ۱۳۹۳/۸/۱۴ به دلیل ارائه خدمات بهتر به سایت جدید پرسش و پاسخ مهاجرت کرده‌ایم؛ از این رو امکان عضویت و ارسال پست در تالار غیرفعال شده است. لطفاً برای پرسیدن سوال‌های خود به سایت جدید مراجعه کنید.

ورود به سایت جدید

آیا استفاده از & ‌در ماکرو اشکال دارد؟

نویسنده فرشاد ترابی, آگوست 26, 2013, 03:28:15 بعد از ظهر

« قبلی - بعدی »

فرشاد ترابی

سلام دوستان گرامی

من در فایل پیوست می‌خواهم یک ماکرو بنویسم که ستون‌های یک جدول را در دو حالت مختلف پر بکنه. اما ظاهراً وجود علامت &  در بدنه
ماکروها باعث ایجاد خطا می‌شه. مشکل از کجاست؟

سید احمد موسوی

خطای شما رو نمی دونم چیه. ولی خودم طور دیگه نوشتم. البته فکر کنم طرز نوشتن دستورات name و sname شما درست نیشت.

فرشاد ترابی

سلام

ممنون از کمک شما. ولی من اصلاً‌ متوجه نمی‌شوم که مشکل کار خودم چیه.
درضمن به نظر خودم فکر نکنم دستورهای name‌ و sname  مشکلی داشته باشند به نظر شما مشکل از چیه؟

سید احمد موسوی

به استایل پایان نامه تبریز اگر نگاه کنید زیاد از این روش استفاده شده. اگر اشتباه نکنم طریقه تعریف به این شکل بود.
\def\name#1{\gdef\@name{#1}}

فرشاد ترابی

من اصلاً دارم استیل پایان‌نامه تبریز را برای دانشگاه خواجه نصیر تنظیم می‌کنم.
تغییرات زیادی دادم و هیچ‌کجا هم مشکل نداشتم غیر از این یکی که واسم خیلی عجیب بود.
اینجوری درست می‌شه (از کار شما کپی کردم) ولی من هنوز نفهمیدم اشکال کار قبلی از کجاست.
\documentclass{article}


\usepackage{xepersian}
\settextfont{HM XNiloofar}

\def\name{فرشاد}
\def\sname{ترابی}

\def\NAME{نام: \name  & فامیل: \name }
\def\SNAME{نام: \sname  & فامیل: \sname }
\def\Col{
\ifdefined\SNAME%
\SNAME
\else
\NAME
\fi
}


\begin{document}

\begin{tabular}{|c |c|}
آ & ب\\
پ & ت\\
\Col
\end{tabular}


\end{document}


vafa

#6
نقل قول از: فرشاد ترابی در آگوست 26, 2013, 03:28:15 بعد از ظهر
سلام دوستان گرامی

من در فایل پیوست می‌خواهم یک ماکرو بنویسم که ستون‌های یک جدول را در دو حالت مختلف پر بکنه. اما ظاهراً وجود علامت &  در بدنه
ماکروها باعث ایجاد خطا می‌شه. مشکل از کجاست؟
هیچ موقع از \ifx استفاده نکن چون خیلی اوقات دستوری که داری ممکنه معنای \relax داشته باشه و کاری که با دستورات شرطی انجام می‌دهی غلط از آب دربیاد، به جاش از دستورات \if@bidi@csundef یا \if@bidi@undef استفاده کن. هر چند مشکلی که اینجا داری بی‌ارتباط با این موضوعه و مشکلت ربط به expansion داره.

فرشاد ترابی

نقل قول از: وفا کارن‌پهلو در آگوست 29, 2013, 03:48:03 بعد از ظهر
هیچ موقع از \ifx استفاده نکن چون خیلی اوقات دستوری که داری ممکنه معنای \relax داشته باشه و کاری که با دستورات شرطی انجام می‌دهی غلط از آب دربیاد، به جاش از دستورات \if@bidi@csundef یا \if@bidi@undef استفاده کن. هر چند مشکلی که اینجا داری بی‌ارتباط با این موضوعه و مشکلت ربط به expansion داره.

ممنون از راهنمایی گرانقدر شما
اگر امکان داره یک کوچولو راجع به فرق \if@bidi@undef  و \if@bidi@csundef  بدهید یا مرجعی که در آن توضیح داده شده ‌را معرفی کنید.
همچنین چرا روش من مشکل expansion‌ داره؟ خودم تجربم کمه متوجه نمی‌شوم.

ممنون

vafa

نقل قول از: فرشاد ترابی در آگوست 29, 2013, 03:58:19 بعد از ظهر
ممنون از راهنمایی گرانقدر شما
اگر امکان داره یک کوچولو راجع به فرق \if@bidi@undef  و \if@bidi@csundef  بدهید یا مرجعی که در آن توضیح داده شده ‌را معرفی کنید.
همچنین چرا روش من مشکل expansion‌ داره؟ خودم تجربم کمه متوجه نمی‌شوم.

ممنون
هر دو دستور در بسته biditools تعریف شده‌اند که جزئی از کلاف بسته bidi است. راهنمایی وجود نداره چون بسته biditools بسته کاربر نیست بسته‌ای هست که من برای برنامه‌نویسی بسته‌های bidi و xepersian استفاده کردم. نحوه استفاده دو دستور به صورت زیر هست:

\if@bidi@undef{\commandi}{do things if \commandi is undefined}{do things if \commandi is defined}
\if@bidi@csundef{commandi}{do things if \commandi is undefined}{do things if \commandi is defined}

هر دو دستور عین هم کار می‌کنند تنها تفاوتشون اینه که در آرگومان اول که یک دستور هست برای \if@bidi@csundef برای نام فرمان احتیاجی به \ نیست.