我正在尝试使用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
问题是由\topskip
glue\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}
注意!灰色边框是背景,而不是页面周围的边框