
我正在進行一個協作項目,我們使用 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系統的使用者名稱並將其儲存在\username
.您需要--shell-escape
在 LaTeX 編譯器中新增標誌,因為id
是一個(未註冊的)外部命令。
\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
。)