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

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

引言

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

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

\textwidth, \marginparsep, \marginparwidth, \footskip

我们的目标是什么?

本文主题以及我们提供相关资源的目?#27169;?1.实现某种布局规范,比如来自书刊设计师或不支持LaTeX的出版商,或者遵循特定的印刷规范。 2.把设计规范中传统书刊的规格(纸张大小,实际尺寸和页边空边)转换成LaTeX?#38382;?#20197;实现设计师的布局需求。 3.使页面在纸张的垂直?#36739;?#21644;水平?#36739;?#22343;居中,即LaTeX所生成PDF页面的中心。想要选择?#25105;?#30340;纸张大小,而非受限于标准(A4, US Letter等)。 在本?#27169;?#25105;们将探讨LaTeX页面模型与设计印刷业所用传统模型之间的关系。通过一组谷歌幻灯片(包含详细的页面布局图),我们逐步展示了如何建立一些简单方程,使之能够表示LaTeX布局模型与书刊设计师或印刷公司的传统规格之间的关系。 借助那些方程,如果不觉得麻烦的话,你可以手动算出各个LaTeX?#38382;?#30340;值,就得到了你想要的书刊布局。当然,你还有别的选择,那就是使用我们基于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个命令表?#23616;?#24352;大小,我们可以通过?#29615;?#22270;解?#24471;?#25105;们要做什么:注意:ΔX和ΔY控制页面( book page)的位置,使之位于纸面(paper area)中?#27169;?#35814;情参见谷歌幻灯片。从图解可以看出: ΔX=1/2 (\pdfpagewidth  -  book-page-width) ΔY=1/2 (\pdfpageheight  -  book-page-height) 上图也在谷歌幻灯片里,要想建立页面布局方程,必须从它开始。

题外话:LuaTeX

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

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

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

  • 页面布局图解:谷歌幻灯片中有详细的页面布局图,通过它可以建立方程,从而得到各个LaTeX?#38382;?#30340;值。如果你想进行深入的?#33455;浚?#25105;们有高分辨?#23454;模?#30690;量)PDF版幻灯片供你下载。

  • 如?#38382;?#29992;本文资源

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

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

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

    步骤2(可选):下载并?#33455;?#39029;面布局图

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

    步骤3:尝试LaTeX模板

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

    Overleaf模板:它是做什么?#27169;?/h2>

    总的?#27492;擔?#23427;提供以下功能:

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

    • 用你输入的规则计算相应的LaTeX?#38382;?#20540;,实现你想要的页面布局;

    • 所有LaTeX?#38382;?#30340;设置都保存在tex文件中,可通过下载模板项目得到;

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

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

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

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

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

    页面布局?#38382;?#21644;方程

    如果?#22402;?#35895;歌幻灯片中的方程,你会发现里面?#34892;?#22810;变量。显然,使用方程的方式也变得很多,这取决于哪些?#38382;?#20320;想通过方程计算而哪些你要自己设置。我们来?#22402;?#27468;幻灯片中的?#29615;?#22270;解(和相应的方程): 很显然,你需要决定计算哪些?#38382;?#20197;及要设置哪些?#38382;?#25105;们为Overleaf模板选择的方式如下: 1.我?#21069;裓hoffset和\voffset设置为0。 2.你来输入以下控制页面宽度的LaTeX?#38382;?#20540;:

    \marginparsep
    
    \marginparwidth

    3.你再来输入以下控制页面高度的LaTeX?#38382;?#20540;:

    \headheight
    
    \headsep
    
    \footskip

    4.你还需要输入纸张大小、页面宽度和高度以及4个页边距的值。注意:所有?#24403;?#39035;以mm(毫米)为单位。 5.Overleaf template 模板会自动计算下列LaTeX?#38382;?#30340;值以实现页面布局(?#38405;?#36873;择的纸张大小为中?#27169;?/p>

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

    6.模板把所有?#38382;?#20540;(包括用户提供的以及模板计算?#27169;?#20889;进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命令则用来简要地排列模板命令及其描述。

    如?#38382;?#29992;Overleaf模板

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

    模板命令及其?#38382;?/h3>

    对于每个命令,我们会指出它是[可选的]或[必需的]。如果是[必需的],你就要设置所有受命令控制的?#38382;?#20540;,否则模板无法完成布局计算。 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?#38382;?#20540;,它们是计算其余?#38382;?#20540;之必需。

    #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] 此命令不带任何?#38382;?#23427;用于开启显示可视化标尺和向导功能,以帮助你查看页面布局。要关闭该功能,把命令注释掉即可。

    \showvisuals %all elements are displayed
    
    To switch it off just comment it out: 
    
    %\showvisuals

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

    \showvalues %Lists the content of "mypagesetup.tex"
    
    To switch it off just comment it out: 
    
    %\showvalues

    6.\showhelp[optional] 该命令不带任何?#38382;?#23427;简要地列出了模板命令及其描述。

    \showhelp %Typeset some brief documentation
    
    To switch it off just comment it out: 
    
    %\showhelp

    最小操作?#36947;?/h3>

    下面是一个关于Overleaf模板项目的简单?#36947;?

    \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的具体?#24471;鰨?第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不支?#31181;?#25509;使用\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的布局?#38382;?#35895;歌幻灯片里有这些方程的详细介绍,你可以自己算出满足?#25105;?#25991;档要求的?#38382;?#20540;。

    Overleaf LaTeX 模板

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

    谷歌幻灯片:带动画

    谷歌幻灯片?#20309;?#21160;画

    谷歌幻灯片:转换为PDF

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

    下载页面布局图

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

    结束语

    我们希望本文?#38405;?#26377;用,之所以提供这些有趣的想法和解决方案,为的是探索使用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视频教程,大牛带着你入?#29275;?#35753;LaTeX学习不再纠结,请点击下图咨询详情

        热门评论

          联系我们

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


          如果您投稿或者希望加入我们团队,请发送您的简历到[email protected]

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

          联系我们联系我们
          拳皇命运怎么快速的得到更多的装备
          莱万特和莱万特s 龙族幻想下载官方最新版 秒速飞艇开奖历史记录 查询福彩号码查询 重庆时时彩计划软件破解版 白狮APP 小游戏海底捞鱼 我的世界地图种子 疯狂麻将援彩金 湖南幸运赛车选号