我正在使用 Tufte 类,我想创建一个大于边距的边距图形,使文本环绕它。有什么技巧可以做到这一点?我尝试调整@tufte@margin@floatbox
以获取 minipage 宽度的第三个参数,但失败了。这是我目前得到的结果:
\newsavebox{\myfloatboxwider}
\newenvironment{myfloatwider}[3][-1.2ex]%
{\FloatBarrier% process all floats before this point so the figure/table numbers stay in order.
\begin{lrbox}{\myfloatboxwider}%
\hspace*{-\marginparwidth}%
\begin{minipage}{#3}%
\@tufte@caption@font%
\def\@captype{#2}%
\hbox{}\vspace*{#1}%
\@tufte@caption@justification%
\@tufte@margin@par%
\noindent%
}
{\end{minipage}%
\end{lrbox}%
\marginpar{\usebox{\myfloatboxwider}}%
}
\newenvironment{marginfigurewider}[2][-1.2ex]%
{\begin{myfloatwider}[#1]{figure}{#2}}
{\end{myfloatwider}}
像这样使用
\begin{marginfigurewider}[1.2ex]{2.0\marginparwidth}%
\includegraphics[width=\linewidth]{myimage.jpg}
\caption{Some caption.}
\label{fig:somefig}
\end{marginfigurewider}
但是还有两个问题我无法解决:
- hspace 实际上应该是
#3-\marginparwidth
,但我找不到进行这种计算的方法。 - 正文没有环绕它。我需要类似的东西吗
wrapfig
?
更新
这或多或少实现了我想要的:
\setlength\columnsep{\marginparsep}
\begin{wrapfigure}{O}[\dimexpr \marginparwidth+\marginparsep]{2.0\marginparwidth}
\FloatBarrier%
\vspace{-0.7\baselineskip}
\begin{minipage}[b]{2.0\marginparwidth}
\includegraphics[width=\linewidth]{myimage.jpg}
\caption{Some caption.}
\label{fig:somefig}
\end{minipage}
\end{wrapfigure}
还存在两个问题:
- 诸如此类的旁注
cite
会覆盖在图像上,而不是浮动在图像下方。 - 我无法让它作为 \newenvironment 工作。什么都没有显示,并且
width=\linewidth
被标记为不是数字。我可以手动使用代码,但如果它是一个环境就更好了。尝试如下:
\newenvironment{marginfigurewide}[1]%
{\FloatBarrier%
\setlength\columnsep{\marginparsep}%
\begin{wrapfigure}{O}[\dimexpr \marginparwidth+\marginparsep]{2.0\marginparwidth}%
\vspace{-0.7\baselineskip}%
\begin{minipage}[b]{2.0\marginparwidth}
}
{\end{minipage}%
\end{wrapfigure}
}
答案1
我有一个好主意,使用 保留页边空白空间 \marginpar
。但是,wrapfigure 仍会与任何预先存在的页边材料重叠。我不知道有什么方法可以延迟 wrapfigure 的开始,直到页边空白(手动除外)。
另外,我不知道为什么\wrapfigure
有效,为什么\begin{wrapfigure}
无效,但这可能与本地价值观和全局价值观有关。
\documentclass{tufte-book}
\usepackage{graphicx}
\usepackage{wrapfig}
\usepackage{marginfix}
\usepackage{lipsum}
\usepackage{showframe}
\newsavebox{\marginbox}
\makeatletter
\newenvironment{marginfigurewide}[1]% #1 = width
{\begin{lrbox}{\marginbox}%
\def\@captype{figure}%
\begin{minipage}{#1}}%
{\end{minipage}\end{lrbox}%
%\setlength{\intextsep}{0pt}%
\setlength{\columnsep}{\marginparsep}%
\wrapfigure{r}[\dimexpr \marginparwidth+\marginparsep]{\wd\marginbox}
\usebox\marginbox
\endwrapfigure
\marginpar{\rule{0pt}{\dimexpr \ht\marginbox+\dp\marginbox+2\intextsep}}}% reserve space in margin
\makeatother
\begin{document}
\begin{marginfigurewide}{2\marginparwidth}
\includegraphics[width=\linewidth]{example-image}
\caption{Some caption.}
\label{fig:somefig}
\end{marginfigurewide}
test\sidenote{\LipsumPar{2}}
\LipsumPar{1}
\end{document}
该版本将与页面底部重叠。
\documentclass[twoside]{tufte-book}
\usepackage{graphicx}
\usepackage{wrapfig}
\usepackage{marginfix}
\usepackage{lipsum}
\usepackage{showframe}
\newsavebox{\marginbox}
\makeatletter
\newenvironment{marginfigurewide}[1]% #1 = width
{\begin{lrbox}{\marginbox}%
\def\@captype{figure}%
\begin{minipage}{#1}}%
{\end{minipage}\end{lrbox}%
\setlength{\columnsep}{\marginparsep}%
\dimen0=\dimexpr \pagegoal-\pagetotal-\ht\strutbox\relax% remaining space on page
\dimen1=\dimexpr \ht\marginbox+\dp\marginbox+\intextsep\relax% size of figure
\ifdim\dimen1<\dimen0% fits page
\wrapfigure{r}[\dimexpr \marginparwidth+\marginparsep]{\wd\marginbox}
\usebox\marginbox
\endwrapfigure
\marginpar{\rule{0pt}{\dimexpr \ht\marginbox+\dp\marginbox+2\intextsep}}% reserve space in margin
\else% overlaps bottom
\wrapfigure{r}[\dimexpr \marginparwidth+\marginparsep]{\wd\marginbox}
\raisebox{\dimexpr \dimen0-\intextsep-\ht\marginbox}[\dimexpr \dimen0-2\intextsep][0pt]{\usebox\marginbox}%
\endwrapfigure
\marginpar{\rule{0pt}{\dimen0}}%
\fi}
\makeatother
\begin{document}
\begin{marginfigurewide}{2\marginparwidth}
\includegraphics[width=\linewidth]{example-image}
\caption{Some caption.}
\label{fig:somefig}
\end{marginfigurewide}
Place note here.\sidenote{\LipsumPar{2}}
%\LipsumPar{1}
\lipsum[1-2]
\begin{marginfigurewide}{2\marginparwidth}
\includegraphics[width=\linewidth]{example-image}
\caption{Some caption.}
\label{fig:somefig}
\end{marginfigurewide}
Place note here.\sidenote{\LipsumPar{2}}
\lipsum[3-4]
\end{document}