The algorithmicx package defines two commands \Require and \Ensure for providing initial conditions. However, I'd like some custom commands such as \Assume, \Define, \Input, etc. At present, I merely rename the above two commands to something I want, like:


However, this is not really a good solution because

  1. it clutters the algorithm code and what I see in LaTeX is not what is output, which can be confusing if I forget to read the preamble.
  2. it's not useful when the number of custom definitions needed is more than the predefined ones.

How do I define a custom command equivalent to the above two in the algorithmicx package (I'm using algpseudocode)? The examples in the documentation seem to cover blocks like for ... end, etc., and not individual statements.

1 Answer 1


In the documentation you can find \algnewcommand. In relation \Require is defined as


So you can do:


Here is a complete example:

\INPUT foo
\Require $x\ge5$
\Ensure $x\le-5$
\State $x\gets x-1$

enter image description here

  • Ah, thanks :) I tried defining \algorithmicinput with \algnewcommand like you have, but my mistake was to follow it up with \newcommand without \item, which only messed up the layout. Now I realize what I should've done. Oct 3, 2011 at 17:34
  • Why do we need two level of definition, what is the dfference when we simply write :\algnewcommand\INPUT{\item[{\textbf{INPUT:}}]}
    – DurgaDatta
    Nov 15, 2013 at 5:24
  • @DurgaDatta: The advantages is the lower error rate. With \algorithmicinput you simple define the string to print. The command \INPUT also contains relevant definition -- in this simple case only \item. So the user can simply redefine \algorithmicinput. Nov 15, 2013 at 10:32
  • When I try to use this answer to define a command that I want to use within a certain block, my new command ignores the indentation that it should obey.
    – jarhill0
    Mar 1, 2021 at 18:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .