![交互式 SVG](https://linux22.com/image/376328/%E4%BA%A4%E4%BA%92%E5%BC%8F%20SVG.png)
我希望能够单击图像中的(白色)框内,例如:
然后跳转到该函数的描述。我试过:
\documentclass[twoside]{book}
\usepackage{float}
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\usepackage{ifpdf}
\ifpdf
\usepackage[pdftex,pagebackref=true]{hyperref}
\else
\usepackage[ps2pdf,pagebackref=true]{hyperref}
\fi
\hypersetup{%
colorlinks=true,%
linkcolor=blue,%
citecolor=blue,%
unicode%
}
\begin{document}
\hypersetup{pageanchor=false,
bookmarksnumbered=true,
pdfencoding=unicode
}
\section{\texorpdfstring{fie1()}{fie1()}}
References \mbox{\hyperlink{aa_8h_af60813d22831048d88007bf793ba9df2}{fie2}} ().
Here is the call graph for this function:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=180pt]{aa_8h_a321294a1af6610f2dc1563ebee9cdfbe_cgraph}
\end{center}
\end{figure}
\section{\texorpdfstring{fie2()}{fie2()}}
\end{document}
包含基于(文件.dot
)的图像:
digraph "fie1"
{
// INTERACTIVE_SVG=YES
edge [fontname="Helvetica",fontsize="10",labelfontname="Helvetica",labelfontsize="10"];
node [fontname="Helvetica",fontsize="10",shape=record];
rankdir="LR";
Node0 [label="fie1",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled", fontcolor="black"];
Node0 -> Node1 [color="midnightblue",fontsize="10",style="solid"];
Node1 [label="fie2",height=0.2,width=0.4,color="black", fillcolor="white", style="filled",URL="$aa_8h.html#af60813d22831048d88007bf793ba9df2"];
}
但这会导致无法点击的情况。我也尝试使用 svg(安装 Inkscape 之后):
\documentclass[twoside]{book}
\usepackage{float}
\usepackage{svg}
\usepackage[utf8]{inputenc}
\usepackage{ifpdf}
\ifpdf
\usepackage[pdftex,pagebackref=true]{hyperref}
\else
\usepackage[ps2pdf,pagebackref=true]{hyperref}
\fi
\hypersetup{%
colorlinks=true,%
linkcolor=blue,%
citecolor=blue,%
unicode%
}
\begin{document}
\hypersetup{pageanchor=false,
bookmarksnumbered=true,
pdfencoding=unicode
}
\section{\texorpdfstring{fie1()}{fie1()}}
References \mbox{\hyperlink{aa_8h_af60813d22831048d88007bf793ba9df2}{fie2}} ().
Here is the call graph for this function:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includesvg{aa_8h_a321294a1af6610f2dc1563ebee9cdfbe_cgraph}
\end{center}
\end{figure}
\section{\texorpdfstring{fie2()}{fie2()}}
\end{document}
必要的 SVG 文件为:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
<!-- Title: fie1 Pages: 1 -->
<svg width="108pt" height="28pt"
viewBox="0.00 0.00 108.00 28.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 24)">
<title>fie1</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-24 104,-24 104,4 -4,4"/>
<!-- Node0 -->
<g id="node1" class="node"><title>Node0</title>
<polygon fill="#bfbfbf" stroke="black" points="0,-0.5 0,-19.5 32,-19.5 32,-0.5 0,-0.5"/>
<text text-anchor="middle" x="16" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">fie1</text>
</g>
<!-- Node1 -->
<g id="node2" class="node"><title>Node1</title>
<g id="a_node2"><a xlink:href="aa_8h.html#af60813d22831048d88007bf793ba9df2" target="_top" xlink:title="fie2">
<polygon fill="white" stroke="black" points="68,-0.5 68,-19.5 100,-19.5 100,-0.5 68,-0.5"/>
<text text-anchor="middle" x="84" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">fie2</text>
</a>
</g>
</g>
<!-- Node0->Node1 -->
<g id="edge1" class="edge"><title>Node0->Node1</title>
<path fill="none" stroke="midnightblue" d="M32.3076,-10C39.8047,-10 49.0314,-10 57.5491,-10"/>
<polygon fill="midnightblue" stroke="midnightblue" points="57.7754,-13.5001 67.7754,-10 57.7754,-6.5001 57.7754,-13.5001"/>
</g>
</g>
</svg>
但不幸的是也没有结果。
有一个限制,即图像不能手工绘制,因为它是自动生成的,并且文档中可以包含相当多此类图像,当底层代码发生变化时,这些图像也会发生变化。很可能可以修改生成代码。
有任何想法吗?
答案1
这可以通过名为ocg
(可选内容组)的 pdf 图层来实现。这些是 pdf 文件的图层,只需单击鼠标即可显示或隐藏。我知道并非所有 pdf 阅读器都支持它们,Adobe reader
或者Evince
管理Foxit reader
这些ocg
图层。
有几个包允许使用它们:ocg
,,,和。ocg-p
ocgtools
ocgx
ocgx2
最完整的手册和示例是ocgx
此处提供的包:ocgx-手册ocgx
这里有 一个漂亮的包演示:演示-ocgx
我不太明白您的请求,也许我没有按照您的要求去做。
在下面的代码中,单击矩形fie2
会改变矩形的显示fie1
并显示单词definition
。当然也可以采用不同的方式,显示或不显示箭头等。
我曾经tikz
绘制并显示矩形,但你也可以隐藏和显示其他内容,例如文本或图像。
在下面的代码中,node (a)
是一个显示默认单词 的矩形fie1
。Node (b)
是一个包含链接的矩形,该链接使我所调用的显示单词 的fie2
图层可见。fie1
definition
\documentclass{article}
\usepackage[tikz]{ocgx2}
\begin{document}
\begin{tikzpicture}
\node (a) at (0,0) [draw,very thick,rounded corners=1pt,minimum height=1cm,minimum width=2cm] {fie1};
\node (b) at (4,0) [draw,very thick,rounded corners=1pt,minimum height=1cm,minimum width=2cm,switch ocg=fie1] {fie2};
\path[->](a) edge [very thick,blue](b);
\begin{scope}[ocg={name=fie1,ref=fie1,status=invisible}]
\node (a) at (0,0) [draw,very thick,rounded corners=1pt,minimum height=1cm,minimum width=2cm,fill=white] {definition};
\end{scope}
\end{tikzpicture}
\end{document}
下图中,该ocg
层fie1
是不活跃并且显示的消息是默认的fie1
。
在下面的图片中,ocg
图层fie1
已经活性通过单击fie2
,现在显示单词definition
。
如果我没有正确理解您的请求,请说出来。
使用 www.DeepL.com/Translator 翻译