Automatische Kleinschreibung in einer Liste

Automatische Kleinschreibung in einer Liste

Ich glaube, das ist eine sehr einfache Frage, auf die es eine sehr einfache Antwort geben könnte, die ich bisher nicht finden konnte: Wie kann man den Text für jedes Element in einer regulären LaTeX2eListe (wie enumerate) dazu zwingen, komplett in Kleinbuchstaben gesetzt zu werden? Mein Problem dabei ist, dass \lowercaseoder \MakeLowercaseBefehle ein abgegrenztes Argument erfordern, was bei einem nicht der Fall ist \item, da es als Steuersequenz funktioniert. Meine Motivation: Manchmal möchte ich, dass der Text in einer Liste von Elementen in Kapitälchen gesetzt wird und alle Zeichen den Kleinbuchstabenhöhen entsprechen, aber ich möchte dies tun können, ohne die obigen Befehle auf einemHandbuchpro Artikel. Die trivialste Antwort (geben Sie den Text einfach komplett in Kleinbuchstaben ein) ist keine nützliche Antwort, da ich denselben Text als normalen Text verwenden möchte, ohne ihn erneut eingeben zu müssen \upshape.

EDIT: Ich habe A. Elletts Vorschlag als Antwort markiert, da seine Funktionalität zu meiner Frage passt und ich ihn für einen wertvollen und sehr gut durchdachten Beitrag halte. Dennoch wäre ein einfacherer Ansatz, sofern möglich, weiterhin willkommen.

Antwort1

Diese aktualisierte Version (siehe Revisionsverlauf für ältere Versionen) erfordert nicht, dass der Benutzer seiner Umgebung irgendwelche Funktionen hinzufügt. Keine Notwendigkeit für \item*oder so etwas. Dies wird ermöglicht, indem bei \itemder ersten Iteration ein eingeschmuggelt wird und dannVerschiebung(Neudefinitionwieder) \item. Ich habe ausführliche Kommentare hinzugefügt, die es Ihnen ermöglichen sollten, den Code so zu ändern, dass er Ihren Anforderungen besser entspricht.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\makeatletter

%% We will use two versions for redefining \item                       
%% The first version is temporary and only used                        
%% for the first iteration.  It's purpose is to                        
%% allow us to slip in an \item just before the                        
%% environment is ended.                                               
\def\@ae@item@va@#1\item#2\@nil{%%
  \def\item##1\end{\@ae@item@vb@##1\@nil}%%
  \@ae@item@vb@#1\item#2\@nil}

\def\@ae@item@vb@#1\item#2\@nil{%%
  %% Don't immediately pass to \olditem                                
  %% we need to see whether there's any optional                       
  %% arguments being passed to \item                                   
  \ae@olditem #1\@nil%%
  %% If second argument is empty, then that means                      
  %% we've parsed the entire environment and should                    
  %% quit.  Restore the "\end" we stole earlier.                       
  \if\relax\detokenize{#2}\relax
    \expandafter\end
  \else
    %% We don't want to get too deeply buried within                   
    %% \if...\fi structures.  So save #2 to a macro                    
    %% then call a dummy macro, but only after first                   
    %% leaving the \if...\fi structure.                                
    \def\ae@tmp{#2}%%
    \expandafter\@@ae@continue@iterating@item
  \fi}

%% Test whether there's an optional argument.                          
\def\ae@olditem{%%
  \@ifnextchar[%]
    {\@o@ae@olditem}
    {\@@ae@olditem}}
\def\@o@ae@olditem[#1]{\olditem[#1] \@@ae@@format}
\def\@@ae@olditem{\olditem \@@ae@@format}
%% The actual formatting of the content following \item
\def\@@ae@@format#1\@nil{%%
  \bgroup\scshape\lowercase{#1}\egroup}
%% The macro handling the continuation of iterating over               
%% the \item's in the environment.  Notice the use of                  
%% \expandafter.  We don't want to pass the formatting                 
%% macro content buried into a temporary macro.  Remember              
%% the \ae@tmp was only used to help us jump out of the                
%% \if ... \fi structure.                                              
\def\@@ae@continue@iterating@item{%%
  \expandafter\item\ae@tmp\end}

\newenvironment{mylc}
  {%%
    \begin{enumerate}
    \let\olditem\item
    %% new definition for \item but only good for first iteration.     
    %% This is how we smuggle in a final \item                         
    %% just before ending the environment.  Here we                    
    %% also steal the `\end` which closes the environment.             
    %% We'll have to restore that before we're done.                   
    \def\item##1\end{%%
      \@ae@item@va@##1\item\@nil}
  }
  {\end{enumerate}}

\makeatother
\def\aerandomstuff{A random string of stuff.}
\begin{document}

  \begin{mylc}
  \item  `A' is for Amy who\ldots
  \item[<optional argument>] This line has an optional argument.
  \item  
  \item  The previous item was empty, but that won't cause us to
         prematurely terminate.
  \item  Matter buried in a macro will not be handled correctly: \aerandomstuff
  \item  This is the last line. No special mark up needed.
  \end{mylc}

\end{document}

Bildbeschreibung hier eingeben

Zum Thema Erweiterung: Das \lowercasefunktioniert nur bei erweitertem Inhalt. Alles was eingeschmuggelt wird, wie ich es mit mache, \aerandomstuffwird nicht erst in Kleinbuchstaben gesetzt.

verwandte Informationen