
私は共同プロジェクトに取り組んでおり、共有ファイルの保存に Dropbox を使用しています。Tex で作成された表 (table.tex) を tex ドキュメントに入力したいのですが、table.tex は Dropbox 内のコンピュータごとに異なるファイル パスを持っています。たとえば、ある人のファイルは次のようになります。
/Users/usernameA/Dropbox/folder1/tables/table.tex
そして他の人は
/Users/usernameB/Dropbox/folderx/folder1/tables/table.tex
私たちがやってきたことは次のとおりです:
\newcommand{\rootPath}{/Users/usernameA/Dropbox/folder1/tables
%\newcommand{\rootPath}{/Users/usernameB/Dropbox/folderX/folder1/tables
ドキュメントを再コンパイルする人は、他の人のパスをコメントアウトし、ドキュメントの後半で
\input{"\rootpath/table.tex"}
異なるコンピューターの異なるフォルダーから table.tex にアクセスするより簡単な方法はありますか?
答え1
次のソリューションは、id
コマンドを呼び出して現在の UNIX システムのユーザー名を取得し、それを に保存します。は (未登録の) 外部コマンドであるため、LaTeX コンパイラにフラグ\username
を追加する必要があります。--shell-escape
id
こちらをご覧ください:--shell-escape は何をしますか?
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\newcommand{\username}{}
\msg_new:nnn {doc} {noshell} {no~shell~avaliable-please~enable~shell~escape!}
\msg_new:nnn {doc} {nousername} {unable~to~extract~user~name}
\cs_generate_variant:Nn \regex_extract_once:nnN {nVN}
% determine if shell is avaliable
\sys_if_shell_unrestricted:TF {
% run id command
\sys_get_shell:nnN {id} {} \l_tmpa_tl
% use regex to extract user name
\regex_extract_once:nVN {uid=[0-9]*\((.*?)\)} \l_tmpa_tl \l_tmpa_seq
\int_compare:nTF {\seq_count:N \l_tmpa_seq < 2} {
\msg_error:nn {doc} {nousername}
}{
% extract user name
\tl_gset:Nx \username {\seq_item:Nn \l_tmpa_seq {2}}
}
} {
\msg_error:nn {doc} {noshell}
}
\ExplSyntaxOff
\begin{document}
\newcommand{\rootpath}{/Users/\username/Dropbox/folder1/tables}
\rootpath
\end{document}
答え2
私のコメントを詳しく説明すると、メインの tex ファイルが と同じディレクトリにある場合folder1
、すべてのユーザーが を持つことができます\input{folder1/tables/table}
。これを実現するための主な要件は、プロジェクト全体を含むフォルダーを共有していることです。( や は\input
必要ありませ"
ん.tex
。)