Czy możesz zastąpić piaskownicę aplikacji, zmusić aplikację do korzystania z katalogu roboczego?


1

Próbuję skonfigurować asymptote na moim komputerze Mac, który jest matematycznym językiem graficznym dla LaTeX. Program jest narzędziem wiersza poleceń systemu Unix. Zgodnie z instrukcjami konfiguracji na stronie http://asymptote.sourceforge.net/doc/Configuring.html możesz ustawić czytnik PDF do automatycznego otwierania za pomocą tego narzędzia. Po ustawieniu pdfviewer="/Applications/Preview.app/Contents/MacOS/Preview";(która jest ścieżką do wiersza poleceń wykonywalnego dla Preview.app), wówczas renderowanie grafiki z asymptotą powoduje następujący błąd:

2012-10-10 10:15:08.758 Preview[45884:707] PVPDFPageContainer initWithURL:out.pdf -- file://localhost/Users/username/Library/Containers/com.apple.Preview/Data/ failed, error = Error Domain=NSCocoaErrorDomain Code=260 "The file “out.pdf” couldn’t be opened because there is no such file." UserInfo=0x7f99f2c6d590 {NSFilePath=/Users/username/Library/Containers/com.apple.Preview/Data/out.pdf, NSUnderlyingError=0x7f99f2c6d500 "The operation couldn’t be completed. No such file or directory"}

Najwyraźniej Preview próbuje otworzyć dokument według nazwy pliku w lokalnym katalogu piaskownicy ~/Library/Containers/com.apple.Preview/Data/. Czy mogę w jakiś sposób nadpisać to zachowanie i zmusić Preview do szukania pliku w katalogu roboczym procesu?


Jeśli nie można zmusić aplikacji Mac do otwierania plików w katalogu roboczym zamiast katalogu piaskownicy, być może zmuszenie asymptoty do przekazania pełnej nazwy ścieżki zamiast samej nazwy pliku do podglądu zadziałałoby. Jak to zrobić, to oczywiście pytanie do społeczności tex, a nie społeczności mac.
zyggurizm 10.10.12

Ogólnym rozwiązaniem może być pośredni skrypt powłoki, który tworzy bezwzględną nazwę pliku na podstawie pliku względnego do bieżącego katalogu roboczego. „readlink <nazwa pliku>” da to wyjście.
Danny Staple,

Odpowiedzi:


0

Utwórz skrypt powłoki - tj. Asympdf.sh o następującej treści:

/Applications/Preview.app/Contents/MacOS/Preview `readlink -f $1`

Jeśli umieścisz ten skrypt gdzieś, tj. W pobliżu asymptotowych plików binarnych, możesz ustawić ustawienie pdfviewer tak, aby wskazywało na ten skrypt.


To dobre rozwiązanie. Dziękuję Ci. Czy możesz mi powiedzieć, co robi Commlink readlink? Nie znam tego, a strona podręcznika była trudna do zrozumienia.
zyggurizm

1
Readline jest pierwotnie przeznaczony do podążania za dowiązaniami symbolicznymi i pobierania oryginalnego pliku, ale można go również wykorzystać do uzyskania bezwzględnych ścieżek w bash. Strona man opisuje go jako „kanonizujący” - to znaczy znaleźć jeden prawdziwy plik, na który wskazują wszystkie dowiązania symboliczne (i ścieżka może mieć więcej niż jeden).
Danny Staple

Więc właściwie nie mogę tego uruchomić. readlink kończy działanie z opcją „readlink: niedozwolona opcja - f”. Jestem na lwie górskim 10.8, więc może różne wersje readlink zaakceptowały tę opcję? Również użycie „stat -f” nie działało (strona podręcznika readlink sugerowała taką alternatywę), w rzeczywistości wydaje się, że musisz dołączyć specyfikator formatu do przełącznika -f, więc spróbowałem „stat -f”% N „nazwa pliku” , ale po prostu wyświetla nazwę pliku, a nie pełną nazwę ścieżki, więc nadal nie działał.
zyggurizm

Wydaje mi się, że skoro skrypt powłoki dziedziczy mój bieżący katalog roboczy, nie muszę zadzierać z readlink ani nic takiego. Mogę tylko podać wyjściową nazwę pliku, out.pdf. Ostatecznie mój skrypt jest po prostu „open -a /Application/Preview.app out.pdf”. Bash przekazuje nazwę pliku do bieżącego katalogu roboczego i przekazuje go do Preview, czyli dokładnie tego, czego chcę.
ziggurizm

Ach, oczywiście - zapomniałem, że wersja GNU nie jest tym, co jest dostępne w OSX (readlink działa w Linuksie lub jeśli masz zainstalowane wersje GNU) - ma to alternatywę - stackoverflow.com/questions/1055671/… - ale jako mówisz, że możesz po prostu użyć pwd.
Danny Staple
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.