目标
我的目标是将列表放在页边距中。我想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}