如何将目录导出为文本?

如何将目录导出为文本?

我有一个 Tex 文件,\input其中包含许多不同的 Tex 文件。每个文件都有不同的章节和节声明,目前正在生成一个漂亮的目录。

我想要做的是以某种方式生成一个包含章节和节的文本文件,也许是这样的:

Chapter 1 Name
  Section 1.1 Name
  Section 1.2 Name
Chapter 2 Name
  Section 2.1 Name
  Section 2.2 Name

这样做的目的是为了方便地向人们发送我的目录,而无需复制粘贴和重新格式化。

答案1

这是一个基于 LaTeX 的解决方案,针对目录中的章节和部分条目而设计。

首先,生成toc文件,myfile.toc例如,如果myfile.tex包含

\documentclass{book}
\begin{document}
\tableofcontents
\chapter{First}
\section{First first}
\section{First second}
\chapter{Second}
\section{Second first}
\section{Second second}
\end{document}

然后latex myfile(或任何其他 LaTeX 版本)将生成myfile.toc包含

\contentsline {chapter}{\numberline {1}First}{3}
\contentsline {section}{\numberline {1.1}First first}{3}
\contentsline {section}{\numberline {1.2}First second}{3}
\contentsline {chapter}{\numberline {2}Second}{5}
\contentsline {section}{\numberline {2.1}Second first}{5}
\contentsline {section}{\numberline {2.2}Second second}{5}

现在在以下文档上运行 LaTeX,将其命名为toc2txt.tex。在执行此操作之前,请修改第一行,使其包含文件的名称。

\newcommand\toc{myfile} % <<< Replace myfile with the name of your tex/toc file (without extension)
\documentclass{article}
\newwrite\txtfile
\immediate\openout\txtfile=\toc.txt
\renewcommand\numberline[1]{#1 }
\def\levelch{chapter}
\def\levelsec{section}
\renewcommand\contentsline[3]%
  {\def\tmp{#1}%
   \ifx\tmp\levelch
     \immediate\write\txtfile{Chapter #2}%
   \else
     \ifx\tmp\levelsec
       \immediate\write\txtfile{\space\space Section #2}%
     \else
       %%% Code for further toc levels
     \fi
   \fi
  }
\begin{document}
\input{\toc.toc}
\end{document}

它将读取myfile.toc并生成myfile.txt包含以下内容的文件:

Chapter 1 First
  Section 1.1 First first
  Section 1.2 First second
Chapter 2 Second
  Section 2.1 Second first
  Section 2.2 Second second

答案2

许多 pdf 查看器都能够提取特定页面,因此一种可能性是从最终输出的 pdf 中提取带有目录的页面。但如果您想要更 TeXish 的方法,您可以创建一个新的 toc.tex 并输入 TOC 文件:

\documentclass{book} % match your original documentclass
\usepackage[draft]{hyperref}
\begin{document}
\input{myfile.toc}
\end{document}

hyperref 会改变内容的生成方式。如果您的原始文件使用 hyperref 包,那么这也应该如此。如果没有,则不会。草稿选项可防止 hyperref 尝试链接到不存在的页面。

相关内容