我有从外部源编译的多 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}
输出与第一个例子相同。