Auflistungen und Text in tabularx

Auflistungen und Text in tabularx

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, \newcolumntypedas 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} 

Bildbeschreibung hier eingeben

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} 

Bildbeschreibung hier eingeben

verwandte Informationen