Предположим, что у меня есть конфиденциальный пакет, исходный код которого никому не позволено видеть. Пользователям разрешено использовать только публичные макросы. Этот вопрос тесно связан смой другой вопрос.
\documentclass{article}
\usepackage{mypackage}% it is allowed.
\usepackage{listings}
\begin{document}
\publicmacro% it is allowed.
\lstinputlisting{mypackage.sty}% it is not allowed.
\end{document}
Можно ли запретить пользователям видеть коды пакетов, сохранив при этом возможность использовать его публично доступные макросы?
решение1
Короткий ответ — «нет». TeX — это язык макрорасширений, что означает, что нет «скомпилированного кода», который вы можете использовать: самое близкое, что вы можете сделать, — это создать собственный формат (файл формата предварительно компонует код во внутренний двоичный формат). Вы также можете сделать код сложным для чтения, используя такие методы, как те, что вxii.tex
. Даже если вы это сделали, ваши пользователи могут использовать \show
ваши макросы или использовать их, \tracingall
чтобы увидеть, что происходит. Поэтому вы, скорее всего, усложните себе жизнь, поддерживая свой код, делая такие трюки, чем не дадите любопытным увидеть, что происходит.
решение2
Недавно я написал код, который берет исходный текст TeX, находит повторяющиеся шаблоны изамените их макросами. Это можно использовать как шаг, чтобы сделать исходный код менее читаемым. Его также можно изменить, чтобы превратить имена макросов в нечитаемый беспорядок, так что \show
это \tracingall
не даст понимания того, что происходит. К сожалению, если вы используете пакеты, вам придется копировать их как новый файл (иначе ваши пользователи увидят, какие пакеты вы загружаете), а также запутать их (иначе ваши пользователи смогут искать, в каком пакете есть эти внутренние макросы).