我正在尝试创建一个由 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}