交互式 SVG

交互式 SVG

我希望能够单击图像中的(白色)框内,例如: 在此处输入图片描述 然后跳转到该函数的描述。我试过:

\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&#45;&gt;Node1 -->
<g id="edge1" class="edge"><title>Node0&#45;&gt;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-pocgtoolsocgxocgx2

最完整的手册和示例是ocgx此处提供的包:ocgx-手册ocgx这里有 一个漂亮的包演示:演示-ocgx

我不太明白您的请求,也许我没有按照您的要求去做。

在下面的代码中,单击矩形fie2会改变矩形的显示fie1并显示单词definition。当然也可以采用不同的方式,显示或不显示箭头等。

我曾经tikz绘制并显示矩形,但你也可以隐藏和显示其他内容,例如文本图像

在下面的代码中,node (a)是一个显示默认单词 的矩形fie1Node (b)是一个包含链接的矩形,该链接使我所调用的显示单词 的fie2图层可见。fie1definition

\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}

下图中,该ocgfie1不活跃并且显示的消息是默认的fie1

非活动性 ocg

在下面的图片中,ocg图层fie1已经活性通过单击fie2,现在显示单词definition

主动式ocg

如果我没有正确理解您的请求,请说出来。

使用 www.DeepL.com/Translator 翻译

相关内容