我在比较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
可以根据需要添加更多文件。