
Привет, сообщество, у меня странная проблема. Кажется, что 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@area
it уже сброшенным вместо значения, назначенного вашим \filename@parse
in \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}