我正在使用 tufte-latex 布局,在双面模式下遇到了问题。我找到了一个建议的错误修复这里并将其应用于最新版本的 tufte-latexgithub
% Define Tuftian float styles (with the caption in the margin)
% original \floatc@tufteplain command
% \newcommand{\floatc@tufteplain}[2]{%
% \begin{lrbox}{\@tufte@caption@box}%
% \begin{minipage}[\floatalignment]{\marginparwidth}\hbox{}%
% \@tufte@caption@font{\@fs@cfont #1:} #2\par%
% \end{minipage}%
% \end{lrbox}%
% \smash{\hspace{\@tufte@caption@fill}\usebox{\@tufte@caption@box}}%
% }
% bugfix? - http://code.google.com/p/tufte-latex/issues/detail?id=50
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\floatc@tufteplain}[2]{%
\begin{lrbox}{\@tufte@caption@box}%
\begin{minipage}[\floatalignment]{\marginparwidth}\hbox{}%
\@tufte@caption@font{\@fs@cfont #1:} #2\par%
\end{minipage}%
\end{lrbox}%
\@tufte@checkoddpage%
\ifthenelse{\boolean{@tufte@odd@page}}%
{\gsetboolean{@tufte@float@recto}{true}\@tufte@float@debug{Detected page: [recto/odd]}}%
{\gsetboolean{@tufte@float@recto}{false}\@tufte@float@debug{Detected page: [verso/even]}}%
\ifthenelse{\NOT\boolean{@tufte@symmetric}\OR\boolean{@tufte@float@recto}}{%
% asymmetric or page is odd, so caption is on the right
\smash{\hspace{\@tufte@caption@fill}\usebox{\@tufte@caption@box}}%
\@tufte@float@debug{Caption position: [right]}%
}{% symmetric pages and page is even, so caption is on the left
\smash{\hspace{-\@tufte@overhang}\usebox{\@tufte@caption@box}}%
\@tufte@float@debug{Caption position: [left]}%
}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\fs@tufteplain}{%
\def\@fs@cfont{\@tufte@caption@font}%
\let\@fs@capt\floatc@tufteplain%
\def\@fs@pre{}%
\def\@fs@post{}%
\def\@fs@mid{}%
\let\@fs@iftopcapt\iftrue%
}
\let\fs@tufteplaintop=\fs@tufteplain
\let\floatc@tufteplaintop=\floatc@tufteplain
\newcommand\floatc@tufteruled[2]{%
{\@fs@cfont #1} #2\par%
}
\newcommand\fs@tufteruled{%
\def\@fs@cfont{\@tufte@caption@font}%
\let\@fs@capt\floatc@tufteplain%
\def\@fs@pre{\hrule height.8pt depth0pt width\textwidth \kern2pt}%
\def\@fs@post{\kern2pt\hrule width\textwidth\relax}%
\def\@fs@mid{}%
\let\@fs@iftopcapt\iftrue%
}
\newcommand\fs@tufteboxed{%
\def\@fs@cfont{}%
\let\@fs@capt\floatc@tufteplain%
\def\@fs@pre{%
\setbox\@currbox\vbox{\hbadness10000
\moveleft3.4pt\vbox{\advance\hsize by6.8pt
\hrule \hbox to\hsize{\vrule\kern3pt
\vbox{\kern3pt\box\@currbox\kern3pt}\kern3pt\vrule}\hrule}}
}%
\def\@fs@mid{\kern2pt}%
\def\@fs@post{}%
\let\@fs@iftopcapt\iftrue%
}
}{%
% Nothing to do
}
}
我注释掉了我认为相关的部分,并粘贴了我找到的代码。但是,我不确定我是否注释掉了所有相关部分,因为我的问题仍然存在。例如,在这里您可以看到标题位于边距的错误一侧:
我注意到,只有位于页面顶部的表格或图片才会出现此问题。页面其他位置的标题都没有问题。我还发现,运行确实\clearpage
会导致有问题的标题和图片或表格移动到页面的正确一侧,但对于长度相当的书,这不是我喜欢的解决问题的方法!
答案1
您可以在环境中尝试该\forceversofloat
宏figure
。它将绕过 Tufte-LaTeX 的自动检测并强制标题出现在图的左侧。还有一个\forcerectofloat
宏可以执行相反的操作。有关这些宏的使用的更多信息,请参阅Tufte-LaTeX 样本书。
答案2
自动将浮动标题置于正确一侧的方法是使用 changepage 包
\usepackage[strict]{changepage}
...
\begin{figure}
\checkoddpage \ifoddpage \forcerectofloat \else \forceversofloat \fi
etc
并根据需要进行更改。这消除了 LaTeX 的分页混乱,并且比 @godbyk 的答案更自动化。