Tạo một dịch vụ bằng Automator để biên dịch tệp .tex trong Mac


2

Tôi đang sử dụng Mac OS X 10.9.3, TeXLive-2013 Máy quét để viết giấy tờ của tôi.

Tôi muốn sử dụng Trình tự động của Apple để tạo một dịch vụ (có sẵn từ menu chuột phải của Trình tìm kiếm trên một tệp) có tên là "Biên dịch tệp TeX" chạy một lệnh đơn giản sử dụng tệp đã chọn làm đầu vào .

Thí dụ:

  1. Trong một thư mục (/ Tập / Dữ liệu / TeX_docs /) Tôi có một exemple.tex tệp được tạo bởi Scrivener đã sẵn sàng để biên dịch với LaTeX.
  2. Tôi muốn nhấp chuột phải vào tệp này và từ menu Dịch vụ của Trình tìm, chọn tùy chọn "Biên dịch tệp TeX"
  3. Sau khi được chọn, dịch vụ này sẽ thực thi lệnh latexmk -pdf -bibtex exemple.tex và do đó biên dịch tệp .tex trong cùng một thư mục, tạo tệp .pdf (Lệnh Terminal này đang hoạt động hoàn hảo ngay bây giờ, do đó cần phải tự động hóa hành động này!)
  4. Sau khi biên dịch tệp .tex, một hộp thoại xuất hiện và hỏi tôi có muốn xóa tất cả các tệp tạm thời bằng một Yes hoặc là No Tùy chọn. Nếu Yes được chọn, nó sẽ xóa tất cả các tệp temp TeX (.aux, .bbl, .bcf, .fdb_latexmk, tập tin. Nếu không, nó không làm gì thêm và cuối cùng tôi có tất cả các tệp!

Câu trả lời:


1

Đây không phải là giải pháp tối ưu, nhưng hiện tại nó đang hoạt động. Đây là cửa sổ Automator:

Automator actions

Kịch bản shell đầu tiên biên dịch .tex tập tin sử dụng trình tự pdflatex - biber - pdflatex và chứa mã sau đây:

for f in "$@"
do 
    file_ext=${f##*.}
    if [ "$file_ext" = "tex" ]
    then
        foldername=$(dirname "$f")
        export foldername
        filename=$(basename "$f")
        filesimple=${filename%.tex*}
        cd $foldername
        /usr/local/texlive/2013/bin/x86_64-darwin/pdflatex "$filename"
        /usr/local/texlive/2013/bin/x86_64-darwin/biber "$filesimple"
        /usr/local/texlive/2013/bin/x86_64-darwin/pdflatex "$filename"
    else
        echo $f n\'est pas un fichier TeX
    fi
done

Kịch bản shell thứ hai xóa tất cả tạm thời tập tin và mở .pdf tập tin. Nó chứa mã sau đây:

for f in "$@"
do 
    file_ext=${f##*.}
    if [ "$file_ext" = "tex" ]
    then
        foldername=$(dirname "$f")
        filename=$(basename "$f")
        filesimple=${filename%.tex*}
        cd $foldername
        rm $filesimple.aux
        rm $filesimple.bbl
        rm $filesimple.bcf
        rm $filesimple.blg
        rm $filesimple.log
        rm $filesimple.run.xml
        open $filesimple.pdf
    else
        echo $f n\'est pas un fichier TeX
    fi
done

Tôi vẫn đang chờ đợi một giải pháp tốt hơn bằng cách sử dụng latexmk chỉ huy!


0

Thao tác này lấy tệp làm đầu vào và chạy lệnh latexmk của bạn, sau đó yêu cầu xác nhận trước khi xóa tất cả các tệp có phần mở rộng phù hợp.

for f in "$@"
do
  /path/to/latexmk -pdf -bibtex "$f"
done
find ${@%/*} -name "*.aux" -o -name "*.bbl" -o -name "*.bcf" -o -name "*.fdb_latexmk" -o -name "*.fls" -o -name "*.log" -o -name "*.out" -o -name "*.run.xml" -delete

Tôi đã thực hiện chính xác điều đó nhưng cuối cùng tôi vẫn gặp lỗi và tệp .tex không biên dịch! Dòng lệnh đầy đủ là: /usr/local/texlive/2013/bin/x86_64-darwin/latexmk —cp -pdf -bibtex -silent "$f". Thông báo lỗi chỉ là Run Shell Script failed - 1 error. Khi tôi chạy lệnh này trong Terminal, nó hoạt động hoàn hảo!
LuCouto

@LuCouto PATH của bạn trong Terminal là gì?
Mark

@Mark: PATH trong Terminal là /Applications/B1FreeArchiver.app/Contents/MacOS:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin
LuCouto
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.