如何在R-markdown生成PDF的标题页页脚显示‘1 of X’
解决R Markdown标题页页脚“1 of X”显示问题
问题原因
使用lastpage包时,标题页处于文档编译的早期阶段,此时\pageref{LastPage}还无法获取最终的总页码(总页码需等文档全部编译完成后才能确定),因此仅显示当前页码“1”,而非预期的“1 of X”格式。
解决方法
推荐方案:改用pageslts包
pageslts包专门优化了文档页码的引用逻辑,能在文档任意位置正确解析总页码,替代lastpage即可解决问题。
修改后的完整代码
date: "`r paste0('Generated on: ',format(Sys.Date(), '%d %B, %Y'))`" geometry: margin=2cm output: pdf_document: toc: yes params: output_params: NA title: "`r paste0('LCMS Dilution App Report')`" author: "`r params$output_params$Analysis_Info$Name`" header-includes: - \usepackage{pageslts} # 替换lastpage为pageslts - \usepackage{fancyhdr} - \definecolor{col1}{RGB}{190, 43, 187} - \fancypagestyle{ttlpage}{ \fancyhf{} # 清空默认页眉页脚,避免样式冲突 \fancyfoot[C]{{\thepage} of \lastpageref{LastPage}} # 使用pageslts的专用引用命令 } - \thispagestyle{ttlpage} - \pagestyle{fancy} - \fancyhead[EL,OL]{\rightmark} - \fancyhead[EC,OC]{} - \fancyhead[ER,OR]{LCMS Dilution App} - \fancyfoot[EL,OL]{\color{col1}{Company Name}} - \fancyfoot[EC,OC]{\textbf{Company Internal}} - \fancyfoot[ER,OR]{{\thepage} of \lastpageref{LastPage}} # 统一替换引用命令
关键调整点
- 替换
lastpage为pageslts包,解决编译顺序导致的页码引用失效问题。 - 在自定义标题页样式
ttlpage中添加\fancyhf{},清空默认页眉页脚规则,避免样式冲突。 - 将所有
\pageref{LastPage}替换为pageslts提供的\lastpageref{LastPage}命令,确保总页码正确解析。
备选方案:保留lastpage包的兼容写法
若不想更换包,可在标题页的页脚命令中添加星号,强制LaTeX延迟解析总页码引用:
\fancypagestyle{ttlpage}{\fancyfoot[C]{{\thepage} of \pageref*{LastPage}}}
注:此方法兼容性略差,部分LaTeX编译环境可能仍存在解析问题。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

