
Другими словами, образует ли набор всех текстовых файлов, компилируемых с помощью tex, моноид при конкатенации?
Недавно я немного повозился с обычным текстом, и мои алгебраические паучьи чувства тут же затрепетали. Я думал, что легко найду ответ в Google, но пока ничего не нашел.
решение1
Во-первых, файл plain tex заканчивается на \bye
(а файл latex заканчивается на \end{document}
), и все после этого игнорируется. Так что ваше утверждение тривиально верно, поскольку второй файл игнорируется после конкатенации.
Если мы считаем, \bye
что это «метакоманда», выпавшая при конкатенации, то ваше утверждение неверно.
Рассмотрим файлы
\def\aa{0}
\aa
\bye
и
\def\bb{0}
\bb
\ifx\aa\bb\cc\fi
\bye
Каждый из них компилируется, но конкатенация — нет:
\def\aa{0}
\aa
\def\bb{0}
\bb
\ifx\aa\bb\cc\fi
\bye
производит
! Undefined control sequence.
l.5 \ifx\aa\bb\cc
\fi
?
! Emergency stop.
Причина в том, что undefined \aa
во втором файле не определен, но он такой же, как и \bb
в объединенном файле.
решение2
В простом TeX правильно отформатированный файл будет заканчиваться на , \bye
чтобы сообщить компилятору прекратить поиск входных данных. Поэтому конкатенация скомпилирует только первый файл, а остальное проигнорирует.. (Так что нет.) В LaTeX компилируемый файл \end{document}
снова будет заканчиваться на , чтобы сообщить компилятору, что он готов. Поэтому только первый файл в конкатенации будет скомпилирован, а остальное проигнорировано. Плюс второй файл теперь будет иметь преамбулу в месте, которое вызовет ошибку компиляции, если будет обнаружено i. (Так что нет.)
Не обсуждаются дополнительные воздействия пакетов, шрифтов, входных файлов и т. д.