我正在使用以下包:https://github.com/franen/matrita
有一个\rispostatutti
命令定义如下:
\newcommand{\rispostatutti}[1]{%
\par\nobreak\vspace{\prerisp}%
\noindent\respindent\respsym\ {\respfont#1}\par%
\vspace{\postrisp}%
}
此命令会阻止正确呈现字母È
。事实上,写作
\rispostatutti{\`E cosa buona e giusta.}
返回以下内容:
为什么第二个\`E
格式正确,而第一个却不正确?
MWE 重现该问题:
- 克隆https://github.com/franen/matrita
latex matrita.dtx
- 转到第 997 行
matrita.sty
,将È
s改为\`E
s pdflatex Esempio3.tex
- 转到 Esempio3.pdf 第 19 页并检查
顺便说一句,如果我不将È
s 更改为\`E
s,我会收到以下错误:
! Package inputenc Error: Unicode char �\check@icr (U+3DB)
(inputenc) not set up for use with LaTeX.
See the inputenc package documentation for explanation.
Type H <return> for immediate help.
...
l.207 \prefazio
?
! Package inputenc Error: Keyboard character used is undefined
(inputenc) in inputencoding `utf8'.
答案1
答案2
(我猜你的评论意味着我的评论解决了你的问题,:-)
所以我会把它写成一个正确的答案。)
一些命令会尝试抓取其后的第一个字母来应用一些特殊格式。似乎正在\respfont
使用 .¹ 参数执行此操作。\rispostatutti
如果第一个“字母”不是单个标记,则需要分组,因此您需要
\rispostatutti{{\`E} cosa buona e giusta.}
您inputenc
还需要对 UTF-8 字符进行分组:
\rispostatutti{{È} cosa buona e giusta.}
这是因为È
在常规 LaTeX 中,它实际上被视为两个八位字节。如果不进行分组,则只会抓取第一个八位字节(这会破坏编码)。如果您使用具有原生 UTF-8 支持的 XeLaTeX 或 LuaLaTeX,则它È
是一个单个标记,不会造成问题。
(这与UTF-8手册的部分mfirstuc
,因为\makefirstuc
同样尝试抓取其参数的首字母来对其进行大小写更改。)
¹ 或者,如果需要将字体更改应用于整个参数,则需要将的定义\rispostatutti
更改为使用,\respfont{#1}
而不是。\respfont #1