我有一个很大的文档(包含多个目录和文件,编译需要很长时间),其中包含目录。我想用它制作一个简短的 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
还可以考虑使用\anothertableofcontents
shorttoc
包,它可以让您更好地控制目录的格式。
(为了其他尝试此操作的人的利益,请不要尝试将.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