题
我正在尝试使用这个使用multicols和chngpage包的新环境启动新的multicols环境时关闭marginpar:
\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}}
哪个效果很好: latex header http://img6.imageshack.us/img6/6757/screenshotewa.png
嗯,差不多,因为在当前章节的最后一页“Lorem ipsum”中,它的行为就像我没有指示它:\ addtolength {\ headwidth} {\ newtextwidth}: 本章末尾的乳胶标题http://img11.imageshack.us/img11/ 6072 / screenshotwbd.png我该如何解决?
修改强>:
我也在使用fancyhdr。
第二次修改:
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}
应该可以在“多个”之后在同一页面上继续单列,但是必须保持标题,就像在“多”页面内启动页面时一样。环境。
为什么我需要在具有marginpar的同一页面上的多列之后使用单列?想象一下,展示文章的源代码,边缘有一些小提示。 (这就是上市包的用途)
解决方案
我怀疑你的文字完成制作多元素盒后你的最后一个标题框正在构建,所以你已经超出了你的变化范围。它可以追溯到旧的价值。
您可能最好添加 fancyhdr 打包并使用它。我相信它在多列中表现得很好。
好的,所以这几乎可以肯定是范围的事情。您正在新的 multi
环境中执行adjustwidth。当您的文本在多个环境中用完时,您还没有填写最后一页;页面填充后才会设置标题。所以你的mutlti环境完成了框,你离开了范围,然后页面完成并发出。使用旧的宽度。
在环境外设置标题宽度和参数。
其他提示
我运行了你的测试文件。它似乎有一个错误, \ newlength {\ newtextwidth}
具有全局效果,因此会导致错误。不知道为什么会这样,但我把它从 \ newenvironment {multi}
中拉出来,没有任何不良影响。
查理的诊断肯定是正确的。另一种解决方案是在多核之后但在调整宽度之前结束页面,因此:
\newenvironment{multi}[1]{%
...}
{\end{multicols}\vfill\break\end{adjustwidth}}
我已经测试了这个解决方案,并且在您的示例文档中,它可以产生良好的输出。