Warum erzeugen einige negative Zahlen mit dem Fontenc-Paket seltsame Zeichen?

Warum erzeugen einige negative Zahlen mit dem Fontenc-Paket seltsame Zeichen?

Das

\documentclass[a4paper,10pt,openany]{scrbook}

\usepackage{minted}
\usepackage[T1]{fontenc} % comment-out this line to fix it

\newcommand{\ctype}[1]{\PYG{k+kt}{\texttt{#1}}}

\begin{document}

\begin{tabular}{|l|c|c|r|r|}
\hline
    Type & Bits & Bytes & Minimum & Maximum \\ \hline
    \ctype{int8\_t} & 8 & 1 & -128 & 127 \\ \hline
    \ctype{int16\_t} & 16 & 2 & -32,768 & 32,767 \\ \hline
    \ctype{int32\_t} & 32 & 4 & −2,147,483,648 & 2,147,483,647 \\ \hline
    \ctype{int64\_t} & 64 & 8 & −9,223,372,036,854,775,808 & 9,223,372,036,854,775,807 \\ \hline
\end{tabular}

\end{document}

erzeugt dies

Bildbeschreibung hier eingeben

Ich möchte fontencdie Warnungen „Schriftform * nicht definiert“ beheben, aber dadurch werden einige der negativen Zahlen verfälscht?

Warum fontenctritt dieser Effekt auf und wie kann ich ihn beheben?

Antwort1

Dies ist ein erweiterter Kommentar:

Ich frage mich, wie es möglich ist, dass das -Zeichen in den ersten beiden Zeilen und den letzten beiden Zeilen im OP MWE unterschiedliche Zeichen hat. Im folgenden MWE tippe ich nur -Zeichen neu ein (und berücksichtige auch die Tabellenformatierung vonegregzweites Beispiel) und es funktioniert ohne \DeclareUnicodeCharacter{2212}{-}und mit und ohne \usepackage[T1]{fontenc}:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{array,booktabs}
\usepackage{siunitx}

\begin{document}
    \begin{tabular}{
>{\color{purple}}r
                 S[table-format=2.0]
                 S[table-format=1.0]
                 S[table-format=-19.0]
                 S[table-format= 19.0]
                   }
\toprule
\verb+int8_t+  & 8  & 1 & -128                 & 127                 \\  
\midrule
\verb+int16_t+ & 16 & 2 & -32768               & 32767               \\  
\verb+int32_t+ & 32 & 4 & -2147483648          & 2147483647          \\  
\verb+int64_t+ & 64 & 8 & -9223372036854775808 & 9223372036854775807 \\ 
\bottomrule
    \end{tabular}
\end{document}

Ich verwende WinEdt als Editor-Voreinstellung für utf8die Kodierung, falls das wichtig ist.

Bildbeschreibung hier eingeben

Antwort2

Die Zeichen in den letzten beiden Zeilen sind U+2212, was in UTF-8 als Eingabe erfolgt <E2><88><92>und T1-codierte Schriftarten haben an diesen Stellen zufällig und â. Ohne erhalten Sie keine Ausgabe, sondern Warnungen über fehlende Zeichen.ĹŠfontenc

Verwenden Sie auch inputenc:

\documentclass[a4paper,10pt,openany]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{siunitx}

\DeclareUnicodeCharacter{2212}{-} % if U+2212 slips in

\newcommand{\ctype}[1]{\texttt{#1}}

\sisetup{group-separator={,}}

\begin{document}

\begin{tabular}{
  |l|
  S[table-format=2.0]|
  S[table-format=1.0]|
  S[table-format=-19.0]|
  S[table-format=19.0]|
}
\hline
Type & {Bits} & {Bytes} & {Minimum} & {Maximum} \\ \hline
\ctype{int8\_t} & 8 & 1 & -128 & 127 \\ \hline
\ctype{int16\_t} & 16 & 2 & -32768 & 32767 \\ \hline
\ctype{int32\_t} & 32 & 4 & −2147483648 & 2147483647 \\ \hline
\ctype{int64\_t} & 64 & 8 & −9223372036854775808 & 9223372036854775807 \\ \hline
\end{tabular}

\end{document}

(Ich habe es entfernt minted, weil die Definition \ctypeFehler verursachte.)

Bildbeschreibung hier eingeben

Nur zur Verbesserung, das Laden booktabsund Ändern der Tabelle in

\begin{tabular}{
  @{}
  l
  S[table-format=2.0]
  S[table-format=1.0]
  S[table-format=-19.0]
  S[table-format=19.0]
  @{}
}
\toprule
Type & {Bits} & {Bytes} & {Minimum} & {Maximum} \\
\midrule
\ctype{int8\_t} & 8 & 1 & -128 & 127 \\
\ctype{int16\_t} & 16 & 2 & -32768 & 32767 \\
\ctype{int32\_t} & 32 & 4 & −2147483648 & 2147483647 \\
\ctype{int64\_t} & 64 & 8 & −9223372036854775808 & 9223372036854775807 \\
\bottomrule
\end{tabular}

Ich habe auch die Einstellung für entfernt group-separator, wodurch der standardmäßige schmale Abstand erhalten bleibt:

Bildbeschreibung hier eingeben

verwandte Informationen