如何判断数字列表是否为空,然后根本不显示它?

如何判断数字列表是否为空,然后根本不显示它?

我想检查文档中是否有任何图片,以便决定是否要列出图片。这可能吗?不做诸如解析 lof 文件之类的事情是否可行?

请注意,检查 lof 文件是否为空对我来说不是一个好的解决方案,因为某些代码可能会将表格行以外的内容写入其中(例如babel)。

答案1

这次尝试背后的想法是使用标准 LaTeX 引用来检测figure文档中是否使用了 a。以下是所涉及的步骤(由 @egreg 进行了一些修改):

  1. 想出一个你永远不会在文档中使用的标签名称。例如fig:was:used:in:doc
  2. 修补环境以在末尾figure定义一个空命令(例如)\there@is@a@figure每一个图。这可以通过使用etoolbox包裹提供\AtEndEnvironment。更具体地说,命令

    \AtEndEnvironment{figure}{\gdef\there@is@a@figure{}} 
    

    figure将被永久地重新定义,直到文档中的最后。

  3. 在文档的末尾,我们检查是否\there@is@a@figure存在(已定义),并定义一个标签\label{fig:was:used:in:doc}。这个标签包含什么并不重要(它可以是最后使用的图形、章节、表格或其他内容):

    \AtEndDocument{\ifdefined\there@is@a@figure\label{fig:was:used:in:doc}\fi}
    
  4. 使用以下方式编写自己的“条件 LoF”命令

    \newcommand{\conditionalLoF}{\@ifundefined{r@fig:was:used:in:doc}{}{\listoffigures}}%
    

    该命令\conditionalLoF检查宏是否\r@fig:was:used:in:doc已定义。这是工作中的标准 LaTeX 引用机制,因为每个标签都定义<lab>了一个关联的宏\r@<lab>。如果未定义,则\@ifundefined{<cs>}{<undef code>}{<def code>}允许执行,否则执行。<undef code><cs><def code>

  5. 使用\conditionalLoF而不是\listoffigures
  6. 至少编译您的文档 3 次。

(1) 背后的主要思想是让标签fig:was:used:in:doc仅在使用时存在figure,而不必担心它叫什么。 (2) 为环境提供挂钩figure并允许全局(重新)定义\there@is@a@figure。 (3) 将标签的定义延迟fig:was:used:in:doc到文档末尾,以避免导致“多次定义标签”警告。 (4) 和 (5) 为条件 LoF 提供了一个干净的接口。 (6) 可能是唯一的缺点。但是,这是标签引用的标准配置,通常需要至少两次编译才能工作。

这是一个最小工作示例 (MWE)。它使用graphicx(使用demo封装选项)和lipsum只是为了展示,因此实际上没有必要。编译此 MWE

\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\makeatletter
\AtEndEnvironment{figure}{\gdef\there@is@a@figure{}} 
\AtEndDocument{\ifdefined\there@is@a@figure\label{fig:was:used:in:doc}\fi} 
\newcommand{\conditionalLoF}{\@ifundefined{r@fig:was:used:in:doc}{}{\listoffigures}}%
\makeatother
\begin{document}
\conditionalLoF% Conditionally insert List of Figures
\section{First section}
\lipsum[1]
%\begin{figure}
%  \centering\includegraphics{figure}
%  \caption{This is a caption}
%\end{figure}
\end{document}

按原样生产

在此处输入图片描述

取消注释figure环境并编译几次会产生

在此处输入图片描述

答案2

另一种方法是使用totalcount包:

\documentclass{article}
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{lipsum}% http://ctan.org/pkg/lipsum

\usepackage[figure]{totalcount}

\begin{document}

% Conditionally insert List of Figures
\iftotalfigures
  \listoffigures
\fi

\section{First section}
\lipsum[1]

%\begin{figure}
%  \centering\includegraphics{figure}
%  \caption{This is a caption}
%\end{figure}

\end{document}

答案3

totcount这是和的组合assoccnt(现在已合并xassoccnt,至少合并了 的一些功能 totcount

xassoccnt定义与主计数器同步的计数器,但如果设置为零figure则不会重置,即计数器保存数字的总数(除非直接操作)。figuretotalfigures

使用,总计数器的值在编译运行结束时\NewTotalDocumentFeature写入文件,并在下一次运行中读入,即在文档开始时就知道数字的数量。.aux

沃纳将该refcount方法与 结合使用assoccnt(这是 的前身xassoccnt,比 发达得多assoccnt(我了解各州——我是 的作者(x)assoccnt;-))

\listof...稍微重新定义了命令。

\documentclass{book}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xassoccnt}
\usepackage{graphicx}
\usepackage{tabularx}

\NewTotalDocumentCounter{totalfigures}
\NewTotalDocumentCounter{totaltables}

\DeclareAssociatedCounters{figure}{totalfigures}
\DeclareAssociatedCounters{table}{totaltables}

\makeatletter
\renewcommand{\TotalValue}[1]{%  A small bug fix
  \value{xassoccnt@total@#1}%
}


\let\@@latex@@listoffigures\listoffigures
\let\@@latex@@listoftables\listoftables

\renewcommand{\listoffigures}{%
  \ifnum\TotalValue{totalfigures} > 0 
  \@@latex@@listoffigures%
  \fi
}


\renewcommand{\listoftables}{%
  \ifnum\TotalValue{totaltables} > 0 
  \@@latex@@listoftables%
  \fi
}


\makeatother





\begin{document}
\tableofcontents

\clearpage


\listoftables

\listoffigures


A figure:

\begin{figure}[htbp]
\centering
\includegraphics[width=0.25\linewidth]{example-image-a}
\caption{A picture}
\label{fig:label}
\end{figure}

A table:

\begin{table}[htbp]
\centering
%\caption{A table}
\label{tab:label}
\begin{tabularx}{\linewidth}{lX}
test & test test test test test test test test test test test test test test test test test test test test
\end{tabularx}
\end{table}


\end{document}

答案4

可以使用assoccnt包裹你可以将计数器与其他计数器关联起来掌握计数器,将其串联起来。在文档的末尾,你写出一个,\label它将捕获相关计数器的现有总数。然后,使用refcount是可扩展的\getrefnumber,可以打印有条件的 LoF(或其他目录结构)。

\documentclass{article}
\usepackage{graphicx,lipsum,assoccnt,refcount}
\newcounter{totfigure}% This will capture the total number of figures
\DeclareAssociatedCounters{figure}{totfigure}% Step totfigure with every figure
\makeatletter
\AtEndDocument{%
  \edef\@currentlabel{\arabic{totfigure}}% Update current \label value
  \label{tot:figs:used:in:doc}}% Mark \label
\newcommand{\conditionalLoF}{%
  \ifnum\getrefnumber{tot:figs:used:in:doc}>0 % Check whether 'totfigure' > 0
    \listoffigures\fi}% If so, print \listoffigures
\makeatother
\begin{document}
\conditionalLoF% Conditionally insert List of Figures
\section{First section}
\lipsum[1]
%\begin{figure}
  %\centering\includegraphics[width=.5\linewidth]{example-image}
  %\caption{This is a caption}
%\end{figure}
\end{document}

相关内容