将短语添加到现有的算法命令/环境中

将短语添加到现有的算法命令/环境中

我想向现有环境添加新命令。该\renewenvironment命令没有太大帮助,因为我需要复制并粘贴整个环境定义。

举个例子,我想\FORALL_Palgorithmic环境制作一个,这样就不会生产

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”语句的输出,这可能不符合您的喜好。

相关内容