如何创建一个明确的目录以供手动编辑?

如何创建一个明确的目录以供手动编辑?

我有一个很大的文档(包含多个目录和文件,编译需要很长时间),其中包含目录。我想用它制作一个简短的 latex 文档,其中包含相同的目录,但这次要明确,以便我可以手动编辑目录(例如删除或重命名标题,或仅选择其中的一部分)。

即我想编辑目录而不编辑 250 页的文档。结果应该是一个新的 .pdf 文件(原始项目可以保持不变,不需要更改)。

以下是 MNWE:

\documentclass[11pt,a4paper]{book}
\usepackage{a4wide}
%\usepackage{t1enc}
%\usepackage{pslatex}
\usepackage[ansinew]{inputenc}
\usepackage[german]{babel}
\usepackage{graphicx}
\usepackage{epstopdf}
\usepackage{amsbsy,amssymb,latexsym,layout}
\usepackage[centertags]{amsmath}
\usepackage{makeidx}
\usepackage{fancyhdr}
\usepackage[draft=true]{hyperref}
\makeindex
\newcommand{\vektor}[1]{\mathbf{\underline{#1}}}
\newcommand{\tensor}[1]{\mathbf{\underline{\underline{#1}}}}


\begin{document}
\select@language {german}
\contentsline {chapter}{Vorwort}{iii}{chapter*.1}
\end{document}

通常我会:

\input{Skript.toc}

代替:

\select@language {german}
\contentsline {chapter}{Vorwort}{iii}{chapter*.1}

我所做的只是将产生错误的 Skript.toc 的前两行...

更新:以下是更简短的 MNWE:

\documentclass[11pt,a4paper]{book}
\usepackage[german]{babel}
\makeindex

\begin{document}
\select@language {german}
\contentsline {chapter}{Vorwort}{iii}{chapter*.1}
\end{document}

完整的 Script.toc 可以在这里找到: http://pastebin.com/7MBtznL8

谢谢你的帮助...

答案1

该命令创建的目录内容\tableofcontents存储在名为的文件中\jobname.toc;此处,\jobname通常为主要 tex 输入文件的名称,例如mydoc.tex。在 LaTeX 创建 .toc 文件后,您可以随意用 替换该命令\tableofcontents\input mydoc.toc请注意,如果不是“.tex”,则需要提供文件名的扩展名)。这样,LaTeX 将不再在每次编译期间更新文件.toc,您可以随意手动编辑其内容。

话虽如此,您可能要三思而后行。您提到您的文档需要很长时间才能编译。除非文档中有数百个分段命令,每个命令都将信息写回文件.toc,否则我无法想象创建.toc文件所占用的时间会超过总编译时间的一小部分。因此,虽然不再使用该命令所节省的编译时间\tableofcontents几乎可以忽略不计,但如果您对文档进行了更改,导致 (i) 现有分段标题的页码发生变化或 (ii) 新增或删除分段标题,您将不得不花费大量你自己的时间编辑.toc文件以使其内容与文档主体保持同步。

如果您不喜欢 LaTeX 默认机制创建的目录的外观,请认真考虑使用诸如此类的包来tocloft更改目录的外观和布局。

答案2

我花了 2 个小时尝试做类似的事情。我正在使用原始文件中的目录对论文进行总结。我使用

\input Thesis.toc 

将原始目录转储到我的其他文件 ( Summary.tex)。但是,由于我使用该babel包来处理多个字符集,它会将宏命令 ( \select@language {english}) 转储到.toc文件中。由此导致问题。

我在这篇文章中找到了解决方案:自动产生轮廓?并在此澄清一下:\makeatletter 和 \makeatother 起什么作用?

这是解决方案。使用\makeatletter绕过@然后立即使用 切换回文本模式\makeatother

\makeatletter
\input Thesis.toc
\makeatother

如果不需要修改原始文档的目录,则只需 即可\input $jobname$.toc。但是,如果您需要编辑它,那么我建议复制原始文件并手动修改。

除了使用,您\input还可以考虑使用\anothertableofcontentsshorttoc包,它可以让您更好地控制目录的格式。

(为了其他尝试此操作的人的利益,请不要尝试将.toc书中的文件转储到文章类文档中。当它到达部分或章节时,将会导致更多的糟糕结果。)

答案3

我不知道您使用哪个文档类。但获取目录作为额外 *.tex 文件的一般方法似乎是创建一个假文档:

取出 *.toc 文件并“恢复”文档的结构(如果您可以处理正则表达式可能只需要几分钟):

\chapter{name}
\section{name}
...

在第一章插入第一个页码(取决于类别),并为所有章节、小节等插入所有 LaTeX 页码。现在您可以更改章节,而无需更改所有文本。

两点评论:

  • 您必须找出如何更改班级页码的计数器。

  • 如果您告诉我们您想要更改目录的目的,那么事情可能会变得容易得多。有很多常用方法可以做到这一点,甚至可以更改整个包!

答案4

这也是我论文中的章节/页面标题要求。我找不到任何直接的解决方案。但是,这是可以做的。在由 latex 构建的 toc 或 lof 文件中列出的所需章节或图表后添加,然后通过添加以下内容手动编辑它

\newpage \textbf {章节}~\hfill \textbf {页面}\pa

图表列表也是如此。然后您可以执行以下操作来使用手动 toc 或 lof

% \tableofcontents  % replace 
\newpage
\phantomsection
\vspace*{2in} % Give this page a 2 inch top margin;
\addcontentsline{toc}{frontmatter}{\protect\numberline{}\contentslongname}%
\centerline{\expandafter\uppercase\expandafter{\contentslongname}}%
\bigskip%
\makeatletter
\input ./manualTOC.toc
\makeatother
\listoffigures  % Uncomment if you have any figures
\newpage%
\centerline{\expandafter\uppercase\expandafter{\listfigurename}}%
\bigskip%
\phantomsection%
\addcontentsline{lof}{frontmatter}{\protect\numberline{}\listfigurename }%
\makeatletter
\input ./manualLOF.toc
\makeatother

相关内容