Warum verdoppelt sich der Parameter, wenn er in der Überschrift verwendet wird?

Warum verdoppelt sich der Parameter, wenn er in der Überschrift verwendet wird?

Ich habe einige Befehle geschrieben und kürzlich einige praktische Befehle \FSzum Hinzufügen von Abbildungsquellen hinzugefügt:

\newcommand{\FS}[1]{%
\protect\\{\protect\scriptsize{}Bildquelle: #1}}

Ich weiß nicht, ob das richtig ist (alles davon \protect), aber es scheint innerhalb zu funktionieren \caption. Leider habe ich versucht, den Befehl zu verbessern, indem ich einen optionalen Parameter hinzugefügt habe:

\newcommand{\FS}[2][Bildquelle]{%
\protect\ifthenelse{\equal{#1}{}}%
\protect\\{\protect\scriptsize{}#2}
\protect\\{\protect\scriptsize{}#1: #2}}

Wenn Sie die Variante ohne Angabe eines optionalen Parameters verwenden, wird „expanded“ #2und dann „expanded“ ausgegeben. Bildquelle: #2(Tatsächlich wird die Ausgabe auch bei Angabe des optionalen Parameters wie beschrieben dupliziert.) Beispiel:

Beispiel für doppelte erweiterte <code>#2</code>

Ich kenne mich mit TeX nicht gut genug aus, um das Problem selbst beheben zu können, selbst nachdem ich die Antworten dazu gelesen habe \protect. Wie soll der Befehl geschrieben werden?

Antwort1

Beachten Sie, dass und gruppiert werden \ifthenelse{<condition>}{<true>}{<false>}müssen . Wenn nicht, wird angenommen, dass die beiden Token nach dem und bezeichnen . In Ihrem Setup ist und ist . Sie haben wahrscheinlich nach etwas wie gesucht<true><false><condition><true><false><true>\protect\\<false>

\newcommand{\FS}[2][Bildquelle]{%
  \protect\ifthenelse{\equal{#1}{}}%
    {\protect\\{\protect\scriptsize{}#2}}
    {\protect\\{\protect\scriptsize{}#1: #2}}}

Verwendung des bedingten Tests inWie kann ich mit einfachen TeX-Bedingungen prüfen, ob ein Makrowert leer ist oder keinen Text erstellt?können Sie stattdessen definieren, \FSdass

\newcommand{\FS}[2][Bildquelle]{%
  \\
  \scriptsize
  \if\relax\detokenize{#1}\relax\else
    #1: 
  \fi
  #2%
}

Hier ist ein vollständiges Minimalbeispiel der Verwendung:

Bildbeschreibung hier eingeben

\documentclass{article}

\usepackage{caption}

\newcommand{\FS}[2][Bildquelle]{%
  \\
  \scriptsize
  \if\relax\detokenize{#1}\relax\else
    #1: 
  \fi
  #2%
}

\begin{document}

\begin{figure}
  \caption{Some caption. \FS{abc}}
  \caption{Another caption. \FS[abc]{def}}
  \caption{Final caption. \FS[]{ghi}}
\end{figure}

\end{document}

verwandte Informationen