自动将 \º 替换为 $^\circ$

自动将 \º 替换为 $^\circ$

我不喜欢 LateX 排版的 º 符号,因为它有奇怪的下划线。 学位符号 Latex
所以我想创建一个新命令,用它来替换$^\circ$并试图在序言中像这样定义它:

\newcommand{\º}{$^\circ$}

不幸的是,发生的事情与我预期的不一样:
我的文档被扩展了,第一页显示了符号$^\circ$和标题,但没有其他内容。而我实际使用命令的位置完全忽略了它,只输出 30 而不是 30º。我做错了什么?编辑:MWE

\documentclass[12pt, a4paper, twoside, %openright, 
toc=listof, BCOR=5mm, bibliography=totoc, parskip=half]{scrreprt}
\usepackage[T1]{fontenc} 
\usepackage[utf8]{inputenc}
\newcommand{\º}{$^\circ$}
\begin{document}
30º this will give me the output shown in the image.
30\ºthis is supposed to output 30$^\circ$, but doesn't. Instead it produces a new first page showing the symbol $^\circ$.
\end{document}

答案1

你可以直接使用\protected\def而不是\newcommand

\documentclass[
  12pt,
  paper=a4,
  twoside,
  %openright,
  toc=listof,
  BCOR=5mm,
  bibliography=totoc,
  %parskip=half,
]{scrreprt}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\protected\def\º{\ensuremath{^\circ}}

\begin{document}

30º this will give me the output shown in the image.

30\º this is supposed to output 30$^\circ$, and it does.

\end{document}

但是,您使用的度数符号是错误的,因为它º是 U+00BA 阳性序数指示符。

在此处输入图片描述

这是一个更好的方法来做你想做的事情:

\documentclass[
  12pt,
  paper=a4,
  twoside,
  %openright,
  toc=listof,
  BCOR=5mm,
  bibliography=totoc,
  %parskip=half,
]{scrreprt}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{newunicodechar}
\newunicodechar{°}{\ensuremath{^\circ}}

\begin{document}

30° is the right way to go.

\end{document}

在此处输入图片描述

答案2

使用xelatex以下命令定义即可立即使用。当然,siunitx方法不限于此。xelatex

\documentclass{article}

%\usepackage[T1]{fontenc}
%\usepackage[utf8]{inputenc}
\usepackage{siunitx}

\newcommand{\°}{\si{\degree}}

\begin{document}
30\° or \SI{30}{\degree}
\end{document}

答案3

您无法定义为 º 在 utf8 中不是单个符号。但您可以重新定义 º 的输出

\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}
\newunicodechar{º}{XXXX}
\begin{document}
30º 
\end{document}

在此处输入图片描述

编辑

并证明它也适用于 siunitx:

\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}
\usepackage{siunitx}
\newunicodechar{º}{\si{\degree}}
\begin{document}
30º
\end{document}

在此处输入图片描述

答案4

使用不同的方法,我发现

\usepackage{gensymb}

生成一个很好的度数符号,您只需在文件中输入

\degree

相关内容