LaTeX技巧901:驯化LaTeX页面布局

通常,这些参数由宏包或模板(由出版商提供)命令设置。然而,当你需要更好地控制类型比较特殊的文档时,你可能想知道“幕后”是怎么回事。

引言

当使用LaTeX进行书刊版面设计(book layout)时,即纸张大小(paper size)、页面大小(book page size,即装订后的实际尺寸)和页边距(margins),你是否感到非常吃力?即使有宏包协助,比如出色的geometry宏包,此事也相当麻烦。当出版物的左手页(left-hand  page)和右手页(right-hand page)的页边空白不同时,(La)TeX要用上一打(a dozen)值来确定布局:

\hoffset, \voffset, \oddsidemargin, \topmargin, \headheight, \headsep, \textheight,

\textwidth, \marginparsep, \marginparwidth, \footskip

我们的目标是什么?

本文主题以及我们提供相关资源的目的: 1.实现某种布局规范,比如来自书刊设计师或不支持LaTeX的出版商,或者遵循特定的印刷规范。 2.把设计规范中传统书刊的规格(纸张大小,实际尺寸和页边空边)转换成LaTeX参数以实现设计师的布局需求。 3.使页面在纸张的垂直方向和水平方向均居中,即LaTeX所生成PDF页面的中心。想要选择任意的纸张大小,而非受限于标准(A4, US Letter等)。 在本文,我们将探讨LaTeX页面模型与设计印刷业所用传统模型之间的关系。通过一组谷歌幻灯片(包含详细的页面布局图),我们逐步展示了如何建立一些简单方程,使之能够表示LaTeX布局模型与书刊设计师或印刷公司的传统规格之间的关系。 借助那些方程,如果不觉得麻烦的话,你可以手动算出各个LaTeX参数的值,就得到了你想要的书刊布局。当然,你还有别的选择,那就是使用我们基于LaTeX的book.cls开发的新模板——LuaLaTeX-based template,它能够利用那些方程提供可视化的页面向导 和标尺,帮助你预览版芯(text area)和页边距。 在使用Overleaf模板时,你可以通过预览功能,快速决定出你更喜欢哪一种书籍尺寸(book sizes ),然后再尝试页边距的设置。此外,Overleaf 模板还能显示文本边界(text boundary),它由\marginparsep和\marginparwidth(非0值)2个命令控制。

快速提示:如何设置纸张大小(paper size)?

LuaTeX、XeTeX和pdfTeX都提供了如下2个命令,用以控制生成PDF文档的纸张大小。\pdfpagewidth \pdfpageheight 现已知道这2个命令表示纸张大小,我们可以通过一幅图解说明我们要做什么:注意:ΔX和ΔY控制页面( book page)的位置,使之位于纸面(paper area)中心,详情参见谷歌幻灯片。从图解可以看出: ΔX=1/2 (\pdfpagewidth  -  book-page-width) ΔY=1/2 (\pdfpageheight  -  book-page-height) 上图也在谷歌幻灯片里,要想建立页面布局方程,必须从它开始。

题外话:LuaTeX

