5 如何用tiltleps宏包制作字典页眉

发布于 2022-04-09 22:10:19

请问各位大佬,如何用titleps宏包实现如图所示的字典页眉?
p4YBAFvH43-AH-YRAATiKbxe3x0072_b.jpg

查看更多

关注者
0
被浏览
1.1k
雾月
雾月 2022-04-10
这家伙很懒,什么也没写!

核心功能是标记在页眉处出现的项。

\protected\def\markcontext#1#2{%
  \begingroup
    \let\label\relax \let\index\relax \let\glossary\relax
    \unrestored@protected@xdef\@themark {#2}%
    \@temptokena \expandafter{\@themark}%
    \marks#1{\the\@temptokena}%
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi}

\ExplSyntaxOn
\cs_new:Npn \@removetl #1#2 { \tl_range:Nnn #1 { \tl_count:o {#2} + 1 }{ -1 } }
\ExplSyntaxOff

\def\@headtext{}
\newmarks\@headmark
\newmarks\@pinyinmark
\providecommand\lettrine[3][]{\textbf{#2}#3}
\protected\def\dictitem#1#2{\lettrine{#1}{[#2]}\g@addto@macro\@headtext{{#1}}%
  \markcontext\@headmark{\@headtext}%
  \markcontext\@pinyinmark{#2}}

\def\@headoddleft{\thepage\quad
  \botmarks\@headmark\quad
  \firstmarks\@pinyinmark --\botmarks\@pinyinmark
  \xdef\@headtext{\@removetl\@headtext{\botmarks\@headmark}}}
\def\@headevenright{\botmarks\@headmark\quad
  \firstmarks\@pinyinmark --\botmarks\@pinyinmark
  \quad\thepage
  \xdef\@headtext{\@removetl\@headtext{\botmarks\@headmark}}}

这一部分无需加载任何宏包。

这里定义了一个 \@removetl,目的是当存储的页眉项与真正出现在页眉中的项不同时,需要保存未真正出现在页眉中的项,否则下一页页眉将损失这些项。

之所以会出现存储的页眉项与真正出现在页眉中的项不同的情况,是因为 TeX 在 shipout 之前就已经执行了存储功能的那部分宏,此时 TeX 还未决定哪些内容输出至当前页。

至于使用 titleps 还是 fancyhdr 是无关紧要的。

\documentclass[twoside]{article}

\makeatletter
\protected\def\markcontext#1#2{%
  \begingroup
    \let\label\relax \let\index\relax \let\glossary\relax
    \unrestored@protected@xdef\@themark {#2}%
    \@temptokena \expandafter{\@themark}%
    \marks#1{\the\@temptokena}%
  \endgroup
  \if@nobreak\ifvmode\nobreak\fi\fi}

\ExplSyntaxOn
\cs_new:Npn \@removetl #1#2 { \tl_range:Nnn #1 { \tl_count:o {#2} + 1 }{ -1 } }
\ExplSyntaxOff

\def\@headtext{}
\newmarks\@headmark
\newmarks\@pinyinmark
\providecommand\lettrine[3][]{\textbf{#2}#3}
\protected\def\dictitem#1#2{\lettrine{#1}{[#2]}\g@addto@macro\@headtext{{#1}}%
  \markcontext\@headmark{\@headtext}%
  \markcontext\@pinyinmark{#2}}

\def\@headoddleft{\thepage\quad
  \botmarks\@headmark\quad
  \firstmarks\@pinyinmark --\botmarks\@pinyinmark
  \xdef\@headtext{\@removetl\@headtext{\botmarks\@headmark}}}
\def\@headevenright{\botmarks\@headmark\quad
  \firstmarks\@pinyinmark --\botmarks\@pinyinmark
  \quad\thepage
  \xdef\@headtext{\@removetl\@headtext{\botmarks\@headmark}}}

\usepackage{ctex}
\usepackage{xpinyin}
\usepackage[a5paper,includeheadfoot,margin=1cm,headsep=10pt]{geometry}
\usepackage{lettrine}
\usepackage{zhlipsum}


%% titleps
\usepackage{titleps}
\newpagestyle{dict}{
  \setheadrule{0.4pt}
  \sethead[][][\@headevenright]{\@headoddleft}{}{}
  \setfoot{}{}{}}

%% fancyhdr
%\usepackage{fancyhdr}
%\fancypagestyle{dict}{
%  \def\headrulewidth{0.4pt}
%  \fancyfoot{}
%  \fancyhead[OL]{\@headoddleft}
%  \fancyhead[ER]{\@headevenright}}

\makeatother

\pagestyle{dict}

\begin{document}

\dictitem{哥}{\pinyin{ge1}}\zhlipsum[3][name=zhufu]

\dictitem{歌}{\pinyin{ge1}}\zhlipsum[6][name=zhufu]

\dictitem{割}{\pinyin{ge1}}\zhlipsum[8][name=zhufu]

\dictitem{革}{\pinyin{ge2}}\zhlipsum[9][name=zhufu]

\dictitem{愅}{\pinyin{ge2}}\zhlipsum[12][name=zhufu]

\dictitem{鞈}{\pinyin{ge2}}\zhlipsum[14][name=zhufu]

\dictitem{閤}{\pinyin{ge2}}\zhlipsum[14][name=zhufu]

\dictitem{蛤}{\pinyin{ge2}}\zhlipsum[15][name=zhufu]

\dictitem{韐}{\pinyin{ge2}}\zhlipsum[16][name=zhufu]

\dictitem{阁}{\pinyin{ge2}}\zhlipsum[8][name=zhufu]

\dictitem{格}{\pinyin{ge2}}\zhlipsum[10][name=zhufu]

\end{document}

image.png

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览