比较字符串

比较字符串

我在比较beamer主题中的字符串时遇到了一些麻烦。

我想将“techno”参数与字符串(iOS,Android,Java,...)进行比较:

if techno =="iOS" logo_path = "some_image" else if techno == "android" logo_path = "some_other_image"

等等,

我从主.tex文件中获取一个参数,并想比较它来定义要包含的图像:

\def\beamer@ALE@iOSLogo{ios.png}
\def\beamer@ALE@AndroidLogo{android_logo.jpeg}

\DeclareOptionBeamer{techno}{\def\beamer@ALE@Techno{#1}}
\ProcessOptionsBeamer

\IfStrEq{\def\beamer@ALE@Techno}{iOS}{{\def\beamer@ALE@TechnoLogo{\beamer@ALE@DiOSLogo}}{{\def\beamer@ALE@TechnoLogo{\beamer@ALE@DefaultLogo}}

然后我附上一张图形:

\includegraphics[width=1cm]{\beamer@ALE@TechnoLogo}

当我编译时,它告诉我:未找到图像“ios”(反引号+值+引号)。

我必须声明一个宏来解决这个问题:

\def\beamer@ALE@iOS{iOS}

有人可以解释一下吗?

答案1

从代码片段中很难猜出您想要比较哪些字符串,但我认为您想要比较\beamer@ALE@Techno(选项值),\beamer@ALE@iOSLogo 您可以使用

\ifx\beamer@ALE@iOSLogo\beamer@ALE@Techno
   ... ios case
\else
  ... other case
\fi

您的问题

\IfStrEq{\def\beamer@ALE@Techno}{iOS}

很难猜测这样做的目的是什么,因为它的\IfStrEq 目的是比较字符串(字符列表),但你已经给它传递了一个定义。

不过,我认为你根本不想进行比较,只需定义

\def\logoimage{mydefaultimage}
\@namedef{tech-image-ios}{\def\logoimage{ios.png}}
\@namedef{tech-image-android}{\def\logoimage{android_logo}}

\DeclareOptionBeamer{techno}{\csname tech-image-#1\endcsname}}
\ProcessOptionsBeamer

\includegraphics{\logoimage}

然后它将包含一个图像,mydefaultimage除非 techno=ios 或 techno=android,在这种情况下您会得到指定的文件,并且\@namedef可以根据需要添加更多文件。

相关内容