为什么 \newcommand{\°}{& \cmsi} 不起作用?

为什么 \newcommand{\°}{& \cmsi} 不起作用?

我在生成的 LaTeX 文档中

\newfont{\cmsi} {cmssqi10}

然后我有一个\newcommand不起作用的第一个

\newcommand{\°}{& \cmsi}

我还有第二个命令,它运行良好。

\newcommand{\0}{& \cmss}

如果我将 改为 a,一切\1正常。但是...
问题是我想保留 ,因为我不喜欢在 DB、DOK(HeaderFiles)和 CODE(LegacyCode)中的大型移植项目中更改它,因为有时“°”也用作分隔符。

如果我用a替换\1,一切正常,稍后会生成 PDF。

! Misplaced alignment tab character &.
<argument> &
             \cmsi 
l.20 \newcommand{\°}{& \cmsi}

This is pdfTeX, Version 3.14159265-2.6-1.40.16 (MiKTeX 2.9) entering
extended mode (DO_00012580_PA1_20151231.4.DOK LaTeX2e <2015/10/01>
patch level 2 Babel <3.9n> and hyphenation patterns for 69 languages
loaded. (E:\MiKTeXportable\tex\latex\base\article.cls Document Class:
article 2014/09/29 v1.4h Standard LaTeX document class
(E:\MiKTeXportable\tex\latex\base\size10.clo))
(E:\MiKTeXportable\tex\generic\german\german.sty v2.5e 1998-07-08)
(E:\MiKTeXportable\tex\latex\graphics\graphicx.sty
(E:\MiKTeXportable\tex\latex\graphics\keyval.sty)
(E:\MiKTeXportable\tex\latex\graphics\graphics.sty
(E:\MiKTeXportable\tex\latex\graphics\trig.sty)
(E:\MiKTeXportable\tex\latex\00miktex\graphics.cfg)
(E:\MiKTeXportable\tex\latex\graphics-def\pdftex.def
(E:\MiKTeXportable\tex\generic\oberdiek\infwarerr.sty)
(E:\MiKTeXportable\tex\generic\oberdiek\ltxcmds.sty))))
(DO_00012580_PA1_20151231.4.aux)
(E:\MiKTeXportable\tex\context\base\supp-pdf.mkii [Loading MPS to PDF
converter (version 2006.09.02).] )
(E:\MiKTeXportable\tex\generic\oberdiek\pdftexcmds.sty
(E:\MiKTeXportable\tex\generic\oberdiek\ifluatex.sty)
(E:\MiKTeXportable\tex\generic\oberdiek\ifpdf.sty))
(E:\MiKTeXportable\tex\latex\oberdiek\epstopdf-base.sty
(E:\MiKTeXportable\tex\latex\oberdiek\grfext.sty
(E:\MiKTeXportable\tex\generic\oberdiek\kvdefinekeys.sty))
(E:\MiKTeXportable\tex\latex\oberdiek\kvoptions.sty
(E:\MiKTeXportable\tex\generic\oberdiek\kvsetkeys.sty
(E:\MiKTeXportable\tex\generic\oberdiek\etexcmds.sty)))) ! Misplaced
alignment tab character &. <argument> &
             \cmsi  l.20 \newcommand{\°}{& \cmsi}
                               ?

这就是在 PDF 中创建输出注意:我仅将其从 \° 更改为 \1

\documentclass{article}
\usepackage{german}
\usepackage{graphicx} 
\pagestyle{empty}
\topmargin=-22.0mm
\evensidemargin=-25.4mm
\oddsidemargin=-25.4mm
\textwidth=20.5cm
\textheight=28.0cm
\hoffset=0mm
\voffset=0mm

\begin{document}

\newfont{\cmf}{cmssqi8}
\newfont{\cmsi}{cmssqi10}
\newfont{\cssi}{cmssqi12}
\newfont{\cmss}{cmssqi10}

\newcommand{\1}{& \cmsi}
\newcommand{\0}{& \cmss}
\newcommand{\f}{& \cmf }
\newcommand{\T}{& \LARGE\bf}
\newcommand{\B}{& \large\bf}
\newcommand{\linie}{&& \multicolumn{3}{l}{\line(1,0){455}}\\}
\newcommand{\fettlinie}{&& \multicolumn{3}{l}{\rule{455pt}{0.6mm}}\\}
\def\vline#1{&& \multicolumn{#1}{l}{\line(1,0){455}}\\}

\def\stift#1#2#3#4#5#6{\vspace{20mm}\hspace{3.6cm} \cmss\parbox[t]{5.5cm}{#1\\#2\\#3\\#4\\#5\\#6}}
\def\firma#1#2#3{\hspace{3.3cm} \parbox[t]{5.5cm}{#1\\#2\\#3}}
\def\anschrift#1#2#3#4#5#6{\hspace{3.6cm} \cssi #1\\

                         \hspace{3.6cm} \cssi\parbox{5.5cm}{#2\\#3\\#4\\#5\\#6}}
\def\uca#1#2{\hspace{3.3cm} \cmsi\parbox[t]{5.5cm}{#1\\#2}}
\def\ucb#1#2{\hspace{12.2cm} \cmsi\parbox[t]{5.5cm}{#1\\#2}}
\def\grundlage#1#2#3#4{\vspace{18mm}\hspace{3.6cm} \line(1,0){455}

                       \hspace{3.6cm} \cmf\parbox[t]{8cm}{#1\\#2\\#3\\#4}
                       \vspace{-20mm}}


\begin{cmsi}

\end{cmsi}
\newpage
\begin{cmsi}
\stift{Pensionskasse der Stadt Gaga} {Postfach 660} {2540 Gaga} {""} {""} {""}
\vspace{1cm}

\ucb{Verwaltung} {""}
\vspace{19cm}

\grundlage{Grundlage dieser Berechnung bildet das Reglement Ihrer}
          {Pensionskasse.}
          {Erstellt am 25.08.2016 im Auftrag Ihrer Pensionskasse.}
          {}
\vspace{-20.5cm}


\begin{tabular}{p{0cm}p{2.7cm}p{8.6cm}p{5.0cm}r}\\               
\1 \T  Pers"onlicher Ausweis\\ [ 4mm]
\fettlinie
\1 \0  Ausweis g"ultig ab 01.06.2015\1 Vertrag Nr. 1/19        \1 LKR \\  
\1 \0  f"ur Rentenversicherung\\ [ 2mm]
\linie
\0 Versicherte\1 Axxxxxxx Daniel         \\  
\0 Person\1 Geburtsdatum 30.05.1954\1 Vers. Nr. 109.55.201.133  A\\  
\1 \1  Versicherungsbeginn 01.06.2013\\  
\1 \1  Erreichen des Pensionsalters am 01.06.2018\1 \1  Franken            
\\ \linie
\1 \1  J"ahrlicher versicherter Lohn\1 \1   39'994\\  \1 \1  Besch"aftigungsgrad in \%\1   90.000\\  
\1 \1  Ihr Jahresbeitrag\1 \1    5'199\\  \linie
\0 Leistungen im\1 Voraussichtliche Altersrente                                                                                \1 im Alter 64\1   24'005\\  
\0 Alter        \1 Rentensatz in \%\1   60.022\\  
\1 \1  oder voraussichtliches Alterskapital\1 \1   384'080\\ \linie  
\0 Leistungen bei\1 Invalidenrente        \1 nach 24 Monaten Wartefrist\1   23'996\makebox[0cm][l]{*}\\  
\0 Invalidit"at\1 Invaliden-Kinderrente        \1 nach 24 Monaten Wartefrist\1    4'799\makebox[0cm][l]{*}
\\ \linie  
\end{tabular}

\begin{tabular}{p{0cm}p{2.7cm}p{13.1cm}p{0.5cm}r}                
\0 Leistungen im\1 Ehegatten- bzw. Lebenspartnerrente\1 \1    15'003\makebox[0cm][l]{*}\\  
\0 Todesfall\1 Todesfallkapital wenn keine Ehegatten- bzw. Lebenspartnerrente f"allig wird\1 \1    79'988\\  
\1 \1  Waisenrente\1 \1    4'799\makebox[0cm][l]{*}
\\ \linie  
\0 Einkauf\1 M"ogliche Einmaleinlage zur Ausfinanzierung der Rente ab Alter 60 (nach Erwerb der vollen Versicherungsdauer)\1 \1    42'179\\  \linie
\end{tabular}

\begin{tabular}{p{0cm}p{2.7cm}p{16cm}}                           
\0 Hinweise          \1 Bei den vorgenannten Renten handelt es sich um Jahresrenten.        \\  
\1 \1  *) Bei Unfall sind die Leistungen gem"ass den Bestimmungen im Reglement auf das gesetzliche Minimum beschr"ankt.\\  
\end{tabular}
\end{cmsi}
\end{document}

答案1

如果您的文件是 utf8 编码的——现在这很正常——那么您在使用 pdflatex 时无法定义命令,因为\newcommand° 不再是 utf8 中的单个字节,而是编码为0xC2 0xB0

它可以与 xelatex 或 lualatex 等 utf8 引擎之一一起工作。

您还可以使用原语定义您的命令,\def因为它将“吃掉”0xB0 作为参数,但您应该小心,不要定义以 0xC2 开头的另一个非 ASCII 字符:

 %utf8 encoded file ...
\documentclass[]{article}
\begin{document}

%\newcommand\°{& abc} %doesn't work
\def\°{& abc} %works

%\def\±{blub} %<--- not allowed, starts with hex C2 too

\begin{tabular}{ll}
\end{tabular}
\end{document}

总的来说,使用 pdflatex 时最好避免在命令名称中使用非 ascii 字符。

相关内容