用法

用法

我正在写一份带有图表的报告,这些图表通常带有大量注释。目前我正在图表下写注释。

\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}}

但我想:

  1. 浮动部分内不能有尾注(其中编号可以乱序)。编辑也就是说,当我使用时\endnote,浮动中的尾注的编号可能与正文中的尾注的编号顺序不一致;并且
  2. 有一个单独的注释字段。

答案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}

相关内容