所以我的问题是这样的:我需要在图片的标题中添加一个图标,以便在右侧的特定位置提供额外的视觉信息(在本例中显示给定图片有可用的 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 的回答,解决了其发现的一些剩余问题。
如果你想使用 Ti钾Z(这里其实没有必要),您可以使用锚点来定位第二个节点相对于第一个节点的位置。但是,您还需要暂时更改标题的格式,因为 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}