
Estoy intentando redefinir el \includegraphics
comando para agregar código circundante para ocultar advertencias usando el silence
paquete.
Hasta ahora tengo el siguiente MWE:
\documentclass{article}
\usepackage{graphicx}
\usepackage{subfig}
\usepackage{silence}
\usepackage{letltxmacro}
\WarningFilter[warning_to_hide]{latex}{File}
\makeatletter
\LetLtxMacro{\includegraphicsorig}{\includegraphics}
\def\includegraphicsnowarningstar{%
\@ifnextchar[%
{\includegraphicsnowarningstar@i}
{\includegraphicsnowarningstar@j}}
\def\includegraphicsnowarning{%
\@ifnextchar[%
{\includegraphicsnowarning@i}
{\includegraphicsnowarning@j}}
\def\includegraphicsnowarningstar@i[#1]{%
\@ifnextchar[%
{\includegraphicsnowarningstar@jjj[#1]}
{\includegraphicsnowarningstar@jj[#1]}}
\def\includegraphicsnowarning@i[#1]{%
\@ifnextchar[%
{\includegraphicsnowarning@jjj[#1]}
{\includegraphicsnowarning@jj[#1]}}
\def\includegraphicsnowarningstar@j#1 {\ActivateWarningFilters[warning_to_hide]\includegraphicsorig*{#1}\DeactivateWarningFilters[warning_to_hide]}
\def\includegraphicsnowarning@j#1 {\ActivateWarningFilters[warning_to_hide]\includegraphicsorig{#1}\DeactivateWarningFilters[warning_to_hide]}
\def\includegraphicsnowarningstar@jj[#1]#2 {\ActivateWarningFilters[warning_to_hide]\includegraphicsorig*[#1]{#2}\DeactivateWarningFilters[warning_to_hide]}
\def\includegraphicsnowarning@jj[#1]#2 {\ActivateWarningFilters[warning_to_hide]\includegraphicsorig[#1]{#2}\DeactivateWarningFilters[warning_to_hide]}
\def\includegraphicsnowarningstar@jjj[#1][#2]#3{\ActivateWarningFilters[warning_to_hide]\includegraphicsorig*[#1][#2]{#3}\DeactivateWarningFilters[warning_to_hide]}
\def\includegraphicsnowarning@jjj[#1][#2]#3 {\ActivateWarningFilters[warning_to_hide]\includegraphicsorig[#1][#2]{#3}\DeactivateWarningFilters[warning_to_hide]}
\renewcommand{\includegraphics}{%
\@ifstar
{\includegraphicsnowarningstar}
{\includegraphicsnowarning}}
\makeatother
\begin{document}
\begin{figure}[t]
\centering
\includegraphics{test.jpg}
\caption{This is a working test image.}
\end{figure}
\begin{figure}[t]
\centering
\subfloat[][First sub-figure]{\includegraphics{test.jpg}}\\
\subfloat[][Second sub-figure]{\includegraphics{test.jpg}}
\caption{Why doesn't this work?}
\end{figure}
\end{document}
\includegraphics
Esto funciona bien excepto cuando se usa new en el archivo \subfloat
. Recibo los siguientes errores en \subfloat
:
! Argument of \includegraphicsnowarning@j has an extra }.
<inserted text>
\par
l.52 ...st sub-figure]{\includegraphics{test.jpg}}
\\
Runaway argument?
{test.jpg}
! Paragraph ended before \includegraphicsnowarning@j was complete.
<to be read again>
\par
l.52 ...st sub-figure]{\includegraphics{test.jpg}}
\\
¿Que me estoy perdiendo aqui?
Si hay una forma más sencilla de realizar la redefinición, sería genial.
Respuesta1
No es necesario redefinirlo, esto funciona sin errores:
\documentclass{article}
\usepackage{graphicx}
\usepackage{subfig}
\begin{document}
\begin{figure}[t]
\centering
\includegraphics[width=.7\linewidth]{example-image}
\caption{This is a working test image.}
\end{figure}
\begin{figure}[t]
\centering
\subfloat[][First sub-figure]{\includegraphics[width=.7\linewidth]{example-image}}\\
\subfloat[][Second sub-figure]{\includegraphics[width=.7\linewidth]{example-image}}
\caption{Why doesn't this work?}
\end{figure}
\end{document}
Edite después de que MWE haya editado para agregar `uso del paquete de silencio:
No se me ocurre ninguna razón por la que debas desactivar las advertencias, pero si permites \includegraphics
analizar sus argumentos y simplemente agregarlos alrededor del comando interno.
\usepackage{silence}
\makeatletter
\let\oldGin@ii\Gin@ii
\def\Gin@ii[#1]#2{%
\ActivateWarningFilters[warning_to_hide]%
\oldGin@ii[{#1}]{#2}%
\DeactivateWarningFilters[warning_to_hide]}
\makeatletter
Respuesta2
No estoy seguro de qué advertencias desea suprimir, pero la forma que eligió es bastante complicada y frágil (que es la razón del error \subfloat
).
Aquí hay una versión xparse
que hace que la verificación de argumentos opcionales sea muy fácil. También agrego una +
variante (que se especificará antes *
si necesita ambas) que no ejecuta los comandos de “activar/desactivar filtro”.
Tenga en cuenta también que, con graphicx
, no se admite la especificación del cuadro delimitador con dos argumentos opcionales, por lo que no es necesario marcar dos argumentos opcionales.
\documentclass{article}
\usepackage[margin=1cm]{geometry} % just to fit as much as possible
\pagestyle{empty} % page number is useless for the example
\usepackage{graphicx}
\usepackage{subfig}
\usepackage{silence}
\usepackage{letltxmacro}
\usepackage{xparse}
\LetLtxMacro{\includegraphicsorig}{\includegraphics}
\RenewDocumentCommand{\includegraphics}{ t+ s O{} m }{%
\IfBooleanF{#1}{\ActivateWarningFilters[warning_to_hide]}%
\IfBooleanTF{#2}{\includegraphicsorig*}{\includegraphicsorig}[#3]{#4}%
\IfBooleanF{#1}{\DeactivateWarningFilters[warning_to_hide]}%
}
\WarningFilter[warning_to_hide]{latex}{File}
\begin{document}
\begin{figure}[!htp]
\centering
\includegraphics[width=2cm]{example-image}
\caption{This is a working test image.}
\end{figure}
\begin{figure}[!htp]
\centering
\subfloat[][First sub-figure]{\includegraphics[width=2cm]{example-image}}\\
\subfloat[][Second sub-figure]{\includegraphics[width=2cm]{example-image}}
\caption{Why doesn't this work?}
\end{figure}
\begin{figure}[!htp]
\centering
\includegraphics+[width=2cm]{example-image}
\caption{This is a working test image.}
\end{figure}
\begin{figure}[!htp]
\centering
\subfloat[][First sub-figure]{\includegraphics+[width=2cm]{example-image}}\\
\subfloat[][Second sub-figure]{\includegraphics+[width=2cm]{example-image}}
\caption{Why doesn't this work?}
\end{figure}
\end{document}