+4
На рассмотрении

Личная псевдо-TeX-преамбула

arseniiv 10 лет назад обновлен Mike Internal 4 года назад 6
Раз с изменением общефорумной преамбулы не очень, можно предложить сделать эмуляцию своей для каждого пользователя преамбулы — завести в профиле поле, в котором каждая строка должна иметь синтаксис, стандартный для \newcommand, \renewcommand, \DefineMathOperator и чего я ещё пропустил, по одному определению на строку, при этом внутри текста определении можно проверять только правильность постановки скобок. Такое подмножество TeX’а нетрудно разбирать и применять к тексту сообщения пользователя при отправке (это и однократностью разбора хорошо, и копируемостью формул в сообщения других без получения каши). К этому подмножеству также нетрудно приводить свои существующие определения из преамбул (надеюсь). Самое сложное, видимо, будет соблюсти механизм работы этих команд, чтобы замены происходили как можно ближе к тому, что сделал бы с учётом этих определений TeX.
На рассмотрении
Надо понимать, что это фактически обесценит кеширование и увеличит время генерации формул.
Почему обесценит? Я же как раз предлагаю раскрывать определения перед
выдачей кода теху. Так что код всё так же можно кэшировать движком и
цитировать участникам.
Потому что $n$ от участников с личной преамбулой будет отличаться от $n$ без личной преамбулы.
Так ведь в коде сообщения все определения будут уже раскрыты: сообщение посылается, определения в тексте раскрываются, а потом новый текст пишется в базу и уже не преобразуется в будущем. При редактировании своего сообщения определения из преамбулы уже не работают, но, думаю, это неплохой компромисс (если такое вообще делать).
Или можно и после редактирования сообщения тоже разворачивать определения из личной преамбулы — но с уже развёрнутым в прошлый раз автору придётся мириться, но, думаю, многие бы согласились. Можно таки создать тему на форуме и поспрашивать (боюсь, целевая аудитория этого предложения здесь будет мало представлена в ближайшее время).
Можно даже хранить и «общий» код сообщения, и «личный» с неразвёрнутыми определениями, и пересчитывать «общий» при каждом изменении сообщения, и показывать людям и отдавать теху только его, а «личный» оставить для удобства автора. Но это уже может не стоить свеч. При этом если «личный» код совпадает с «общим», его хранить не обязательно, и это будет совместимо с текущей ситуацией.
Не знаю, ясно ли описал.

Можно при редактировании распознавать развёрнутые редефайны в обратную сторону. Но даже и без этого фича была бы супер. Для себя я бы хотел некий эквивалент вот таких дефайнов (помимо нескольких \operatorname):

\renewcommand{\le}{\leqslant}
\renewcommand{\ge}{\geqslant}
\renewcommand{\bf}[1]{\ifmmode \mathbf{#1} \else \textbf{#1} \fi}
\renewcommand{\it}[1]{\ifmmode \mathit{#1} \else \textit{#1} \fi}
\renewcommand{\rm}[1]{\ifmmode \mathrm{#1} \else \textrm{#1} \fi}
\let\originalint\int
\renewcommand{\int}{\originalint\limits}

Сервис поддержки клиентов работает на платформе UserEcho