左页有图片,右页有正文,课本上有页码

左页有图片,右页有正文,课本上有页码

我的问题是,我想在左页面上留空白或数字,在右页面上留文字,右页面的编号为 1,2,3,4,5,而不是 1,3,5,7。

这意味着,在book- 派生类中,有正确的页面,具有奇数布局,但也有一半时间具有偶数。

这也意味着,我希望默认情况下左侧页面上的所有位置都是空白页,除非之前在上一页已经以某种方式定义了图片。


更新:

我试过了。有一点\makeatother缺失,但我马上就发现了。交替页面和插入空白页或图页似乎工作正常。但是,我有两个问题:

  • 类 ( book-derived) 有时会引入其自己的空白页。我可以对其进行调整,但更希望能够在文档过程中打开/关闭空白页例程的操作。
  • 文本页面的布局取决于页面的奇数/偶数。由于我的文本页面有奇数和偶数(这是预期的结果),因此布局现在要么是奇数要么是偶数,这不是我想要的,因为打开时它们都会出现在文档的右侧...

你知道该如何解决这个问题吗?我认为第二个问题更难……

感谢您提供的这个答案,它简单又有效,可以取得结果。

编辑 2(2011 年 12 月 19 日):我认为 Bruno Le Floch 的回答更完整,我推荐它。

答案1

我希望我理解的奇偶性是正确的。看来 OP 希望图表出现在引用它们的页面之后,并且文本页面应该是奇数页且在右侧,我称之为正面,但 Village 要求反面。我接受了 OP 的要求。另外,我认为将图表放在引用它们的页面之前更有意义,这样读者在阅读相应文本时就可以看到它们,但我没能做到这一点。

我使用 Heiko Oberdiek 的atbegshi软件包在页面输出到 pdf 文件之前(在“发货”时)捕获页面,并每次发货添加一页图表。为了保持正确的偶数/奇数布局,我增加了page每页图表的计数器(这样,\value{page}pdf 中始终是真实的页码),但我改为\thepage显示文本页数(总数减去图表)。

当我们进入 时,图形会被收集起来\sos@figures,使用 时会自动刷新\sos@rest@figures。每个添加 的图形\addfig都放置在 中\vbox\vfill它们之间有 ,这样图形就可以沿着页面的高度很好地分布。

不知何故,\shipout\vbox{...}无法简单地将\vboxpdf 发送到页面的中心,因此我将框移开\sos@top并将\sos@right其放置在看起来像左页布局的位置。欢迎提供任何更好的解决方案。

\SOStrue可以使用和(全局开关)打开或关闭该机制\SOSfalse。示例使用\lipsum,但禁用了段落分隔符,这样就\lipsum[1-10]构建了一个大段落。

