我今天要讲的是如何给RTF文件添加bookmark(左侧的导航栏显示标题),我搜了一下网上的资料,不管是SAS community还是论文,都没有找到直接的方法达到导航栏显示标题的目的。
当然了,也没有哪份指导原则说你必须要在rtf文件的导航栏添加标题(PDF应该是要的,而且最后combine完的时候也方便快速跳转到对应的TFL)
给RTF文件添加title有好几种方式,每个公司可能有差别,一种方式是用title语句,但是这种方式输出的title是位于页眉处,可能存在不方便的地方。
可以通过BODYTITLE选项让title不输出到页眉处,可还是会存在只在第一页输出title,后续页就不输出title的问题,这个不是我们讨论的重点,今天的重点是如何输出导航栏的标题。,如下图。
这张图是用title选项输出标题,同时用了BODYTITLE的选项,虽然没输出标题在页眉处,但是后面的页不显示标题了。解决方式是我们提前在数据集生成一个分页变量(比如page),然后在proc report里面加上break after page /page;就可以让每一页显示标题了。
同时左侧的导航栏也没有显示标题,点击标题的时候格式显示是“正文”。
如果对标题设置“标题”的格式,那么就能在导航栏显示标题了。
第二种方式是通过在proc report里面的compute语句里面输出标题,用的样式是style=styles.rtf;注意这时候的标题是显示在proc template里"table"部分,所以,你看到下面这张图里的title被放在一个方框里面。
即使我们改一下样式,
通过compute可以实现每一页都出现标题,但是需要注意,虽然换了一个样式,但是这个标题还是处在方框里面,看箭头指向的那个小图标,就是表格的标志。
我们从第一种方法,看下怎么实现导航栏显示标题。
需要注意的是,rtf文件,如果用记事本打开的话,本质上就是一堆富文本代码。
所以一开始我想的是先输出一个rtf文件,然后将标题设置成标题格式,之后比较两个RTF文件多了或者少了什么东西,但是我设置完标题格式之后,发现这个RTF对应的txt文件增加了至少几百行,而且最开始的几行也不一样,想不明白为什么会这样,明明只添加了一个标题的格式,所以这样的想法失败了。
后来了解到在rtf中,设置一级标题只需要在rtf代码中加上\outlinelevel0,所以我们只需要找到我们的title位置,加上\outlinelevel0就可以了,
但是因为我们每页都输出了title,所以需要对rtf文件处理一下,只针对第一个出现的title输出bookmark,否则的话每页的标题都会输出一个bookmark
所以我们可以在输出rtf文件后,通过data步中的infile读取rtf文件处理一下,这样就能输出一个bookmark了
但是这样有一个问题,这样输出的好像并不是标题的格式,word显示只是正文,但是的话它也确实在导航栏输出了标题。不管怎样,至少是输出了,这里也只是为大家提供一个思路。
另一种方法是在proc template里面设置title,也就是通过pretext选项,也就是在下面箭头方块前面会输出title(方框下面就属于table部分,就像文章一开始写的,在table部分设置标题格式也不会起作用,但是pretext是在table部分外面),如果只是简单地设置pretext也不会直接输出含有标题格式的格式,也需要处理一下,这里就不赘述了。
最后说个题外话,有些公司可能是用ods tagset.rtf file=输出rtf,有的公司使用ods rtf file=,但是我发现用ods tagset.rtf 输出的rtf,即使你用了title或者footnote选项,输出的标题或者脚注都不是在页眉页脚位置,而是在table这部分,这是一个值得研究的地方。
网友评论