![包装乳胶代码以实现快速重用](https://linux22.com/image/366198/%E5%8C%85%E8%A3%85%E4%B9%B3%E8%83%B6%E4%BB%A3%E7%A0%81%E4%BB%A5%E5%AE%9E%E7%8E%B0%E5%BF%AB%E9%80%9F%E9%87%8D%E7%94%A8.png)
亲爱的 Latex 社区,
感谢 Ulrike 对我的问题的帮助如何让长标题出现在各个页面上我现在终于可以为我的论文使用超长标题了。再次感谢 :-)
我正在寻找一种简单的方法来重复建议的代码行,而无需多次将其复制/粘贴到整个文档中。如果我手动执行一次,代码看起来就是这样的:
\begin{figure}[H]
\includegraphics{largeImage}
\end{figure}
\bigskip
\setbox0\vbox{\makeatletter
\let\caption@rule\relax
\captionof{figure}[short caption]{\kant[1-4]}
\global\skip1\lastskip\unskip
\global\setbox1\lastbox
}
\unvbox0
\setbox0\hbox{\unhbox1\unskip\unskip\unpenalty
\global\setbox1\lastbox}
\unvbox1
\vskip\skip1
相反,我尝试创建自己的命令,如 \longcaptions ,像这样从上面包装它:
\newcommand{\longcaption}[1]{
\bigskip
\setbox0\vbox{\makeatletter
\let\caption@rule\relax
\captionof{figure}[short caption]{#1}
\global\skip1\lastskip\unskip
\global\setbox1\lastbox
}
\unvbox0
\setbox0\hbox{\unhbox1\unskip\unskip\unpenalty
\global\setbox1\lastbox}
\unvbox1
\vskip\skip1
}
现在像这样使用它:
\begin{figure}[H]
\includegraphics{largeImage}
\end{figure}
\longcaption{long long text}
不幸的是,没有标题,只是在图片下写道:
规则@[短标题]长文本
因此,编译期间没有错误,但我只在图像下方的文本中看到上面的行。你知道我在这里做错了什么吗?我想我错过了一些迹象。在网上搜索并没有给我关于如何使用 \newcommand 执行更复杂的命令(如上面的命令)的正确答案,也许甚至不可能像这样包装它。如果是的话,有人知道其他方法吗?
亲切的问候,
斯蒂芬
答案1
您需要在不同的地方使用\makeatletter
和。\makeatother
\documentclass{article}
\usepackage[numbers]{kantlipsum}
\usepackage{caption}
\makeatletter
\newenvironment{figurewithlongcaption}
{\center\captionsetup{singlelinecheck=false}}
{\endcenter}
\newcommand{\longcaption}{\@dblarg\long@@caption}
\def\long@@caption[#1]#2{%
\setbox\z@=\vbox{
\let\caption@rule\relax
\captionof{figure}[#1]{#2}
\global\skip\@ne\lastskip\unskip
\global\setbox\@ne\lastbox
}
\vspace{\abovecaptionskip}
\unvbox\z@
\setbox\z@\hbox{\unhbox\@ne\unskip\unskip\unpenalty\global\setbox\@ne\lastbox}%
\unvbox\@ne
\vskip\skip\@ne
}
\makeatother
\begin{document}
\begin{figurewithlongcaption}
\rule{0.5\textwidth}{0.75\textheight}
\longcaption[Short caption]{\kant[1-4]\label{whatever}}
\end{figurewithlongcaption}
Reference: \ref{whatever}
\end{document}