Я думаю, псевдокод в заголовке говорит сам за себя: как TeX (или LaTeX) может узнать, какой $USER запущен pdflatex
?
Я работаю совместно и хочу, чтобы вывод выглядел немного иначе, когда это делаю я, latex
и когда это делает мой соавтор.
решение1
Метод, который должен работать на всех операционных системах (но по сути тот же, что и у Дэвида), и для которого также необходимо -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}
С помощью kpsewhich
мы можем избежать кавычек и долларов или %
; программа должна работать одинаково на TeX Live и на MiKTeX. Конечно, имя переменной для установки может отличаться в разных операционных системах: в USER
Unix и USERNAME
в Windows.
решение2
Моя скромная попытка с 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}
Выход:
решение3
Это необходимо
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}
решение4
Как я уже сказал, я не думаю, что вы можете получить доступ к имени пользователя напрямую (Правка: Хорошо, значит, вы можете, см. выше), но пакет optional
должен работать нормально:
\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}