Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Großbuchstaben am Wortanfang erzeugen bei Übergabe des Texts als Argument

  1. #1
    Registrierter Benutzer
    Registriert seit
    19.04.2006
    Beiträge
    88

    Großbuchstaben am Wortanfang erzeugen bei Übergabe des Texts als Argument

    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:

    Code:
    \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

  2. #2
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.327
    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:
    Code:
    \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}

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.04.2006
    Beiträge
    88
    Perfekt, vielen Dank!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •