在 Tikz 中使用 `\hyperref`(森林)

在 Tikz 中使用 `\hyperref`(森林)

这是我可爱的小森林: 在此处输入图片描述

代码:

\documentclass[11pt,a4paper]{article}
\usepackage{forest}
\usepackage{hyperref}

\begin{document}
  \begin{forest}
    [Link to Country 
      [Link to United States]
      [Link to United Kingdom]
    ]
  \end{forest}

  \section{Country}
  \label{sec:country}
  \subsection{United States}
  \label{sec:country:us}
  \subsection{United Kingdom}
  \label{sec:country:ul}
\end{document}

现在我想将\hyperref森林的叶子放到相应的部分和子部分,这样当你点击链接到国家您将被引导至国家等等。以下是我尝试过的:

...
\begin{forest}
  [\hyperref[sec:country]{Link to Country}
    [\hyperref[sec:country:us]{Link to United States}]
    [\hyperref[sec:country:uk]{Link to United Kingdom}]
  ]
\end{forest}
...

不幸的是,我遇到了一堆错误,代码没有产生任何东西。我猜想宏hyperref扩展为破坏 Tikz 或forest语法的东西。但我对 Latex 了解不多,无法自己找到解决方案。

hyperref当我在森林外使用时,它工作正常。显然这些包没有问题。

\ref{...}看起来运行良好,所以显然它必须能够在 Tikz/forest 内部建立链接。

我该如何修复它?

答案1

您只需将可选参数设为\hyperref“invisible”即可forest:使用括号。

\documentclass[11pt,a4paper]{article}
\usepackage{forest}
\usepackage{hyperref}

\begin{document}

\begin{forest}
  [{\hyperref[sec:country]{Link to Country}}
    [{\hyperref[sec:country:us]{Link to United States}}]
    [{\hyperref[sec:country:uk]{Link to United Kingdom}}]
  ]
\end{forest}

\section{Country}
\label{sec:country}
\subsection{United States}
\label{sec:country:us}
\subsection{United Kingdom}
\label{sec:country:uk}

\end{document}

答案2

这是一个基于的便捷包装器egreg 的代码这使得树的规范变得不那么繁琐。

\documentclass[11pt,a4paper]{article}
\usepackage{forest}
\usepackage{hyperref}
\forestset{
  declare toks={country link}{},
  declare toks={country link label}{},
  country links/.style={
    before typesetting nodes={
      where content={}{}{
        split option={content}{|}{country link,country link label},
        delay={
          content/.process={OOw2}{country link}{country link label}{\hyperref[sec:##1]{##2}},
        }
      },
    },
  },
}
\begin{document}
\begin{forest}
  country links
  [country|Link to Country
    [country:us|Link to United States]
    [country:uk|Link to United Kingdom]
  ]
\end{forest}
\section{Country}
\label{sec:country}
\subsection{United States}
\label{sec:country:us}
\subsection{United Kingdom}
\label{sec:country:uk}
\end{document}

国家链接

相关内容