目录中未显示的短标题 {hyperref}

目录中未显示的短标题 {hyperref}

我正在使用 TexShop,因为没有类似导航的东西(或者至少我不知道如何创建它)并且我的文档包含大约 200-300 页,所以我尝试使用该包fancyhdr和在我的 PDF 文件的页脚中构建自己的导航\nameref

问题是我的标题很长。我使用短标题来缩短它们,但现在我的目录也被缩短了。我想知道是否有可能在\nameref将完整标题放入目录中的同时使用短标题。

如果有人知道解决方案就太好了。提前谢谢。

你好,我们又见面了,

正如您所要求的,代码最少。代码如下(我希望代码最少,因为我对这个东西比较陌生):

\documentclass{book}

\usepackage[colorlinks,cross-references,bookmarks=true]{hyperref}

\usepackage{fancyhdr} 
\pagestyle{fancy}
\lfoot{\nameref{S:A}, \nameref{S:B}, \nameref{S:C}}

\begin{document}

\tableofcontents
\newpage

\section[Intro]{Vorbemerkung}\label{S:A}
\newpage

\section[Paul]{Paul ist ein Mann von Format}\label{S:B}
\newpage

\section[Klaus]{Klaus}\label{S:C}

\end{document}

@Caramdir:我的 TexShop 以自己的 pdf 显示文档,这使我能够通过单击“苹果 + 鼠标”从此 pdf 切换到 tex 文件并返回,这是我的导航工具之一,其工作方式如下:我转到 pdf 的目录,通过超链接转到我想要的部分,然后在文档中单击“苹果 + 鼠标”以精确到达 tex 文档中的相同点。我知道许多步骤,但我看不到其他方法。通过将超文本放在标题中,我可以改进这个过程,因为我可以轻松地跳回到目录附近(精确到第一章)。

当我使用其他程序打开文档时,“苹果 + 鼠标”选项不起作用,这就是为什么您的建议在这种情况下没有帮助。

答案1

如果要保留目录中部分单元的强制参数的内容,同时使用页眉/页脚中的可选参数的内容,则需要重新定义命令\@part(控制部分的信息)、\@chapter(控制章节的信息)和 \@sect(控制其他部分单元的信息)。以下是重新定义的示例代码(\makeatletter和之间的行\makeatother):

\documentclass{book}
\usepackage[colorlinks,bookmarks=true]{hyperref}
\usepackage{fancyhdr} 
\pagestyle{fancy} 
\lfoot{\nameref{S:A}, \nameref{S:B}, \nameref{S:C}}

\makeatletter
\def\@part[#1]#2{%
    \ifnum \c@secnumdepth >-2\relax
      \refstepcounter{part}%
      \addcontentsline{toc}{part}{\thepart\hspace{1em}#2}%
    \else
      \addcontentsline{toc}{part}{#2}%
    \fi
    \markboth{}{}%
    {\centering
     \interlinepenalty \@M
     \normalfont
     \ifnum \c@secnumdepth >-2\relax
       \huge\bfseries \partname~\thepart
       \par
       \vskip 20\p@
     \fi
     \Huge \bfseries #2\par}%
    \@endpart}
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
                       \if@mainmatter
                         \refstepcounter{chapter}%
                         \typeout{\@chapapp\space\thechapter.}%
                         \addcontentsline{toc}{chapter}%
                                   {\protect\numberline{\thechapter}#2}%
                       \else
                         \addcontentsline{toc}{chapter}{#2}%
                       \fi
                    \else
                      \addcontentsline{toc}{chapter}{#2}%
                    \fi
                    \chaptermark{#1}%
                    \addtocontents{lof}{\protect\addvspace{10\p@}}%
                    \addtocontents{lot}{\protect\addvspace{10\p@}}%
                    \if@twocolumn
                      \@topnewpage[\@makechapterhead{#2}]%
                    \else
                      \@makechapterhead{#2}%
                      \@afterheading
                    \fi}
\def\@sect#1#2#3#4#5#6[#7]#8{%
  \ifnum #2>\c@secnumdepth
    \let\@svsec\@empty
  \else
    \refstepcounter{#1}%
    \protected@edef\@svsec{\@seccntformat{#1}\relax}%
  \fi
  \@tempskipa #5\relax
  \ifdim \@tempskipa>\z@
    \begingroup
      #6{%
        \@hangfrom{\hskip #3\relax\@svsec}%
          \interlinepenalty \@M #8\@@par}%
    \endgroup
    \csname #1mark\endcsname{#7}%
    \addcontentsline{toc}{#1}{%
      \ifnum #2>\c@secnumdepth \else
        \protect\numberline{\csname the#1\endcsname}%
      \fi
      #8}%
  \else
    \def\@svsechd{%
      #6{\hskip #3\relax
      \@svsec #8}%
      \csname #1mark\endcsname{#7}%
      \addcontentsline{toc}{#1}{%
        \ifnum #2>\c@secnumdepth \else
          \protect\numberline{\csname the#1\endcsname}%
        \fi
        #8}}%
  \fi
  \@xsect{#5}}
\makeatother

\begin{document}

\tableofcontents
\part[Short part title]{A part title not so short}
\chapter[Short title]{A really really really really really really really long title}
\section[Intro]{Vorbemerkung}\label{S:A} \newpage

\section[Paul]{Paul ist ein Mann von Format}\label{S:B} \newpage

\section[Klaus]{Klaus}\label{S:C}

\end{document}

相关内容