创建用于显示文件列表中图片的命令

创建用于显示文件列表中图片的命令

我的文档中有很多图片需要展示。我的想法是为每张图片创建一个命令。所以我尝试使用foreach命令(可能不是最好的选择...)。

我将文件名和我想要的名称存储newcommand在一个列表中:

\newcommand{\listPartDesign}{%
BOV_Esquisse/BOVEsquisse,%
Esquisse/Esquisse,%
BOV_Web/BOVWeb%
}

我使用foreach这些元素进行循环:

\foreach \fileCATIA/\nameCATIA in \listPartDesign {
\createCMDS{\fileCATIA}{\nameCATIA}
}

\createCMDS创建命令。我试过这个(\taille定义如下\def\taille{1em}):

\newcommand\createCMDS[2]{%
\expandafter\newcommand\csname #2\endcsname{\includegraphics[width=\taille]{BD_CATIA/PartDesign/#1.png}}} 

我把图片放在 中./BD_CATIA/PartDesign。想法是使用 来调用图片,例如在本例中\BOVWeb{}。LaTeX 说:

Undefined control sequence.
l.52         \BOVWeb

我认为这是由于一些扩展问题造成的,但我找不到任何解决方案。也许可以使用另一种解决方案\pgfkeys,但我对此不太熟悉。

答案1

\foreach这是围绕每个循环的常见问题,其中\begingroup\endgroup。因此,\newcommand循环一结束,您的 就会丢失。

您必须使用\gdef,但实际上\xdef需要扩展本地循环变量。如果您担心重新定义现有命令,则可以使用\@ifdefinable

\makeatletter
\newcommand\createCMDS[2]{%
  \expandafter\@ifdefinable\csname #2\endcsname{%
    \expandafter\xdef\csname #2\endcsname{%
      \noexpand\includegraphics[width=\noexpand\taille]{BD_CATIA/PartDesign/#1.png}%
    }%
  }%
}
\makeatother

一个不同的策略xparse

\documentclass{article}
\usepackage{xparse}

\newcommand{\subscripttoken}{_} % small kludge

\ExplSyntaxOn

\NewDocumentCommand{\newlist}{mm}
 {
  \clist_gclear_new:c { g_guuk_list_#1_clist }
  \clist_gset:cn { g_guuk_list_#1_clist } { #2 }
 }

\NewDocumentCommand{\createcommandsfrom}{m}
 {
  \clist_map_inline:cn { g_guuk_list_#1_clist } { \createcommand{##1} }
 }

\NewDocumentCommand{\createcommand}{m}
 {
  \tl_set:Nn \l_tmpa_tl { #1 }
  \tl_remove_all:NV \l_tmpa_tl \subscripttoken
  \cs_new_protected:cpn { \l_tmpa_tl }
   {
    \includegraphics[width=\taille]{BD_CATIA/PartDesign/#1.png}
   }
 }

\cs_generate_variant:Nn \tl_remove_all:Nn { NV }

\ExplSyntaxOff

\newlist{PartDesign}{
  BOV_Esquisse,
  Esquisse,
  BOV_Web
}

\createcommandsfrom{PartDesign}

这样,您不需要手动删除_BOV_Esquisse宏名称\BOVEsquisse将自动被定义。

相关内容