对于垂直文本,PGFPlots 和 hyperref 似乎不能很好地协同工作。例如,ylabel(垂直)将其 hyperref 框显示在中间,而不是垂直标签的位置和方向上。
有人知道解决方法吗?
(请注意两点:hyperref 框适用于 rotatebox 和水平标签)
\documentclass{article}
\usepackage[]{hyperref}
\usepackage[]{pgfplots}
\begin{document}
\rotatebox{90}{\href{http://www.google.com}{hello}}bye
\newline
\begin{tikzpicture}
\begin{axis}[xlabel = {\href{http://www.google.com}{Time}}, ylabel = {\href{http://www.google.com}{Length}}]
\end{axis}
\end{tikzpicture}
\end{document}
编辑:尽管杰克的答案(和马丁的答案)可以解决问题,但标签的“单位”部分仍然存在问题。(我应该在我的问题中发布完整的问题,而不是简化问题)。如下面的图片和代码所示,旋转单位部分并使其出现在预期位置(在单词“Length”结尾之后)似乎并不是一件容易的事:
\documentclass{article}
\usepackage[]{hyperref}
\usepackage[]{pgfplots}
\usepackage[]{tikz}
\usepgfplotslibrary{units}
\begin{document}
A plot with units:\newline
\begin{tikzpicture}
\begin{axis}[y label style={rotate=-90}, x unit = {\href{http://www.google.com}{\mathrm{s}}}, y unit = {\href{http://www.google.com}{\mathrm{m}}}, xlabel = {Time}, ylabel = {\rotatebox{90}{Length}}, title = {Axis}]
\end{axis}
\end{tikzpicture}
\end{document}
答案1
pgfplots
您可以使用旋转标签以y label style={rotate=-90}
使hyperref
框正确,然后使用 提供标签rotatebox
。使用此解决方法,hyperref
框具有正确的大小和位置。
(我还添加了\pgfplotsset{compat=1.3}
,这改善了轴标签的位置。但这对于解决方案来说不是必需的)
\documentclass{article}
\usepackage[]{hyperref}
\usepackage[]{pgfplots}
\pgfplotsset{compat=1.3}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xlabel = {\href{http://www.google.com}{Time}},
ylabel = {\rotatebox{90}{\href{http://www.google.com}{Length}}},
y label style={rotate=-90}
]
\end{axis}
\end{tikzpicture}
\end{document}
为了使此功能与units
库配合使用,您可以重新定义units
库中负责组装标签和单位的宏之一。以下代码检查我们是否正在定义 y 轴的标签,如果是,它将整个标签字符串(即标签和单位)括在 中rotatebox
:
\documentclass{article}
\usepackage{hyperref}
\usepackage{pgfplots}
\usepgfplotslibrary{units}
\makeatletter
\def\pgfplots@label@units#1{
\if#1y\rotatebox{90}{\fi%
\pgfkeysgetvalue{/pgfplots/#1label}{\pgfplots@loc@TMPa}%
\pgfplots@loc@TMPa\space\pgfplots@label@units@@{#1}%
\if#1y}\fi
}
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{axis}[y label style={rotate=-90},
x unit = {\href{http://www.google.com}{\mathrm{s}}},
y unit = {\href{http://www.google.com}{\mathrm{m}}},
xlabel = {Time}, ylabel = {Length}, title = {Axis}]
\end{axis}
\end{tikzpicture}
\end{document}
答案2
似乎 PGF/TikZ 的底层旋转代码不会旋转创建的额外href
框hyperref
。一种解决方法是使用\rotatebox
和\phantom
内容手动旋转它。\phantom
宏创建一个与内容尺寸相同的框,但不打印任何内容。\llap
然后使用宏使其与实际内容重叠,而不会将其推到一侧。通常\rlap
应该使用,但由于 90 度旋转,它必须重叠到左侧。
\documentclass{article}
\usepackage[]{hyperref}
\usepackage[]{pgfplots}
\usepackage[]{graphicx}
\begin{document}
\rotatebox{90}{\href{http://www.google.com}{hello}}bye
\newline
\begin{tikzpicture}
\begin{axis}[xlabel = {\href{http://www.google.com}{Time}}, ylabel = {%
\llap{\rotatebox{90}{\href{http://www.google.com}{\phantom{Length}}}}%
Length}]
\end{axis}
\end{tikzpicture}
\end{document}
这并不完美。生成的href
框不是 100% 处于其正确的水平位置,但它已经很接近并且在我看来已经足够好了。
您可能希望将其发送给 的作者pgfplots
,或许也发送给 的作者hyperref
。