\if(사용자 이름 == foo) ... \else .. \fi?

\if(사용자 이름 == foo) ... \else .. \fi?

제목에 있는 의사 코드가 모든 것을 말해준다고 생각합니다. TeX(또는 LaTeX)는 실행 중인 $USER를 어떻게 찾을 수 있습니까 pdflatex?

latex나는 공동작업을 할 때와 달리 내가 실행할 때 출력이 아주 약간 다르게 보이도록 협력하고 있습니다 .

답변1

모든 운영 체제에서 작동해야 하고(기본적으로 David의 것과 동일) 다음이 필요한 방법입니다 -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에서 동일하게 작동해야 합니다. 물론 설정할 변수의 이름은 운영 체제에 따라 다를 수 있습니다. 즉, USERUnix와 USERNAMEWindows에서는 다를 수 있습니다.

답변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}

관련 정보