Creating new LaTeX commands

From Notes_Wiki

Home > LaTeX > Creating new LaTeX commands

Syntax of defining command

To create a new LaTeX command which takes one argument one can use something like:

\newcommand{\paragraphtitle}[1]{\paragraph{#1}}

after this if in the LaTeX file one uses \paragraphtitle{ABCD} then LaTeX would automatically convert it to \paragraph{ABCD}. Specifying number of arguments such as [1] is optional. For example one can create command which does not takes any argument as

\newcommand{\bk}{\texttt{\textbackslash}}

It is not necessary to use the argument. One can also create a command as:

\newcommand{\paragraphtitle}[1]{}

which would cause \paragraphtitle{ABCD} to be replaced with nothing .


Defining command at compile time

The advantage of this approach is that the command can be defined on command-line or in Makefile and the output of the LaTeX file will change according to the definition supplied. This can be useful in cases where one needs some things to be displayed (such as paragraph titles) in draft but not in final output. To define a command at compile time one can use:

latex --halt-on-error '\newcommand{\paragraphtitle}[1]{\paragraph{\#1}}\input{research_proposal.tex}'

so that all \paragraphtitle{} in research_proposal.tex file get converted to \paragraph{}. On the other hand if the compilation is done using:

latex --halt-on-error '\newcommand{\paragraphtitle}[1]{}\input{research_proposal.tex}'

then the output will not contain anything specified with \paragraphtitle in file research_proposal.tex.

An example Makefile that uses this technique to generate draft or final version of a research_proposal is:

FILE=research_proposal
latex_cmd1='\newcommand{\paragraphtitle}[1]{\paragraph{\#1}}\input{research_proposal.tex}'
latex_cmd2='\newcommand{\paragraphtitle}[1]{}\input{research_proposal.tex}'
LATEX=latex --halt-on-error

all: draft

draft: ${FILE}.tex
        (${LATEX} ${latex_cmd1}; bibtex ${FILE}; ${LATEX} ${latex_cmd1}; dvipdf ${FILE}.dvi)


final: ${FILE}.tex
        (${LATEX} ${latex_cmd2}; bibtex ${FILE}; ${LATEX} ${latex_cmd2}; dvipdf ${FILE}.dvi)

clean:
        rm -f ${FILE}.dvi
        rm -f ${FILE}.aux
        rm -f ${FILE}.log
        rm -f ${FILE}.out
        rm -f ${FILE}.bbl
        rm -f ${FILE}.blg

clean_all: clean
        rm -f ${FILE}.pdf


Home > LaTeX > Creating new LaTeX commands