如何在页边空白处按字母顺序垂直放置更多字母?

如何在页边空白处按字母顺序垂直放置更多字母?

原始问题及其可接受的答案显示如何将字母设置为页边距并按字母顺序垂直定位

出现两个问题需要纠正。两个问题都已通过图片进行了说明。

首要问题

第一个问题出现在一页上词条以多个字母开头时。在这种情况下,需要在该页上放置更多缩略索引。

首要问题

第二期

第二个问题出现在标题字母直接(或多或少)从页面顶部开始的情况,如第二张图片所示(标题字母 Gg 从第 175 页开始,但带有 G 的缩略索引从第 174 页开始)。在这种情况下,缩略索引的字母通常必须与页面上所有词条的第一个字母相对应。

在此处输入图片描述

ME 关注:

\documentclass[8pt,c5paper,twocolumn]{extbook}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage[paper=c5paper, top=1.5cm, headsep=0.4cm, bottom=1.5cm, left=1cm, right=1cm]{geometry}
\usepackage{fancyhdr}

\usepackage{tikz}
\usetikzlibrary{calc}

\usepackage{graphicx}
\usepackage{color}

% for some blindtext
\usepackage{lipsum}

% COLORS
\definecolor{darkgreen}{rgb}{0.4, 0.01, 0.24}
\definecolor{color1}{RGB}{182, 86, 0}
\definecolor{color2}{RGB}{143, 9, 6}
\definecolor{color3}{RGB}{3, 23, 118}
\definecolor{color4}{RGB}{0, 82, 168}
\definecolor{color5}{RGB}{0, 85, 142}
\definecolor{color6}{RGB}{0, 115, 162}
\definecolor{color7}{RGB}{34, 146, 186}
\definecolor{color8}{RGB}{40, 159, 153}
\definecolor{color9}{RGB}{0, 125, 111}
\definecolor{color10}{RGB}{4, 107, 60}
\definecolor{color11}{RGB}{71, 134, 81}
\definecolor{color12}{RGB}{109, 134, 42}
\definecolor{color13}{RGB}{205, 194, 18}
\definecolor{color14}{RGB}{204, 162, 24}

% Thumb indexes' colors
\newcommand\BoxColor{%
\ifcase\theletternum darkgreen!30\or color1\or color2\or color3\or color4\or color5\or color6\or color7\or color8\or color9\or color10%
\or color11\or color12\or color13\or color14\or color1\or color2\or color3\or color4\or color5\or color6\or color7\or color8\or color9%
\or color10\or color11\or color12\or color13\or color14\or color1\or color2\or color3\or color4\or color5\or color6\else color7\or color8\or color9\or color10\or color11\or color12\fi}

%FANCY PAGE STYLES
\pagestyle{fancy}

