Membuat figur margin lebih lebar dari margin
Saya menggunakan kelas Tufte dan saya ingin membuat figur margin yang lebih besar dari margin, membuat teks membungkusnya. Ada tip bagaimana saya bisa melakukan itu? Saya mencoba mengadaptasi @tufte@margin@floatboxuntuk mendapatkan argumen ketiga untuk lebar minipage, tapi saya gagal total. Inilah yang saya dapatkan sejauh ini:
\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}}
Untuk digunakan seperti ini
\begin{marginfigurewider}[1.2ex]{2.0\marginparwidth}%
\includegraphics[width=\linewidth]{myimage.jpg}
\caption{Some caption.}
\label{fig:somefig}
\end{marginfigurewider}
Namun ada dua masalah tersisa yang tidak dapat saya selesaikan:
- Hspace seharusnya
#3-\marginparwidth, tapi saya tidak dapat menemukan cara untuk melakukan perhitungan ini. - Teks utama tidak membungkusnya. Apakah saya membutuhkan sesuatu seperti
wrapfigini?
Memperbarui
Ini mencapai kurang lebih apa yang saya inginkan:
\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}
Masih ada dua masalah:
- Catatan samping, seperti
cite, dilapiskan di atas gambar, tidak diapungkan di bawahnya. - Saya tidak bisa membuatnya berfungsi sebagai \ lingkungan baru. Tidak ada yang ditampilkan, dan
width=\linewidthditandai sebagai bukan angka. Saya bisa hidup dengan menggunakan kode secara manual, tetapi akan lebih baik jika itu adalah lingkungan. Percobaan di bawah ini:
\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}
}
Jawaban
Saya memiliki ide cemerlang untuk menggunakan ruang kosong di margin \marginpar. Namun, wrapfigure masih akan tumpang tindih dengan material margin yang sudah ada sebelumnya. Saya tidak tahu cara untuk menunda dimulainya wrapfigure sampai margin kosong (kecuali secara manual).
Juga, saya tidak tahu mengapa \wrapfigureberhasil dan \begin{wrapfigure}tidak, tapi mungkin ada hubungannya dengan nilai-nilai lokal vs. global.
\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}
Versi tersebut akan tumpang tindih dengan bagian bawah halaman.
\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}