Почему Tex/Latex не убыстряется в последующих выполнениях?

Я действительно задаюсь вопросом, почему даже недавние системы Tex/Latex не используют кэширования для ускорения более поздних выполнений. Каждый раз, когда я фиксирую единственную запятую*, называя Латекс, стоит мне о том же количестве времени, потому что это должно загрузить и преобразовать каждый файл изображения.

(* я знаю, что даже изменение крошечной запятой могло влиять на целую структуру, но конечно, правильно написанный формат кэша видел влияние этого. Кроме того, могли бы быть ситуации, где 100%-я правильность не нужна, пока это быстро.)

Есть ли что-то на языке Tex, который делает, это усложнило или невозможный выполнить или является им просто что в исходной реализации Tex, не было никакой потребности в этом (потому что это будет медленно так или иначе на тех больших компьютерах)?

Но затем с другой стороны, почему это не раздражает других людей так, что они запустили ветвление, которое имеет своего рода кэширование (или прозрачное преобразование файлов Tex к формату, который быстрее для парсинга)?

Есть ли что-нибудь, что я могу сделать для ускорения последующих выполнений Латекса? Кроме от помещения всего материала в chapterXX.tex файлы и затем комментирование их?

12
задан Debilski 28 April 2010 в 00:49
поделиться

6 ответов

Существуют такие решения, как preview-latex, которые предварительно компилируют материал в специальный файл формата для повышения скорости. Вы должны помнить, что TeX оптимизирует страницы на локальной основе. На уровне движка материала, фиксируемого на определенной странице, нет никакого конкремента, поэтому вы не можете просто «перепрограммировать одну страницу TeX».

2
ответ дан 2 December 2019 в 18:52
поделиться

Если вы используете pdftex, вы можете использовать - draftmode в командной строке для первых запусков. Это указывает pdftex не создавать PDF.

Конечно, можно кэшировать множество вещей (например, графическую информацию), но способ работы TeX затрудняет это. При запуске TeX происходит довольно сложная инициализация, и один запуск TeX всегда означает, что выписан ровно один PDF-файл. Чтобы выполнить кэширование, вам необходимо хранить данные в памяти (чтобы было эффективно).

Вы можете использовать IPC и поговорить с демоном, чтобы получить кэшированную информацию. Но для этого потребуется много программирования. TeX для обычных целей настолько невероятно быстр, что от этого мало что дает. Но, с другой стороны, это хороший вопрос, так как я видел, как LaTeX работает (на текущем оборудовании) и работает более 10 часов, что могло бы принести пользу кешированию.

4
ответ дан 2 December 2019 в 18:52
поделиться

Еще один ответ, не связанный строго:

Вы можете использовать макрос LaTeX \ include {...} , а с \ includeonly {} вы можете повторно запустить свой документ только для подмножества. Но это не кеширование и не полный документ.

3
ответ дан 2 December 2019 в 18:52
поделиться

На самом деле, правильный ответ (IMO): LaTeX уже кэширует информацию в своем выходном файле ( .aux , дополнительные файлы для других пакеты). Таким образом, если вы добавите запятую, эта информация будет повторно использована, и, таким образом, набор текста будет выполняться намного быстрее, чем без этого файла .aux .

1
ответ дан 2 December 2019 в 18:52
поделиться

Tex имеет ли средство кэширования, именованные файлы форматов, и я думаю, что это ценное резюме Алексея о проблемах, представляющих состояние Tex, они должны иметь возможность использовать их для возобновления редактирования после извлечения любой страницы.

Основная проблема заключается в том, что разрывы страниц будут влиять на абзацы или числа с плавающей запятой, и это может произойти не в определенной точке текста, но может произойти при выполнении макросов, которые были вызваны в зависимости от переходного состояния, переданного им, когда они были вызваны.

Итак, чтобы идея создания «точек останова» работала, нужно было бы взломать внутренние компоненты Tex, чтобы выгрузить дополнительную информацию, помимо той, которая обычно выгружается в файлы форматирования, и упаковать их с состоянием вспомогательных файлов. Учитывая то, что Джозеф говорит о средствах предварительного просмотра фрагментов Tex, зачем кому-то взламывать Tex для этого?

1
ответ дан 2 December 2019 в 18:52
поделиться

Попробуем разобраться, как работает TeX. Что произойдет, если вы напишете следующее?

tex.exe myfile.tex

TeX читает ваш файл побайтно. Прежде всего, TeX преобразует каждый символ в пару <категория, ascii-код> . У каждого символа есть код категории и код ascii. Код категории означает, что символ является открывающей скобкой ( {) или входом в математический режим ( $ ), символ-макрос ( ~ , например) или буквой ( AZ , az ).

Если TeX получает символы с кодом категории 11 (буквы) или 12 (другие символы: цифры, запятая, точка), TeX начинает абзац. Вы хотите кэшировать все абзацы.

Предположим, вы что-то изменили в своем документе. Как TeX может проверить, что все абзацы после ваших изменений совпадают? Может быть, вы изменили категорию какого-то персонажа. Я бы сказал, что вы изменили значение какого-то макроса. Или вы где-то удалили } и таким образом изменили текущий шрифт.

Чтобы убедиться, что абзац одинаковый, вы должны быть уверены, что все символы в абзаце одинаковы, все категории символов одинаковы, текущий шрифт одинаков, все математические шрифты одинаковы, и значения некоторых внутренних переменных одинаковы (например, \ hsize , \ vsize , \ pretolerance , \ толерантность , ] \ hypenalty , exhyphenpenalty , \ widowpenalty , \ spaceskip , ..., ........) {{1} }

Вы можете быть уверены только в том, что все параграфы перед вашими изменениями одинаковы. Но в этом случае вы должны сохранять все состояния после каждого абзаца.

Ваша система SuperCachedTeX очень сложна. Не так ли?

8
ответ дан 2 December 2019 в 18:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: