上下文

上下文

上下文

我想并排显示 3 个列表。我已成功使用以下最小工作示例并排显示 2 个列表

\documentclass{article}

\usepackage{listings, lipsum}
\usepackage[a5paper, showframe]{geometry}

\lstset{
  basicstyle = \ttfamily\tiny,
  frame = single
}

\begin{document}
\lipsum[1][1-2]

\noindent
\begin{minipage}{.48\textwidth}
\begin{lstlisting}
print("1")
\end{lstlisting}
\end{minipage}%
\hfill
\begin{minipage}{.48\textwidth}
\begin{lstlisting}
print("2")
\end{lstlisting}
\end{minipage}%

\lipsum[2][1-2]
\end{document}

自从我使用这个\hfill命令后,如果页面大小发生变化,每个列表将占据大约一半的页面(见下图)

A2 纸张

在此处输入图片描述

A4 纸

在此处输入图片描述

A6 纸

在此处输入图片描述

问题

我已经成功并排显示 3 个列表。不过,还有一些细节需要修复。

\documentclass{article}

\usepackage{listings, lipsum}
\usepackage[a4paper, showframe]{geometry}

\lstset{
  basicstyle = \ttfamily\tiny,
  frame = single
}

\begin{document}
\lipsum[1][1-2]

\noindent
\begin{minipage}[t]{.3\textwidth}
\begin{lstlisting}
print("3")
\end{lstlisting}
\end{minipage}%
\hspace{0.4cm}
\begin{minipage}[t]{.3\textwidth}
\begin{lstlisting}
print("4")
\end{lstlisting}
\end{minipage}%
\hspace{0.4cm}
\begin{minipage}[t]{.33\textwidth}
\begin{lstlisting}
print("5")
\end{lstlisting}
\end{minipage}%

\lipsum[2][1-2]
\end{document}

由于我使用\hspace命令对列表之间的间距进行硬编码,如果页面大小发生变化,所有列表一起不会占据整个宽度,以至于它们不会超过文本宽度(见下图)。

A2 纸张

在此处输入图片描述

A4 纸

在此处输入图片描述

A6 纸

在此处输入图片描述

在这个例子中,您可以注意到为什么硬编码会导致列表无法在列边界内正确显示。

问题

如何并排显示 3 个列表以满足以下要求

  1. 它们之间的间距不是硬编码的。
  2. 如果页面尺寸发生变化,它们必须一起占据整个宽度,但不能夸张地超出文本宽度。

其他背景信息

我知道更改页面大小并不常见。因此,对大小进行硬编码可能是正确的,但我仍然想找到一种方法来按比例指定宽度,而不是固定大小(硬编码)。

请注意,我在 2 列示例(即.48)中对宽度进行了硬编码。理想情况下,即使是该大小也不能进行硬编码。我这样做的原因是我没有找到其他方法来实现该行为。

答案1

设定\xleftmargin\xrightmargin等于\framesep,它们将适合线宽。并且使用paracol,您可以设置的值\columnsep来控制代码框之间的间隔。

\documentclass{article}

\usepackage{listings, lipsum}
\usepackage[a4paper, showframe]{geometry}
\usepackage{paracol}
\usepackage{calc}

\lstset{
  basicstyle = \ttfamily\tiny,
  frame = single,
  xleftmargin=3pt,
  xrightmargin=3pt,
  framesep = 3pt,
}

\newcommand{\test}{
}

\begin{document}
\lipsum[1][1-2]

\begin{paracol}{3}
\begin{lstlisting}
print("3")
\end{lstlisting}

\switchcolumn
\begin{lstlisting}
print("4")
\end{lstlisting}

\switchcolumn
\begin{lstlisting}
print("5")
\end{lstlisting}
\switchcolumn
\end{paracol}

\lipsum[2][1-2]

\setlength{\columnsep}{2em}
\begin{paracol}{3}
\begin{lstlisting}
print("3")
\end{lstlisting}

\switchcolumn
\begin{lstlisting}
print("4")
\end{lstlisting}

\switchcolumn
\begin{lstlisting}
print("5")
\end{lstlisting}
\switchcolumn
\end{paracol}

\lipsum[3][1-2]
\end{document}

在此处输入图片描述

答案2

以下可能更接近期望的输出:

\documentclass{article}

\usepackage{listings, lipsum}
\usepackage[a4paper, showframe]{geometry}

\newlength{\mymargincorrection}
\setlength{\mymargincorrection}{3.4pt}
\lstset{
  basicstyle = \ttfamily\tiny,
  frame = single, 
    xleftmargin=\mymargincorrection,
    xrightmargin=\mymargincorrection,
}

\begin{document}
\lipsum[1][1-2]

\noindent
\begin{minipage}[t]{.3\textwidth}
\begin{lstlisting}
print("3")
\end{lstlisting}
\end{minipage}%
\hfill
\begin{minipage}[t]{.3\textwidth}
\begin{lstlisting}
print("4")
\end{lstlisting}
\end{minipage}%
\hfill
\begin{minipage}[t]{.33\textwidth}
\begin{lstlisting}
print("5")
\end{lstlisting}
\end{minipage}
\hspace{\mymargincorrection}%

\lipsum[2][1-2]
\end{document}

A2:

在此处输入图片描述

A4:

在此处输入图片描述

答案6:

在此处输入图片描述

相关内容