我正在写一份很长的文档,并将其分成几章。我想\include
在我的 中使用类似 的东西main.tex
,并且每章的排版都会用特定章节的main.tex
来排版。我知道的最接近的解决方案是,但它不能完全满足我对于小问题(例如)的需要。有没有办法为此编写宏?\includeonly
subfile
minitoc
答案1
看起来基本\include
命令\includeonly
就是您所需要的,但也许我误解了。
如果您创建以下文件并main.tex
在注释掉该行的情况下进行两次编译\includeonly
,LaTeX 将处理整个文档并生成具有准确页码的目录。
如果您随后取消注释该\includeonly
行,LaTeX 将处理该main
文件,并且\include
只处理该命令的参数(在本例中为ch1
)。目录仍将反映您之前编译的其他章节的页码。
文件main.tex
\documentclass{book}
\usepackage{lipsum} % for dummy text
%\includeonly{ch1} % Uncomment after first compilation
\begin{document}
\title{Your Book}
\author{Your Name}
\maketitle
\tableofcontents
\include{ch1}
\include{ch2}
\include{ch3}
\end{document}
文件ch1.tex
\chapter{First}
\lipsum
文件ch2.tex
\chapter{Second}
\lipsum
文件ch3.tex
\chapter{Third}
\lipsum
编辑:在编译时在命令行上指定包含的文件
另一个选项是在命令行上定义要包含的文件。我们\selection
在命令行上定义一个命令:
\documentclass{book}
\usepackage{lipsum} % for dummy text
% Include files specified on the command line;
% if no files specified, include everything
\ifx\selection\undefined\relax
\else
\includeonly{\selection}
\fi
\begin{document}
\title{Your Book}
\author{Your Name}
\maketitle
\tableofcontents
\include{ch1}
\include{ch2}
\include{ch3}
\end{document}
然后使用此命令进行编译:
pdflatex "\def\selection{ch1} \input main"
你可以用shell 脚本:
(文件latex-selection.sh
:)
#! /bin/sh
EXCERPT=$1
MAIN=$2
pdflatex "\\def\\selection{$EXCERPT} \\input $MAIN"
若要仅包含ch2
,请调用为./latex-selection.sh ch2 main
。