![如何将目录导出为文本?](https://linux22.com/image/346963/%E5%A6%82%E4%BD%95%E5%B0%86%E7%9B%AE%E5%BD%95%E5%AF%BC%E5%87%BA%E4%B8%BA%E6%96%87%E6%9C%AC%EF%BC%9F.png)
我有一个 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 尝试链接到不存在的页面。