flowfram:更动态的页面范围

flowfram:更动态的页面范围

我的目的是一个文档模板,它允许我在每个页面上设置各种文本框架,包括列/图形/...。为了实现这一点,我选择了flowfram因为它似乎是目前唯一一个这种类型的包。

到目前为止,该包已经完成了它的工作,但我对如何定义框架感到有些头疼。每个框架都需要在序言中设置指定的页面范围(例如 1、3-6、>8)。现在,当编写一份声明了大量框架的长文档时,如果您直接写下内容,可能不会出现任何问题。但是,当您想在文档中间的某个地方编辑和添加一些内容时,整个设计就会被破坏,最终会变得一团糟。据我所知,唯一的方法是重新定义编辑之后的所有框架。

有什么技巧可以更轻松地处理这个问题?我尝试使用自己定义的计数器,但计数序列在序言中中断(因为flowfram)。

例如:

我想\Ncolumn在 4 页左右的页面上使用 3 列设计 (...),在第二页上我需要一个完全不同的布局来包含图形等内容。在这种情况下,我认为你应该声明,\Ncolumn[1]{3}然后为第 2 页定义更复杂的内容,最后使用类似 的内容结束\Ncolumn[>3]。据我所知,无法“暂停”(保存+恢复)正在运行的设计。

现在假设所讨论的文档有大约 106 页,其中 2/3 的布局都是独特的,您需要在开头的某个地方添加大约 10 页。添加文本,然后需要重新定义所有已定义的页面。最简单的方法是只添加大约 10 的增量。

现在说实话,如果您有超过 200 个框架,这根本不是一个合适的解决方案。是否有人有解决方案可以以更动态/相对的方式设置页面范围?或者逐页覆盖布局?或者,覆盖框架会导致文本(图形)换行怎么办?这对我有很大帮助。

答案1

flowfram软件包的 1.14 版(已于 2012-11-10 上传至 CTAN,可能需要一两天时间才能通过镜像传播)现在提供了一种稍微简单一些的方式来完成此类事情。以下是一份文档的示例,该文档最初采用单列布局,然后切换为 2 列布局,但每章的第一页采用略微修改后的 2 列布局,并带有包含章节标题的动态框架。此外,在第二个示例章节中,只为包含一个图形的一页启用了单框架布局。这需要使用\clearpage以确保图形位于正确的页面上。第三个示例章节中展示了另一种方法,其中为一页启用了动态框架并在其中放置了一个静态图形。这样做的好处是不会中断文本流。也许您可以将此示例调整为您的文档。

\documentclass{book}

\usepackage[demo]{graphicx}
\usepackage{lipsum}
\usepackage{color}
\usepackage[pages=absolute]{flowfram}

% start with a single column layout
\onecolumn

% assign a label to make it easier to reference    
\setflowframe{1}{label=single}

% create a layout for the first page of each chapter
\twocolumnDtop[none]{2in}

% assign labels to these new frames
\setdynamicframe{1}{label=title}
\setflowframe{2}{label=shortleft}
\setflowframe{3}{label=shortright}

% two column layout used for most of the main matter
\twocolumn[none]

% assign labels    
\setflowframe{4}{label=left}
\setflowframe{5}{label=right}

% dynamic frame used for sample figure in chapter 3
\newdynamicframe[none]{\textwidth}{\textheight}{0pt}{0pt}[image]

\setdynamicframe*{image}{valign=c}

\title{Sample Document}
\author{A.N. Other}

\begin{document}\raggedright
\maketitle

\frontmatter
\tableofcontents
\chapter{Acknowledgements}

\lipsum[1]

% switch off the flow frame labelled 'single' on the next odd page
\flowswitchoffnextodd*{single}%
% switch on the flow frames labelled 'shortleft' and 'shortright'
% just on the next odd page
\flowswitchonnextoddonly*{shortleft,shortright}%
% switch on the dynamic frame labelled 'title' just for
% the next odd page
\dynamicswitchonnextoddonly*{title}%
% put the chapter headings in the dynamic frame labelled 'title'
\dfchaphead*{title}


\mainmatter
\chapter{Sample}

% switch on the flow frames labelled 'left' and 'right' on the next page    
\flowswitchonnext*{left,right}%
% From this point onwards, automate the switch at the start of
% each chapter (this can't be done before as \mainmatter does
% \cleardoublepage, which causes interference).
\renewcommand{\ffprechapterhook}{%
  \flowswitchoffnextoddonly*{left,right}%
  \flowswitchonnextoddonly*{shortleft,shortright}%
  \dynamicswitchonnextoddonly*{title}%
}

\lipsum

\lipsum

\chapter{Another Sample Chapter}

\lipsum[1-20]

% Switch to single column just for the next page

\flowswitchoffnextonly*{left,right}
\flowswitchonnextonly*{single}

\clearpage

\begin{figure}[p]
\centering
 \includegraphics{image1}
\caption{A Sample Figure}
\label{fig:sample}
\end{figure}

\clearpage

\lipsum[21-30]

\chapter{Here's Another Chapter}

\lipsum[1-20]

% Switch of columns for next page only and switch on dynamic frame
% called "image":

\flowswitchoffnextonly*{left,right}
\dynamicswitchonnextonly*{image}

\setdynamiccontents*{image}{%
  \begin{staticfigure}
    \centering
    \includegraphics{image2}
    \caption{Another Sample Figure}
    \label{fig:sample2}
  \end{staticfigure}
}

\lipsum[21-40]

\end{document}

编辑:此示例现在位于发行版的示例子目录中flowfram(称为sample-pages.tex)。相应的样本页.pdf显示生成的文档(草稿选项已打开,因此所有框架边界框均可见)。

相关内容