上下文
我想并排显示 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 个列表以满足以下要求
- 它们之间的间距不是硬编码的。
- 如果页面尺寸发生变化,它们必须一起占据整个宽度,但不能夸张地超出文本宽度。
其他背景信息
我知道更改页面大小并不常见。因此,对大小进行硬编码可能是正确的,但我仍然想找到一种方法来按比例指定宽度,而不是固定大小(硬编码)。
请注意,我在 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: