如何使我的 sty 文件仅在某个环境中工作?

如何使我的 sty 文件仅在某个环境中工作?

举个例子,我有一个bibpattern.sty包含一些 latex 命令(如\COMMENT)的程序。
我希望它只bibpattern.sty在内部工作\begin{thebibliography} ... \end{bibliography}

\COMMENT外面也有同样的情况\begin{thebibliography} ... \end{bibliography},但是它要做的工作不同。

下面是我的示例代码

\documentclass{article}

%\newcommand\COMMENT[1]{\textbf{#1}}

\RequirePackage{etoolbox}

\AtBeginEnvironment{thebibliography}
{
 \newcommand\COMMENT[1]{\textsc{#1}}
}

\begin{document}

Hi Hello this is %\COMMENT{Sample 2}


\begin{thebibliography}{00}
\renewcommand\COMMENT[1]{\textsc{#1}}
\bibitem{1}
This is a \COMMENT{Sample File}

\end{thebibliography}


\end{document}

我的问题是,我只想在环境\COMMENT内部工作{thebibliography}\COMMENT外部{thebibliography}环境可能有不同的用途。

答案1

您必须检查该命令是否\COMMENT已经可用,如果是,则重新定义(\renewcommand)或定义\newcommand两个都在外面thebibliography 里面,用于其他用途。这可以通过\ifdef{command_name}{true}{false}命令实现。

(我使用蓝色来表示不同的命令用法,哪个输出来自哪个环境)

\documentclass{article}


\usepackage{xcolor}


\RequirePackage{etoolbox}


%%%% Outer check --> for usage outside of bibliography
\ifdef{\COMMENT}{%
\renewcommand{\COMMENT}[1]{\textbf{#1}}%
}%
{% No, no comment command before
\newcommand{\COMMENT}[1]{\textbf{#1}}%
}%




\AtBeginEnvironment{thebibliography}
{%
% Inner check and redefinition, if necessary
\ifdef{\COMMENT}{%
\renewcommand\COMMENT[1]{\textcolor{blue}{\textsc{#1}}}
}{% No, \COMMENT was not defined before 
\newcommand{\COMMENT[1]}{\textcolor{blue}{\textsc{#1}}}%
}%
}%


\begin{document}

Hi Hello this is \COMMENT{Sample 2}


\begin{thebibliography}{00}
\bibitem{1}
This is a \COMMENT{Sample File}
\bibitem{2}
This is another \COMMENT{comment inside bibliography}

\end{thebibliography}

And outside again: \COMMENT{Sample 3}

\end{document}

在此处输入图片描述

相关内容