
Я готовлю техническую книгу в Latex с использованиемСкрипт КОМА 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
которые могут использоваться для включения и отключения thumbindex соответственно. Первая команда получает цвет и ширину thumbindex в качестве обязательных аргументов, и вы также можете указать необязательный bleed
аргумент, если вам нужно напечатать в формате A4, но вы хотите обрезать его до B5 (пример 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}
EDIT: Я нашел решение, исправив theindex
среду, созданную с makeindex
помощью etoolbox
пакета. Для справки на будущее, код работает как в , так и pdflatex
в xelatex
, и я предполагаю, что что-то похожее будет работать с глоссариями или списками сокращений. Я добавил свои изменения в код выше и изображение конечного результата ниже.