PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ausgabe von newcommand und Silbentrennung



DocHasenbein
13-11-2007, 16:18
Hallo,
ich habe so einige Probleme mit Latex und meiner Doktorarbeit. Da sie nicht viel miteinander zu tun haben, poste ich jedes Problem einzeln.

Ich habe ein Kommando \sequenz definiert um Nukleotidsequenzen in Fließtext und Tabellen einheitlich setzen zu können. Die Definition:


%\sequenz[sense/antisense/none]{sequenztext}
\newcommand{\sequenz}[2][none]%
{\ifthenelse{\equal{#1}{sense}}%
{\texttt{5'-#2-3'}}%
{\ifthenelse{\equal{#1}{antisense}}%
{\texttt{3'-#2-5'}}%
{\texttt{#2}}}}


Der Befehl wird zum Beispiel mit \sequenz[sense]{ATGCAT} aufgerufen und soll dann 5'-ATGCAT-3' in monospaced Font ausgeben. Das klappt bei kurzen Sequenzen auch gut, längere sollten aber an einer beliebigen Stelle umgebrochen werden. Kann ich das irgendwie automatisieren?
Ich habe schon die Trennung entsprechend der de-tex-faq prinzipiell ermöglicht:

\newcommand{\origttfamily}{}% sollte noch nicht definiert sein!
\let\origttfamily=\ttfamily % alte Definition von \ttfamily sichern
\renewcommand{\ttfamily}{\origttfamily \hyphenchar\font=`\-}

Trotzdem gibt es jetzt natürlich zwei Probleme:
1.) Stören die Bindestriche am Anfang und Ende, da sie die automatische Trennung unmöglich machen. Stattdessen "= setzen geht nicht, da es dann auch direkt so ausgegeben wird.
2.) Wird Latex wohl keine ihm geeignet erscheinenden Trennstellen finden, oder wenn doch, werden die nicht optimal sein.

Weiss jemand Rat? Vielen Dank im Voraus, David

DocHasenbein
27-11-2007, 23:11
Tja, hat wohl keiner was gewusst, oder meine Frage war zu unklar. Ich habe jetzt allerdings eine funktionierende Lösung, die ich hier veröffentliche. Vielen Dank an Norbert Schwarz, dessen "Einführung in Tex" -- als kostenloses PDF -- mir die Erarbeitung dieser Lösung erst ermöglicht hat.


%Neudefinition von \ttfamily die Trennung in Typewriter gesetztem Text erlaubt.
\newcommand{\origttfamily}{}% sollte noch nicht definiert sein!
\let\origttfamily=\ttfamily % alte Definition von \ttfamily sichern
\renewcommand{\ttfamily}{\origttfamily \hyphenchar\font=`\-}

%Das Makro TrennAlleN{N}{Text} fügt optionale Trennungen alle N Buchstaben ein.
\makeatletter
\def\trennallen#1#2{\count2=0\count1=#1\@dkRest#2\ @dkendlist}
\def\@dkendlist{\@dkendlist}
\def\@dkRest{\afterassignment\@NextZeichen\let\@dk next= }
\def\@NextZeichen{%
\ifx\@dknext\@dkendlist%
\let\@dknext\relax%
\else%
\advance\count2 by 1
\ifnum\count2=\count1%
\@dknext \-%
\count2=0%
\else
\@dknext%
\fi%
\let\@dknext\@dkRest
\fi
\@dknext}
\makeatother

%\sequenz[sense/antisense/none]{sequenztext}
\newcommand{\sequenz}[2][none]%
{\ifthenelse{\equal{#1}{sense}}%
{\texttt{5'-\trennallen{5}{#2}-3'}}%
{\ifthenelse{\equal{#1}{antisense}}%
{\texttt{3'-\trennallen{5}{#2}-5'}}%
{\texttt{\trennallen{5}{#2}}}}}

Hier mit Trennung an jedem 5. Buchstaben.