执行

执行

我想在每个部分|小节|子小节|段落的底部制作一个导航菜单。

在此处输入图片描述

此文档将嵌入到应用程序的二进制文件中。这是用户单击帮助时将看到的内容。由于此文档的性质(太长,无法打印,但打印)它应该为使用鼠标的观众提供一些导航帮助

beamer我设想在每张幻灯片的底部放置一些类似于班级导航菜单的东西。article不过,我正在使用这个班级(尽管经过了大量修改)。

当我搜索这个的时候,我发现

执行

请注意,我将使用 POSIX 目录符号来表示父部分(.. 和 ../..)。实现可能需要菜单宏,其中包含一些 if/then 逻辑,可以检测该部分是否有父部分,以确定“跳转 ../..”按钮是否应该可见或至少应明显禁用。定义titlesec需要有钩子,以便可以创建到父部分(..)和父父部分(../..)的自动链接。

我需要能够

  • 使用静态链接引用目录完毕
  • 动态引用父级 .. 部分(可能可以使用获取当前 \label 的值
  • 动态引用父级 ../.. 部分
  • 参考上一页\thepage - 1 完毕
  • 参考下页\thepage + 1 完毕

模型实施

\documentclass{article}
\usepackage{fontspec}
\usepackage{lipsum}
\usepackage[compact,explicit,noindentafter]{titlesec}
\usepackage{fancyhdr}
\usepackage{xcolor}
\usepackage[hidelinks]{hyperref}
\usepackage{amsmath,amssymb}


\fancypagestyle{digitalpage} % This style could inject the implementation of the navigation menu into titlesec definitions maybe (so that it can be toggled easily)?
{
  \fancyhf{} % clear all fields
  \renewcommand{\headrulewidth}{0pt}
  \lhead{}
  \lfoot{}
  \cfoot{}
  \rfoot{%
    \bfseries\footnotesize\thepage
  }%
}%


\newcommand\navigationmenu{\vspace{1ex}\noindent\footnotesize\textcolor{gray}{\sffamily Jump to Contents $\Uparrow$} | \textcolor{gray}{\hyperlink{sub}{\sffamily Jump .. $\uparrow$}} | \textcolor{gray}{\hyperlink{sec}{\sffamily Jump ../.. $\upuparrows$}} | \textcolor{gray}{\sffamily $\leftarrow$ Previous Page} | \textcolor{gray}{\sffamily $\rightarrow$ Next Page}} % contains some logic, if section has no ../.., don't reveal. 


% SECTION
\titleformat{\section}[hang]{\Huge\bfseries}{\thesection}{1cm}{#1}[\thispagestyle{digitalpage}]
% SUBSECTION
\titleformat{\subsection}[hang]{\Large\bfseries}{\thesubsection}{1cm}{#1}

\begin{document}
\hypertarget{sec}{\section{Something}}
\lipsum[1]
\navigationmenu
\hypertarget{sub}{\subsection{Something something}}
\lipsum[2]
\navigationmenu
\end{document}

输出

在此处输入图片描述

答案1

这是一个解决方案。

我们的想法是重新定义\ttl@useclass以获取有关我们正在开始的分段级别的信息,以便我们可以准备下一个分段navigationmenu,并在开始新的分段之前顺便显示navigationmenu预览部分。

\renewcommand*\ttl@useclass[2]{%
\ifnum\@nameuse{ttll@#2}>\c@secnumdepth\relax\stepcounter{mtpar}\fi%
\displaynavigationmenu%
\renewcommand*\displaynavigationmenu{\navigationmenu{#2}}%
\oldttl@useclass{#1}{#2}}

笔记

  1. 假设的默认值secnumdepth是,因此如果更改此值,则需要更改代码(可能稍后完成)
  2. \navigationmenu由于字体大小改变而定义中使用的分组。
  3. 为避免navigationmenu在下一页顶部出现此情况,添加了 nobreak。
  4. 内容、预览页和下一页不在这里考虑(OP 已经完成)。

\documentclass{article}
\usepackage{lipsum}
\usepackage[compact,explicit,noindentafter]{titlesec}
\usepackage{fancyhdr}
\usepackage{xcolor}
\usepackage[hidelinks]{hyperref}
\usepackage{amsmath,amssymb}

\fancypagestyle{digitalpage} % This style could inject the implementation of the navigation menu into titlesec definitions maybe (so that it can be toggled easily)?
{
  \fancyhf{} % clear all fields
  \renewcommand{\headrulewidth}{0pt}
  \lhead{}
  \lfoot{}
  \cfoot{}
  \rfoot{%
    \bfseries\footnotesize\thepage
  }%
}%

\newcommand*\displaynavigationmenu{}
\newcounter{mtpar}%  global counter for paragraphs 

\makeatletter
\newcommand{\mtlink}[2]{%
\ifnum\@nameuse{ttll@#1}>\c@secnumdepth\relax%  % if parent .. section is paragraph
\textcolor{gray}{\hyperlink{#1*.\themtpar}{\sffamily Jump .. $\uparrow$}} | 
\else% % if parent .. section is (sub...)section
\textcolor{gray}{\hyperlink{#1.\csname the#1\endcsname}{\sffamily Jump .. $\uparrow$}} |
\fi
\ifnum\value{#2}>0%  % if parent parent ../.. section exist
\textcolor{gray}{\hyperlink{#2.\csname the#2\endcsname}{\sffamily Jump ../.. $\upuparrows$}} |
%\else
%no parant ../.. here
\fi}


\newcommand\navigationmenu[1]{%
\begingroup
\nobreak\vspace{1ex}\nobreak
\noindent\footnotesize\textcolor{gray}{\sffamily Jump to Contents $\Uparrow$} |
\ifcase\@nameuse{ttll@#1}\or
\mtlink{section}{part}\or 
\mtlink{subsection}{section}\or 
\mtlink{subsubsection}{subsection}\or 
\mtlink{paragraph}{subsubsection}\fi
\textcolor{gray}{\sffamily $\leftarrow$ Previous Page} | 
\textcolor{gray}{\sffamily $\rightarrow$ Next Page}
\endgroup}

\let\oldttl@useclass\ttl@useclass
\renewcommand*\ttl@useclass[2]{%
\ifnum\@nameuse{ttll@#2}>\c@secnumdepth\relax\stepcounter{mtpar}\fi%
\displaynavigationmenu%
\renewcommand*\displaynavigationmenu{\navigationmenu{#2}}%
\oldttl@useclass{#1}{#2}}
\makeatother

\AtEndDocument{\displaynavigationmenu}% for the last ...section

% SECTION
\titleformat{\section}[hang]{\Huge\bfseries}{\thesection}{1cm}{#1}[\thispagestyle{digitalpage}]
% SUBSECTION
\titleformat{\subsection}[hang]{\Large\bfseries}{\thesubsection}{1cm}{#1}

\begin{document}
\section{Something}
\lipsum[1]

\subsection{Something something}
\lipsum[2]

\paragraph{Something foo}

\lipsum[3]

\subsection{Something something else}
\lipsum[3]

\subsubsection{Something something foo}
\lipsum[3]

\paragraph{Something foo}
\lipsum[3]
\end{document}

相关内容