以下代码:
\documentclass{article}
\usepackage[cp1250]{inputenc}
\usepackage[T4]{fontenc}
%\usepackage[OT4]{fontenc}
%\usepackage{polski}
\usepackage{amsmath,amssymb}
\usepackage{enumerate}
\def\re{\mathbb{R}}
\begin{document}
\begin{enumerate}
\item
Sprawdzić, czy są normami na $\re^2$:
\begin{enumerate}[a)]
\item
$\|(x_1,x_2)\|=(|x_1|^{1/2}+|x_2|^{1/2})^2$,
\item
$\|(x_1,x_2)\|=|x_1|^2+|x_2|^2$,
\item
$\|(x_1,x_2)\|=
\begin{cases}
\|(x_1,x_2)\|_2,&\text{gdy $x_1x_2>0$},\\ %this is line 27
\|(x_1,x_2)\|_1,&\text{gdy $x_1x_2\leq0$}.
\end{cases}
$
\end{enumerate}
\item
Niech $\|{}.{}\|_1$ i $\|{}.{}\|_2$ będą dowolnymi (nie tylko $l_2^p$, jak w poprzednim przykładzie) normami. Czy jest normą $\frac12(\|{}.{}\|_1+\|{}.{}\|_2)$?
\end{enumerate}
\end{document}
给出错误信息
! Please use \mathaccent for accents in math mode.
\add@accent ...@spacefactor \spacefactor }\accent
#1 #2\egroup \spacefactor ...
l.27 \|
(x_1,x_2)\|_2,&\text{gdy $x_1x_2>0$},\\ %this is line 27
?
\usepackage[T4]{fontenc}
用下面注释的其中一行替换后,所有代码都可以编译,不会出错。请注意\|
,之前在代码中使用时没有任何问题。
我知道如何纠正文件以获得开场规范(\|
),但我的问题是:这种奇怪行为的根源是什么?
答案1
该文件t4enc.def
确实
\def\|{\ifmmode\Vert\else\I\fi}% single universal accent
其中缺少一个重要的部分,即首字母\relax
。使用较新版本的 LaTeX,最好进行定义\protected
。
所发生的情况是,对\|
incases
进行检查和扩展,以查看它是否以以下方式开头\omit
(表格中的标准行为),前进入当前单元格的数学模式,因此遵循错误分支。
\documentclass{article}
\usepackage[utf8]{inputenc} % I can't use cp1250
\usepackage[T4]{fontenc}
%\usepackage[OT4]{fontenc}
%\usepackage{polski}
\usepackage{amsmath,amssymb}
\usepackage{enumerate}
\newcommand\re{\mathbb{R}}
% fix the bad definition in t4enc.def
%\def\|{\relax\ifmmode\Vert\else\I\fi}% single universal accent
\protected\def\|{\ifmmode\Vert\else\I\fi}% single universal accent
\begin{document}
\begin{enumerate}
\item
Sprawdzić, czy są normami na $\re^2$:
\begin{enumerate}[a)]
\item
$\|(x_1,x_2)\|=(|x_1|^{1/2}+|x_2|^{1/2})^2$,
\item
$\|(x_1,x_2)\|=|x_1|^2+|x_2|^2$,
\item
$\|(x_1,x_2)\|=
\begin{cases}
\|(x_1,x_2)\|_2,&\text{gdy $x_1x_2>0$},\\ %this is line 27
\|(x_1,x_2)\|_1,&\text{gdy $x_1x_2\leq0$}.
\end{cases}
$
\end{enumerate}
\item
Niech $\|{}.{}\|_1$ i $\|{}.{}\|_2$ będą dowolnymi (nie tylko $l_2^p$, jak w poprzednim przykładzie) normami. Czy jest normą $\frac12(\|{}.{}\|_1+\|{}.{}\|_2)$?
\end{enumerate}
\end{document}
重要的提示
T4 编码是不是波兰语;它与 OT4 没有任何对应关系(数字除外)。波兰语完全由 T1 编码覆盖。
T4 是做什么用的?用于非洲语言。
这是相同的\usepackage[T1]{fontenc}
(并删除了的重新定义\|
。
你能发现区别吗?是的,T4 编码字体仅在该cmr
系列中可用,并且仅限位图。
答案2
缩小示例以使其更简洁一些,一种解决方法是保存其定义\|
并恢复它。
\documentclass{article}
\usepackage[utf8]{inputenc}
\let\oldmacro\|
\usepackage[T4]{fontenc}
\let\|\oldmacro
\usepackage{amsmath}%,amssymb}
\begin{document}
$\|(x_1,x_2)\|=
\begin{cases}
\|(x_1,x_2)\|_2,&\text{gdy $x_1x_2>0$},\\ %this is line 27
\end{cases}
$
\end{document}
问题是T4.def
改变了的定义,\|
以致于它不再被指定为分隔符:
\delimiter "026B30D .
在加载编码之前是原始定义,而在加载编码之后
\ifmmode \Vert \else \I \fi
我不太了解细节,无法彻底解释为什么这会导致特定的问题,但是 TeX 不喜欢这里\ifmmode
。 (\Vert
本身工作正常。或者,至少没有错误。)