
Ich arbeite an einem Gemeinschaftsprojekt und wir verwenden Dropbox, um unsere gemeinsamen Dateien zu speichern. Ich möchte eine in Tex erstellte Tabelle (mit dem Namen table.tex) in ein Tex-Dokument einfügen, aber table.tex hat auf verschiedenen Computern in Dropbox unterschiedliche Dateipfade. Beispielsweise könnte die Datei einer Person so aussehen
/Users/usernameA/Dropbox/folder1/tables/table.tex
und die anderen könnten
/Users/usernameB/Dropbox/folderx/folder1/tables/table.tex
Das haben wir getan:
\newcommand{\rootPath}{/Users/usernameA/Dropbox/folder1/tables
%\newcommand{\rootPath}{/Users/usernameB/Dropbox/folderX/folder1/tables
Wer das Dokument neu kompiliert, kommentiert die Pfade anderer Personen aus und später im Dokument
\input{"\rootpath/table.tex"}
Gibt es eine einfachere Möglichkeit, von verschiedenen Ordnern auf verschiedenen Computern aus auf table.tex zuzugreifen?
Antwort1
Die folgende Lösung ruft id
den Befehl auf, um den Benutzernamen des aktuellen UNIX-Systems abzurufen und ihn in zu speichern \username
. Sie müssen --shell-escape
Ihrem LaTeX-Compiler ein Flag hinzufügen, da id
es sich um einen (nicht registrierten) externen Befehl handelt.
Siehe hier:Was macht --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}
Antwort2
Um meinen Kommentar näher zu erläutern: Wenn sich die Haupt-Tex-Datei im selben Verzeichnis befindet wie folder1
, können alle Benutzer haben \input{folder1/tables/table}
. Die wichtigste Voraussetzung hierfür ist, dass Sie den Ordner freigegeben haben, der das gesamte Projekt enthält. (Und \input
benötigt weder "
noch .tex
.)