Как отмечалось в многочисленных вопросах/ответах в прошлом, LaTeX требует, чтобы вы компилировали как минимум дважды, когда есть ссылки, TOC/LOF и т. д. Многие из этих ситуаций были задокументированы в ответе наВ каких ситуациях вам приходится составлять документ более одного раза?
Попытки избежать этого дополнительного шага оказались успешными в отдельных, очень специфических случаях, таких как Как избежать двойной компиляции? Однако сегодня мы воспринимаем эту практику как данность, просто разрабатывая скрипты и макросы, чтобы автоматизировать этот процесс в достаточной степени и облегчить боль.
Ответ на[этот вопрос о переходе на предыдущую страницу]намекает на ограничения памяти ранних компьютеров, которые были центральными причинами, по которым TeX изначально был построен именно так. Информация, которая может понадобиться позже, просто убирается в любое количество вспомогательных файлов и называется следующим проходом. Как только страница «завершена», компилятор ее забывает.
Я часто думал:Учитывая достижения в области компьютерной обработки и возможностей памяти, возможно/реально/планируется ли для LaTeX сохранять большую часть документа в памяти, чтобы избежать необходимости многократной компиляции?
Хранение всего документа в памяти потребовало бы много памяти, и, возможно, некоторые очень большие документы не смогли бы пройти этот путь (возможно, это должно было бы быть необязательным поведением). Но, похоже, многие аспекты набора текста выиграли бы от такого рода улучшенной компиляции.
Я понимаю, что это касается сути (La)TeX и того, как он был построен. Это не простой патч; он, вероятно, требует переписывания всего ядра (или требует?). Конечно, есть и другие проблемы, которые с этим связаны (сократит ли это время компиляции?); я был бы рад получить ссылку на другое место, где обсуждаются эти или связанные с ними проблемы. (Это рассматривалось для LaTeX3?)
решение1
Как сказал Джозеф, это не особенность latex, а особенность tex (общая с xetex и luatex), поэтому нет осуществимого способа сделать это в чем-либо, что называется latex. Также я не думаю, что это правда, что в целом ограничения памяти так уж отличаются: ожидания людей растут даже быстрее, чем емкость оборудования. Видите необходимость в tikz externalize, поскольку документ с несколькими картинками tikz вскоре может съесть серьезные объемы памяти, даже на современном оборудовании.
Но на самом деле все дело в названии: любая система, допускающая прямые и обратные ссылки, хранит информациюгде-то. Вы можете думать, что latex хранит его в файле .aux на диске, как нечто очень старое в 70-х, но файл .aux может находиться на SSD или в виртуальной файловой системе в основной памяти, и доступ к нему не должен быть каким-либо практическим препятствием, и, как вы прокомментировали, вы можете заменить «latex» на make, latexmk, arara, context или пакетный файл, который просто запускает latex 4 раза, так что конечный эффект для пользователя может заключаться в компиляции за один проход, если это то, что нужно.
Конечно, делать это за один проход действительно выгодно только если вы можете написать свой полный документ без ошибок и никогда не обрабатывать его больше одного раза. Если вы используете цикл редактирования/компиляции/предварительного просмотра, это только раздражает, так как замедляет цикл.