我的问题是,我想在左页面上留空白或数字,在右页面上留文字,右页面的编号为 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{...}
无法简单地将\vbox
pdf 发送到页面的中心,因此我将框移开\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}