背景

背景

我仍在寻找解决方案2010 年提出的问题:在 Mac OS X 下,但保持与其他操作系统兼容,我想隐藏机制。请注意:我不想在工作完成后删除辅助文件,也不想将它们附加到 PDF任何一个!

*TeX 项目应该在 Finder 中显示为单个文件,尽管它有许多临时和辅助实际文件。它将打开关联的 PDF 进行快速查看(包括图标)、查看和打印,或打开主文件进行.tex编译,或打开所有.tex文件进行编辑。它仍将为终端应用程序保持透明的文件访问。这个概念称为捆绑或包装在 OS X 中。

完成此操作仅需要脚本或小应用程序能够自动完成的几件事:

  • .texp或附加.texd到文件夹名称(如由 Jérôme Laurens 为 iTeXMac 推出)这是该*tex计划面临的唯一变化。
  • 生成并添加至少一个.plist文件 – Info.plist? –,尽可能保持其最新。
  • 坚持并维护一定的文件和文件夹结构。

如果有以下几个步骤就更好了:

  • 破解Info.plistTeXShop(或其他程序)以获取对上述两个文件扩展名的编辑支持,以及预览功能以供查看。
  • 实际上使 TeXShop 支持包,即不再将元数据存储在% !TEX encoding = UTF-8 Unicode% !TEX TS-program = XeLaTeX% !BIB TS-program = biber或之类的注释中% !TEX root = main.tex
  • 存储用于编译的所有类和包的本地副本,但仅在被要求时使用。
  • 复活texwrapper 项目,这真是一个好主意。

最近封闭式问题表明 – 或者至少那里的评论者认为 – 这样的捆绑软件将与实际的开发版本并行使用;事实并非如此!

答案1

这是一个可行的基本答案;它有点复杂。另外,我不是一个程序员,也不是 Os X 专家。肯定有更好的方法可以达到同样的效果。

在答案的最后,有一个链接,您可以在那里下载帖子中描述的应用程序的副本。

背景

在 Os X 中,任何带有扩展名的目录都可以是“文档包”。要确定目录是否是包,某些应用程序必须将扩展名声明为包。编写应用程序的最简单方法是使用(免费)软件鸭嘴兽。该软件会将您的 shell 脚本包装到 mac 应用程序中(而且它还能做更多的事情)。

原则上,您可以直接使用脚本并将其手动包装为应用程序,但这在 10.6 中不受支持。我有一台装有 10.6 的机器,所以我决定使用 Platypus 来支持 .texd 文档。

艺术品

声称拥有该软件包所有权的应用程序可以设置软件包图标。我使用医生以及来自的艺术作品这里,如下所示:

在此处输入图片描述

文档图标最终看起来像这样:

在此处输入图片描述

Shell 脚本

现在,进入编程部分。基本上,这里你需要的是脚本,它告诉 TeXShop(或你选择的其他软件)打开 .texd 目录中的 .tex 文件。我编写了一个快速而粗糙的脚本,我们称之为bundle-actions.sh

脚本的输入是包的完整路径,例如“/Users/koji/Documents/TeX/My test Bundle.texd”。脚本在 .texd 文件夹中查找

  1. 一个名为 main.tex 的文件 – 这是最佳选择。
  2. 一个文件,其名称与封闭的 .texd 文件夹相同,即“.../LetterToSanta.texd/LetterToSanta.tex”。主要是为了向后兼容,尽管我不太喜欢它。更改封闭包文档的名称可能会破坏包。不太聪明。
  3. 任何单个 .tex 文件(如果有)。

如果以上方法都不起作用,您必须进入 .texd 包(右键单击,“显示包内容”)并自行修复。

此外,它还提供了基本的 QuickLook 支持。在 QuickLook 中,点击 Finder 中的空格键即可预览该软件包。我选择将 QuickLook 指向与上述 .tex 文件相对应的 .pdf 文件。该支持是“基本的”,因为它没有错误检查。如果软件包中没有 QuickLook 文件夹,它将创建一个并将 Preview.pdf(名称由 QuickLook 固定)链接到主 pdf 文件。此外,它会将其标记为隐藏,因此它不会弹出到您的 Finder 视图中。

最后,Finder 还会显示软件包的内容。这样您就可以添加文件、删除文件、创建子目录等。警告:有时它可以工作,有时 Finder 不允许您进行更改。在这种情况下,返回一步,右键单击包并选择“显示包内容”。然后,您将能够在包内进行编辑。

Shell脚本如下:

#!/bin/sh

# This is the ".texd" bundle opener for MacOS. 
# It looks inside the .texd directory to open 
# some tex file.

