if 语句问题

if 语句问题

我遇到了一些代码问题,需要一些帮助。我已经使用这个实现很长时间了,之前没有遇到过任何问题。

这是我存储所有变量的方式

\newcommand{\@srulesI}{}
\newcommand{\@srulesII}{}
\newcommand{\srules}[2]{
    \renewcommand\@srulesI{#1}
    \renewcommand\@srulesII{#2}}%%%%%

这是它的逻辑。

\if\@srulesII\@emptymacro
\else
    \begin{minipage}{\linewidth}
        \raggedright
        {\bfseries \rule{0em}{1.5em}\@srulesI}

        \@srulesII
    \end{minipage}
\fi

这些代码有效

\srules{}{}%%%%%
\srules{}{asdf}%%%%%
\srules{asdf}{}%%%%%
\srules{asdf}{asdf}%%%%%
\srules{asdf}{asdf\rule{0.5in}{0.5in}}%%%%%

这段代码不起作用,恰好是我需要的。

\srules{asdf}{\rule{0.5in}{0.5in}}%%%%%

它给出了一个错误“不完整 \if;第 40 行后的所有文本都被忽略。”

有人知道为什么吗?我不知道为什么这\rule会让编译器不适应。

第二个问题。我的做法真的是声明和存储变量的最佳方式吗?因为我有大约 50 个变量,而且我的.cls文件越来越大。

答案1

对于宏观比较,使用\ifx,而不是\if

在此处输入图片描述

\documentclass{article}

\makeatletter
\newcommand{\@srulesI}{}
\newcommand{\@srulesII}{}
\newcommand{\srules}[2]{
  \renewcommand\@srulesI{#1}
  \renewcommand\@srulesII{#2}}%%%%%
\newcommand{\@emptymacro}{}
\makeatother

\begin{document}

\srules{asdf}{\rule{0.5in}{0.5in}}%%%%%
\makeatletter
\ifx\@srulesII\@emptymacro
\else
  \begin{minipage}{\linewidth}
    \raggedright
    {\bfseries \rule{0em}{1.5em}\@srulesI}

    \@srulesII
  \end{minipage}
\fi
\makeatother

\end{document}

回答你的第二个问题,这实际上取决于你的用户界面。请注意,宏的参数限制为 9 个,尽管可以增加. 在这种情况下,通常首选键值接口。

相关内容