我正在用 Latex 编写一本技术书籍KOMA 脚本 srcbook
班级,我想只在词汇表和索引页上添加灰色边框。这样做的目的是让它们在合上书本时更容易找到,如下例所示:
我曾见过使用fancyhdr
或的类似解决方案tikz
,但 (1) 我不知道它们是否可以在不破坏 KOMA 的情况下直接应用,并且 (2) 我发现没有办法将边框限制在索引/词汇表页面上,而且我确信一定有一种明显的方法来同时完成这两件事。
更新:我找到了一个解决方案(见下文)使用eso-pic
和ifthen
包来绘制边框并etoolbox
修补theindex
环境并控制它出现的位置。
答案1
您可以将该包background
与 TikZ 和定义的节点结合使用current page
:
\documentclass{scrbook}
\usepackage[]{background}
\backgroundsetup{contents={}}
\usepackage{lipsum}
\usepackage{imakeidx}
\makeindex
\begin{document}
\index{a}\lipsum[1-10]
\AddEverypageHook{%
\tikz[remember picture,overlay]\draw[line width=1cm](current page.north east) rectangle (current page.south east);%
}
\printindex
\end{document}
答案2
我正在回答我自己的问题,希望有人以后会发现它有用。
我的解决方案受到启发并基于这个答案因为使用 Tikz 会导致类的一些奇怪行为scrbook
(至少在我的系统中)。我创建了两个新命令\addthumbindex
,\clearthumbindex
分别用于启用和禁用缩略图索引。第一个命令接收缩略图索引的颜色和宽度作为强制参数,如果您需要在 A4 中打印但希望将其裁剪为 B5,您还可以指定一个可选bleed
参数(下面的 MWE 显示了一个例子)。
但这个解决方案并不完美:正如您在下图中看到的,我无法在实际索引开始之前删除页面中的边框,所以我仍在寻找解决方案(无论是对我的方法的改进还是完全不同的方法)。编辑:已修复。
\documentclass[b5paper]{scrbook}
\usepackage[a4,cam,center]{crop} % to show cropping marks (if needed)
\usepackage{xcolor} % to have colors
\usepackage{eso-pic} % put things into background
\usepackage{ifthen} % support for conditionals
\usepackage{imakeidx} % to create the index
\usepackage{lipsum} % for sample text
\definecolor{thumbindexgray}{RGB}{102,102,102}
% patch `begin{theindex}` to add the border
\AtBeginEnvironment{theindex}{\addthumbindex[bleed]{.5cm}{thumbindexgray}}
% patch `end{theindex}` to clear the border
\AtEndEnvironment{theindex}{\clearthumbindex}
\newcommand{\addthumbindex}[3][]{
\newlength{\thumbindexwidth}
\setlength{\thumbindexwidth}{#2}
\ifthenelse{\equal{#1}{bleed}}{
%\clearpage (not needed if we patch 'theindex' environment)
\AddToShipoutPicture{% from package eso-pic: put something to the background
\ifthenelse{\isodd{\thepage}}{
% odd page: right bar
\AtPageLowerLeft{% start the bar at the bottom right of the page
\put(\LenToUnit{\dimexpr\paperwidth+\thumbindexwidth-2\thumbindexwidth},
\LenToUnit{\dimexpr-\thumbindexwidth}){% move it to the top right
\color{#3}\rule{2\thumbindexwidth}{\LenToUnit{\dimexpr\paperheight+2\thumbindexwidth}}%
}%
}%
}%
{%
% even page: left bar
\AtPageLowerLeft{% start the bar at the left bottom of the page
\put(\LenToUnit{\dimexpr\thumbindexwidth-2\thumbindexwidth},
\LenToUnit{\dimexpr-\thumbindexwidth}){% move it to the top right
\color{#3}\rule{2\thumbindexwidth}{\LenToUnit{\dimexpr\paperheight+2\thumbindexwidth}}%
}%
%\color{#3}\rule{\thumbindexwidth}{\LenToUnit\paperheight}%
}%
}%
}
}
{
%\clearpage (not needed if we patch 'theindex' environment)
\AddToShipoutPicture{% from package eso-pic: put something to the background
\ifthenelse{\isodd{\thepage}}{
% odd page: right bar
\AtPageLowerLeft{% start the bar at the bottom right of the page
\put(\LenToUnit{\dimexpr\paperwidth-\thumbindexwidth},0){% move it to the top right
\color{#3}\rule{\thumbindexwidth}{\LenToUnit\paperheight}%
}%
}%
}%
{%
% even page: left bar
\AtPageLowerLeft{% start the bar at the left bottom of the page
\color{#3}\rule{\thumbindexwidth}{\LenToUnit\paperheight}%
}%
}%
}
}
}
\newcommand{\clearthumbindex}{
\clearpage
\ClearShipoutPicture
}
\makeindex
\begin{document}
\input{fake_index.tex} % just a collection of \index{XXX}\lipsum[1-10]
% \addthumbindex[bleed]{.5cm}{thumbindexgray} % (not needed if patching 'theindex')
\printindex
% \clearthumbindex{} % (not needed if patching 'theindex')
\end{document}
编辑:我找到了一个解决方案,即修补使用该包theindex
生成的环境。供将来参考,代码在和中都有效,我假设类似的东西也适用于词汇表或首字母缩略词列表。我已将我的更改添加到上面的代码中,并在下方添加了最终结果的图片。makeindex
etoolbox
pdflatex
xelatex