Изменение верхнего, нижнего, левого и правого полей на лету

Изменение верхнего, нижнего, левого и правого полей на лету

Я пытаюсь найти способ изменять все поля страницы когда угодно и столько раз на одной странице, чтобы иметь возможность легко размещать текст в нужном мне месте на странице.

Я думал об использовании пакета геометрии и использовании

 \newgeometry{left=6.75cm, right=1cm, top=1cm, bottom=1cm}
 %…
 \restoregeometry

но, к сожалению, это работает только для целых страниц, поэтому я могу изменить поля только один раз на страницу (и затем они будут действительны для всей страницы без возможности изменить их снова).

Я нашел следующий скрипт в Интернете, который позволяет пользователям изменять поля на лету, как я хочу. Код ниже работает отлично и позволяет мне изменять левые и правые поля моей страницы столько раз, сколько я хочу, но, к сожалению, он не дает мне возможности изменять верхние и нижние поля.

% placed before \begin{document}

\newenvironment{changemargin}[2]{%
\begin{list}{}{%
\setlength{\leftmargin}{#1}%
\setlength{\rightmargin}{#2}%
}%
\item[]}
{\end{list}}

% And then inside the document, whenever I want to use
% the command to change the margins on the current page

\begin{changemargin}{1.9875cm}{-3.7625cm}
% this means the left margin increases by 1.9875cm compared
% to the default left margin (4.7625cm) (so left margin=6.75cm here)
% and the right margin decreases by 3.7625cm (so right margin=1cm)

% ... (text or pictures in new environment)

\end{changemargin}

По этой причине я попытался адаптировать код выше и получил следующий код:

% placed before \begin{document}
\newenvironment{changemargin}[3]{%
\begin{list}{}{%
\setlength{\leftmargin}{#1}%
\setlength{\rightmargin}{#2}%
\setlength{\topmargin}{#3}%
}%
\item[]}
{\end{list}}

% And then to use the command:
\begin{changemargin}{1.9875cm}{-3.7625cm}{1cm}
% ...
\end{changemargin}

Он компилируется и по-прежнему изменяет левое и правое поля, но верхнее поле остается неизменным. (Я еще не пробовал менять нижнее поле).

Может ли кто-нибудь помочь мне заставить этот код работать полностью и позволить мне изменять левое, правое, верхнее и нижнее поля страницы? Спасибо.

решение1

Вы можете использовать комбинациюgeometry(для изменения верхнего и нижнего полей) и adjustwidthсреды, предоставляемойchangepageпакет (он использует внутри себя список и похож на вашу changemarginсреду):

\documentclass{article}
\usepackage[paperheight=14cm]{geometry}
\usepackage{changepage}
\usepackage{lipsum}

\begin{document}
\lipsum[1-3]
\newpage
\newgeometry{top=0.5cm, bottom=0.5cm}
\begin{adjustwidth}{-2cm}{-1cm}
\lipsum[4]
\end{adjustwidth}
\lipsum[1]
\begin{adjustwidth}{1cm}{2cm}
\lipsum[3]
\end{adjustwidth}
\lipsum[4]
\newpage
\restoregeometry
\lipsum[1-3]
\newpage
\newgeometry{top=2.5cm, bottom=2.5cm}
\begin{adjustwidth}{2cm}{2cm}
\lipsum[4]
\end{adjustwidth}
\lipsum[4]
\begin{adjustwidth}{3cm}{-3cm}
\lipsum[3]
\end{adjustwidth}

\end{document}

введите описание изображения здесь

Я настоятельно рекомендую вам, как личное мнение,нетсделать это.

решение2

Просто для полноты картины: скласс КОМАвы можете получить те же странные результаты с помощью собственной addmarginсреды KOMA-Scripts.

Я взял на себя смелость взятьГонсало Мединапример и скорректируйте его для scrartcl:

\documentclass{scrartcl}
\usepackage[paperheight=18cm]{geometry}
\usepackage{lipsum}

\begin{document}
\lipsum[1-3]
\newpage
\newgeometry{top=0.5cm, bottom=0.5cm}
\begin{addmargin}[-2cm]{-1cm}
\lipsum[4]
\end{addmargin}
\lipsum[1]
\begin{addmargin}[1cm]{2cm}
\lipsum[3]
\end{addmargin}
\lipsum[4]
\newpage
\restoregeometry
\lipsum[1-3]
\newpage
\newgeometry{top=2.5cm, bottom=2.5cm}
\begin{addmargin}[2cm]{2cm}
\lipsum[4]
\end{addmargin}
\lipsum[4]
\begin{addmargin}[3cm]{-3cm}
\lipsum[3]
\end{addmargin}

\end{document}

Поскольку результат выглядит примерно одинаково, я не привожу изображение.

Связанный контент