# The algorithm is: if there's a main.tex file, open that. 
# If not, but there's a .tex file with the same name of the .texd
# bundle, open that (e.g. letterToSanta.texd/letterToSanta.tex)
# If not, but there's only one tex file, open that.

#osascript -e 'quit app "TeXShop"'

TSFile="$1"
sameFile="$1/`basename $1 .texd`.tex"
# This here is to compute the number of .tex files in .texd folder
noTeXs="`ls \"$1\"/*.tex 2>/dev/null | wc -l|cut -d' ' -f 8`"


if [ -f "$1/main.tex" ] ; then 
    TSFile="$1/main.tex"
elif [ -f "$sameFile" ] ; then
    TSFile="$sameFile"
elif [ $noTeXs -eq 1 ] ; then
    TSFile="`ls \"$1\"/*tex`"
else
    osascript -e 'tell app "TeX Bundle" to display dialog "I could not find a TeX file to open"'
    exit
fi;

# OPTIONAL: 
# Add a TeX subtree inside the bundle.
export TEXMFHOME="$1/texmf:`/usr/texbin/kpsewhich -var-value TEXMFHOME`"

# ==========================
# = Basic QuickLookSupport =
# ==========================
# If QuickLook subdirectory does not exist, create it
# a link to the .pdf file, and hide it, 
# so that the .texd document previews as .pdf
if ! [ -d "$1/QuickLook" ]  ; then
    # File aliases would be useful here, but you can't 
    # make file aliases inside a bundle :(
    # In any event, removing the QuickLook subdir, will recreate it next time

    mkdir "$1/QuickLook" && ( cd "$1/QuickLook";  ln -s  "../`basename \"$TSFile\" .tex`.pdf" \
            "Preview.pdf"  ) && /usr/bin/chflags hidden "$1/QuickLook"
fi



# =====================
# = Call the programs =
# =====================

# Reveal what's inside the .texd
open -R "$TSFile" 
# Open TeXShop
open -a TeXShop "$TSFile"

制作应用程序

现在,启动 Platypus 并设置如下项目:

  • 设置你的艺术品。
  • 输出:无
  • 标识符: org.koji.TeXBundle (或类似名称)
  • 作者:你自己在这里。
  • 设置标志“在后台运行”
  • 取消设置所有其他标志。
  • 设置“接受掉落的物品”。设置后,将出现“设置”按钮。点击它,
    • 删除扩展名 *
    • 添加扩展 texd
    • 应用程序是“查看器”
    • 选择您的作品并通过“选择文档图标”进行设置

以下是一些选项的屏幕截图:

在此处输入图片描述

在此处输入图片描述

现在创建一个应用程序并保存它。如果你愿意,可以对其进行优化,但是确保标记选项“使用 XML 属性列表格式而不是二进制格式”。这很重要!

在此处输入图片描述

最后的润色

现在到了最后一点;您需要在 OSX 背后欺骗它将目录视为文件包。

打开终端,然后cd /path/to/your/application/TeXBundle.app/Contents编辑文件Info.plist。您需要一个纯文本编辑器来编辑它。使用vi Info.plistopen -a TextEdit Info.plist或任何其他编辑器。

转至以下内容部分:

    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>texd</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>docIcon.icns</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
    </dict>

并将其更改为

            <dict>
                    <key>CFBundleTypeExtensions</key>
                    <array>
                            <string>texd</string>
                    </array>
                    <key>CFBundleTypeIconFile</key>
                    <string>docIcon.icns</string>
                    <key>CFBundleTypeRole</key>
                    <string>Viewer</string>
                    <key>LSTypeIsPackage</key>
                    <string>YES</string>
            </dict>

您添加的部分LSTypeIsPackage就是奇迹发生的地方。从现在开始,Os X 将允许您将 .texd 文件夹视为文件。

为了测试它,创建一个文件夹“test”,并在其中编辑“main.tex”如下所示:

在此处输入图片描述

在此处输入图片描述

文件 main.tex 可以是任何内容;试试这个:

\documentclass{article}
\begin{document}
    I work!
\end{document}

现在返回上一级,并将扩展名 .texd 添加到文件夹 test。Finder 应如下所示:

在此处输入图片描述

请注意,文件夹现在看起来像一个文件,里面有你选择的作品。双击它将启动 TeXShop 并打开 Finder 窗口进入 texd 文件夹。

一次编译之后,在查找器中点击空格键将显示从 latex 获得的 pdf 的预览。

免责声明

我不是程序员。我不知道自己在做什么;我只是对答案进行了一些研究,因为这个问题很有趣。如果你丢失了信息,那你就得靠自己了。在尝试之前,先问一下真正有知识的人。

希望有人能改进这个答案。

下载

我将捆绑应用程序的副本上传至文件投放器. 谨慎使用。

相关内容