Apple - How to search LaTeX -documents in Spotlight?

This likely is a result of the editor/software for TEX you use since you don't need any spotlight importer to process plain text files. (So you could just delete your app's custom importer or choose an update/different importer).

Rather than guess at the case - here's how to nail down where the problem lies. The editor could be changing the ** kMDItemContentType** to one that's not indexed or you have a third party spotlight extension that's crashing. Here's how I'd know which of these (or something more unexpected) is happening:

A) Does spotlight index an arbitrary text file when you change the extension from .txt to .tex?
B) Compare metadata for the files to know what's happening using mdls


To test A, open Text Edit and paste one word into the document: osteoporosis

If needed, convert the document to plain text (it's probably rich text) - Shift + Command + T (or use the format menu - Make Plain Text) and save it to your desktop as file.txt - If the format menu says Make Rich Text then don't press the keys and just save the document.

At that point, spotlight should see the file immediately. If not, you have spotlight problem and not .tex file problems. This is a very basic problem if your spotlight is broken so as not to index plain text files. If this work, then change the .txt extension to .tex and re-check spotlight.


For test B - use the mdls command to examine the metadata differences between your file and the TextEdit file that work with spotlight. Pay special attention to the following fields:

kMDItemContentType             = "public.plain-text"
kMDItemContentTypeTree         = (
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemKind                    = "Plain Text Document"

Changing the .txt to .tex causes a change to this (since I have no application that claims the file extension of .tex and maps it to a launch services/spotlight classification and proper kMDItemContentType/kMDItemKind as opposed to a generic and ad/hoc type:

kMDItemContentType             = "dyn.ah62d4rv4ge81k3p2"
kMDItemContentTypeTree         = (
    "dyn.ah62d4rv4ge81k3p2",
    "public.data",
    "public.item"
)
kMDItemKind                    = "Document"

Here's a short test you can cut/paste if your terminal skills are not yet developed. It would delete the contents of any file names test_file on your desktop so make a backup if you're not sure before pasting the commands below:

cd ~/Desktop/
echo osteoporosis > test_file.txt
mdfind osteoporosis | grep Desktop
mdls  -name kMDItemContentType test_file.txt 
mv test_file.txt test_file.tex
mdfind osteoporosis | grep Desktop
mdls  -name kMDItemContentType test_file.tex 

The mdfind commands are the equivalent of using Spotlight, so check that the terminal search matches the spotlight search at that moment.

As a footnote, these tools are only needed to diagnose the extent of breakage and not a substitute for spotlight search in the end. Just that you can't diagnose a spotlight issue with spotlight alone. Also, you might want to watch the console log while you are doing the steps in ~/Desktop in case there are crash reports or other spotlight diagnostics happening while you are poking at the subsystem.

Also, things get nasty quickly if you can search the plain text document but not the text one. In your update, you mentioned that .tex files are of type "org.tug.tex" - you could explore the launch services database to find out what importers the system things is responsible for parsing this file and remove them (or just make an educated guess and temporarily delete the TEX apps to see if it "fixes" spotlight temporarily).

lsregister -dump| grep -n7 org.tug.tex

Where lsregister is a well-hidden tool in /System - see this thread on SuperUser to read up on launch services: https://superuser.com/questions/323599/ and this thread here: Duplicate entries in "Open With" menu in Finder even after rebuilding Launch Services for some oddball things to try. I'm fairly confident I could suss out what's amiss on your system in about 20 minutes of poking, but writing down all the possibilities in a way accessible to you and guessing a bit of the answers is proving harder than I expected.


I tried to reproduce your Spotlight problems in a virtual machine set-up with Mac OS X 10.8.

After installing MacTex-20150613 and updating all components (>300) including TexShop and LaTeXiT I had no problems searching for content in *.tex files.

After entering:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

I "succeeded" losing the ability to search for content in *.tex files.

To regain the ability to do so I did the following:

  • Logged-in as admin I copied the file /Applications/TeX/TeXShop.app/Contents/Library/Spotlight/TeX.mdimporter to /Library/Spotlight/ with

    sudo cp -R /Applications/TeX/TeXShop.app/Contents/Library/Spotlight/TeX.mdimporter  /Library/Spotlight/
    
  • Prepared the reindexing of my system by first going to the folder /.Spotlight-V100 (in the Finder menubar -> Go -> Go to Folder... and enter /.Spotlight-V100) and moving all files and folders in this folder to the trash can. You have to enter your admin password to do so. If you fail to enter the folder log in as root (You may have to enable root first using /System/Library/CoreServices/Directory Utility.app) and remove the content of the folder as root.
  • Rebooted the Mac
  • Logged in as admin and emptied the trash can. The reindexing will be started automatically.

Continuously checking all relevant informations like file attributes or launch services in different states of the system (with several VM snapshots) using mdls, xattr and other tools didn't reveal anything interesting or suspicious.


I have repeated all steps above more thoroughly in a new VM and used mdimport -d3 to check the behavior of Spotlight.

In a vanilla Mac OS X a .tex file is properly imported using a dyn.random importer:

host:~user$ /usr/bin/mdimport -d3 /Users/user/Desktop/sample.tex
(Debug) Import: file:/Users/user/Desktop/sample.tex plugin:(null) (null)
2015-09-23 20:20:42.359 mdimport[313:707] Imported '/Users/user/Desktop/sample.tex' of type 'dyn.ah62d4rv4ge81k3p2' with no plugIn. 

The content (keywords) was found.

The same applies to Mac OS X after installing but not starting one of the Tex.apps, the importer changed to RichText.mdimporter though:

host:~ user$ /usr/bin/mdimport -d3 /Users/user/Desktop/sample.tex
(Debug) Import: file:/Users/user/Desktop/sample.tex plugin:file://localhost/System/Library/Spotlight/RichText.mdimporter/ /System/Library/Spotlight/RichText.mdimporter
(Info) Import: public.tex 

After starting a Tex.app (in my case TeXShop) the importer uses the default TeX.mdimporter residing in the depth of the TeXShop bundle:

host:~ user$ /usr/bin/mdimport -d3 /Users/user/Desktop/sample.tex
(Debug) Import: file:/Users/user/Desktop/sample.tex plugin:file://localhost/Applications/TeX/TeXShop.app/Contents/Library/Spotlight/TeX.mdimporter/ /Applications/TeX/TeXShop.app/Contents/Library/Spotlight/TeX.mdimporter
(Info) Import: edu.uo.texshop.tex 

After updating the MacTex-20150613 including TexShop and LaTeXiT the indexing is completely broken:

host:~ user$ /usr/bin/mdimport -d3 /Users/user/Desktop/sample-2.tex
(Debug) Import: file:/Users/user/Desktop/sample-2.tex plugin:(null) (null)
2015-09-23 21:29:49.278 mdimport[5541:707] Imported '/Users/user/Desktop/sample-2.tex' of type 'public.tex' with no plugIn.

The proper path to the plugin TeX.mdimporter (inside TexShop) got lost and so the capability to index a new *.tex file vanished. Other plugins like the dyn.random or RichText.mdimporter don't step in probably because they don't index files of type 'public.tex'. Content search in (at least new) .tex files isn't possible anymore.

After copying TeX.mdimporter to /Library/Spotlight content indexing is restored:

host:~ user$ /usr/bin/mdimport -d3 /Users/user/Desktop/sample-3.tex
(Debug) Import: file:/Users/user/Desktop/sample-3.tex plugin:file://localhost/Library/Spotlight/TeX.mdimporter/ /Library/Spotlight/TeX.mdimporter
(Info) Import: public.tex 

To reindex all .tex files properly (especially those where content keywords aren't searchable) you have to rebuild the spotlight database (check the first part of my answer) or change the modification dates of all .tex files to initiate the reindexing of them.


Here's how I solved this problem.

Note. This still works since I first posted the solution. At that time I was using Mac OS 10.11.5 and TeXShop 3.62; now it's Mac OS 10.12.3 and TeXShop 3.77. To edit the .plist files (as explained below) I use Xcode.

First, using the mdls command, I found that all of my .tex files reported kMDItemContentType = “public.tex” (If your system reports differently, then you would have to modify the following instructions accordingly.)

So I opened TeXShop>Contents (by right-clicking TeXShop and selecting Show Package Contents). I amended Info.plist by adding public.tex as a Document Content Type UTI as follows (see the line highlighted in blue):

editing info.plist

Then I went on to amend the Info.plist in TeXShop>Contents>Library>Spotlight>TeX.mdimporter>Contents (execute Show Package Contents of TeX.mdimporter). Just like above, I added public.tex in appropriate places. See the next picture:

editing Info.plist of TeX.mdimporter

After this, Spotlight is searching the contents of .tex files.