在新环境中生成书签?

在新环境中生成书签?

我想动态创建书签,每次我使用自定义标题(用定义\newenvironment)时,标题文本将成为书签名称。

我正在使用书签包hyperref,并且我考虑在环境声明中使用\pdfbookmark\section,但我需要能够将环境内容传递到命令中,以便书签文本与标题文本匹配。

我也考虑过使用\begin{section}and \end{section},例如:

\newenvironment{heading}{\begin{section}}{\end{section}}

但是我只得到了书签名称的首字母,这弄乱了我的标题:

enter image description here

有 7 个标题,所以我的标题现在以数字开头。如何使用未编号的部分\begin{section}

此外,仅取“附录”标题的首字母作为书签,其余文本位于下一行。

这是一个非常简单的例子,其中标题出现在单独的页面上。当我使用 pdflatex 编译它时,我希望书签指向每个标题的页面。

\documentclass[11pt]{article}
\usepackage[colorlinks=true,linkcolor=blue,urlcolor=black,bookmarksopen=true]{hyperref} %bookmarks for pdf
\usepackage[open, openlevel=1]{bookmark}

\newenvironment{heading}{\fontsize{16}{19.2}\bfseries\selectfont\section*{}}{\vspace{3mm}}

\begin{document}
\thispagestyle{plain}


\begin{heading}First Heading\end{heading}

Text in the first section

\newpage

\begin{heading}Second Heading\end{heading}

Text in the second section

\end{document}

如何配置在我的heading环境中每次使用时设置的书签?

答案1

没有必要使用环境,但如果你坚持,你总是可以考虑使用environ

enter image description here

\documentclass{article}

\usepackage{environ}
\usepackage[bookmarksopen = true]{hyperref}

\newcommand{\headingfont}{\Large\bfseries}
\NewEnviron{heading}{%
  \par\addvspace{5mm}
  \noindent
  {\headingfont
    \raisebox{\baselineskip}[0pt][0pt]{\pdfbookmark[1]{\BODY}{\BODY}}% Set bookmark
    \BODY}% Set heading
  \par\nobreak
  \addvspace{3mm}
  \noindent\ignorespacesafterend
}

\begin{document}

\begin{heading}
First Heading
\end{heading}
Text in the first section

\newpage

\begin{heading}
Second Heading
\end{heading}
Text in the second section

\end{document}

\headingfont可以根据您的需要进行调整。

相关内容