我的问题感觉像是重复的:fontenc 与 inputenc,但在这个问题中,OP使用了德语和非ascii字符。
我只说英语和写英语。我的键盘是标准的 en-GB 布局,这使得输入非 ASCII 字符变得困难。我使用latex
而不是xetex
。我的 LateX 文件 100% 是 ASCII。偶尔我下载到.bib
文件中的引文会包含非 ASCII 字符,但我从未遇到过“修复”这些问题的问题。我是否需要或是否会从使用fontenc
和inputenc
包裹?
答案1
字体编码
由于OT1
编码的缺陷,我还推荐T1
字体编码:
\usepackage[T1]{fontenc}
例如,OT1
不同家族的编码不一致,打字机也不同,……
\usepackage{textcomp}
对于获取其他符号(欧元等)很有用。我会使用前者进一步开发的Computer Modern/EC
新字体:Latin Modern
\usepackage{lmodern}
输入编码
当然,使用纯 ASCII 表示文本并使用命令表示其他字符是有优势的。这样,文本就与编码完全无关,并且可以更轻松地在不同环境中使用不同的编码。
但有时 ASCII 以外的字符可能会漏掉。如果OT1
文件编译正常,但缺少字符:
\documentclass{article}
% Default font encoding: OT1
\begin{document}
Umlauts via LICR: \"a\"o\"u\ss
Umlauts directly: äöüß
\end{document}
没有警告或错误,只有.log
文件显示:
Missing character: There is no ä in font cmr10!
Missing character: There is no ö in font cmr10!
Missing character: There is no ü in font cmr10!
Missing character: There is no ß in font cmr10!
切换到T1
编码有助于提供更多字符。但是我不知道有哪个编辑器支持T1
编码。例如,某些位置与 中的插槽匹配latin1
。但其他字符不同或有其他位置。以下示例使用 ^^ 符号来避免编辑和复制粘贴时出现问题,因为该示例同时使用两种不同的编码:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{lmodern}
\begin{document}
% Umlauts/Euro: äöüß/€
Umlauts/Euro via LICR: \"a\"o\"u\ss/\texteuro
Umlauts/Euro directly (latin9): ^^e4^^f6^^fc^^df/^^a4
Umlauts/Euro directly (UTF-8): ^^c3^^a4^^c3^^b6^^c3^^bc^^c3^^9f/^^e2^^82^^ac
\end{document}
这次,文件中甚至没有任何提示.log
。
因此我建议使用inputenc
带有编码的包ascii
:
\usepackage[ascii]{inputenc}
然后非 ASCII 输入字符会产生错误:
! Package inputenc Error: Keyboard character used is undefined
(inputenc) in inputencoding `ascii'.
See the inputenc package documentation for explanation.
Type H <return> for immediate help.
...
l.10 Umlauts/Euro directly (latin9): ä
öüß/€
修复输入行后,这有助于确保文件确实是 ASCII。
答案2
inputenc
如果你的输入中没有非 ASCII 字符,则不需要。英国键盘上唯一的东西通常是£
fontenc
如果您想要访问采用原始 TeX 字体的传统编码以外的编码的字体,则需要这样做OT1
。即使在英语中使用也有优势,T1
特别是如果在文本中使用,像 < 这样的符号会以倒置问号的形式出现,这样就不会那么令人意外。
答案3
你至少应该使用fontenc
包,这样你的符号才能正确设置。另请参阅这里。 如果你真的仅使用 ascii 字符,inputenc
不需要。
我个人会在所有情况下同时使用这两种方法,因为我没有发现使用它们有任何缺点。