让 minipage 占据整个页面高度

让 minipage 占据整个页面高度

我正在尝试使用minipage为我的文档创建一种侧边栏。由于迷你页面具有背景颜色,并且文档用于查看而非打印,因此我希望迷你页面紧贴页面的三个边缘(顶部、左侧和底部)。

以下是我的想法:

\documentclass[10pt]{article}

%\usepackage{showframe}
\usepackage[landscape]{geometry}

\geometry{top=0cm, bottom=0cm, left=0cm, right=0cm}

\definecolor{sidebar}{RGB}{71,62,136}

\setlength{\parindent}{0pt}

\begin{document}

\noindent\fcolorbox{sidebar}{sidebar}%
{%
    \begin{minipage}[t][\textheight][t]{0.2\textwidth}
    \color{white} % White text
    \LARGE Hello

    \end{minipage}%
}

\end{document}

但是,minipage 稍微偏离了页面顶部,因此比页面大。因此,它被放置在第 2 页而不是第 1 页,并且仍然从页面顶部偏移:

在此处输入图片描述

我怎样才能使小页面紧靠所有三个边缘?

答案1

问题是由\topskipglue\fboxsep和参数引起的。下面是一个有效的示例,为了便于说明,\fboxrule夸大了\fboxsep和值:\fboxrule

\documentclass[10pt]{article}
\usepackage{xcolor}
\usepackage{calc}
\usepackage[landscape]{geometry}

\geometry{top=0cm, bottom=0cm, left=0cm, right=0cm}

\definecolor{sidebar}{RGB}{71,62,136}

\setlength{\parindent}{0pt}
\setlength{\fboxsep}{10pt}
\setlength{\fboxrule}{20pt}

\begin{document}
\setlength{\topskip}{0pt}

\fcolorbox{black}{sidebar}%
{%
    \begin{minipage}[t][\textheight-2\fboxsep-2\fboxrule][t]{0.2\textwidth}
    \color{white} % White text
    \LARGE Hello

    \end{minipage}%
}

\end{document}

截屏

此屏幕截图中的灰色来自我的 PDF 查看器显示的“页面后背景”;它不属于该页面,但显示完全\fcolorbox填充了页面。

这里有一个类似的例子,具有正常\fboxsep\fboxrule值,以及两个相同的页面,以说明如何设置和恢复\topskip其默认值(见下文):

\documentclass[10pt]{article}
\usepackage{xcolor}
\usepackage{calc}
\usepackage[landscape]{geometry}

\geometry{top=0cm, bottom=0cm, left=0cm, right=0cm}

\definecolor{sidebar}{RGB}{71,62,136}

\setlength{\parindent}{0pt}

\begin{document}
%\bgroup
\setlength{\topskip}{0pt}

\fcolorbox{sidebar}{sidebar}%
{%
    \begin{minipage}[t][\textheight-2\fboxsep-2\fboxrule][t]{0.2\textwidth}
    \color{white} % White text
    \LARGE Hello

    \end{minipage}%
}
\newpage
%\egroup

\fcolorbox{sidebar}{sidebar}%
{%
    \begin{minipage}[t][\textheight-2\fboxsep-2\fboxrule][t]{0.2\textwidth}
    \color{white} % White text
    \LARGE Hello

    \end{minipage}%
}
\end{document}

取消注释\bgroup\egroup调用以\topskip在第一页发送出去后恢复其正常值;然后你会看到

Overfull \vbox (1.6pt too high) has occurred while \output is active [2]

对于第二页,正如预期的那样。以下屏幕截图就是在这种情况下截取的;第一页有\topskip=0pt,而在第二页上,它有其默认值10pt(可以在\showthe\topskip取消注释的命令后看到\egroup):

截屏

笔记:

  • \topskip是在页面顶部(根据边距)和页面上第一个框的基线之间添加的粘连。第一个框的高度从 中扣除,\topskip以计算 TeX 自动插入的粘连;此外,如果结果为负数(即,当第一个框高于 时),则将插入的粘连设置为零\topskip

  • 您的例子缺失了xcolor

答案2

如果你对加载没有异议tikz你可以这样做

\documentclass[10pt]{article}
\usepackage{tikz}
%\usepackage{showframe}
\usepackage[landscape]{geometry}

%\geometry{top=0cm, bottom=0cm, left=0cm, right=0cm}

\definecolor{sidebar}{RGB}{71,62,136}

\begin{document}
\begin{tikzpicture}[overlay,remember picture]
\fill[sidebar] (current page.north west) rectangle 
([xshift=0.2\paperwidth]current page.south west);
\node[anchor=north west,text=white,font=\LARGE] at (current page.north west)  
{Hello};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

我认为编写此类框的最佳方式是使用包文本位置。它是为此目的而定制的,不会干扰页面上的其他材料,其余文本可以有正常的边距。如果您希望每个页面上都有该框,可以通过重新定义页面样式将文本框放置在页眉中。

太简单:

\documentclass[a4paper, 10pt]{article}

\usepackage{showframe}
\usepackage[landscape]{geometry}
\usepackage{xcolor}
\usepackage[absolute]{textpos}
\setlength{\TPHorizModule}{\paperwidth}
\setlength{\TPVertModule}{\paperheight}
\TPGrid[0mm,0mm]{10}{10}                        % Divide page in 10x10 grid 

\geometry{left=6.5cm}                           % with textpos you can have normal margins

\definecolor{sidebar}{RGB}{71,62,136}
\textblockcolour{sidebar}
\begin{document}

\begin{textblock}{2}(0,0)                       % Box is 0.2 paperheight place in upper left corner
\rule{0pt}{\paperheight}                        % Zero width rule to show the box
\end{textblock}

\end{document}

注意!灰色边框是背景,而不是页面周围的边框

在此处输入图片描述

相关内容