\if(Benutzername == foo) … \else .. \fi?

\if(Benutzername == foo) … \else .. \fi?

Ich denke, der Pseudocode im Titel sagt alles: Wie kann TeX (oder LaTeX) den $USER herausfinden, der ausgeführt wird pdflatex?

Ich arbeite zusammen und möchte, dass die Ausgabe bei meiner Ausführung ganz leicht anders aussieht latexals bei meinem Mitarbeiter.

Antwort1

Eine Methode, die auf allen Betriebssystemen funktionieren sollte (aber im Grunde dieselbe ist wie die von David) und außerdem Folgendes erfordert -shell-escape:

\documentclass{article}
\usepackage{catchfile}

% #1 = control sequence to define
% #2 = variable to get the value of
\newcommand{\getvar}[2]{%
  \CatchFileEdef#1{"|kpsewhich -var-value #2"}{\endlinechar=-1 }%
}

\def\me{enrico}
\getvar{\usrtest}{USER}

\begin{document}

\ifx\me\usrtest ME \else IMPOSTER\fi

\end{document}

Mit kpsewhichkönnen wir Anführungszeichen und Dollarzeichen oder vermeiden %; das Programm sollte auf TeX Live und auf MiKTeX gleich funktionieren. Natürlich kann der Name der zu setzenden Variable auf den verschiedenen Betriebssystemen unterschiedlich sein: USERauf Unix- und USERNAMEauf Windows-Betriebssystemen ist er es.

Antwort2

Mein bescheidener Versuch mit LuaLaTeX:

\documentclass{article}

\usepackage{luacode}
\usepackage[T1]{fontenc}

\begin{luacode}
-- get the username variable,
-- or a default string in case
-- the variable is not found
function getUsername()
    return os.getenv("USERNAME") or "Oh no!"
end

-- let's do a simple comparison
-- and print the test result
function checkUsername(username)
    if username == getUsername() then
        tex.print("Authenticated.")
    else
        tex.print("I'm calling the \\TeX\\ police.")
    end
end
\end{luacode}

\newcommand\authenticate[1]{\luadirect{checkUsername(\luastring{#1})}}

\begin{document}

Trying with \verb|paulo|: \authenticate{paulo}

Trying with \verb|david|: \authenticate{david}

\end{document}

Die Ausgabe:

Rufen Sie die Polizei

Antwort3

Dies braucht

pdflatex --shell-escape

Bildbeschreibung hier eingeben

\documentclass{article}


\makeatletter
{\everyeof{\noexpand}
\xdef\usrtest{\@@input"|echo \string$USER""\expandafter}}
\makeatother

\def\me{davidc}

\begin{document}

\ifx\me\usrtest ME \else IMPOSTER\fi

\end{document}

Antwort4

Wie gesagt, ich glaube nicht, dass Sie direkt auf den Benutzernamen zugreifen können (Bearbeiten: OK, das können Sie, siehe oben), aber das optionalPaket sollte problemlos funktionieren:

\documentclass{minimal}
\usepackage[bob]{optional}    %\usepackage[joe]{optional}

\begin{document}
    This document was compiled by \opt{joe}{Joe Schmoe}\opt{bob}{Bob Wilbur}!
\end{document}

verwandte Informationen