Creo que el pseudocódigo del título lo dice todo: ¿Cómo puede TeX (o LaTeX) descubrir el $USER que está ejecutando pdflatex
?
Estoy colaborando y quiero que el resultado se vea ligeramente diferente cuando lo ejecuto latex
en comparación con cuando lo hace mi colaborador.
Respuesta1
Un método que debería funcionar en todos los sistemas operativos (pero es básicamente el mismo que el de David) y que también necesita -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}
Con kpsewhich
podemos evitar cotizaciones y dólares o %
; el programa debería funcionar igual en TeX Live y en MiKTeX. Por supuesto, el nombre de la variable a configurar puede ser diferente en los distintos sistemas operativos: USER
en los Unix y USERNAME
en los Windows.
Respuesta2
Mi humilde intento con 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}
La salida:
Respuesta3
esto necesita
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}
Respuesta4
Como dije, no creo que puedas acceder al nombre de usuario directamente (Editar: OK, entonces puedes, ver arriba), pero el optional
paquete debería funcionar bien:
\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}