
\includegraphics
패키지 를 이용하여 경고를 숨기기 위해 주변 코드를 추가하는 명령을 다시 정의하려고 합니다 silence
.
지금까지 다음과 같은 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
에서 new가 사용되는 경우를 제외하고는 잘 작동합니다 \subfloat
. 다음과 같은 오류가 발생합니다 \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}}
\\
내가 여기서 무엇을 놓치고 있는 걸까요?
재정의를 수행하는 더 간단한 방법이 있다면 좋을 것입니다.
답변1
재정의할 필요가 없습니다. 이는 오류 없이 작동합니다.
\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}
'자동 패키지 사용'을 추가하기 위해 MWE를 편집한 후 편집:
경고를 비활성화해야 할 이유가 없다고 생각할 수 있지만 \includegraphics
인수를 구문 분석하고 내부 명령 주위에 추가하면 됩니다.
\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
답변2
어떤 경고를 억제하고 싶은지 잘 모르겠지만 선택한 방식은 매우 복잡하고 취약합니다(이것이 에서 실패하는 이유입니다 \subfloat
).
xparse
선택적 인수를 매우 쉽게 확인할 수 있는 버전이 있습니다 . 또한 "필터 활성화/비활성화" 명령을 실행하지 않는 변형(둘 다 필요한 경우 +
이전에 지정 )을 추가합니다.*
또한 에서는 graphicx
두 개의 선택적 인수로 경계 상자를 지정하는 것이 지원되지 않으므로 두 개의 선택적 인수를 확인할 필요가 없습니다.
\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}