سلام دوستان گرامی
من در فایل پیوست میخواهم یک ماکرو بنویسم که ستونهای یک جدول را در دو حالت مختلف پر بکنه. اما ظاهراً وجود علامت & در بدنه
ماکروها باعث ایجاد خطا میشه. مشکل از کجاست؟
خطای شما رو نمی دونم چیه. ولی خودم طور دیگه نوشتم. البته فکر کنم طرز نوشتن دستورات 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}
این لینک را ببینید.
http://tex.stackexchange.com/questions/31652/what-is-the-difference-between-ifx-somecommand-undefined-and-ifdefined-somecom (http://tex.stackexchange.com/questions/31652/what-is-the-difference-between-ifx-somecommand-undefined-and-ifdefined-somecom)
نقل قول از: فرشاد ترابی در آگوست 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 داره؟ خودم تجربم کمه متوجه نمیشوم.
ممنون
نقل قول از: فرشاد ترابی در آگوست 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 برای نام فرمان احتیاجی به \ نیست.