Ich versuche, einige Listen und Texte in eine Tabularx-Umgebung zu bekommen, aber es sieht nicht sehr gut aus:
Ich habe den Vorschlag beiAuflistung innerhalb von Tabularx?die ^^J-Literale hinzuzufügen, damit das Ding tatsächlich kompiliert wird, aber das Ergebnis sieht ziemlich schrecklich aus und der Code ist nicht besser.
\begin{tabularx}{\linewidth}{l l X}\label{tab:peepholeex}
Original stack code & Optimised stack code & Notes \\ \toprule
\begin{lstlisting}^^J
SET 1^^J
ADD
\end{lstlisting} &
\begin{lstlisting}^^J
INC
\end{lstlisting} &
Take advantage of the J5's {\lstinline!INC!} instruction \\ \midrule
\begin{lstlisting}^^J
SET 1^^J
SUB
\end{lstlisting} &
\begin{lstlisting}^^J
DEC
\end{lstlisting} &
Same as above, but for subtraction \\ \midrule
\begin{lstlisting}^^J
SET 0^^J
TEQ^^J
DROP
\end{lstlisting} &
\begin{lstlisting}^^J
TSZ
\end{lstlisting} &
Generated with an {\lstinline!IFN, x, 0!} statement. Instead take advantage of
the {\lstinline!TSZ!} instruction of the J5 \\ \midrule
\begin{lstlisting}^^J
SET x^^J
STORE^^J
SET x^^J
LOAD
\end{lstlisting} &
\begin{lstlisting}^^J
DUP^^J
SET x^^J
STORE
\end{lstlisting} &
A store followed by an immediate load of the same value. Instead, duplicate the
stored value and just store (since it might be used elsewhere) \\
\end{tabularx}
Wie kann man das besser machen, damit es in der 3. Spalte keine merkwürdigen Zeilenumbrüche gibt? (Und wie macht man das allgemein besser!)
Antwort1
Ich schlage zwei Lösungen vor (sicherlich sind sie nicht die besten, aber es könnte eine Möglichkeit sein, auf die Frage aufmerksam zu machen).
Erste: Wenn Sie auf ein Paket verzichten können listings
, können Sie ein definieren, \newcolumntype
das verwendet \ttfamily
.
\documentclass{book}
\usepackage{capt-of}
\usepackage{booktabs}
\usepackage{tabularx}
\newcolumntype{L}{>{\ttfamily\arraybackslash}p{6em}}
\begin{document}
\captionof{table}{Some caption}\label{tab:peepholeex}\vspace{1ex}
\noindent
\begin{tabularx}{\linewidth}{LLX}
\normalfont\raggedright Original stack code & \normalfont\raggedright Optimised stack code & Notes \\
\toprule
SET 1\newline
ADD
&
INC
&
Take advantage of the J5's \texttt{INC} instruction \\ \midrule
SET 1\newline
SUB
&
DEC
&
Same as above, but for subtraction \\ \midrule
SET 0\newline
TEQ\newline
DROP
&
TSZ
&
Generated with an \texttt{IFN, x, 0} statement. Instead take advantage of
the \texttt{TSZ} instruction of the J5 \\ \midrule
SET x\newline
STORE\newline
SET x\newline
LOAD
&
DUP\newline
SET\newline
STORE
&
A store followed by an immediate load of the same value. Instead, duplicate the
stored value and just store (since it might be used elsewhere) \\
\end{tabularx}
\end{document}
Zweite: Wenn Sie nicht auf das Paket verzichten können listings
, gibt es hier eine (sehr) schmutzige Lösung mit \raisebox
.
\documentclass{book}
\usepackage{ragged2e}
\usepackage{capt-of}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{listings}
\newlength{\myup}
\begin{document}
\settoheight{\myup}{\vbox{\texttt{X}}}
\addtolength{\myup}{1.5pt}
\captionof{table}{Some caption}\label{tab:peepholeex}\vspace{1ex}
\noindent
\begin{tabularx}{\linewidth}{llX}
Original stack code & Optimised stack code & Notes \\[.5ex] \toprule
\begin{lstlisting}^^J
SET 1^^J
ADD
\end{lstlisting} &
\raisebox{\myup}{%
\begin{lstlisting}^^J
INC
\end{lstlisting}
}\rule[0pt]{0pt}{2.5\myup} &
\raisebox{\myup}{%
\parbox[t][2\myup][t]{13em}{\justifying\noindent
Take advantage of the J5's {\lstinline!INC!} instruction
}} \\[2ex]
\midrule
\begin{lstlisting}^^J
SET 1^^J
SUB
\end{lstlisting} &
\raisebox{\myup}{%
\begin{lstlisting}^^J
DEC
\end{lstlisting}
}\rule[0pt]{0pt}{2.5\myup} &
\raisebox{\myup}{%
\parbox[t][2\myup][t]{13em}{\justifying\noindent
Same as above, but for subtraction
}} \\[2ex] \midrule
\begin{lstlisting}^^J
SET 0^^J
TEQ^^J
DROP
\end{lstlisting} &
\raisebox{2\myup}{%
\begin{lstlisting}^^J
TSZ
\end{lstlisting}
} &
\raisebox{1.8\myup}{%
\parbox[t][4\myup][t]{13em}{\justifying\noindent
Generated with an {\lstinline!IFN, x, 0!} statement. Instead take advantage of
the {\lstinline!TSZ!} instruction of the J5
}}\\[5.5ex]
\midrule
\begin{lstlisting}^^J
SET x^^J
STORE^^J
SET x^^J
LOAD
\end{lstlisting} &
\raisebox{.8\myup}{%
\begin{lstlisting}^^J
DUP^^J
SET x^^J
STORE
\end{lstlisting}
}\rule[0pt]{0pt}{4.2\myup} &
\raisebox{2.5\myup}{%
\parbox[t][4\myup][t]{13em}{\justifying\noindent
A store followed by an immediate load of the same value. Instead, duplicate the
stored value and just store (since it might be used elsewhere)
}} \\
\end{tabularx}
\end{document}