如何将目录加载到 lt3graph 中?

如何将目录加载到 lt3graph 中?

问题就在标题里,真的。我想将目录加载到图形数据结构中。我想以某种方式保持各部分(章节、段落等)的顺序,但我不太确定如何做到这一点。我认为它可能免费(尽管是隐式的),仅凭其lt3graph实现方式。

平均能量损失

\documentclass{book}

\usepackage{lt3graph}

\begin{document}
\part{A}
\chapter{AA}
\section{AAA}
\subsection{AAAA}
\subsection{AAAB}
\section{AAB}
\subsection{AABA}
\subsection{AABB}
\subsection{AABC}
\chapter{AB}
\section{ABA}
\subsection{ABAA}
\subsection{ABAB}
\section{ABB}
\subsection{ABBA}
\subsection{ABBB}
\subsection{ABBC}
\part{B}
\section{B-A}
\section{B-B}
\chapter{BA}
\section{BAA}
\ExplSyntaxOn

\graph_new:N \g_sean_toc_graph

% Magic!  Probably reading the aux file for section definitions.

\centering
\graph_display_table:N \g_sean_toc_graph

\ExplSyntaxOff
\end{document}

答案1

这是一个开始。

感谢 egreg 将我的 LaTeX3 和 LaTeX2 混合版本转换为纯 LaTeX3,并指出如何从 lt3graph 命名全局宏,这简化了此处的编码,因为所有目录都是在组内排版的。

抱歉,第一个答案的代码有误(父母的名字被覆盖并且从未恢复,我只需要添加合适的分组)。

etoc 包用于通过\tableofcontents合适的lt3graph实体进行填充。一旦生成,图形就可以与lt3graph命令一起使用。这里我们只使用\graph_display_table:N它来显示它。

\documentclass{book}
\usepackage[paperwidth=42cm]{geometry}
\usepackage{lt3graph}
\usepackage{etoc}
\usepackage[table]{xcolor}


\ExplSyntaxOn

\graph_new:N \g_sean_toc_graph
\cs_generate_variant:Nn \graph_gput_vertex:Nn { NV }
\cs_generate_variant:Nn \graph_gput_edge:Nnn { NVV }
\etocsetstyle {part}
              {}
              {
               \graph_gput_vertex:NV \g_sean_toc_graph \etocthename
              }
              {}
              {}

\clist_map_inline:nn { chapter , section , subsection }
 {
  \etocsetstyle { #1 }
                {
                 \group_begin:
                 \tl_set_eq:NN \parentname \etocthename
                }
                {}
                {
                 \graph_gput_vertex:NV \g_sean_toc_graph \etocthename
                 \graph_gput_edge:NVV \g_sean_toc_graph \parentname \etocthename
                }
                {
                 \group_end:
                }
 }

\etocsettocstyle {\etocsettocdepth{subsection}\thispagestyle{empty}}
                 {}
\ExplSyntaxOff

\begin{document}

\tableofcontents

% Now that the graph is computed we can display it 

\ExplSyntaxOn

\group_begin:
\centering \graph_display_table:N \g_sean_toc_graph \par
\group_end:

\ExplSyntaxOff

% and you can then continue to do things with the lt3graph commands

\part{A}
\chapter{AA}
\section{AAA}
\subsection{AAAA}
\subsection{AAAB}
\section{AAB}
\subsection{AABA}
\subsection{AABB}
\subsection{AABC}
\chapter{AB}
\section{ABA}
\subsection{ABAA}
\subsection{ABAB}
\section{ABB}
\subsection{ABBA}
\subsection{ABBB}
\subsection{ABBC}
\part{B}
\section{B-A}
\section{B-B}
\chapter{BA}
\section{BAA}
\end{document}

toc 作为 lt3graph

警告:该图片是在旧的 TL2010 上生成的,我在其中添加了 LaTeX3 包,我不确定它在真正最新的安装中是否呈现完全相同的效果。

这也是不显示子部分且更具可读性的图片: toc 作为 lt3graph 细分为各个部分


在阅读了更多lt3graph文档后,我意识到最好使用数字作为顶点的键,并将可能带有超链接的名称作为标签。事实上,键在某些时候会被去标记化,因此它们无法保存指向文档单元的超链接。但对于可以与每个顶点(或边)相邻的标签则不是这样。

因此,这里是实现这一点的变体。请注意部分样式中的一点etoc微妙之处,以便减少第二部分的目录深度,否则表格确实太大了。然而,生成的图表确实不知道第二部分的子节。

此处和上面的代码假定没有单独的章节或节,即位于文档的开始处且未包含在 中\part

\documentclass{book}
\usepackage[paperwidth=42cm]{geometry}
\usepackage{lt3graph}
\usepackage{etoc}
\usepackage[table]{xcolor}
\usepackage{hyperref}
\hypersetup{colorlinks}

\ExplSyntaxOn

\graph_new:N \g_sean_toc_graph
\cs_generate_variant:Nn \graph_gput_vertex:Nnn { NVV }
\cs_generate_variant:Nn \graph_gput_edge:Nnn { NVV }
\etocsetstyle {part}
              {}
              {
               \graph_gput_vertex:NVV \g_sean_toc_graph \etocthenumber \etocthelinkedname
              }
              {\etociffirst{}{\etocsettocdepth{section}}}
              {}

\clist_map_inline:nn { chapter , section , subsection }
 {
  \etocsetstyle { #1 }
                {
                 \group_begin:
                 \tl_set_eq:NN \parentnumber \etocthenumber
                }
                {}
                {
                 \graph_gput_vertex:NVV \g_sean_toc_graph \etocthenumber \etocthelinkedname
                 \graph_gput_edge:NVV \g_sean_toc_graph \parentnumber \etocthenumber
                }
                {
                 \group_end:
                }
 }

\etocsettocstyle {\etocsettocdepth{subsection}\thispagestyle{empty}}
                 {}
\ExplSyntaxOff

\begin{document}

\tableofcontents

% Now that the graph is computed we can display it 

\ExplSyntaxOn

\group_begin:
\centering
\graph_display_table:N \g_sean_toc_graph
\par 
\group_end:

\ExplSyntaxOff

% and you can continue do things with the lt3graph commands
\part{ONE}
\chapter{Chapter one}
\section{Section one one}
\subsection{Subsection one one one}
\subsection{Subsection one  one two}
\section{Section one two}
\subsection{Subsection one two one}
\subsection{Subsection one  two two}

\chapter{Chapter two}
\section{Section two one}
\subsection{Subsection two one one}
\subsection{Subsection two one two}
\section{Section two two}
\subsection{Subsection two two one}
\subsection{Subsection two  two two}
\section{Section two three}
\subsection{Subsection two three one}
\subsection{Subsection two  three two}

\part{TWO}
\chapter{Chapter three}
\section{Section three one}
\subsection{Subsection three one one}
\subsection{Subsection three one two}

\chapter{Chapter four}
\section{Section four one}
\subsection{Subsection four one one}
\subsection{Subsection four one two}
\subsection{Subsection four one three}
\section{Section four two}
\subsection{Subsection four two one}
\subsection{Subsection four two two}
\subsection{Subsection four two three}
\end{document}

显示的表格在原始文档中确实具有功能性超链接(第二列中的红色名称)。

第三个目录如图所示

最后备注:包装埃托克其文档中已经有了以图形形式显示目录的各种示例,但它们并未使用lt3graph。请注意,文档分段单元的图形结构相当无趣,文档etoc只是关于显示目录,而不是像lt3graph允许的那样分析其结构....以获得更有趣的图形。

相关内容