6

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.

  • 1
    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
6

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}
  • 1
    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

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.