현재 그림 목록에 있는 이미지의 저작권 문제가 있는 텍스트를 넣고 싶지만 변경하여 각 이미지 아래에 배치해야 할 수도 있습니다.
이 MWE는 잘 작동합니다.
\documentclass{article}
\usepackage{graphicx}
\usepackage{caption}
\newcommand\after[1]{#1}
\newcommand\afterlof{; \after}
\newcommand\aftercap{ }%for optional use
\begin{document}
\begin{figure}[htb]
\includegraphics[width=.5\textwidth]{example-image-a}
\def\after{the copyright for this image}
\caption%
[caption for LOF\afterlof]%
{caption below the image\aftercap}
\end{figure}
\begin{figure}[htb]
\includegraphics[width=.5\textwidth]{example-image-a}
\def\after{the copyright for another image}
\caption%
[caption for LOF\afterlof]%
{caption below the image\aftercap}
\end{figure}
\listoffigures
\end{document}
내 질문:
방법이 있나요?~ 아니다각 캡션에 두 개의 명령(
afterlof
및 )을 수동으로 넣으려면 어떻게 해야 합니까?aftercap
정의에 따르면 캡션은 항상\caption[ \afterlof]{ \aftercap}
?
답변1
나는 키-값 인터페이스를 제안합니다:
\documentclass{article}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\xcaption}{O{}m}
{% #1 are options, #2 is the main caption text
\tl_set:Nn \l_lukascb_caption_text_tl { #2 }
\keys_set:nn { lukascb/caption }
{
loftext = #2,
#1
}
\lukascb_make_caption:VVVV
\l_lukascb_caption_text_tl
\l_lukascb_caption_aftercap_tl
\l_lukascb_caption_loftext_tl
\l_lukascb_caption_afterlof_tl
}
\tl_new:N \l_lukascb_caption_text_tl
\keys_define:nn { lukascb/caption }
{
loftext .tl_set:N = \l_lukascb_caption_loftext_tl,
afterlof .tl_set:N = \l_lukascb_caption_afterlof_tl,
aftercap .tl_set:N = \l_lukascb_caption_aftercap_tl,
}
\cs_new_protected:Nn \lukascb_make_caption:nnnn
{
\caption
[ #3 \tl_if_empty:nF { #4 } { ;~#4 } ]
{ #1 \tl_if_empty:nF { #2 } { ;~#2 } }
}
\cs_generate_variant:Nn \lukascb_make_caption:nnnn { VVVV }
\ExplSyntaxOff
\begin{document}
\listoffigures
\section{Main text}
\begin{figure}[!htp]
\centering
\includegraphics[width=.2\textwidth]{example-image-a}
\xcaption[
loftext=caption for LOF,
afterlof=copyright for this image,
]{caption below the image}
\end{figure}
\begin{figure}[!htp]
\centering
\includegraphics[width=.2\textwidth]{example-image-a}
\xcaption[
afterlof=the copyright,
aftercap=something else,
]{caption below the image}
\end{figure}
\end{document}
를 지정하지 않으면 loftext
기본 캡션 텍스트가 사용됩니다. 의 값은 afterlof
그림 목록에 추가되고 의 값은 aftercap
기본 캡션에 추가됩니다.
따라서 키를 사용하려면 키를 추가하기만 하면 됩니다.
의 확장인 \subcaptionbox
구문은 비슷합니다. 의 첫 번째 선택적 인수는 \subcaptionbox
옵션 목록이 됩니다.
\documentclass{article}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{xparse}
\captionsetup[sub]{list=true}
\ExplSyntaxOn
\NewDocumentCommand{\xcaption}{O{}m}
{% #1 are options, #2 is the main caption text
\tl_set:Nn \l_lukascb_caption_text_tl { #2 }
\lukascb_make_caption:Nnn \__lukascb_make_caption:VVVV { #1 } { #2 }
}
\NewDocumentCommand{\xsubcaptionbox}{O{}m}
{% #1 are options, #2 is the main caption text
\tl_set:Nn \l_lukascb_caption_text_tl { #2 }
\lukascb_make_caption:Nnn \__lukascb_make_subcaption:VVVV { #1 } { #2 }
}
\cs_new_protected:Nn \lukascb_make_caption:Nnn
{
\keys_set:nn { lukascb/caption }
{% first clear the variables
loftext = #3,
aftercap = {},
afterlof = {},
% then load the given ones
#2
}
#1 \l_lukascb_caption_text_tl \l_lukascb_caption_aftercap_tl
\l_lukascb_caption_loftext_tl \l_lukascb_caption_afterlof_tl
}
\tl_new:N \l_lukascb_caption_text_tl
\keys_define:nn { lukascb/caption }
{
loftext .tl_set:N = \l_lukascb_caption_loftext_tl,
afterlof .tl_set:N = \l_lukascb_caption_afterlof_tl,
aftercap .tl_set:N = \l_lukascb_caption_aftercap_tl,
}
\cs_new_protected:Nn \__lukascb_make_caption:nnnn
{
\caption
[ #3 \tl_if_empty:nF { #4 } { ;~#4 } ]
{ #1 \tl_if_empty:nF { #2 } { ;~#2 } }
}
\cs_generate_variant:Nn \__lukascb_make_caption:nnnn { VVVV }
\cs_new_protected:Nn \__lukascb_make_subcaption:nnnn
{
\subcaptionbox
[ #3 \tl_if_empty:nF { #4 } { ;~#4 } ]
{ #1 \tl_if_empty:nF { #2 } { ;~#2 } }
}
\cs_generate_variant:Nn \__lukascb_make_subcaption:nnnn { VVVV }
\ExplSyntaxOff
\begin{document}
\listoffigures
\section{Main text}
\begin{figure}[!htp]
\centering
\includegraphics[width=.2\textwidth]{example-image-a}
\xcaption[
loftext=caption for LOF,
afterlof=copyright for this image,
]{caption below the image}
\end{figure}
\begin{figure}[!htp]
\centering
\xsubcaptionbox[
afterlof=the copyright A,
aftercap=something else,
]{subcaption}{\includegraphics[width=.2\textwidth]{example-image-a}}\qquad
\xsubcaptionbox[
afterlof=the copyright B,
]{subcaption}{\includegraphics[width=.2\textwidth]{example-image-b}}
\xcaption[
afterlof=the copyright,
]{caption below the image}
\end{figure}
\end{document}
답변2
\caption
with xparse
를 재정의하고 등이 정의되었는지 \NewDocumentCommand
테스트하여 빠른 '해킹'합니다 \after
.
명령이 외부에 정의되지 않고 테스트가 추가 텍스트를 인쇄하지 않고 분기를 수행하도록 그림 환경 내부 \def\after{...}
또는 내부를 사용하십시오 .\newcommand{\after}
false
\documentclass{article}
\usepackage{graphicx}
\usepackage{xparse}
\usepackage{caption}
\makeatletter
\let\caption@@caption\caption
\RenewDocumentCommand{\caption}{so+m}{%
\IfBooleanTF{#1}{%
\caption@@caption*{#3}%
}{%
\IfValueTF{#2}{%
\caption@@caption[#2\@ifundefined{after}{}{\afterlof}]{#3~\@ifundefined{after}{}{\aftercap}}%
}{%
\caption@@caption{#3~\csname aftercap\endcsname}
}%
}%
}
\makeatother
\newcommand\afterlof{; \after}
\newcommand\aftercap{ }%for optional use
\begin{document}
\begin{figure}[htb]
\includegraphics[width=.5\textwidth]{example-image-a}
\def\after{the copyright for this image}
\caption[caption for LOF]{caption below the image}
\end{figure}
\begin{figure}[htb]
\includegraphics[width=.5\textwidth]{example-image-a}
\def\after{Another copyright for another image}
\def\aftercap{Some info}
\caption[caption for LOF]{Normal caption below the image}
\caption{Another caption below the image}
\end{figure}
\listoffigures
\end{document}
키-값 구문을 사용하는 대체 버전입니다. \caption
인수의 두 번째 선택적 인수에 유의하세요!
\documentclass{article}
\usepackage{graphicx}
\usepackage{xparse}
\usepackage{caption}
\ExplSyntaxOn
\prop_new:N \l_lukascb_caption_prop
\keys_define:nn {lukascb} {%
afterlof .code:n={\prop_put:Nnn \l_lukascb_caption_prop {afterlof} {#1}},
aftercap .code:n={\prop_put:Nnn \l_lukascb_caption_prop {aftercap} {#1}},
afterlofsep .code:n={\prop_put:Nnn \l_lukascb_caption_prop {afterlofsep} {#1}}
}
\NewDocumentCommand{\SetLocalCaptionOptions}{m}{%
\prop_clear:N \l_lukascb_caption_prop
\keys_set:nn {lukascb} {afterlofsep={;},#1}
}
\cs_new:Npn \retrievecaptiondata #1{%
\prop_item:Nn \l_lukascb_caption_prop {#1}%
}
% Normally a `\prg_new_conditional, but for quickness much shorter..
\cs_new:Npn \ifcaptiondatagiven #1#2#3{%
\prop_if_in:NnTF \l_lukascb_caption_prop {#1} {%
#2%
}{#3}
}
\ExplSyntaxOff
\makeatletter
\let\caption@@caption\caption
\RenewDocumentCommand{\caption}{so+mO{}}{%
\SetLocalCaptionOptions{#4}
\IfBooleanTF{#1}{%
\caption@@caption*{#3}%
}{%
\IfValueTF{#2}{%
\caption@@caption[#2\ifcaptiondatagiven{afterlof}{\retrievecaptiondata{afterlofsep}\retrievecaptiondata{afterlof}}{}]{#3~\retrievecaptiondata{aftercap}}%
}{%
\caption@@caption{#3~\retrievecaptiondata{aftercap}}
}%
}%
}
\makeatother
\begin{document}
\begin{figure}[htb]
\includegraphics[width=.5\textwidth]{example-image-a}
\caption[First caption for LOF]{caption below the image}[afterlof={\textcopyright\ By me!}, aftercap={And now for something completely different}]
\end{figure}
\begin{figure}[htb]
\includegraphics[width=.5\textwidth]{example-image-a}
\caption[caption for LOF]{Normal caption below the image}[afterlofsep={\S}]
\caption{Another caption below the image}[aftercap={Nudge nudge}]
\end{figure}
\listoffigures
\end{document}