ширина заголовка на последней странице главы - PullRequest
4 голосов
/ 06 мая 2009

Я пытаюсь отключить marginpar при запуске новой среды multicols с этой новой средой, в которой используются пакеты multicols и 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}}

Что прекрасно работает: латексный коллектор http://img6.imageshack.us/img6/6757/screenshotewa.png

Хм, почти, так как на последней странице текущей главы "Lorem ipsum" он ведет себя так, как если бы я не указывал: \ addtolength {\ headwidth} {\ newtextwidth}: латексный заголовок в конце главы http://img11.imageshack.us/img11/6072/screenshotwbd.png

Как я могу это исправить?

Редактировать

Я также использую fancyhdr.

2-е редактирование :

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

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

Зачем мне нужен один столбец после нескольких столбцов на той же странице с маржинальным паром? Представьте себе исходный код статьи с небольшими подсказками на полях. (Вот для чего предназначен пакет листинга)

Ответы [ 2 ]

7 голосов
/ 06 мая 2009

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

Вероятно, вам стоит добавить пакет fancyhdr и использовать его. Я считаю, что он хорошо себя ведет в многоколонке.

Хорошо, так что это почти наверняка предметная область. Вы выполняете настройку ширины в вашей новой multi среде. Когда ваш текст заканчивается в мульти-среде, вы не заполнили последнюю страницу; Заголовки не устанавливаются, пока страница не будет заполнена. Таким образом, ваше окружение mutlti завершает работу над окном, вы покидаете область действия, а затем страница завершается и отправляется. Используя старую ширину.

Установить ширину заголовка и параметры вне среды.

5 голосов
/ 10 мая 2009

Я запустил ваш тестовый документ. Кажется, есть ошибка в том, что \newlength{\newtextwidth} имеет глобальный эффект, и поэтому вызывает ошибку. Не уверен, почему это так, но я вытащил его из \newenvironment{multi} без какого-либо вреда.

Диагноз Чарли определенно верный. Альтернативное решение состоит в том, чтобы завершить страницу после мультиколей, но перед настройкой ширины, таким образом:

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

Я протестировал это решение, и на вашем образце документа он дает хорошие результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...