# How can my LaTeX files detect if they're being compiled on Overleaf?

I have a LaTeX file that executes an external shell command to get some information; this works on my local machine but fails on Overleaf. That's okay, not a big deal—if I can wrap the code in an if-then conditional that checks if it's executing on Overleaf.

Problem: how can I make my LaTeX code check if being run on Overleaf?

Clarification added 2017-07-31: I already know how to test for shell escapes, and conditionalize my code appropriately. The problem is not whether shell escapes work; the problem is really about testing for Overleaf versus other environments.

• surely you don't want o know if it's on overleaf but if shell escape is enabled?, which you can test for the integer value of \pdfshellescape or \shellescape or in lua status.shell_escape dependin on the tex flavour in use. – David Carlisle Jul 31 '17 at 7:28
• No; in fact, shell escapes do work, and I already test for that in my code. But the command involves getting information using git, and this works differently in my local environment versus in Overleaf. I have given up trying to figure out why the command fails. I just want to skip the whole thing when running on Overleaf. – mhucka Jul 31 '17 at 15:01
• oh in that case you could shell escape and look at the environment variables, surely overleaf must have some environment variable set with a distinguished value? – David Carlisle Jul 31 '17 at 15:28
• That would work, but I have not found anything relevant in their documentation so far. I was hoping someone here would have already done something like this and knew the answer. – mhucka Jul 31 '17 at 15:31
• just look at the output of the command env and pick one:-) – David Carlisle Jul 31 '17 at 15:33

I think the simplest solution is to determine the home path used by Overleaf and test against that. It's unlikely to match your local home path.

To find Overleaf's home path:

\documentclass{article}

\makeatletter
\begingroup\endlinechar=-1\relax
\everyeof{\noexpand}%
\edef\x{\endgroup\def\noexpand\homepath{%
\@@input|"kpsewhich --var-value=HOME" }}\x
\makeatother

\begin{document}
HOME: \texttt{\homepath}.

\end{document}


Then copy the resulting path and test against that:

\documentclass{article}

\makeatletter
\begingroup\endlinechar=-1\relax
\everyeof{\noexpand}%
\edef\x{\endgroup\def\noexpand\homepath{%
\@@input|"kpsewhich --var-value=HOME" }}\x
\makeatother

\def\overleafhome{/home/whatever}% change as appropriate

\begin{document}
\ifx\homepath\overleafhome
Overleaf.
\else
Not Overleaf.
\fi

\end{document}

• I used this approach. Based on some testing, that path on Overleaf appears to be /home/wl. Thank you very much for this solution. – mhucka Aug 7 '17 at 20:00
• Addendum: I examined other environment variables, per David Carlisle's comments at the top. Unfortunately, no other variable other than HOME seemed safe enough to use (in the sense that I couldn't be sure a collaborator would get the expected behavior if the used the files in their local environment). – mhucka Aug 7 '17 at 20:02
• Any suggestions on making this work under windows as well? Unfortunately the \  in the windows path causes the error :1: Undefined control sequence. l.1 C:\Users. I tried piping the output of kpsewhich to tr, but couldn't figure out how to send it \  symbols. – kgoodrick Mar 24 '20 at 22:06