诀窍表明这里因为包含大于\textwidth
(带有\makebox
)的图像可以与文档类article
或带有一起使用,但oneside book
不适用于带有twoside book
,即使我设置nomarginpar
和\marginparsep
= 0pt,缺少什么?
\documentclass{book}
\usepackage[nomarginpar]{geometry}
\setlength{\marginparsep}{0pt}
\usepackage{graphicx}
\usepackage{showframe}
\begin{document}
\begin{figure}%
\makebox[\textwidth][c]{\includegraphics[width=\paperwidth]{example-image}}%
\caption{My caption}
\end{figure}
\end{document}
PS = 我知道我可以使用adjustbox
,我只想知道为什么这个技巧对twoside book
课堂不起作用。
答案1
正反页的边距通常不对称,因此您需要考虑正确的边距(假设已加载包)。检查我们是在偶数页还是奇数\Gm@lmargin
页\Gm@rmargin
geometry
并不简单,但使用例如changepage
包我们可以做到
\documentclass{book}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage{showframe}
\usepackage[strict]{changepage}
\newcommand*{\foo}[1]{% choose a better name :-)
\checkoddpage
\makebox[\textwidth][l]{\kern-\csname Gm@\ifoddpage l\else r\fi margin\endcsname\includegraphics[width=\paperwidth]{#1}}%
}
\begin{document}
\begin{figure}
\foo{example-image-a}
\caption{On a recto page}
\end{figure}
\begin{figure}
\foo{example-image-b}
\caption{On a verso page}
\end{figure}
\end{document}
请注意,这基本上使用标签,因此通常需要进行几次编译才能工作。或者,您可以使用包scrextend
(来自 KoMa 包)
\usepackage{scrextend}
\makeatletter
\newcommand*{\foo}[1]{%
\makebox[\textwidth][l]{\ifthispageodd{\kern-\Gm@lmargin}{\kern-\Gm@rmargin}\includegraphics[width=\paperwidth]{#1}}%
}
\makeatother
答案2
正如我在评论中提到的那样:使用\adjustwidth
中定义的宏changeapage
(它也是memoir
文档类的一部分)很简单:
\documentclass[twodside]{book}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage[strict]{changepage}
%---------------- Show page layout. Don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\begin{document}
\begin{figure}
\begin{adjustwidth*}{-\marginparwidth}{-\marginparwidth}
\begin{minipage}{\linewidth}
\includegraphics[width=\linewidth]{example-image}%
\caption{My caption}
\end{minipage}
\end{adjustwidth*}
\end{figure}
\begin{figure}%
\begin{adjustwidth*}{-\marginparwidth}{-\marginparwidth}
\begin{minipage}{\linewidth}
\includegraphics[width=\linewidth]{example-image}%
\caption{My caption}
\end{minipage}
\end{adjustwidth*}
\end{figure}
\end{document}
注意:的第二个参数adjustwidth*
是外边距的宽度(通常等于marginparsep
+ \marginparidth
)