带有一个 def-ed 标记和一个文字的普通 IF 结构

带有一个 def-ed 标记和一个文字的普通 IF 结构

在我继承的一些传家宝中,控制序列被用作变量,例如:

\def\accessflavor{ats}

它用于在包含的 tex 文件(称为,即image01_ats)等上生成后缀。

我想在条件结构中使用它,例如

\if\accessflavor ats
This text is only shown if the Flavor of Access is 'ats'.
\fi

我尝试了很多变体,包括各种括号、转义序列和宏,但都无法让它工作。大多数情况下,甚至没有出现错误消息。我发现的在线示例要么处理更具体的 IF,如\ifodd\ifx等,要么处理更(看似)复杂的情况,如测试两个宏是否相同。

有人能帮我解释一下用法吗?

答案1

\documentclass{article}
\def\atscomparetoken{ats}
\newcommand\domytest{%
  \ifx\atscomparetoken\accessflavor MATCHES ats\else DOES NOT MATCH ats\fi
}
\begin{document}
\def\accessflavor{ats}
\domytest

\def\accessflavor{pdq}
\domytest
\end{document}

在此处输入图片描述

答案2

如果你想保持\if...\else...\fi结构,你可以使用

\documentclass{article}
\usepackage{pdftexcmds}

\makeatletter
\newcommand\flavor[1]{%
  TT\fi
  \ifnum\pdf@strcmp{#1}{\accessflavor}=\z@
}
\makeatother

\begin{document}

\def\accessflavor{ats}

Shown

\if\flavor{ats}
This text is only shown if the Flavor of Access is `ats'.
\fi

\def\accessflavor{notats}

Not shown

\if\flavor{ats}
This text is only shown if the Flavor of Access is `ats'.
\fi

\end{document}

使用pdftexcmds是为了获得引擎独立性,因此代码可以与pdftexluatex和一起使用xetex

诀窍在于\if扩展令牌。

请注意,这可以在其他条件中使用。

在此处输入图片描述

相关内容