我正在写一份带有图表的报告,这些图表通常带有大量注释。目前我正在图表下写注释。
\documentclass{scrreprt}
\usepackage[demo]{graphicx}
\usepackage{lipsum}
\newcommand{\notes}[1]{\textbf{Notes:}~\footnotesize{\textit{#1}}}
\begin{document}
\lipsum[1]
\begin{figure}[h]
\caption{Main caption}
\includegraphics[width=\linewidth]{}
\notes{\lipsum[1-2]}
\end{figure}
\lipsum[1]
\begin{figure}[h]
\caption{Other caption}
\includegraphics[width=\linewidth]{}
\notes{Foobar}
\end{figure}
\end{document}
但我更希望\notes
不要打印在图形浮动内(因为它占用了太多空间),而是作为尾注打印在它们自己的表格中。编辑也就是说,我想要一个\printfigurenotes
打印包含笔记内容列表的命令:
List of Figure notes:
Figure 1: \lipsum[1-2]
Figure 2: Foobar.
我怎样才能实现这个目标?
我能找到的最接近的现有结构是将注释的内容放在可选参数中,\caption
并在文档末尾生成一个图表列表,但这在概念上似乎是倒退的,并且需要大量工作才能使格式正确(以及丢失正确的图表列表)。
我还可以写类似的东西(例如,使用enotez
):
\newcommand{\notes}[1]{Notes:\endnote{#1}}
但我想:
- 浮动部分内不能有尾注(其中编号可以乱序)。编辑也就是说,当我使用时
\endnote
,浮动中的尾注的编号可能与正文中的尾注的编号顺序不一致;并且 - 有一个单独的注释字段。
答案1
免责声明:这是图哈米的回答。如上所述,这也是一种糟糕的做法,但它仍然有效。
touhami 的第二个解决方案的一个问题是,如果一个图没有注释,尾注的顺序就会乱七八糟。在过去的一个小时里,我一直在尝试让 LaTeX 将注释的值编译到尾注中,而不是它们的命令形式(例如,如果您写\lipsum[1-2]
,尾注也会获得\lipsum[1-2]
而不是文本Lorem ipsum dolor sit amet, consectetuer...
)。这对于任何依赖计数器的方法来说都特别烦人,因为计数器也会作为命令进行计算,这就是为什么 touhami 的答案最初只为所有条目生成“图 2”,因为它是调用时编号最高的图。
因此,为了克服这个问题,我们可以使用引用链接图表和尾注。在本例中,我利用该包来获得更好的超链接。通过适当的更改,hyperref
可以轻松地将调用“简化” 。\ref
用法
\notes{<figlabel>}{<notecontents>}
平均能量损失
\documentclass{scrreprt}
\usepackage[demo]{graphicx}
\usepackage{lipsum}
\usepackage{hyperref}
% Negates \phantomsection when hyperref isn't loaded.
\providecommand\phantomsection{}
% Creates labels/references from code without annoying IDEs
\newcommand{\dynamiclabel}[1]{\csname label\endcsname{#1}}
\newcommand{\dynamicref}[2]{\csname hyperref\endcsname[#1]{#2}}
\newcommand\figurenotes{%
\begingroup
\section*{\listfigurename{} notes}
\setlength\leftmargini{4.5em}
\begin{itemize}}
\newcommand*{\printfigurenotes}{%
\figurenotes\end{itemize}\endgroup}
% Key component:
\makeatletter
\newcommand{\notes}[2]{%
\dynamicref{#1:note}{See notes.}%
\g@addto@macro\figurenotes{\item[\phantomsection\dynamicref{#1}{Fig.\ \ref*{#1}}] \dynamiclabel{#1:note} #2}}
\makeatother
%for other endnotes
\usepackage{enotez}
\setenotez{counter-format = Alph}
\begin{document}
\chapter{Introduction}
bla bla\endnote{\lipsum[1]}
\lipsum[1]
\begin{figure}[h]
\caption{Main caption}
\label{fig:1}
\includegraphics[width=\linewidth]{}
\notes{fig:1}{\textbf{First} \lipsum[1-2]}
\end{figure}
\begin{figure}[h]
\caption{Main caption}
\includegraphics[width=\linewidth]{}
\end{figure}
\begin{figure}
\caption{Main caption}
\label{fig:2}
\includegraphics[width=\linewidth]{}
\notes{fig:2}{\textbf{Second} \lipsum[1-2]}
\end{figure}
\lipsum[1]
\printfigurenotes
\printendnotes
\end{document}
有趣的事实:在\
缩写中添加句号可以避免出现不良间距,例如...{Fig.\ \re...
上面的例子。
编辑:添加\phantomsection
根据建议休在评论中。我不知道这个存在,而且它工作得很好。\providecommand\phantomsection{}
为了好用而添加(即使它hyperref
存在时什么也不做)。
答案2
这就是你要找的吗?
\documentclass{scrreprt}
\usepackage[demo]{graphicx}
\usepackage{lipsum}
\usepackage{enotez}
\setenotez{list-name = {List of Figure notes:}}
\DeclareInstance{enotez-list}{itemize}{list}{number =Figure \enmark{#1},list-type = itemize}
\newcommand{\notes}[1]{Notes:\endnote{#1}}
\begin{document}
\lipsum[1]
\begin{figure}[h]
\caption{Main caption}
\includegraphics[width=\linewidth]{}
\notes{\textbf{First} \lipsum[1-2]}
\end{figure}X
\begin{figure}
\caption{Main caption}
\includegraphics[width=\linewidth]{}
\notes{\textbf{Second} \lipsum[1-2]}
\end{figure}
\lipsum[1]
\setlength\leftmargini {4em}
\printendnotes[itemize]
\end{document}
更新以下是一个如何定义的想法figurenotes
独立于其他注释的编号并打印在自己的列表中。
(不是最好的方法,但能起到作用)
\documentclass{scrreprt}
\usepackage[demo]{graphicx}
\usepackage{hyperref}
\usepackage{lipsum}
\newcounter{fnote}
\newcommand\figurenotes{%
\begingroup
\setcounter{fnote}{0}
\section*{\listfigurename{} notes}
\setlength\leftmargini{4.5em}
\begin{itemize}}
\newcommand*{\printfigurenotes}{%
\figurenotes\end{itemize}\endgroup}
\makeatletter
\newcommand{\notes}[2]{%
\refstepcounter{fnote}%
% Appearance of notes under the figure
% e.g. place `Notes:' with a superscript.
% Notes:\footnotemark[\thefnote]%
% or
% put italic text at the bottom right of the figure with
% a pagereference. \phantomsection to ensure hyperref points accurately.
\phantom{.}\hfill\textit{See figure note on page~\pageref{#2}.}%
\g@addto@macro\figurenotes{\stepcounter{fnote}\item[Figure \thefnote.] \phantomsection\label{#2}#1}}
\makeatother
%for other endnotes
\usepackage{enotez}
% The following might be necessary if the Notes: looks too
% much like the default in enotez.
%\setenotez{counter-format = Alph}
\begin{document}
bla bla\endnote{\lipsum[1]}
\lipsum[1]
\begin{figure}[h]
\caption{Main caption}
\includegraphics[width=\linewidth]{}
\notes{\textbf{First} \lipsum[1-2]}{lipsum1}
\end{figure}
\begin{figure}
\caption{Main caption}
\includegraphics[width=\linewidth]{}
\notes{\textbf{Second} \lipsum[1-2]}{lipsum2}
\end{figure}
\begin{figure}
\caption{Main caption}
\includegraphics[width=\linewidth]{}
\notes{\textbf{Third} \lipsum[1-2]}{lipsum3}
\end{figure}
\begin{figure}
\caption{Main caption}
\includegraphics[width=\linewidth]{}
\notes{\textbf{Fourth} \lipsum[1-2]}{lipsum4}
\end{figure}
\lipsum[1]
\printfigurenotes
\printendnotes
\end{document}