如何编辑包?

如何编辑包?

我从文章模板下载了一个包。我想编辑它,但不知道该怎么做。

答案1

这取决于你想改变什么……

例子

让我们假设一个简单而小的包,package.sty其中包含以下内容。我使用这个假想的包,因为它可以包含我想要共享的所有内容,并且没有那么复杂的代码。如果您想测试它,请将包代码保存package.sty在您的文档文件夹中,即保存文本文件的位置,或您的用户texmf树*。

\ProvidesPackage{package}

\DeclareOption*{No options.}
\ProcessOptions\relax

\RequirePackage{parskip}

\newcounter{counter}

\newlength{\length}
\setlength{\length}{1em}

\newcommand{\numfont}{\sffamily\bfseries}

\newcommand{\pkg@printnumber}[1]{
   {\numfont(#1)}%
}

\newcommand*{\numberbox}[1]{%
   \par
   \refstepcounter{counter}%
   \fbox{%
      \pkg@printnumber{\thecounter}\hspace{\length}#1%
   }%
   \par
}

在这样的文档中使用:

\documentclass{article}

\usepackage{package}

\begin{document}
\section{Sec 1}
\numberbox{Foo}
\numberbox{Bar}
\section{Sec 2}
\numberbox{Baz}
\end{document}

较小的变化

可以在文档的前言部分中进行,即在\begin{document}加载包之前但之后。

(1)改变一些宏的定义
如果你想改变宏的行为,你可以使用\renewcommand并设置新的定义或类似\patchcmd工具etoolbox

例如,如果你想更改数字的字体,请使用

\renewcommand{\numfont}{\bfseries}                                                   % (1.1)

如果你想在定义中添加一些内容,请\appto使用etoolbox

\appto\numfont{\sffamily}                                                            % (1.2)

如果你想替换命令的一部分,例如用 use 替换\numfont\myfont请注意,如果宏名称包含 ,\patchcmd则需要** 。\makeatletter@

\makeatletter
\newcommand{\myfont}{\sffamily\itshape}
\patchcmd{\pkg@printnumber}{\numfont}{\myfont}{}{}                                   % (1.3)
\makeatother

(2)改变长度
用于\setlegth改变长度。

\setlength{\length}{2em}                                                             % (2.1)

或再次\patchcmd更换

\newlength{\mylength}\setlength{\mylength}{3em}
\patchcmd{\numberbox}{\length}{\mylength}{}{}                                        % (2.2)

(3)改变计数器的外观
要改变计数器的外观,例如从 1、2、3 变为 I、II、III,请再次用 改变 的\the<counter>定义\renewcommand

\renewcommand{\thecounter}{\Roman{counter}}                                          % (3.1)

chngcntr有更多工具可用于此目的。section例如,您可以添加计数器。

\counterwithin{counter}{section}                                                     % (3.2)

上述变更的完整 MWE

请注意,并非所有更改都会立即可见,例如 (3.2) 会覆盖 (3.1),因此您可以取消注释某些行以查看效果。

\documentclass{article}

\usepackage{package}
\usepackage{etoolbox}% required by (1.2), (1.3), (2.2)
\usepackage{chngcntr}% required by (3.2)

% (1)
\renewcommand{\numfont}{\bfseries}                                                   % (1.1)
\appto\numfont{\sffamily}                                                            % (1.2)
\makeatletter
\newcommand{\myfont}{\sffamily\slshape}
\patchcmd{\pkg@printnumber}{\numfont}{\myfont}{}{}                                   % (1.3)
\makeatother
% (2)
\setlength{\length}{2em}                                                             % (2.1)
\newlength{\mylength}\setlength{\mylength}{3em}
\patchcmd{\numberbox}{\length}{\mylength}{}{}                                        % (2.2)
% (3)
\renewcommand{\thecounter}{\Roman{counter}}                                          % (3.1)
\counterwithin{counter}{section}                                                     % (3.2)

\begin{document}
\section{Sec 1}
\numberbox{Foo}
\numberbox{Bar}
\section{Sec 2}
\numberbox{Baz}
\end{document}

更复杂的变化

复制该sty文件并将其以新名称保存在您的用户texmf树中*。然后在您喜欢的编辑器中打开它并进行所需的更改。

* 看我应该将自己的 .sty 或 .cls 文件放在哪里,以使它们可供我的所有 .tex 文件使用?**参见
\makeatletter 和 \makeatother 起什么作用?

相关内容