% THUMB INDEXES
% new counter to hold the current number of the letter to determine the vertical position
\newcounter{letternum}
% newcounter for the sum of all letters to get the right height of a box
\newcounter{lettersum}
\setcounter{lettersum}{33}
% some margin settings
\newlength{\thumbtopmargin}
\setlength{\thumbtopmargin}{1cm}
\newlength{\thumbbottommargin}
\setlength{\thumbbottommargin}{2.5cm}
% calculate the box height by dividing the page height
\newlength{\thumbheight}
\pgfmathsetlength{\thumbheight}{%
(\paperheight-\thumbtopmargin-\thumbbottommargin)%
/%
\value{lettersum}
}
% box width
\newlength{\thumbwidth}
\setlength{\thumbwidth}{0.5cm}
% style the boxes
\tikzset{
thumb/.style={
   text=white,
   minimum height=\thumbheight,
   text width=\thumbwidth,
   outer sep=0pt,
   font=\sffamily\bfseries,
 }
 }
 \newcommand{\oddthumb}[1]{%
    % see pgfmanual.pdf for more information about this part
    \begin{tikzpicture}[remember picture, overlay]
        \node [thumb,fill=\BoxColor, text centered,anchor=north east,] at ($%
            (current page.north east)-%
            (0,\thumbtopmargin+\value{letternum}*\thumbheight)%
        $) {#1};
   \end{tikzpicture}
  }
 \newcommand{\eventhumb}[1]{%
    % see pgfmanual.pdf for more information about this part
    \begin{tikzpicture}[remember picture, overlay]
        \node [thumb,fill=\BoxColor, text centered,anchor=north west,] at ($%
            (current page.north west)-%
            (0,\thumbtopmargin+\value{letternum}*\thumbheight)%
        $) {#1};
   \end{tikzpicture}
   }
   % create a new command to set a new lettergroup with thumb indexes
  \newcommand{\lettergroup}[1]{%
  %\setcounter{page}{1}
  \fancyhead[LO]{\fontfamily{phv}\selectfont{\textbf{\rightmark}}\eventhumb{#1}}%
  \fancyhead[RE]{\fontfamily{phv}\selectfont{\textbf{\leftmark}}\oddthumb{#1}}%
 % step the counter of the letters
 \stepcounter{letternum}%
 }


 \newcommand*{\dictchar}[1]{
 \centerline{\parbox[c][3cm][c]{3cm}{%
        \centering
        \fontsize{24}{24}
        \selectfont
        {#1}}}
  }

  % DICTIONARY PAGE STYLE
  \fancypagestyle{dictstyle}{%
  \renewcommand{\headrulewidth}{0.4pt}
  \fancyhf{}
  \fancyhead[LE,LO]{{\fontfamily{phv}\selectfont{\textbf{\rightmark}}}}
  \fancyhead[CO,CE]{\thepage}%the page numbers will be printed when the dictionary is ready
   \fancyhead[RE,RO]{{\fontfamily{phv}\selectfont{\textbf{\leftmark}}}}}

 % middle rule  
 \setlength{\columnsep}{20pt}
 \setlength{\columnseprule}{0.01pt}

 \newcommand{\HRule}{\rule{\linewidth}{0.1mm}} % rule line


 \begin{document}
 \twocolumn
 \pagestyle{dictstyle}

 \lettergroup{a}
 \dictchar{A~a}
 \lipsum[1-10]

 \lettergroup{b}
 \dictchar{B~b}
 \lipsum[1]

 \lettergroup{c}
 \dictchar{C~c}
 \lipsum[1]

 \lettergroup{d}
 \dictchar{D~d}
 \lipsum[1-5]

 \lettergroup{e}
 \dictchar{E~e}
 \lipsum[1-10]

 \lettergroup{f}
 \dictchar{F~f}
 \lipsum[1-3]

 \end{document}

答案1

已编辑以处理变音标签。已重新编辑以纠正单个页面上出现多个标签时的标签颜色。

这是使用现有界面的修复方法fancy,而不是我其他答案的自制混合物。让我展示一下变化:

初始化:

\def\thumbnew{}
\def\thumbold{}

如果页面上没有新的缩略图,则使用最后一个旧缩略图

\usepackage{everypage}
\AddEverypageHook{\if\relax\thumbnew\relax\xdef\thumbnew{\thumbold}\fi}

以下是对 的更改\lettergroup。在这里,与我原来的方法相反,我必须创建一个\Let1= a\Let2= \"a\Let3=b系列宏(现在这将允许使用变音符参数)。然后,我创建了\thumbnew缩略图插槽的枚举列表。在第 1 页上是2,1,,在第 2 页上是5,4,3,,等等。我没有\fancyhead使用单个缩略图调用 ,这会覆盖同一页上的任何先前缩略图,而是将参数传递给它\expandafter\ethumbs\thumbnew\relax\relax\relax以解析\thumbnew并一次性将所有这些缩略图插入\fancyhead

 \newcommand{\lettergroup}[1]{%
% step the counter of the letters
  \refstepcounter{letternum}%
  \expandafter\gdef\csname Let\theletternum\endcsname{#1}%
  \xdef\thumbnew{\theletternum,\thumbnew}%
  \fancyhead[LO]{\fontfamily{phv}\selectfont{\textbf{\rightmark}}%
    \expandafter\ethumbs\thumbnew\relax\relax\relax}%
  \fancyhead[RE]{\fontfamily{phv}\selectfont{\textbf{\leftmark}}%
    \expandafter\othumbs\thumbnew\relax\relax\relax}%
 }

缩略图解析器就是这些递归例程。它们每次解析一个槽并调用相应的缩略图。但它们也会在退出时重置\thumbnew为,{}并将设置\thumbold为缩略图列表中的第一个(即最新)参数。

\def\ethumbs#1,#2\relax{\if\relax#1\relax\else\eventhumb{#1}\fi%
                       \if\relax#2\relax\else\ethumbs#2\relax\fi%
                       \gdef\thumbnew{}%
                       \gdef\thumbold{#1,}%
}
\def\othumbs#1,#2\relax{\if\relax#1\relax\else\oddthumb{#1}\fi%
                      \if\relax#2\relax\else\othumbs#2\relax\fi%
                       \gdef\thumbold{#1,}%
                       \gdef\thumbnew{}%
}

最后,创建缩略图本身。与我原来的方法不同,宏的参数是插槽编号(而不是制表符字母),用于确定带有 的制表符的垂直位置\thumbtopmargin+#1*\thumbheight。关联的制表符字母用 重新构成\csname Let#1\endcsname(即\Let1\Let2等,其中包含与插槽关联的字母)。

 \newcommand{\oddthumb}[1]{%
    % see pgfmanual.pdf for more information about this part
    \begin{tikzpicture}[remember picture, overlay]
        \node [thumb,fill=\BoxColor{#1}, text centered,anchor=north east,] at ($%
            (current page.north east)-%
            (0,\thumbtopmargin+#1*\thumbheight)%
        $) {\csname Let#1\endcsname};
   \end{tikzpicture}
  }
 \newcommand{\eventhumb}[1]{%
    % see pgfmanual.pdf for more information about this part
    \begin{tikzpicture}[remember picture, overlay]
        \node [thumb,fill=\BoxColor{#1}, text centered,anchor=north west,] at ($%
            (current page.north west)-%
            (0,\thumbtopmargin+#1*\thumbheight)%
        $) {\csname Let#1\endcsname};
   \end{tikzpicture}
   }

在这些宏中,\Boxcolor被重新定义为接受一个参数(槽号)。这需要重新定义\Boxcolor

\newcommand\BoxColor[1]{%
\ifcase#1 darkgreen!30\or color1\or color2\or color3\or color4\or color5\or color6\or color7\or color8\or color9\or color10%
\or color11\or color12\or color13\or color14\or color1\or color2\or color3\or color4\or color5\or color6\or color7\or color8\or color9%
\or color10\or color11\or color12\or color13\or color14\or color1\or color2\or color3\or color4\or color5\or color6\else color7\or color8\or color9\or color10\or color11\or color12\fi}

或者,如果 OP 更喜欢我的其他解决方案的颜色,

\def\BoxColor#1{red!\the\numexpr103-#1-#1-#1\relax!blue}

后一种形式适用于 34 个或更少的标签。如果标签数量更多,则只#1允许减去两个,而不是三个。

以下是 MWE:

\documentclass[8pt,c5paper,twocolumn]{extbook}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage[paper=c5paper, top=1.5cm, headsep=0.4cm, bottom=1.5cm, left=1cm, right=1cm]{geometry}
\usepackage{fancyhdr}

\usepackage{tikz}
\usetikzlibrary{calc}

\usepackage{graphicx}
\usepackage{color}

% for some blindtext
\usepackage{lipsum}

% COLORS
\definecolor{darkgreen}{rgb}{0.4, 0.01, 0.24}
\definecolor{color1}{RGB}{182, 86, 0}
\definecolor{color2}{RGB}{143, 9, 6}
\definecolor{color3}{RGB}{3, 23, 118}
\definecolor{color4}{RGB}{0, 82, 168}
\definecolor{color5}{RGB}{0, 85, 142}
\definecolor{color6}{RGB}{0, 115, 162}
\definecolor{color7}{RGB}{34, 146, 186}
\definecolor{color8}{RGB}{40, 159, 153}
\definecolor{color9}{RGB}{0, 125, 111}
\definecolor{color10}{RGB}{4, 107, 60}
\definecolor{color11}{RGB}{71, 134, 81}
\definecolor{color12}{RGB}{109, 134, 42}
\definecolor{color13}{RGB}{205, 194, 18}
\definecolor{color14}{RGB}{204, 162, 24}

% Thumb indexes' colors
\newcommand\BoxColor[1]{%
\ifcase#1 darkgreen!30\or color1\or color2\or color3\or color4\or color5\or color6\or color7\or color8\or color9\or color10%
\or color11\or color12\or color13\or color14\or color1\or color2\or color3\or color4\or color5\or color6\or color7\or color8\or color9%
\or color10\or color11\or color12\or color13\or color14\or color1\or color2\or color3\or color4\or color5\or color6\else color7\or color8\or color9\or color10\or color11\or color12\fi}

% ALTERNATE COLOR SCHEME
%\def\BoxColor#1{red!\the\numexpr103-#1-#1-#1\relax!blue}

%FANCY PAGE STYLES
\pagestyle{fancy}

% THUMB INDEXES
% new counter to hold the current number of the letter to determine the vertical position
\newcounter{letternum}
% newcounter for the sum of all letters to get the right height of a box
\newcounter{lettersum}
\setcounter{lettersum}{33}
% some margin settings
\newlength{\thumbtopmargin}
\setlength{\thumbtopmargin}{1cm}
\newlength{\thumbbottommargin}
\setlength{\thumbbottommargin}{2.5cm}
% calculate the box height by dividing the page height
\newlength{\thumbheight}
\pgfmathsetlength{\thumbheight}{%
(\paperheight-\thumbtopmargin-\thumbbottommargin)%
/%
\value{lettersum}
}
% box width
\newlength{\thumbwidth}
\setlength{\thumbwidth}{0.5cm}
% style the boxes
\tikzset{
thumb/.style={
   text=white,
   minimum height=\thumbheight,
   text width=\thumbwidth,
   outer sep=0pt,
   font=\sffamily\bfseries,
 }
 }
\def\thumbnew{}
\def\thumbold{}
\usepackage{everypage}
\AddEverypageHook{\if\relax\thumbnew\relax\xdef\thumbnew{\thumbold}\fi}

\def\ethumbs#1,#2\relax{\if\relax#1\relax\else\eventhumb{#1}\fi%
                       \if\relax#2\relax\else\ethumbs#2\relax\fi%
                       \gdef\thumbnew{}%
                       \gdef\thumbold{#1,}%
}
\def\othumbs#1,#2\relax{\if\relax#1\relax\else\oddthumb{#1}\fi%
                      \if\relax#2\relax\else\othumbs#2\relax\fi%
                       \gdef\thumbold{#1,}%
                       \gdef\thumbnew{}%
}

 \newcommand{\oddthumb}[1]{%
    % see pgfmanual.pdf for more information about this part
    \begin{tikzpicture}[remember picture, overlay]
        \node [thumb,fill=\BoxColor{#1}, text centered,anchor=north east,] at ($%
            (current page.north east)-%
            (0,\thumbtopmargin+#1*\thumbheight)%
        $) {\csname Let#1\endcsname};
   \end{tikzpicture}
  }
 \newcommand{\eventhumb}[1]{%
    % see pgfmanual.pdf for more information about this part
    \begin{tikzpicture}[remember picture, overlay]
        \node [thumb,fill=\BoxColor{#1}, text centered,anchor=north west,] at ($%
            (current page.north west)-%
            (0,\thumbtopmargin+#1*\thumbheight)%
        $) {\csname Let#1\endcsname};
   \end{tikzpicture}
   }
   % create a new command to set a new lettergroup with thumb indexes
 \newcommand{\lettergroup}[1]{%
% step the counter of the letters
  \refstepcounter{letternum}%
  \expandafter\gdef\csname Let\theletternum\endcsname{#1}%
  \xdef\thumbnew{\theletternum,\thumbnew}%
  \fancyhead[LO]{\fontfamily{phv}\selectfont{\textbf{\rightmark}}%
    \expandafter\ethumbs\thumbnew\relax\relax\relax}%
  \fancyhead[RE]{\fontfamily{phv}\selectfont{\textbf{\leftmark}}%
    \expandafter\othumbs\thumbnew\relax\relax\relax}%
 }


 \newcommand*{\dictchar}[1]{
 \centerline{\parbox[c][3cm][c]{3cm}{%
        \centering
        \fontsize{24}{24}
        \selectfont
        {#1}}}
  }

  % DICTIONARY PAGE STYLE
  \fancypagestyle{dictstyle}{%
  \renewcommand{\headrulewidth}{0.4pt}
  \fancyhf{}
  \fancyhead[LE,LO]{{\fontfamily{phv}\selectfont{\textbf{\rightmark}}}}
  \fancyhead[CO,CE]{\thepage}%the page numbers will be printed when the dictionary is ready
   \fancyhead[RE,RO]{{\fontfamily{phv}\selectfont{\textbf{\leftmark}}}}}

 % middle rule  
 \setlength{\columnsep}{20pt}
 \setlength{\columnseprule}{0.01pt}

 \newcommand{\HRule}{\rule{\linewidth}{0.1mm}} % rule line


 \begin{document}
 \twocolumn
 \pagestyle{dictstyle}

 \lettergroup{a}
 \dictchar{A~a}
 \lipsum[1-4]

 \lettergroup{\"a}
 \dictchar{\"A~\"a}
 \lipsum[6-10]

 \lettergroup{b}
 \dictchar{B~b}
 \lipsum[1]

 \lettergroup{c}
 \dictchar{C~c}
 \lipsum[1]

 \lettergroup{d}
 \dictchar{D~d}
 \lipsum[1-5]

 \lettergroup{e}
 \dictchar{E~e}
 \lipsum[1-10]

 \lettergroup{f}
 \dictchar{F~f}
 \lipsum[1-23]

 \lettergroup{g}
 \dictchar{G~g}
 \lipsum[1-23]
 \lettergroup{h}
 \lettergroup{i}
 \lettergroup{j}
 \lettergroup{k}
 \lettergroup{l}
 \lettergroup{m}
 \lettergroup{n}
 \lettergroup{o}
 \lettergroup{\"o}
 \lettergroup{p}
 \lettergroup{q}
 \lettergroup{r}
 \lettergroup{s}
 \lettergroup{s}
 \lettergroup{t}
 \lettergroup{u}
 \lettergroup{v}
 \lettergroup{w}
 \lettergroup{x}
 \lettergroup{y}
 \lettergroup{z}
\lipsum[1-15]

 \end{document}

这是一页,显示了标签上变音符号的无缝使用。

在此处输入图片描述

答案2

我不用fancy,而是用自制的混合体。我编辑了删除不需要的fancytikz调用。另外,我没有使用你的颜色,而是使用了一种改变颜色的算法。最后,\lettergroup目前这只适用于 ascii ,所以没有变音的 e 会得到制表符。

我用everypage与我在每章颜色样本。在这种情况下,我使用 来\AtThisPageHook向文档引入新选项卡,并使用\AtEveryPageHook来重申最后一个已知选项卡(指向没有引入新选项卡的选项卡页)。我还使用\AtEveryPageHook来翻转偶数/奇数页上的选项卡。

以下是一些代码重点。 \lettergroup已更改如下: \CurrentLetter包含最新的选项卡名称,供后续的一次性调用\AddEverypageHook(在 时调用\CLet=0)使用。 \Clet包含最新的选项卡编号(a=0、b=1、...)。 调用 调用\atxy当前页面的选项卡。

  \newcommand{\lettergroup}[1]{%
  \gdef\CurrentLetter{#1}%
  \gdef\CLet{\the\numexpr `#1 - `a\relax}%
  \atxy{#1}%
  \ifnum\CLet=0\AddEverypageHook{%
    \smash{\hspace*{\dimexpr-\PageLeftMargin-\hoffset+\localX\relax}%
    \raisebox{%
      \dimexpr\PageTopMargin+\voffset-\Yloc-\CLet\dYloc\relax}%
      {\expandafter\mytab\expandafter{\CurrentLetter}}}}%
  \fi
 }

如上所述,宏\atxy为当前页面添加一个选项卡,它使用\csname Let#1\endcsname\dYloc(扩展为\Leta、等)来计算垂直向下平移选项卡\Letb的增量数。\dYloc

\newcommand\atxy[1]{%
  \expandafter\def\csname Let#1\endcsname{\the\numexpr `#1 - `a\relax}%
 \AddThispageHook{\smash{\hspace*{\dimexpr-\PageLeftMargin-\hoffset+\localX\relax}%
  \raisebox{%
    \dimexpr\PageTopMargin+\voffset-\Yloc-\csname Let#1\endcsname\dYloc\relax}%
    {\mytab{#1}}}}%
}

在这个定义中\atxy,你会注意到,我能够在一个页面上获取多个选项卡的唯一方法是在每次调用期间创建一个唯一的宏(#1被制表的字母)

\expandafter\def\csname Let#1\endcsname{\the\numexpr `#1 - `a\relax}%

生成\Leta= 0\Letb=1等,并将其用作 y 轴偏移距离的乘数。在放弃将 定义\Let为滚动索引作为替代方案后,我采用了这种方法。使用该方法,它总是使用页面上的最终值\Let,而不是所需的滚动值。

以下everypage逻辑

\AddEverypageHook{%
  \ifdim\localX=\ThisX\gdef\localX{\AltX}\else\gdef\localX{\ThisX}\fi%
}

是每页从左到右切换标签,反之亦然。

最后,

\def\mytab#1{\stackon[-11pt]{%
  \textcolor{red!\the\numexpr391-`#1-`#1-`#1\relax!blue}{%
    \rule{\tabwidth}{\tabheight}}}{\textcolor{white}{\sffamily\bfseries#1}}}

是定义标签本身的内容。

用户参数包括

\def\ThisX{0in}% This page x-location of tab
\def\AltX{6.11in}% Alternate page x-location of tab
\Yloc=2.15cm\relax% Y location of first tab
\dYloc=16.6pt\relax% downward shift of successive tabs
\def\tabwidth{19.5pt}% tab width
\def\tabheight{\the\dimexpr\the\dYloc+.2pt\relax}% tab height

这是我的 MWE

\documentclass[8pt,c5paper,twocolumn]{extbook}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage[paper=c5paper, top=1.5cm, headsep=0.4cm, bottom=1.5cm, left=1cm, right=1cm]{geometry}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{xcolor}
% for some blindtext
\usepackage{lipsum}

   % create a new command to set a new lettergroup with thumb indexes
  \newcommand{\lettergroup}[1]{%
  \gdef\CurrentLetter{#1}%
  \gdef\CLet{\the\numexpr `#1 - `a\relax}%
  \atxy{#1}%
  \ifnum\CLet=0\AddEverypageHook{%
    \smash{\hspace*{\dimexpr-\PageLeftMargin-\hoffset+\localX\relax}%
    \raisebox{%
      \dimexpr\PageTopMargin+\voffset-\Yloc-\CLet\dYloc\relax}%
      {\expandafter\mytab\expandafter{\CurrentLetter}}}}%
  \fi
 }

 \newcommand*{\dictchar}[1]{
 \centerline{\parbox[c][3cm][c]{3cm}{%
        \centering
        \fontsize{24}{24}
        \selectfont
        {#1}}}
  }

  % DICTIONARY PAGE STYLE
  \fancypagestyle{dictstyle}{%
  \renewcommand{\headrulewidth}{0.4pt}
  \fancyhf{}
  \fancyhead[LE,LO]{{\fontfamily{phv}\selectfont{\textbf{\rightmark}}}}
  \fancyhead[CO,CE]{\thepage}%the page numbers will be printed when the dictionary is ready
   \fancyhead[RE,RO]{{\fontfamily{phv}\selectfont{\textbf{\leftmark}}}}}

 % middle rule  
 \setlength{\columnsep}{20pt}
 \setlength{\columnseprule}{0.01pt}

 \newcommand{\HRule}{\rule{\linewidth}{0.1mm}} % rule line

\usepackage{everypage,stackengine}

% THESE ARE LaTeX DEFAULTS; CAN CHANGE IF NEEDED.
\def\PageTopMargin{1in}
\def\PageLeftMargin{1in}
\newlength\Yloc
\newlength\dYloc
\def\localX{-1in}
\def\ThisX{0in}
\def\AltX{6.11in}
\Yloc=2.15cm\relax
\dYloc=16.6pt\relax
\def\tabwidth{19.5pt}
\def\tabheight{\the\dimexpr\the\dYloc+.2pt\relax}
% SYNTAX \atxy{This page X}{Alt page X}{y}{content}
\newcommand\atxy[1]{%
  \expandafter\def\csname Let#1\endcsname{\the\numexpr `#1 - `a\relax}%
 \AddThispageHook{\smash{\hspace*{\dimexpr-\PageLeftMargin-\hoffset+\localX\relax}%
  \raisebox{%
    \dimexpr\PageTopMargin+\voffset-\Yloc-\csname Let#1\endcsname\dYloc\relax}%
    {\mytab{#1}}}}%
}
\AddEverypageHook{%
  \ifdim\localX=\ThisX\gdef\localX{\AltX}\else\gdef\localX{\ThisX}\fi%
}
\def\mytab#1{\stackon[-11pt]{%
  \textcolor{red!\the\numexpr391-`#1-`#1-`#1\relax!blue}{%
    \rule{\tabwidth}{\tabheight}}}{\textcolor{white}{\sffamily\bfseries#1}}}
 \begin{document}
 \twocolumn
 \pagestyle{dictstyle}

\lettergroup{a}
 \dictchar{A~a}
 \lipsum[1-10]

 \lettergroup{b}
 \dictchar{B~b}
 \lipsum[1]

 \lettergroup{c}
 \dictchar{C~c}
 \lipsum[1]

 \lettergroup{d}
 \dictchar{D~d}
 \lipsum[1-5]

 \lettergroup{e}
 \dictchar{E~e}
 \lipsum[1-10]

 \lettergroup{f}
 \dictchar{F~f}
 \lipsum[1-15]

 \lettergroup{g}
 \lettergroup{h}
 \lettergroup{i}
 \lettergroup{j}
 \lettergroup{k}
 \lettergroup{l}
 \lettergroup{m}
 \lettergroup{n}
 \lettergroup{o}
 \lettergroup{p}
 \lettergroup{q}
 \lettergroup{r}
 \lettergroup{s}
 \lettergroup{s}
 \lettergroup{t}
 \lettergroup{u}
 \lettergroup{v}
 \lettergroup{w}
 \lettergroup{x}
 \lettergroup{y}
 \lettergroup{z}
\lipsum[1-15]

 \end{document}

这是一个有多个标签的页面

在此处输入图片描述

这是一个没有新标签的页面

在此处输入图片描述

这是标签的颜色范围(仅通过人工调用的方式显示)

在此处输入图片描述

相关内容