I want to load parameters (for conditional compilation) from files. I wrote command param that creates new if command and read parameter from file, containing following line:

\paramnametrue % or false

My param command:

\newcommand{\param}[1]{\newif\if#1 \IfFileExists{#1}{\input{#1}}{}}

The problem is that when I write


outside of document environment I get

! LaTeX Error: Missing \begin{document}.

and inside of document environment I get


inside of my document. How can I make it work? How can I create not handling text commands?

2 Answers 2


You can't build a control sequence name by simply typing \if#1, because \if is a single token.

You have a couple of possibilities. First one without packages:

  \expandafter\newif\csname if#1\endcsname

This has the disadvantage that no check is performed if the conditional already exists. A second possibility is with etoolbox:


What \newboolean does is similar to \newif, so after \param{A} the conditional \ifA and the commands \Atrue and \Afalse will be defined. The same happens with the former solution, but here also a check for duplicate definitions is performed. If you don't want the check, then use \provideboolean.


If #1 is A then \if#1 is not the single token \ifA it is the two tokens \if A so you end up redefining \if which is not good. You want

\expandafter\newif\csname if#1\endcsname

to construct the \ifA token and pass it to \newif

  • That was my idea, but I was trying it at tlhiv.org/ltxpreview and this: \newcommand{\param}[1]{\expandafter\newif\csname if#1\endcsname} \param{A} produces the error ! Missing control sequence inserted. inaccessible, at least at this previewer. Why?
    – JLDiaz
    Jun 26, 2013 at 14:49
  • @JLDiaz no idea, presumably the document it sends to latex is not the document it shows you. The code in your comment works in latex. Jun 26, 2013 at 15:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.