निरंजन
Try this MWE -
```
\documentclass{article}
\newif\iftest
\AtEndDocument{%
\iftest
Hello world!
\else
Not working :(
\fi
}%
\begin{document}
{\testtrue}
\end{document}
```
I can see that as `\testtrue` is enclosed in a group, the final test done at the end of the document doesn't work, but I want it to work. So how to set a conditional to true value globally? i.e. even outside the local group.
Top Answer
Skillmon
Just for educational purposes, it is also possible to smuggle a conditional out of the current group using the primitive `\aftergroup`. The result is not a global assignment, but just a local assignment that escapes the current group level to the next one.
And again for educational purposes, also a loop that will smuggle the conditional to the top level (being a pretty slow version of global assignments; as I said this is for educational purposes, while the single level smuggling can be useful, this global smuggling should've been a global assignment from the start).
```
\documentclass[]{article}
\newif\iftest
\newcommand\evaltest{\iftest Hello world!\else Not working :(\fi}
\newcommand\smugglebool[1]
{%
\ifnum\currentgrouplevel>0
\expandafter\aftergroup
\csname #1\csname if#1\endcsname true\else false\fi\endcsname
\fi
}
\makeatletter
\newcommand\smuggleboolglobal[1]
{%
\ifnum\currentgrouplevel>\z@
\aftergroup\@smuggleboolglobal
\expandafter\aftergroup
\csname #1\csname if#1\endcsname true\else false\fi\endcsname
\fi
}
\newcommand\@smuggleboolglobal[1]
{%
#1%
\ifnum\currentgrouplevel>\z@
\aftergroup\@smuggleboolglobal
\aftergroup#1%
\fi
}
\makeatother
\begin{document}
\evaltest
{\testtrue\smugglebool{test}}\evaltest
{{\testfalse\smugglebool{test}}}\evaltest
{{\testfalse\smuggleboolglobal{test}}}\evaltest
\end{document}
```
Answer #2
निरंजन
Just after posting the question, I found an answer here <https://tug.org/pipermail/texhax/2014-November/021434.html>.
```
\documentclass{article}
\newif\iftest
\AtEndDocument{%
\iftest
Hello world!
\else
Not working :(
\fi
}%
\begin{document}
{\global\testtrue}
\end{document}
```
I still welcome alternative approaches. Don't hesitate to post more answers :)