tufte-latex 页面顶部的标题有问题

tufte-latex 页面顶部的标题有问题

我正在使用 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

您可以在环境中尝试该\forceversofloatfigure。它将绕过 Tufte-LaTeX 的自动检测并强制标题出现在图的左侧。还有一个\forcerectofloat宏可以执行相反的操作。有关这些宏的使用的更多信息,请参阅Tufte-LaTeX 样本书

答案2

自动将浮动标题置于正确一侧的方法是使用 changepage 包

\usepackage[strict]{changepage}
...
\begin{figure}
\checkoddpage \ifoddpage \forcerectofloat \else \forceversofloat \fi
etc

并根据需要进行更改。这消除了 LaTeX 的分页混乱,并且比 @godbyk 的答案更自动化。

相关内容