为图片标题添加并定位图标

为图片标题添加并定位图标

所以我的问题是这样的:我需要在图片的标题中添加一个图标,以便在右侧的特定位置提供额外的视觉信息(在本例中显示给定图片有可用的 PDF)。所以我有这个代码:

\begin{figure}[ht!]
\centering
\includegraphics[height = 5.0cm]{hello.png}
\caption{This is my way to say hello!}
\label{fig:0101}
\end{figure}

其结果为:

你好

我想要做的是添加一些可以呈现如下效果的内容:

你好图标

我还有一些超过 1 行的标题,因此我需要将图标与标题文本垂直对齐。

我已经写好了这本书(500多页,这是具有新图标功能的新版本),所以我不想改变所有的图形环境。

请帮忙!非常感谢。

答案1

我的解决方案是覆盖\caption{...}加载一个 tikz 集,将标题放在一个节点中,并将第二个图像放在旁边的另一个节点中。

这是使用标准标题的初始工作示例(我正在使用 QR 包为图像的超链接生成二维码,您可以使用 PDF 图标或其他任何东西。)

\documentclass{article}

\usepackage{graphicx}

% Generate quick response code for hyperlink.
\usepackage{qrcode}
\newcommand{\tinyqr}[1]{
    \qrcode[hyperlink,level=L,height=0.75cm]{#1}
}
\begin{document}

\begin{figure}
    \centering
    \includegraphics[width=\textwidth]{ctan_lion_600.png}
    \tinyqr{https://ctan.org/lion/files}
    \caption{CTAN lion drawing by Duane Bibby.}
\end{figure}

\end{document}

生成 在此处输入图片描述


然后我创建了一个 tikz 布局来获得我想要的格式。在这里,您可以随意调整您喜欢的布局参数,例如间距。但这不使用图形或标题机制,因此它仅用于调整。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{graphicx}

% Generate quick response code for hyperlink.
\usepackage{qrcode}
\newcommand{\tinyqr}[1]{
    \qrcode[hyperlink,level=L,height=0.75cm]{#1}
}

\begin{document}

\begin{tikzpicture}[node distance=2mm]
    \node[anchor=south] (fig) at (0,0) {
        \includegraphics[width=\textwidth]{ctan_lion_600.png}
    };

    \node[anchor=right,below =of fig,text width=2in] (cap) {
        \textbf{Figure 1} CTAN lion drawing by Duane Bibby.};

    \node[left =of cap] (qr) {\tinyqr{https://ctan.org/lion/files}};
\end{tikzpicture}

\end{document}

这创造了 在此处输入图片描述


最后,我创建了自己的标题命令并复制了相关的 tikz 代码并用其替换了标题文本\caption(我很惊讶它竟然有效)。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{graphicx}

% Generate quick response code for hyperlink.
\usepackage{qrcode}
\newcommand{\tinyqr}[1]{
    \qrcode[hyperlink,level=L,height=0.75cm]{#1}
}

\newcommand{\sidecaption}[2]{
    \begin{tikzpicture}[node distance=2mm]
        \node[text width=2in] (caption) {
            \caption{#1}
        };
        % change left to right if desired
        \node[anchor=bottom,left =of caption] (image) {#2};
    \end{tikzpicture}   
}

\begin{document}


\begin{figure}
    \centering
    \includegraphics[width=\textwidth]{ctan_lion_600.png}
    \sidecaption{
        CTAN lion drawing by Duane Bibby. % your caption
    }{ 
        \tinyqr{https://ctan.org/lion/files} % your side image
    }
\end{figure}

\end{document}

它产生了 在此处输入图片描述 所以它并不完美。有两个突出的问题我不知道该如何解决。

  • 附加的二维码/图标的对齐方式。
  • 我必须为标题节点设置文本宽度,我将其固定为 2 英寸,但原则上,您可能希望将其作为更宽/更小标题(如任何子图中的标题)的参数。在理想情况下,这将是自动的,但这超出了我的技能范围。

答案2

这是Algeboy 的回答,解决了其发现的一些剩余问题。

如果你想使用 TiZ(这里其实没有必要),您可以使用锚点来定位第二个节点相对于第一个节点的位置。但是,您还需要暂时更改标题的格式,因为 LaTeX 会在图形内容和标题之间插入一个跳跃。以下使用该包来消除使用caption时出现的这个空格。\sidecaption

我还使宽度可调。如果我知道您希望如何确定,这很可能可以自动计算。定义命令时需要小心避免引入虚假空格。使用 Ti 时,这不是什么问题Z,但它可能会影响\sidecaption,例如。

调试提示:如果节点未按预期对齐,请添加draw以查看其中是否有任何节点比其显示的大小更大或更小。对于原始代码,您会看到顶部有额外的空间caption

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{caption}

% Generate quick response code for hyperlink.
\usepackage{qrcode}
\newcommand{\tinyqr}[1]{%
  \qrcode[hyperlink,level=L,height=0.75cm]{#1}%
}

\NewDocumentCommand {\sidecaption}{ O {2in} m m }{%
  \begin{tikzpicture}[node distance=2mm]
    \node[text width=#1] (caption) {%
      \captionsetup{skip=0pt}%
      \caption{#2}%
    };
    % change left to right and west to east if desired
    \node[anchor=center,left=of caption.west] (image) {#3};
  \end{tikzpicture}   
}

\begin{document}


\begin{figure}
  \centering
  \includegraphics[width=\textwidth]{tiger}
  \sidecaption{%
    Not the CTAN lion drawing by Duane Bibby.% your caption
  }{%
    \tinyqr{https://ctan.org/lion/files}% your side image
  }
\end{figure}

\end{document}

对齐的二维码和标题位于一只老虎(不是 CTAN 狮子)下方

相关内容