Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing command-line arguments to LaTeX document

Tags:

latex

tex

Sometimes, I define new commands such as the following.

\newcommand{\comment}[1]{\textbf{#1}} %\necommand{\comment}[1]{\emph{#1}}  

The above commands enable me to change the style of parts of my code all at once. If I want to generate both of the possible styles, I have to compile my LaTeX document two times each time modifying the source code to enable the desired style.

Is there a way to avoid the source code modification in such cases? That is, can I pass latex some command-line arguments so that I can choose which style to use based on that argument?

like image 838
reprogrammer Avatar asked Sep 23 '09 12:09

reprogrammer


1 Answers

That is, can I pass latex some command-line arguments so that I can choose which style to use based on that argument?

Yes. Three options:

One

In your source file, write

\providecommand{\comment}[1]{\emph{#1}}% fallback definition 

and then compile the LaTeX document ("myfile.tex") as

pdflatex (whatever options you need) "\newcommand\comment[1]{\textbf{#1}}\input{myfile}" 

Two

Alternatively,

pdflatex "\let\ifmyflag\iftrue\input{myfile}" 

and then have in the source

\ifcsname ifmyflag\endcsname\else   \expandafter\let\csname ifmyflag\expandafter\endcsname                   \csname iffalse\endcsname \fi ... \ifmyflag   \newcommand\comment[1]{\emph{#1}} \else   \newcommand\comment[1]{\textbf{#1}} \fi 

Three

Or even

pdflatex "\def\myflag{}\input{myfile}" 

with

\ifdefined\myflag   \newcommand\comment[1]{\emph{#1}} \else   \newcommand\comment[1]{\textbf{#1}} \fi 

which is probably the shortest, albeit slightly fragile because you never know when a package might define \myflag behind your back.

like image 79
Will Robertson Avatar answered Sep 23 '22 01:09

Will Robertson