如何使文档类中定义的某些宏在使用它的输入文件中无法访问?

如何使文档类中定义的某些宏在使用它的输入文件中无法访问?

在 C# 中,我们可以将类的某些属性指定为私有的、只读的等等。如果可能的话,我想在编写 LaTeX 文档类时应用这种方法。

我在网上或书籍上都找不到与此相关的文章。

以下是我的简化的文档类。

\ProvidesClass{pst-xport}[a cute document class for my own purpose.]
% .... others ....

\RequirePackage{pstricks}

\newcommand\Left{-1}
\newcommand\Right{1}

\newlength\LeftPadding\setlength{\LeftPadding}{1cm}
\newlength\RightPadding\setlength{\RightPadding}{1cm}

% it must be private
\newlength\PictureWidth

\AtBeginDocument
{
    \setlength{\PictureWidth}{\dimexpr\Right\psxunit-\Left\psxunit\relax}
    \paperwidth=\dimexpr\PictureWidth+\RightPadding+\LeftPadding\relax
    % .... others ....
}


% .... others ....

% it must be private
\parindent=0pt

%%%%%%%%%%%%%%%%%%%%
%%%% INTERFACES %%%%
%%%%%%%%%%%%%%%%%%%%

\newcommand\SetPicture[2]
{
    \renewcommand\Left{#1}
    \renewcommand\Right{#3}
}


\newcommand\SetPadding[2]
{
    \setlength{\LeftPadding}{#1}
    \setlength{\RightPadding}{#3}
}

\newcommand\GetPaperWidth{\PictureWidth}
\endinput

我们按如下方式使用该文档类。

\documentclass{pst-xport}

\SetPicture{-2}{2}
\SetPadding{0.5cm}{0.5cm}

% \parindent must not be accessible in this input file.
\parindent=10pt

% \PictureWidth must not be accessible in this input file.
\setlength{\PictureWidth}{10cm}

\begin{document}
\parbox{\GetPictureWidth}
{
    I can find a tool to convert
    PDF to EPS in my neither
    bathroom nor kitchen.
}
\end{document}

问题

如果可能的话,如何使文档类中定义的某些宏无法从外部访问?

答案1

您无法让宏完全无法从“外部”访问。即使是 TeX 基元也不受保护,可以重新定义(它们的名称,而不是它们的功能)。您只能给宏起一个非常特殊的名称,以避免意外更改并阻碍故意更改它们。

通常,不应由其他代码更改的内部宏包括@通常不允许作为宏名称的一部分的 。可以使用 更改它\makeatletter,然后使用 将其改回正常\makeatother。此外,一个包的此类内部宏应该以特定前缀开头,该前缀通常由包名称构建。因此,不要将内部宏命名\foobar\xport@foobar。这不会保护它免受一些真正想要更改它的用户的侵害,但他们可以认为自己受到了警告。

答案2

此外,您可能想要探索expl3(LaTeX3 的一部分),它有自己的命名约定(与普通 TeX 和 LaTeX2 截然不同@)。

相关内容