Я пишу длинный документ и разбиваю его на главы. Я хотел бы использовать что-то вроде \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
EDIT: Укажите включенные файлы в командной строке во время компиляции.
Другой вариант — определить файлы, которые будут включены в командной строке. Мы определяем команду \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"
Вы можете автоматизировать это с помощьюскрипт оболочки:
(файл latex-selection.sh
:)
#! /bin/sh
EXCERPT=$1
MAIN=$2
pdflatex "\\def\\selection{$EXCERPT} \\input $MAIN"
Чтобы включить только ch2
, вызовите как ./latex-selection.sh ch2 main
.