макрос для набора текста и добавления строки в другой документ

макрос для набора текста и добавления строки в другой документ

Я пишу длинный документ и разбиваю его на главы. Я хотел бы использовать что-то вроде \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.

Связанный контент