I found this post in the last few days while searching for an answer to the same problem. I'm also using XeLaTeX, and also need fontspec
, so I feel your pain. I tried all kinds of things, which I won't list here.
Here's the solution I came up with:
As you discovered, the Mapping=tex-text
option is what is changing the straight quotes to curly (no matter what). As you also saw, removing it results in no curly quotes anywhere. That's no good either.
The standard XeLaTeX template in TeXShop (I've excluded the sans and mono font declarations) has:
\usepackage{fontspec,xltxtra,xunicode}
\defaultfontfeatures{Mapping=tex-text}
\setmainfont[Mapping=tex-text]{Hoefler Text}
I decided to define a new font, using the same typeface as the roman font, but not include any mapping.
\newfontfamily{\S}{Hoefler Text}
As a final step, the \defaultfontfeatures{Mapping=tex-text}
line must be deleted or commented out. If not, it adds mapping to all font declarations. I suppose that's meant to be helpful in case one forgets it, but in this case, it's holding us back. Since \setromanfont
above already declared its mapping, removing it as a default feature won't alter the appearance of normal typing, giving you access to curly quotes.
The altered preamble section will then be:
\usepackage{fontspec,xltxtra,xunicode}
%\defaultfontfeatures{Mapping=tex-text}
\setmainfont[Mapping=tex-text]{Hoefler Text}
\newfontfamily{\S}{Hoefler Text}
When you need straight quotes, put them within the custom font call. Since there is no mapping, you will get finally them.
The ``antique'' table is 5{\S '}6{\S "} long.
I set custom commands to make writing easier.
\newcommand{\inch}{{\S "}}
\newcommand{\feet}{{\S '}}
This allows me to write:
The ``antique'' table is 5\feet 6\inch\ long.
I hope this helps. I was creating a 100+ page document, and needed both curly and straight quotes frequently. This is the only thing I've tried that works, period. If there is a more elegant way (in XeLaTeX with fontspec
), I'd love to learn it. I've only been using TeX/XeLaTeX for 2-3 months, so I'm kind of a newbie.
Use the csquotes
package. But I wouldn't: use the real quotes you want to see.
\documentclass[twoside,a4paper, 12pt]{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Times New Roman}
\newfontfamily\greekfont[Script=Greek]{Times New Roman}
\setmainlanguage{greek}
\setotherlanguage{english}
\usepackage[autostyle,english=american]{csquotes}
\MakeOuterQuote{"}
\begin{document}
Outside "english" environment --
\begin{english}
"Quotes" -- inside english environment
\end{english}
\begin{greek}
"Ελληνικό" -- περιβάλλον
\end{greek}
"Ελληνικά"
\end{document}
Of course, if you want LaTeX to guess the quotes to use based on the text, you're asking too much: LaTeX can't read and doesn't really know languages, it just follows instructions.
Best Answer
Add the
Ligatures=TeX
option:After setting this option,
fontspec
takes care that several characters in the input, which should produce a special ligature glyph in the output, are printed in the correct way. Now``
and''
will become “ and ”, respectively. A further example, now also--
and---
will become the en dash – and the em dash —, respectively.