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 latex
als 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 kpsewhich
kö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: USER
auf Unix- und USERNAME
auf 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:
Antwort3
Dies braucht
pdflatex --shell-escape
\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 optional
Paket 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}