整个文档以等宽字体输入

整个文档以等宽字体输入

出于各种原因,我想将整个文档放入等宽字体。这名义上相当容易;你可以说\renewcommand{\familydefault}{\ttdefault}。但是,这种方法至少有两个问题(可能还有更多)。因此,我的问题实际上是三个独立的问题:

  1. 到目前为止,我遇到了空格无法正常工作的问题;这个问题似乎已由 修复\obeyspaces,但我不确定它的实际效果如何。我能找到的唯一参考资料是在这个网站上,他们并没有很好地解释该命令。您能否提供参考资料,或者至少解释一下该命令的作用及其局限性?
  2. 我的另一个问题是,有时 LaTeX 会生成符号(例如智能引号),而这些符号不符合 monotype 间距。即使符号位于所用字体中,LaTeX 似乎也会生成这些符号。有没有办法找出这种情况发生的时间,最好是告诉 LaTeX 在可能的情况下使用现有字符?更新:这根本不是问题;见下文。
  3. 我自己发现了这些问题,但似乎还存在其他问题。还有其他我应该注意的东西吗,比如重音字符?粗体似乎可以正常工作(至少在 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

在此处输入图片描述

相关内容