从 tufte-book 文档类中的图形标题中删除前缀

从 tufte-book 文档类中的图形标题中删除前缀

我想删除图片标题中的前缀。我使用 MikTeX、XeLaTeX 和tufte-latex样式类。我尝试了三种变体:

\caption*{Foto}
\usepackage[labelformat=empty]{caption}
\captionsetup[figure]{labelformat=empty}

但没人帮忙。我做错了吗?以下是 MWE:

\documentclass[nofonts]{tufte-book}

\usepackage{polyglossia}
\setdefaultlanguage{russian}

\usepackage{fontspec}
\setmainfont{Palatino Linotype}

\usepackage{caption}

\begin{document}
\begin{figure}
    \includegraphics[scale=0.75]{square.png}
    \caption{Foto}
\end{figure}
\end{document}

答案1

如果您只想删除“Fig.”(俄语为“Рис.”),那么

\makeatletter
\renewcommand{\fnum@figure}{\thefigure}
\makeatother

在文档序言中将打印标题为

1:照片

如果您还想去掉数字和冒号,则需要稍微复杂一点的修补:\@caption必须修改整个命令。

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@caption}
  {\noindent\csname fnum@#1\endcsname: \ignorespaces}
  {}
  {}{}
\makeatother

使用此代码你将只获得

照片

这是一个完整的例子:

\documentclass[nofonts]{tufte-book}

\usepackage{polyglossia}
\setdefaultlanguage{russian}

\usepackage{fontspec}
\setmainfont{Palatino}
\newfontfamily{\cyrillicfont}{Palatino}

%%% With this code no name and number will appear
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@caption}
  {\noindent\csname fnum@#1\endcsname: \ignorespaces}
  {}
  {}{}
\makeatother

%%% Remove the above code and uncomment the following
%%% three lines if you still want the number
%\makeatletter
%\renewcommand{\fnum@figure}{\thefigure}
%\makeatother



\begin{document}

\begin{figure}
  \includegraphics[scale=0.75]{square.png}
  \caption{Foto}
\end{figure}

\end{document}

该包caption无法使用,因为它tufte-book以不兼容的方式重新定义了字幕的代码。


如果您不想要前缀和数字,但仍然想要一个数字列表(当然不包含数字),请在前面添加以下代码\makeatother

\pretocmd{\@tufte@lof@line}
  {\begingroup\let\numberline\@gobble}
  {}{}
\apptocmd{\@tufte@lof@line}
  {\endgroup}
  {}{}

列表中的标题将链接至实际图形。

答案2

下面的示例更进一步,还从 LoF 中删除了详细信息,因为\@caption默认情况下包含这些详细信息:

在此处输入图片描述

\documentclass{tufte-book}% http://ctan.org/pkg/tufte-latex
\makeatletter
\newenvironment{nocapfigure}
  {\let\H@refstepcounter\@gobble%
   \long\def\@caption##1[##2]##3{%
   \par%
   %\addcontentsline{\csname ext@##1\endcsname}{##1}%
   %  {\protect\numberline{\csname the##1\endcsname}{\ignorespaces ##2}}%
   \begingroup%
     \@parboxrestore%
     \if@minipage%
       \@setminipage%
     \fi%
     \@tufte@caption@font\@tufte@caption@justification%
     \noindent\ignorespaces##3\par%\noindent\csname fnum@#1\endcsname: \ignorespaces#3\par%
     %\@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
   \endgroup}\figure
    }{\endfigure}
\makeatother

\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\begin{document}
\listoffigures
\begin{figure}
  \includegraphics[scale=0.75]{example-image-a}
  \caption{Foto}
\end{figure}
\begin{nocapfigure}
  \includegraphics[scale=0.75]{example-image-a}
  \caption{Foto}
\end{nocapfigure}
\begin{figure}
  \includegraphics[scale=0.75]{example-image-a}
  \caption{Foto}
\end{figure}
\end{document}

删除\addcontentsline的部分\@caption会删除插入的一切来自 LoF。如果您希望保留图形标题,则\addcontentsline只能删除部分内容,例如:

\addcontentsline{\csname ext@##1\endcsname}{##1}%
  {\protect\numberline{}{\ignorespaces ##2}}%

从技术上讲,这只是删除了的内容\numberline,从而为 LoF 中的条目提供了适当的水平位置。

通过补丁程序的代码长度(使用etoolbox,比如说)相当于对\@captiontotally 进行重新定义,就像我在例子中所做的那样。

相关内容