![在 Tikz 中使用 `\hyperref`(森林)](https://linux22.com/image/347332/%E5%9C%A8%20Tikz%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20%60%5Chyperref%60%EF%BC%88%E6%A3%AE%E6%9E%97%EF%BC%89.png)
代码:
\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}