\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 上和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}

相關內容