PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Großbuchstaben am Wortanfang erzeugen bei Übergabe des Texts als Argument



trustee
09-07-2014, 16:29
Liebe Latex-Nutzer,

ich versuche, einen Text, der als Befehlsargument übergeben wird, stellenweise so zu ändern, dass alle Wörter mit einem Großbuchstaben beginnen. Für die Umwandlung in Großbuchstaben habe ich drei Pakete identifiziert, aber keines davon scheint mit einem Argument umgehen zu können. Hier ein Beispiel:



\documentclass{beamer}
\usepackage{fix-cm}

\usepackage{mfirstuc}
\usepackage{titlecaps}
\usepackage{stringstrings}

\newcommand{\inserttitlepage}[1]{
\begin{frame}
\frametitle{On frame 1, it should read ``The Basics''.}

#1

% Three partial, but non-working, solutions:
%\xcapitalisewords{#1} % From mfirstuc
%\titlecap{#1} % From titlecaps
%\capitalizetitle{#1} % From stringstrings
\end{frame}
}

\AtBeginSection{
\inserttitlepage{Lecture~\thesection: \insertsectionhead}
\begin{frame}
\frametitle{On frame 2, it should read ``The basics''. (And it does.)}
\tableofcontents
\end{frame}
}

\begin{document}
\section{The basics}
\end{document}


Hat jemand einen Vorschlag?

Beste Grüße
Sebastian van Baal

klops
09-07-2014, 17:04
Das Problem ist nicht, dass ein Argument verwendet wird, sondern was als Argument verwendet wird. Verwendet man als Argument tatsächlich einen String, dann funktioniert das schon. Du verwendest aber u. a. \insertsectionhead als Argument und das expandiert zu \hyperlink {Navigation\the \c@page }{The basics}, was selbst dann nicht mehr expandierbar ist und auch nicht von einem Befehl wie \titlecap umgewandelt werden kann. Es sollte in dem Fall ja eigentlich auch nicht der gesamte Befehl, sondern nur das zweite Argument von \hyperlink verändert werden. Genau das macht die folgende Lösung:

\documentclass{beamer}
\usepackage{fix-cm}

\usepackage{mfirstuc}
\usepackage{titlecaps}
\usepackage{stringstrings}

\makeatletter
\let\orig@hyperlink\hyperlink
\newcommand*{\caphyperlink}[2]{%
\orig@hyperlink{#1}{\titlecap{#2}}%
}
\newcommand{\inserttitlepage}[1]{
\begin{frame}
\frametitle{On frame 1, it should read ``The Basics''.}

#1

\begingroup
\let\hyperlink\caphyperlink
#1
\endgroup
\end{frame}
}
\makeatother

\AtBeginSection{
\inserttitlepage{Lecture~\thesection: \insertsectionhead}
\begin{frame}
\frametitle{On frame 2, it should read ``The basics''. (And it does.)}
\tableofcontents
\end{frame}
}

\begin{document}
\section{The basics}
\end{document}

trustee
09-07-2014, 17:57
Perfekt, vielen Dank!