fancyheader 中的超链接部分名称

fancyheader 中的超链接部分名称

我正在尝试创建一个由 chaptername 和 sectionname (chaptername:sectionname) 组成的标题,它们分别是 chapter 和 section 的超链接。我使用的是匈牙利语,因此有很多重音词,而且据我所知,hyperref不支持重音链接,毕竟,不同章节的节名可以相同,所以我需要获取一些唯一的名称。因此,我生成了一个唯一的 ASCII 节名(请参阅\Section),并在\sectionmark中将其与节名连接起来,并在中\fancyhead尝试再次将它们分开并在命令中使用它们\hyperlink,但到目前为止我失败了。以下是简短的(不起作用的)代码示例:

\documentclass[pdftex,a4paper,12pt,oneside]{book}%

\usepackage[latin2]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[magyar]{babel}
\usepackage{fancyhdr}
\usepackage{xstring}
\usepackage{hyperref}
\usepackage{bookmark}

\hypersetup{colorlinks,                               linkcolor=blue!80,filecolor=Orange,urlcolor=red!60,citecolor=magenta,
              linktoc=all,
            hypertexnames=false,
            unicode=true,
            bookmarksnumbered=false,
        pdfmenubar=true,%
          pdftoolbar=true
         }

\newcommand{\chapterlinkname}{}
\newcommand{\setchapterlinkname}[1]{\renewcommand{\chapterlinkname}{#1}}
\newcommand{\chapterlink}[1]{\setchapterlinkname{lnk:chap#1}\hypertarget{\chapterlinkname}{}}
\newcommand{\Chapter}[2]{\newpage\chapterlink{#2} \chapter{#1}}

\newcommand{\sectionlinkname}{}
\newcommand{\setsectionlinkname}[1]{\renewcommand{\sectionlinkname}{#1}}
\newcommand{\sectionlink}[1]{\setsectionlinkname{\chapterlinkname:sec#1}\hypertarget{\sectionlinkname}{}}
\newcommand{\Section}[2]{\sectionlink{#2}\section{#1}}

\newcommand{\seclink}{}
\newcommand{\secname}{}
\newcommand{\mystrsplit}[4]{
  \renewcommand{#3}{\StrBefore{#1}{#2}}
  \renewcommand{#4}{\StrBehind{#1}{#2}}
}  

%------------------

\begin{document}

\pagestyle{fancy}
\fancyhf{} 
\renewcommand{\chaptermark}[1]{\markboth{##1}{}}
\renewcommand{\sectionmark}[1]{\markright{\sectionlinkname,##1}} 

\fancyhead[LO,RE]{\mystrsplit{\rightmark}{,}{\seclink}{\secname} \hyperlink{\chapterlinkname}{\bfseries\leftmark} : \hyperlink{\seclink}{\bfseries\secname}}  

\fancyhead[LE,RO]{\bfseries\thepage}
\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0pt}
\addtolength{\headheight}{2.5pt} 
\fancypagestyle{plain}{\fancyhead{}\renewcommand{\headrulewidth}{0pt}} 

\Chapter{Állóképek}{Allokepek}

\Section{Tükörkép}{Tukorkep}

\newpage

\Section{Sírkőgyártó}{Sirkogyarto}

\end{document}

我正在使用带有 TeXnicCenter 的 MiKTeX 2.9。

答案1

以下示例首先修复了 hyperref 和 magyar 之间的兼容性问题。两者都重新定义了\refstepcounter。然后\@currentHref是可用的,其中包含 hyperref 中使用的锚点的名称\refstepcounter。然后章节或部分的标题不需要用作目标或标签名称。

\documentclass[pdftex,a4paper,12pt,oneside]{book}%

\usepackage[latin2]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{fancyhdr}

\usepackage[magyar]{babel}
% magyar.ldf redefines \refstepcounter in \extrasmagyar
% and overwrites hyperref's definition.
% The following hacks work around this by
% restoring hyperref's definition that will
% then call magyar.ldf's version.
\begingroup
  \extrasmagyar
  \global\let\MagyarRefstepcounter\refstepcounter
\endgroup
\let\refstepcounter\MagyarRefstepcounter
\usepackage{hyperref}
\let\HyperrefRefstepcounter\refstepcounter
\addto\extrasmagyar{%
  \let\refstepcounter\HyperrefRefstepcounter
}
\usepackage{bookmark}

\hypersetup{colorlinks,
            linkcolor=blue!80,filecolor=Orange,
            urlcolor=red!60,citecolor=magenta,
            linktoc=all,
            hypertexnames=false,
            unicode=true,
            bookmarksnumbered=false,
        pdfmenubar=true,%
          pdftoolbar=true
         }

\begin{document}

\pagestyle{fancy}
\fancyhf{} 

% \@currentHref contains the anchor name
\makeatletter
\renewcommand{\chaptermark}[1]{%
  \markboth{\protect\hyperlink\@currentHref}{\thechapter. #1}}{}%
}
\renewcommand{\sectionmark}[1]{%
  \markright{\protect\hyperlink{\@currentHref}{\thesection. #1}}%
}

\fancyhead[LO,RE]{{\bfseries\leftmark} : {\bfseries\rightmark}}  

\fancyhead[LE,RO]{\bfseries\thepage}
\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0pt}
\addtolength{\headheight}{2.5pt} 
\fancypagestyle{plain}{\fancyhead{}\renewcommand{\headrulewidth}{0pt}} 

\chapter{Állóképek}

\section{Tükörkép}

\newpage

\section{Sírkogyártó}

\end{document}

相关内容