فرض کنید متغیر X را در فایل .cls به صورت زیر تعریف کردهایم:
\def\X#1{\gdef\@X{#1}} (خودم معنیاش را نمیدانم)
در فایل tex این متغیر سه مقدار a و b و c به صورت \X{a}و \X{b} و \X{c} میتواند بگیرد.
میخواهم در فایل .cls بگویم اگر مقدار X مثلا a بود فلان کار را کند، اگر b بود بهمان کار را بکند و...
چه کنم؟
نقل قول از: امیرحسین شرفی در نوامبر 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 نیست. درسته؟
نقل قول از: امیرحسین شرفی در نوامبر 25, 2011, 04:10:49 بعد از ظهر
اگر این دستوری که شما تعریف کردهاید (یعنی \testX) را در فایل cls به کار برم دیگر نیازی به \makeatletter و \makeatother نیست. درسته؟
نه نیازی نیست.
نقل قول از: امیرحسین شرفی در نوامبر 25, 2011, 04:50:37 بعد از ظهر
من مثال شما رو کمی تغییر دادم و خواستم اگر X مقدارش a شد یک مربع توخالی (\square) رسم شود. ولی با خطا مواجه شدم. گویا نماد ریاضی را بین \makeatletter و \makeatother و همچنین در فایل cls نمیتوان به کار برد. خوب من به این کار نیاز دارم اکنون چه کنم؟
چه سبکی \square رو تعریف میکنه؟