\documentclass{book}
\usepackage{atbegshi}
\makeatletter
\newlength{\sos@top}
\newlength{\sos@right}
\newcounter{sos@pages}
\newif\ifSOS
\renewcommand{\thepage}{\the\numexpr\value{page}-\value{sos@pages}\relax}
\newcommand{\addfig}[1]{\g@addto@macro\sos@figures{\vbox{\centering#1}\vfill}}
\newcommand{\sos@reset@figures}
  {\gdef\sos@figures{\sos@reset@figures\vfill}}
\sos@reset@figures
\newcommand{\sos@shipout@figures}
  {%
    \begingroup
      \stepcounter{page}%
      \stepcounter{sos@pages}%
      \let\protect\relax
      \setbox\z@\vbox to\vsize{\sos@figures}%
      \let\protect\string
      \AtBeginShipoutOriginalShipout\vbox
        {\vbox to\sos@top{}\moveright\sos@right\box\z@}%
    \endgroup
  }
\AtBeginShipout{%
  \ifSOS\ifodd\c@page
    \begingroup
      \let\protect\string
      \AtBeginShipoutOriginalShipout\box\AtBeginShipoutBox
      \global\AtBegShi@Discardedtrue
      \sos@shipout@figures
    \endgroup
  \fi\fi
}%
\newcommand{\SOSshipout}{\clearpage\sos@shipout@figures}
\renewcommand{\SOStrue}{\clearpage\global\let\ifSOS\iftrue}
\renewcommand{\SOSfalse}{\clearpage\global\let\ifSOS\iffalse}
\setlength{\sos@top}{2cm}
\setlength{\sos@right}{2cm}
\makeatother

% Test example
\usepackage{booktabs,caption}
\usepackage{lipsum}
\usepackage{hyperref}
\begin{document}

\title{Hello world}
\author{Bruno Le Floch}
\maketitle

\tableofcontents
\listoffigures
\listoftables

\part{Abc}

\SOStrue
\chapter{Hello}

\addfig{\begin{tabular}{p{5cm}p{5cm}}
    \toprule
    Abc def & ghijk lmno pq \\
    \midrule
    \lipsum[1] & \lipsum[2] \\
    \bottomrule
  \end{tabular}
  \captionof{table}{\label{tab:atable}A table}}

\addfig{%
  \rule{8cm}{3cm}%
  \captionof{figure}{A figure}}

\lipsum[1-10]

\addfig{\rule{1cm}{3cm}\captionof{figure}{Another figure}}
\addfig{\rule{8cm}{3cm}\captionof{figure}{A figure}}
\addfig{\rule{1cm}{3cm}\captionof{figure}{Another figure}}

\chapter{Bye}

\makeatletter
\renewcommand{\lips@par}{ } % now \lipsum[1-10] makes one big par
\makeatother

\addfig{\rule{8cm}{3cm}\captionof{figure}{That should be figure 5.}}
\addfig{\rule{1cm}{3cm}\captionof{figure}{Perhaps the sixth}}

\lipsum[1-10]

\addfig{\rule{8cm}{3cm}\captionof{figure}{Yet another one}}
\addfig{\rule{1cm}{3cm}\captionof{figure}{One last figure for now.}}

\SOSfalse

\chapter{Back to normal}

\addfig{\rule{8cm}{3cm}\captionof{figure}{That figure won't be lost.}}

\lipsum[11-15]

\addfig{\rule{4cm}{5cm}\captionof{figure}{Nor will that one.}}

\lipsum[16-20]

\lipsum[21-30]

See Table~\ref{tab:atable}.

\SOSshipout
\SOStrue

\chapter{Figures, again}

\addfig{\rule{5cm}{2cm}\captionof{table}{Let's pretend it's a table}}

\lipsum[21-25]

\addfig{\rule{5cm}{2cm}\captionof{table}{Let's pretend it's a table}}

\lipsum[26-30]

\addfig{\rule{4cm}{1cm}\captionof{table}{Last table}}

\end{document}

编辑:不加修改的另一个好处\c@page是超链接和引用可以工作。(已添加到示例中。)

答案2

这是我在中远海运 它使用后页包跳过每两页,然后如果你用命令添加一个图形,\addfig它会在下一页输出它。它似乎工作得相当好(我自己也感到惊讶 ;-)

\documentclass[english,oneside]{book}
\usepackage{babel}
\usepackage{afterpage}

\makeatletter
\newcommand\@addfig{\relax}
\newcommand\addfig[1]{\global\long\def\@addfig{#1}}
\newcommand\@putfig{\@addfig\addfig{\relax}}
\newcommand\blankpage{%
    \null
    \vfill
    \@putfig%
    \vfill
    \thispagestyle{empty}%
    \addtocounter{page}{-1}%
    \clearpage
    \afterpage{\blankpage}}
\makeatother

\usepackage{blindtext}

\begin{document}
\afterpage{\blankpage}
\blindtext[2]

\addfig{%
    \begin{figure}
    \centering
    \fbox{\rule{0pt}{3cm}\rule{6cm}{0pt}}
    \caption{Test figure}
    \end{figure}}

\Blindtext
\Blindtext

\addfig{%
    \begin{figure}
    \centering
    \fbox{\rule{0pt}{3cm}\rule{12cm}{0pt}}
    \caption{Test figure 2}
    \end{figure}}

\Blindtext
\Blindtext
\Blindtext
\end{document} 

相关内容