Error al cargar una imagen nombrada por una ltxkey

Error al cargar una imagen nombrada por una ltxkey

Soy nuevo en TeX y LaTeX y mi primer proyecto es muy ambicioso. El plan es usarlo ltxkeyspara definir entradas de base de datos para el juego de rol D&D y luego tener plantillas LaTeX para imprimir hojas de personajes, estadísticas de monstruos, etc. Acabo de comenzar y he tenido cierto éxito, pero me estoy encontrando con problema con este archivo de prueba:

\documentclass[letterpaper,landscape]{article}
\pagestyle{empty}
\usepackage[T1]{fontenc}%Use a modern font encoding
\usepackage[sfdefault]{noto}
\usepackage[margin=.5in,nohead,nofoot]{geometry}
\usepackage{graphbox}% Loads graphicx automagically.
\usepackage{anyfontsize}
\usepackage{textpos}
\usepackage[tracingkeys]{ltxkeys}

\setlength{\TPHorizModule}{1in}
\setlength{\TPVertModule}{1in}

\makeatletter  
% Monster Tent Graphic is 300 DPI with:
% * image size of (600x2250 pixels) 2in x 7.5in
% * monster title of 630x62 pixels (2.1in x .207in)
% Use a Data Key: \DnD{WUMPUS}{image}
\newcommand{\DnD}[2]
  {%
    {%
      \def\c{#1}
      \def\v{#2}
      \def\t {\csname DnD@KeyFam@\c \endcsname}%
      \csname cmd\t @\c @\v \endcsname%
    }%
  }

% Define a Creature Data Key:
% \DnDNewCreature{WUMPUS}{title="Grand Wumpus", image=..."}
\newcommand{\DnD@NewCreature}[2]%
  {%
    \ltxkeys@declarekeys[DnD@Creature]{#1}%
      { cmd/\needvalue{title}//;
        cmd/\needvalue{image}//;
      }%
    \expandafter\def\csname DnD@KeyFam@#1\endcsname{DnD@Creature}%
    \ltxkeys@setkeys[DnD@Creature]{#1}{#2}%
  }

\def\gimg {img/MM167-Goblin-BW.png}
\DnD@NewCreature{GoblinBoss}{title=Goblin Boss,image=img/MM167-Goblin-BW.png}

\begin{document}%
\def\m {GoblinBoss}%
\begin{figure}[t]%
  \begin{minipage}{.25\textwidth}%
    % \includegraphics[smash=cc,width=2in,totalheight=2.5in,keepaspectratio,angle=180,hshift=-1.25in,vshift=-2.1in]{\DnD{GoblinBoss}{image}}
    \includegraphics[smash=cc,width=2in,totalheight=2.5in,keepaspectratio,angle=180,hshift=-1.25in,vshift=-2.1in]{img/MM167-Goblin-BW.png}%
    \includegraphics[smash=cr,totalheight=7.5in,width=2.5in]{img/Monster-Tent.png}%
    \begin{textblock}{2.1}(.2,-.42)%
      \rotatebox[origin=c]{180}
        {\centerline{\fontsize{16}{16}\textbf{\DnD{GoblinBoss}{title}}}}  
    \end{textblock}
  \end{minipage}%
\end{figure}
\end{document}
\makeatother

Tal como está, el archivo representa correctamente la imagen de la tienda del monstruo y coloca correctamente la imagen y el título deseados; sin embargo, esto se debe solo a que el \includegraphicscomando usa el texto literal de la ruta al archivo para cargar, en lugar de sacarlo de un archivo ltxkey. Si se utiliza el primer comando comentado \includegraphicsen lugar del segundo, aparece un error oscuro desde dentro de includegraphics que indica que hay un archivo "Illegal parameter number in definition of \filename@base".

Si, en lugar de ltxkey, uso \gimgel que acaba de definirse como la ruta del archivo de imagen, funciona. Si intento definir \gimgque se {\DnD{GoblinBoss}{image}}ingrese el código aquí, falla nuevamente. Si simplemente imprimo, el valor \DnD{GoblinBoss}{image}parece correcto. Cualquier ayuda sería apreciada.

Respuesta1

Debe definir el comando de manera que se expanda al nombre del archivo de la imagen.

\documentclass[letterpaper,landscape]{article}
\pagestyle{empty}
\usepackage[T1]{fontenc}%Use a modern font encoding
\usepackage[sfdefault]{noto}
\usepackage[margin=.5in,nohead,nofoot]{geometry}
\usepackage{graphbox}% Loads graphicx automagically.
\usepackage{anyfontsize}
\usepackage{textpos}
\usepackage[tracingkeys]{ltxkeys}

\setlength{\TPHorizModule}{1in}
\setlength{\TPVertModule}{1in}

\makeatletter  
% Monster Tent Graphic is 300 DPI with:
% * image size of (600x2250 pixels) 2in x 7.5in
% * monster title of 630x62 pixels (2.1in x .207in)
% Use a Data Key: \DnD{WUMPUS}{image}
\newcommand{\badDnD}[2]
  {%
    {%non expandable group start
      \def\c{#1} % non expandable assignment and space token
      \def\v{#2} % non expandable assignment and space token
      \def\t {\csname DnD@KeyFam@\c \endcsname}% non expandable assignment
      \csname cmd\t @\c @\v \endcsname%
    }%non expandable group end
  }
\newcommand{\DnD}[2]{\csname cmd\csname DnD@KeyFam@#1\endcsname @#1@#2\endcsname}

% Define a Creature Data Key:
% \DnDNewCreature{WUMPUS}{title="Grand Wumpus", image=..."}
\newcommand{\DnD@NewCreature}[2]%
  {%
    \ltxkeys@declarekeys[DnD@Creature]{#1}%
      { cmd/\needvalue{title}//;
        cmd/\needvalue{image}//;
      }%
    \expandafter\def\csname DnD@KeyFam@#1\endcsname{DnD@Creature}%
    \ltxkeys@setkeys[DnD@Creature]{#1}{#2}%
  }

\def\gimg {img/MM167-Goblin-BW.png}
\DnD@NewCreature{GoblinBoss}{title=Goblin Boss,image=example-image.png}

\begin{document}%
\def\m {GoblinBoss}%
\begin{figure}[t]%
  \begin{minipage}{.25\textwidth}%
     \includegraphics[smash=cc,width=2in,totalheight=2.5in,keepaspectratio,angle=180,hshift=-1.25in,vshift=-2.1in]{\DnD{GoblinBoss}{image}}
    \includegraphics[smash=cc,width=2in,totalheight=2.5in,keepaspectratio,angle=180,hshift=-1.25in,vshift=-2.1in]{example-image-a.png}%
    \includegraphics[smash=cr,totalheight=7.5in,width=2.5in]{example-image-b.png}%
    \begin{textblock}{2.1}(.2,-.42)%
      \rotatebox[origin=c]{180}
        {\centerline{\fontsize{16}{16}\textbf{\DnD{GoblinBoss}{title}}}}  
    \end{textblock}
  \end{minipage}%
\end{figure}
\end{document}
\makeatother this is never executed

ingrese la descripción de la imagen aquí

información relacionada