graphix 的常规选项覆盖所有 includegraphics 设置

graphix 的常规选项覆盖所有 includegraphics 设置

我有从外部源编译的多 Markdown 文本,其中包含编译的每个图形的自己的设置。我希望在文档开头有一个常规设置来覆盖这些设置,以便我可以获得统一的图形布局。

例如,在整个文本中,我会生成如下块:

\begin{figure}[htb!]
   \centering
   \includegraphics[width=400pt, height=300pt]{geometry.png}
   \caption{This is a caption.}
   \label{fig:figure1}
\end{figure}

我希望width始终是width=0.75\textwidth。我最初认为(错误地)我可以通过将这些选项传递给之前的包来实现这一点begin{document}

\usepackage{graphicx}
%...
\PassOptionsToPackage{width=0.75\textwidth}{graphicx}
%...
\begin{document}
%...

答案1

包裹adjustbox包含一个命令\adjustboxset*{<optoins>},用于全局附加<options>到每个后续\adjustbox{<local options>}{<contents>}用法。使用包选项Export\adjustboxset*还会影响\includegraphics

\documentclass{article}
\usepackage[Export]{adjustbox}
\adjustboxset*{width=.3\linewidth}

\begin{document}
\includegraphics{example-image-a}

\includegraphics[width=.6\linewidth]{example-image-b}
\end{document}

输出:两个图像的宽度均为.6\linewidth


\Gin@ii第二个示例包含 的内部宏的补丁和具有类似功能的\includegraphics新用户宏:\graphicxGlobalKeys{<options>}\adjustboxset

  • 不带星号时,<options>为 every加前缀\includegraphics。带星号时,为 append <options>
  • 如果多次使用,<options>则累积至右边。
\documentclass{article}
\usepackage{xparse}
\usepackage{xpatch}
\usepackage{etoolbox}
\usepackage{graphicx}

\makeatletter
\NewDocumentCommand{\graphicxGlobalKeys}{ s +m }{%
  \IfBooleanTF{#1}{%
    \appto\Gin@opt@append{#2}%
  }{%
    \appto\Gin@opt@prefix{#2}%
  }%
}
\let\Gin@opt@prefix\@empty
\let\Gin@opt@append\@empty

\xpatchcmd\Gin@ii
  {\setkeys{Gin}{#1}}
  {%
    \expandafter\expandafter\expandafter\setkeys@three
    \expandafter\expandafter\expandafter{%
    \expandafter\Gin@opt@prefix
    \expandafter}%
    \expandafter{\Gin@opt@append}{#1}{Gin}%
  }
  {}{\fail}

% #1 = prefix, #2 = append, #3 = local, #4 = key family
\def\setkeys@three#1#2#3#4{%
  \setkeys{#4}{#1,#3,#2}%
}
\makeatother

\graphicxGlobalKeys*{width=.3\linewidth}

\begin{document}
\includegraphics{example-image-a}

\includegraphics[width=.6\linewidth]{example-image-b}
\end{document}

输出与第一个例子相同。

相关内容