问题就在标题里,真的。我想将目录加载到图形数据结构中。我想以某种方式保持各部分(章节、段落等)的顺序,但我不太确定如何做到这一点。我认为它可能免费(尽管是隐式的),仅凭其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}
警告:该图片是在旧的 TL2010 上生成的,我在其中添加了 LaTeX3 包,我不确定它在真正最新的安装中是否呈现完全相同的效果。
这也是不显示子部分且更具可读性的图片:
在阅读了更多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
允许的那样分析其结构....以获得更有趣的图形。