Pergunta

Estou tentando desligar o Marginpato ao iniciar um novo ambiente Multicols com este novo ambiente, que usa os pacotes multicols e chngpage:

\newenvironment{multi}[1]{%
\newlength{\newtextwidth}%
\setlength{\newtextwidth}{\marginparwidth}%
\addtolength{\newtextwidth}{-1cm}%
\addtolength{\headheight}{.5cm}%
\let\oldheadrule\headrule%
\addtolength{\headwidth}{\newtextwidth}%
\begin{adjustwidth}{}{-\newtextwidth}\begin{multicols}{#1}}%
{\end{multicols}\end{adjustwidth}}

Que funciona muito bem:Cabeçalho do LATEX http://img6.imageshack.us/img6/6757/screenshotewa.png

Uhm, quase, desde a última página do capítulo atual "Lorem ipsum", ele se comporta como se eu não o tivesse instruído a: addTolng { headwidth} { newTextWidth}:Cabeçalho de látex no final do capítulo http://img11.imageshack.us/img11/6072/screenshotwbd.png

Como eu poderia consertar isso?

Editar:

Eu também estou usando o Fancyhdr.

2ª edição:

Um POC:

\documentclass[12pt,a4paper,oneside]{report}
\usepackage[utf8]{inputenc}
\usepackage[top=2cm,left=2cm,right=4.5cm]{geometry}
\usepackage{chngpage}
\usepackage{color}
\usepackage{amsmath}
\usepackage[pdftex,bookmarks,pdfpagemode=UseOutlines,bookmarksopen,backref
,colorlinks,urlcolor=blue,linktocpage]{hyperref}
\usepackage{url}
\usepackage{amssymb}
\usepackage{lipsum}
\usepackage{fancyhdr}
\usepackage{multicol}
\usepackage{indentfirst}
\usepackage{listings}
\usepackage{boxedminipage}
\pagestyle{fancy}

\setlength{\columnseprule}{1pt}

\setlength{\marginparwidth}{4cm}

\rhead{\large\leftmark}
\renewcommand{\chaptermark}[1]{%
  \markboth{#1}{}}

\makeatletter
\renewcommand*\@makechapterhead[1]{%
  {\parindent \z@ \raggedright \normalfont
    \huge\bfseries
    #1\par\nobreak
    \vskip 20\p@
  }}
\makeatother

\let\oldmarginpar\marginpar
\renewcommand\marginpar[1]{\-\oldmarginpar[\sffamily\raggedleft\footnotesize #1]%
{\sffamily\raggedright\footnotesize
\begin{boxedminipage}{\marginparwidth}#1\end{boxedminipage}
}}




\newenvironment{multi}[1]{%
\newlength{\newtextwidth}%
\setlength{\newtextwidth}{\marginparwidth}%
\addtolength{\newtextwidth}{-1cm}%
\addtolength{\headheight}{.5cm}%
\let\oldheadrule\headrule%
\addtolength{\headwidth}{\newtextwidth}%
\begin{adjustwidth}{}{-\newtextwidth}\begin{multicols}{#1}}%
{\end{multicols}\end{adjustwidth}}


\begin{document}
\tableofcontents

\chapter{Lorem ipsum}
\begin{multi}{2}
\lipsum[1-20]
\end{multi}

\chapter{Lorem ipsum}
\begin{multi}{2}
\lipsum[1-20]
\end{multi}

\chapter{Lorem ipsum}
\begin{multi}{2}
\lipsum[1-20]
\end{multi}


\end{document}

Deve ser possível continuar coluna única na mesma página, após "multi", mas os cabeçalhos devem ser mantidos como quando a página foi iniciada no ambiente "multi".

Por que eu precisaria de uma coluna única após várias colunas na mesma página com uma margem? Imagine apresentar o código -fonte do artigo, com pequenas dicas na margem. (É para isso que há o pacote de listagem)

Foi útil?

Solução

Suspeito que sua última caixa de cabeçalho esteja sendo construída depois que seu texto terminar de fazer as caixas multicol, para que você esteja fora do escopo da sua mudança. Ele remonta ao valor antigo.

Você provavelmente faria bem em adicionar o Fancyhdr embalagem e use -o. Eu acredito que é bem-comportado em multicolumn.

Ok, então é quase certamente a coisa do escopo. Você está fazendo a largura de ajuste em seu novo multi meio Ambiente. Quando seu texto acaba no meio ambiente, você não preencheu a última página; Os cabeçalhos não estão configurados até que a página seja preenchida. Portanto, seu ambiente Mutlti termina a caixa, você deixa o escopo e, em seguida, a página é concluída e emitida. Usando a largura antiga.

Defina a largura do cabeçalho e os parâmetros fora do ambiente.

Outras dicas

Eu executei seu documento de teste. Parece ter um bug nisso \newlength{\newtextwidth} tem um efeito global e, portanto, causa um erro. Não sei por que isso é, mas eu o puxei para fora do \newenvironment{multi} sem nenhum efeito mal.

O diagnóstico de Charlie está definitivamente correto. Uma solução alternativa é encerrar a página após os multicols, mas antes da largura de ajuste, assim:

\newenvironment{multi}[1]{%
   ...}
{\end{multicols}\vfill\break\end{adjustwidth}}

Eu testei esta solução e, no seu documento de amostra, ela produz uma boa saída.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top