
我正在嘗試重新定義\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
在\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編輯後編輯加入`silence包用法:
我想不出為什麼你應該禁用警告,但如果你確實讓\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}