![整个文档以等宽字体输入](https://linux22.com/image/255111/%E6%95%B4%E4%B8%AA%E6%96%87%E6%A1%A3%E4%BB%A5%E7%AD%89%E5%AE%BD%E5%AD%97%E4%BD%93%E8%BE%93%E5%85%A5.png)
出于各种原因,我想将整个文档放入等宽字体。这名义上相当容易;你可以说\renewcommand{\familydefault}{\ttdefault}
。但是,这种方法至少有两个问题(可能还有更多)。因此,我的问题实际上是三个独立的问题:
- 到目前为止,我遇到了空格无法正常工作的问题;这个问题似乎已由 修复
\obeyspaces
,但我不确定它的实际效果如何。我能找到的唯一参考资料是在这个网站上,他们并没有很好地解释该命令。您能否提供参考资料,或者至少解释一下该命令的作用及其局限性? - 我的另一个问题是,有时 LaTeX 会生成符号(例如智能引号),而这些符号不符合 monotype 间距。即使符号位于所用字体中,LaTeX 似乎也会生成这些符号。有没有办法找出这种情况发生的时间,最好是告诉 LaTeX 在可能的情况下使用现有字符?更新:这根本不是问题;见下文。
- 我自己发现了这些问题,但似乎还存在其他问题。还有其他我应该注意的东西吗,比如重音字符?粗体似乎可以正常工作(至少在 Courier 字体中),但所有这样的格式都可以吗?
更新:如果相关的话(现在我想起来,几乎肯定是相关的),我正在使用 XeTeX 和 fontspec。我更愿意保留此设置,但也可以不使用 fontspec 或改用 pdflatex。
更新 2:“智能引号”问题实际上是标点符号后的空格问题。我启用了法语空格,但这只会强调我的问题第三部分的必要性。
答案1
最简单(但不是最灵活)的方法是使用回忆录使用该ms
选项。然后你就会得到一些看起来像是好的老式打字机手稿的东西。
memoir
还将等宽字体硬编码为cmtt
,参见 中的第 12643 行memoir.cls
。如果您想要其他等宽字体,则至少需要更改以下行:
\renewcommand{\familydefault}{cmtt}
\renewcommand{\rmdefault}{cmtt}
\renewcommand{\sfdefault}{cmtt}
\renewcommand{\bfdefault}{m}
\renewcommand{\itdefault}{n}
\renewcommand{\sldefault}{n}
\renewcommand{\scdefault}{n}
更改为缩放luximono
:
\usepackage[scaled=0.85]{luximono}
\input{glyphtounicode}
\pdfgentounicode=1
\renewcommand{\familydefault}{ul9}
\renewcommand{\rmdefault}{ul9}
\renewcommand{\sfdefault}{ul9}
\renewcommand{\bfdefault}{m}
\renewcommand{\itdefault}{n}
\renewcommand{\sldefault}{n}
\renewcommand{\scdefault}{n}
我也推荐这个套餐引用以确保引号正确。
编辑:我忘了您的偏好XeLaTeX
,而且看起来memoir
-optionms
不适用于XeLaTeX
。
这是一个新的(接近)MWE:
\documentclass[english,ms,11pt]{memoir}
\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenx}
\usepackage{lmodern}
% Comment the line above and uncomment the following
% ten line to change monotype font.
%\usepackage[scaled=0.85]{luximono}
%\input{glyphtounicode}
%\pdfgentounicode=1
%\renewcommand{\familydefault}{ul9}
%\renewcommand{\rmdefault}{ul9}
%\renewcommand{\sfdefault}{ul9}
%\renewcommand{\bfdefault}{m}
%\renewcommand{\itdefault}{n}
%\renewcommand{\sldefault}{n}
%\renewcommand{\scdefault}{n}
\usepackage[autostyle=true]{csquotes}
\usepackage{lipsum,kantlipsum}
\begin{document}
\lipsum[2]
\end{document}
电脑现代
鳞片状的豪华物品
答案2
“旧 TeX 世界”中的等宽字体通常不允许拉伸和收缩空格。以下是 的开头cmtt10.pl
,它是公制文件的人类可读版本cmtt10.tfm
:
(FAMILY CMTT)
(FACE O 352)
(CODINGSCHEME TEX TYPEWRITER TEXT)
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 33772436170)
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.524996)
(STRETCH R 0.0)
(SHRINK R 0.0)
(XHEIGHT R 0.430555)
(QUAD R 1.049991)
(EXTRASPACE R 0.524996)
)
同样对于pcrr8t.pl
(当\fontfamily{pcr}
选择时使用,即Courier):
(FAMILY UNSPECIFIED)
(FACE F MRR)
(CODINGSCHEME EXTENDED TEX FONT ENCODING - LATIN)
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 2142215632)
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.6)
(STRETCH R 0.0)
(SHRINK R 0.0)
(XHEIGHT R 0.425989)
(QUAD R 1.0)
(EXTRASPACE R 0.6)
(PARAMETER D 8 R 0.562)
(PARAMETER D 9 R 0.628992)
(PARAMETER D 10 R 0.75299)
(PARAMETER D 11 R 0.156995)
(PARAMETER D 12 R 0.804993)
(PARAMETER D 13 R 0.25)
(PARAMETER D 14 R 0.6)
(PARAMETER D 15 R 0.0)
(PARAMETER D 16 R 1.2)
)
因此一些输入如
\setbox0=\hbox spread 3pt{\ttfamily abc def}
(这是 TeX 如何通过拉伸或收缩单词间空间来进行对齐的一个小例子)结果如下
Underfull \hbox (badness 10000)
\ttfamily
因为当有效时,空间不会发生拉伸。
在 XeTeX 中情况完全不同,因为我检查过的等宽字体允许单词间空间拉伸和收缩:Latin Modern Mono、TeX Gyre Cursor、Courier。让我们在标准 10pt 大小下进行比较
- TeX Gyre 光标:6pt 加 3pt 减 2pt
- 拉丁现代单音节:5.25pt 加 2.625pt 减 1.75pt
- 快递:6.00096pt 加 3.00047pt 减 2.00032pt
- CMU 打字机文本:5.25pt 加 2.625pt 减 1.75pt
数据告诉我们单词间距的正常宽度以及可用的拉伸和收缩量。
让我们做个比较,先用 编译下面的文档,pdflatex
然后用xelatex
\documentclass[draft]{article}
\usepackage{ifxetex}
\ifxetex
\usepackage{fontspec}
\setmonofont{Latin Modern Mono}
\else
\usepackage{lmodern}
\fi
\usepackage{lipsum}
\textwidth=10cm
\begin{document}
\ttfamily
\noindent\lipsum[2]
\end{document}
结果如下pdflatex
结果如下xelatex
(尺寸不同是因为图像的制作方式不同,打印时的尺寸相同。)
我们可以注意到很大的不同。在第一种情况下,引擎无法进行正确的对齐,而在第二张图片中,文本看起来是对齐的和用连字符。
结论
如果需要复制用打字机准备的文档,则设置
\documentclass{article}
\usepackage{fontspec}
\usepackage{ragged2e}
\setmainfont[Ligatures=TeX]{Latin Modern Mono}% choose another one if you prefer
\begin{document}
% Uncomment the following line for standard spaces after periods
%\frenchspacing
% Uncomment the following line for ragged right setup
%\setlength{\RaggedRightRightskip}{0pt plus 4em}\RaggedRight
使用 XeLaTeX 似乎是最好的选择。
\frenchspacing
这是同时应用和的结果\RaggedRight
: