我正在使用\usepackage[showframe]{geometry}
,并且发现当我使用landscape
环境(通过pdflscape
包添加)时框架似乎不太正常。
这是错误吗?有办法纠正吗?
这是我的 MWE:
\documentclass[a4paper,twoside,11pt,openright]{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[outer=25mm,inner=35mm,vmargin=20mm,includehead,includefoot,headheight=15pt,showframe]{geometry}
\usepackage{pdflscape}
\begin{document}
Hello. First page. Everything ok.
\begin{landscape}
Why is the frame off?
\end{landscape}
\end{document}
结果如下:
答案1
有一个“设计妥协”在包中lscape
(在其他包中,这当然会被称为“设计缺陷” ;-))。环境landscape
只会旋转\textheight
并且\textwidth
保持不变。但是包期望不变的值,因此它对的旧值geometry
感到惊讶。\textheight
\textwidth
以下示例在绘制垂直线geometry
的包 中修复了此问题。修复版本使用而不是。在环境 外部,宏扩展为。在环境 内部,它扩展为,该宏在环境 开始时使用文本高度(在 中可用)进行初始化:\Gm@vrule
\gmshow@textheight
\textheight
landscape
\gmshow@textheight
\textheight
\gmshow@@textheight
\hsize
landscape
\documentclass[a4paper,twoside,11pt,openright]{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[
outer=25mm,
inner=35mm,
vmargin=20mm,
includehead,
includefoot,
headheight=15pt,
showframe
]{geometry}
\usepackage{pdflscape}
\makeatletter
\newcommand*{\gmshow@textheight}{\textheight}
\newdimen\gmshow@@textheight
\g@addto@macro\landscape{%
\gmshow@@textheight=\hsize
\renewcommand*{\gmshow@textheight}{\gmshow@@textheight}%
}
\def\Gm@vrule{%
\vrule width 0.2pt height\gmshow@textheight depth\z@
}%
\makeatother
\begin{document}
\noindent
Hello. First page. Everything ok.
\begin{landscape}
\Huge
\noindent
top left\hfill top right\par
\vfill
\noindent
bottom left\hfill bottom right
\end{landscape}
\end{document}