LuaTeX是一个非常强大而灵活的TeX引擎,故而我们选择用它来运行Overleaf 模板。当前(本文写作之际),Overleaf使用了(通过TeX Live)LuaTeX  v0.95,它包含发布初期对核心引擎所做的改动。资深读者可能知道,那些改动影响到生成PDF文件的控制命令。严格来说,LuaTeX不再直接支持\pdfpagewidth或\ pdfpageheight,而今采用2个\pagewidth和\pageheight 原语,通过\let\pdfpagewidth\pagewidth 和\let\pdfpageheight\pageheight实现向后兼容。感兴趣的读者,如果想了解更多,请参见LaTeX News, Issue 24, February 2016(https://www.latex-project.org/news/latex2e-news/ltnews24.pdf) 以及 the official LuaTeX documentation(http://www.luatex.org/documentation.html)。

本文相关资源

在Overleaf上,我们喜欢尝试新想法,于是此处加入一些对你可能有益的资源:

  • 两组谷歌幻灯片:其内容相同,只是一个带动画而另一个不带(有些人更喜欢不带任何动画的幻灯片)。你还可以下载PDF格式的幻灯片。它们非常简明地介绍了书籍页面布局的基础知识,探讨了LaTeX的页面模型与传统设计印刷模型的关系。最后几帧幻灯片展示了如何建立简单方程,好把传统规格(页面宽度/高度和页边距)转换成意义等同的LaTeX参数值,从而在LaTeX中得到你的书籍布局。

  • LaTeX模板:我们想随本文发布一个新模板,它基于LaTeX的cls而来,由LuaTeX引擎运行,并且能够在页面上显示可视化向导 和标尺,帮助你实现想要的布局。如果有足够的兴趣,倘若时间允许,我们会发布新版。

  • 页面布局图解:谷歌幻灯片中有详细的页面布局图,通过它可以建立方程,从而得到各个LaTeX参数的值。如果你想进行深入的研究,我们有高分辨率的(矢量)PDF版幻灯片供你下载。

如何使用本文资源

本文的读者们可能有丰富的使用经验,所以我们提供了一系列资源,大家可以根据各自情况进行选择。我们期望这些资源是有用的,能够满足Overleaf上LaTeX社区的需要。 这些资源没有定义先后次序,但是我们建议这样使用: 1.观看谷歌幻灯片; 2.(可选)下载并研究页面布局图; 3.尝试LaTeX模板。 目前LuaTeX的应用不如其他TeX引擎(pdfTeX和xetex所)广泛,我们了解这个现状,所以在设计Overleaf模板时,采用了这样的方法,即每当你成功地排版了一篇文档,它都能生成一个文本文件(mypagesetup.tex)。mypagesetup.tex文件中 有关于页面布局的所有LaTeX参数的设置。你可以下载Overleaf 模板的ZIP文件,提取出mypagesetup.tex,然后把它包含进另一个项目,这样一来,使用pdfLaTeX或XeLaTeX也可以得到与LuaTeX相同的页面布局。这里是 pdfLaTeX/XeLaTeX和LuaLaTeX的例子。(文内链接)

步骤1:观看或下载(PDF格式)谷歌幻灯片

最后一帧幻灯片(如下图所示)汇集了演示过程中呈现的方程。为了方便读者,我们提供了3种观看幻灯片的方式: 1.带动画的幻灯片; 2.无动画的幻灯片; 3.可脱机观看或打印的PDF格式幻灯片。

步骤2(可选):下载并研究页面布局图

如果你想更详细地了解页面布局图,本文结尾处给出了下载PDF版谷歌幻灯片的链接,那里有双页(面向页面)版的。

步骤3:尝试LaTeX模板

此模板非常容易上手,你需要熟悉6个命令(如下)。如果使用模板,你就不需要观看幻灯片或着查看页面布局图。希望或者需要更深入地了解布局方程的读者,可以去查看幻灯片,其他人直接使用模板即可。你不用理解方程本身或去关心其中细节,因为它们会由模板代码实现。

Overleaf模板:它是做什么的?

总的来说,它提供以下功能:

  • 通过纸张宽度/高度、页面宽度/高度和4个页边距(顶部,底部,内部和外部)定义页面布局;

  • 用你输入的规则计算相应的LaTeX参数值,实现你想要的页面布局;

  • 所有LaTeX参数的设置都保存在tex文件中,可通过下载模板项目得到;

  • 在排版页面上显示向导和标尺(刻度标记为mm(毫米)),提供可视化反馈,允许实时预览布局效果,即快速查看页面宽度/高度、文本宽度/高度和各个页边距。

请注意,模板的目的并非要生成你的实际书籍,它旨在:

  • 提供一个可视化工具,方便你对页面尺寸和页边距进行各种尝试性设置,这种允许不断尝试且能够实时预览的功能帮助你快速决定更喜欢哪个;

  • 生成tex文件,方便你留作己用。

下面的截图展示了模板如何为页面添加标尺和边界。请注意,如果你为\marginparwidth设置了非0值,页边空白就会显示出来。

页面布局参数和方程

如果看过谷歌幻灯片中的方程,你会发现里面有许多变量。显然,使用方程的方式也变得很多,这取决于哪些参数你想通过方程计算而哪些你要自己设置。我们来看谷歌幻灯片中的一幅图解(和相应的方程): 很显然,你需要决定计算哪些参数,以及要设置哪些参数。我们为Overleaf模板选择的方式如下: 1.我们把\hoffset和\voffset设置为0。 2.你来输入以下控制页面宽度的LaTeX参数值:

\marginparsep

\marginparwidth

3.你再来输入以下控制页面高度的LaTeX参数值:

\headheight

\headsep

\footskip

4.你还需要输入纸张大小、页面宽度和高度以及4个页边距的值。注意:所有值必须以mm(毫米)为单位。 5.Overleaf template 模板会自动计算下列LaTeX参数的值以实现页面布局(以你选择的纸张大小为中心):

\evensidemargin, \oddsidemargin, \textwidth, \textheightand \topmargin

6.模板把所有参数值(包括用户提供的以及模板计算的)写进mypagesetup.tex文件中,如图所示:

\pdfpagewidth=250mm

\pdfpageheight=350mm

\setlength{\hoffset}{0mm}

\setlength{\voffset}{0mm}

\setlength{\evensidemargin}{65.6mm}

\setlength{\oddsidemargin}{44.6mm}

\setlength{\headheight}{18mm}

\setlength{\headsep}{5mm}

\setlength{\footskip}{10mm}

\setlength{\topmargin}{29.6mm}

\setlength{\textwidth}{89mm}

\setlength{\textheight}{200mm}

\setlength{\marginparsep}{3mm}

\setlength{\marginparwidth}{25mm}

7.模板提供了\showvisuals命令,用来显示可视化向导 ,它可以帮助你查看页面布局;\showvalues命令可以列出当前mypagesetup.tex文件的内容;\showhelp命令则用来简要地排列模板命令及其描述。

如何使用Overleaf模板

你需要用到3个简单的命令,其输入值的单位为mm(毫米)。另外2个命令(\showvisuals和\showvalues)为你提供布局预览功能。还有1个\showhelp命令用来调出一些简要的文档资料。

模板命令及其参数

对于每个命令,我们会指出它是[可选的]或[必需的]。如果是[必需的],你就要设置所有受命令控制的参数值,否则模板无法完成布局计算。 1.\setmarginpars#1#2[optional] 此命令用于设置\marginparsep 和\marginparwidth的值。除非要创建页边空白,一般情况你用不到这个命令。\marginparsep 和\marginparwidth的默认值为0。注意,只有当\marginparwidth不为0时,页边空白的边界才能通过\showvisuals显示出来。

#1=value for \marginparsep (in mm)
#2=value for \marginparwidth (in mm)

Example: \setmarginpars{5}{20}

2.\setheadfoot#1#2#3[required] 此命令用于设置3个LaTeX参数值,它们是计算其余参数值之必需。

#1=value for headheight (in mm) 
#2=value for headsep in mm (in mm)
#3=value for footskip in mm (in mm)

Example: \setheadfoot{18}{5}{10}

3.\setpage#1...#8[required] 此命令最为重要,你需要用它输入所有决定布局效果的关键尺寸。不过,这个命令只有在你使用了[optional]\setmarginpars和[required]\setheadfoot之后才能用。

#1=value for paper width (in mm)
#2=value for paper height (in mm) 
#3=value for book page width (in mm) 
#4=value for book page height(in mm), 
#5=value for book outer margin (in mm) 
#6=value for book inner margin (in mm)
#7=value for book top margin (in mm)
#8=value for book bottom margin (in mm)

Example: \setpage{250}{350}{160}{250}{18}{25}{5}{12}

4.\showvisuals[optional] 此命令不带任何参数。它用于开启显示可视化标尺和向导功能,以帮助你查看页面布局。要关闭该功能,把命令注释掉即可。

\showvisuals %all elements are displayed

To switch it off just comment it out: 

%\showvisuals

5.\showvalues[optional] 此命令不带任何参数。它列出mypagesetup.tex文件的内容,即实现页面布局的LaTeX代码,这是另一种查看页面布局的方法。要关闭该功能,把命令注释掉即可。

\showvalues %Lists the content of "mypagesetup.tex"

To switch it off just comment it out: 

%\showvalues

6.\showhelp[optional] 该命令不带任何参数。它简要地列出了模板命令及其描述。

\showhelp %Typeset some brief documentation

To switch it off just comment it out: 

%\showhelp

最小操作实例

下面是一个关于Overleaf模板项目的简单实例:

\documentclass[twoside]{book} % You need to use this...
\usepackage{pagevisuals}% Overleaf's template
\usepackage{fancyhdr} % To add some headers/footers
\usepackage{lipsum} % For generating some sample text
\setmarginpars{5}{25} 
\setheadfoot{10}{5}{10}
\setpage{250}{320}{160}{250}{15}{18}{10}{20}
%-------------------------------------------------------
\begin{document}
\showvalues
\showvisuals
\showhelp
% Simple example using fancyhdr.sty
\fancyhead[LE]{{\fontsize{12}{12}\selectfont\thepage}}
\fancyhead[RE]{\textsc{text for left-hand pages}}
\fancyhead[LO]{\textsc{Text for right-hand pages}}
\fancyhead[RO]{{\fontsize{12}{12}\selectfont\thepage}}
\pagestyle{fancy}
\lipsum[1-10]%using lipsum.sty to generate some sample text
\end{document}

如何下载并使用mypagesetup.tex

如上所述,每当你成功地排版一篇文档,模板会生成一个mypagesetup.tex文件,里面包含所有设置页面布局的LaTeX命令。下面的截图给出了一个典型的mypagesetup.tex文件,通过模板命令\showvalues,可以在文档中把它显示出来。如果你想在别的项目中也使用mypagesetup.tex文件中的布局设置,那么按照以下指示去做(注意步骤3中对LuaLaTeX的具体说明): 第1步:下载模板项目的ZIP文件,注意,确保你选择了“Input and Output Files”选项:步骤2:用ZIP工具/软件解压,提取mypagesetup.tex文件,使用时把它上传到你的Overleaf项目中。 步骤3(对pdfLaTeX或XeLaTeX):把它包含进主文件,譬说在\begin{document}之前(导言区)加入\input  mypagesetup.tex 命令。举例来讲,一个最小的pdfLaTeX 或XeLaTeX项目可能如下所示,注意命令 \documentclass[twoside]{book} :

\documentclass[twoside]{book}\usepackage[utf8]{inputenc} % Remove this line if you use XeLaTeX\usepackage{lipsum} % Package to generate text for testing\input mypagesetup.tex\begin{document}\lipsum[1-50] % Text for testing. You can, of course, delete this\end{document}\documentclass[twoside]{book}
\usepackage[utf8]{inputenc} % Remove this line if you use XeLaTeX
\usepackage{lipsum} % Package to generate text for testing
\input mypagesetup.tex
\begin{document}
\lipsum[1-50] % Text for testing. You can, of course, delete this
\end{document}

步骤3(对LuaLaTeX):前面提到(题外话:LuaTeX),LuaTeX引擎的开发者改动了它的原语,这意味着LuaTeX不支持直接使用\pdfpagewidth 和\pdfpageheight 设置 PDF文档页面大小。为了能够使用LuaLaTeX,你需要在\input mypagesetup.tex 之前添加\let\pdfpagewidth\pagewidth 和 \let\pdfpageheight\pageheight-again 这2个命令。再次提醒,注意命令\documentclass[twoside]{book} 的使用。

\documentclass[twoside]{book}
\usepackage{lipsum} % Package to generate text for testing
\let\pdfpagewidth\pagewidth \let\pdfpageheight\pageheight %only needed for LuaLaTeX
\input mypagesetup.tex
\begin{document}
\lipsum[1-50] % Text for testing. You can, of course, delete this
\end{document}

文章资源

这里我们列出了一些资源,以帮助你更好地理解LaTeX的布局参数。谷歌幻灯片里有这些方程的详细介绍,你可以自己算出满足任意文档要求的参数值。

Overleaf LaTeX 模板

我们发布的LaTeX模板,能够利用文中讨论的方程提供可视化向导和标尺,帮助你预览版芯和页边空白。

谷歌幻灯片:带动画

谷歌幻灯片:无动画

谷歌幻灯片:转换为PDF

如果你希望观看PDF格式的幻灯片,或者想把它们打印出来,你可以下载PDF文件。

下载页面布局图

如果你想更详细地研究页面布局图,这里有PDF格式的双页(即面向页面)文档。

结束语

我们希望本文对你有用,之所以提供这些有趣的想法和解决方案,为的是探索使用LaTeX设置页面布局。一如既往地,我们非常乐意聆听读者的心声,所以请通过评论和回复联系我们。 Happy (La)TeXing! 选自:https://www.overleaf.com/latex/templates/overleaf-template-to-visualize-the-layout-of-a-book-prepared-with-slash-documentclass-twoside-%7Bbook%7D/qgtvptpkffcw#.WkdafFOOxOU

分享到:
未经允许不得转载:LaTeX技巧901:驯化LaTeX页面布局
已有 条意见

    最新文章

    加载中...
      本站提供专业LaTeX排版、咨询、定制服务,请点击下图咨询详情


      全国首个精品的LaTeX视频教程,大牛带着你入门,让LaTeX学习不再纠结,请点击下图咨询详情

      热门评论

        联系我们

        交流QQ群:91940767
        本站QQ号:343083553
        邮箱联系latexstudio@qq.com
        淘宝店铺latexstudio.taobao.com 提供排版,模板定制,培训,图片处理,视频教程等LaTeX服务。

        关注微信公众号: latex2015

        如果您投稿或者希望加入我们团队,请发送您的简历到latexstudio@qq.com。

        科技艺术的完美融合,专业精致的排版体验

        联系我们联系我们