Ich versuche, ein Dokument zu erstellen, das das Paket sehr intensiv nutzt bytefield
, und stoße dabei auf die Situation, dass es anscheinend keine gute Lösung für Felder gibt, die 64 Bit breit sein müssen (sogar die Dokumentation zeigt keine solchen Beispiele!). Ohne weitere Umschweife hier das Ergebnis:
Wie Sie sehen, ragt die Breite des 64-Bit-Werts über die Seite hinaus. Ich habe versucht, dies mit dem optionalen bitwidth
Parameter einzuschränken, wie in der Dokumentation beschrieben (z. B. wie folgtdie Frage dieser Antwortum ein Argument von anzugeben 0.8\textwidth
und von dort aus anzupassen, aber dabei wird ein „Arithmetischer Überlauf“-Fehler erzeugt. Weiß jemand, wie man die Breite desganzes Feld selbst, oder zumindest die bytefield
Erstellung eines Felds erzwingen, das nicht breiter als die Seite selbst sein kann?
Hier ist der Code für das minimal funktionierende Beispiel:
\documentclass[10pt]{extreport}
\usepackage[margin=2.0cm,a4paper]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{bytefield}
\begin{document}
\noindent
An \texttt{unsigned word} is defined as a 16-bit or two-octet quantity, having the range \texttt{[0, 65535]}: \\
\begin{center}
\begin{bytefield}[endianness=big]{16}
\bitheader{15, 7, 0} \\
\bitbox{16}{\texttt{unsigned word}} \\
\end{bytefield}
\end{center}
An \texttt{unsigned word} is addressable as an 2-size array of bytes, where \texttt{byte[0]} corresponds to the most-significant byte in the word (the \textit{high byte}) and \texttt{byte[1]} corresponds to the least-significant byte in the word (the \textit{low byte}). \\
\vspace{5pt}
\hrule
\vspace{15pt}
\noindent
An \texttt{unsigned doubleword} is defined as a 32-bit or four-octet quantity, having the range \texttt{[0, 4294967295]}: \\
\begin{center}
\begin{bytefield}[endianness=big]{32}
\bitheader{31, 23, 15, 7, 0} \\
\bitbox{32}{\texttt{unsigned doubleword}} \\
\end{bytefield}
\end{center}
An \texttt{unsigned doubleword} is addressable as an 4-size array of bytes, where \texttt{byte[0]} corresponds to the most-significant byte in the doubleword (the \textit{high byte}) and \texttt{byte[3]} corresponds to the least-significant byte in the doubleword (the \textit{low byte}). \\
\vspace{5pt}
\hrule
\vspace{15pt}
\noindent
An \texttt{unsigned quadword} is defined as a 64-bit or eight-octet quantity, having the range \texttt{[0, 18446744073709551615]}: \\
\begin{center}
\begin{bytefield}[endianness=big]{64}
\bitheader{63, 55, 47, 39, 31, 23, 15, 7, 0} \\
\bitbox{64}{\texttt{unsigned quadword}} \\
\end{bytefield}
\end{center}
An \texttt{unsigned quadword} is addressable as an 8-size array of bytes, where \texttt{byte[0]} corresponds to the most-significant byte in the quadword (the \textit{high byte}) and \texttt{byte[7]} corresponds to the least-significant byte in the quadword (the \textit{low byte}). \\
\end{document}
Der nicht funktionierende Code, der den Fehler erzeugt, ist folgender – das Einschließen in geschweifte Klammern behebt den Fehler nicht:
\begin{center}
\begin{bytefield}[endianness=big, bitwidth=0.8\textwidth]{64}
\bitheader{63, 55, 47, 39, 31, 23, 15, 7, 0} \\
\bitbox{64}{\texttt{unsigned quadword}} \\
\end{bytefield}
\end{center}
Und noch ein guter Rat: Ich bin immer noch (langsam) dabei, mich in TeX einzuarbeiten, daher ist meine Fähigkeit, eigennützig zu handeln, noch etwas beschränkt auf „online nach einer Lösung suchen, hoffen, dass jemand sie implementiert hat“. Vielleicht müssen Sie mir ein wenig dabei helfen, eine mögliche Antwort aufzuschlüsseln.
Falls es hilft: Bei der betreffenden Umgebung handelt es sich um MacTex 2015 (TeXLive-2015); der Code wurde mit TeXstudio 2.10.4 erstellt.
Antwort1
Sie können es mit \resizebox
dem Paket versuchen graphicx
.
\documentclass[10pt]{extreport}
\usepackage[margin=2.0cm,a4paper]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{bytefield}
\usepackage{graphicx}
\begin{document}
\noindent
An \texttt{unsigned word} is defined as a 16-bit or two-octet quantity, having the range \texttt{[0, 65535]}: \\
\begin{center}
\begin{bytefield}[endianness=big]{16}
\bitheader{15, 7, 0} \\
\bitbox{16}{\texttt{unsigned word}} \\
\end{bytefield}
\end{center}
An \texttt{unsigned word} is addressable as an 2-size array of bytes, where \texttt{byte[0]} corresponds to the most-significant byte in the word (the \textit{high byte}) and \texttt{byte[1]} corresponds to the least-significant byte in the word (the \textit{low byte}). \\
\vspace{5pt}
\hrule
\vspace{15pt}
\noindent
An \texttt{unsigned doubleword} is defined as a 32-bit or four-octet quantity, having the range \texttt{[0, 4294967295]}: \\
\begin{center}
\begin{bytefield}[endianness=big]{32}
\bitheader{31, 23, 15, 7, 0} \\
\bitbox{32}{\texttt{unsigned doubleword}} \\
\end{bytefield}
\end{center}
An \texttt{unsigned doubleword} is addressable as an 4-size array of bytes, where \texttt{byte[0]} corresponds to the most-significant byte in the doubleword (the \textit{high byte}) and \texttt{byte[3]} corresponds to the least-significant byte in the doubleword (the \textit{low byte}). \\
\vspace{5pt}
\hrule
\vspace{15pt}
\noindent
An \texttt{unsigned quadword} is defined as a 64-bit or eight-octet quantity, having the range \texttt{[0, 18446744073709551615]}: \\
\begin{center}
\resizebox{1.0\linewidth}{\height}{\begin{bytefield}[endianness=big]{64}
\bitheader{63, 55, 47, 39, 31, 23, 15, 7, 0} \\
\bitbox{64}{\texttt{unsigned quadword}} \\
\end{bytefield}}
\end{center}
An \texttt{unsigned quadword} is addressable as an 8-size array of bytes, where \texttt{byte[0]} corresponds to the most-significant byte in the quadword (the \textit{high byte}) and \texttt{byte[7]} corresponds to the least-significant byte in the quadword (the \textit{low byte}). \\
\end{document}
Andernfalls bleibt die Größe gleich:
\begin{center}
\centerline{\begin{bytefield}[endianness=big]{64}
\bitheader{63, 55, 47, 39, 31, 23, 15, 7, 0} \\
\bitbox{64}{\texttt{unsigned quadword}} \\
\end{bytefield}}
\end{center}
obwohl \centerline
dies nicht der beste LaTeX-Befehl ist. (Aber hier ist es in Ordnung, da es das einzige im center
Material ist).
Aktualisieren:
Aufgrund der überraschenden Tiefe des Bytefield-Felds war ein wenig Ausprobieren erforderlich. Außerdem ist mir nicht ganz klar, warum ich die Breite ein kleines bisschen reduzieren muss, um eine vertikale Verschiebung zu vermeiden.
\begin{center}
\mbox{\resizebox{.9999\linewidth}{\height}{%
\begin{bytefield}[endianness=big]{64}
\bitheader{63, 55, 47, 39, 31, 23, 15, 7, 0} \\
\bitbox{64}{} \\
\end{bytefield}}%
\kern-\linewidth
\makebox[\linewidth]{\raisebox{4ex}{\texttt{unsigned quadword}}}%
}
\end{center}
Antwort2
Die für ein Bit reservierte Breite muss mit der Anzahl der Bits multipliziert werden, so dass eine Zahl wie
bitwidth=0.015\textwidth
oder weniger funktioniert eher (Option showframe
nur für das Beispiel):
\documentclass[10pt]{extreport}
\usepackage[margin=2.0cm,a4paper,showframe]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{bytefield}
\begin{document}
An \texttt{unsigned quadword} is defined as a 64-bit or quantity, in the range
\texttt{[0, 18446744073709551615]}:
\begin{center}
\begin{bytefield}[endianness=big,bitwidth=0.015\textwidth]{64}
\bitheader{63, 55, 47, 39, 31, 23, 15, 7, 0} \\
\bitbox{64}{\texttt{unsigned quadword}} \\
\end{bytefield}
\end{center}
\end{document}