我正在开展一个协作项目,我们使用 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
。)