[Tex/LaTex] How to get straight quotation marks

fontspecpunctuationxetex

How do I get straight quotation marks, i.e., " and ' in TeX? (No, \verb changes the font and this is unacceptable.)

[Edit] I forgot to mention that I’m using XeLaTeX, and fontspec is a necessity. The first two proposed answers did work, without fontspec.

Best Answer

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.

Related Question