我希望在使用 tt 字体时始终为'
和获得垂直引号"
。我可以使用用于 verbatim 环境的 upquote 包以及 textcomp 提供的宏来实现这一点,但我还希望它成为\texttt
和 的默认引号\ttfamily
。
\documentclass{article}
\usepackage{textcomp, upquote}
\begin{document}
\verb|This is a vertical quote: '|
\texttt{I wish this were a vertical quote: '
(like this one: \textquotesingle)}
\end{document}
有办法吗? 让我补充一下,使用 pdflatex,在有人建议使用仅适用于 xelatex/lualatex 的重新映射命令之前。
编辑:我已成功通过 Heiko Oberdiek 的 lm-ec-tt.map 方法(至少通过命令)实施了解决方案\pdfmapfile
。(我尚未尝试将修改后的 .map 和 .enc 文件放入我的 ~/texmf 区域。)
但我也成功进行了\ttfamily
重新定义,这是我认为我更喜欢的路径。不幸的是,\texttt
仍然不起作用。根据我对 article.cls 中代码的理解(显然是错误的),\texttt
应该根据 来定义\ttfamily
。那么为什么以下内容对 ? 不起作用\texttt
:
\documentclass{article}
\usepackage{textcomp, upquote}
\makeatletter
\renewcommand\ttfamily
{\not@math@alphabet\ttfamily\mathtt
\fontfamily\ttdefault\selectfont
\@noligs}% all I do is add this
\makeatother
\begin{document}
\texttt{texttt: quote:'; doublequote:"; grave:`}\par % doesn't work
{\ttfamily ttfamily: quote:'; doublequote:"; grave:`}\par % works
\verb| verb: quote:'; doublequote:"; grave:`|\par
\end{document}
答案1
LuaTeX
如果 LuaTeX 或 XeTeX 是选项,则包的默认字体fontspec
使用 Latin Modern 字体(Computer Modern 字体的后继者)。其中,单引号和双引号是垂直的:
\documentclass{article}
\usepackage{fontspec}
\begin{document}
\verb|These are vertical quotes: ' and "|
\texttt{These are vertical quotes: ' and "}
\texttt{These are vertical quotes: \textquotesingle\ and \textquotedbl}
\end{document}
特克斯
XeTeX 也能工作,但间距不同,因为它更好地尊重了与自动设置\texttt
相反的空间因子设置。\verb
\frenchspacing
pdfTeX
pdfTeX 的一个干净的解决方案是更改打字机字体的编码以替换单引号。映射文件条目如下所示:
ec-lmtt10 LMMono10-Regular " enclmec ReEncodeFont " <lm-ec.enc <lmtt10.pfb
编码在文件中定义lm-ec.enc
。可以通过以下方式找到它:
kpsewhich lm-ec.enc
该文件可以复制到lm-ec-tt.enc
,替换/quotesingleright
为/quotesingle
:
...
/ampersand
/quotesingle
/parenleft
...
lm-ec-tt.map
然后可以使用新的编码文件创建受影响字体的映射文件lm-ec-tt.enc
:
ec-lmtt10 LMMono10-Regular " enclmec ReEncodeFont " <lm-ec-tt.enc <lmtt10.pfb
ec-lmtt12 LMMono12-Regular " enclmec ReEncodeFont " <lm-ec-tt.enc <lmtt12.pfb
ec-lmtt8 LMMono8-Regular " enclmec ReEncodeFont " <lm-ec-tt.enc <lmtt8.pfb
ec-lmtt9 LMMono9-Regular " enclmec ReEncodeFont " <lm-ec-tt.enc <lmtt9.pfb
ec-lmtti10 LMMono10-Italic " enclmec ReEncodeFont " <lm-ec-tt.enc <lmtti10.pfb
ec-lmtto10 LMMonoSlant10-Regular " enclmec ReEncodeFont " <lm-ec-tt.enc <lmtto10.pfb
ec-lmvtk10 LMMonoPropLt10-Bold " enclmec ReEncodeFont " <lm-ec-tt.enc <lmvtk10.pfb
ec-lmvtko10 LMMonoPropLt10-BoldOblique " enclmec ReEncodeFont " <lm-ec-tt.enc <lmvtko10.pfb
ec-lmvtl10 LMMonoPropLt10-Regular " enclmec ReEncodeFont " <lm-ec-tt.enc <lmvtl10.pfb
ec-lmvtlo10 LMMonoPropLt10-Oblique " enclmec ReEncodeFont " <lm-ec-tt.enc <lmvtlo10.pfb
ec-lmvtt10 LMMonoProp10-Regular " enclmec ReEncodeFont " <lm-ec-tt.enc <lmvtt10.pfb
ec-lmvtto10 LMMonoProp10-Oblique " enclmec ReEncodeFont " <lm-ec-tt.enc <lmvtto10.pfb
然后 pdfTeX 文档从最开始替换这些字体:\pdfmapfile{=lm-ec-tt.map}
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{textcomp}
\begin{document}
\verb|These are vertical quotes: ' and "|
\texttt{These are vertical quotes: ' and "}
\texttt{These are vertical quotes: \textquotesingle\ and \textquotedbl}
\end{document}
通过地图和编码文件运用的技巧对于这种情况是有效的,因为交换的符号的边界框是相同的。