\if(username == foo) ... \else .. \fi?

\if(username == 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 で同じように動作するはずです。もちろん、設定する変数の名前は、さまざまなオペレーティング システムで異なる場合があります。UnixUSERの場合と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}

関連情報