举个例子,我有一个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}