Tagged_by_kmc:
latex, word, pdf, 排版, 尺寸控制, 微调, word模板, geometry, fancyhdr, logo, 标志, 会议, 测量, 精确控制, dimension.
这是我博士课程中的第一篇投稿,总觉得国外LaTeX的使用频率应该是很高了吧,没想到依然是个冷冰冰的Word模板放在那里,如下 (Word转成的PDF,里面有我所有的测量值):
http://www.megaupload.com/?d=UV4Y30SE
用了这么久的LaTeX,我可不想第一次就倍受打击地重新拣起Word(因为一想到没有断字的Word排版效果,包括参差不齐的单词间距,我就毛骨悚然,真的!)正好,也想找机会试试看LaTeX到底有多少自由度,能不能按照别人的格式要求精确地调整出预期的结果。最终,我的投稿已经被采纳,没有编辑对版式提出意见,于是打算分享这些经验,因为没有学过写Class,写成模板也没有谁能用得上,不如讲讲用了哪些dirty tricks,仅仅是为了应急。希望能给碰到类似尴尬局面的TeXer们一点参考,也希望高手笑过之后指点一下,哪些方面有更好的方法。如果以后有时间,可能会用LaTeX写成PDF教程并放上图片,看看光用文字描述是不是能让大家看懂吧。
阅读本文需要的知识:LaTeX基础知识(能看懂lshort),页面尺寸方面的知识(边距,缩进,行距,页眉页脚等),了解常用宏包(titlesec, fancyhdr等),一点点字体载入方面的知识。
由于模板是法语写的,所以大致介绍一下模板的要求:
- A4,左右页边距为2cm,上边距2.5cm,下边距2cm
- 页眉页脚高为1.25cm,除了首页,由于要插入会议名称和Logo,首页页眉为2.5cm。
- 双栏排版,栏宽为8.12cm,两栏间距0.75cm
- 字体方面全用Times。文章标题16pt粗,作者和单位10pt斜;section标题12pt粗,subsection标题10pt斜,正文10pt
- 作者/单位的格式是上标引用型,下面立即写出所属单位
- 正文段落缩进0.5cm,标题序号阿拉伯数字后带一个“.”,section标题内容(除了数字)缩进0.5cm(相对于边距而不是相对于前面的那个“.”),subsection的序号缩进0.5cm(即subsection的序号跟section的内容对齐),内容缩进1.5cm
- 图片和表格的caption在模板中没有具体文字描述,但是看效果是粗体,阿拉伯数字并且是换行后缩进(hang模式)
- 首页页眉:会议名称,会议Logo
- 最多15行的Abstract(法语中叫Résumé),斜体
- 参考文献格式疑似IEEEtran,没有具体要求,我用了IEEEtran
其中一些要求很好实现,另一些很变态。
编译方式:PDFLaTeX
----------------页面尺寸----------------
我们先来说跟页面尺寸有关的。首先geometry宏包是不能用了(事实上我是多次想用它的,最终都失败了),只有自己手工调整。由于模板提供了Word转PDF的效果,我正好可以用Acrobat的测量工具来量尺寸(当然会引入一些微小的误差),并且通过Try and error来调整,没有技术活,只是力气活。这一部分的内容如无特别说明,都在\begin{document}之后出现。
首先定下双栏的栏宽和栏距,实践发现最方便的办法是做一个小计算:
\setlength{\textwidth}{17.06cm}
\setlength{\columnsep}{0.75cm}
即“(textwidth-columnsep)/2 = 8.155cm”,原本来说应该等于8.12cm,实际测量发现模板里面也是8.155cm(通过多次测量,发现不是自己的测量误差),不过0.035cm的差距基本不影响实际打印效果。
于是试着编译了一下发现生成的text block在页面上不是很居中,不知道原因。最终量出来这样的设置
\addtolength{\hoffset}{-0.58cm}
把text block“挪动”到合适的位置上。这样一弄,left/right margin自然 = 2cm(根据A4纸的总宽度,他们不是独立的变量)。
下面讲讲真正最变态的要求,也是这次排版中遇到的最大挑战(我曾经在论坛发帖《latex中如何判断现在是第几页?》和《页面尺寸精调的最后一点小问题》),最终的解决方式是一个很dirty的巧合。
这篇文章要求首页的页眉高跟之后的不同,由于首页要放会议题目和logo,首页页眉要2.5cm,后续的页面则只需要1.25cm。可是页脚的高度要不变!(IEEE的模板不是这样,所以没有模板可以参考)。于是简单地调整voffset不可行。我原来是想,默认尺寸是第一页的尺寸,到第二页再改,也就是说动态地调整textheight,可这样又会碰到一个很头痛的问题:LaTeX如何知道现在已经到了第二页?想知道的话除非读source2e,没时间啊!
换个角度想想,既然就只有第一页跟其它不一样,不如默认按2,3,4...页的尺寸设置,而在第一页单独改动。于是测量模板的第二页的页眉,并反复对比页脚到页面最下方的距离,得到:
\addtolength{\voffset}{-1.96cm}
\addtolength{\textheight}{3.90cm}
这样第二页和后续页的text block放置已经没有问题。剩下首页,由于首页我是用\maketitle来生成标题作者等等,我想到的是在\title{}命令里面做文章,事实上我让页眉的内容也“混”到了\title{}命令里面:
\title{
\vspace{-0.74cm}\fontsize{16pt}{16pt}\selectfont
{
16\textsuperscript{èmes} Journées Nationales Microondes
\\
27-28-29 Mai 2009 Grenoble
}
\\
\vspace{1.35cm} 文章标题}
也就是说,我先纵向移动-0.74cm,写上会议标题“第16届……会议”(也就是山寨版的页眉),再移动1.35cm到真正标题位置写标题。这个方法不会改变页脚的高度,因为没有去碰\textheight。
----------------字体相关----------------
文档全局设置为:
\documentclass[10pt, a4paper, twocolumn, fleqn]{article}
而16pt这个尺寸在LaTeX默认的\small, \huge等等是调整不到的,两种方法,LaTeX标准字体选择方式
{\fontsize{16pt}{16pt}\selectfont 内容}
或者原始一点的
\newcommand{\ptmseize}[1]{\font\x=ptmb at 16pt \x #1}
因为ptmb就是Times bold,我这个命令连\textbf{}也包括了进去。
----------------标题相关----------------
跟章节标题有关的自然都要请出titlesec宏包,在导言区写
\usepackage[bf, small]{titlesec}
\titleformat{\section}{\bf\large}{\thesection.\,}{0.24em}{}
\titlespacing{\section}{0cm}{*1.5}{*1.1}
\titleformat{\subsection}{\it}{\thesubsection.\enspace}{0.5em}{}
\titlespacing{\subsection}{0.5cm}{*4}{*1.5}
其中“\,”和“0.24em”是反复测量出来的值,它们保证section标题内容(除了数字)缩进0.5cm,\thesection后面的“.”就是标题序号和内容的分隔点,而那个\bf\large命令则保证在10pt的正文中出现12pt粗体的标题;由于section序号不要缩进,在\titlespacing里面写的是0cm,subsection的设置完全类似,除了序号缩进0.5cm。至于里面的*1.5、*1.1,指的是标题前后的弹性空间,由于模板没有具体要求,我是按自己的美观标准和文章的篇幅限制来选择的,因为把他们设置小一点可以省下很可观的空间,前提是不要跟前后的正文粘得太紧。
那个Abstract,我看也没有什么特别要求,没必要弄一个环境
\noindent \textbf{\textit{Résumé}}
{\itshape }
----------------作者相关----------------
作者和单位,我用的是authblk(全称Author Block)宏包,具体可以看看这个宏包的文档,感觉是挺好用的。
导言区
\usepackage[noblocks]{authblk}
正文区
\author[1]{\normalsize author1}
\author[2]{\normalsize author2}
\affil[1]{\normalsize\itshape address1}
\affil[2]
{
\normalsize\itshape Boss' address
\authorcr
\href{mailto:kmc's Email address}{\normalsize \itshape kmc's Email address} : \normalsize \itshape correspondant principal
}
看得出来吗?我又把通信作者的Email地址“混”到第二个单位(\affil[2])里面去了,注意在authblk宏包定义的换行符是\authorcr而不是\\。
说起来,IEEE模板里面反而显得很dirty,用的是{\small $~^{\#1}$}这种方式。或许dirty和不dirty的区别仅仅是“格式代码放在宏包里”还是“放在你眼前”的差距?
关于{\itshape My text}还是\textit{My text},其实我主要是嫌后者要删除的时候很麻烦,既要删除命令又要删除括号,当然你可以说大括号不用删除,{My text}也不影响,但是无意义的大括号很影响代码的整洁,\itshape有一个作用域的限制,但是在\title{}, \author{}命令里面已经限制了作用域了,不用担心\itshape作用到外面去。
----------------其他设置----------------
caption宏包
\usepackage{caption}
\DeclareCaptionLabelSeparator{period-quad}{.\quad}
\captionsetup{format=hang, singlelinecheck=no, labelfont=bf, font={normalsize,bf}, figurename=Figure, tablename=Tableau, labelsep=period-quad}
声明一个你需要的分隔符,因为模板要求Figure 1后面有一个“.”,距离大约是一\quad这么远,于是我就弄了一个period-quad放到labelsep=后面。
fancyhdr宏包
由于这种投稿的文章不要页码,我是这样设置的,在\title命令之前放这样的代码
\fancypagestyle{empty}{
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0.5pt}
\fancyfoot[C]{16\textsuperscript{èmes} Journées Nationales Microondes, 27-28-29 Mai 2009 - Grenoble}
\fancyfoot[L]{}
\fancyfoot[R]{}
}
这样就控制了第一页的pagestyle,下面,在你源代码靠近编译结果第一页结尾的内容附近放上
\pagestyle{empty}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0.5pt}
\fancyhead{}
\fancyfoot[C]{16\textsuperscript{èmes} Journées Nationales Microondes, 27-28-29 Mai 2009 - Grenoble}
\fancyfoot[L]{}
\fancyfoot[R]{}
用来控制第二页,这里并不一定需要精确知道源代码什么位置对应编译结果的第二页,说实在的我不知道为什么一定要这样,但是如果不这样的话第二页的页脚会往 上移动…………另外为了保证首页无页码,在\maketitle命令后面紧跟\thispagestyle{empty},这个已经被问过很多次了。
浮动体方面除了graphicx,subfigure(好像我没有用到)外,就是booktabs、multirow和makecell宏包用来画表,不过这跟本文没有太大关系。浮动体用的是传统设置
\setcounter{totalnumber}{4}
\renewcommand{\textfraction}{0.15}
\renewcommand{\topfraction}{0.85}
\renewcommand{\bottomfraction}{0.65}
\renewcommand{\floatpagefraction}{0.60}
\setlength{\textfloatsep}{5pt plus 2pt minus 2pt}
\setlength{\intextsep}{12pt plus 2pt minus 2pt}
\setlength{\abovecaptionskip}{5pt}
\setlength{\belowcaptionskip}{0pt}
其中\textfloatsep和\intextsep中的值是弹性长度,表示5pt ± 2pt,当然你也可以设置为 5pt + 10pt - 8pt,表示最多15pt,最少-3pt,用来节省页面篇幅的(因为开始初稿只让写两页,空间实在太少)。我原来一直没弄明白这个,现在趁机解释一下(没准还解释错了……)。
----------------插入logo----------------
还有一个问题就是由于我没有在首页使用页眉,我目前只“混”进去了会议名称,Logo怎么办?网上有说用pgf来放(pgfdeclareimage,pgfuseimage),我没有成功,郁闷。不过搜索到一个还算好用的eso-pic宏包,导言区
\usepackage{eso-pic}
\newcommand\BackgroundPic{
\put(16.57, 23.19){
\parbox[t]{\textwidth}{
\includegraphics[scale=1,keepaspectratio]{logo_jnm.png}%
}
}
}
正文紧接\begin{document}后面写
\AddToShipoutPicture*{\setlength{\unitlength}{1cm}\BackgroundPic}
具体来说就是先声明一个\BackgroundPic命令,这个命令在16.57, 23.19的位置放一个宽为\textwidth的parbox,里面放上你要的图片Logo。这个Logo我是从Doc模板里面截出来的,按Word的100%显示比较缩放成一丝不差,所以scale=1并且keepaspectratio。注意那个\unitlength只有在正文区可以声明,所以导言区的16.57和23.19没写单位。
----------------平衡双栏----------------
末页的双栏平衡,有很多说法,我就只是用了flushend宏包而已,没有遇到网上传说的问题,可能是我末页的浮动体比较少的缘故。
差不多就这些了,在尝试排版的过程中,可以打印测试页,跟Word的打印结果发在灯光下透视着比较。打印PDF的时候一定要注意,Acrobat打印A4纸的时候,根据打印机的不同,如果你选择了“适合打印机边距”,可能会缩放97%,实际效果有出入但事实上你的页面尺寸是正确的!所以页面缩放一定要选“无”。到时候编译说你尺寸不合适,非要你用Word的时候,你可以骄傲地把两张纸放在一起给他看两个Logo,两条页脚线是如何完美重合到一起的。
0 个评论:
发表评论