新定义的命令和特殊字符的问题

新定义的命令和特殊字符的问题

我遇到了以下问题。在我的文档中,我定义了一个新命令来保存一些字符

\renewcommand{\r}{r_\mathrm{max}}

此外,由于它是瑞典语,因此它使用了特殊字符 å,该字符实际上是由\aaLaTeX 提供的。但是,我新定义的命令似乎以某种方式破坏了命令\aa。我收到消息说 amissing $ was inserted和然后\aa似乎以某种方式被 替换了r_max

我认为问题在于\r上面的圆圈已经存在,所以才会出现问题。不幸的是,我的论文已经完成了(瑞典文摘要除外),而且我\r经常使用,所以我不想到处都改。有办法解决我的问题吗?

这是一个完全不起作用的例子:

\documentclass[11pt]{amsart}
\usepackage{geometry}                % See geometry.pdf to learn the layout options. There are lots.
\geometry{letterpaper}                   % ... or a4paper or a5paper or ... 
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{epstopdf}
\renewcommand{\r}{r_\mathrm{max}}
\usepackage[latin1]{inputenc}
\usepackage[swedish,english]{babel}
\title{Brief Article} 
\author{The Author}
\begin{document}
\maketitle

asdasds $\r$ \aa

\end{document}  

答案1

我强烈建议不要重新定义诸如这样的基本宏\accents。这会导致您遇到的麻烦。

如果\aa\AA是唯一使用环形重音符的宏\r,那么您可以重新定义它们。我们的示例文件使用字体编码OT。下面的行将用于编码T1

\DeclareTextAccent{\ring}{OT1}{23}
% \DeclareTextAccent{\ring}{T1}{6}
\renewcommand*{\aa}{\ring a}
\renewcommand*{\AA}{\ring A}

\r也可以使用,如果å直接使用(latin1包的 选项inputenc)。假设您不更改编码,则可以修复此问题:

\usepackage[latin1]{inputenc}
\DeclareInputText{197}{\r A}
\DeclareInputText{229}{\r a}

完整示例:

\documentclass[11pt]{amsart}
\usepackage{geometry}                % See geometry.pdf to learn the layout op
\geometry{letterpaper}                   % ... or a4paper or a5paper or ...
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{epstopdf}
\renewcommand{\r}{r_\mathrm{max}}

\DeclareTextAccent{\ring}{OT1}{23}
\renewcommand*{\aa}{\ring a}
\renewcommand*{\AA}{\ring A}

\usepackage[latin1]{inputenc}
\DeclareInputText{197}{\r A}
\DeclareInputText{229}{\r a}

\usepackage[swedish,english]{babel}
\title{Brief Article}
\author{The Author}
\begin{document}
\maketitle

asdasds $\r$ \aa

\end{document}

结果

答案2

如果你查看 LaTeX 内核latex.ltx,你会发现其中有以下几行

\def \aa {\r a}
\def \AA {\r A}

如你所见,环形重音符(\r)用于\aa和的定义\AA

更新 LaTeX 命令不是一个好主意。您可能希望改为定义\myr。只需使用文本编辑器将其更改\r为 即可\myr

答案3

由于 LaTeX 内核latex.ltx有以下几行

\def \aa {\r a}
\def \AA {\r A}

你需要做类似的事情

\let\ringaccent\r
\def\aa{\ringaccent a}
\def\aa{\ringaccent a}

在你重新定义之前\r

我不同意这种观点,即覆盖普通的 TeX 或 LaTeX 命令通常是一个坏主意。在数学输入中,您可能有充分的理由使用单字母宏,例如\r\v。将它们保留用于很少或从未使用的重音符号会很浪费。将它们保留用于仅两行 LaTeX 内部代码会很荒谬。TeX 旨在为我们提供灵活性;让我们使用它。

相关内容