问题

问题

目标

我的目标是将列表放在页边距中。我想sidenotes为此使用 ,而不是snotez,因为我还需要前者中的其他功能,但不需要后者。


我尝试过

我对 LaTeX 包开发完全没有经验。

marginfigure我尝试修改来自的代码sidenotes软件包文档,

\newsavebox{\@sidenotes@marginfigurebox}
\DeclareCaptionStyle{marginfigure}{font=footnotesize}
\NewDocumentEnvironment{marginfigure} { o }
{
  \begin{lrbox}{\@sidenotes@marginfigurebox}
    \begin{minipage}{\marginparwidth}
      \captionsetup{type=figure,style=marginfigure}
}
{
    \end{minipage}%
  \end{lrbox}%
  \@sidenotes@placemarginal{#1}{\usebox{\@sidenotes@marginfigurebox}}
}

我最终得到了

\newsavebox{\@sidenotes@marginlistingbox}
\newenvironment{marginlisting}
{
  \begin{lrbox}{\@sidenotes@marginlistingbox}
    \begin{minipage}{\marginparwidth}
      \captionsetup{type=figure,style=marginlisting}
}
{
    \end{minipage}%
  \end{lrbox}%
  \marginpar{\usebox{\@sidenotes@marginlistingbox}}
}

结果/错误信息

但是当使用此代码时我收到错误消息

A <box> was supposed to be here.
 
‪main.tex, 39‬
<to be read again> 
                   s
l.39 \begin{marginlisting}
                          
I was expecting to see \hbox or \vbox or \copy or \box or
something like that. So you might find something missing in
your output. But keep trying; you can fix this later.

以及这个结果:

在此处输入图片描述

列表的宽度正确,但位置不正确(如图所示)。此外,它sidenotes@marginlistingbox在页面上多次放置在奇怪的位置。


问题

有人能指出我做错了什么并帮助我创建一个工作marginlisting环境吗?任何帮助我都会非常感激。提前谢谢您。


完成 MWE:

\documentclass[paper=a4]{scrartcl}
\usepackage[utf8]{inputenc}

% page geometry
\usepackage[inner=2cm, outer=7cm, marginparwidth=5cm, marginparsep=1cm]{geometry}
\usepackage{showframe}

% content in margins
\usepackage{marginnote}
\usepackage{sidenotes}

% listings
\usepackage[newfloat]{minted}
\definecolor{bg}{RGB}{248,248,248}
\setminted{bgcolor=bg,breaklines}

\usepackage{caption}
\usepackage{graphicx}

\DeclareCaptionStyle{marginlisting}{font=footnotesize}

\begin{document}

\newsavebox{\@sidenotes@marginlistingbox}
\newenvironment{marginlisting}
{
  \begin{lrbox}{\@sidenotes@marginlistingbox}
    \begin{minipage}{\marginparwidth}
      \captionsetup{type=figure,style=marginlisting}
}
{
    \end{minipage}%
  \end{lrbox}%
  \marginpar{\usebox{\@sidenotes@marginlistingbox}}
}

\section{Listing}

\begin{marginlisting}
\begin{minted}{bash}
# prerequisites
sudo apt-get install python3-pygments
\end{minted}
\caption{A listing in the margin}
\end{marginlisting}

\section{Figure}
\begin{marginfigure}
    \centering
    \includegraphics[width=\marginparwidth]{example-image-a}
    \caption{A figure in the margin}
\end{marginfigure}

\end{document}

答案1

如果您同意在标题中将列表称为“图”,那么您可以直接将其用于marginfigure列表。

如果你想将标题标签更改为清单然后,您可以定义一个包装器来\begin{marginfigure}改变\end{marginfigure}标题。一种快速的方法是使用\def\marginlisting,它会自动定义\begin{marginlisting},和\def\endmarginlisting,它定义\end{marginlisting}。使用\def可以绕过各种健全性检查,从而允许将参数从包装器环境简单地传输到内部marginfigure

如果您希望侧面列表出现在列表列表中,则可以type=listing在边距列表环境的标题设置中添加选项。请注意,如果您在 KOMA 脚本文档类中将列表列表与边距注释/侧注一起使用,则建议加载包scrhack以解决使用\float@listhead(请参阅KOMA 对 ToC 发出警告)。

梅威瑟:

\documentclass[paper=a4]{scrartcl}

% page geometry
\usepackage[inner=2cm, outer=7cm, marginparwidth=5cm, marginparsep=1cm]{geometry}
\usepackage{showframe}

% content in margins
\usepackage{marginnote}
\usepackage{sidenotes}

% listings
\usepackage{minted}
% address deprecated \float@listhead
\usepackage{scrhack}
% wrapper around marginfigure to set the caption label
\def\marginlisting{%
\captionsetup[figure]{type=listing,name=Listing}%
\marginfigure%
}
\def\endmarginlisting{\endmarginfigure}

\definecolor{bg}{RGB}{248,248,248}
\setminted{bgcolor=bg,breaklines}

\usepackage{graphicx}

\begin{document}

\section{Listing}
\begin{marginlisting}
\begin{minted}{bash}
# prerequisites
sudo apt-get install python3-pygments
\end{minted}
\caption{A listing in the margin}
\end{marginlisting}

\section{Figure}
\begin{marginfigure}
    \centering
    \includegraphics[width=\marginparwidth]{example-image-a}
    \caption{A figure in the margin}
\end{marginfigure}
\listoffigures
\listoflistings
\end{document}

结果:

在此处输入图片描述

答案2

您可能需要考虑将其参数放入边距(从页面顶部开始)的memoir类宏。如果一页上有多个,则它们将按顺序列在边距中,如果它们太长而无法放在一页上,它们将继续放在后续页面的边距中。\sidebar{<text>}\sidebar

以下是一个例子(但我不熟悉minted所以我忽略了它)。

% sidebarprob.tex  SE 609190

\documentclass[article]{memoir} %% set chapters as sections
\DisemulatePackage{caption} %% ignore memoir's caption code
\usepackage{caption}
\usepackage{lipsum}
\usepackage{comment}

%\usepackage{minted}  %% I don't understand this package

\begin{comment}  %% comment out OP's original code

\documentclass[paper=a4]{scrartcl}

% page geometry
\usepackage[inner=2cm, outer=7cm, marginparwidth=5cm, marginparsep=1cm]{geometry}
\usepackage{showframe}

% content in margins
\usepackage{marginnote}
\usepackage{sidenotes}

% listings
\usepackage{minted}
% wrapper around marginfigure to set the caption label
\def\marginlisting{%
\captionsetup[figure]{name=Listing}%
\marginfigure%
}
\def\endmarginlisting{\endmarginfigure}

\definecolor{bg}{RGB}{248,248,248}
\setminted{bgcolor=bg,breaklines}

\end{comment}  %%%%%% end of commented code

\usepackage{graphicx}

\begin{document}

\chapter{Listing}

\sidebar{
%\begin{minted}{bash}  % I can't use minted
\textit{\# prerequisites}

sudo apt-get install python3-pygments
%\end{minted}
\captionof{figure}{A listing in the margin}
}


\chapter{Figure}
\sidebar{
    \centering
    \includegraphics[width=\marginparwidth]{example-image-a}
    \captionof{figure}{A figure in the margin}
}

\sidebar{
\lipsum[1]
}

\end{document}

在此处输入图片描述

相关内容