Pregunta

Estoy tratando de desactivar marginpar al iniciar un nuevo entorno multicols con este nuevo entorno, que utiliza los paquetes multicols y 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 muy bien: encabezado de látex http://img6.imageshack.us/img6/6757/screenshotewa.png

Uhm, casi, ya que en la última página del capítulo actual "Lorem ipsum" se comporta como si no le hubiera ordenado que: \ addtolength {\ headwidth} {\ newtextwidth}: encabezado de látex al final del capítulo http://img11.imageshack.us/img11/ 6072 / screenshotwbd.png

¿Cómo podría solucionarlo?

Editar :

También estoy usando fancyhdr.

Segunda edición :

Un 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}

Debería ser posible continuar con una sola columna en la misma página, después de "multi", pero los encabezados deben mantenerse como cuando la página se inició dentro de "multi". medio ambiente.

¿Por qué necesitaría una sola columna después de varias columnas en la misma página con un marginpar? Imagínese presentar el código fuente del artículo, con pequeños indicios en el margen. (Para eso está el paquete de listado)

¿Fue útil?

Solución

Sospecho que su último cuadro de encabezado se está construyendo después de que su texto termina de hacer los cuadros multicol, por lo que está fuera del alcance de su cambio. Se remonta al valor anterior.

Probablemente harías bien en agregar fancyhdr paquete y úsalo. Creo que se comporta bien en varias columnas.

Bien, entonces es casi seguro que es el alcance. Estás haciendo el ajuste de ancho en tu nuevo entorno multi . Cuando su texto se agota en el entorno múltiple, no ha llenado la última página; los encabezados no se configuran hasta que se llena la página. Entonces, su entorno mutlti termina el cuadro, abandona el alcance y ENTONCES la página está terminada y emitida. Usando el ancho anterior.

Establezca el ancho del encabezado y los parámetros fuera del entorno.

Otros consejos

Ejecuté su documento de prueba. Parece que hay un error en que \ newlength {\ newtextwidth} tiene un efecto global y, por lo tanto, causa un error. No estoy seguro de por qué, pero lo saqué del \ newenvironment {multi} sin ningún efecto negativo.

El diagnóstico de Charlie es definitivamente correcto. Una solución alternativa es finalizar la página después de los multicols pero antes del ancho de ajuste, por lo tanto:

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

He probado esta solución y en su documento de muestra, produce una buena salida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top