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

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

گونه‌ای از کاربرد دستود if

نویسنده امیرحسین شرفی, نوامبر 25, 2011, 03:11:35 بعد از ظهر

« قبلی - بعدی »

امیرحسین شرفی

فرض کنید متغیر X را در فایل .cls به صورت زیر تعریف کرده‌ایم:
\def\X#1{\gdef\@X{#1}}‎‎ (خودم معنی‌اش را نمی‌دانم)
در فایل tex این متغیر سه مقدار a و b و c به صورت \X{a}و \X{b} و \X{c} می‌تواند بگیرد.
می‌خواهم در فایل .cls بگویم اگر مقدار X مثلا a بود فلان کار را کند، اگر b بود بهمان کار را بکند و...
چه کنم؟
ریاضیات را جذاب‌تر بیاموزیم - www.jammathclub.com

vafa

نقل قول از: امیرحسین شرفی در نوامبر 25, 2011, 03:11:35 بعد از ظهر
فرض کنید متغیر X را در فایل .cls به صورت زیر تعریف کرده‌ایم:
\def\X#1{\gdef\@X{#1}}‎‎ (خودم معنی‌اش را نمی‌دانم)
در فایل tex این متغیر سه مقدار a و b و c به صورت \X{a}و \X{b} و \X{c} می‌تواند بگیرد.
می‌خواهم در فایل .cls بگویم اگر مقدار X مثلا a بود فلان کار را کند، اگر b بود بهمان کار را بکند و...
چه کنم؟


\documentclass{article}
\makeatletter
\def\X#1{\gdef\@X{#1}}
\newcommand{\testX}{\if\@X a I am a\else \if\@X b I am b\else\if\@X c I am c\else I am neither a, b nor c\fi\fi\fi}
\makeatother
\begin{document}
\X{a}
\testX\\
\X{b}
\testX\\
\X{c}
\testX\\
\X{f}
\testX
\end{document}


امیرحسین شرفی

نقل قول از: وفا کارن‌پهلو در نوامبر 25, 2011, 03:55:29 بعد از ظهر


\documentclass{article}
\makeatletter
\def\X#1{\gdef\@X{#1}}
\newcommand{\testX}{\if\@X a I am a\else \if\@X b I am b\else\if\@X c I am c\else I am neither a, b nor c\fi\fi\fi}
\makeatother
\begin{document}
\X{a}
\testX\\
\X{b}
\testX\\
\X{c}
\testX\\
\X{f}
\testX
\end{document}

اگر این دستوری که شما تعریف کرده‌اید (یعنی \testX) را در فایل cls به کار برم دیگر نیازی به \makeatletter و \makeatother نیست. درسته؟
ریاضیات را جذاب‌تر بیاموزیم - www.jammathclub.com

vafa

نقل قول از: امیرحسین شرفی در نوامبر 25, 2011, 04:10:49 بعد از ظهر
اگر این دستوری که شما تعریف کرده‌اید (یعنی \testX) را در فایل cls به کار برم دیگر نیازی به \makeatletter و \makeatother نیست. درسته؟
نه نیازی نیست.

vafa

نقل قول از: امیرحسین شرفی در نوامبر 25, 2011, 04:50:37 بعد از ظهر
من مثال شما رو کمی تغییر دادم و خواستم اگر X مقدارش a شد یک مربع توخالی (\square) رسم شود. ولی با خطا مواجه شدم. گویا نماد ریاضی را بین \makeatletter و \makeatother و همچنین در فایل cls نمی‌توان به کار برد. خوب من به این کار نیاز دارم اکنون چه کنم؟
چه سبکی \square رو تعریف می‌کنه؟