我仍在寻找解决方案2010 年提出的问题:在 Mac OS X 下,但保持与其他操作系统兼容,我想隐藏机制。请注意:我不想在工作完成后删除辅助文件,也不想将它们附加到 PDF任何一个!
*TeX 项目应该在 Finder 中显示为单个文件,尽管它有许多临时和辅助实际文件。它将打开关联的 PDF 进行快速查看(包括图标)、查看和打印,或打开主文件进行.tex
编译,或打开所有.tex
文件进行编辑。它仍将为终端应用程序保持透明的文件访问。这个概念称为捆绑或包装在 OS X 中。
完成此操作仅需要脚本或小应用程序能够自动完成的几件事:
- 将
.texp
或附加.texd
到文件夹名称(如由 Jérôme Laurens 为 iTeXMac 推出)这是该*tex
计划面临的唯一变化。 - 生成并添加至少一个
.plist
文件 –Info.plist
? –,尽可能保持其最新。 - 坚持并维护一定的文件和文件夹结构。
如果有以下几个步骤就更好了:
- 破解
Info.plist
TeXShop(或其他程序)以获取对上述两个文件扩展名的编辑支持,以及预览功能以供查看。 - 实际上使 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 文件夹中查找
- 一个名为 main.tex 的文件 – 这是最佳选择。
- 一个文件,其名称与封闭的 .texd 文件夹相同,即“.../LetterToSanta.texd/LetterToSanta.tex”。主要是为了向后兼容,尽管我不太喜欢它。更改封闭包文档的名称可能会破坏包。不太聪明。
- 任何单个 .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.plist
或open -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 的预览。
免责声明
我不是程序员。我不知道自己在做什么;我只是对答案进行了一些研究,因为这个问题很有趣。如果你丢失了信息,那你就得靠自己了。在尝试之前,先问一下真正有知识的人。
希望有人能改进这个答案。
下载
我将捆绑应用程序的副本上传至文件投放器. 谨慎使用。