Quarto PDF中KOMA-Script typearea横向页面几何设置失效求助
问题描述
我用KOMA-Script的typearea宏包,通过切换\KOMAoptions的方式在单个PDF里生成纵向和横向页面,但全局配置的geometry边距只对纵向页面生效,横向页面不遵循该设置。需要以下两种解决方案:
- 让横向页面应用页眉中的geometry设置;
- 在KOMA命令内为横向页面单独设置geometry。
原代码如下:
--- title: "Portrait and Landscape" format: pdf: geometry: - top=80mm - bottom=30mm - left=30mm - right=30mm include-in-header: text: | \usepackage{typearea} --- # Quarto Quarto可以将内容和可执行代码整合为成品文档。了解更多请访问Quarto官网。 \newpage <!-- 切换为横向页面 --> \KOMAoptions{paper=landscape,pagesize} \recalctypearea # 运行代码(横向) 点击「渲染」按钮会生成包含内容和代码输出的文档。你可以像这样嵌入代码: 也可以给可执行代码添加选项,比如`echo: false`会隐藏代码,只显示输出。 \newpage <!-- 切回纵向页面 --> \KOMAoptions{paper=portrait,pagesize} \recalctypearea # Quarto(纵向) Quarto可以将内容和可执行代码整合为成品文档。了解更多请访问Quarto官网。
解决方案1:让横向页面复用全局geometry设置
问题根源是调用\recalctypearea时会重置页面边距,覆盖之前的geometry配置。解决办法是把全局的geometry设置存为一个命令,切换页面方向后重新调用这个命令。
修改后的代码:
--- title: "Portrait and Landscape" format: pdf: geometry: - top=80mm - bottom=30mm - left=30mm - right=30mm include-in-header: text: | \usepackage{typearea} % 保存全局geometry设置为自定义命令 \newcommand{\mygeometry}{\geometry{top=80mm,bottom=30mm,left=30mm,right=30mm}} % 初始加载时应用一次 \mygeometry --- # Quarto Quarto可以将内容和可执行代码整合为成品文档。了解更多请访问Quarto官网。 \newpage <!-- 切换为横向页面 --> \KOMAoptions{paper=landscape,pagesize} \recalctypearea % 重新应用全局geometry设置 \mygeometry # 运行代码(横向) 点击「渲染」按钮会生成包含内容和代码输出的文档。你可以像这样嵌入代码: 也可以给可执行代码添加选项,比如`echo: false`会隐藏代码,只显示输出。 \newpage <!-- 切回纵向页面 --> \KOMAoptions{paper=portrait,pagesize} \recalctypearea % 重新应用全局geometry设置 \mygeometry # Quarto(纵向) Quarto可以将内容和可执行代码整合为成品文档。了解更多请访问Quarto官网。
说明:
- 在页眉里定义
\mygeometry命令,把全局的geometry参数写进去; - 每次切换页面方向并执行
\recalctypearea后,调用\mygeometry重新应用边距设置,覆盖typearea的默认边距。
解决方案2:为横向页面单独设置geometry
如果需要给横向页面配置不同的边距,可以在切换方向后直接用\geometry命令单独指定参数。
修改后的代码:
--- title: "Portrait and Landscape" format: pdf: geometry: - top=80mm - bottom=30mm - left=30mm - right=30mm include-in-header: text: | \usepackage{typearea} --- # Quarto Quarto可以将内容和可执行代码整合为成品文档。了解更多请访问Quarto官网。 \newpage <!-- 切换为横向页面,并单独设置边距 --> \KOMAoptions{paper=landscape,pagesize} \recalctypearea % 为横向页面单独设置geometry,这里示例用左右80mm,上下30mm,可按需调整 \geometry{left=80mm,right=80mm,top=30mm,bottom=30mm} # 运行代码(横向) 点击「渲染」按钮会生成包含内容和代码输出的文档。你可以像这样嵌入代码: 也可以给可执行代码添加选项,比如`echo: false`会隐藏代码,只显示输出。 \newpage <!-- 切回纵向页面,恢复全局geometry设置 --> \KOMAoptions{paper=portrait,pagesize} \recalctypearea % 恢复全局的geometry设置 \geometry{top=80mm,bottom=30mm,left=30mm,right=30mm} # Quarto(纵向) Quarto可以将内容和可执行代码整合为成品文档。了解更多请访问Quarto官网。
说明:
- 切换到横向后,执行
\recalctypearea,再用\geometry指定横向页面的专属边距; - 切回纵向时,同样用
\geometry恢复全局的边距设置,确保后续纵向页符合要求。
内容的提问来源于stack exchange,提问作者andreas
相关产品推荐
相关产品推荐

