This method is answered by @Leo Liu, from http://bbs.ctex.org/forum.php?mod=viewthread&tid=78285.
Limited by the geometry package itself:
Unlike \geometry in the preamble,\newgeometry is available only after \begin{document}, resets all the options ever specified except for the papersize-related options: landscape, portrait, and paper size options (such as papersize, paper=a4paper and so forth), which can’t be changed with \newgeometry.
-- Geometry package manual
Make a patch so that the \newgeometry
command uses the landscape and portrait options.
\usepackage{etoolbox}
\makeatletter
\def\ifGm@preamble#1{\@firstofone}
\appto\restoregeometry{%
\pdfpagewidth=\paperwidth
\pdfpageheight=\paperheight}
\apptocmd\newgeometry{%
\pdfpagewidth=\paperwidth
\pdfpageheight=\paperheight}{}{}
\makeatother
Complete example:
\documentclass{book}
\usepackage[a5paper,hmargin=3cm,vmargin=5cm]{geometry}
\usepackage{lscape,lipsum}
\usepackage{etoolbox}
\makeatletter
\def\ifGm@preamble#1{\@firstofone}
\appto\restoregeometry{%
\pdfpagewidth=\paperwidth
\pdfpageheight=\paperheight}
\apptocmd\newgeometry{%
\pdfpagewidth=\paperwidth
\pdfpageheight=\paperheight}{}{}
\makeatother
\begin{document}
\chapter{One}
\lipsum[1]
\section{One One}
\lipsum[2]
\newgeometry{,hmargin=3cm,vmargin=5cm,landscape}
\lipsum[3-5]
\restoregeometry
\lipsum[6]
\end{document}
