почему каталог обрезается из моего аргумента пути в includegraphics?

почему каталог обрезается из моего аргумента пути в includegraphics?

Привет, сообщество, у меня странная проблема. Кажется, что includegraphicsне принимается весь аргумент, он всегда обрезает часть каталога!

Аргумент был изменен и объединен в другую команду перед передачей соответствующей команде. Но \typeoutаргумент показывает, что аргумент содержит правильную строку. Что случилось!?

МВЭ:

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{color}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}

\usepackage{calc}
\usepackage{xstring}

\newcommand{\setInset}[6]{%
    \expandafter\gdef\csname useInset#1\endcsname{1}%
    \expandafter\gdef\csname inset#1Color\endcsname{#2}%
    \expandafter\gdef\csname crop#1X\endcsname{#3}%
    \expandafter\gdef\csname crop#1Y\endcsname{#4}%
    \expandafter\gdef\csname crop#1W\endcsname{#5}%
    \expandafter\gdef\csname crop#1H\endcsname{#6}%
}

\newcommand{\addInset}[2]{%
    \color{#2}%
    \typeout{OMG #1}
    \fbox{\includegraphics[width=1\linewidth]{{#1}}}%
}

\makeatletter
\newcommand{\addInsets}[2][1]{%
    \filename@parse{#2}
    \StrSubstitute{\filename@base.\filename@ext}{.}{-}[\tmpName]
    \def\baseFileName{\filename@area\tmpName}
            % setting \cropfile manually works! e.g.
            % \def\cropfile{figures/lr_img_053-png-19.25x19.25+176.5+123.75}
            \def\cropfile{\baseFileName-19.25x19.25+176.5+123.75} 
            \addInset{\cropfile.png}{\insetAColor} % works if I hardcode \addInset{figures/\cropfile.png}

}
\makeatother


\begin{document}
    \begin{figure}\centering
            \setInset{A}{red}{176.5}{123.75}{19.25}{19.25}
            \addInsets{figures/lr_img_053.png}
    \end{figure}
\end{document}

Звонок \mycommand{red}{figures/figure.png}всегда выдает ошибку Not found.

решение1

\includegraphicsиспользует \filename@parseвнутренне. Поскольку вы использовали \def\cropfileвместо \edef\cropfile, \baseFileNameне раскрывается и зависит от значения \filename@area. \filename@parseвнутри \includegraphicsперезаписывает значение \filename@areaперед раскрытием аргумента, поэтому видит значение \filename@areait уже сброшенным вместо значения, назначенного вашим \filename@parsein \addInsets.

Так что вы можете исправить это, как предложил @Ian Thompson, написав

\edef\cropfile{\baseFileName-19.25x19.25+176.5+123.75}

вместо

\def\cropfile{\baseFileName-19.25x19.25+176.5+123.75}

или переименовав вашу версию \filename@area:

\newcommand{\addInsets}[2][1]{%
    \filename@parse{#2}
    \let\myFileArea\filename@area % \edef could be used here too
    \StrSubstitute{\filename@base.\filename@ext}{.}{-}[\tmpName]
    \def\baseFileName{\myFileArea\tmpName}
    ...
}

решение2

Я слишком устал, чтобы понять, что здесь происходит, но проблема, кажется, исчезает, если переключиться \defна\edef

\def\cropfile{\baseFileName-19.25x19.25+176.5+123.75} 

Связанный контент