我想向现有环境添加新命令。该\renewenvironment
命令没有太大帮助,因为我需要复制并粘贴整个环境定义。
举个例子,我想\FORALL_P
为algorithmic
环境制作一个,这样就不会生产
forall ... do
与原版一样\FORALL
,它产生
forall ... do in parallel
答案1
你可以说
\usepackage{algorithmic}
\usepackage{etoolbox}
\newcommand{\algorithmicdoinparallel}{\textbf{do in parallel}}
\makeatletter
\AtBeginEnvironment{algorithmic}{%
\newcommand{\FORALLP}[2][default]{\ALC@it\algorithmicforall\ #2\ %
\algorithmicdoinparallel\ALC@com{#1}\begin{ALC@for}}%
}
\makeatother
的定义\FORALLP
以 的定义为模型\FORALL
;但是,您不能将其称为\FORALL_P
。
答案2
这电子工具箱该软件包为您提供了一些可能有用的命令,例如:
\AtBeginEnvironment{<environment>}{<code>}
\AtEndEnvironment{<environment>}{<code>}
也许如果您向我们提供更多有关您的实际意图的信息,我们可以提供更多有用的信息。
既然问题中提供了新的信息,我建议使用算法包来定义新块;虽然algorithmic
包不允许您轻松修改预定义结构或创建新结构,但algorithmicx
包可以让您完全控制定义。使用algcompatible
,您可以完全兼容包的语法algorithmic
;新块定义的一个小例子:
\documentclass{article}
\usepackage{algorithm}
\usepackage{algcompatible}
\algblockdefx{FORALLP}{ENDFAP}[1]%
{\textbf{for all }#1 \textbf{do in parallel}}%
{\textbf{end for}}
\begin{document}
\begin{algorithm}
\caption{A test algorithm}
\begin{algorithmic}[1]
\FORALL {$v \in V(G)$}
\STATE $l(v) \leftarrow \infty$
\ENDFOR
\FORALLP{$v \in V(G)$}
\STATE $l(v) \leftarrow \infty$
\ENDFAP
\end{algorithmic}
\end{algorithm}
\end{document}
要使\RETURN
命令按照 的定义algorithmic
,您需要添加以下定义:
\algloopdefx{RETURN}[1][]{\textbf{return} #1}
答案3
在您的特定情况下,使用etoolbox
包的命令来更改 \FORALL 语句的外观可能不起作用,因为您正在尝试更改后续语句,即“do...”
该algorithmic
包允许对各种算法类语句进行相当多的定制。例如,您可以发出命令
\renewcommand{\algorithmicdo}{\textbf{do in parallel}}
但是,这将在所有情况下改变“do”语句的输出,这可能不符合您的喜好。